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 1.1.8.2 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.* ;
class test
{
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 test
java.version =1.6.0_30
java.vendor =Sun Microsystems Inc.
On java 1.7:
java.version =1.7.0_02
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 !
Hacked jarfile
I was able to modify the jar file. I changed Oracle to Oxacle, a one letter change. I signed the jar file under my own name, and it all works.
Unfortunately the browser brings up a very scary warning that says Publisher Unkown, then gives the option to "Always trust content from this publisher". I can't encourage my users to click that. I assume it means that all "UNKNOWN" publishers would be henceforth trusted.
I would like a copy of the code that wraps the java application. I know less than zero about writing an running any java program, so the descriptions don't help me. I sent an request to the support email that OP suggested, but have not seen any response yet.
Contact me at
bobtreu
at gmail dot com
Thanks in advance for any help!
Hacked jarfile
Hi,
We stopped supporting the java wrapper as Oracle released a patch for forms 10.1.2.3 that fixes the issue.
See also here : http://www.ora600.be/FRM-92095%3A+Oracle+Jnitiator+version+too+low+-+please+install+version+1.1.8.2+or+higher+patch
The problem you describe (the message 'Publisher unknown' is because you signed your jarfile with a self signed codesigning certificate. To avoid this you must buy a java code signing certificate from a trusted certificate authority (for example here) - or if you have control over the client pc's, you could easely create your own certificate authority using openssl, generate a code signing certificate, sign the jar and distribute your root certificate to your clients.
kind regards,
Kurt
Bootstrap
bootstrap
Another approach I thought about later on - It should be possible to subclass the Forms Main class and then override the init method.
In the init method you would then set the necessary system properties and then call the init method of the superclass.
This way all other applet methods are inherited - which is much cleaner and less of a hassle.
The only thing I'm not sure about is - is the property set early enough in the codepath so that Forms picks it up ...
hope this all helps !
cheers,
Kurt
bootstrap
Hi,
I reckon you are not using my bootstrapper but wrote your own based on the info given below ?
If so - be sure to implement all applet methods (start/stop/init/destroy but also paint and appletresize)and call the same formsapplet methods. For example :
public void start()
{
System.out.println("Start forms") ;
formsapplet.start() ;
}
public void paint(Graphics g)
{
formsapplet.paint(g) ;
}
public void appletResize( int width, int height )
{
System.out.println("Resize forms") ;
resize( width, height );
formsapplet.resize( width, height) ;
}
I also used a gridlayout to place the forms applet into :
setLayout( new GridLayout(1,0));
add(formsapplet);
Using this approach I have no issues with height and width parameters.
With the help of your
With the help of your comments and those of somebody on the Java Programming Forum, I've managed to get the bootstrapper working correctly. It's probably far from perfect, and will make an experienced Java programmer cringe, but it's working!
Thanks for your help!
Mark
Some additional info -
Some additional info -
Oracle Forms applet is only tiny on first visit of the session. If I refresh the page, the Forms applet is the correct size.
Not exactly user friendly...
Thanks for any insight,
Mark
SSL Errors
Does anyone have this workaround working with SSL?
I am getting FRM-92120 Registry.dat errors. When trying to use a modified frmsall.jar file. I've also experimented with enabling SSLv2 in Java or trying to use only SSLv3, but not success.
Thanks.
re : SSL Errors
One of our clients use this (bootstrapper) over SSL.
However, the SSL is terminated at the reverse proxy and not at the forms server.
SSL Errors
Thanks for the prompt reply!
If the reverse proxy is similar to how one of our clients is setup, then they have the SSL cert loaded on the proxy. Since the proxy is handling SSL communication, the application server is only uses HTTP and the issue doesn't occur.
I'm getting errors since I have the cert loaded in the Oracle Wallet. The problems - or at last some of them - seems to be due to the SSL 2.0 ClientHello handshake. Enabling the SSL 2.0 ClientHello in Java 7 doesn't seem to help. I'm currently trying to disable SSL 2.0 in the application server.
SSL Java7
I think the problem might be the fact that java7/applet/ssl does not trust/support server certificates (the one in your oracle wallet or the one on the reverse proxy) to be based on MD2 or MD5 algorithms.
For example, iOS and google chrome also do not support server certs based on MD2/MD5 anymore.
This is only recent - someone hacked a CA - i believe in holland - that used md5 for it's root certs.
Root certs with MD5/2 are still allowed (otherwise lot's of CA would have an issue :-) ) but not server certs !
So check your server cert (browse to the url - open the server cert - check properties - if it uses MD2/MD5, request a new one that uses SHA)
see also here :
https://forums.oracle.com/forums/thread.jspa?messageID=10413489
http://forums.aurigma.com/yaf_postst5185_Problem-with-new-Certificates.aspx
SSL Java 7
Thanks for the information, but it looks like I just needed to install a CPU patch to my test area. SSL is now working properly.
Thanks!
SSL error on Forms 10g using Java 1.7 - Resolved
Great Forum !!
The errors with SSL on Java 1.7 may be resolved adding java command settings "-Djsse.enableSNIExtension=false" on the Java runtime parameters for Update 17 or earlier, or on JAVA_TOOL_OPTIONS environment variable when using update 21.
Cool
Cool stuff !
Thanks !
asking for jar files
Guys,
I see a lot of requests for sending jar files - please note that frmall.jar is specific for a certain version! If someone hacks a 9.0.4 jar, you can't use it on a 10.1.2 installation !
Anyway - if you want to use our bootstrapper for forms, you can mail the company I work for at support@axi.be.
cheers,
kurt
Override java.version parameter in java control panel
Hi,
I tried succefully another simple solution,
add a java runtime parameter for overriding the system java.version parameter like this:
- open java control panel
- go to on tab 'java', click 'view'
- add -Djava.vendor="Sun Microsystems Inc."
or something else but not 'Oracle Corporation' or 'MICROSOFT'
Best regards
Didier
Workaround with java 7 Upd 21 !!!!
The workaround
-Djava.vendor="Sun Microsystems Inc."
will not work with the new update 21 of Java 7!
there is the well-known error FRM-92095 Oracle Jinitiator version to low.....
Does anyone have this behavior?
Re:Workaround with java 7 Upd 21
Hi,
I also had the same problem - the FRM-92095 error returned with Java 7 Update 21, but only on Window 7 clients (XP still worked OK).
However, after some panicy web searches, I found the answer - you override the system property via the JAVA_TOOL_OPTIONS environment variable now, apparently.
I created the system environment variable JAVA_TOOL_OPTIONS with this value :-
-Djava.vendor="New Oracle"
and my Forms 10g code worked again :)
Credit to the StackOverflow web site, where I found this solution; the specific URL was http://stackoverflow.com/questions/12577437/how-to-set-a-java-system-property-so-that-it-is-effective-whenever-i-start-jvm-w
Hope that that helps Alfred and anyone else who hits this.
Regards,
Keith Greenberg
wow....Thanks Keith it
wow....Thanks Keith it works ;-)
Alfred
Re:Workaround with java 7 Upd 21
re: Workaround with java 7 Upd 21 !!!!
I am unaware of this - however, there is a patch for forms 10.1.2.3 that fixes the jpi 1.7 issue:
# 11782681 - APPS6 FORMS DO NOT LAUNCH WITH BETA JRE 1.7
I'll update my jpi and see if my bootstrapper stills works (which I think will) :-)
This worked for me Didier.
i tired all this still the
i tired all this still the
Didier, very elegent
works on Ubuntu
Great Work Around, Didier
Didier, thanks for this
Didier, thanks for this solution. Works great!
Hans
RE: Override java.version parameter in java control panel
Way cool solution !
(does require end user interaction)
errata, read java.vendor in place of java.version
re-post, correction, read java.vendor in place of java.version ;-)
Will something similar
No
We're talking java 1.7 on the client side - as far as I know, Reports doesn't use a java applet on the client...
Discoverer on the other hand might have a similar problem on the client - but I haven't checked.
Hi, i have the same problem
Hi, i have the same problem with forms 9.0.4, I'd like to try your solution but I don't understand how to call the bootstrap applet instead the default oracle applet, can you explain the whole process
Thanks
Giorgio
re Hi, i have the same problem
The following link explains how you launch an applet (forms) from another applet (bootstrap).
http://www.java-tips.org/java-se-tips/java.applet/have-an-applet-launch-another-applet.html
All you need to do is set the java vendor system property to sun microsystems before you launch forms ...
Thank you for the
Thank you for the explanation,
I've also tried the "not elegant" solution and I modified the class with an hex editor and it worked fine, if someone needs it I can send the modified jar.
Giorgio
Hi Giorgio, Can you send
Hi Giorgio,
Can you send me the modified Jar file?
Hi Giorgio Plz send meg
Hi Giorgio
Plz send meg the jar file, to lako78@freemail.hu
Thx, Kronk
Modifed Frmall.jar
Could you email me a copy as well?
Thanks.
Yes please give me ur email
frmall.jar modified to JRE 1.7.0
Hi Giorgio:
Can you send me the frmall.jar form form 10g modified for work with JRE 1.7.0.
Wich hexaedit use to modified the file?
What did you replace the text 'Oracle corporation' in the file?
Thanks,
Adriàn
modified jar
Hi
Could you please send me the modified jar for testing purposes?
Thx!
frmall.jar
Hi Giorgio,
I'm trying the 'not elegant' solution, because I meet same problems with Java 7.
Is the frmall.jar file on the client side (I don't find it there) or on the AS-server side ?
I found frmall.jar file one AS-server , but it does not work after modifying it !
Can you send me your frmall.jar , and where do I place it ?
Kind regards,
Guido
wow
ciao Giorgio
can you send me the jar file
thx fred
wow
ciao Giorgio
can you send me the jar File ?
thx fred
(bludy@gmx.de)
Re
Changing Oracle Corporation
Changing Oracle Corporation in the frmall.jar causes it to error..
can you send me a working jar file
if your jar is signed
If your jar file is signed using a code signing certificate - you should re-jar it, edit it and sign it again...
Anyway - editing the jar file is ... not a very clean solution.
cheers,
Kurt
Changing Oracle Corporation
after using sign_webutil.bat to digitally sign the frmall.jar file..
I get error: classnotfoundexception
classnotfoundexception
Make sure that you have re-jarred your jar file correctly.
When you do a jar -tvf frmall.jar - it should start with directory 'oracle/*'
(I see a lot of mistakes when people unjar to a directory - for example 'frmall' - they create a new jar which include the top directory so you'll get frmall/oracle/.... - this way the jvm won't find the packages as they start with oracle.*)
hi, this is the way I use
hi, this is the way I use to resign jar files. I hope it helps:
mkdir tmp
cp jarfile.jar tmp/
cd tmp
jdk/bin/jar -xvf jarfile.jar
rm -rf META-INF/
rm jarfile.jar
jar -cvf jarfile.jar *
jarsigner -keystore mykeystore.p12 -storetype pkcs12 -storepass ***** jarfile.jar "<Certificate Alias>"
if u use another keystore type just verify the options with jarsigner's help
cp jarfile.jar ../
cd ..