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

Known Issues for JDeveloper and ADF 11g (11.1.1.2.0)

last updated: 03-DEC-09

Content

Introduction

This document lists known issues for this release. 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!

Installation

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

Windows installations on systems which have disabled NTFS 8.3 (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.

You may use the fsutil command at a command prompt to both query and set this value:

eg. c:> fsutil behavior query disable8dot3

On Linux, do not use a system directory with spaces in it (8447574)

When JDeveloper is first run, the default domain for Integrated WLS is automatically created. If JDeveloper uses a system directory which has spaces in the path you will see a domain creation error in the log window. This is because Integrated WLS (and Oracle WebLogic Server) does not support creation of domains in paths which contain spaces.

The workaround is to avoid having a space in the system directory by using the default system directory. This is of the form  ~/.jdeveloper/systemxx.xx.xx.xx, therefore it has no spaces.

In particular, you should not do the following:

Recommended system resource ulimit on Linux (8693621)

The recommended system resource ulimit is 4096 for JDeveloper on Linux. Otherwise, the "too many open files" limitation may be hit.

To determine the configuration for your system:/bin/sh -c 'ulimit -n' Edit your /etc/security/limits.conf file.* hard nofile 4096:

        soft nofile 4096 

Files cannot be deleted on Windows systems because the path is too long (8222570)

JDeveloper may exceed the length of the path names permitted by Windows, and when you delete files you may see a message reporting that file paths are too long or not valid.

For more information, refer to Cause 4 in the Microsoft Knowledge Base article 320081, which is available at http://support.microsoft.com/kb/320081 .

Installing JDeveloper on Mac OS (8283602)

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.

2. Create a symbolic link for classes.jar

Running applications on Mac OS systems with Java Update 4 (8681385)

An additional step is required to successfully run applications on Mac systems that have Java for Mac OS X 10.5 Update 4 installed. Please refer to the installation guide for additional details on installing JDeveloper for Mac OS X.

  1. Open the jdev.conf file. The file is located in the MW_HOME/jdeveloper/jdev/bin/ directory.
  2. Add the following line to the jdev.conf file: AddVMOption -Djava.io.tmpdir=/var/tmp

IDE and Java SE Development

Subversion files checked out from a local repository with spaces in the name aren't versionable (8967665)

No versioning overlays are displayed on a set of files checked out from a local subversion server where the root URL contains space characters. None of the Subversion commands are enabled on the checked out files.

The workaround is to use other protocols such as svn:// instead of the file:/// protocol for connection or to move the repository to a path in which there is no space character.

Database Development

Cannot edit database table data in the table viewer using the keyboard (8481190)

In the data tab of a database table in the Table Viewer you cannot use the keyboard to insert or delete rows, or to commit changes to the database.

The workaround is to use the SQL Worksheet to edit the table data, using SQL INSERT, DELETE, and COMMIT statements to insert rows, delete rows (using the primary key of the row in the WHERE clause), and commit changes.

Set preference "Autocommit in SQL Worksheet" before connecting to TimesTen DB (8921862)

You must select the field Autocommit in SQL Worksheet on the Databases > Worksheet page of the Preferences dialog (available from the Tools menu) before connecting to a TimesTen dB, otherwise you will get an error message when you try to reconnect. 

When working with Sybase dB, select preference "Autocommit in SQL Worksheet" (8912348, 8916874)

When you are connected to a Sybase database, you should select the field Autocommit in SQL Worksheet on the Databases > Worksheet page of the Preferences dialog (available from the Tools menu). If this field is not selected, then when you perform the first action in the SQL Worksheet, JDeveloper starts a transaction.

In Sybase, there are a number of DDL statements that also start transactions and set a lock on some tables. For more information, see the "Allowing data definition commands in transactions" in "Transactions: Maintaining Data Consistency and Recovery" in the Transact-SQL User's Guide, available at http://infocenter.sybase.com .

Cannot import tables containing virtual columns (8921816)

If you try to import a table containing one or more virtual columns from Oracle Database 11gRelease 2, the import will fail and a message similar to this is displayed:

    Validation Failed
    <schema>.<table>.<column>
    Invalid <data type> Default Value
    Expression cannot use columns or user functions.  Literal strings should be quoted: <column list>

Copying and generating non-alterable database objects (9006266)

When you are using the Generate SQL from Database Objects wizard or Copy Database Objects to a Project wizard and you choose ALTER on the Choose Operation page, only objects that can be altered will be copied or generated to the target. Objects that are non-alterable, such as views and PL/SQL packages, will not be copied or reconciled, and when you click Finish a validation error dialog is displayed.

The workaround is to run the Generate SQL from Database Objects wizard or Copy Database Objects to a Project wizard twice. Run it the first time just for alterable objects, and choose ALTER on the Choose Operation page. Then run it a second time for non-alterable objects, and choose REPLACE on the Choose Operation page.

Need to refresh database navigator to see new objects (9049386)

When you create a new database object from the Database Navigator, you need to refresh the navigator in order to see the object.

Problems adding editioned view to database diagram (8976879)

When you create an editioned view and try to add it to a database diagram, JDeveloper displays an error to say that the editioned view is not a database object.

The workaround is to stop and restart JDeveloper, and then add the editioned view to the diagram.

Oracle Database 11g Release 2 functions in JDeveloper's view editor (8921825)

The Oracle Database 11g Release 2 functions LISTAGG and NTH_VALUE cannot be used in JDeveloper's view editor. The functions ORA_DST_AFFECTED, ORA_DST_CONVERT, and ORA_DST_ERROR are treated as user functions in the view editor.

Query Builder not available on shared SQL Worksheet (8993376)

The Query Builder option is not available on the context menu of a shared SQL Worksheet. The workaround is to use an unshared SQL Worksheet, which you can open using ctrl+shift+N.

Query Builder does not show related tables (7243487)

In Query Builder, if you choose Show Related Tables from the Options menu of a table on the canvas, JDeveloper will freeze. There is no workaround.

JDeveloper freezes when running long queries (8843946)

If you are click on a node in the Database Navigator that has a very large number of subnodes, for example Public Synonyms, JDeveloper will appear to freeze. You can either wait for the process to finish, or force JDeveloper to close and restart it.

Information about non-Oracle database connections appears in error dialog (8943379)

When you create a connection to a Sybase or MS SQL Server database using the drivers bundled with WLS, a 5701 message, which indicates the database on the server the user has been logged into, and a 5703 message, indicating the language the server is using, are displayed in an error dialog. However this information is just advisory and does not indicate an error.

Create database report from SQL Worksheet (8782149)

Before you create a report by selecting SQL from the SQL Worksheet and choosing Create Report from the context menu, you must first ensure that the Reports Navigator, available from the Database node on the View menu, is open.

Cannot export data from Oracle TimesTen database (8922209)

You cannot export data from a connection to an Oracle TimesTen database.

Cannot create columns named comment (8934043)

Although you can create table columns which use the reserved word "Comment" as the column name, the table will not work correctly.

Deployment

Domain creation fails after installing on new Windows version (7338577, 7339920, 8654914)

When JDeveloper is installed on a newly released Windows version, it is possible that Jython, which is used by Oracle WebLogic Server's script tool, does not recognize the Windows version and instead assumes that it is running in a Linux environment.

This causes domain creation to fail with the following error in CreateDefaultDomain.log:

wlst > Failed to get environment, environ will be empty: (0, 'Failed to /
execute command ([\'sh\', \'-c\', \'env\']): java.io.IOException: Cannot run /
program "sh": CreateProcess error=2, The system cannot find the file /
specified')/
@ wlst > Error:  ADRS_DOMAIN_PASSWORD environment variable not set.

The workaround is to obtain a patch for jython-modules.jar, or to run on a supported version of Windows.

Application needs to be redeployed to accept changes made to BC4J MBeans

If you attempt to change an application's BC4J configuration via BC4J MBeans using Enterprise Manager Fusion Middleware Control (post-deployment), these configuration updates will not take effect. You must use JDeveloper to change the BC4J configuration and then redeploy the application to the application server for the changes to take effect.

Web Services Development

Ignore warning message displayed when upgrading JAX-RPC web service in JDeveloper (8912681)

When upgrading a JAX-RPC Web service developed using JDeveloper from Oracle Containers for J2EE (OC4J) to Oracle WebLogic Server 10.3.x, the following warning may be displayed. This warning is displayed when the OC4J Web service contains whitespace or carriage return characters within the code. This warning can be ignored.

WARNING: A Text node was set to a value that is all whitespace. The DOM will be out of sync with the Text Buffer. The Text Node on reparse will also be removed from the DOM. 

Web service test page may reference incorrect namespace when nesting complex type is an array (9066072)

When testing Web services in JDeveloper, if you have a schema with nested levels of complex type and the nested type is an array, the generated test SOAP message may use the outermost namespace in the inner nested type instead of the actual namespace of the child element.

For example:

  
  <ns1:outermost>
  <ns2:nested1>
  <ns2:nested2>....</ns2:nested2>
  <ns2:nested2>....</ns2:nested2>
  </ns2:nested1>
  </ns1:outermost>
   
 

Instead of the correct ns2:nested2 namespace, the SOAP message is being generated ns1:nested2 namespace, as shown below:

  <ns1:outermost>
  <ns2:nested1>
  <ns1:nested2>....</ns1:nested2>
  <ns1:nested2>....</ns1:nested2>
  </ns2:nested1>
  </ns1:outermost>
 

As a workaround, manually correct the inner ns1:nested2 references to ns2:nested2 in XML format before testing.

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 overwrite the ObjectFactory class created by the previous one if generated into the same package.

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>

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).

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
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.

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

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 connect to WS-Trust server using the HTTP Analyzer (8937114)

You cannot configure "Secure Token Service" aka "STS" credentials when using the HTTP Analyzer. There is no current workaround for this issue.

Hyperlinks offset in the HTTP Analyzer view (9032244)

When displaying implied hyper links in the content view of the HTTP Analyzer you will see that on the Windows platform for every line you are down the document the links are offset by one character. This is no current workaround for this issue.

Team Productivity Center

Tag queries return no results if the tag name contains the # character (8969146)

Tags containing the pound or number sign (#) are not displayed in tag queries. The workaround is to create tags without using the pound or number sign.

Attempting to open a .JPR/.JWS attached file fails without giving a message (9033734)

When you select a .JPR or .JWS file to open directly after downloading, the file does not open. This is expected behavior, as it is not normal usage to open these file types in isolation in the IDE. However, there is no explanation given when the files do not open.

The workaround is to save the files after downloading and open them using the Application Navigator, with the appropriate context.

User with administrator privilege is unable to create/modify team queries (8430322)

This issue affects users who are team administrators, but who do not have any team roles assigned to them. The workaround is to assign yourself a role in the team, choosing a role with the appropriate permissions.

An OTPC.WAR file deployed on Apache Tomcat cannot be used on WebLogic Server (8499532)

Once otpc.war is deployed or installed using Oracle Team Productivity Center Installer on an Apache Tomcat server, it cannot be moved/used on a Weblogic Server, or vice versa.

This is because Team Productivity Center does not bundle eclipselink libraries to otpc.war when installed on WebLogic Server, because WebLogic Server already shipped the libraries. In fact, bundling eclipselink libraries on otpc.war (in otpc/WEB-INF/lib folder) will cause problems on WebLogic Server installation. See "Option 1: Leave shipped module as is - Recommended" on http://wiki.eclipse.org/EclipseLink/Examples/JPA/WebLogic_Web_Tutorial.

Since eclipselink libraries don't come with Tomcat out of the box, Team Productivity Center Installer bundles them in the otpc.war deployment.

Users will need to run a new Team Productivity Center installation against each type of application server.

Note: Users can still move the deployed otpc.war from one application server to another, providing the application servers are from the same vendor (i.e. Tomcat to Tomcat, or WebLogic Server to WebLogic Server). They cannot move the deployed otpc.war from one vendor's server to a different vendor's server.

Using the new interface WorkItemFieldFeature

The following notes are intended for developers of connectors to be used with Oracle Team Productivity Center. The features described are not necessary for normal users or administrators of Oracle Team Productivity Center.

Overview

The WorkItemFieldFeature is implemented when the connector writer wants to add a special user interface feature for a work item field, as follows:

The WorkItemFieldFeature is used to replace the existing WorkItemWebReference interface. WorkItemWebReference is marked as deprecated now.

Interface definition

API Description
String getDefaultOperator(java.lang.String fieldName) Retrieves the single default operator to use for the specified field name
java.util.Map<String,String> getOperators(java.lang.String fieldName) Retrieves the operator set to use for the specified field name
java.net.URL getURL(java.util.Map session,
java.lang.String fieldName,
java.lang.Object fieldValue,
WorkItem workitem)
Retrieves the URL to use for the specified field

Code example

The class that implements WorkItemFieldFeature is used in the work item definition file as the value for attribute webURLHandler and operatorHandler, as shown in the following example:

                               
<WorkItem data-source="rpthead" id-def="TASKID" id-label="${res.TASK_ID}"
          name="${res.TASK_NAME}" type="Task"
          webURLHandler="oracle.alm.sample.model.CustomFeature "
          operatorHandler= "oracle.alm.sample.model.CustomFeature"
          xmlns="http://www.oracle.com/alm"
          version="1.1.1.1">

                            

The class that implements WorkItemFieldFeature can be the Java class that implements the WorkItemConnector interface, or a separate Java class. In the following example, CustomFeature class uses the second approach.

                               
public class CustomFeature implements WorkItemFieldFeature
{
  public CustomFeature(){}

  public URL getURL(Map session, String fieldName, Object fieldValue,
                    WorkItem workitem)
  {
        if (fieldValue!= null && fieldValue instanceof String)
        {
         if (attributeName.equals("PRODUCT"))
            urlStr = "http://www.foo.com/product?productId="  + fieldValue;
         else
            urlStr = URLStr + fieldValue;

     try 
          {
            return new URL(urlStr);
          }
          catch (MalformedURLException e)
          {
            e.printStackTrace();
                return null; 
          }
         }
         return null;
        }

  public Map<String, String> getOperators(String fieldName)
  {
   Map<String, String> operators = new HashMap<String, String>();
   if (fieldName.equals("product")
    {
    operators.put(Criterion.OPERATOR_EQUAL, 
             AlmDefaultResourceBundle.get(Criterion.OPERATOR_EQUAL));
    operators.put(Criterion.OPERATOR_NOTEQUAL,
                         AlmDefaultResourceBundle.get(Criterion.OPERATOR_NOTEQUAL));    }
        else
        operators.put(Criterion.OPERATOR_EQUAL,  
                 AlmDefaultResourceBundle.get(Criterion.OPERATOR_EQUAL));
                         
        return operators;
   }
   
   public String getDefaultOperator(String fieldName)
   {
    if (fieldName.equals("product") || fieldName.equals("component"))
      return Criterion.OPERATOR_EQUAL;
          return Criterion.OPERATOR_LIKE;
        }
  }

                            

How to support dynamic Lists of Values (LOV)

Dynamically updating lists of values (LOV), also called partial page refresh (PPR), is supported for inputText control and Combobox control combinations. This dynamic LOV update works as follows: an inputText field ( InputText control, inputDate control or listOfValues control) serves as the change source. After the user makes a change in the source input field and tabs out of the control, the associated combination box can set its list data set dynamically without reloading the whole page.

To make the dynamic LOV update work on combination box control, do the following two things:

  1. Build the PPR relationship between the source control and the PPR target combination box control. The following example is from the connector UI metadata file:

                                       
    <listOfValues label="#{workitemmodel.labels.OWNER}"
                  value="#{workitemmodel.values.OWNER}"
                                 source="OWNER" pprTargets="statusID"/>
    <comboBox label="#{workitemmodel.labels.STATUS}" 
              value="#{workitemmodel.values.STATUS}"
              valueSet="#{workitemmodel.listItems.STATUS}"
              readOnly="true" id="statusID"/>
    
                                    

    There are two important attributes for building this relationship:

    • The pprTargets attribute on the source control. The value for the pprTarget attribute is the id of the target comboBox separated by comma.
    • The id attribute on the target control. The control ID should be unique at the region scope in the UI metadata file.

  2. Return the correct data set inside getLOVQueryResult() of the WorkItemConnector implementation class. Each time the user changes the value in the inputText field and tabs out the field, a new QueryInfo object will be passed to this API. The QueryInfo object includes a dynamic query criteria row based on the information the user typed into the inputText field. Thus different data sets can be returned and the combo boxes can show the new data set.

How to support customized listeners and managed beans

Developers of connectors for Team Productivity Center can provide connector-specific functionalities by customizing the work item UI control behavior.

Team Productivity Center provides a connector level configuration file, tpc-config.xml, for registering all metadata resources. This file should be put under src/META-INF/ in the connector source code directory.

For details on the tags and attributes supported in the configuration file, please read the Team Productivity Center tag documentation.

Writing a Customized Managed Bean

When you write a connector for Team Productivity Center, you can write a customized managed bean for any value binding support, as shown in the following steps.

  1. Register a managed bean entry in the file tpc-config.xml, as shown in the following example:
                                       
     <managed-bean>
          <name>labelBean</name>
              <impl-class>oracle.alm.sample.resbean.LabelBean</impl-class>
              <lifecycle>page</lifecycle>
      </managed-bean>
      
     
                                    
  2. Implement the LabelBean, as shown in the following example:
                                       
    public class LabelBean
    {
       public LabelBean(){}
       public String getLabel()
          {
               return _label;
              }
       public  void setLabel(String label)
        { 
              _label = label;
            }
       String _label = "test label";
    }
    
                                    
  3. Use the managed bean in either the work item definition metadata file (for a work item field, for example), or a label attribute for a UI control in the UI metadata file:
                                       
                 
            label="${labelBean.label}"
    
                                    

Writing a Customized UI Listener

You can also write a customized UI listener and register it for a control in the work item UI metadata by performing the following steps:

  1. Register the listener in tpc-config.xml:
                                       
     <managed-bean>
        <name>opentask </name> 
        <impl-class>oracle.alm.sample.view.OpenTaskListener </impl-class>
        <lifecycle>page </lifecycle>
      </managed-bean>
    
                                    
  2. Implement OpenTaskListener class:
                                       
    package oracle.alm.sample.view;
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import java.util.List;
    
    import oracle.alm.connector.data.WorkItem;
    import oracle.alm.view.application.ViewManager;
    import oracle.alm.view.context.AlmELContext;
    import oracle.alm.view.model.AlmDataTableModel;
    import oracle.alm.view.uicomponents.AlmComponent;
    import oracle.alm.view.uicomponents.AlmContextMenuComponent;
    import oracle.alm.view.uicomponents.AlmTableComponent;
    import oracle.alm.view.uicomponents.RenderingContext;
    
    public class OpenTaskListener
      implements ActionListener, AlmScope
    {
      public OpenTaskListener(RenderingContext rcontext, AlmComponent component)
      {
       super();
       _rcontext = rcontext;
       _component = component;
      }
      
      public void actionPerformed(ActionEvent e)
      {
        if (_component instanceof AlmContextMenuComponent)
        {
          AlmComponent parent = _component.getParent();
          if (parent instanceof AlmTableComponent)
          {
            AlmTableComponent tableComp = (AlmTableComponent) parent;
            List<Integer> rows = tableComp.getSelectedRows();
            if (rows != null)
            {
              ViewManager vmanger = ViewManager.getInstance(); 
              for (int row: rows)
              {
                AlmELContext elcontext = vmanger.getELContext(_rcontext);
                AlmDataTableModel dataModel = tableComp.getValue(elcontext);
                Object selectedValue = dataModel.getSelectedItem(row);
                if (selectedValue instanceof WorkItem) 
                {
                  String wiType = _rcontext.getCurrentWorkItemType();
                  String reposName = _rcontext.getCurrentReposName();
                  String reposId = _rcontext.getCurrentReposId(); 
                  vmanger.OpenWorkItemInEditor(((WorkItem) selectedValue),
                                               wiType, reposName, reposId);
                }
              }
            }
          }
        }
      }
      public void setRenderingContext(RenderingContext rc){_rcontext = rc};
      public RenderingContext getRenderingContext(){return _rcontext};
      public void setSourceComponent(AlmComponent component) {_component = component};
      public AlmComponent getSourceComponent() {return _component};
      private RenderingContext _rcontext;
      private AlmComponent _component;}
    
                                    
  3. Use the customized listener in the work item UI metadata:
                                       
    <?xml version="1.0" encoding="windows-1252" ?>
    <regions resFile="/META-INF/res/uiresources.xml">  
    <region id="Default" helpTopicId="f1_connector_sample_htm">
        <formLayout columns="1" blockSize="10" fieldWidth="400">
          <inputText label="#{workitemmodel.labels.TASKID}" 
                 value="#{workitemmodel.values.TASKID}" readOnly="true"/>          
          <inputText label="#{workitemmodel.labels.DESC}"
                 value="#{workitemmodel.values.DESC}"/> 
          <listOfValues label="#{workitemmodel.labels.OWNER}" 
                 value="#{workitemmodel.values.OWNER}" 
                 source="OWNER" pprTargets="statusID"/>
          <comboBox label="#{workitemmodel.labels.STATUS}"
                 value="#{workitemmodel.values.STATUS}"
                 valueSet="#{workitemmodel.listItems.STATUS}"
                 readOnly="true" id="statusID"/>
          <inputDate label="#{workitemmodel.labels.DUEDATE}"
                 value="#{workitemmodel.values.DUEDATE}"/>
          <inputText label="#{workitemmodel.labels.URL}" 
                 value="#{workitemmodel.values.URL}"/> 
        </formLayout>
        <panelLayout>
          <action text="Open Task" actionListener="${opentask}"/>
        </panelLayout>
      </region>
    </regions>
    
                                    

Customized context menu action

Developers of Team Productivity Center connectors can add customized menu items when the user clicks the right mouse button on the query result table. Perform the following steps:

  1. Register the listener in tpc-config.xml and specify the menu item details:
                                       
     <managed-bean>
      <name>savetask</name>
      <impl-class>oracle.alm.sample.model.SaveTaskListener</impl-class>
      <lifecycle>page</lifecycle>
      </managed-bean>
      <contextMenuDef>
      <menuItemDef label="Save" listenerRef="savetask"/>
      </contextMenuDef>
    
                                    
  2. Implement SaveTaskListener class:
                                       
    package oracle.alm.sample.model;
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.List;
    import javax.swing.JOptionPane;
    import oracle.alm.connector.data.WorkItem;
    import oracle.alm.view.application.ViewManager;
    import oracle.alm.view.context.AlmELContext;
    import oracle.alm.view.model.AlmDataTableModel;
    import oracle.alm.view.uicomponents.AlmComponent;
    import oracle.alm.view.uicomponents.AlmContextMenuComponent;
    import oracle.alm.view.uicomponents.AlmTableComponent;
    import oracle.alm.view.uicomponents.RenderingContext;
    
    public class SaveTaskListener implements ActionListener, AlmScope
    {
      public SaveTaskListener(RenderingContext rcontext, AlmComponent component)
      {
       super();
       if (component instanceof AlmContextMenuComponent)  
             _almComponent = (AlmContextMenuComponent) component;  
                     _renderingContext = rcontext;
       }
       
       public void actionPerformed(ActionEvent e)
       {
        ViewManager vmgr = ViewManager.getInstance();
            
            //First get the corresponding AlmTableComponent
            AlmComponent parent = _almComponent.getParent();
            if (parent instanceof AlmTableComponent)
            {
               AlmTableComponent tableComp = (AlmTableComponent) parent;
            //Then call public API on tableComp to get selected rows
            List&l;Integer> rows = tableComp.getSelectedRows();
            
            if (rows != null)
             {
              int row = rows.size();
              String cs = "";
              if (row == 1)
              { 
                //show the ID and subject of the selected item
                    //Then get the selected value object throw the tableComp's UI model.
                    ViewManager vmanger = ViewManager.getInstance(); 
                    AlmELContext elcontext = vmanger.getELContext(_renderingContext);
                    AlmDataTableModel dataModel = tableComp.getValue(elcontext);
                    Object selectedValue = dataModel.getSelectedItem(row);
                    if (selectedValue instanceof WorkItem)
                    {
                         Cs = "Save Task listener: work item ";
                             WorkItem wi = (WorkItem)selectedValue;
                             Cs += wi.getRowKey() + " with subject \'";
                             Cs += wi.getSubject() + "\' has been selected.";
                    }
              }
              else if (row > 1)
              {
                //show the number of rows selected
                    Cs = "Save Task listener: " + Integer.toString(row) + " rows selected";
                    }
                    JOptionPane.showMessageDialog(vmgr.getIDEMain(), Cs);
              }
            }
      }
    public void setRenderingContext(RenderingContext rc){_ renderingContext = rc};
    public RenderingContext getRenderingContext(){return _ renderingContext };
    public void setSourceComponent(AlmComponent component) {_almComponent = component};
    public AlmComponent getSourceComponent() {return _almComponent };
    
    AlmContextMenuComponent _almComponent;
    RenderingContext _renderingContext;
    }
    
                                    

Accessing connector data through a firewall

The following notes are intended for developers of connectors to be used with Oracle Team Productivity Center. The features described are not necessary for normal users or administrators of Oracle Team Productivity Center.

If the connector needs to use the HTTP protocol to fetch data through a firewall that JDeveloper is running behind, the following special modifications are required.

  1. In JDeveloper, select Tools > Preferences. In the Preferences dialog, open the node Web Browser and Proxy. Check the Use Proxy check box and enter the values for Host Name, Port, and Exceptions.
  2. The connector writer needs to set the proxy configuration for its HttpClient inside the connector code where it needs to fetch data (for example, inside the getQueryResult() API).
      
                                      
     HttpClient httpclient = new HttpClient();
      String proxyHost = System.getProperty("http.proxyHost");
      String proxyPort = System.getProperty("http.proxyPort");
      Boolean useProxy = null;
     
      if (proxyHost != null && !proxyHost.isEmpty()&&
          proxyPort != null && !proxyPort.isEmpty())
      {
        String proxyExceptions = System.getProperty("http.nonProxyHosts");
        useProxy = (proxyExceptions == null);
        if (!useProxy)
        {
          String host = "";
          try
          {
            URL url = new URL(getServerURL());
            host = url.getHost();
            useProxy = true;
          }
          catch (Exception e)
          {
            e.printStackTrace();
          }
     
          proxyExceptions = proxyExceptions.replace("*", ".*");
          useProxy = (Pattern.matches(proxyExceptions, host) == false);
        }
      }
     
      if (useProxy != null && useProxy.equals(Boolean.TRUE))
            httpclient.getHostConfiguration().setProxy(proxyHost, Integer.parseInt(proxyPort));
    
    
                                    

ADF Desktop Integration

Inserting Excel Rows into an ADF read-only table component (7626970)

Inserting an Excel row into an ADF Read-only Table results in a new Excel row that behaves as if it were part of the downloaded data set. In fact, the new row exists only in Excel. To avoid this issue, use ADF Table instead.

Excel validation and ADF table component's placeholder row (7509432)

Excel validation does not get applied to the placeholder row in an ADF Table component that contains data.

Moving a column in a runtime ADF read-only table component (6196783)

If the user of the worksheet containing a read-only table component uses Excel's cut-and-insert operations to move a column to be the leftmost column of the table, an exception occurs on the next download. To resolve the situation, the user should close the workbook without saving the changes.

Change tracking after moving a column to the end of an ADF table component (6032482)

Change tracking is disabled if an end user moves a column to the end of an ADF Table component at runtime.

Deleting an integrated Excel worksheet at runtime (6161839)

Oracle ADF Desktop Integration does not support the deletion of integrated worksheets at runtime. If the user deletes an integrated worksheet, un-handled exceptions will occur. The workaround is to close the workbook without saving any changes.

Switching an integrated Excel workbook from test mode to design mode (7134292)

Unhandled Excel exception when returning from Test mode to design-time mode if Excel filtering is applied to a table.
Steps:

  1. Create a workbook with a table
  2. Click the run button to enter test mode
  3. Select the header row of the table
  4. Enable Excel filtering ("Sort & Filter" in the Home tab)
  5. Use Excel filter to display a subset of the rows in the table
  6. Click the Stop button to return to design-time mode

At this point, an un-handled exception occurs. To resolve the situation, dismiss the error dialog and remove the filter from the table. Then, click the Stop button again to return to design-time mode.

Microsoft Excel always prompts users to save integrated Excel workbooks (6148067)

Microsoft Excel prompts an end user to save an Excel workbook that has been configured with Oracle ADF functionality (an integrated Excel workbook) even if the user has not modified the Excel workbook after opening it. This is expected behavior because the Oracle ADF Desktop Integration module modifies an integrated Excel workbook each time an user opens it.

Select components in web pages do not respect z-order as expected when page is displayed from dialog actions (7205486)

Select components in web pages do not respect z-order as expected when the page is displayed from Dialog actions.
Steps:

  1. Create an integrated workbook with a button that invokes a Dialog action
  2. On the web page displayed by the Dialog, include an HTML "select" component as well as some other HTML components.
  3. Use a "div" to overlay the components and make them appear to be in a disabled state

When this page is displayed in a normal web browser, the div performs as expected. When it is displayed in the .NET Web Browser control used in the Dialog action, the "select" control appears on top of the div instead of beneath it.

The controls are not respecting the "z-order" configuration as expected.
Reference:
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=377657

To avoid this problem, use web page control types that are not affected by the problem.

ADFdi Excel context menus do not hide or show properly (7511508)

Microsoft Excel does not invoke the "before right click" event when a user invokes a context menu from a keyboard. Users should use either the keyboard or the mouse's right-click button to invoke a cell's context menu. Do not use both in the same user session. This behavior occurs at design time and runtime in integrated Excel workbooks.

ADF button components and Excel zoom level (8305907)

Excel disables ADFdi button components in integrated worksheets when "zoom" is set to any value other than 100%. The workaround is to set Excel's zoom level to 100% so that ADF button components can function correctly in integrated Excel workbooks.

Conditional formatting in integrated Excel workbooks (7639699)

Oracle ADF Desktop Integration does not support the conditional formatting features provided in Excel by clicking Home > Conditional Formatting.

Failure details for foreign key violations not displayed properly (8262587)

Users may encounter unexpected reports of errors under certain circumstances during the Upload operation for an ADF Table component. The Upload operation processes rows in batches. After posting changes from a batch ADFdi executes the action specified by the CommitBatchActionID. Errors that occur during the commit action may continue to be reported on subsequent batch commit actions, even though those batches of records do not contain the error. To workaround this end-users should resolve the errors from the first failed batch and then retry the Upload operation.

Server-side row set can be positioned on wrong row when DoubleClickActionSet invoked on ADF read-only table component (8272219)

An ADF read-only table component only caches the original row set index in an integrated Excel workbook. Invoking a DoubleClickActionSet on an ADF read-only table component results in an attempt to position the server-side row using the cached row index. If the server-side row set changed in between the time the ADF read-only table component caches the original row set index and the DoubleClickActionSet is invoked, the server-side can be positioned on the wrong row. To avoid this consider using an ADF table component instead.

Using variableUsage element causes null pointer exception in ADFdi remote servlet (6377073)

ADFdi does not support variables in the page definition declared with the syntax of variableUsage. If the developer creates variableUsage in the ADFdi-related page definition, it will produce NullPointerExceptions in the server at runtime. Instead, create variables using the <variable> element in the page definition to workaround this.

ADF Faces dialog framework (7510296)

The web browser control that renders web pages invoked from integrated Excel workbooks does not support pages built with the ADF Faces dialog framework. Avoid building pages with the ADF Faces dialog framework. If you cannot avoid building pages, avoid invoking links from pages you build with the ADF Faces dialog framework.

Known issues with the design-time property inspector and expression builder features

The property inspector and expression builder features in the ADFdi Designer are driven off of the saved component metadata. As a result, there are some known issues when dealing with new objects or values. In each case, the workaround is to save the object and then reopen.

Sample issues:

Limitations on dependent list of values configuration (8270742/ 8267114)

Oracle ADF Desktop Integration requires that items in a dependent List of Values component remain constant across all rows of an ADF table component because Oracle ADF Desktop Integration caches items that appear in a dependent list of values.

Changing list binding metadata can cause unexpected exceptions in workbooks run prior to the change (8575731)

The workaround is to ClearAllData.

Empty forms (8651633, 8651645)

In some instances of using a form with model-driven lists in Excel with zero rows in the iterator, there is unexpected behavior. The workaround is to use attributes configured with dynamic lists instead.

Integrated Excel workbooks and HTTPS (7117108)

Attempts to connect to a web application from an integrated Excel workbook over HTTPS result in an error if the certificate is not present on the client machine. Error text: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. The remote certificate is invalid according to the validation procedure.

Known issues involving workbook download

There are several related scenarios that produce the following unexpected error message:

Microsoft.VisualStudio.Tools.Applications.Runtime.CannotCreateCustomizationDomainException: Customization does not have the permissions required to create an application domain. ---> System.Security.SecurityException: Customized functionality in this program will not work because the location of <url> is not in the Office Trusted Locations list, or all trusted locations are disabled. Contact your administrator for further assistance.

  • Getting customization exception when workbook URL > 256 chars (8758240)
    Summary: Open a workbook with a URL longer than 256 characters results in the CannotCreateCustomizationDomainException
    This problem only occurs when accessing the URL from Internet Explorer
    Workaround: Use a shorter URL, save the workbook to local storage before opening, or use Firefox to access the URL
  • Open the same workbook twice with different parameters (8572040)
    Summary: Download/open a given workbook with parameters, leave it open, download it again with different parameters
    Workaround: Close the first workbook before opening the second one.

Migration considerations for Tamper Check

In 11.1.1.2.0, there is a change to the way Tamper Check works. As a result, workbooks published with 11.1.1.1.0 should be republished using 11.1.1.2.0. If you do not republish workbooks containing multiple integrated worksheets, you may experience tamper check failures at runtime even when no tampering has occurred.

Editing value defined in ViewLink between master and detail fails with exception (8770675)

Editing the ViewLink attribute is not supported since it alters the selections in the child view object.

Known issues involving polymorphic view objects (8970724)

If your table allows inserts and involves a polymorphic view objects, it is not sufficient to use the CreateInsert operation of the view object. Instead, you must create a custom method that set the discriminator values using the view object's createAndInitRow method.

ADF Faces

NLS issues with JDK 1.6-only locales (6859992)

Date and number formatting (convertDateTime, inputDate, etc.) do not work with the 17 new locales added in JDK1.6. Locales supported in JDK 1.5 do not have this issue.

Profiler file logger

The profiler file logger can be used only in a non-portal environment on FF and IE browsers with at least 1.5._06 JRE on the client box and privilege to write to the user home directory. The resulting file format is subject to change without any notice and not intended to be used with any xml parser tool. In order to use the feature, the user has to accept the certificate.

Hot keys

Application developers must be cautious when assigning access keys to menus. Hot keys may be intercepted by various browsers or even the operating system. One such hotkey, ALT-D, will send focus to the address bar in both IE and FireFox 2. For this hotkey, we have removed the references in our demos. But many more hotkeys may be restricted so it is a good idea to try them out on all of your supported browsers.

Active data service (6926281)

If Active Data Service is enabled in an application, there are certain ADS pages (/adwwls/wls.ads and adw.jspx) that should not be cached. If Oracle Web Cache runs for the application, need to add cache rule to exclude pages with name of /adwwls/wls.ads or adw.jspx.

Primary keys from model (6894412)

ADF Faces components expect applications to use primary keys on the model which are pre-populated for new records and do not change with any record updates.

Application view cache (6495920)

The Application View Cache won't work for any page where the rendering of the component tree causes the structure of the component tree to change temporarily. Since this is often the case and the application developer has no way of telling when this will occur, USE_APPLICATION_VIEW_CACHE should never be used. It also only helps initial render performance and does not help the session size.

Trinidad application and new Window detection (8677612)

New Window Detection logic only works in Rich Client applications, but not in Trinidad applications For Trinidad applications, the following parameter should be added in web.xml to disable New Window Detection logic.

            <context-param> 
                <param-name>oracle.adf.view.rich.newWindowDetect.OPTIONS</param-name> 
                <param-value>off</param-value> 
            </context-param> 
          

Emailable page

The table component has some known issues in emailable page mode.

ADF Faces stamped components with MDS

ADF Faces components do not support persisting customization changes to MDS if the component is contained inside of (anywhere in the subtree of) AF:forEach or AF:iterator tags. This limitation is because, while such structure results in multiple component copies in the view tree, they have a single representation in the jsp documents.

RUEI and UserActivity data

Because of a limitation in the IE userData persistence behavior, the userActivity data for previous requests may be partially or sometimes completely unavailable when accessed from pages with a different URL than when it was originally saved.

Page with multiple components doing data fetch (8850994)

If you have a page with multiple components doing data fetch (for example 2 tables where contentDelivery is lazy) you will see a warning that there are multiple forms on the page, even if there is only a single form. As long as there is really only one form on the page the page will function normally and the warning can be ignored. The warning looks something like:

<FormRenderer><setupEncodingContext> Multiple forms detected on viewId:/stats. Rich client currently has some limitations in dealing with multiple forms.

Accessibility: Column headers for total/subtotal cells (6931494)

ADF Faces users can typically produce accessible table content by specifying column headers for every column in their AF:table. However, in certain complex cases, such as when the AF:table contains total or subtotal rows, the cell containing the labels for these rows may be inappropriately associated with the containing column's column header. For example, assuming a column contains employee names and has the header text "Employee Name", a cell containing the text "Total" will be inappropriately identified to screen reader users as being an "Employee Name". In order to avoid confusion, such cells should not be associated with any column header. ADF Faces does not provide any mechanism for suppressing column headers for such cells.

Accessibility: Keyboard selection request frequency (6238722)

When interacting with an AF:table, AF:tree, or AF:treeTable, using the up/down arrow keys to change the selection can result in a round trip to the server. ADF Faces already optimizes to reduce the number of round-trips by only sending a single request at a time, and also by dropping requests for intermediate selection states that occur while a request is outstanding. However, in some cases keyboard users may find the current behavior inefficient, since a request is sent to the server as soon as the request queue frees up. Ideally, no request would be sent until after the user has reached the item that they intend to select - ie. until after the user has paused keyboard activity for some short period of time.

Accessibility: Read-Only input components (5889673)

Currently read-only input components, such as AF:inputText, are rendered by ADF Faces as plain text. As such, there is a loss of information that may be meaningful to screen reader users - ie. screen reader users have no way to determine that the text in question corresponds to a input control. In addition, since plain text content is not included in the tab navigation order, screen reader users may fail to recognize that this read-only content is present on the page.

Accessibility: Expanding and collapsing nodes of AF:treeTable (8295444)

When disabling row selection in the AF:treeTable by setting the rowSelection attribute to "none", the resulting AF:treeTable content is not keyboard navigable. In particular, it is not possible to use the keyboard to navigate to and expand/collapse nodes in the AF:treeTable. This issue can be avoided by not disabling row selection for this component.

Automatic partial page rendering

There is a known limitation for Automatic Partial Page Rendering support on components which are associated with actions, examples are buttons, hyperlinks. This limitation occurs when the binding associated with the component is recreated, which should happen very rarely, e.g. dynamic form, dynamice region, DT@RT. There are two types of workaround that can be applied:

  1. Use manual PPR, set paritalSubmit="true" and configure partialTriggers on related components.
  2. Do not use PPR, set partialSubmit="false" on the related components.

Design-Time: Convert feature

The Convert feature in previous releases caused a lot of confusion because it was believed that it would do some special steps to convert from one component to another. In order to remove confusion and allow more specialized behavior, a new Convert framework was developed.

In this release, Convert (renamed "Convert To…") will only be available on a subset of ADF Faces components (activeImage, activeOutputText, inputColor, inputDate, inputFile, inputNumberSlider, inputNumberSpinbox, inputRangeSlider, inputText, richTextEditor, selectBooleanCheckbox, selectBooleanRadio, commandImageLink, commandLink, goImageLink, goLink, outputFormatted, outputText, and image). In subsequent releases, we will be introducing specialized behavior to allow conversion between more complex components, such as layout components.

ADF Data Visualizations

ADF DVT Graph and Gauge

ADF DVT Gantt Chart

ADF DVT Pivot Table

ADF DVT PivotFilterBar

ADF DVT Databinding and Design Time

ADF Share

BC4JConfigLifeCycleCallback MBean causes WebLogic server compliance exception (8966672)

When you compile a web user interface project that does not rely on ADF Business Components and the web.xml file registers the listener class oracle.bc4j.mbean.BC4JConfigLifeCycleCallBack, your project will not compile. In this case, the Log window will show the warning:

Warning: weblogic.servlet.internal.dd.compliance.ComplianceException: The class "oracle.bc4j.mbean.BC4JConfigLifeCycleCallBack" referred by the descriptor element "listener" is not found. Please ensure that it is present in the classpath.

To resolve this error, open the web.xml file in the source editor and delete the listener registration element:

  <listener>
    <listener-class>oracle.bc4j.mbean.BC4JConfigLifeCycleCallBack</listener-class>
  </listener>

Then save the edited web.xml file and recompile the project.

ADF Business Components

Cannot deploy workspace with both WebService and PortableWebService in same project (8374643)

If you have a single project containing a java class with a web service  annotation (@WebService) as well as an ADF Business Components service interface (which uses the @PortableWebService annotation), you will encounter a deployment error.

The workaround is to either split the Java class with a web service annotation into a separate project, or alternatively adjust the deployment profile files so the WAR profile contains just the web service and the Business Components Service Interface profile contains just the Portable Web Service by unchecking the appropriate checkboxes in the profile editor.

Query Limit feature for LOV bindings value may impact performance (9052327)

The documentation for the listRangeSize property states that the default value for a LOV (list of values) binding defined for view object attributes is:

In fact, this is incorrect, and the default value has not changed since 11gR1 and is still 10 rows for this property. Please note that the new Query Limit feature in the UI Hints page of the Create List of Values dialog lets you set the value of the listRangeSize property. However, changing the value to a high number will result in high number of rows being fetched at a time in the LOV search dialog's result table. In a future release, the query limit for the combobox's dropdown list and the fetch size for the LOV search dialog will be controlled by separately configurable properties.

jbo.sqlbuilder property as an application module configuration option fails (9018765)

An ADF application module configuration (bc4j.xcfg file) can define a database connection other than Oracle database type, such as SQLServer, IBM DB2, or MySQL. By default the SQL style will be "Oracle" for all database connections and should be modified to manually override the SQL style with one that supports the chosen database vendor. The bc4j.xcfg file provides the jbo.SQLBuilder property for this purpose, but the property is ignored and CRUD operations performed on the application module will result in the exception:

JBO-30003: The application pool (oracle.jbo.server.uniqueid.RowIdAMShared) failed to checkout an application module due to the following exception: 
java.lang.ClassCastException: com.microsoft.sqlserver.jdbc.SQLServerConnection cannot be cast to
oracle.jdbc.OracleConnection at oracle.jbo.server.OracleSQLBuilderImpl.setSessionTimeZone(OracleSQLBuilderImpl.java:5128)
...

The workaround is to specify jbo.SQLBuilder as a system property instead of an application module configuration option. This will cause the application module to pickup the value from the system properties instead of using the default value (Oracle). However, specifying the system property as an OS environment variable or Java command line option comes with high administration overhead. The best solution is to set up a web application filter in the web.xml deployment descriptor and define the system property there. For example, the servlet context listener in the following sample will set the system property for the web application.

import java.security.AccessController;
import java.security.PrivilegedAction;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import oracle.jbo.common.PropertyMetadata;

public class InitializationListener implements ServletContextListener {
        private ServletContext context = null;
        
                public void contextInitialized(ServletContextEvent event) {
                        context = event.getServletContext();
                        
                        AccessController.doPrivileged(
                                new PrivilegedAction() {
                                        public Object run() {
                                                System.setProperty(PropertyMetadata.PN_SQLBUILDERIMPL.getName(), "SQLServer");
                                                        return null;
                                        }
                                });
                }
                
                public void contextDestroyed(ServletContextEvent event) {
                        context = event.getServletContext();
        }
}

ADF Customization (Seeded and User Customizations)

Persisting saved searches for the query component

In order to persist saved searches for the query component, you must update your adf-config.xml and place the following code within the mds-config element after the cust-config element.

<persistence-config>
        <metadata-namespaces>
                <namespace path="/persdef" metadata-store-usage="MAR_TargetRepos"/>
        </metadata-namespaces>
        <metadata-store-usages>
        <metadata-store-usage id="MAR_TargetRepos" deploy-target="true" default-cust-store="true"></metadata-store-usage>
        </metadata-store-usages>
</persistence-config>

Ensure ADFBindingFilter is registered

In this version, the ADFBindingFilter must be registered in your project's web.xml in order for user customizations (ie. implicit personalizations) to be created at runtime.  In most cases, ADFBindingFilter is automatically registered in your project's web.xml file.  However if you are only using our view technologies and not our model, controller, or security layers, you may need to register this ADFBindingFilter.  To do so open web.xml file in your project and add the following entry.

<filter>
  <filter-name>adfBindings</filter-name>
  <filter-class>oracle.adf.model.servlet.ADFBindingFilter</filter-class>
</filter>

Modification of connections is not supported for the Customization Developer role

The creation, deletion, and modification of connections (both application connections and IDE connections) is not supported for the Customization Developer role in JDeveloper.  Though some of the connections-related operations are enabled in the Customization Developer role, do not attempt use them in the Customization Developer role.  Use of these operations may produce unexpected errors. You should always configure connections in the Default role before opening an application in Customization Developer role.

Customization of an ADF library JAR in multiple projects

At design time, the Data Controls panel shows a single representation of a particular data control per working set (for example, a business components application module). Therefore, only one model project can customize a given data control (for example, application module or DCX control). If you want to add the same ADF library JAR to multiple projects (including non-model projects) and then customize the ADF library JAR, it is recommended that you change the ADFLibraryCustomizations directory for each project to a location that is shared by all projects.

To change the ADFLibraryCustomizations directory:

  1. In the Application Navigator, right-click the project and choose Properties.
  2. In the Project Properties dialog, expand Project Source Paths.
  3. Click ADF Library Customizations.
  4. Change the ADF Library Customizations directory to a common application-level location.
  5. Click OK.
  6. Repeat these steps for each project in the application workspace.

Note that any ADF library customizations that were implemented prior to changing the ADFLibraryCustomizations directory will remain in their previous project-specific locations. They are not automatically migrated to the new location when you change the directory specification. You must manually copy any pre-existing ADF library customization metadata files to the new location.

Additionally, if you change the ADFLibraryCustomizations directory after you created a MAR profile, you must also change the corresponding entry in the contributors list on the Metadata file group page of the Edit MAR Deployment Profile Properties dialog before packaging. Alternatively, you can re-create the MAR profile to pick up this change.

Auto MAR support when packaging an ADF application in JDeveloper

When packaging an ADF application using JDeveloper, MDS creates an auto-MAR and includes default metadata (such as customizations), when either of the following conditions are met.

< . . . >
        <persistence-config>
                <metadata-namespaces>
                        <namespace path="/oracle/apps" metadata-store-usage="repos1"/>
                </metadata-namespaces>
                <metadata-store-usages>
                        <metadata-store-usage id="repos1" deploy-target="true">
                        . . .
                        </metadata-store-usage>
                </metadata-store-usages>
        </persistence-config>
< . . . >

ADF Mobile

ADF Faces Rich Client CSS files are downloaded when ADF Controller (ADF Task Flow) are used (8706397)

If you used ADF Controller for your ADF Mobile application, then ADF Rich Client CSS files are downloaded even when you do not use any ADF Faces Rich Client component in your JSF pages.  By default, when you select Mobile Browser  technology scope for your view project, you are using JSF Controller (faces-config.xml).  If you are using the recommended Trinidad JSF components and JSF Controller, then the mobile optimized CSS files will be used for your mobile browser application.  However, if you added ADF Controller and Task Flow (adfc-config.xml) to your project, then Rich Client CSS file is downloaded to the mobile browser, even if you did not use ADF Faces components on any pages. 

You can use ADF Controller (unbounded) and Task Flow to drive the page navigation logic for your mobile browser pages containing just Trinidad components.  However, please note that this will cause the ADF Faces Rich Client CSS files to be downloaded.  This CSS file may or may not be cached by the mobile browser - depending on the functionality of the mobile browser.

Total size of the extra CSS file download is ~ 1 MB.

Including ADF Faces technology in the mobile browser view project will cause page refresh to fail (8677612)

If you included ADF Faces technology in the mobile browser view project, then attempting to refresh pages developed using Trinidad JSF components will result in "Error 403 - Forbidden" exception. 

If ADF Faces is included in a project scope, some redirection functionality is applied on all pages, even on pages that use only Trinidad tags. This redirection functionality breaks the page refresh if the page is the welcome page of an application. The work around is to disable the redirection feature using the tag below in web.xml of your view project:

<context-param>     

   <param-name>oracle.adf.view.rich.newWindowDetect.OPTIONS</param-name>     

   <param-value>off</param-value>

</context-param>

Miscellaneous Issues

OJFORMAT Fails with NPE (9086061)

The ojformat executable (ojformat.exe on Windows, and ojformat on other platforms) is located in the jdeveloper/jdev/bin directory. This ojformat executable does not work in this release. It throws a NullPointerException when executed with arguments, such as 'ojformat Application1.jws'. This ojformat executable is meant to format files, projects, or workspaces from the command line. The workaround is to access the formatting functionality from within JDeveloper by choosing the 'Reformat' option from the context menu of any text editor, text node, project node or workspace node.

Code sample has security vulnerability (9154118)

A code sample in section 30.7.2.1, "Creating Login Code for the Backing" of the Fusion Developer's Guide for Oracle ADF (part number B31974-04) contains a flaw that will authenticate the user but will not generate a new sessionId for the session, thus leaving the application open to a fixation attack. A simple code fix is possible: in the sample's doLogin() method add a new line after line 10 (ServletAuthentication.runAs(mySubject, request);). The new line should read:

        ServletAuthentication.generateNewSessionID(request);

Due to the potential for a security vulnerability, the Fusion Developer's Guide for Oracle ADF (now part number B31974-05) that is accessible from the Oracle JDeveloper Documentation page ( http://www.oracle.com/technology/documentation/jdev.html) of OTN (Oracle Technology Network) has already been updated to incorporate this line of code.

Users who wish to manually update the Fusion Developer's Guide for Oracle ADF that appears in the JDeveloper online help browser, may do so by downloading a documentation update from the Update Center (in the JDeveloper toolbar, choose Help - Check for Updates). The update will effectively install the same document containing the code sample fix that appears on OTN.

Accessibility

JSP and  HTML visual editor toolbar not keyboard accessible (8351632)

When opening the visual editor you may not be able to see all the toolbar functions available and there is no visual indication [... or =>] that more toolbar functions are available.  You can, however, expand the window wider to see them all.

ADF DVT Hierarchy Viewer (8374410, 8374542)

Developers running the JAWS screen reader may encounter difficulties using the Create Hierarchy Viewer dialog in their design time environment. The workaround is to edit the <dvt:hierarchyViewer> tag and the corresponding binding with the Source editor.

Application navigator display options (6073055, 6196889)

The Application Navigator Display Options are not keyboard accessible.  They can only be reached via the dropdown menu which requires mouse navigation.

Refactoring dialog for renaming a Java class member (6080130)

The Refactoring dialog for renaming a Java class member offers to show the extend of this operation in a preview window to allow the user to assess the impact.  If the user decides it is OK to proceed the user has to press a button in this preview window to actually perform the refactoring operation.  However, if you are using the keyboard only it is not possible to access this button.  To workaround this issue deselect the option 'Preview' in the Refactoring dialog when using keyboard only.

Navigating between different help topic editors (6784654) 

When navigating between different Help Topic Editors, to get into the next editor you need to select the corresponding node in the table of contents navigator or return to JDeveloper in the case of a context sensitive help to open the wizard (or whatever you want the help on) and then press F1 to get to the help topic.

Tasks window (6788671) 

The Tasks window, opened by selecting the menu item "Tasks" from the main menu "View", allows the user to add filters to narrow the number of tasks displayed. The construction of such a filter is done in the "Filter Tasks" dialog. However, if using the keyboard only, it is only possible to add a new filter but not to modify its configuration.

Using advanced search (6790898) 

Using the Advanced Search context menu option from the Resource Palette, adding or removing of search criteria can only be done using the mouse.  It is not keyboard accessible.

Editing table columns (8206320) 

When editing table columns for a sf html readonly table, JAWS fails to read the first column 'Display Label' data for each row in the table.

Deployment log details (8214814) 

When an application is deployed from JDeveloper the deployment log details all the events during deployment.  It is not currently possible for JAWS to read these details.

Swing designers (8216345) 

It is not currently possible to read from the Swing Designers using JAWS.

Removing or adding code templates (6792631)  

It is not possible to add or remove code templates using the keyboard.  Users must navigate using the mouse when working in the Preferences - Code Editor: Code Templates page.

Viewing a page preview from the visual editor (8351673)  

When viewing a page preview from the visual editor using the default browser users should:

  1. From the main menu, click Tools=>Preferences...=>Shortcut Keys
  2. Locate the JSP and HTML Visual Editor
  3. Preview in Browser and assign a key
  4. Click OK and push button to close preferences.

This option will now be keyboard accessible.

Message dropdown not accessible (8728885)

When working in a facelet and attempting to drop a JSF html message component onto the page, a dialog appears to allow the user to specify the ID to which to attach the message. The workaround is to use the Property Inspector to change the 'for' property of h:message.

No keyboard method to go from structure pane to source editor (8890171)

When developing a swing desktop application, if the user is in the structure pane for a frame/dialog, there is no keyboard-only method to go from the structure pane to the source code editor. (In other places in JDeveloper, there is a "go to source" item in the context menu of the structure pane, but not here.) A possible workaround is to use Ctrl + Tab which pops up a navigation popup showing all views. While the Ctrl key is pressed keep pressing the Tab key and move the selection to the Frame. Release Ctrl key and the focus will be in the code editor. To shift between code editor and UI designer or any other editor for the same file use Alt + Page Up/Down.

Oracle Corporation
World Headquarters
500 Oracle Parkway
Redwood Shores, CA 94065, USA
http://www.oracle.com

Worldwide Inquiries:
1-800-ORACLE1
Fax 650.506.7200

Copyright � 1997,2009, Oracle and/or its affiliates. All rights reserved.

false ,,,,,,,,,,,,,,,