Wednesday, November 24, 2010

LOVs does not reset criteria values. (Fixed in 11.1.1.4)

In a default input list of values you can set criteria to query for specific records and select a record with no problem
The problem is that if you open LOV again, even though the criteria values are cleared the results are still the same (filtered).This happens even if you change the record.
This has other side effects like, if LOV is autosubmit and if user types a valid value that does not exist in the previous filtered LOV data the value is not accepted and LOV opens displayed the previous filtered data.
Finally if you put criteria in LOV and select a value and then navigate away from the task flow, when you come back and open LOV the criteria values are shown and Reset button of LOV is not functional.
This functionality of LOVs cause much frustration to users.
Test Case :
http://adfbugs.googlecode.com/files/TestLOVsCriteria.zip

Steps to reproduce in the test case:
1. Not accepting valid values.
1 run Main.jspx
2 go to Test task flow.
3 open managerId LOV and type criteria (i.e. ‘A’ for firstName) and press search
4. Select a row and press ok
5. In LOV field, type a valid value of an employee that first name does not start with ‘A’ and press tab
Result: LOV opens showing rows of employees starting with A. User has to press Reset and search for the value again

* in 11.1.1.4 the valid value is accepted without opening the LOV. Yet if you open LOV second time the results rows are limited but not for employees starting with A.

2. Reset button does not work:
1 run Main.jspx
2 go to Test task flow.
3 open LOV and type criteria (i.e. ‘A’ for firstName) and press search
4. Select a row and press ok
5 Press button to Main (return from task flow)
6 go to Test task flow again
7 Open managerId LOV (Criteria values and results are visible from previous search
8. Press Reset Button on LOV (Nothing happens)
Result: LOV opens showing rows of employees starting with A and criteria value for firstName. User cannot press Reset to clear values and search again.

Monday, November 15, 2010

Activation creates duplicate row when primary key is populated through DB trigger ((Fixed in 11.1.1.4)

The same issue as previus post is also reproduced if Primary key is populated through database trigger and Pk attribute is defined as DB Sequence and refresh after insert.
Fusion Developer's Guide for Oracle ADF
4.10.10 How to Get Trigger-Assigned Primary Key Values from a Database Sequence

To run the test case you need to create database trigger :

CREATE OR REPLACE TRIGGER LOCATIONS_PK
BEFORE INSERT
ON "LOCATIONS"
FOR EACH ROW
BEGIN
IF INSERTING
THEN
IF :NEW."LOCATION_ID" IS NULL
THEN
SELECT LOCATIONS_SEQ.NEXTVAL INTO :NEW."LOCATION_ID" FROM DUAL;
END IF;
END IF;
END;

When you try to insert second line, first line is dublicated, when testing activation safe.


Test case

Friday, November 12, 2010

Activation creates duplicate row when primary key is populated through DB sequence (Fixed in 11.1.1.4)

We are testing if our Application Module is Activation-Safe according to:
Fusion Developer's Guide for Oracle ADF
40.10 Testing to Ensure Your Application Module is Activation-Safe
And we have many problems.
1 of them is that when we press createInsert instead of creating a new row we get the same row 2 times.

I reproduce it in a simple test case from HR schema with Countries and Locations Entities.
In Locations Entity create method I populate primary key from sequence

@Override
protected void create(AttributeList attributeList) {
super.create(attributeList);
SequenceImpl s = new SequenceImpl("LOCATIONS_SEQ",getDBTransaction());
setLocationId(s.getSequenceNumber());
}

As in
Fusion Developer's Guide for Oracle ADF
4.12.5 Assigning the Primary Key Value Using an Oracle Sequence

I check Activation-Safe by un-checking Enable Application Module Pooling in configuration.


I have a simple master Countries form and detail Locations table with CreateInsert button.
When I press CreateInsert for first time a new row is created with new sequence as locationId and I fill also other fields with values.



When I press CreateInsert again instead of getting a new rows I get 2 same rows as the first and both of them has the same new sequence as primary key.!!??


After that whatever I do on the page I get null pointer exception. (NullPointerException)
Is this a bug?

Test case:
http://adfbugs.googlecode.com/files/TestActivateSequence.zip

Friday, October 15, 2010

Number precision and conversion in query criteria

There is a strange behavior of number type fields in af:query.
I created a simple Query page from HR schema for Employees (Entity and View) with some typical criteria.
When a user type a value in a String criterion field then he is not allowed to type more characters than the precision of the field.(i.e. 25 for LastName, email)
The same apply for the LOV field (Department 4 digits)
Yet Number fields have strange behavior.No mater the precision of the Number field you can type as many digits you want.
Yet if you type up to 21 then the last 4 digits are converted to 0!!?
If you type more than 21 digits it is converted to the first digits with other 3 as decimals!?
If you type number with more than 3 decimals it is rounded to 3 decimals.

These restrictions make large numbers not usable for query criteria.
Is this a bug to be fixed?
Test case:

Sunday, October 10, 2010

ADF/SOA custom worklist viewFilter

I have managed to create a ADF application with a custom worklist region following instructions of :
Developer's Guide for Oracle SOA Suite &30.13 Creating Reusable Worklist Regions

It was not easy since
• WSRP Container is missing in latest jdeveloper 11.1.1.3
• when I deployed nothing was shown and no error in the logs.

I found out that WSRP Container seems not to be needed and that it was authorization issue.
Since the application must have security enabled, you need to give access also to task flows that comes from libraries:


Then the task list is visible and task details shows as dialog.


Yet we need to show to the user a custom view that contains Flex Fields with business logic values.
I see that there is a parameter you can pass to the worklist task flow the viewFilter:
Developer's Guide for Oracle SOA Suite &34.4 Passing Worklist Portlet Parameters
'viewFilter Specifies the selected view for which the tasks are displayed.'

Yet when I use it with values like:
value="Due Soon"
value="My Work Queues/Standard Views/Due Soon"
I get the following error:



Is this a bug or i need diferent format of value in order to filter specific task view?

I also noticed that from view menu all views shows 2 times apart from Inbox:


Is this also a bug?

Test case:
http://adfbugs.googlecode.com/files/TestCustomWorklist.zip

Friday, September 24, 2010

Making View Criteria Case Insensitive and MDS

In a previous post i had posted a workaround about making view criteria case insensitive:
http://adfbugs.blogspot.com/2010/07/making-view-criteria-case-insensitive.html
Yet this has 2 side effects.
  1. It makes values of criteria upercase.
  2. It brakes MDS save criteria functionality.


I found a simpler solution (workaround).
/**
* Set the view criteria rows to use case-insensitive querying and
* uppercase any of the non-null query-by-example criteria provided.
*/
private void doCaseInsensitiveOnStringsInViewCriteria() {
ViewCriteria[] vclist = getApplyViewCriterias(ViewCriteria.CRITERIA_MODE_QUERY);
if (vclist.length>0) {
for (ViewCriteria vc : vclist){
if (!vc.isUpperColumns())
vc.setUpperColumns(true);
}
}
}

@Override
protected void executeQueryForCollection(Object object, Object[] object2 int i) {
doCaseInsensitiveOnStringsInViewCriteria();
super.executeQueryForCollection(object, object2, i);
}
This code makes query criteria Case insensitive and also does not make values of criteria upercase.Yet it still brake MDS .
Sice we need this in LOV criteria that does not have Save search, we can prevent this code to execute in LOVs using :
if (this.getName().contains("LOCAL_VIEW_USAGE"))
doCaseInsensitiveOnStringsInViewCriteria();

Test case:
http://adfbugs.googlecode.com/files/MDSTestUpper.zip

Saturday, September 11, 2010

Validating Train Flow

A very nice option of Task Flows is the Train Task flow.

You can easily create a train task flow and add pages as Train stops and add in page train navigation and train buttons (Next/Previous) and create a wizard like navigation.

Yet many times you need to validate the input of a train stop before you go to the next one. When this validation is more complex than a required field you probably need to do it when the user tries to navigate to the next train stop.

I found a solution close to what I needed in Duncan Mills post: Executing Activities between Train Stops
http://groundside.com/blog/DuncanMills.php?blog=6&cat=18&page=1&disp=posts&paged=2
The strange thing is that you need to define an outcome on the target Train Stop activity.
Then you add a wildcard to go to a router to check your condition in order to decide to go to the target Train Stop or the source.




In my example the condition is if the Department has employees or not. If it has it go to employees page, if not it returns to department task flow.



The remaining issue is to show the appropriate message. In the example I have added it as a simple text that is visible when Department does not have Employees


Test Case:
http://adfbugs.googlecode.com/files/TestTrainValidation.zip

Tuesday, August 31, 2010

MDS saved search brakes application module browser

In order to save search criteria through MDS you need to add configuration in adf-config.xml according to Fusion Developer's Guide for Oracle ADF :
27.2.3 How to Persist Saved Searches into MDS
Yet after you do that if you try to run any application module you get exception:
(oracle.jbo.ConfigException) JBO-33003: Connection name hrconn is not defined.
and in server log:
SEVERE: MDSConfigurationException encountered in parseADFConfigurationMDS-01335: namespace "/persdef" mapped to metadata-store-usage "mdsstore" but its definition was not found in MDS configuration. oracle.mds.config.MDSConfigurationException: MDS-01335: namespace "/persdef" mapped to metadata-store-usage "mdsstore" but its definition was not found in MDS configuration. at oracle.mds.config.PConfig.populateNamespaceConfigList(PConfig.java:811) at oracle.mds.config.PConfig.loadFromBean(PConfig.java:717) at oracle.mds.config.PConfig.(PConfig.java:504) at oracle.mds.config.MDSConfig.loadFromBean(MDSConfig.java:692) at oracle.mds.config.MDSConfig.loadFromElement(MDSConfig.java:749) at oracle.mds.config.MDSConfig.(MDSConfig.java:407)
...

The workaround we found is to remove specific configuration and add it again when we want to deploy.
Is this a bug?
Test case:
http://adfbugs.googlecode.com/files/MDSTest.zip

Tuesday, August 10, 2010

MDS User customization capabilities and cost

I was investigating lately MDS user customization capabilities and cost in order to apply it to our application.
I used the following References
Guides
34 Customizing Applications with MDS
http://download.oracle.com/docs/cd/E15523_01/web.1111/b31974/customize.htm
35 Allowing User Customizations at Runtime
http://download.oracle.com/docs/cd/E15523_01/web.1111/b31974/ad_persist.htm#CIHHEHCF
13 Managing the Metadata Repository
http://download.oracle.com/docs/cd/E15523_01/core.1111/e10105/repos.htm#CIHDCHCF

Articles
http://www.oracle.com/technology/pub/articles/adf-development-essentials/part8.html

Tutorial
http://www.oracle.com/technology/products/jdev/11/cuecards111/adf_set_18/ccset18_ALL.html
Blogs
http://biemond.blogspot.com/2009/07/customize-and-personalize-your-jsf.html
http://andrejusb.blogspot.com/2009/09/persisting-query-criteria-results.html

I created a demo application:
http://adfbugs.googlecode.com/files/MDSTest.zip
Where user1/welcome1 has customizations:

And user2/welcome2 has not:

And tested also our application with MDS enabled
I came up with the following conclusions :

User customization Persist user changes through MDS is very powerful framework and all users would like to have it, yet it has it limitation and its cost:

Limitations:

1. Save Search: If you Use MDS then you need to configure also Saved search, or else you get exception when you try to save it
2. Components Not all components and attributes are persisted by default and they might override your custom business logic.



3. Deployment: New deployment file is needed (MAR) and configuration in order to define MDS repository domain. Investigation is needed for continues integration and deployment processes and update deployment scripts

Cost
> Performance
-- Increased resources needed on weblogic (memory and disc io)
-- Increased resources needed on database (mds_repository)
-- Lower response time on customisable components
> Increase testing needs
> Increase Administration needs (database, weblogic, metadata management)
> Saved search may break integration between Pages. Workaround may be needed for specific search pages. This will increase development needs
> Increase Support needs.

Wednesday, July 21, 2010

Choice list and LOV in query criteria bug (Fixed in 11.1.1.4)

We have a strange bug in our application.
When ever in query criteria we have choice list as first criterion and we have also input List of values in criteria then the input List of values does not return values.
When you open LOV and select a row the LOV closes automatically and value is not returned.

I managed to reproduce it in simple test case in HR schema with 1 choice list and 1 list of values:


The workaround is either not to use choice list as first criterion or not to have Input List of values field autosubmit = true.

Strange?

Test Case:
http://adfbugs.googlecode.com/files/TestChoiseListAndLov.zip

Friday, July 9, 2010

Making View Criteria Case Insensitive.

When you create view criteria you can easily set in each string criterion if it should be Case sensitive or not by checking or unchecking 'Ignore Case'.




Yet the default view criteria used in LOVs or criteria of fields added in advanced search are always Case Sensitive and you cannot declaratively change that.


I found a realy old post of Steve Muench for similar case in very old release of jdeveloper

http://www.oracle.com/technology/products/jdev/howtos/10g/dynamiccrit/index.html


and managed with little changes to apply it in latest release also:



Now all view criteria for string fields are case insensitive.


Note that this implementation will override any criterion you have set as Case Sensitive.
You can add this code to your base view object so that all view objects work like that.

test case:
http://adfbugs.googlecode.com/files/TestCaseInsensitive.zip

Thursday, July 1, 2010

Table input text resize while typing non latin characters/ output text not selectable

In af:table input fields have a nice animation while you type non latin characters.
As long as you type characters the width of the field becomes smaller:



I have tested with Greek and Turkish characters.
If you mouse over the field it returns to the correct width.

Is this a bug?

Also there is no way you can select a value from the output fields in order to copy it.

These are quite frustrating for the users

Test Case:
http://adfbugs.googlecode.com/files/TestTableInputOutput.zip

Monday, June 21, 2010

Always run weblogic servers as Administrator

I spend all weekend trying to install SOA suite at home.
I have a new i7 pc with windows 7 and 4G ram.
After spending hours on installing:
-->11g database,
-->Repositories with rcu (failed the first time because of database parameters processes and open_cursors must be 500)
-->Java bridge
-->Lookback adapter.
-->Weblogic 10.3.3.
-->Application development runtime 11.1.1.2 and 11.1.1.3
-->SOA Suite 11.1.1.2 and patchset 11.1.1.3

I try to run admin server and I got many exceptions … class not found … invalid variables, deployments failed.

So I thought I did something wrong and I did the hall thing again (from the weblogic part). But still the same ??!!. Then it came to me…
I right click on Start Admin server and I choose run as Administrator… and eurica!! All went smoothly.

I used the same way to open cmd windows to run managed servers:
-->first soa_server took 20 minutes to deploy all applications
-->then bam_server
Everything worked fine now.

Yet the memory consumption of my pc went to 3GB, and everything was operating really slowly after that.

So I suggest… don’t try this at home…

Monday, June 14, 2010

Range Paging in LOVs bug #9467477

Using Range Paging in LOVs is fixed in new jdeveloper 11.1.1.3.
http://adfbugs.blogspot.com/2009/07/performance-tuning-lovs-and-range.html

Yet it still has bugs, when you use LOV criteria or on dependent LOV sometimes it shows error:

java.sql.SQLException: Missing IN or OUT parameter at index:: 1 at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)

I have posted an SR for this and bug was logged #9467477 SQLEXCEPTION: MISSING IN OR OUT PARAMETER AT INDEX, IN LOV WITH RANGE PAGING, that it is also fixed for next jdeveloper 11.1.1.4 release. Thanks Didier.

I decided to post it also here since this bug is not public visible in Support (not even for me that i posted the SR.

Steps to reproduce in test case are:
1. Open Departments LOV
2. Scroll down to LOV until fethcing data message apears
3. Type in criteria for departmentId value i.e.'1' and without pressing Search select a row in LOV.SQL
Error message apears:



Test Case:
http://adfbugs.googlecode.com/files/LovRangePagingBug.zip

Monday, June 7, 2010

Entity Security (jdeveloper11.1.1.3 Functionality Change)

After Migration to new jdeveloper we found out that users that had no permissions to update entities could insert and save new records!!!???

I managed to reproduced in a simple test case with 1 entity Jobs on an editable table.
I have enabled security and I have 2 roles ‘UpdateJobs’ and ‘ViewJobs’.

I have added authorisation to entity update and delete for role UpdateJobs.


When I loggin with a user that just have ViewJobs role table rows comes read only and Delete button disabled.


Yet CreateInsert button is enabled and if I press it new row is created with updatable attributes that I can also save it without a problem.

Before last patch you could still create new row but it was not updatable.
Is this a bug?

Test case:
http://adfbugs.googlecode.com/files/TestInsertSecurity.zip
password for User and Manager : welcome1

Wednesday, June 2, 2010

ADF Client Tag Libraries of weblogic 10.3.3 installation are diferent from jdeveloper11.1.1.3

Latest weblogic 10.3.3 installation and jdeveloper11.1.1.3.0 installation software
http://www.oracle.com/technology/software/products/middleware/index.html

have different adf faces component ligraries.

We found it the hard way.
We used the new feature of popups the autoCancel property.
Even though in embeded weblogic is working, when we deployed we had a jsp compilation error:

Error message: Failed to compile JSP /pages/bill/billissue/billIssue.jspxbillIssue.jspx:792:23: This attribute is not recognized. autoCancel="disabled"> ^--------^ Error type: class weblogic.servlet.jsp.CompilationException

by searching the differences we found out that
Oracle/MiddlewareR1P2/oracle_common/modules/oracle.adf.view_11.1.1/adf-richclient-impl-11.jar!/META-INF/afu.tld
in jdeveloper 11.1.1.3
is different than
wsl_middleware/oracle_common/modules/oracle.adf.view_11.1.1/adf-richclient-impl-11.jar!/META-INF/afu.tld
of the weblogic 10.3.3. installation
The weblogic afu.tld does not have the autoCancel property

We hope that by just copying the jdeveloper11.1.1.3 adf-richclient-impl-11.jar to weblogic the problem will be fixed.

Unfortunately, just copying the jar did not solve the problem

Test Case: http://adfbugs.googlecode.com/files/TestAutoCancelPopup.zip

SR posted :3-1820014361

It seems that you need to manual install on latest weblogic 10.3.3. tha latest adf runtime libraries.
You can find how to on:
Oracle Support Knowledge base Note [ID 1094153.1] Installing ADF 11.1.1.3 Runtime Into FMW 11gR1 Patchset 2
or http://theblasfrompas.blogspot.com/2010/05/installing-adf-runtime-into-fmw-11gr1.html

Monday, May 31, 2010

Choise list in popup turn to null after submit (Fixed in 11.1.1.4)

After migration we have strange behavior in popups with choise list, file upload and other components.
I managed to reproduce it in a simple test case with a table and a Edit popup with a simple choise list.
The first time i open popup it looks ok

If i press 'Submit' button (full submit) the popup is closed as expected since it is autoCancel enabled.

But if i open popup again, then the coise list is empty!!??


This causes other side effects. I.e. if you have partial trigger in popup components from page table, then when you change a line after you have closed popup with submit you get the following error:



The following does not happen if you press the ok/cancel dialog buttons or x button.

The workaround we are using is not to use full submit buttons in popups, and close popup programaticaly in backing bean:

public void closePopUp(String popUpId){
FacesContext facesContext = FacesContext.getCurrentInstance(); ExtendedRenderKitService service = Service.getRenderKitService
(facesContext, ExtendedRenderKitService.class);
service.addScript(facesContext, "AdfPage.PAGE.findComponent('templateid:"+ popUpId
+"').hide();");
}


Also with autocancel = enabled, then a partial submit button and a partial trigger on popup or on parent component will close the popup without problem.

Test case:
http://adfbugs.googlecode.com/files/TestPopup.zip

Wednesday, May 26, 2010

Single Row LOV in Query Criteria Bug (Fixed in 11.1.1.4)

When List of values has only 1 row then in query criteria you cannot set input to null after the first time you set a value.

To reproduce in the test case of Employees with Departments LOV i set where clause of DepartmentsView rownum=1.

I assign DepartmentsView as LOV in Employees.DepartmentId attribute and set it to autosubmit.

I put DepartmentId in query criteria of Employees.

I create a simple query panel with results table for Employees and i run application:


Steps to reproduce:
1. open DepartmentId LOV and select value. press tab or search
2. delete value of DepartmentId and press tab or search
Result: value is not deleted from LOV field. and search still has the criterion.

Only way to make value null is to press reset button.

Is this a bug?

Test Case:
http://adfbugs.googlecode.com/files/TestSingleRowLOV.zip

Friday, May 14, 2010

ADF and DBA have 2/3 letters in common

I was doing DBA work this week. We installed our application in different schema and the performance dropped to hell.

The View objects queries that we spend a lot of time tuning in previous schema now they had different execution plan.

So I check the instance properties and I see OPTIMIZER_MODE=ALL_ROWS.
This option means that when you do a query the optimizer thinks that you are trying to retrieve all data from the query so it check the statistics to find the best plan to retrieve all rows usually by full table scans. The all_rows mode is generally used during batch-oriented processing and for data warehouses where the goal is to minimize server resource consumption.

This is not the case in our application and I guess in most ADF applications. I changed it to OPTIMIZER_MODE=FIRST_ROWS. The first_rows optimizer_mode is generally used in online system where the end-user wants to see the first page of query results as quickly as possible. This had a huge positive effect in the performance of our fusion application.
May be this is considered basic for DBAs but it seems that ADF developers should know also in order not to loose time tuning view objects in a wrong configured database.

Thursday, May 6, 2010

User principal is not propagated to Middle tier. New bug on 11.1.1.3. (Fixed in 11.1.1.4)

It may be strange that a new bug like that is introduced in a bug fixing release but it can happen to the best also.

After Migrating to jdeveloper 11.1.1.3.0 you will notice that application module method getUserPrincipalName() return always ‘Anonymous’ and history columns for user are populated with null. Andrejus Baranovskis have posted about it, Steve Muench logged on Oracle Metalink - bug# 9672139 and a workaround is posted also in the comments that we also use and seams to solve the problem.
I post it also to follow upe with it.
On our base Application Module class we override the prepare session and:

@Override
protected void prepareSession(Session session) {
String contextUser = ADFContext.getCurrent().getSecurityContext().getUserName();
String envUser = (String)session.getEnvironment().get(PropertyMetadata.USER_PRINCIPAL.getName());
if (!envUser.equals(contextUser)) {
session.getEnvironment().put(PropertyMetadata.USER_PRINCIPAL.getName(),contextUser);
}

super.prepareSession(session);
}

Tuesday, May 4, 2010

Still reproduced bugs in jdeveloper 11.1.1.3

I went through previus posted bugs and verified that the following defects are still reproduced in new version of jdeveloper:

*Attribute Validation on Input List of Values attribute
http://adfbugs.blogspot.com/2009/11/attribute-validation-on-input-list-of.html

Page Fragment Design view is messed up when using resource bundle
http://adfbugs.blogspot.com/2009/10/page-fragment-design-view-is-messed-up.html

Workaround for Page Fragment Design view when using resource bundle
http://adfbugs.blogspot.com/2009/11/workaround-for-page-fragment-design.html

Number precision and scale bug
http://adfbugs.blogspot.com/2009/10/number-precision-and-scale-bug.html

Tab selection and Enable User Customization on Session bug.
http://adfbugs.blogspot.com/2009/09/tab-selection-and-enable-user.html

Unsaved changes uncommittedDataWarning bug
http://adfbugs.blogspot.com/2009/09/unsaved-changes-uncommitteddatawarning.html

*ExecuteEmptyRowSet and Range Paging.
http://adfbugs.blogspot.com/2009/09/executeemptyrowset-and-range-paging.html

Table Filter Bug
http://adfbugs.blogspot.com/2009/08/table-filter-bug.html

Returning from dialog to a page that has f:verbatim tag bug
http://adfbugs.blogspot.com/2009/08/returning-from-dialog-to-page-that-has.html

*Range paging and Table Selected Row Bugs
http://adfbugs.blogspot.com/2009/07/range-paging-and-table-selected-row.html
*** even though related metalink bug 8673654 is marked as fixed for this version

*Partial Page Rendering ChangeEventPolicy="ppr" bug.
http://adfbugs.blogspot.com/2009/07/partial-page-rendering.html

Setting value programmatically on required field.
http://adfbugs.blogspot.com/2009/11/setting-value-programmatically-on.html

*Composition Association and Locking
http://adfbugs.blogspot.com/2009/12/composition-association-and-locking.html

*Bind Variable and View Criteria in view with range paging bug
http://adfbugs.blogspot.com/2010/02/bind-variable-and-view-criteria-in-view.html

*Rollback does not refresh current row of af:table after validation errors.
http://adfbugs.blogspot.com/2010/03/rollback-does-not-refresh-current-row.html

Removing a LOV return value leaves garbage in view object
http://adfbugs.blogspot.com/2010/03/removing-lov-return-value-leaves.html

Type Map change corrupt project metadata.
http://adfbugs.blogspot.com/2010/04/type-map-change-corrupt-project.html

Unique Key Validator on Entity does not work correctly
http://adfbugs.blogspot.com/2010/04/unique-key-validator-on-entity-does-not.html

Auto Submit does not set the value in bindings if you navigate with mouse
http://adfbugs.blogspot.com/2010/04/auto-submit-does-not-set-value-in.html

From the above i consider more important those with * since there is not an easy workaround or have big effect on functionality.

Monday, May 3, 2010

Fixed Defects in 11.1.1.3

I went through previus posted bugs and verified that the following defects are fixed in new version of jdeveloper:

LOV execute query many times
http://adfbugs.blogspot.com/2009/08/lov-execute-query-many-times.html

Range Paging in Master Detail bug.
http://adfbugs.blogspot.com/2009/08/range-paging-in-master-detail-bug.html

Af:Query bind variable bug
http://adfbugs.blogspot.com/2009/08/afquery-bind-variable-bug.html

LOV view object Tuning: 'Only up to row number' bug
http://adfbugs.blogspot.com/2009/08/lov-view-object-tuning-only-up-to-row.html

Query Component Required Criterion bug ( r1 Bug)http://adfbugs.blogspot.com/2009/07/query-component-required-criterion-bug.html

New Bind Variable and View Criteria bug
http://adfbugs.blogspot.com/2010/01/new-bind-variable-and-view-criteria-bug.html

Selectively required criteria in LOV
http://adfbugs.blogspot.com/2010/01/selectively-required-criteria-in-lov.html

Required Criterion on Choice List type Attribute.
http://adfbugs.blogspot.com/2010/01/required-criterion-on-choice-list-type.html

These are quite important Fixes for us since they improve LOV functionality that we commonly use and view criteria. They also improve the performance of these controls.

Wednesday, April 28, 2010

A new version of JDeveloper is out: JDeveloper 11.1.1.3.0 (Build 5660)

A new version of JDeveloper is out: JDeveloper 11.1.1.3.0 (Build 5660)
You can download it from OTN.
New features and bugs fixed list is available [Here]

It is mostly a bug fixing release.
some bugs reported as fixed seems to be related to bugs of this blog:

8975151 RFI:UNABLE TO USE VO RANGE_PAGING OPTION IN LIST OF VALUES

D8B2-BLK:PRJ:LOV THROWING NPE AFTER DISABLING AMPOOLING.

9149095 RFI: RANGE PAGING JSF PAGE RETURNS TOTAL ROW COUNT IN GETFETCHEDROWCOUNT()

I will walk through the bugs reported till now and try to reproduce them in new release and i will post a list of fixed and still reproduced bugs

Wednesday, April 21, 2010

Inserting new rows as last row of table

By Default when you add a new row on table (or view object) it is added before the current selected row.

End user requirement was that when we press Insert the new row should be added as last row no matter which is the current row.

This is implemented by overriding the View Object method insert(row).
/**
* Insert new Rows at the end of RowSet.
* @param row
*/
@Override
public void insertRow(Row row) {
//go to the end of Rowset if it has rows
Row lastRow = this.last();
if (lastRow != null) {
//insert new row at the end and make it current
int indx = this.getRangeIndexOf(lastRow) + 1;
this.insertRowAtRangeIndex(indx, row);
this.setCurrentRow(row);
} else { // empty Rowset
super.insertRow(row);
}
}

Note: This could cose performance issue when inserting new rows on very large tables.

Don’t forget in table components to always set displayRow="selected" so that the new row to be visible no matter how many rows there are.




Test Case:
http://adfbugs.googlecode.com/files/TestNewRowAtEnd.zip

Friday, April 16, 2010

Auto Submit does not set the value in bindings if you navigate with mouse (Fixed in 11.1.1.4)

Auto Submit does not set the value in bindings if you navigate with mouse.

You can test that by debuging an input field by typing a value and go to an other field using mouse, the setter of the field is not called. Yet the value change listener is invoked.


This causes problem in dependent components also since they will be recalculated with the old value.


For example in dependent LOV by navigating away from the dependant field with the mouse it does not cause the LOV to re-execute with the new value so you may have validation error even if the value of LOV field is correct, or you may have wrong filter in LOV.



Test Case:
http://adfbugs.googlecode.com/files/TestAutoSubmitMouseNav.zip

The workaround we use in such cases is since the value change listener of DepartmentId is invoked to explicity set also the binding field value there. Like:

ADFUtils.setBoundAttributeValue("DepartmentId", valueChangeEvent.getNewValue());

Monday, April 12, 2010

Unique Key Validator on Entity does not work correctly

Unique Key Validator on Entity does not work correctly. Even if you have valid data in your entities, since it checks also database values it shows validation error.
Also after that in table components validations messages does not show after a refresh of browser, data change automatically to database values without showing an error.

For example in simple department Entity i create an alternative Key for DepartmentName to be unique.


Then i add an entity Unique Key Validation for this key:


I run a page with departments table and i create 2 departments
1 Dep1
2 Dep2


If i change department 1 name to dep2 then i correctly get the validation error:



But if i change department 2 to dep1 then i get unique validation errors even if both values in entities would be unique.


This could be logical for the developer since he knows that each row is validated seperately but not for the user.

Also if i refresh page in browser then if i do the same thing i dont get validation errors.
If i commit new values are not saved and database values are displayed back.


Is this working as expected?
Test Case:

Tuesday, April 6, 2010

Type Map change corrupt project metadata.

According to Type Map description :For an application running against an Oracle database, you can usually accept the default. Note: You can select the type map only when you first initialize your business components project.


Yet the developer still can change it at any time. At first it shows disabled but if you click something else and click Bussiness Components tab again then you can change it.

If you change it to java, then Entity attributes are generated with types like (BigDecimal instead of oracle.domain.Number, java.sql.Date instead of oracle.domain.Date)
If you change them to oracle types then at some adf components you get ClassCastExceptions.

If you try to chance Type Map to ‘Oracle’ again then you cannot. Even though it shows in project properties changed if you close and re-open it is still ‘Java’.

The only way to change it back to ‘Oracle’ is to open .jpx project file and to manually remove the xml entry --Attr Name="_jbo.TypeMapEntries" Value="Java" –

Tuesday, March 30, 2010

Oracle ACE awarded

I was recently nominated by Steve Muench and awarded with the Oracle ACE title.



I would like to thank Oracle and especially Steve for this recognition of my efforts to contribute to Oracle community my experience on Oracle products

This blog has been proven to be quite helpful to people working on ADF framework since they can find bugs and workarounds to save them time while developing fusion applications.

It has also helped to submitting bugs on Oracle Support and improving the framework,

I definitely try to do constructive criticism on the framework, as I feel very strongly about its potential and I hate to see it being compromised by implementation or occasional design issues. Fact is, there is nothing like it out there for rich client web development.

I am glad that Oracle people also see it this way and I will continue this effort to the best of my abilities.

Wednesday, March 24, 2010

Removing a LOV return value leaves garbage in view object (Fixed in 11.1.1.4)

We had a strange bug that was really hard to find. We found some garbage in View objects that we could not find out how they were created. Yet I manage to reproduce it by removing a return value from Edit List of values wizard. In more detail :

When you have an LOV with 1 return value then the xml in the view object is like:



When you add a second return value from LOV by edit wizard:



Then the View object XML is like:


If from the same wizard I remove the second value then unfortunately the xml does not return to the initial state. It still has the DerivedAttrNames :





This causes various bugs in interface that are not easy to find, since nothing is displayed in log:


The workaround is to remove garbage by hand from xml.

Test case: