A customer of mine who deploys Oracle Forms 10g on the wild wild web, ran into a little problem.
They don't have control over the java plugin being installed on the client machine and with the latest java 1.7 update
they encountered the following forms error :
FRM-92095: Oracle Jnitiator version too low - please install version 220.127.116.11 or higher
Doh - we're running java 1.7 - not Oracle's obscure Jnitiator.
This seems to be a know issue on metalink see
FRM-92095 Error When Running Forms Using JRE 7 (JRE 1.7) [ID 1348436.1]
A bug has been filed Bug:11782681 APPS6: FORMS DO NOT LAUNCH WITH BETA JRE 1.7
There's no patch yet(not even for the latest 11g Forms). And because Forms 10.1.2.x permier support
ended in December 2011... God only knows there will be a back-port. So for now - we're on our own !
However ... why does the Forms applet thinks it is running on an Oracle Jnitiator ?
Can it be that Java's vendor system property changed from 'Sun Microsystems Inc' to 'Oracle Corporation' ?
A little test program will show :
import java.util.* ;
public static void main(String args)
System.out.println("java.version =" + System.getProperty("java.version") ) ;
System.out.println("java.vendor =" + System.getProperty("java.vendor") ) ;
On java 1.6:
java.vendor =Sun Microsystems Inc.
On java 1.7:
java.vendor =Oracle Corporation
I tracked down where in the Forms code the version is checked - it's situated in the HTTPConnection.class which compares
the vendor property string of the plugin with either 'MICROSOFT' or 'Oracle Corporation' and then acts accordingly.
This property string for Java 1.6 and below is 'Sun Microsystems Inc' - starting from 1.7 it is 'Oracle Corporation'.
Oracle Jnitiator also used the vendor string 'Oracle Corporation'.
So - Forms now thinks it is running on an old jnitiator instead of the latest java 1.7 plugin.
This is easily fixed with an hexeditor or decompiler but it's not really elegant and can affect other parts of the code.
(with a hexeditor - unjar frmall.jar - open HTTPConnection.class - look for string 'Oracle Corporation' in the neighborhood of 'MICROSOFT' - change
the string in something else - save - jar classes ... haven't tested it - should work update - someone actually tested this - see comments - however... this is a big no no solution :-))
Instead I used a bootstrapper applet which sets the vendor property back to 'Sun Microsystems inc' like this :
- System.setProperty("java.vendor", "Sun Microsystems Inc.") ;
Then the applet(stub) loads Oracle Forms' main engine class.
- Class oforms = Class.forName("oracle.forms.engine.Main");
- init and start the Forms applet
I can't share the code nor class as the IP belongs to my employer but this fixed the problem and we can now run Forms on Java 1.7 !
The great part of this is - we don't touch the original frmall.jar, which is important if 3000 end users need a new jar downloaded over limited bandwidth !
Then, I went into a creative overdrive :-)
In the spirit of the 80's and 90's atari and amiga demo scene I added an intro with plasma effect.
Update - see also a very elegant workaround by Didier Marcelis in the comments (add -Djava.vendor="Sun Microsystems Inc.")
Update - if you are interested in the Forms bootstrapper (without plasma intro) - send me a mail.
Check out the flash screen capture I've made of the application loading :-)))
Update - it looks like there is a patch for forms 10g (bundle patch 10.1.2.3.2) that will solve the problem !
The patch number is 14825718 - and can be downloaded here
One of the fixed bugs is
# 11782681 - APPS6 FORMS DO NOT LAUNCH WITH BETA JRE 1.7
I have not yet installed and tested it - so if someone has - please leave a comment !