Developer Tools
JDeveloper
last updated: 26-APR-10
This is the Developer Preview version of Oracle ADF Mobile client, which is available as a separate download from the JDeveloper Update Center.
These release notes provide a list of known issues for ADF Mobile Client. As new issues arise, they will be added to this document.
We welcome and encourage your feedback. Your input helps us make the product better. Please use the
JDeveloper community discussion forum
on OTN for questions and answers, as well as to let us know what you think
!
The default path for creating an ADF Mobile Client application is to first start with an existing ADF application (as Base ADF Application), and import the Base ADF Business Components into the Mobile Client Model project. It is possible to create an application based on a database schema, but certain limitations exists:
For any questions, please utilitize JDeveloper forum to ask questions relating to create applications directly from tables.
If you want to create an application that uses a local database that does not synchronize with a server database (for example use DB as a data cache), please review ADF Mobile Client Developer Guide on how to use the DB Script initialization feature to create/initialize database when application starts up. See the ADF Mobile Client documentation appendix titled "Initializing a Database with a SQL Script".
Also, you can create a database-less application that does not have any ADF BC components, or have static View Object/App Module components. This is not completely tested for the developer preview, and please utilize JDeveloper forum if you encounter any issues, as well as some trial-and-error.
While you can successfully create a web services data control in JDeveloper within an ADF Mobile Client project, currently there is no Web Services support in the run time. Web Services data control will be ignored. You can, however, directly call the Web Services APIs as supported by the mobile device operating system, using any Java extension mechanism supported by ADF Mobile Client.
Many of the ADF Mobile Client Business Components classes and packages have identical names to their ADF Faces counterparts (i.e., oracle.jbo.*). This is also true of the ADF Model classes and packages. Because of this naming conflict and because references to the server libraries may appear in the Libraries and Classpath of and ADF Mobile Client project, when you go to Javadoc from Java source code, the system may pull up the Javadoc for the server libraries. To fix this, go into Libraries and Classpath and ensure that the ADF Mobile Client Libraries are first in the list.
There is currently no interactive UI designer for ADF Mobile Client application creation. You can see how a page looks like in the "Preview" tab, but the Preview tab is not interactive. If you try to drag/drop elements into the preview tab, nothing will happen. Please use the structure pane or source tab to create your page, and use Preview tab to see how a page may look like.
A table column can only contain one child element, and the workaround is to use a containing panelGroupLayout first, and then place multiple UI elements into the panelGroupLayout. If you attempt to, for example, drag and drop an UI control from one location into the table column, you will get the visual cue that you would be able to drop the control into the column. However, if you do, the UI control will be removed from the original location, but will not be added to the table column. This may result in lost code definition.
Workaround is to create a new column, add a panelGroupLayout to the newly created column, and then drag/drop UI elements into the panelGroupLayout.
If you drag a Data Control method to the .MCX structure window or source view and drop it, it will give you the option to create a Form. While the design time will allow you to drop the method and create the form, it will not be recognized by the ADF Mobile Client runtime, and may result in error.
Methods defined for these events are not called. Methods defined for onLoad and onShow are called correctly.
The icon attribute on commandButton allows you to enter data in it, but it is not currently support by the ADF Mobile Client run-time. The button will still show up as just a button when you run the application. Currently there is no support that would allow you to specify an icon or image to act as a command button.
The "justification" attribute for UI controls generally works on Windows Mobile version of the ADF Mobile Client run-time. However, it does not work consistently on BlackBerry version of the client.
The "verticalJustification" attribute for UI controls do not work for all platforms.
Setting these attributes in the design time may give developer the visual cue that it is working properly, but during run time, these attributes will not work correctly as described above.
On BlackBerry, when an InputNumberSpinbox is too narrow to display the full text of the choices within it without word-wrapping, the client runt time will throw an exception that prevents further use of the control. The workaround is to set the "width" attribute to a value wide enough to display all choices without word-wrapping.
In the ADF Mobile Client page, bindings tab, you will see a tab called "Contextual event". This is not supported by ADF Mobile Client, and setting any event in the editor will not have any effect.
Page bindings in the page def file are not automatically deleted when the UI components that reference them are removed from the page. For example, if you drop an attribute from a DataControl as an inputText control, an entry will be created in the associated pagedef file that declares a binding to that attribute name. You can see this if you open the pagedef designer, there will be an attribute binding of that name in the leftmost column in the visual editor.
If you later remove the inputText from your page in the source or structure editor, the binding element will remain in the pagedef file. This should not cause any functional issues in your application, but these "orphaned" binding objects can waste resources. You can delete these binding objects manually in the Binding editor.
When you create a table or form using Data Control drag and drop method, you have an option to remove certain attributes from the data control, so only a subset of attributes would be created in a table control. Please note that while the UI controls will have the correct list of attributes, the corresponding data bindings will contain all of the attributes from the source data control. For example, if there are attributes a, b, and c in a data control, and you select a and b while dragging and dropping the data control to create a table in a page. While the page will only have column a and b, the corresponding tree binding will contain attributes a, b, and c.
While this should not result in any runtime error, it may introduce unnecessary performance overhead. The workaround is to edit the corresponding tree binding so it only contains the attributes that are needed in the table.
When you drag and drop a data control to a page to create a form or table, each attribute can only be created as inputText, outputText, and inputDate. The correct behavior is that, if an attribute is backed by a VO attribute that has LOV already defined for it, then selectOneChoice should also be offered as an option for that attribute. To work around this limitation, you will need to manually drag and drop the individual attribute into your page, at which time you will be offered an option to create the attribute as a selectOneChoice.
When you drag and drop a data control to the page to create a table, you will be unable to directly create columns containing selectOneChoice control, even if the corresponding attribute is backed by a LOV in the View Object. If you attempt to work around this limitation by removing the inputText control created by the wizard, and drag/drop the attribute again into the column as selectOneChoice, the resulting binding is incorrect and will require some manual fixup as below.
1. After you drag and drop the LOV attribute into a table column, the initial binding will have the construct "bindings.listEnabledAttributeName.inputValue". This will not work. You will need to change the .MCX file as:
In the table element, change the inner component of the appropriate column element to a selection based component, with the appropriate EL expressions-
<amc:column ... >
<!-- original
<amc:inputText value=
"#{row.bindings.listEnabledAttributeName.inputValue}" />
-->
<!-- change to -->
<amc:selectOneChoice value=
"#{row.bindings.listEnabledAttributeName.inputValue}">
<amc:selectItems value=
"#{row.bindings.listEnabledAttributeName.items}"/>
</amc:selectOneChoice>
</amc:column>
2. Changes to the Pagedef file:
First check to see if the list binding below has been created in the page binding (look in the source of the pagedef file). If it's not created, then create a "list" binding element as a child of the "bindings" element and associate it with the desired LOV name id (should be something like "LOV_attributeName") defined on the View Object:
<bindings>
...
<!-- added list binding -->
<list IterBinding=
"-iteratorID-" StaticList=
"
false"
Uses=
"-LOVID-" id=
"-listBindingID-" DTSupportsMRU=
"
true"
/>
3. Now, in the pagedef file, locate the 'tree' binding that corresponds to the table on the.MCX page. Inside that element will be a series of 'Item' elements for each. Locate the Item element for the appropriate attribute and add an attribute named "Binds" to it. Set the value of that attribute to the "id" of the list binding you created in the first step.
<bindings>
...
<!-- added list binding -->
<list IterBinding=
"-iteratorID-" StaticList=
"
false"
Uses=
"-LOVID-" id=
"-listBindingID-" DTSupportsMRU=
"
true"
/>
...
<tree ...>
<nodeDefinition ...>
<AttrNames>
...
<Item Value=
"-listEnabledAttributeName-" Binds=
"-listBindingID-"/>
<!-- add Binds attribute that references list binding -->
Only dynamic and model-driven lists bindings defined in page bindings (pagedef.xml) are supported for the Developer Preview release. You will be able to use design time to define a list binding based on static lists, but during run time, this list binding will not work properly.
The workaround is to specify the static list by using selectItem control in a page(page.mcx):
<amc:selectOneChoice value=
"#{bindings.OrderStatusCode.inputValue}" id=
"selectOneChoice1">
<amc:selectItem label=
"DisplayValue1" value=
"StaticValue1"/>
<amc:selectItem label=
"DisplayValue2" value=
"StaticValue2"/>
<amc:selectItem label=
"DisplayValue3" value=
"StaticValue3"/>
</amc:selectOneChoice>
This element should normally be present on designer generated pagedef list binding elements, but can disappear if its value is set to "default" via
the property inspector. The absence of this attribute will currently crash the runtime when it parses the pagedef.xml file.
The other possible values for this property, "multiSelect" and "navigation", are not presently supported.
While designer may seem to support it, you cannot define a Managed Bean that takes in an input parameter, and then use EL Expression to pass the parameter into the Managed Bean. EL expressions that reference a managed bean's "set" accessor method will not pass the value directly to the accessor method for the preview release. This can be worked around by passing the value indirectly to the Bean method through the applicationScope variable container.
It is a common requirement for developer to want to get or set the value of an attribute/property for any UI components on a page. For example, developer may wish to write code to change the width of a table component from "100 pixel" to "200 pixel" based on device's display width or some coding logic. However, in the technical preview, none of these UI component's attributes can be accessed nor set in a Managed Bean code.
Workaround is to set the value of the UI component attributes to an EL Expression that can be evaluated when the page is displayed, or base the value on an applicationScope variable that's set in a Managed Bean. For example, you can write set the value of an attribute to an EL expression that evaluates to the desired value, if the logic is not too complex. If logic is complex, you can write a Managed Bean that would set an applicationScope variable to the desired value, and then specify the UI component's attribute to use the value of that applicationScope variable.
The ADFmc framework currently only supports the use of the JDBC Positional style of Binding Variables in View Objects. When creating a View Object, even if you don't manually create a Binding Variable, ensure the Binding Variable style is set to "JDBC Positional" so that framework generated bindings (from ViewLinks) use the correct style.
Groovy Expressions are not supported by ADF Business Component for an ADF Mobile Client project. While the ADF BC editors appears to allow developer to define Groovy expressions, they will not work during run time. This means that any feature that has the title "expression builder" in the ADF Business Component editors should not be used.
For validation rules, this means that Expression-based validation will not work. If the out of box validation types cannot meet your requirement, please use method validation by creating Java Implementation Class for the Entity Object. Please see the ADF Mobile Client developer guide section titled "Extending ADF Mobile Applications with Java" for details.
1. If you receive a method not found exception when you test the application module by running JDeveloper's Business Component Browser, you must rearrange the model project's classpath entries as follows:
1.2 If you receive a deployment error for generated impl class delete a Java class named: VOClient.java.
Update the Appmodule class to delete the entry of the referenced Client.java class. Something like the line below would need to be deleted:
ClientProxyName="model.client.AppModuleClient"
1.3 Re-deploy and run the app with no issues.
2. A client interface generated from the appmodule impl class, cannot be used directly in the view. We need to use a backing bean to use this method via the 'invoke' method.
When you creates any method-based validation for any Entity Object, the ADF BC Browser/Tester will not work. This is a limitation that will be fixed in future release, and unfortunately there is no workaround at this time. The cause of the issue is that currently method-based validation for Entity Object in a mobile application requires some special mobile client only classes, and these classes are not available to the BC Tester. The BC Tester will only work after you have removed the EO validation methods.
Validation rules and control hints are not automatically carried over when Entity Objects are imported using the ADF Mobile Client Business Components from Entity Objects wizard. They must be re-defined for the Mobile Client application.
If the entity object from the base ADF application does not have PK defined on column other than ROWID, the resulting MC EO after import will not have PK as ROWID is not imported. This will force the user to add the PK to the EO, because the EO without PK will not compile. However, if the user creates a PK that is different from the EO, the publication or sync will fail. Correct action is:
1. Abort Create BC from EO wizard
2. Remove PK from ROWID column in base EO
3. Add PK on a column that is not ROWID data type
4. Re-deploy the base app to ADF library
5. Import base BC to mobile client app using Create BC from EO wizard
Once you have gone through the data publication process to generate the Publication and Publication Items in Oracle Lite Mobile Server, you can never change the primary key in either base ADF or ADF Mobile Client Entity Objects, and re-publish data successfully. This is because Oracle Lite Mobile Server remembers the primary keys from the initial data publication, and expects the same set of primary keys for the same set of tables. The only workaround is to use Oracle Lite Mobile Workbench to manually remove the publication and publication items, and then remove/re-create the application data schema.
Make sure Entity Objects imported to Mobile Client application is based on a table, and not based on a database view. A publication items is created for all MC EO, but there are complicated requirements to create a publication item on a database view, and it is recommended not to created publication items for a view. Only way to avoid creating publication item for view is not to import view based EO from base application.
Even if the ADF Mobile Client Entity Objects does not include the attribute, if any column in base Entity Objects that are imported to ADF Mobile Client application uses unsupported column types as considered by Oracle Database Lite, the publication will fail.
Make sure all columns in base Entity Objects that need to be used in Mobile Client application use Oracle Lite supported column. For details, please review the Oracle Data Lite documentation at
http://www.oracle.com/technology/documentation/database10gR3.html
.
Currently there are a large number of limitations around the features supported by ADF Business Components in the ADF Mobile Client - for example, Groovy Expressions are not supported. However, the editor will allow developer to define Groovy Expressions. These will be addressed in a future release. Please consult ADF Mobile Client Developer Guide for details of what's supported and unsupported.
Since a transient attribute is not based on a column, the corresponding imported attribute does not have a column type. To indicate that the column is not backed by any column, the import wizard inserts "$none" in the column type field for the attribute. User must manually edit the column name and column type fields to appropriate values.
ADF Mobile Client developer can create View Object based on a custom SQL statement that's not backed by an entity object. However, developer should keep in mind that, if a data attribute is not defined in any Entity Object, then the data will not be synchronized down to the client database. This is because entity objects define what sets of data are synchronized down to the device database.
When you work with View Objects in a ADF Mobile Client project, by default you are working against the server database, which may contain data that are not synchronized down to the client. Therefore, you may write a SQL statement that works during design time (against Server DB), but would fail during runtime (against client DB). The workaround is to make sure that, whenever you write custom SQL to define a View Object, make sure all attributes referenced in the SQL statement are defined in the Mobile Client Entity Object.
An absolute path to the base ADF Library (from the base ADF App) is encoded in the ADF Mobile Client Entity Object definitions. If the file location of the base ADF Library jar file is moved, you must manually update the file location in the client Entity Object. To do that, you will need to open the source of all Entity Object files in the source editor, find the reference to the ADF Library JAR file, and update them.
Workaround is not to change the path to the base ADF Library jar file.
The Mobile Business Component Creation wizard will allow users to progress to the second step in the process even of the database connection defined in the first step is invalid. Users are strongly encouraged to test the database connection in step 1 to ensure it is valid before proceeding to subsequent steps.
BigDecimal type is not supported for ADF Mobile Client Entity and View Object attributes, as java.math.BigDecimal is not a supported class in the ADF Mobile client runtime for Developer Preview. In certain scenarios, you may see BigDecimal type attributes created. If so, please change these attribute type to "number" or "integer".
Input Parameters for the Task Flow of ADF Mobile Client are not supported. If developer wishes to specify some attribute/parameters when starting an application/entering a task flow, initialize the value on the first page of the application.
Currently ADF Mobile Client only support one definition of task flow. While developers may be able to create more than one task flow, only one task flow will be recognized by the ADF Mobile Client runtime.
ADF Mobile Client applications only recognize the task flow with the name defined in the <Mobile Client Project>/Application Sources/META-INF/adf-config.xml file. If you have changed the file name of the task flow, then you must update the "root-task-flow" element of the adf-config.xml file with the correct file name. For example, <amc:setting name="root-task-flow" value="MyUpdatedFileName-task-flow.xml" xmlns=""/><amc:setting name="app-name" value="ADFMCSampleApp" xmlns=""/>
Deployment profile names can not contain a dash ('-') if you are deploying the application to BlackBerry. An application deployment file
name (COD for BlackBerry) containing a dash will not appear on a BlackBerry device or simulator.
To debug an application on the Blackberry simulator, the .debug files for the application are needed, but are not copied to the simulator automatically. To be able to debug, copy the .debug files ( .debug) from the <App name>/MobileClient/deploy/<Deployment profile name> folder to the BlackBerry simulator directory. Restart the simulator.
When building a project that contains no Java files, JDeveloper will create a Dummy.java file and add it to the project being built. This is done to satisfy a requirement imposed by the Blackberry compilation tool chain. The contents of Dummy.java should not be modified. If the file is deleted, it will be recreated the next time the developer builds the application. There is no harm in leaving this file as is.
Mobile server needs to be up and running when a publication is re-deployed after schema change (adding or deleting column in Entity Object) so that the mobile server cache is reset. Deployment of data publication resets the mobile server repository cache, but if the log message window does not indicate successful cache reset, the mobile server should be restarted manually. Subsequent sync may fail if the cache is not reset correctly.
During the data publication process, JDeveloper-ADF Mobile Client extension will attempt to automatically reset the cache of the Mobile Server. This reset will fail if Mobile Server is not residing on the same machine as JDeveloper. While it is NOT necessary for Mobile Server and JDeveloper to co-locate on the same machine, developer/administrator must manually reset the cache of the mobile server, if the mobile server is running at the time of data publication. To reset cache, restart the Mobile Server. You can also reset cache without re-start the mobile server. To do that, you must first allow reset of cache by changing a configuration file, and then use a browser to issue a reset cache call. Please consult Oracle Lite documentation for details. (
http://download.oracle.com/docs/cd/E12095_01/nav/portal_booklist.htm
)
You must not change the database name after the data publication is deployed.
ADF Mobile client applications must synchronize against the same Oracle Database instance as the one where the Mobile Server repository resides. While you may synchronize against multiple server database schema, they must all reside in the same Oracle DB instance.
Please refer to ADF Mobile Client Developer Guide for support.
Please note that the Database Connection in the Deployment Profile - Application Data Publication tab is pointing to the Oracle Lite Mobile Server DB repository. Default schema owner name, for example, is "MOBILEADMIN". Do not specify application data schema to this database connection. If you do, then data publication will not work.
Please also verify that the connection to Oracle Lite Mobile Server database repository is valid. Mobile Server database repository is where Oracle Lite Mobile Server stores all synchronization rules (Publication, Publication Items, etc), NOT where the application data resides.
The Bouncy Castle Crypto Library is open source and for limited release. It may be replaced with another crypto library in the production release of ADF Mobile client.