Known Issues

Oracle JDeveloper 11g and Oracle Application Development Framework (ADF) 11g

Known Issues for JDeveloper and ADF 11g (11.1.1.0.0)

last updated: November 14, 2008

Content

Introduction

This document lists known issues for this release. As new issues arise, they will be added to this document.

General Issues

Migration

Migration to JDeveloper 11g is supported from JDeveloper 10.1.3.4 only. If you are using an earlier version of JDeveloper, Oracle recommends migrating to 10.1.3.4 before migrating to 11g (11.1.1.0.0).

For more information about migrating project content to 11g, please refer to the SRDemo Migration Guide on OTN.

Deployment

ADF 11g applications require a Java EE 5 container. To date, only Oracle WebLogic Server 10g (10.3) is certified, and we plan to support JBoss and Tomcat as well. Note, OC4J 10.1.3 and/or OAS 10.1.3 is not fully Java EE 5 compliant, and ADF 11g applications will not work in that environment.

Integrated WLS

JDeveloper 11g now includes support for Oracle WebLogic Server as the integrated server, used when running and debugging web applications from within the JDeveloper design time. In this release, only Oracle WebLogic Server 10g (10.3) can be used for this purpose, and you must use the domain created during installation of JDeveloper (DefaultDomain).

Feedback

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!

Installation Issues

Please read the installation guide for details on system requirements and specific installation instructions for various platforms.

Native installers for Windows and Linux

The installation guide describes how to use the generic installer to install JDeveloper on any supported platform. In addition, there are platform-specific installers available for Windows and Linux. One benefit of the native installers is that they include the appropriate JDK for the platform, so installation steps are simplified.

To use the Windows installer (note, it is not necessary to install a JDK before proceeding with these steps):

  • Download jdevstudio11110install.exe
  • Double-click jdevstudio11110install.exe to start the installation process
  • Follow the installation steps as described in the installation guide
  • On the JDK Selection page of the installer note that you can choose to use the JDK that is bundled with the installer (Sun JDK 1.6.0_05). Optionally, you could browse and select a previously installed JDK for JDeveloper to use.

To use the Linux installer (note, it is not necessary to install a JDK before proceeding with these steps):

  • Download jdevstudio11110install.bin
  • Ensure the .bin file is executable: chmod +x jdevstudio11110install.bin
  • Execute the Bin file to start the installation process: ./jdevstudio11110install.bin
  • Follow the installation steps as described in the installation guide
  • On the JDK Selection page of the installer note that you can choose to use the JDK that is bundled with the installer (Sun JDK 1.6.0_05). Optionally, you could browse and select a previously installed JDK for JDeveloper to use.

Running the installer from network drives under Windows (7363492)

When launching the installer directly from a network location, you should use a mapped drive instead of a UNC path. If you use a UNC path, you will get a ClassNotFoundException (com.bea.cie.gpr.internal.model.DelegateHomeListHelper).

Performance may be degraded if you change directory to the network drive and invoke the installer using a relative path. For better performance, use a local directory as your current working directory and specify the full path to the installer. For best performance, copy the installer locally before invoking.

On Windows, installations on systems which have disabled NTFS 8.3 Name creation may have problems if you use paths with long file names. (7342763,7293026)

JDeveloper, ADF Runtime and WebLogic Server make use of 8.3 short filenames on Windows to handle cases where certain paths, such as the JDK and WebLogic domain location, contains spaces. If you wish to use spaces in those paths, please be sure you have NtfsDisable8dot3NameCreation set to the default value of 0 (not 1) before installation. You can re-enable 8.3 naming by using regedit to set HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/FileSystem's NtfsDisable8dot3NameCreation to 1.

Installing JDeveloper on Mac OS

Some additional steps are required to install JDeveloper on Mac OS beyond what is documented in the installation guide. Please refer to the installation guide for additional details on installing JDeveloper for Mac OS X.

1. Make Java 6 the default VM.

  • Run Java Preferences (in /Applications/Utilities/Java)
  • Move the Java SE 6 (64 Bit) to the top of the Java application versions list (General tab)

2. Create a symbolic link for classes.jar

  • Enable root user:
    • Open the Directory Utility app from Applications - Utility
    • Ensure the settings are unlocked (click the lock if necessary)
    • Choose Edit > Enable Root User and provide the root user password.
    • Note, you can return to this same screen to disable root user after creating the symbolic link
  • Create the symbolic link:
    
    cd /SystemLibrary/Frameworks/JavaVM.framework/Versions/1.6.0/Home/
    su root
    mkdir jre
    cd jre
    mkdir lib
    cd lib
    ln -s ../../../Classes/classes.jar rt.jar
    

Avoid folder names with more than one '.' (7483204)

If you install into a directory with long file names, in which one of the folder names contains more than one '.' (such as c:\Oracle\JDeveloper\11.1.1), the resulting 8.3 filepath generated by NT's ~fsi construct is garbled. Since the cmd scripts in WLS rely on ~fsi to properly translate long names in to 8.3 format, this bug breaks a number of utilities, such as quickstart and configwiz.

IDE and Java SE Development

Creating Subversion repository (7458398)

When selecting Versioning -> Subversion -> Create Repository to create a file repository, the "Create Subversion Connection" panel pops up and asks for information. Simply ignore this panel by clicking the "Cancel" button and then ignore the following "No Subversion Repository Information Found" error message by clicking the "OK" button. The repository should still be created and can be accessed in normal ways (e.g. from the Versioning Navigator).

Deployment Issues

Known issues

Port Binding Error in Integrated WLS - If a port binding error is encountered when starting the Integrated WLS domain it is likely because the port is already in use. The user will have to configure an unused port under Tools->Preferences->Run->Edit Server Instances->Server Instances->DefaultServer->Startup->Listen Port.

ADF applications with connections that require a password and are deployed to the same Weblogic Domain must provide unique connection names. Consider two ADF applications (Application1, Application2) that are deployed to a WLS Domain. If both applications have Connection1, the connection names could be called Application1_Connection1 and Application2_Connection1.

For information about configuring a Managed Server on Oracle WebLogic Server, see Configuring Managed Servers in the Creating WebLogic Domains Using the Configuration Wizard guide.

After you deploy a web application to standalone Oracle WLS, you must migrate your application's credential store and any security policies outside of JDeveloper. A script has been provided to assist with this process. The script merges the credentials of your application with the existing data store. Additionally, if your web application implements security, the script can merge application-level security policies with domain-level policies. Use of the script is necessary to complete deployment of a production application since JDeveloper does not deploy the database connection credentials and security policies. For the steps to perform the migration, see "Migrating the Security Repository to a Production Environment" in the "Developing Secure Applications" section of the JDeveloper online help. This topic describes how to use the script to migrate a credentials data store, a security data store, or both data stores.

For a simplified approach to migrate application credentials and policies for the two most common use cases, see the OTN "How To" article Simplified ADF 11g Application Credential and Policy Migration to Standalone WebLogic Servers.

When deploying non-ADF applications, you must first upgrade your Oracle WebLogic Server 10.3 to the latest patch release. For information on the latest required patch, see the Application Server certification information on OTN: http://www.oracle.com/technology/products/jdev/htdocs/11/

Running applications with limited free memory (7343786)

Under certain circumstances, if you do not have enough free memory available, you may receive an error when running an application:

Error occurred during initialization of VM
Could not reserve enough space for object heap

Normally you would resolve this by adding -Xms and -Xmx arguments to the project's Run/Debug profile. However, there are existing entries for these settings in the WebLogic startup that will override the project's settings. The proper way to resolve this error is to add EXTRA_JAVA_PROPERTIES to your environment, as follows:

On Linux
setenv EXTRA_JAVA_PROPERTIES "-Xms512m -Xmx512m"

On Windows
set EXTRA_JAVA_PROPERTIES="-Xms512m -Xmx512m"

Debugging Issues

Debug action buttons

The debug action buttons, such as buttons for step over, step into, and more, always show on the main toolbar during a debugging session, but they will not show by default on the debugger log pages. To show the debug action buttons on the debugger log pages, turn on the option "Show Toolbar in Log Window While Debugging" on the Debugger Preferences page.

Debugger window (7341813)

Currently objects will only be displayed in the debugger windows when used, if only initialized in the declaration will not show in Data nor Smart Data windows. This does not apply to native types.

Debugging Java EE applications

You can only debug one Java EE application at a time. If you are debugging a Java EE application, and you debug a second Java EE application, the first application will be terminated and undeployed, and the server will be restarted to debug the second application.

You cannot rerun/redeploy or terminate a Java EE application while the debugger is paused at a breakpoint. Make sure the debugger has been resumed before rerunning or terminating an application.

Use of the 'debugFlag' with Integrated WLS and WebLogic server

Having the following environment variable set in the environment from which JDeveloper is launched interferes with attempts to start the WLS debugger under Integrated WLS:

  
	set debugFlag=true
  

This flag is used when launching the WLS debugger from outside of JDev, as through a cmd shell. When present, it signals to the WLS domain start script to add an extra set of args to the java process. Unfortunately, these conflict with the ones we are already passing, causing this error:


	Error occurred during initialization of VM agent library failed to init: jdwp
	ERROR: Cannot load this JVM TI agent twice, check your Java command line for duplicate jdwp options.

To avoid the conflict, you will need to remove/unset the debugFlag environment variable in the environment from which JDeveloper is launched.

  • If the variable is defined locally to a command shell, unset the variable before launching JDeveloper.
  • If the variable is defined globally, as through the System panel of the Control Panel on Windows, remove the variable and open a new command shell to launch JDeveloper.

Web Services Development

Web proxy preference page adding items to exclude list (7331548)

When the HTTP Analyzer is run it manipulates the proxy settings to make sure that localhost and isotopes are not excluded. This allows it to capture traffic to the Integrated WLS server. There is a bug in the preference page if you visit this page it re-appends the local host exclusions. This will make the analyzer appear to be broken if they are not removed manually.

HTTP Analyzer will not capture traffic from a JAX-WS Java client that is being sent to localhost (7310483)

The HTTP Analyzer will not capture traffic from a JAX-WS Java client that is being sent to localhost due to a bug in Java (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6737819). Use one of the following ways to work around this:

  • Use your machine name rather than localhost when calling the service. Either at generation time or runtime call the client with
    ((BindingProvider)port).getRequestProperties(BindingProvider.ENDPOINT_ADDRESS, "http://mymachine.../...");
    

    where mymachine is the name of your local machine.

  • Change the default localhost by using the following parameter to the JDeveloper command to set a system property
    -J-Doracle.jdeveloper.webservices.localhost.default=localhost.localdomain
    
    • If you are running JDeveloper on Linux you need to make no more changes.
    • If you are running JDeveloper on Windows, edit the c:\windows\system32\drivers\etc\hosts file and change the line
      127.0.0.1 localhost
      

      to be

      127.0.0.1 localhost localhost.localdomain
      
    • If you are running JDeveloper on Mac OS X, edit the /etc/hosts file as root to include the name of the local machine. That is, change the line
      127.0.0.1 localhost
      

      to be
      127.0.0.1 localhost localhost.localdomain
      

Avoid creating multiple top down web services in the same project/package (7165531)

Unless they are operating on the same schema avoid creating multiple top-down web services in the same project as each successive top-down service may over-write the ObjectFactory class created by the previous one if generated into the same package.

You need to manually check out files in some source control systems (7409318)

The web service generator code won't automatically check out files where this is required by certain source control systems. If you don't do this they may see the message:


	java.io.IOException: Not in compound edit
	at oracle.jdeveloper.webservices.wsa.JDevWSFileSystem.makeFileReal(JDevWSFileSystem.java:683)
	at oracle.jdeveloper.webservices.model.java.generator.CreateClasses.createJaxWsInterfaces(CreateClasses.java:1203)
	at oracle.jdeveloper.webservices.model.java.generator.CreateClasses.createClassesFromWSDL(CreateClasses.java:616)
	at oracle.jdeveloper.webservices.model.java.generator.CreateClasses.action(CreateClasses.java:167)

Creation of top-down JAX-WS EJB web services - manually edit wsdl location if copying locally (7191149)

When creating a top-down JAX-WS EJB web service via the create wizard, and deciding to copy the wsdl locally (which is the default), make sure to change the wsdl location field to be within the project's source. It is defaulted to the Web Content area (ie public_html\WEB-INF\wsdl) and this will not work for an EJB web service as it must be in the project source area.

Avoid using java.util.Map and java.util.Collection family types (7313063, 7248344)

java.util.Map and java.util.Collection family types are not supported by the WLS JAX-RPC stack.

Manually edit the header details if invoking WLS stateful (conversational) web services from HTTP Analyzer (7388843)

When calling conversational web services from HTTP Analyzer, the request message headers for the 'continue' methods need to be manually updated with the conversation id that is specific to that particular conversation. This value is available from the response SOAP message of the method that starts the conversation.

From the response message of the conversation start method, copy the xml tags similar to the one below:


<conv:ContinueHeader xmlns:conv="http://www.openuri.org/2002/04/soap/conversation/">
 <conv:conversationID>uuid:701f9f3d434bfc98:-3f39a0ef:11c4b649fd4:-7fff</conv:conversationID>
</conv:ContinueHeader>

From the HTTP Content tab in HTTP Analyzer, insert the above tags within the header element of the SOAP request message, as below:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <env:Header>

    <!-- other header elements -->

    <conv:ContinueHeader xmlns:conv="http://www.openuri.org/2002/04/soap/conversation/">
      <conv:conversationID>uuid:701f9f3d434bfc98:-3f39a0ef:11c4b649fd4:-7fff</conv:conversationID>
    </conv:ContinueHeader>

  </env:Header>

  <env:Body>

    <!-- message data details -->

  </env:Body>
</env:Envelope>

How to select multiple WLS policies from the Property Inspector (6979786)

Property Inspector uses a common list editor to select multiple policies. This is different from the dialog that is available in the web service creation wizard and web service property editor. To attach multiple policies via the Property Inspector,

1. Go to the 'Web Service Extension' tab on the Property Inspector for web services and web methods.
2. Click on the button next to the 'Multiple Policies' field to invoke the list editor.
3. On the 'Edit Property' dialog, click on 'New'. This will show a new empty line in the 'List Items'.
4. Click on this empty line to view the policy URIs as a drop down list.
5. Select the required policy URI.
6. Click 'OK' to save and close the selection dialog.

JAX-WS Client use of MTOM requires some extra manual steps (7396187)

In order for a JAX-WS client to use MTOM, the generated code must be changed by hand. For example within MtomPortTypeClient.java the lines:


mtomService_Service = new MtomService_Service();

   MtomService mtomService = mtomService_Service.getMtomPortType();

should be replaced by:


import javax.xml.ws.soap.MTOMFeature;
   ...

   mtomService_Service = new MtomService_Service();
   MtomService mtomService = mtomService_Service.getPort(
      jaxwsmtom.MtomService.class, new MTOMFeature());

and an @MTOM annotation should be added to MtomService_Service.java.
 

Services migrated from a previous JDeveloper release are not guaranteed to deploy and run in WLS

Because of the OC4J proprietary nature of some of the properties set on web services that were created with previous JDeveloper releases (which supported OC4J), it is likely that there will be problems when attempting to deploy and run such services on WLS (including the integrated WLS that is bound with JDeveloper). Known problems include JAX_RPC services that have annotations, stateful services, DIME encoding, OWSM Policy (both 10.1.3 and 11 styles including WS-Security and WS-Reliability).

Oracle XDK specified in weblogic-application.xml will cause JAX-WS to fail to deploy (7424247, 7436727)

If you create any ADF components in an application the following entry automatically gets added to weblogic-application.xml:


<xml>
    <parser-factory>
       <saxparser-factory>
         oracle.xml.jaxp.JXSAXParserFactory
       </saxparser-factory>
       <document-builder-factory>
         oracle.xml.jaxp.JXDocumentBuilderFactory
       </document-builder-factory>
       <transformer-factory>
         oracle.xml.jaxp.JXSAXTransformerFactory
       </transformer-factory>
    </parser-factory>
  </xml>

This means that any code deployed in that application will use the oracle xml parser rather than the default weblogic one. This in some cases can result in a 20% performance improvement.

Unfortunately this change will cause JAX-WS service to fail to deploy with the following exception:


Target state: deploy failed on Server srg

[java] java.lang.NullPointerException
[Java] java.lang.NullPointerException
[Java]   at weblogic.wsee.wsdl.WsdlTypes.collectNamespaces(WsdlTypes.java:213)
[Java]   at weblogic.wsee.wsdl.WsdlTypes.collectNamespaces(WsdlTypes.java:229)
[Java]   at weblogic.wsee.wsdl.WsdlTypes.collectNamespaces(WsdlTypes.java:229)
[Java]   at weblogic.wsee.wsdl.WsdlTypes.parse(WsdlTypes.java:151)
[Java]   at weblogic.wsee.wsdl.WsdlDefinitions.parseChild(WsdlDefinitions.java:520)
[Java]   at weblogic.wsee.wsdl.WsdlExtensible.parse(WsdlExtensible.java:98)

You have two choices as to the correct way to resolve this issue. Either you can hand edit the weblogic-application.xml deployment descriptor so that it no longer contains this entry. (You can find this under the "Application Resources" section of the Application Navigator in the tree path Descriptors->META-INF->weblogic-application.xml)

You may have to do this after each time you create a new ADF component. Or you can make sure that all JAX-WS service are deployed separately either by creating a different application or creating a separate EAR file just for the WS component without the offending deployment descriptor.

Update: There is now have a Weblogic patch for this issue. The patch ID is "RFRS" and the passcode "VGJ16G15". This can be applied using the BEA Smart Update tool: http://edocs.bea.com/common/smartupdate/guide/start.html

JAX-WS proxy cannot read WSDL (7438109/7450115)

A JAX-WS proxy will report that it is unable to read a wsdl in two situations:

1) The proxy wizard made a local copy of the wsdl and is then deployed as part of a webapp. The workaround is to create a proxy that does not copy the wsdl locally. See the 'Select Web Service Description' page in the wizard.

2) The proxy is for a web service that has a target namespace with multiple parts (e.g. http://hello.ws.jax/). The workaround is to specify a package in the 'Specify Default Mappings' page of the wizard.

The JAX-WS async client for a 10.1.3 BPEL process will not run by default (7315840)

The BPEL server included in 10.1.3 SOA only knows how to use the '2003 draft version of the WS-Addressing specification. The JAX-WS async client will be default generate a client that by modifying the WS_ADDR_VER constants to support either the final '2005 or the member submission '2004 version of the specification. To support the '2003 version the user will need to make some minor modification to the code in order to invoke the process properly.

In the callback handler you need fix the code that requests the relatesToHeader as shown here:


// HeaderList ...
//Header relatesToheader = headerList.get(WS_ADDR_VER.relatesToTag, true);
//String relatesToMessageId = ralatesToheader.getStringContent();
String relatesToMessageId = RelatesTo.getValue();

This uses the header which get automatically bound to a method parameter. Now the BPEL service explicitly defines both the ReplyTo and MessageID headers in the WSDL so the default proxy generator will map these to method parameters. Assuming that you accept this default you need to pass both the replyTo address and the message ID in as parameters to the method rather than as header as you will see in the generated code. The only exception for this is the WS-Addressing action header which if it is required should be set using the '2003 namespace. Here is an example that invokes a loan process that has the required edits.


americanLoan = new AmericanLoan();
      LoanService loanService = americanLoan.getLoanServicePort();

      // prepare Message Id

      AttributedURI messageId = new AttributedURI();
      messageId.setValue( "uuid:" + UUID.randomUUID() );

      // prepare ReplyTo

      AttributedURI address = new AttributedURI();
      address.setValue("http://x.x.x.x:7101/Application23-Project1-context-root/LoanServiceCallbackPort");
      EndpointReferenceType replyTo = new EndpointReferenceType();
      replyTo.setAddress( address  );

      // prepare action header

      WSBindingProvider wsbp = (WSBindingProvider)loanService;
      wsbp.setOutboundHeaders(
              new StringHeader(
                  new QName( "http://schemas.xmlsoap.org/ws/2003/03/addressing", "Action" ),
                  "http://services.otn.com/LoanService/initiateRequest"  ));

      // Prepare payload

      LoanApplicationType payload = ...

      // Invoke service with replyTo and messageID parameter
      loanService.initiate(lt, replyTo, messageId);

Cannot deploy and run JAX-RPC with bare array types as method parameters (7493019)

When using JAX-RPC web services deployed to weblogic using the generators in JDeveloper you may have trouble with method signatures that contain "bare" array types. For example:


public class Hello
{
     public String[] list();
     public String[] echo(String[] value);
     public void process(int[] values);
}

These will either not deploy or when deployed will not work properly with errors complaining about mapping issues. There are a few workarounds for this problem:

  1. Only do wrapped parameters, when starting from a java class

    Create a bean object that contains all the properties. When creating the web service make sure you select Document/Literal rather than Document/Wrapped to prevent double wrapping.

  2. Make sure you don't allow properties to be unwrapped when doing "top down"

    On the mapping options page when generating a Java web service from a WSDL make sure you uncheck the "Unwrap Wrapped parameters" box on the "Specify Default Mapping Options" page of the wizard.

  3. Use the weblogic jwsc ant task

    The ant task will generate a working service from the bare list types but the schema for the WSDL will generate synthetic Java schema types which may not be what the user wants.

JAX RPC stateful service: JAX WS client is throwing exception (7533170)

It is not possible to successfully invoke a JAX-RPC style conversational (stateful) web service deployed in weblogic server from a JAX-WS style proxy client. The design time JAX-WS proxy creation does not currently warn the user if the supplied WSDL document contains conversational behavior advertisement. Even though the tool leads to a successful generation of JAX-WS client artifacts, invoking the service from this client results in a SOAPFaultException. Only the conversation 'start' methods will get executed successfully. Invoking any other conversational methods after a conversation 'start' method will result in error.

The workaround is to use a JAX-RPC style proxy client to call a stateful service deployed in the weblogic server.

Web / Ajax Development

JSP compilation pertains to the whole project and not the selection.

EJB, JPA, and Java EE Development

'Weblogic 10.3 Remote-Client' library not added when creating MDB client (7444133)

Running the Message-Driven Bean client throws the following exception because 'Weblogic 10.3 Remote-Client' library is not getting added by default to the project while creating the Message-Driven Bean client.

  
	java.lang.ClassNotFoundException:weblogic.jndi.WLInitialContextFactory
 

To work around this problem user needs to add the 'Weblogic 10.3 Remote-Client' library to the project's 'Libraries and Classpath' setting.

Working With EJB Data Binding

When working with EJB Data Binding and EJB Data Controls, please make note of the refresh=”ifNeeded” condition in the page definition. In 10.1.3.x., refresh="ifNeeded" was a default value for method iterators. In 11g, the new default value is "deferred" or "not specified" in the page definition. For EJB Data Binding, the refresh="ifNeeded" condition is needed to maintain the concurrency for ADF Faces and JSP/JSF pages.

When developing ADF Faces with two or more JSP/JSF pages, users need to manually configure the page definition for the method iterator to say refresh="ifNeeded". This flag tells the ADF Model not to invoke the same query method twice.

The ADF Model will call an accessor method each time it is needed, to compare the cached result with the current one and to pick up changes. If the result is different, then it resets the method iterator's cache state. For EJB and EJB query methods, the result will differ every time the query method is invoked.

Consult the ADF Model documentation for the meaning of refresh="ifNeeded" and other possible values.

General ADF Issues

Struts issues

Struts and Model1 databinding will no longer support JSP 1.2. Clients wishing to stay with JSP 1.2 should instead use JDeveloper 10.1.3. JSP2+ is fully supported in this release.

There is a new restriction that we no longer support an application running ADF Struts and ADF Faces at the same time. If you wish to create an ADF Struts based project, you cannot include the "JSF 1.2" library definition in that project and if you wish to create an ADF Faces based project, you cannot include the Struts library in that project.

ADF application redeployment: memory leak and cache refresh

Development cycle: Repeatedly running or debugging an ADF application from JDeveloper may cause increasing memory usage by the integrated WebLogic server process (7393267). After repeated runs of the application the server process may fail with error "java.lang.OutOfMemoryError: PermGen space" (7445425). Both of these conditions can be resolved by stopping and restarting the integrated server process (menu option Run,>Terminate> DefaultServer followed by Run->Start Server Instance). In extreme cases it may be necessary to manually kill the server process if the menu option fails to stop it due to the memory problem.

For exploded archive deployments, in place updates to ADF task flow metadata files (like adfc-config.xml) may not be seen (7393651). This can be resolved by either redeploying the application or stopping and restarting the server. Merely stopping and restarting the application may not suffice.

ADF Faces and Data Visualizations

Supported platforms

ADF Faces is currently supported in the following user agents (i.e. browsing platforms):

User Agent Windows Solaris Mac OS X Red Hat Linux
Internet Explorer 7.0 - - -
Firefox 2 2.0.0.2+ 2.0.0.2+ 2.0.0.2+ 2.0.0.2+
Firefox 3** 3.0+ 3.0+ 3.0+ 3.0+
Safari** 3.1.2+ (desktop) - 3.1.2+ (desktop) -

** indicates that the browser is supported but not certified

Support for JAWS and Bi-Directional languages (such as Arabic or Hebrew) is only available in IE7.

You should disable or remove third party browser add-ons because they have the capability to negatively interfere with the execution of the browser and the ADF Faces client framework.

Component IDs and regions

To avoid conflicts between the ids of components in the same region, each jsff page fragment in a region should be wrapped with f:subview where the id of the f:subview is unique across the fragments in a region. This will ensure the uniqueness of each component in the region, regardless of page fragment.

Migration from 10.1.3.x

Note that the JSF RI has changed. In 11.1.1.0.0 if you use an f:convertDateTime where the pattern attribute evaluates to null, an empty string is returned. In 10.1.3.x, if you use an f:convertDateTime where the pattern attribute evaluates to null, null is returned.

Migration issues with OrdDomain classes

When you face problems with inputFile and the OrdDomain classes, like "oracle.ord.im.OrdImageDomain" you have to write a custom converter to convert the uploaded file into an OrdDomain object. For that you have to do the following steps:

Create a custom JSF Converter:


package oracle.adfinternal;

import java.io.IOException;

import javax.faces.component.StateHolder;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

import oracle.jbo.JboException;
import oracle.jbo.im.OrdUtils;
import oracle.jbo.uicli.binding.JUCtrlValueBinding;

import org.apache.myfaces.trinidad.model.UploadedFile;

public class OrdDomainConverter implements Converter, StateHolder
{

  /**
   * Convert an <code>UploadedFile</code> to an <code>OrdImage</code> file.
   */
  public Object getAsObject(FacesContext context, UIComponent component, String fileKey)
  {
    UploadedFile file = (UploadedFile)context.getExternalContext().getRequestMap().get(fileKey);

    if ( file != null )
    {
      String filename = file.getFilename();
      String contentType = file.getContentType();
      if (filename.length() > 0 && file.getLength() >= 0)
      {
        try
        {
          return OrdUtils.getOrdObject(file.getInputStream(),
                                     contentType,
                                     _bindingRef);
        }
        catch (IOException e)
        {
          throw new JboException(e);
        }
      }
    }
    return null;
  }

  /**
   * This method does not make sense with a <inputFile> component
   */
  public String getAsString(FacesContext context, UIComponent component, Object value)
  {
    return null;
  }

  public void restoreState(FacesContext context, Object state)
  {
    Object[] values = (Object[])state;
    _bindingRef = (JUCtrlValueBinding) values[0];
  }

  public Object saveState(FacesContext context)
  {
    Object[] values = new Object[1];
    values[0] = _bindingRef;
    return values;
  }

  public boolean isTransient()
  {
    return _transient;
  }

  public void setTransient(boolean aTransient)
  {
    _transient = aTransient;
  }

  public void setBindingRef(JUCtrlValueBinding bindingRef)
  {

    _bindingRef = bindingRef;
  }

  public JUCtrlValueBinding getBindingRef()
  {
    return _bindingRef;
  }

  private JUCtrlValueBinding _bindingRef;
  private boolean _transient;
  public static final String CONVERTER_ID = "oracle.ordDomain";
}

Create a tag class for the converter:


package oracle.adfinternal;

import javax.el.ValueExpression;
import javax.faces.application.Application;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.webapp.ConverterELTag;
import javax.servlet.jsp.JspException;

import oracle.jbo.uicli.binding.JUCtrlValueBinding;

public class ConvertOrdDomainTag extends ConverterELTag
{

  public void setBindingRef(ValueExpression bindingRef)
  {
    _bindingRef = bindingRef;
  }

  @Override
  protected Converter createConverter() throws JspException
  {
    OrdDomainConverter converter = null;
    FacesContext context = FacesContext.getCurrentInstance();
    Application application = context.getApplication();
    converter = (OrdDomainConverter) application.createConverter(OrdDomainConverter.CONVERTER_ID);
    converter.setBindingRef((JUCtrlValueBinding)_bindingRef.getValue(context.getELContext()));
    return converter;
  }

  private ValueExpression _bindingRef;
}

Register the converter in the faces-config.xml file:


<faces-config...>
...
  <converter>
    <display-name>Ord Domain Converter</display-name>
    <converter-id>oracle.ordDomain</converter-id>
    <converter-class>oracle.adfinternal.OrdDomainConverter</converter-class>
  </converter>
...
</faces-config>

Create a TLD file for the tag class:


<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
  version="2.1">

  <description>
    Helper converter for ADF Faces 10 migration.
  </description>
  <display-name>Oracle ADF Faces</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>binding</short-name>
  <uri>http://xmlns.oracle.com/adf/faces/binding</uri>

  <tag>
    <description>A converter for the Ord Domain classes.</description>
    <name>convertOrdDomain</name>
    <tag-class>oracle.adfinternal.ConvertOrdDomainTag</tag-class>
    <body-content>empty</body-content>
    <attribute>
      <description>The binding...</description>
      <name>bindingRef</name>
      <deferred-value/>
    </attribute>
  </tag>
</taglib>

Register the TLD file with your web.xml:


<jsp-config>
   <taglib>
     <taglib-uri>http://xmlns.oracle.com/adf/faces/binding</taglib-uri>
     <taglib-location>/WEB-INF/converter.tld</taglib-location>
   </taglib>
 </jsp-config>

Finally you have to embed the new converter inside the inputFile component, like:


<tr:inputFile value="#{bindings.Image.inputValue}" ...>
  <binding:convertOrdDomain bindingRef="#{bindings.Image}" />
</tr:inputFile>

Type conversion errors

The EL engine has changed, and it is now much stricter in terms of what values may be pushed into the expression (see https://glassfish.dev.java.net/issues/show_bug.cgi?id=652). Customers will need to write custom converters to support their application needs.

useWindow attribute

The useWindow attribute is normally used to control whether dialogs launched by the dialog framework are displayed in secondary browser windows (useWindow="true") or inline in the same browser window (useWindow="false"). As of this release, the value of the useWindow attribute is ignored and is always treated as "true". As a result, dialogs which were formerly run inline are now automatically promoted out to separate windows.

This change in behavior was made in order to work around problems with the inline dialog return implementation. Currently this implementation leverages non-standard servlet behavior which fails on some servlet engines, including WebLogic. We are investigating solutions for restoring the inline dialog behavior in more standard/portable way.

Ctrl+N support

In this release, the application user may experience incorrect behavior if they use Ctrl+N to open a new window from their application, press the refresh button on their browser toolbar (i.e. F5), or copy and paste a URL for an ADF Faces app from one window to another. We expect to support Ctrl+N in a future release.

af:convertDateTime affected by Sun bug 4823811

SimpleDateFormat patterns don't allow embedding of some literal punctuation. This problem requires users to use a literal other than dash ('-') as the separator for date components when the Locale's language is Arabic i.e. "ar". See Sun bug which lists the issue and suggested workaround: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4823811

Drag and drop

The af:dropTarget tag must have at minimum one af:dataFlavor child tag.

ADF DVT graph and gauge

  • Firefox does not print Flash content, which is the default imageFormat for DVT Graph and Gauge. Applications should set the imageFormat to PNG for use in printable pages when the browser is Firefox. Flash content, including ADF DVT Graphs and Gauges, prints fine when the browser is IE.
  • Pie graphs with long labels have issues with label wrapping and truncating in Flash image format.
  • Pie graphs always display slice label text and value in PNG format, regardless of the graph attribute settings.
  • If the pie graph image format is set to Flash, numbers in slice labels do not change with locale.
  • The click listener on a scatter or line graph does not work for any markers except the first in a series. 
  • Alerts do not display on a Graph when the image format is set to Flash. Use PNG image format as a workaround.
  • Bubble graph does not display data markers for both Flash and PNG formats when 3DEffect property is set to true. Workaround is to set seriesEffect="SE_NONE".
  • Bubble graph does not render attribute labels in tooltips.
  • Tooltip in polar and radar graphs does not render group labels.
  • CustomToolTipCallback does not work correctly for Flash line or scatter graphs.
  • In Flash format at runtime the Graph title and subtitle is displayed with a Serif font instead of the Sans Serif font.
  • Users of the ADF DVT simple Graph tags listed in the table below are advised to use the following new syntax going forward:
  • Deprecated Tag New Syntax
    <dvt:dualYBarGraph> 
    <dvt:barGraph subType="BAR_VERT_CLUST2Y">
    <dvt:stackedBarGraph> <dvt:barGraph subType="BAR_VERT_STACK">
    <dvt:dualYLineGraph>   
    <dvt:lineGraph subType="LINE_VERT_ABS_2Y">
    <dvt:dualYComboGraph> <dvt:comboGraph subType="COMBINATION_VERT_ABS_2Y">
    <dvt:horizontalStackedBarGraph> 
    <dvt:horizontalBarGraph subType="BAR_HORIZ_STACK">
    <dvt:stockCandleGraph> <dvt:stockGraph subType="STOCK_CANDLE">

ADF DVT Geographic Map

When creating a new Geographic Map, use the following URLs:

ADF DVT Gantt Chart

  • When displaying Gantt in Arabic the vertical scrollbar of the chart region does not work.
  • The number format in the Gantt properties is not locale specific, this would impact Japanese locale.
  • The date format in the Gantt properties is not locale specific, this would impact Japanese locale.
  • The default rendering of the Gantt takes up the whole page, use a layout to be able to add other components.

J2EE Resource Injection

This release does not currently support resource injection through the @Resource and @Resource's notation or @PostCostruct and @PreDestroy from injected resources. ADFFaces is dependent on a version of Faces that was not included with WLS. As such, the current JSF R.I. 1.2.7.1 shared library that is distributed with this release does not contain the WLS Resource injector which is responsible for such functionality.

For example, lets say you have the following entry in your web.xml file:


<env-entry>
 <env-entry-name>welcomeMessage</env-entry-name>
 <env-entry-type>java.lang.String</env-entry-type>
 <env-entry-value>Hello there</env-entry-value>
</env-entry>

This will expose the String entry into the J2EE environment with the name "welcomeMessage". Then let's say we define the following JSF managed bean (named "test") defined in the faces-config.xml:

TestRequestBean.java


public class TestRequestBean
{
 @Resource(name="welcomeMessage")
 private String _welcomeMessage;

  public String getMessage()
 {
   return _welcomeMessage ;
 }
}

When running in an environment with the properly configured resource injector, the value of _welcomeMessage would be assigned to "Hello there" which was taken from the entry in the web.xml. Without the resource injector, this value will be null when the bean is instantiated. Those needing resource injection are welcome to continue to use JSF 1.2.3 which is included with Weblogic, but you will not be able to ADFFaces Richclient or Trinidad because of some bugs with that distribution.

Keep in mind that the limitation for @PostConstruct and @PreDestroy annotations applies only to injected resources, JSF Managed beans and objects stored in one of the J2EE scopes will work just fine.

ADF Model Databinding

Changes to search form binding default behavior since Technology Preview 4

A search binding provides the model-driven behavior for a search form (i.e. <af:query> component) at runtime. It is related to a particular iterator and view criteria on that iterator, whose runtime defaults are specified by the Binds and Criteria properties of the search binding, respectively.  This section describes the default behavior of the search binding which has changed since Technology Preview 4.

How a search form behaves the first time it's used in a page flow

A view criteria has a UI hint called "Query Automatically" that can be set on the "Control Hints" tab of the view criteria editor. This property defaults to false (i.e. unchecked). The first time a search form is used in a task flow, the "Query Automatically" hint of the view criteria related to a search binding affects the search binding's runtime behavior in the following way. If the search binding's related view criteria has its "Query Automatically" hint set to:

  • "Query Automatically" = true
    • Then the search binding automatically executes the iterator when the search binding is initialized in a task flow.
  • "Query Automatically" = false
    • Then the search binding clears the rowset related to its iterator to show an initially empty search result to the end user (avoiding any "eager" database query and allowing the end-user to provide search form input to drive the query when they eventually press the (Search) button.

This feature is known as the search binding's initial AutoQuery-or-ClearRowSet behavior.

What you may need to know about the query automatically hint for the implicit view criteria

There is no declarative way in this release to set the "Query Automatically" hint on the implicit "All Queriable Attributes" view criteria. It can be configured delcaratively only on developer-created, named view criteria. However, you can use the setProperty()*API on the ViewCriteria interface to configure the hint at runtime on any view criteria, including the implicitly-defined one. Set the property whose name is given by the constant *ViewCriteriaHints.CRITERIA_AUTO_EXECUTE to the value Boolean.TRUE to achieve this*.*

How a search binding behaves when the end-user changes the view criteria using the saved search dropdown

The "Query Automatically" hint on the view criteria related to the search binding also affects the behavior when the end-user changes the current view criteria using the "Saved Search" dropdown list. When the new view criteria selected by the end user has:

  • "Query Automatically" = true
    • Then the search binding automatically executes the iterator after applying the new view criteria.
  • "Query Automatically" = false
    • Then the search binding applies the new view criteria only, leaving any search results intact.

Detecting whether the search binding's query has been performed

The search binding's queryPerformed property evaluates to true if the search binding has automatically performed the query as described above, as well as when the end-user has performed the query by clicking the (Search) button. Pressing the (Reset) button in the search form resets the view criteria and sets the queryPerformed property back to false again.

Customizing the default search binding behavior

The search binding offers two properties that allow you to customize its default behavior: TrackQueryPerformed and InitialQueryOverridden.

The TrackQueryPerformed property

A search binding's TackQueryPerformed property controls whether it manages its queryPerformedflag at runtime at the page flow level or at the level of the individual page/pageFragment on which the search form appears. The two valid values for the property are "pageFlow" and "page". The default is "pageFlow". These values cause the search binding to behave as follows:

  • If TrackQueryPerformed = "pageFlow", then the queryPerformedflag is initialized once per page flow and tracked at the page flow level. This means that the end-user can navigate away from the page on which the search binding's search form appears, and when the navigate back to that page (or page fragment) during the "life" of the same page flow the value of the queryPerformed flag will still be what it was when the end user left the page.
  • If TrackQueryPerformed = "page", then the queryPerformedflag is initialized each time the user navigates to the page (or page fragment), both when they first navigate to it during a page flow as well as when they navigate back to it from some other page during that page flow. This means that each time the end-user visits the page the queryPerformed flag is initialized.

You can set the search binding's TrackQueryPerformed property in the property inspector.

How TrackQueryPerformed affects search binding initial AutoQuery-or-ClearRowSet behavior

When TrackQueryPerformed property of a search binding is set to "pageFlow" then that search binding's initial AutoQuery-or-ClearRowSet behavior described above is performed once during the page flow. In contrast, when TrackQueryPerformed is set to "page" then the initial AutoQuery-or-ClearRowSet behavior is performed each time the end-user visits the page (or page fragment).

The InitialQueryOverridden property

A search binding's InitialQueryOverridden property controls whether it should suppress its initial AutoQuery-or-ClearRowSet behavior the first time the search binding is used in a page flow. If TrackQueryPerformed is true, then it effectively means that it suppressValid values include "true", "false", or a boolean-valued EL expression. The default value for the property is false.

When InitialQueryOverridden evaluates to "true" or boolean true, then the initial AutoQuery-or-ClearRowSet behavior is suppressed the first time the search binding is used in a page flow. If TrackQueryPerformed is set to "pageFlow", then effectively this means that it suppresses the only initial AutoQuery-or-ClearRowsSet behavior that would have occurred for this search binding.

In contrast, if search binding's TrackQueryPerformed property is set to "page" then only the initial AutoQuery-or-ClearRowSet behavior that would have occurred is suppressed. Subsequent initial AutoQuery-or-ClearRowSet behaviors that occur due to the user's navigating back to the same page (or page fragment) are not affected by the InitialQueryOverridden property.

What you may need to know about disabling the initial AutoQuery-or-ClearRowSet behavior

If you want to avoid the search binding's performing any inital AutoQuery-or-ClearRowSet behavior, then leave the TrackQueryPerformed set to its default of "pageFlow" and set InitialQueryOverridden to "true".

What you may need to know about referencing the queryPerformed property in an iterator's RefreshCondition

Oracle recommends not configuring the RefreshCondition property of an iterator to reference the queryPerformed property of a search binding. Doing so will inadvertently prevent new rows from being creating in that iterator's rowset until the search binding's query has been performed.

ADF Business Components

New service-related features removed in this release, expected to return in a maintenance release

JDeveloper 11g 11.1.1.0.0 release is a JDeveloper/ADF only release. In other words, the SOA and WebCenter related features that have been available in the Technical Preview releases were not ready for production at this time. Consequently, since the following new ADF BC 11g features depend on the SOA infrastructure that is not present in this release, regretfully these features have been removed in this JDeveloper 11g 11.1.1.0.0 release:

  • Service Interface - declaratively enable full-featured web services based on the AM's top-level view object instances and custom methods,
  • Business Events - define events on an entity object and configure when they are raised for delivery to a SOA message bus
  • SDO Class Generation- generate data transfer objects for view object rows that comply with the Service Data Objects specification (used as an implementation detail of the Service Interface feature above.)

The SOA and WebCenter features (along with the aforementioned ADF BC features on which they depend) are expected to appear in a subsequent JDeveloper/ADF/FusionMiddleWare release.

Required pre-migration steps for Technology Preview 4 applications using ADFBC service-related features

If you have built an application using the Technology Preview 4 release which makes use of the service-related features mentioned above, you will need to use the Technology Preview 4 release to remove those features before migrating the application to JDeveloper 11g 11.1.1.0.0 production release. Specifically this means you will need to use the JDeveloper 11g Technology Preview 4 release to:

  • Remove the Service Interface from any Application Modules for which you have enabled it
  • Disable the SDO class generation for any view objects that have been enabled for SDO class generation (note that this generation may have been implicitly turned on for you by the Service Interface wizard for view objects you elected to expose via the service interface)
  • Remove any ADF BC Service Interface deployment profiles
  • Remove any entity object business event definitions.

As mentioned above, these features are expected to return in a subsequent release.

Manual changes required for Struts 1.1 applications using ADFBC created originally using JDeveloper 9.0.2 -> 9.0.5

ADFBC-based applications using Struts 1.1 that were created with versions 9.0.2 through 9.0.5 of JDeveloper used a custom action mapping base class that was registered in the web.xml file using a servlet init parameter


<init-param>
     <param-name>mapping</param-name>
     <param-value>oracle.jbo.html.struts11.BC4JActionMapping</param-value>
   </init-param>

JDeveloper 11g uses Struts 1.2.9 which no longer supports this approach for defining a custom action mapping class.

When you migrate your ADFBC/Struts applications that were created originally using JDeveloper 9.0.2 through 9.0.5, you will need to manually configure the struts-config.xml file of your application to reflect this custom action mapping class using the new Struts 1.2 approach which uses the type attribute on the <action-mappings> element in the struts-config.xml file.

So, you will need to update your struts-config.xml file's <action-mappings> element to look like this:


<action-mappings type="oracle.jbo.html.struts11.BC4JActionMapping">
   <action .../>
   <action .../>
 </action-mappings>

NotConnectedException thrown when using shared application module (7444195)


oracle.jbo.NotConnectedException: JBO-25200: Application module is not connected to a database

If you run into exception above using shared application module, a workaround is to configure shared application module pool to not remove instances of shared application module as follows:

  • Open Application Module | Configuration.
  • Select Shared configuration and click on the Edit button.
  • Select Properties tab and enter values for the two properties.
    • jbo.ampool.timetolive: -1 (never expire)
    • jbo.ampool.maxinactiveage: 432000000 (5 days or any very high value)

ADF Security

Password length requirement In WLS 

Weblogic requires user passwords to be at least 8 characters. If you are migrating application with user credentials in jazn-data.xml ensure that all user credentials are at least 8 characters long.

Security properties in application module configuration are deprecated

Security properties "jbo.security.enforce", "jbo.security.loginmodule" and "jbo.security.config" in application module configuration are deprecated. Applications should use Configure ADF Security wizard to configure security.

Migration considerations for ADF security authorization

Entity attributes

Starting in release 9.0.5, we provided the ability to add a declarative security constraint to an entity attribute which granted read-only, update-while-new, or update access. In release 11.1.1, we redesigned the feature in order to lay the groundwork for data security support in a future release. Due to architectural differences between the old and new implementation, you will need to re-implement your entity security policies in 11.1.1. Instructions to do this can be found in section 28.4.3.1 Defining a Permission on ADF Business Component Entity Objects of the Fusion Developer's Guide For ADF.

Iterator, value and method bindings

In a 10.1.3.2 application configured for ADF authorization, we automatically performed declarative authorization checks on iterator bindings, value bindings, and method bindings. In release 11.1.1, we have turned off enforcement of binding level security, which alleviates the burden on the application developer to create grants for every binding, and also avoids the runtime performance impact of performing a security check before each binding is accessed. When migrating your application to 11.1.1, you have two options:

  1. Set the JVM flag "-Doracle.adf.security.metadata=false" to put ADFm security into a 10.1.3-compatibility-mode in which binding security checks are still performed automatically.
  2. Re-implement your UI-layer security restrictions using EL expressions within each JSPX page. Details on our enhanced security EL offering in this release can be found in section 28.6.1 How to Evaluate Policies Using Expression Language (EL) of the Fusion Developer's Guide For ADF.

ADF Swing

ADF Swing WebStart support

"Java Web Start" with BC4J as the model layer needs a  "login dialog" to be generated for JClient application to prompt for the Database  credentials. The Login Dialog needs to be generated using the Form wizard. WebStart is supported without "login dialog" for bean datacontrol.

ADF layer security

ADF Security in this release of JDeveloper 11g has limited support with ADF Swing and customers who require ADF Security to work completely in ADF Swing, should wait for the next release of JDeveloper 11g.

Deployment Options ADF Security Work around to be followed
ADF Swing application run from JDeveloper
Works, no work around needed N.A.
ADF Swing app deployed in jar files run from command line
Works with workaround The following JVM properties need to specified when launching the swing application
oracle.home - This is the directory where the Jdeveloper 11 is installed.
oracle.security.jps.config - This is the full path to your application jps-config file. You will typically find this under <application_dir>\src\META-INF folder.
jps.authz - Default authorization to read the credential store wallet to retrieve the password. 

If your Swing application is deployed as "application.jar", then
On Windows, these properties would be specified on the java command line as
Java-jar application.jar -Doracle.home=c:\jdev11g\jdeveloper -Doracle.security.jps.config=c:\jdev11g\JClientApp\src\META-INF\jps-config.xml -Djps.authz=DEBUG_NULL
where,  c:\jdev11g\jdeveloper is the dir where jdeveloper is installed. and  C:\jdev11g\JClientApp is your application directory

On Linux / Unix, the command line would look something like
Java-jar application.jar -Doracle.home=/home/jdev11g/jdeveloper -Doracle.security.jps.config=/home/jdev11g/JclientApp/src/META-INF/jps-config.xml -Djps.authz=DEBUG_NULL
where,  /home/jdev11g/jdeveloper is the dir where jdeveloper is installed. And /home/jdev11g/JClientApp is your application directory
ADF Swing app deployed using WebStart Does not work NA

Using complex DataType with Swing

When using compl