Oracle Forms 11 running as application in Java Webstart

According to my last post today I will show you the basic configuration for forms 11g.

Unfortunatly webstart in forms 11g it is not as easy as in 10g, but it works too!

As first you need an additional unique identifier “ifsessid” in parameter “serverURL” for forms. This prevents the use of a static jnlp in this case. Maybe it is possible to branch out the build of this unique identifier from the jnlp. I have decided instead to create the the jnlp from a java server page. This helps me additional to use forms parameters, which I will describe in a later post. Sure there maybe exist other ways to build the jnlp.

Let’s start:

Again I assume you have an running unix or linux application server with forms 11g.

As first you need the webstart_11g.jsp in folder public_html under a JDeveloper project. The marked lines provides the identifier:

<%@ page contentType="application/x-java-jnlp-file" language="java" import="java.sql.*"%>
<%@ page session="true"%>
<%response.setDateHeader ("Expires", 0); //prevents caching at the proxy server%>
<%
  long time = System.currentTimeMillis();
  String sessid = String.valueOf(time);
%>
<jnlp codebase="http://localhost.localdomain:9001/forms/java/">
  <information>
    <title>Webstart Test Oracle Forms 11g</title>
    <vendor>develishdevelopment.wordpress.com</vendor>
    <description>Webstart Test Oracle Forms 11g</description>
  </information>
  <security>
    <all-permissions/>
  </security>
  <update check="timeout" policy="always"/>
  <resources>
    <j2se version="1.6.0"/>
    <jar href="frmall.jar" download="eager" main="true"/>
  </resources>
  <applet-desc name="Webstart Test Oracle Forms 11g" main-class="oracle.forms.engine.Main" width="990" height="640">
    <param name="background" value="no"/>
    <param name="logo" value="no"/>
    <param name="serverApp" value="default"/>
    <param name="lookAndFeel" value="oracle"/>
    <param name="allow_debug" value="true"/>
    <param name="separateFrame" value="false"/>
    <param name="em_mode" value="1"/>
    <param name="latencyCheck" value="true"/>
    <param name="networkRetries" value="240"/>
    <param name="serverArgs" value="module=test.fmx useSDI=yes"/>
    <param name="serverURL" value="http://localhost.localdomain:9001/forms/lservlet?ifcfs=http://localhost.localdomain:9001/forms/frmservlet?config=jpi&ifsessid=formsapp.<%=sessid%>"/>
    <param name="colorScheme" value="teal"/>
    <param name="splashScreen" value="no"/>
    <param name="dontTruncateTabs" value="true"/>
  </applet-desc>
</jnlp>

Now you need to deploy this jsp. First create a application server connection in JDeveloper version corresponding to your forms weblogic server. I have forms 11.1.1.2.0, which runs on weblogic 10.3.2. So I have to use JDeveloper 11.1.1.2.0. See oracle support information for supported JDeveloper version for your environment. Right click on you Jdeveloper project with the jsp an select deploy. Following are the steps in the deploy wizard:

  • Deployment Action
    • Deploy to application server
  • Select Servers
    • Application Servers: your application server
    • Overwrite modules of the same name: select
    • Deploy to all server instances in the domain: unselect
    • Deploy as a standanlone Application: select
  • Server instances
    • List Standalone Servers and Cluster: select your forms cluster or your forms server (WLS_FORMS)
  • Summary: finish

In the project properties change the deployment properties to set your context root, which will be later part of your url:

Set context root.

If you redeploy this jsp, you may wonder that your change is not immediatly shown. You can solve this by dropping the former deployment before redeploying or you add following files to your JDeveloper Project under folder public_html\WEB-INF:

weblogic.xml:

<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd" xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
  <jsp-descriptor>
    <page-check-seconds>0</page-check-seconds>
  </jsp-descriptor>
  <container-descriptor>
    <servlet-reload-check-secs>0</servlet-reload-check-secs>
    <resource-reload-check-secs>0</resource-reload-check-secs>
  </container-descriptor>
  <context-root>webstart_11g</context-root>
  <fast-swap>
    <enabled>true</enabled>
    <refresh-interval>1</refresh-interval>
  </fast-swap>
</weblogic-web-app>

web.xml:

<?xml version = '1.0' encoding = 'windows-1252'?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"></web-app>

Complete workspace you can found here: webstart_11g.zip

Now start java webstart with your jnlp url, here is an example in linux:

./javaws http://localhost.localdomain:9001/webstart_11g/webstart_11g.jsp

Java webstart comes up with the standard test.fmx from the forms services installation:

webstart_11g_succesful

That’s all!

About these ads

, , , ,

  1. #1 by Carlos Llanos on June 7, 2013 - 15:56

    I tried your solution and it works very well. I read that your solution works with SSO. We are using OID and the USNChanged Approach to authenticate with Active Directory. Can you give me more specifics on how you made your solution work in my case?
    We we do greatly appreictae it!
    Carlos Llanos

    • #2 by Torsten Kleiber on June 8, 2013 - 20:09

      I did not mentioned such information in my post.

      We did not use a real sso solution with forms, instead we overwrite the on logon trigger and use a java bean to get the user from the os before. So the user must logged into windows succesfully before his roles are checked against database tables. So authentication is a little bit like kerberos.

      In adf applications we us really kerberos authenticator and the same database tables.

  2. #3 by Christian on June 28, 2013 - 07:04

    Hello Torsten,

    we are working with webforms too.
    In your solution is it possible to handle frame close events via forms (ask the user “are you sure you want to close…?”) or will the applet frame just be closed(and what about background threads – is the JVM staying alive in background?)?

    We are setting the session id initial to “;ifsessid=formsapp.1″ – then it is determined by the forms engine later – and you can create a static jnlp file.

    Kind regards Christian

    • #4 by Torsten Kleiber on June 28, 2013 - 18:39

      Hi!

      We close the applet without a question. This is not reqired from our users.

      Yes – unfortunatly the jvm staying in the background after the close at our servers. There is no such problem on our developer laptops. There are several blogs around the problem, that the jvm is not closed after exiting webstart. But I did not found a solution till now.

      For the static jnlp – this is veriy interesting. But we have additional reqirement to hand over variable parameters to forms, so we need the jsp anyway.

      Kind regards
      Torsten

  3. #5 by Christian on July 1, 2013 - 07:05

    Hi,

    is it possible that there is an other patch version installed – I think since patch 6 there is a background thread that keeps the JVM alive.
    I think you can handle it by deriving a subclass from oracle.forms.engine.Main and override the destroy() method with a final call to System.exit() or maybe the cleaner solution: exitApplet() .
    If you do not need sophisticated things then you can put the dynamic jnlp building jsp into the forms directory, there it is interpreted and executed as well – so you do not need to install a new deployment.

  4. #6 by Frank on May 22, 2014 - 07:54

    Hi all,

    to solve the problem that keeps the jvm alive, call formsMain.destroy() just before System.exit(). The problem exists since
    FMW 11.1.1.7 (not in 11.1.1.4, 11.1.1.5 and 11.1.1.6 not tested).

    Best Regards,

    Frank

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 43 other followers