En este laboratorio aprenderás como configurar Java web start, este es un feature exclusivo de Oracle forms 12c por lo que para versiones anteriores de forms no funcionará su implementación.
Java web start nace con la finalidad de eliminar el despliegue tradicional de forms en los navegadores que soportan el plugin NPAPI, actualmente solo es soportado por Internet Explorer, por lo que para las empresas esto genera una dependencia total de este navegador.
La idea es acceder a la aplicación usando únicamente un url como el siguiente, ejecutandose desde un cmd:
javaws http://10.0.1.100/forms/frmservlet?config=pruebas
Para la configuración de java web start tenemos instalado un ambiente con lo siguiente:
- Oracle Linux 7
- Weblogic 12.2.1.4
- Oracle forms and reports 12.2.1.4
- Jdk 1.8u202
Debemos ir a la siguiente ruta:
cd $DOMAIN_HOME/config/fmwconfig/components/FORMS/instances/forms1/server
Dentro crearemos un archivo llamado sistemas.jnlp y le colocaremos lo siguiente:
<?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0" xmlns:jfx="http://javafx.com" %jnlp_param%="%jnlp_param_value%"> <information> <title>Oracle Forms Services</title> <vendor>Oracle Corporation</vendor> <homepage href="http://www.oracle.com"/> <description>Oracle Forms Services with WebUtil applet launcher.</description> <description kind="short">Oracle Forms Applet with WebUtil</description> </information> <security> <all-permissions/> </security> <update check="always" policy="prompt-run"/> <resources> <!-- Application Resources --> <j2se version="%java_version%" href="http://java.sun.com/products/autodl/j2se"/> <jfx:javafx-runtime version="2.2+"/> <jar href="%contextRoot%/java/frmall.jar" download="eager" main="true" /> <jar href="%contextRoot%/java/frmwebutil.jar" download="lazy" main="false" /> <jar href="%contextRoot%/java/jacob.jar" download="lazy" main="false" /> <jar href="%contextRoot%/java/images.jar" download="lazy" main="false" /> <extension name="Extensions" href="%contextRoot%/java/extensions.jnlp"/> </resources> <applet-desc name="Oracle Forms" main-class="oracle.forms.engine.Main" height="1" width="1"> <param name="serverURL" value="%appletServerURL%"/> <param name="height" value="%height%"/> <param name="width" value="%width%"/> <param name="networkRetries" value="%networkRetries%"/> <param name="separateFrame" value="%separateFrame%"/> <param name="splashScreen" value="%splashScreen%"/> <param name="background" value="%background%"/> <param name="lookAndFeel" value="%lookAndFeel%"/> <param name="colorScheme" value="%colorScheme%"/> <param name="customColorScheme" value="%customColorScheme%"/> <param name="serverApp" value="%serverApp%"/> <param name="logo" value="%logo%"/> <param name="imageBase" value="%imageBase%"/> <param name="formsMessageListener" value="%formsMessageListener%"/> <param name="recordFileName" value="%recordFileName%"/> <param name="EndUserMonitoringEnabled" value="%EndUserMonitoringEnabled%"/> <param name="EndUserMonitoringURL" value="%EndUserMonitoringURL%"/> <param name="heartBeat" value="%heartBeat%"/> <param name="MaxEventWait" value="%MaxEventWait%"/> <param name="allowAlertClipboard" value="%allowAlertClipboard%"/> <param name="disableValidateClipboard" value="%disableValidateClipboard%"/> <param name="enableJavascriptEvent" value="%enableJavascriptEvent%"/> <param name="digitSubstitution" value="%digitSubstitution%"/> <param name="legacy_lifecycle" value="%legacy_lifecycle%"/> <param name="JavaScriptBlocksHeartBeat" value="%JavaScriptBlocksHeartBeat%"/> <param name="highContrast" value="%highContrast%"/> <param name="disableMDIScrollbars" value="%disableMDIScrollbars%"/> <param name="clientDPI" value="%clientDPI%"/> <param name="applet_stop_timeout" value="800"/> <param name="guiMode" value="%guiMode%"/> <param name="idleTimeout" value="%idleTimeout%"/> <param name="ssoLogoutRedirect" value="%ssoLogoutRedirect%"/> <param name="ssoMode" value="%ssoMode%"/> <param name="ssoLogout" value="%ssoLogout%"/> <param name="logoutTargetURLParamname" value="%logoutTargetURLParamname%"/> <param name="mediaBase" value="%mediaBase%"/> <param name="webstartRequest" value="%webstartRequest%"/> <param name="WebUtilLogging" value="%WebUtilLogging%"/> <param name="WebUtilLoggingDetail" value="%WebUtilLoggingDetail%"/> <param name="WebUtilErrormode" value="%WebUtilErrorMode%"/> <param name="WebUtilDispatchMonitorInterval" value="%WebUtilDispatchMonitorInterval%"/> <param name="WebUtilTrustInternal" value="%WebUtilTrustInternal%"/> <param name="WebUtilMaxTransferSize" value="%WebUtilMaxTransferSize%"/> </applet-desc> </jnlp>
Las líneas en negrita, donde dice resource es donde se modifican los jar que la aplicación necesitará para levantarse, es ahí donde se pueden agregar o quitar jars estos se encuentran en la siguiente ruta:
$ORACLE_HOME/forms/java
Después el archivo creado se debe copiar a la siguiente ruta:
$DOMAIN_HOME/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_12.2.1/config
Luego de esto, debemos ir a la siguiente ruta:
cd $DOMAIN_HOME/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_12.2.1/config
Aquí modificaremos el archivo formsweb.cfg
Crearemos un nuevo enviroment llamado pruebas y le agregaremos las siguientes 2 líneas, esto habilita Java Web Start en el enviroment:
basejnlp=sistemas.jnlp webstart=enabled

Posterior a ello, es necesario que todos los jars esten firmados usando el mismo keystore, ya que para que el JNLP funcione se necesita que todos los jars mantengan la misma firma.
Luego de haber válidado la firma de los jars, debemos realizar una configuración en el java de la máquina de los clientes, es necesario habilitar la opción de Mantener archivos temporales en mi computadora, lo podemos encontrar en General > Settings:

De esta forma el usuario ya podrá ejecutar la aplicación usando java web start, esto se debe colocar en todas las máquinas de los clientes que vayan a ejecutar la aplicación.
Para realizar la ejecución, en un cmd podemos escribir el siguiente url:
javaws http://10.0.1.100/forms/frmservlet?config=pruebas

En mi caso, la configuración de forms tiene el acceso por medio del puerto 80 por lo que en caso de ser otro puerto simplemente se debe colocar luego de la ip.
De esta manera hemos logrado el despligue de la aplicación de forms sin necesidad de un navegador, luego podemos guardar el .cmd o .bat en el escritorio de nuestra computadora y siempre abrir la aplicación desde ahí.
Si se ejecuta el siguiente url desde el navegador:
http://10.0.1.100/forms/frmservlet?config=pruebas
Se descargará un archivo .jnlp, en caso de no querer usar el método del cmd, siempre es necesario descargar este archivo cuando se vaya a desplegar la aplicación, ya que actualiza la información nueva que venga en los jars.
Mi recomendación es crear un archivo .bat o .cmd con el siguiente url:
javaws http://10.0.1.100/forms/frmservlet?config=pruebas
Y siempre descargar la aplicación utilizando este método.
Agradezco la información, es muy buena, tengo la siguiente pregunta: como puedo firmar los nuevos jar que tengo para poder realizar la practica que mencionas?
Para firmar los jars hice una entrada donde explico paso a paso como aplicar correctamente la firma a una jar, esto lo debe aplicar a todos los jars en su instalación de forms:
https://oracle-max.com/como-firmar-los-jars-de-oracle-forms-and-reports-11g-y-12c/
Muy bueno el aporte. Quería preguntarte si se puede usar esta modalidad para ejecutar forms, teniendo conexión de usuarios con sesión única. Gracias
Sí se puede realizar, sin embargo, para eso sería necesario establecer una variable de sesión JSESSION para mantener una única concurrencia a una sola conexión, ya sea un nodo o una única instancia al managed donde esté el WLS_FORMS.
D:\Oracle12c\fmw\P_FRM\forms\java>D:\Oracle12c\fmw\P_FRM\oracle_common\jdk\bin\jarsigner -signedjar jacob.jar jacob.jar jacob
Enter Passphrase for keystore:
jarsigner error: java.lang.RuntimeException: keystore load: C:\Users\oscovie\.keystore (El sistema no puede encontrar el archivo especificado)
No he podido firmar el jacob.jar, he visto uno ejemplos pero no se que es eso de keystore, qué puedo hacer?
Gracias
El keystore es el almacén donde se encuentran los certificados para firmar los jars de Oracle forms, en el archivo sign_webutil.bat se específica la ruta donde se creó el archivo y con este mismo archivo el sign_webutil.bat es con el que firmas los jars.
Hola, he seguido todos los pasos en diferentes tutoriales, pero tengo el problema que me indica que jacob.jar no tiene el mismo certificado , aún así lo he firmado, me sigue dando el error y ahora ya no puedo ni abrir mi form en el que utilizaba webutil, podrias darme una pista?
Hola Pierre,
Probablemente la firma debe estar quedando mal, le recomiendo seguir la siguiente guía para que realice la firma de todos los jars, junto al jacob con el mismo certificado.
https://oracle-max.com/como-firmar-los-jars-de-oracle-forms-and-reports-11g-y-12c/
Saludos cordiales
Hola,
He seguido los pasos, y tecnicamente no se ve complejo; pero pese a que he revisado varias veces, no he logrado que se pueda ejecutar porque aparece un error indicando : «No se ha podido iniciar la aplicación».
Al revisar los detalles, aparece la siguiente Excepción:
org.xml.sax.SAXParseException; lineNumber: 121; columnNumber: 3; El tipo de elemento «NOEMBED» debe finalizar por la etiqueta final coincidente «».
Incluso validando el HTML externamente, el mismo esta «mal formado».
Porque sucede esto?… A alguien le ha pasado antes?
Agradecería cualquier idea para intentar solucionarlo
Buenas tardes Richard,
Esta documentación le he utilizado para varias instalaciones en diferentes clientes y siempre me ha funcionado, si gusta escríbame al correo oracle.max.consultor@gmail.com y con gusto podemos coordinar una revisión de su ambiente para ver el error.
Saludos cordiales
Buenas Tardes y para correr una forma pero directamente desde el Forms Builder, que que explorador se coloca o como se hace?
Para ejecutar una forma desde el forms builder tienes 2 opciones, configurar la ejecución de las formas usando Java Web Start para no depender de un navegador o bien utilizar internet explorer ya que es el único navegador que soporta el componente NPAPI para ejecutar formas java