Oracle Forms Java Importer
Una de las opciones para integrar código Java en Oracle Forms es utilizar el comando Host, el cual nos permite realizar llamadas al sistema operativo y poder por ejemplo ejecutar programas escritos en Java. Pero existe otra forma menos conocida de integración que consiste en utilizar Oracle Forms Java Importer cuya potencia es mucho mayor. Podemos por ejemplo utilizar toda la potencia de XML Publisher, generación de RTF’s, Excels, etc.
Para utilizar esta herramienta tendremos que añadir a nuestra variable de entorno CLASSPATH la siguiente ruta: (o la que corresponda en su caso)
CLASSPATH=….;C:\orant\TOOLS\common60\JAVA\IMPORTER.JAR;C:\Archivos de programa\Java\jdk1.6.0_14\jre\lib\rt.jar;
A partir de aquí, solamente tendremos que ir añadiendo todas las clases que deseemos utilizar a través de la pantalla que vemos en la imagen superior y seleccionar Importar. Os aconsejo que en la sección “Opciones” marqueis las siguientes opciones:
Si queremos añadir nuestras clases, primeramente tendremos que añadirlas al CLASSPATH. Por ejemplo si queremos añadir las clases de XML Publisher para la generación de Plantillas RTF tendremos que añadir la siguiente ruta al CLASSPATH:
CLASSPATH=....;C:\orant\TOOLS\common60\JAVA\IMPORTER.JAR;C:\Archivos de programa\Java\jdk1.6.0_14\jre\lib\rt.jar;C:\orant\TOOLS\common60\JAVA\xdocore.jar;C:\orant\TOOLS\common60\JAVA\xmlparserv2-904.zip |
Después de importar las clases ya podremos hacer uso de ellas desde Oracle Forms. A continuación os presento un ejemplo de su utilización tras haber importado las clases: java.lang.Exception, java.lang.StackTraceElement y oracle.apps.xdo.template.RTFProcessor.
PROCEDURE rtf_2_xsl IS objeto_RTFProcessor ORA_JAVA.JOBJECT; objeto_RTFProcessorAUX ORA_JAVA.JOBJECT; v_texto VARCHAR2(4000); v_patch VARCHAR2(4000); raisedException ORA_JAVA.JOBJECT; BEGIN v_patch:= '/oracle/template.rtf'; objeto_RTFProcessor := RTFProcessor.new(v_patch); RTFProcessor.setOutput(objeto_RTFProcessor,'/oracle/outTemplate.xsl' ); objeto_RTFProcessorAUX := RTFProcessor.process(objeto_RTFProcessor); EXCEPTION --check for ORA-105100 WHEN ORA_JAVA.JAVA_ERROR THEN message('Unable to call out to Java, ' ||ORA_JAVA.LAST_ERROR); --check for ORA-105101 WHEN ORA_JAVA.EXCEPTION_THROWN then raisedException := exception_.new(ORA_JAVA.LAST_EXCEPTION); BEGIN message('Exception: '||Exception_.toString(raisedException)); message('Exception: '||Exception_.toString(raisedException)); EXCEPTION WHEN ORA_JAVA.JAVA_ERROR THEN message('Unable to call out to Java, ' ||ORA_JAVA.LAST_ERROR); END; END rtf_2_xsl; |
Uno de los errores más comunes que nos pueden surgir a la hora de subir nuestro desarrollo al servidor de aplicaciones donde está corriendo nuestro servidor de Forms puede ser uno de estos:
FRM-40735 WHEN-BUTTON-PRESSED TRIGGER RAISED EXCEPTION ORA-105100
PDE-UJI001 Failed to create the JVM
PDE-UJI002 Unable to find the required Java Importer classes
Esto es posible porque el servidor de Forms no encuentra la ruta a la libreria jvm ( jvm.dll or libjvm.so ) la cual es necesaria para que se pueda crear la JVM. Yo lo he solucionado creando un acceso directo donde apunte el LD_LIBRARY_PATH de la configuración del servidor de Forms:
cd /oracle/oraapps/test/appltest/testora/8.0.6/lib |
<em>ln -s /usr/java/jdk1.5.0_11/jre/lib/i386/server/libjvm.so libjvm.so</em> |
Otro de los puntos más importantes y dificiles consiste en conocer exactamente cual es el error que Forms nos reporta al ejecutar nuestras clases de Java en este entorno. Si os fijais en el ejemplo que os he mostrado anteriormente podréis apreciar la forma de llevarlo a cabo utilizando la clase Exception.
Otro error típico es el siguiente:
PDE-UJI002: Unable to find required Java importer classes.
Para solucionarlo simplemente tendremos que añadir al CLASSPATH los .jar anteriormente citados en el artículo.
Espero que os haya servido este minitutorial de Oracle Forms Java Importer