Flash movie showing Oracle Forms and JSF integration
22 January 2007 at 21:21 CET | In Forms, Oracle, Web components | 24 CommentsLast Saturday I blogged about my abstract being selected for presentation at the ODTUG Kaleidoscope 2007. Today I made a short Flash movie with a rough demo version of the way I will integrate Oracle Forms with a JSF, JSP or any other web application. This viewlet shows the JSF web application passing context and events into Forms and Forms passing context and events to the web page. All these interfaces rely on a JavaScript interface in and out of Forms.
There are a whole lot of details that still need to be sorted out over the next few weeks.

There is a separate page with more information on the concept of integrating Oracle Forms and Oracle ADF Faces (or any other web technology)
I will be presenting at ODTUG Kaleidoscope 2007
20 January 2007 at 15:39 CET | In Forms, Oracle, Web components | 15 CommentsI was thrilled to just get an email my abstract was selected for presentation at the annual ODTUG Kaleidoscope conference
So I will be off to Daytona Beach, Florida for June 18-21.
Here is the abstract I submitted:
Protecting your Forms investment while moving to the web
Oracle Forms has been web enabled since version 6i and runs as a Java applet in a browser. But this still does not offer a seamless integration between your Form and a web application.
This session shows several techniques to seamlessly integrate your Forms in a HTML web application. This includes a JavaScript interface for Forms, a version 11 feature which can already be added to your existing version 10g. This enables Forms to take part in the page flow of a web application while passing context to Forms and back.
A way to eliminate Forms startup times will be shown and some UI tricks to visually integrate your Forms in a web page. Users won’t even notice they’re using Forms. The session will have an in-depth discussion and code samples of the techniques used. This enables you to implement the same technique in your organization enabling a smooth integration of Oracle Forms in HTML web applications.
Now, there is still a lot of work to be done. A lot of details for my technical solution still have to be sorted out and I have to produce a paper and slides. I’ll start working on the details in the weeks to come and will try to publish as much of it here on my weblog.
Update 22 January 2007: I have published a rough Flash movie with a quick demo of a seamless integration of a JSF web application with a traditional Oracle Form. It passes context and events from the web application into Forms and the other way around.
There is a separate page with more information on the concept of integrating Oracle Forms and Oracle ADF Faces (or any other web technology)
Force a language or locale for JDeveloper IDE
14 January 2007 at 11:18 CET | In Features and tips, JDeveloper, Oracle | 10 CommentsSince I live and work in the Netherlands, my workstation is setup with Dutch regional settings. It always annoyed me that JDeveloper used this setting and tried to run in Dutch. Since not everything is translated you end up with a mix of English and Dutch in your JDeveloper IDE. Error messages can be in Dutch which is not very useful for finding solutions through Google or forums.
Unfortunately JDeveloper does not let you set the language in a preference. But as it turns out it does adhere to settings in the JDEV_HOME/jdev/bin/jdev.conf. Just add the following two lines to the file to force the use of US English:
AddVMOption -Duser.language=en AddVMOption -Duser.country=US
This does the trick
Webcache 10.1.2 does not support TLS1.0/SSL3.1 out-of-the-box
10 January 2007 at 20:12 CET | In AppServer, Oracle | 11 CommentsWe run Oracle Webcache version 10.1.2.0.2 and had troubles connecting to application behind the webcache using the newly released Internet Explorer 7 and from a J2SE 6 Java Virtual Machine. It turns out that Oracle Webcache does not support the latest SSL cipher suite TLS1.0 (also known as SSL3.1) out-of-the-box.
The webcache.xml has a LISTEN element to configure the listening ports. When using SSL this has an SSLENABLED attribute. By default this is set to “SSLV3_V2H”. As it turns out this setting does not support the newer TLS1.0 cipher suite. Internet Explorer 6 did not use TLS1.0 with the default configuration. As it turns out J2SE 6 does use TLS1.0 by default and we had some installations of Internet Explorer 7 that were also configured to use TLS1.0. Some other installations of Internet Explorer 7 where configured differently. Perhaps this was a difference between the beta and final release.
The Webcache guide does not have anything on this parameter. The only related documentation I could find is Metalink Note 342626.1 and a PDF on securing Oracle Application Server. The Metalink Note just advices to change the SSLENABLED parameter from SSLV3_V2H to SSL without really explaining why. The PDF on hardening an application server advices to do the opposite; change from SSL to SSLV3_V2H for extra security. All I want to do is enable the more secure TLS1.0 cipher suite and the PDF suggests I’m opening a security hole with the workaround from the Metalink Note.
I’ve asked Oracle support to document the behavior of the different values I can use for the SSLENABLED parameter. Let’s hope they come up with a satisfactory answer. Until then it’s running the risk of a potential security hole or configure your clients to not use TLS1.0 which is also less secure.
Update 13-jan-2007: Oracle support replied with the possible settings for SSLENABLED and their meaning:
- NONE - No SSL support
- SSLV3 - NZ setting of nzos_Version_3_0 - SSL protocol version 3
- SSLV3_V2H - NZ setting of nzos_Version_3_0_With_2_0_Hello - SSL protocol version 3 with support of version-2 hello message
- SSLV2 - NZ setting of nzos_Version_2_0 - SSL protocol version 2
- SSL - NZ setting of nzos_Version_Undetermined - no specific version specified
The setting of SSL will accept both SSLv2, SSLv3 and TLSv1 connections. This confirms my testing that SSL is the only setting that adds support for the latest TLS1.0 cpher suite. Unfortunately this also adds support for SSL version 2, which is not secure by today standards.
Since the newer browsers and clients will start using TLS1.0, Webcache administrators will want to enable TLS1.0 support. Currently this also means supporting SSLv3. I’ve asked Oracle support to file an enhancement request to get this fixed and add a setting that only supports SSLv3 and TLSv1
Oracle Forms and Sun JVM 1.6
4 January 2007 at 13:09 CET | In Forms, Oracle, SUN JPI/JVM | 24 CommentsThis blog will describe a workaround to get Oracle Forms to work with the newly release version 6 of Sun’s Java SE. When we moved Forms to the web we decided not to use Oracle’s own JInitiator but opted for Sun JPI. I’ve blogged before about the step needed to configure Oracle Forms to use Sun JPI in stead of Oracle JInitiator.
We decided to use dynamic versioning with Sun JPI. This means we specify a minimum required version of the JVM in the webpage, but allow the client to use any newer version installed on the local workstation. The other option is static versioning in which you demand a specific version of the JVM. We didn’t want to use static versioning as the majority of our users are external users over the internet in other organizations. We wanted to make the transition to webforms as smooth as possible and thus allowed them to leverage any existing JVM versions on their workstations.
Oracle officially supports the use of Sun JVM with Oracle Forms. They announced support for Sun JPI 1.4.2 in June 2005 for Forms 10gR1 (9.0.4) and certified JPI 1.5.0 in September 2005 for Forms 10gR2 (10.1.2). My understanding is that Oracle hasn’t begun the certification for J2SE 6 yet.
Since we use dynamic versioning users that do install the new version on their workstation will use J2SE 6 to access our Forms application automatically. So, even without official certification I did some preliminary testing and found two issues. One is related to the use of TLS as HTTPS/SSL protocol combined with Oracle WebCache 10.1.2 which does not work out of the box. I’ll blog about that later. The other issue is that some Forms crashed. When started from the menu they just wouldn’t start and the open window would disappear. Looking at the Java Console an error was displayed:
Exception in thread "AWT-EventQueue-2" java.lang.NoClassDefFoundError: oracle/bali/share/sort/StringComparator at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Unknown Source) at java.lang.Class.getDeclaredMethod(Unknown Source) at java.awt.Component.isCoalesceEventsOverriden(Unknown Source) at java.awt.Component.isCoalesceEventsOverriden(Unknown Source) at java.awt.Component.access$100(Unknown Source) at java.awt.Component$2.run(Unknown Source) at java.awt.Component$2.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Component.checkCoalescing(Unknown Source) at java.awt.Component.(Unknown Source) at java.awt.Container. (Unknown Source) at oracle.ewt.lwAWT.LWComponent. (Unknown Source) at oracle.ewt.lwAWT.LWDataSourceChoice. (Unknown Source) at oracle.ewt.lwAWT.LWChoice. (Unknown Source) at oracle.ewt.comboBox.ComboBox. (Unknown Source) at oracle.ewt.comboBox.ComboBox. (Unknown Source) at oracle.forms.ui.VComboBox. (Unknown Source) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at oracle.forms.handler.UICommon.instantiate(Unknown Source) at oracle.forms.handler.UICommon.onCreate(Unknown Source) at oracle.forms.handler.PopListItem.onCreate(Unknown Source) at oracle.forms.handler.ComboBoxItem.onCreate(Unknown Source) at oracle.forms.engine.Runform.onCreateHandler(Unknown Source) at oracle.forms.engine.Runform.processMessage(Unknown Source) at oracle.forms.engine.Runform.processSet(Unknown Source) at oracle.forms.engine.Runform.onMessageReal(Unknown Source) at oracle.forms.engine.Runform.onMessage(Unknown Source) at oracle.forms.engine.Runform.processEventEnd(Unknown Source) at oracle.ewt.lwAWT.LWComponent.redispatchEvent(Unknown Source) at oracle.ewt.lwAWT.LWComponent.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
It turns out that the Forms applet is trying to use the oracle.bali.share.sort.StringComparator class which cannot be found in the frmall.jar that was used to start Forms. According to the error stack it has something to do with the initialization of a ComboBox. Opening the frmall.jar indeed revealed that the StringComparator class is not included. There are a number of other classes in the oracle.bali.share.sort package: Comparator, LexiComparator and Sort
I also searched the other JAR files in the ORACLE_HOME/forms/java directory but none of them contained the StringComparator class. In fact, the only two JAR files in the entire ORACLE_HOME that contained the class where ORACLE_HOME/oui/jlib/shared.jar from the Universal Installer and ORACLE_HOME/jlib/share.jar
I’ll see if I can get Oracle to look at this problem even without official support for J2SE 6 but I guess they will want to support version 6 eventually. I tried two quick-and-dirty solutions to the problem. One is to include share.jar in the list of JAR files to start Oracle Forms. The other is to slipstream the oracle.bali.share.sort classes from the share.jar in the frmall.jar.
Including the share.jar in the formsweb.cfg
The first solution is to include the share.jar in the distribution. In our current installation of Forms 10.1.2.0.2 the share.jar does not contain any classes that are also included in the frmall.jar. First is to copy the ORACLE_HOME/jlib/share.jar to ORACLE_HOME/forms/java/share.jar. You also have to include the share.jar in the archive parameter of the formsweb.cfg
But the frmall.jar is a signed jar. If you do not sign the share.jar as well you will get a SecurityException:
java.lang.SecurityException: class "oracle.bali.share.sort.StringComparator"'s signer information does not match signer information of other classes in the same package at java.lang.ClassLoader.checkCerts(Unknown Source) at java.lang.ClassLoader.preDefineClass(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at sun.applet.AppletClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.applet.AppletClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Unknown Source) at java.lang.Class.getDeclaredMethod(Unknown Source) at java.awt.Component.isCoalesceEventsOverriden(Unknown Source) at java.awt.Component.isCoalesceEventsOverriden(Unknown Source) at java.awt.Component.access$100(Unknown Source) at java.awt.Component$2.run(Unknown Source) at java.awt.Component$2.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Component.checkCoalescing(Unknown Source) at java.awt.Component.(Unknown Source) at java.awt.Container. (Unknown Source) at oracle.ewt.lwAWT.LWComponent. (Unknown Source) at oracle.ewt.lwAWT.LWDataSourceChoice. (Unknown Source) at oracle.ewt.lwAWT.LWChoice. (Unknown Source) at oracle.ewt.comboBox.ComboBox. (Unknown Source) at oracle.ewt.comboBox.ComboBox. (Unknown Source) at oracle.forms.ui.VComboBox. (Unknown Source) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at oracle.forms.handler.UICommon.instantiate(Unknown Source) at oracle.forms.handler.UICommon.onCreate(Unknown Source) at oracle.forms.handler.PopListItem.onCreate(Unknown Source) at oracle.forms.handler.ComboBoxItem.onCreate(Unknown Source) at oracle.forms.engine.Runform.onCreateHandler(Unknown Source) at oracle.forms.engine.Runform.processMessage(Unknown Source) at oracle.forms.engine.Runform.processSet(Unknown Source) at oracle.forms.engine.Runform.onMessageReal(Unknown Source) at oracle.forms.engine.Runform.onMessage(Unknown Source) at oracle.forms.engine.Runform.processEventEnd(Unknown Source) at oracle.ewt.lwAWT.LWComponent.redispatchEvent(Unknown Source) at oracle.ewt.lwAWT.LWComponent.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
So, you have to sign the share.jar with the same certificate that was used to sign the frmall.jar. Out of the box the frmall.jar is signed by Oracle and we do not have the keystore required to sign the jar file. You will have to sign the frmall.jar with your own certificate and use the same certificate to sign the share.jar file. In September 2005 I already blogged about signing the frmall.jar with your own certificate.
Slipstreaming classes in the frmall.jar
The other solution is to slipstream the classes from the oracle.bali.share.sort package in the frmall.jar. You have to unpack both the share.jar and the frmall.jar. Then copy the classes from the oracle/bali/share/sort directory from the share.jar to the unpacked frmall.jar. Then repack frmall.jar and sign it. You can follow the steps in another blog entry to unpack jar files, repackage and sign them.
Conclusion
Adding the classes to my Forms server does seem to resolve the problem with the crashing Forms. However, I’m sure this is not a supported solution and I don’t really like the concept of just grabbing a number of classes from a JAR file and use them just because their names match. Who knows which version is actually required and why Forms apparantly does not require these classes when using Sun JPI 1.4 or 1.5.
I’ll see if I can get Oracle to look into the problem and will update this blog entry with any progress I make with running Forms with Sun J2SE 6. The coming weeks I will use J2SE 6 with Oracle Forms 10.1.2.0.2 on my machine and will report back here with any issues.
Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds.

