Copyright International Business Machines Corporation 1998, 1999. Reservados todos los derechos.
Contenido
Captulo 1. AS/400 Developer Kit para Java . . . . . . . . . . . . . . . . 1
Imprimir este tema . . . . . . . . . . . . Novedades de V4R5 para AS/400 Developer Kit para Java . . . . . . . . . . . . . . . . . Cmo saber cules son las novedades o los cambios: . . . . . . . . . . . . . . . Novedades de V4R5 para Java Development Kit (JDK) 1.1.8 . . . . . . . . . . . . . . Novedades de V4R5 para Java 2 Software Development Kit (J2SDK), Standard Edition, versin 1.2 . . . . . . . . . . . . . . 2 3 3 3 Propiedades del sistema Java para Java 2 Software Development Kit (J2SDK), Standard Edition, versin 1.2 . . . . . . . . . . Archivos en el sistema de archivos integrado . . Autorizaciones de archivo Java en el sistema de archivos integrado . . . . . . . . . . . Codificaciones de caracteres Java . . . . . . Valores de file.encoding y CCSID de AS/400 . Java Naming and Directory Interface (JNDI) . . Interfaz de depuracin de la mquina virtual Java Limitaciones, restricciones y comportamientos propios . . . . . . . . . . . . . . . La plataforma Java . . . . . . . . . . . Aplicaciones y applets Java . . . . . . . Mquina virtual Java . . . . . . . . . Archivos de clase Java . . . . . . . . . Archivos ZIP Java . . . . . . . . . . Archivos JAR Java . . . . . . . . . . Intrprete Java . . . . . . . . . . . Hebras Java . . . . . . . . . . . . Java Development Kit de Sun Microsystems, Inc. . Paquetes Java. . . . . . . . . . . . Herramientas Java . . . . . . . . . . Mtodos nativos y Java Native Interface (JNI) . . 38 . 44 . . . . 44 45 46 52 52 53 54 55 55 56 56 56 57 57 58 59 60 60
. . . . . . . . . . . . .
iii
El mandato Suprimir programa Java (DLTJVAPGM) . . . . . . . . . . . . 92 Mandato Volcar mquina virtual Java (DMPJVM) 93 El mandato Visualizar programa Java (DSPJVAPGM) . . . . . . . . . . . . 96 Mandatos de Operations Navigator a los que da soporte Java . . . . . . . . . . . . . . 100
Interfaz ResultSet para AS/400 Developer Kit para Java . . . . . . . . . . . . . . . . Ejemplo: interfaz ResultSet para AS/400 Developer Kit para Java . . . . . . . . . Interfaz DatabaseMetaData para AS/400 Developer Kit para Java . . . . . . . . . . . . . Ejemplo: interfaz DatabaseMetaData para AS/400 Developer Kit para Java . . . . . . Interfaz Blob para AS/400 Developer Kit para Java Interfaz Clob para AS/400 Developer Kit para Java
Captulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java . . . 143
Herramientas SQLJ . . . . . . . . . . . Restricciones de SQLJ DB2 . . . . . . . . . Intercalar sentencias SQL en la aplicacin Java . . Compilacin y ejecucin de programas SQLJ . . . Variables de sistema principal en SQL para Java Perfiles SQLJ . . . . . . . . . . . . El conversor de SQL para Java (SQLJ) (sqlj) . . . Precompilacin de sentencias SQL en un perfil utilizando el personalizador de perfil SQLJ DB2, db2profc . . . . . . . . . . . . . . . Imprimir el contenido de perfiles SQLJ DB2 (db2profp y profp) . . . . . . . . . . . El instalador de auditor de perfil SQLJ (profdb) Conversin de una instancia de perfil serializado a formato de clase Java mediante la herramienta de conversin de perfil SQLJ (profconv) . . . . . 143 143 144 145 146 146 149
155
Captulo 8. Ejecucin de la aplicacin Java en un sistema principal sin interfaz grfica de usuario . . . . . . 157
Configurar AWT remoto para Java en una pantalla remota . . . . . . . . . . . . . . . Ejemplo: configurar AWT remoto para Java en una pantalla remota Windows . . . . . . . Poner los archivos de clase de AWT remoto para Java a disposicin de la pantalla remota. . Adicin de RAWTGui.zip o RAWTGui.jar a la va de acceso de clases de la pantalla remota . . Iniciar AWT remoto para Java en un pantalla remota . . . . . . . . . . . . . . Ejecutar un programa Java con AWT remoto Imprimir con AWT remoto . . . . . . . . Propiedades de AWT remoto . . . . . . . Restricciones de SecurityManager de AWT remoto . . . . . . . . . . . . . . Establecimiento de Class Broker para Java en una pantalla remota. . . . . . . . . . . . . Instalacin de Class Broker para Java en AS/400 Instalacin de Class Broker para Java en Windows o UNIX . . . . . . . . . . . Contenido de paquete de cbj_1.1.jar . . . . . 157 158 159 160 160 161 163 164 164 165 165 166 167
Captulo 6. Acceso a la base de datos AS/400 con el controlador JDBC de AS/400 Developer Kit para Java . . . 131
Registrar el controlador JDBC de AS/400 Developer Kit para Java antes de utilizar JDBC . . Conectarse a una base de datos de AS/400 con el controlador JDBC de AS/400 Developer Kit para Java . . . . . . . . . . . . . . . . Ejemplos: conectarse a una base de datos de AS/400 con el controlador JDBC de AS/400 Developer Kit para Java . . . . . . . . . Crear una aplicacin JDBC . . . . . . . . . Ejemplo: crear una aplicacin JDBC . . . . . Interfaz Statement para AS/400 Developer Kit para Java . . . . . . . . . . . . . . . . Ejemplo: interfaz Statement para AS/400 Developer Kit para Java . . . . . . . . . Interfaz PreparedStatement para AS/400 Developer Kit para Java . . . . . . . . . . . . . Ejemplo: interfaz PreparedStatement para AS/400 Developer Kit para Java . . . . . . Interfaz CallableStatement para AS/400 Developer Kit para Java . . . . . . . . . . . . . Ejemplo: interfaz CallableStatement para AS/400 Developer Kit para Java . . . . . . 132
133
iv
Preparacin de AS/400 para el soporte de capa de sockets seguros. . . . . . . . . . Eleccin de un certificado digital . . . . . Utilizacin del certificado digital al ejecutar la aplicacin Java . . . . . . . . . . . Modificacin del cdigo Java para utilizar fbricas de sockets. . . . . . . . . . Modificacin del cdigo Java para utilizar la capa de sockets seguros . . . . . . . .
Herramientas de rendimiento de rastreo de eventos Java . . . . . . . . . . . . . . . . Herramientas de rendimiento de rastreo de llamadas Java . . . . . . . . . . . . . Herramientas de rendimiento de perfilado Java . . Recogida de datos de rendimiento Java. . . . Herramienta Performance Data Collector . . . . Herramienta Java Performance Data Converter Ejecucin de Java Performance Data Converter
Captulo 12. Depuracin de programas utilizando AS/400 Developer Kit para Java . . . . . . . . . . . . . . . 199
Depurar un programa Java . . . . . . . . . Depurar programas Java con la opcin *DEBUG Pantallas iniciales de depuracin de programas Java . . . . . . . . . . . . . . . Establecimiento de puntos de interrupcin . . Recorrer los programas Java para depurarlos Depurar programas Java y de mtodos nativos . . Depurar un programa Java desde otra pantalla . . Variable de entorno QIBM_CHILD_JOB_SNDINQMSG . . . . . Depuracin de servlets . . . . . . . . . . 199 200 200 201 202 204 205 206 206
186
Captulo 11. Ajustar el rendimiento de los programas Java con AS/400 Developer Kit para Java . . . . . . . 189
Consideraciones en torno al rendimiento ejecucin Java . . . . . . . . . Consideraciones en torno al rendimiento transformacin Java . . . . . . . Consideraciones en torno al rendimiento recogida de basura Java . . . . . . Consideraciones en torno al rendimiento invocacin a mtodos nativos Java . . Consideraciones en torno al rendimiento incorporacin de mtodos Java . . . Consideraciones en torno al rendimiento excepciones Java . . . . . . . . de . de . de . de . de . de . . . la . la . la . las . . . . . . . . 190 . 190 . 191 . 191 . 192 . 192
Captulo 13. Resolucin de problemas en AS/400 Developer Kit para Java . . 209
Buscar archivos de anotaciones de trabajo para analizar problemas de Java . . . . . . . . . 209 Reunir datos para analizar problemas de Java . . 210 Obtener soporte tcnico para AS/400 Developer Kit para Java . . . . . . . . . . . . . . . 211
Captulo 14. Ejemplos de cdigo para AS/400 Developer Kit para Java . . . 213
Contenido
vi
Qu es: AS/400 Developer Kit para Java est optimizado para su utilizacin en un entorno de servidor AS/400. Utiliza la compatibilidad de las interfaces de usuario y de programacin Java para que el usuario pueda desarrollar aplicaciones propias para el sistema AS/400. AS/400 Developer Kit para Java le permite crear y ejecutar programas Java en AS/400. AS/400 Developer Kit para Java es una implementacin compatible de la tecnologa Java de Sun Microsystems, Inc., y por tanto se presupone que el usuario est familiarizado con la documentacin de Java Development Kit (JDK). Para facilitar el trabajo con la informacin de dicha empresa y la nuestra, se suministra una lista de enlaces con la informacin de Sun Microsystems, Inc. Si, por algn motivo, nuestros enlaces con la documentacin de Java Development Kit de Sun Microsystems, Inc no funcionasen, consulte la informacin que necesite en la documentacin de referencia en formato HTML de dicha empresa. Puede encontrar esta informacin en la World Wide Web en The Source for Java Technology java.sun.com. Cmo utilizar estas pginas: Si desea obtener informacin ms detallada sobre la utilizacin de AS/400 Developer Kit para Java, seleccione cualquiera de los temas relacionados a continuacin: v Imprimir este tema proporciona detalles acerca de cmo bajar un archivo PDF imprimible o un paquete en archivo ZIP de los archivos HTML de AS/400 Developer Kit para Java. v Novedades de V4R5 indica las actualizaciones ms recientes de informacin y productos. v Cmo empezar proporciona informacin sobre la instalacin, la configuracin, la creacin y ejecucin de programas Java Hello World sencillos, el bajar e instalar paquetes y la compatibilidad de release a release. v En Conceptos se presentan conceptos concretos con los que se debe estar familiarizado a la hora de utilizar AS/400 Developer Kit para Java. Tambin se dan definiciones muy bsicas de Java para quienes buscan detalles generales. v En Mandatos y herramientas se facilita informacin detallada sobre la manera de utilizar los mandatos y las herramientas Java. v Otros lenguajes de programacin muestra la manera de llamar al cdigo escrito en un lenguaje distinto de Java por medio de Java Native Interface (JNI), java.lang.Runtime.exec(), la comunicacin entre procesos y Java Invocation API.
Copyright IBM Corp. 1998, 1999
v Controlador JDBC describe cmo el controlador JDBC de AS/400 Developer Kit para Java permite a los programas Java acceder a archivos de base de datos de AS/400. v Soporte SQLJ describe la forma en que AS/400 Developer Kit para Java permite utilizar sentencias SQL intercaladas en la aplicacin Java. v Ejecucin en un sistema principal sin GUI contiene informacin acerca de cmo configurar y ejecutar programas Java con Abstract Window Toolkit (AWT) remoto o Class Broker para Java. v Seguridad proporciona detalles sobre la autorizacin adoptada y describe cmo puede utilizarse SSL para hacer que las corrientes de sockets sean seguras en la aplicacin Java. v Internacionalizacin proporciona instrucciones acerca de cmo personalizar un programa Java para una regin especfica del mundo. v En Rendimiento se facilita informacin sobre la manera de ajustar el rendimiento de Java. v En Depuracin se explica cmo depurar programas Java. v En Resolucin de problemas se indica cmo buscar archivos de anotaciones de trabajo y recoger datos para analizar los programas Java. En este tema tambin se facilita informacin sobre los arreglos temporales del programa (PTF) y la manera de obtener soporte tcnico para AS/400 Developer Kit para Java. v Ejemplos de cdigo enlaza directamente con todos los ejemplos de cdigo de esta informacin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Para ver o bajar la versin PDF, seleccione AS/400 Developer Kit para Java (aproximadamente 943 KB o 176 pginas). Para guardar un PDF en la estacin de trabajo a efectos de visualizacin o impresin: 1. Abra el PDF en el navegador (pulse en el enlace anterior). 2. En el men del navegador, pulse en Archivo. 3. Pulse en Guardar como... 4. Vaya al directorio en el que desea guardar el PDF. 5. Pulse en Guardar. Bajar un archivo zip de este documento Para bajar un archivo ZIP de los archivos HTML de AS/400 Developer Kit para Java en la estacin de trabajo: 1. Asegrese de que dispone de 5,0 MB de espacio de almacenamiento como mnimo en el disco duro. 2. Cree un directorio nuevo en el disco duro. 3. Baje el paquete. El tamao del paquete es de 412 KB aproximadamente.
a. Seleccione la opcin Guardar en disco. b. Seleccione un directorio temporal como destino de la operacin de bajar. c. Pulse Aceptar. 4. Desempaquete el archivo ZIP en el directorio que ha creado en el paso 2. 5. Abra devkit.htm con el navegador para ver el manual de consulta.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
v Consulte el apartado va de acceso de clases Java para obtener detalles acerca de cmo establecer adecuadamente la va de acceso de clases para JDK 1.1.x o J2SDK. Herramientas y mandatos: v Se ha aadido la herramienta ajar Java a la lista de herramientas Java soportadas por AS/400 Developer Kit para Java. v Consulte el apartado Herramienta appletviewer Java para conocer nuevos detalles acerca de cmo ejecutar la herramienta appletviewer con Abstract Window Toolkit remoto. v Se ha aadido el mandato nuevo Volcar mquina virtual Java (DMPJVM) para volcar informacin acerca de la mquina virtual Java para un trabajo especificado. v Se ha aadido el parmetro TGTRLS al mandato Crear programa Java (CRTJVAPGM). v Se ha aadido el parmetro SUBTREE al mandato Cambiar programa Java (CHGJVAPGM). v Se ha aadido la opcin JIT al parmetro OPTIMIZE y al parmetro INTERPRET del mandato Ejecutar Java (RUNJVA). v Se ha aadido un ejemplo de pantalla con la descripcin de cada uno de los campos al mandato Visualizar programa Java (DSPJVAPGM). Ejecucin en un sistema principal sin GUI: v Consulte el tema Configuracin de Abstract Window Toolkit remoto para conocer las actualizaciones. v Si desea ejecutar la aplicacin Java en un sistema principal que no tiene una interfaz grfica de usuario (GUI), como por ejemplo un sistema AS/400, puede utilizar Abstract Window Toolkit (AWT) remoto o Class Broker para Java (CBJ). Puede utilizar CBJ para servicios de GUI de alto rendimiento. Puesto que el AWT remoto no es aconsejable para operaciones con grficos complejos o alta interaccin, puede utilizar CBJ en su lugar, diseado para estos entornos. Para utilizar CBJ, consulte el apartado Configuracin de Class Broker para Java. Depuracin: v Se han aadido detalles acerca de cmo depurar servlets. Ejemplos de cdigo: v Se han aadido ms ejemplos de cdigo. Imprimir este tema: v Consulte el apartado Imprimir este tema para obtener un PDF de la informacin de AS/400 Developer Kit para Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Novedades de V4R5 para Java 2 Software Development Kit (J2SDK), Standard Edition, versin 1.2
En este tema se destacan los cambios efectuados en AS/400 Developer Kit para Java en V4R5 para Java 2 Software Development Kit (J2SDK), Standard Edition, versin 1.2.
Nota: En esta seccin slo se describen los cambios que son exclusivos o interesantes en J2SDK, versin 1.2. La informacin general acerca de las actualizaciones del captulo Novedades para Java Development Kit (JDK) 1.1.8 tambin se aplica a J2SDK, versin 1.2. Cmo empezar: v Si desea obtener informacin sobre los JDK a los que da soporte IBM, consulte Soporte a varios JDK. v Consulte el apartado va de acceso de clases Java para obtener detalles acerca de cmo establecer adecuadamente la va de acceso de clases para JDK 1.1.x o J2SDK. v Se ha aadido el tema Seleccionar la modalidad a utilizar al ejecutar un programa Java para describir la direferencia entre ejecutar un programa Java en modalidad interpretada, ejecucin directa o compilacin Just-In-Time. v Para obtener informacin acerca de la infraestructura de ampliaciones Java, consulte el apartado Bajar e instalar paquetes Java en AS/400 e Instalacin de ampliaciones para AS/400 Developer Kit para Java. Conceptos: v Consulte el apartado Class Broker para Java para obtener informacin general acerca de cmo ejecutar aplicaciones Java en un sistema principal que no tenga una interfaz grfica de usuario (GUI). v Se ha aadido soporte para un compilador Just-In-Time que mejora el rendimiento al compilar cdigo a medida que es necesario. v Se han aadido propiedades de sistema para J2SDK nuevas. v Se ha aadido soporte para la Interfaz de depuracin de la mquina virtual Java. Mandatos y herramientas: v Consulte el apartado Herramienta appletviewer Java para conocer nuevos detalles acerca de cmo ejecutar la herramienta appletviewer con Abstract Window Toolkit remoto. v Se han aadido las herramientas Java extcheck, Java jarsigner, Java keytool, Java policytool, Java rmid y Java tnameserv a la lista de herramientas Java soportadas por AS/400 Developer Kit para Java. v La herramienta javakey Java ha quedado obsoleta en J2SDK, versin 1.2. Acceso a bases de datos utilizando el soporte SQLJ DB2 de AS/400 Developer Kit para Java v La informacin de acceso a bases de datos utilizando el soporte SQLJ DB2 de AS/400 Developer Kit para Java se ha revisado. v La herramienta conversor de SQLJ permite generar perfiles SQLJ a partir del cdigo fuente Java. v El personalizador de perfil SQLJ DB2 permite personalizar perfiles SQLJ. v La herramienta impresor de perfil SQLJ DB2 permite imprimir perfiles SQLJ. v La herramienta instalador de auditor de perfil SQLJ permite instalar auditores de perfil SQLJ sobre los perfiles SQLJ. v La herramienta de conversin de perfil SQLJ permite convertir una instancia de perfil serializado al formato de clase Java. v Intercalar sentencias SQL en la aplicacin Java muestra cmo intercalar sentencias SQL en el cdigo fuente Java. v Compilacin y ejecucin de programas SQLJ muestra cmo compilar y ejecutar los programas SQLJ.
Ejecucin en un sistema principal sin GUI: v Consulte el tema Configuracin de Abstract Window Toolkit remoto para conocer las actualizaciones. v Si desea ejecutar la aplicacin Java en un sistema principal que no tiene una interfaz grfica de usuario (GUI), como por ejemplo un sistema AS/400, puede utilizar Abstract Window Toolkit (AWT) remoto o Class Broker para Java (CBJ). Puede utilizar CBJ para servicios de GUI de alto rendimiento. Puesto que el AWT remoto no es aconsejable para operaciones con grficos complejos o alta interaccin, puede utilizar CBJ en su lugar, diseado para estos entornos. Para utilizar CBJ, consulte el apartado Configuracin de Class Broker para Java. Depuracin: v Se han aadido detalles acerca de cmo depurar servlets. Ejemplos de cdigo: v Se han aadido ms ejemplos de cdigo. Imprimir este tema: v Consulte el apartado Imprimir este tema para obtener un PDF de la informacin de AS/400 Developer Kit para Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
el campo de programa bajo licencia y el nmero de opcin en el campo de opcin de producto. IBM da soporte a varios JDK. Nota: se puede instalar ms de una opcin a la vez. AS/400 Developer Kit es el programa bajo licencia (LP) nmero 5769-JV1. Una vez haya instalado AS/400 Developer Kit para Java en el AS/400, puede optar por configurar el sistema. En Ejecutar el primer programa Java Hello World hallar informacin sobre cmo empezar con AS/400 Developer Kit para Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
* Versin 1.2 es lo mismo que Java 2 SDK (J2SDK), Standard Edition, versin 1.2. Por ejemplo, estos son los resultados de las opciones que se instalen y el mandato que se entre.
Instalado Opcin 1 (1.1.6) Entrado java Hello Resultado Se ejecuta JDK 1.1.6 porque slo hay un nico JDK instalado y es el valor por omisin. Error que indica que la Opcin 2 no est instalada. Se ejecuta JDK 1.1.8, ya que el JDK 1.1.x ms reciente es el valor por omisin. Se ejecuta JDK 1.1.7.
Opcin 1 (1.1.6) Opcin 1 (1.1.6) y Opcin 2 (1.1.7) y Opcin 4 (1.1.8) Opcin 1 (1.1.6) y Opcin 2 (1.1.7) y Opcin 4 (1.1.8)
Opcin 3 (1.2)
java Hello
Se ejecuta J2SDK, Standard Edition, versin 1.2. Si no ha especificado java.version, el valor por omisin es la 1.1.x ms reciente (por ejemplo, JDK 1.1.7). Para obtener ms detalles acerca de la propiedad java.version, consulte el apartado propiedades del sistema Java. Se ejecuta J2SDK, Standard Edition, versin 1.2. [ Legal | Glosario de AS/400 ]
1. Proporcione, en /QIBM/UserData/Java400, un archivo llamado SystemDefault.properties. Los valores de propiedad que especifique en este archivo prevalecen sobre los valores por omisin de sistema que proporciona IBM. Este archivo establece las propiedades del sistema por omisin para todas las mquinas virtuales Java que se ejecutan en el sistema AS/400. 2. O bien, coloque un archivo SystemDefault.properties en la va de acceso de user.home propia. Este archivo y las propiedades que contenga prevalecern sobre las de /QIBM/UserData/Java400/SystemDefault.properties. Este archivo establece las propiedades del sistema por omisin para todas las mquinas virtuales Java que se ejecutan. En Ejecutar el primer programa Java Hello World hallar informacin sobre cmo empezar con AS/400 Developer Kit para Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
10
1. Cree el archivo fuente como archivo de texto ASCII en el sistema de archivos integrado. a. D al archivo de texto el nombre de Hello.java. Si desea obtener ms informacin sobre la manera de crear y editar el archivo, consulte Crear y editar archivos fuente Java. b. Asegrese de que el archivo contiene el cdigo fuente siguiente:
class Hello { public static void main (String args[]) { System.out.println(Hello World); } }
2. Compile el archivo fuente. a. Entre el mandato Trabajar con variable de entorno (WRKENVVAR) para comprobar la variable de entorno CLASSPATH. Si no existe, adala y establzcala en . (el directorio actual). Si existe, asegrese de que . encabeza la lista de vas de acceso. Para obtener detalles acerca de la variable de entorno CLASSPATH, consulte el apartado Va de acceso de clases Java. b. Entre el mandato Arrancar Qshell (STRQSH) para iniciar el intrprete Qshell. c. Utilice el mandato cd (cambiar de directorio) para pasar del directorio actual al directorio del sistema de archivos integrado que contiene el archivo Hello.java. d. Entre javac seguido del nombre del archivo tal y como lo haya guardado en el disco. Por ejemplo, entre javac Hello.java. 3. Ejecute el archivo de clase. a. Entre java seguido de Hello para ejecutar la clase Hello.class con la mquina virtual Java. Por ejemplo, entre java Hello. b. Si se ha entrado todo correctamente, en la pantalla aparecer impreso Hello World. c. Pulse F3 (Salir) o F12 (Desconectar) para volver a la pantalla de entrada de mandato.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Crear y ejecutar programas Java con AS/400 Developer Kit para Java
Para crear programas de applet y aplicacin Java, puede utilizar AS/400 Developer Kit para Java. Tambin puede utilizar el Java Development Kit (JDK) de Sun Microsystems, Inc que haya disponible en la estacin de trabajo. Para crear un programa Java: 1. Cree un archivo de cdigo fuente con un editor que d soporte a archivos de texto ASCII. 2. Compile el archivo fuente para transformarlo en un archivo de clase utilizando la herramienta de compilador Java, que es javac. Nota: los archivos de clase Java son portables de una plataforma a otra, de manera que el archivo fuente Java puede compilarse en una estacin de trabajo que tenga tambin un javac. Una vez compilados los archivos fuente, los archivos de clase han de transferirse al sistema de archivos integrado.
11
3. Establezca las autorizaciones del archivo de clase en el sistema de archivos integrado. 4. Optimice el programa Java con el mandato Crear programa Java (CRTJVAPGM). Nota: este paso es opcional. Para ejecutar un programa Java: 1. Asegrese de que la va de acceso de clases Java est configurada correctamente. 2. Utilice el mandato Ejecutar Java (RUNJVA) o el mandato JAVA en AS/400, o el mandato java de Qshell para ejecutar el programa Java. A continuacin, seleccione qu modalidad desea utilizar para ejecutar el programa Java. Puede establecer la modalidad estableciendo una propiedad del sistema con el mandato Java, o estableciendo la variable de entorno antes de ejecutar el mandato Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
12
el archivo ZIP o el archivo JAR en el que se ha de realizar la bsqueda en el sistema de archivos integrado. Los componentes del nombre de va de acceso van separados por medio del carcter barra inclinada (/). Utilice un punto (.) para indicar cul es el directorio de trabajo actual. Para establecer la variable CLASSPATH del entorno Qshell, puede utilizar el programa de utilidad de exportacin que hay disponible con el intrprete Qshell. Estos mandatos aaden la variable CLASSPATH al entorno y la establecen en el valor .:/myclasses.zip:/Product/classes. v El mandato siguiente establece la variable CLASSPATH del entorno Qshell:
export -s CLASSPATH=.:/myclasses.zip:/Product/classes
J2SDK busca las clases de forma distinta a JDK 1.1.x. JDK 1.1.x busca primero en la va de acceso de clases del sistema, y luego en las vas de acceso de clases especificadas por el usuario. J2SDK busca primero en la va de acceso de clases de rutina de carga, a continuacin en los directorios de ampliacin y finalmente en la va de acceso de clases. Por tanto, el orden de bsqueda de JDK 1.1.x, utilizando el cdigo de ejemplo anterior, es: 1. La va de acceso de clases del sistema por omisin, 2. El directorio de trabajo actual, 3. El archivo myclasses.zip, que se encuentra en el sistema de archivos root (/), 4. El directorio de clases del directorio Product del sistema de archivos root. El orden de bsqueda de J2SDK, utilizando el cdigo de ejemplo anterior, es: 1. La va de acceso de clases de rutina de carga, que se encuentra en la propiedad sun.boot.class.path, 2. Los directorios de ampliacin, que se encuentran en la propiedad java.ext.dirs, 3. La va de acceso de clases del sistema por omisin, 4. El directorio de trabajo actual, 5. El archivo myclasses.zip, que se encuentra en el sistema de archivos root (/), 6. El directorio de clases del directorio Product del sistema de archivos root (/).
Al entrar en el entorno Qshell, la variable CLASSPATH queda establecida en la variable de entorno. El parmetro de va de acceso de clases especifica una lista de nombres de va de acceso. La sintaxis es idntica a la de la variable de entorno CLASSPATH. Las herramientas y mandatos siguientes disponen de un parmetro de va de acceso de clases: v v v v v El mandato java de Qshell La herramienta javac La herramienta javah La herramienta javap La herramienta javadoc
13
Si desea obtener ms informacin sobre los mandatos anteriores, consulte Mandatos y herramientas. Si utiliza el parmetro de va de acceso de clases con cualquiera de estos mandatos o herramientas, el parmetro har caso omiso de la variable de entorno CLASSPATH. Puede alterar temporalmente la variable de entorno CLASSPATH utilizando la propiedad java.class.path. Puede cambiar la propiedad java.class.path, as como otras propiedades, utilizando el archivo SystemDefault.properties. Los valores del archivo SystemDefault.properties alteran temporalmente la variable de entorno CLASSPATH. Para obtener informacin acerca del archivo SystemDefault.properties, consulte el apartado El archivo SystemDefault.properties. En JDK 1.1.x, la propiedad os400.class.path.system tambin afecta al lugar en el que se realiza la bsqueda de las clases. Esta propiedad puede contener uno de los tres valores siguientes: PRE, POST o NONE. Por omisin, est establecida en PRE, lo que hace que la bsqueda tenga lugar primero en la va de acceso de clases del sistema por omisin y despus en la va de acceso. La variable de entorno CLASSPATH o el parmetro de va de acceso de clases son los que especifican esta va de acceso. Si establece la propiedad os400.class.path.system en POST, la bsqueda se realizar primero en la va de acceso de clases especificada por usuario y despus en la va de acceso de clases del sistema por omisin. Si se utiliza el valor NONE, no se efectuar ninguna bsqueda en la va de acceso de clases por omisin y s en la va de acceso de clases especificada por usuario. Nota: tenga cuidado al especificar NONE o POST porque pueden producirse resultados imprevistos si no se encuentra una clase del sistema o si se sustituye sta de forma incorrecta por una clase definida por el usuario. As pues, debera permitir que la bsqueda de clases se realice primero en la va de acceso de clases del sistema por omisin y despus en la va de acceso de clases especificada por usuario. En Propiedades de sistema Java hallar ms informacin sobre la manera de determinar el entorno en el que se ejecutan los programas Java. Para obtener ms informacin, consulte las publicaciones OS/400 Program and CL Command APIs, SC41-5870 integrado. o OS/400 Introduccin al sistema de archivos
[ Legal | Glosario de AS/400 ]
Archivo SystemDefault.properties
El archivo SystemDefault.properties es un archivo de propiedades Java estndar. En un archivo SystemDefault.properties puede especificar propiedades por omisin. El archivo SystemDefault.properties que se encuentra en el directorio inicial tiene prioridad sobre el archivo SystemDefault.properties que se encuentra en el directorio /QIBM/UserData/Java400. Puede especificar los valores de las propiedades en el archivo SystemDefault.properties del mismo modo que en cualquier archivo de propiedades Java. Ejemplo: Archivo SystemDefault.properties
14
#Los comentarios se inician siempre con el signo de almohadilla #esto significa ejecutar siempre con JDK 1.2 java.version=1.2 #establecer la propiedad especial myown.propname=6
Donde extensionToInstall.jar es el nombre del archivo ZIP o JAR que contiene la ampliacin que desea instalar. Al crear un enlace con una ampliacin utilizando el mandato Aadir objeto de enlace (ADDLNKOBJ), la lista de archivos en la que busca el cargador de clases de ampliacin cambia a todas las mquinas virtuales Java que se ejecutan en AS/400. Si no desea que se produzca un impacto sobre los cargadores de clases de ampliacin para otras mquinas virtuales Java en AS/400, pero sigue deseando crear un enlace con una ampliacin, siga estos pasos: 1. Cree un directorio para instalar las ampliaciones. Utilice el mandato Crear directorio (MKDIR) desde la lnea de mandatos de AS/400 o el mandato mkdir desde el intrprete Qshell. 2. Instale las ampliaciones en el directorio nuevo utilizando el mandato ADDLNKOBJ. 3. Aada el directorio nuevo a la propiedad java.ext.dirs. Puede aadir el directorio nuevo a la propiedad java.ext.dirs utilizando el campo PROP del mandato JAVA desde la lnea de mandatos AS/400. Si el nombre del directorio nuevo es /home/username/ext, y el nombre del programa Java es Hello, los mandatos que entre deben ser parecidos a los siguientes:
15
16
v Aada la variable de entorno especificando el mandato Aadir variable de entorno (ADDENVVAR) en la lnea de mandatos AS/400. A continuacin, ejecute el programa Java mediante el mandato Ejecutar Java (RUNJVA) o el mandato JAVA. Por ejemplo, especifique
ADDENVVAR ENVVAR (JAVA_COMPILER) VALUE(jitc) JAVA CLASS(Test)
v Establezca la propiedad del sistema java.compiler en la lnea de mandatos AS/400. Por ejemplo, especifique JAVA CLASS(Test) PROP((java.compiler jitc)) v Establezca la propiedad del sistema java.compiler en la lnea de mandatos del intrprete de Qshell. Por ejemplo, especifique java -Djava.compiler=jitc Test Una vez establecido este valor, el compilador JIT optimiza todo el cdigo Java antes de ejecutarlo. Compilacin Just-In-Time (JIT) y ejecucin directa: La forma ms comn de utilizar el compilador Just-In-Time (JIT) es con la opcin jit_de. Al ejecutar con esta opcin, los programas que ya se han optimizado con la ejecucin directa se ejecutan en modalidad de ejecucin directa. Los programas que no se han optimizado para la optimizacin directa se ejecutan en modalidad JIT. Para utilizar el compilador JIT y la ejecucin directa conjuntamente, es necesario establecer el valor del compilador en jitc-de. Puede establecer el valor aadiendo una variable de entorno o estableciendo la propiedad del sistema java.compiler. Seleccione un mtodo de la lista siguiente para establecer el valor del compilador: v Aada la variable de entorno especificando el mandato Aadir variable de entorno (ADDENVVAR) en la lnea de mandatos AS/400. A continuacin, ejecute el programa Java mediante el mandato Ejecutar Java (RUNJVA) o el mandato JAVA. Por ejemplo, especifique
ADDENVVAR ENVVAR (JAVA_COMPILER) VALUE(jitc_de) JAVA CLASS(Test)
v Establezca la propiedad del sistema java.compiler en la lnea de mandatos AS/400. Por ejemplo, especifique JAVA CLASS(Test) PROP((java.compiler jitc_de)) v Establezca la propiedad del sistema java.compiler en la lnea de mandatos del intrprete de Qshell. Por ejemplo, especifique java -Djava.compiler=jitc_de Test Una vez establecido este valor, se utiliza el programa Java para el archivo de clase creado como ejecucin directa. Si el programa Java no se ha creado como ejecucin directa, el JIT optimiza el archivo de clase antes de ejecutarlo. Para obtener ms informacin, consulte el apartado Comparacin entre el compilador Just-In-Time y la ejecucin directa.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
17
Para crear y editar un archivo fuente Java, se puede utilizar Client Access y un editor basado en estacin de trabajo. En una estacin de trabajo: Se puede crear un archivo fuente Java en una estacin de trabajo. A continuacin, hay que transferirlo al sistema de archivos integrado utilizando para ello el protocolo FTP. Para crear y editar archivos fuente Java en una estacin de trabajo: 1. Cree el archivo ASCII en la estacin de trabajo con el editor que prefiera. 2. Conctese a AS/400 con FTP. 3. Transfiera el archivo fuente al directorio del sistema de archivos integrado como archivo binario, para que as conserve el formato ASCII. Con el Programa de Utilidad para Entrada del Fuente: El archivo fuente Java puede crearse como archivo de texto con el Programa de Utilidad para Entrada del Fuente (SEU) Para crear el archivo fuente Java como archivo de texto con SEU: 1. Cree un miembro de archivo fuente con SEU. 2. Utilice el mandato Copiar a archivo continuo (CPYTOSTMF) para copiar el miembro de archivo fuente en un archivo continuo del sistema de archivos integrado y convertir al mismo tiempo los datos a formato ASCII. Si ha de realizar cambios en el cdigo fuente, cambie el miembro de base de datos con SEU y copie de nuevo el archivo. Para obtener informacin sobre el almacenamiento de archivos, consulte Archivos en el sistema de archivos integrado.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
18
conectado. Si desea obtener informacin ms concreta sobre la instalacin, la configuracin y el uso general, consulte el tema dedicado a la configuracin de AWT remoto. Distincin entre maysculas y minsculas y el sistema de archivos integrado: El sistema de archivos integrado proporciona sistemas de archivos sensibles a las maysculas y minsculas y tambin otros no sensibles a las maysculas y minsculas por lo que a los nombres de archivo se refiere. QOpenSys es un ejemplo de sistema de archivos sensible a las maysculas y minsculas dentro del sistema de archivos integrado. El sistema de archivos raz, /, es un ejemplo de sistema de archivos no sensible a las maysculas y minsculas. Para obtener ms informacin acerca del sistema de archivos integrado, consulte la informacin del apartado Sistemas de archivos de la publicacin OS/400 Introduccin al sistema de archivos integrado. Manejo de archivos ZIP y JAR: Los archivos ZIP y JAR contienen un conjunto de clases Java. Cuando se utiliza el mandato Crear programa Java (CRTJVAPGM) en uno de estos archivos, se verifican las clases, se convierten a un formato mquina interno y, si se ha especificado as, se transforman en cdigo mquina de AS/400. Los archivos ZIP y JAR pueden recibir el mismo trato que cualquier otro archivo de clase individual. Si se asocia un formato mquina interno con uno de estos archivos, permanece asociado con el archivo. El formato mquina interno se utilizar en ejecuciones futuras en lugar del archivo de clase con el fin de mejorar el rendimiento. Si no est seguro de si existe un programa Java actual asociado con el archivo de clase o JAR, utilice el mandato Visualizar programa Java (DSPJVAPGM) para visualizar informacin acerca del programa Java en AS/400. En releases anteriores de AS/400 Developer Kit para Java, era necesario volver a crear un programa Java si se cambiaba de algn modo el archivo JAR o ZIP, debido a que el programa Java conectado no hubiera podido utilizarse. Esto ya no es as. En muchos casos, si se cambia un archivo JAR o ZIP, el programa Java sigue siendo vlido y no es necesario volver a crearlo. Si se efectan cambios parciales, como por ejemplo al actualizar un archivo de clase simple dentro de un archivo JAR, slo es necesario volver a crear los archivos de clase afectados que se encuentran dentro del archivo JAR. Los programas Java permanecen conectados con el archivo JAR despus de realizarse los cambios ms habituales en el archivo JAR; por ejemplo, despus de: v Cambiar o volver a crear un archivo JAR con la herramienta ajar. v Cambiar o volver a crear un archivo JAR con la herramienta jar. v Sustituir un archivo JAR con el mandato COPY de OS/400 o el programa de utilidad cp de Qshell. Nota: Los programas Java no permanecen intactos con el mandato COPY; sin embargo, s lo hacen con el mandato Mover objeto (MOV). Cada vez que copie un archivo JAR, ser necesario que ejecute el mandato CRTJVAPGM en el archivo JAR resultante a efectos de rendimiento y espacio. O bien, deje que los programas Java se creen automticamente, segn convenga, cuando se ejecute la aplicacin. Si accede a un archivo JAR del sistema de archivos integrado por medio de Client Access o desde una unidad correlacionada de un PC, los programas Java permanecen conectados con el archivo JAR despus de:
19
v Arrastrar y soltar otro archivo JAR dentro del archivo JAR del sistema de archivos integrado existente. v Cambiar o volver a crear el archivo JAR del sistema de archivos integrado con la herramienta jar. v Sustituir el archivo JAR del sistema de archivos integrado utilizando el mandato copy de PC. Cuando se cambia o sustituye un archivo JAR, el programa Java conectado al mismo ya no es actual. Existe un nico caso en el que los programas Java no permanecen conectados con el archivo JAR. Los programas Java conectados se destruyen si se utiliza el protocolo FTP para sustituir el archivo JAR. Esto ocurre, por ejemplo, si se utiliza el mandato put de FTP para sustituir el archivo JAR. En el apartado Rendimiento de ejecucin hallar informacin ms detallada sobre las caractersticas de rendimiento de los archivos JAR. Infraestructura de ampliaciones Java: En Java 2 SDK, Standard Edition, versin 1.2, las ampliaciones son paquetes de clases Java que pueden utilizarse para ampliar la funcionalidad de la plataforma central. Una ampliacin o aplicacin est empaquetada en uno o ms archivos JAR. El mecanismo de ampliacin permite que la mquina virtual Java utilice las clases de ampliacin de la misma forma que la mquina virtual Java utiliza las clases del sistema. El mecanismo de ampliacin tambin proporciona una forma de recuperar ampliaciones de URL especificados cuando no estn ya instalados en Java Development Kit (JDK) o Java 2 Runtime Environment, Standard Edition, versin 1.2. Consulte el apartado Instalacin de ampliaciones para AS/400 Developer Kit para Java para obtener ms informacin sobre la instalacin de ampliaciones.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
20
release anterior. En cualquier caso, se produce la creacin implcita si no ejecuta explcitamente el mandato CRTJVAPGM, pero una creacin explcita mediante el mandato CRTJVAPGM produce un cdigo mejor y utiliza menos espacio de disco. Si tiene programas Java creados en el nivel de optimizacin 40, antes de la instalacin de Java 2 Software Development Kit (J2SDK), Standard Edition, versin 1.2, debe crearlos de nuevo mediante el mandato CRTJVAPGM. Es necesario crearlos de nuevo debido a los cambios efectuados en las clases bsicas J2SDK. Nota: Si crea programas Java que utilizan caractersticas exclusivas de J2SDK, versin 1.2, no son portables a versiones anteriores a J2SDK, versin 1.2. Si los programas Java no utilizan caractersticas exclusivas, son portables a versiones anteriores. Consulte el apartado Rendimiento de ejecucin para obtener informacin ms detallada sobre el rendimiento.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
21
22
23
v En Clases, paquetes y directorios Java se da la definicin de cada uno de estos trminos y se explica cmo estn relacionados entre s. v En Propiedades de sistema Java se muestran las propiedades de sistema junto con su descripcin y valor por omisin del sistema. v En Archivos en el sistema de archivos integrado se indica dnde se pueden almacenar los archivos fuente en los sistemas de archivos integrados. v En Autorizaciones de archivo Java en el sistema de archivos integrado se ensea a establecer las autorizaciones de archivo Java. v En Codificaciones de caracteres Java se explica la manera en que la mquina virtual Java convierte los datos a otras codificaciones. v En JNDI (Java Naming and Directory Interface) se informa de cmo ejecutar JNDI. v En Interfaz de depuracin de la mquina virtual Java se describe qu es la JVMDI y por qu se utiliza. v En Limitaciones, restricciones y comportamientos propios se facilita una relacin de las limitaciones conocidas. Conceptos bsicos de Java: Java es un lenguaje de programacin orientado a objeto totalmente funcional que sirve para desarrollar aplicaciones y applets. La programacin orientada a objeto emplea objetos y clases dentro de un programa para representar las entidades del mundo real y las clasificaciones que pueden establecerse entre ellas. Las clases definen los atributos y el comportamiento que son comunes a todos los objetos de una misma clase. Un objeto es un caso particular de una clase, el ejemplo concreto del modelo conceptual ms general. La programacin orientada a objeto permite a los programadores disear aplicaciones que utilizan clases y objetos que son paralelos a los que encontramos en el mundo real. Pero no tan slo puede utilizarse la tecnologa Java para programar applets o para escribir aplicaciones, sino que tambin pueden utilizarse los servlets para llevar Java hasta los servidores. Los servlets son componentes del lado del servidor independientes del protocolo y la plataforma que se escriben en Java con el fin de ampliar de forma dinmica los servidores habilitados para Java. Consulte la pgina de presentacin de IBM WebSphere Application Server informacin ms especfica acerca de los servlets. para obtener
Desde el punto de vista de la sintaxis, el lenguaje Java es parecido a C++. Sin embargo, se ha diseado para que resulte ms fcil de aprender y ms sencillo de utilizar. Una de las simplificaciones realizadas en Java ha sido la eliminacin de los punteros. En un lenguaje como C++, los punteros suelen ser la causa ms frecuente de los errores de un programa debido a las referencias hechas de forma incorrecta a la memoria. Java permite hacer referencias a objetos, pero el programador no puede manipularlas ni cambiarlas directamente. Java es ms sencillo que C++ en otros aspectos. No existen la herencia mltiple, las plantillas, la sobrecarga de operadores ni los archivos de cabecera. Estas simplificaciones se suman a la versatilidad del lenguaje, lo convierten en algo fcil de utilizar para los programadores y reducen el riesgo de cometer errores de programacin. Asimismo, Java libra al programador de la obligacin de tener que gestionar la memoria. Un componente de la mquina virtual Java, el llamado recogedor de basura, libera la memoria asignada a un objeto una vez que ste ha dejado de
24
utilizarse. El recogedor de basura hace un seguimiento de cules son los objetos que estn activos en un programa. Cuando el programa deja de hacer referencia al objeto, el recogedor de basura libera automticamente la memoria que ocupa el objeto con el fin de que pueda reutilizarse dentro del programa. El recogedor de basura se ejecuta paralelamente al programa escrito por el usuario. Java incorpora la capacidad multihebra a la ejecucin y proporciona estructuras de lenguaje que permiten al programador escribir cdigo multihebra. Las hebras permiten la ejecucin concurrente y paralela del cdigo dentro de un programa. La facultad de crear y ejecutar hebras no es inherente a otros lenguajes de programacin. Java ofrece el potencial de las hebras como parte del lenguaje base. Java es un lenguaje que resulta ideal para la informtica de redes. Se pueden desarrollar applets y aplicaciones para ejecutarlas en un entorno distribuido. Los programas Java son portables de una plataforma a otra y no requieren que se realice ninguna modificacin ni compilacin nueva para poder ejecutarse en una configuracin distinta de sistema operativo o de hardware. Si desea obtener informacin ms detallada sobre la plataforma Java bsica o sobre Java Development Kit de Sun Microsystems, Inc, consulte los temas siguientes, en los que hallar toda la informacin previa necesaria: v En La plataforma Java se sealan los puntos en los que el entorno Java se diferencia de los lenguajes de programacin tradicionales. v En Java Development Kit de Sun Microsystems, Inc se facilita informacin y detalles acerca de Java Development Kit.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Transformador Java
El transformador Java es un componente de IBM Operating System/400 (OS/400) que preprocesa los archivos de clase con el fin de prepararlos para su ejecucin con la mquina virtual Java de AS/400. Crea un programa objeto optimizado que es persistente y est asociado con el archivo de clase. En el caso por omisin, el programa objeto contiene una versin compilada con instrucciones de lenguaje mquina RISC de 64 bits de la clase. El intrprete Java no interpreta el programa objeto optimizado durante la ejecucin. En lugar de ello, se ejecuta directamente cuando se carga el archivo de clase. No es necesario hacer nada para iniciar el transformador Java. Se ejecuta automticamente cuando el archivo de clase se ejecuta por primera vez en el sistema, a menos que usted solicite de manera explcita que el archivo de clase se ejecute en modalidad interpretada. Para iniciar explcitamente el transformador Java, puede utilizar el mandato Crear programa Java (CRTJVAPGM). El mandato CRTJVAPGM optimiza el archivo de clase o archivo JAR mientras se ejecuta el mandato, y por tanto no es necesario realizar ninguna accin mientras se est ejecutando el programa. Esto aumenta la velocidad del programa la primera vez que se ejecuta. La utilizacin del mandato CRTJVAPGM, en lugar de confiar en la optimizacin por omisin, asegura la mejor optimizacin posible y tambin una mejor utilizacin del espacio para los programas Java asociados con el archivo de clase o archivo JAR.
25
Si se utiliza el mandato CRTJVAPGM en un archivo de clase, JAR o ZIP, se optimizan todas las clases del archivo y el programa objeto Java resultante es persistente. El resultado es que el rendimiento de ejecucin mejora. Tambin se puede cambiar el nivel de optimizacin o seleccionar un nivel de optimizacin distinto del valor por omisin, 10, con el mandato CRTJVAPGM o el mandato Cambiar programa Java (CHGJVAPGM). En el nivel de optimizacin 40, se realiza un enlace entre clases entre las clases del interior de un archivo JAR y, en algunos casos, las clases se incorporan. El enlace entre clases aumenta la velocidad de llamada. La incorporacin elimina la llamada por completo. En algunos casos, puede incorporar mtodos entre clases del interior del archivo JAR o ZIP. Si especifica OPTIMIZE(*INTERPRET) en el mandato CRTJVAPGM, las clases especificadas en el mandato se verifican y se preparan para ejecutarlas en modalidad interpretada. En el mandato Ejecutar Java (RUNJVA) tambin se puede especificar OPTIMIZE(*INTERPRET). Este parmetro indica que las clases que se ejecuten en la mquina virtual Java son interpretadas, independientemente de cul sea el nivel de optimizacin del programa objeto asociado. Esto resulta til a la hora de depurar una clase que haya sido transformada con el nivel de optimizacin 40. Para forzar la interpretacin, utilice INTERPRET(*YES).
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
26
Tambin se puede iniciar el entorno de ejecucin Java con el mandato java de Qshell desde el intrprete Qshell. En este entorno, el intrprete Qshell se ejecuta en un trabajo BCI asociado con un trabajo interactivo. El entorno de ejecucin Java se inicia en el trabajo que est en ejecucin en el intrprete Qshell.
27
Lote trabajo inmediato Qshell Cdigo de aplicacin de mquina virtual Java (clase Hola) Hebra x Recolector de desechos Hebra y
RV4N311-3
Cuando el entorno de ejecucin Java se inicia desde un trabajo interactivo, aparece la pantalla de Shell de Java. Esta pantalla proporciona una lnea de entrada para incluir datos en la corriente System.in, as como para visualizar los datos que se graban en la corriente System.out y en la corriente System.err.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
28
Compilador Just-In-Time
Un compilador Just-In-Time (JIT) es un compilador especfico de plataforma que genera instrucciones de mquina para cada mtodo en la primera llamada a dicho mtodo. Para mejorar el rendimiento, el compilador JIT compila cdigo a medida que se necesita. Para comprender la diferencia entre el compilador JIT y la ejecucin directa, consulte el apartado Comparacin entre el compilador JIT y la ejecucin directa.
29
Compilador Just-In-Time Proporciona una compilacin automtica de cualquier mtodo cuando es necesaria. Este mtodo es mucho ms rpido que la ejecucin directa. Se utiliza para el desarrollo de aplicaciones pequeas o de baja utilizacin, y para aplicaciones altamente dinmicas en las que el cdigo se genera o carga en tiempo de ejecucin. JIT puede ser la eleccin para cdigo optimizado, distinto del de interpretacin, que es con frecuencia mucho ms lento.
Las optimizaciones estn limitadas a las que pueden realizarse rpidamente en tiempo de ejecucin.
Ejecucin directa Se compila una clase entera o un archivo JAR utilizando el mandato Crear programa Java (CRTJVAPGM) o los archivos se compilan automticamente en tiempo de ejecucin. Se utiliza para aplicaciones relativamente grandes. El cdigo de ejecucin directa, en el nivel de optimizacin 40, es generalmente ms rpido que el JIT. Para desplegar aplicaciones de servidor es ms adecuado utilizar la ejecucin directa en el nivel de optimizacin 40, ya que es posible que estn siendo utilizadas por varios usuarios en un momento dado, y el coste de utilizar el JIT una y otra vez es mucho ms elevado. Son posibles optimizaciones ms complejas, dado que la optimizacin no se realiza en tiempo de ejecucin.
30
31
una va de acceso que sea relativa y que coincida con el nombre de paquete de la clase. Por ejemplo, observe la clase Java siguiente:
package classes.geometry; import java.awt.Dimension; public class Shape { Dimension metrics; // El cdigo de la implementacin de la clase Shape estara aqu ... }
La sentencia package del cdigo anterior indica que la clase Shape forma parte del paquete classes.geometry. Para que el sistema de ejecucin Java encuentre la clase Shape, hay que almacenar la clase Shape en la estructura de directorios relativa classes/geometry. Nota: el nombre de paquete se corresponde con el nombre de directorio relativo en el que est almacenada la clase. El cargador de clases de la mquina virtual Java busca la clase agregando el nombre de va de acceso relativa a cada uno de los directorios especificados en la va de acceso de clases. Tambin puede buscar la clase realizando una bsqueda en los archivos ZIP o JAR especificados en la va de acceso de clases. Por ejemplo, si la clase Shape estuviese almacenada en el directorio /Product/classes/geometry del sistema de archivos raz (/), sera necesario especificar /Product en la va de acceso de clases.
Nota: en la estructura de directorios pueden existir varias versiones de la clase Shape. Para utilizar la versin beta de la clase Shape, site /Beta/myclasses dentro de la va de acceso de clases antes de cualquier otro directorio o archivo ZIP que contenga la clase Shape.
32
El compilador Java utiliza la va de acceso de clases Java, el nombre de paquete y la estructura de directorios para buscar los paquetes y las clases cuando compila el cdigo fuente Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Propiedades del sistema Java para Java Development Kit (JDK) 1.1.8
Las propiedades de sistema Java determinan cul es el entorno en el que se ejecutan los programas Java. Son parecidas a los valores del sistema o las variables de entorno de OS/400. Cuando se inicia la mquina virtual Java, se establecen diversas propiedades. En JDK 1.1.8, las propiedades de sistema estn establecidas en estos valores por omisin de sistema.
Propiedades de sistema awt.toolkit file.encoding.pkg file.separator java.class.version java.home java.vendor java.vendor.url line.separator os.arch os.name os400.class.path.rawt Valores por omisin de sistema com.ibm.rawt.client.CToolkit sun.io / (barra inclinada) 45.3 Consulte el apartado Soporte a varios JDK para obtener detalles. IBM Corporation http://www.ibm.com \n PowerPC OS/400 0
33
os400.class.path.tools os400.create.type
20 Valores vlidos: 0Sin comprobacin de seguridad 10equivalente a RUNJVA CHKPATH(*IGNORE) 20equivalente a RUNJVA CHKPATH(*WARN) 30equivalente a RUNJVA CHKPATH(*SECURE) 0
os400.defineClass.optLevel os400.enbpfrcol
direct Valores vlidos: interpretequivalente a RUNJVA OPTIMIZE(*INTERPRET) e INTERPRET(*OPTIMIZE), o INTERPRET(*YES) directLo contrario 20
0 Valores vlidos: 0equivalente a CRTJVAPGM ENBPFRCOL(*NONE) 1equivalente a CRTJVAPGM ENBPFRCOL(*ENTRYEXIT) 7equivalente a CRTJVAPGM ENBPFRCOL(*FULL) os400.interpret 0 Valores vlidos: 0equivalente a CRTJVAPGM INTERPRET(*NO) 1equivalente a CRTJVAPGM INTERPRET(*YES) os400.optimization 10 Valores vlidos: 0equivalente a CRTJVAPGM OPTIMIZE(*INTERPRET) 10equivalente a CRTJVAPGM OPTIMIZE(10) 20equivalente a CRTJVAPGM OPTIMIZE(20) 30equivalente a CRTJVAPGM OPTIMIZE(30) 40equivalente a CRTJVAPGM OPTIMIZE(40)
34
os400.stdin.allowed os400.verify.checks.disable
path.separator
program_create_type Valores vlidos: interpretequivalente a RUNJVA OPTIMIZE(*INTERPRET) e INTERPRET(*OPTIMIZE), o INTERPRET(*YES) program_create_typeLo contrario 0 65535 Este valor de propiedad del sistema es una serie que representa la suma de uno o ms valores numricos. Para obtener una lista de estos valores, consulte el apartado Valores numricos de os400.verify.checks.disable. : (dos puntos)
Este conjunto de propiedades de sistema se establece tomando como base informacin adicional del sistema.
Propiedades de sistema file.encoding Descripcin Correlaciona el CCSID de trabajo de OS/400 con el CCSID ASCII ISO correspondiente. Asimismo, establece el valor de file.encoding en el valor Java que representa el CCSID ASCII ISO. Consulte el apartado Valores de file.encoding y CCSID AS/400 para obtener una tabla que muestra la relacin existente entre los valores posibles de file.encoding y el identificador de juego de caracteres (CCSID) de AS/400 que ms se aproxima. Va de acceso utilizada para localizar clases. Toma la va de acceso de clases del sistema por omisin como valor por omisin seguida de la va de acceso de clases especificada por el usuario. Puede cambiar la construccin de la propiedad del sistema java.class.path system utilizando la propiedad del sistema os400.class.path.system. Determina el Java Development Kit (JDK) que debe ejecutarse. Si especifica un JDK no instalado, se enva un mensaje de error. Si no especifica un JDK, el JDK ms reciente ser el valor por omisin. Si slo hay un nico JDK instalado, ser el valor por omisin. Consulte el apartado Soporte a varios JDK para obtener detalles acerca de las versiones. Obtiene el nivel de release de OS/400 de la API Recuperar Informacin de Producto.
java.class.path
java.version
os.version
35
os400.CertificateLabel
os400.child.stdio.convert
os400.class.path.system
os400.file.io.mode
Descripcin Manda al soporte SSL que utilice el contenedor de certificado especificado para el programa Java que se ha iniciado y la propiedad que se ha especificado. Si especifica la propiedad de sistema os400.secureApplication, se hace caso omiso de esta propiedad de sistema. Por ejemplo, especifique -Dos400.certificateContainer=/home/username/mykeyfile.kdb o cualquier otro archivo clave del sistema de archivos integrado. Puede especificar esta propiedad del sistema junto con la propiedad del sistema os400.CertificateContainer. Esta propiedad permite seleccionar el certificado del contenedor especificado que desea que utilice la capa de sockets seguros (SSL). Por ejemplo, especifique -Dos400.certificateLabel=myCert, donde myCert es el nombre de etiqueta que asigna al certificado por medio del Gestor de certificados digitales (DCM) al crear o importar el certificado. Permite el control de la conversin de datos para stdin, stdout y stderr en Java. La conversin de datos se produce por omisin en la mquina virtual Java con el fin de convertir los datos ASCII en EBCDIC y viceversa. Con esta propiedad se pueden activar y desactivar las conversiones, lo que afecta los procesos hijo que haya iniciado este proceso utilizando el mtodo runtime.exec(). Consulte los valores por omisin. PRE (esto hace que, al construir la propiedad del sistema java.class.path, se anteponga la va de acceso de clases del sistema por omisin de OS/400 a la parte especificada por el usuario. Otros valores son POST (la clase por omisin del sistema se coloca a continuacin de la parte especificada por el usuario de la va de acceso de clases) y NONE (slo se utiliza la va de acceso de clases especificada por el usuario). El valor por omisin es PRE. Esta propiedad es no sensible a las maysculas y minsculas. Por ejemplo, se puede especificar NONE, none, noNe. Sin embargo, el nombre de la propiedad s es sensible a las maysculas y minsculas. Por ejemplo, no se puede especificar OS400.CLASS.PATH.SYSTEM. Para evitar problemas potenciales, no debe cambiar esta propiedad del sistema. Cuando se especifica TEXT en lugar del valor por omisin, que es BINARY, esta propiedad de sistema convierte el CCSID del archivo si es distinto del valor de file.encoding.
36
os400.stderr
os400.stdin
os400.stdio.convert
os400.stdout
user.dir user.home
user.language
user.name
user.region
user.timezone
Descripcin Asocia el programa Java que se inicia cuando se utiliza esta propiedad de sistema (os400.secureApplication) con el nombre de la aplicacin segura registrada. Para ver los nombres de las aplicaciones seguras registradas, utilice Digital Certificate Manager (DCM). Permite la correlacin de stderr con un archivo o un socket. Consulte los valores por omisin. Permite la correlacin de stdin con un archivo o un socket. Consulte los valores por omisin. Permite el control de la conversin de datos para stdin, stdout y stderr en Java. La conversin de datos se produce por omisin en la mquina virtual Java con el fin de convertir los datos ASCII en EBCDIC y viceversa. Con esta propiedad se pueden activar y desactivar las conversiones, lo que afecta al programa Java actual. Consulte los valores por omisin. Permite la correlacin de stdout con un archivo o un socket. Consulte los valores por omisin. Directorio de trabajo actual que utiliza la API getcwd. Recupera el directorio de trabajo inicial utilizando la API Get (getpwnam). Puede colocar un archivo SystemDefault.properties en la va de acceso de user.home path para alterar temporalmente las propiedades por omisin en /QIBM/UserData/Java400/SystemDefault.properties. Consulte el apartado Configuracin de AS/400 para obtener detalles acerca de cmo especificar su propio conjunto de valores de propiedad por omisin. La mquina virtual Java utiliza esta propiedad del sistema para leer el valor LANGID del trabajo y lo utiliza para hallar el idioma Java correspondiente. La mquina virtual Java utiliza esta propiedad del sistema para recuperar el nombre de perfil de usuario efectivo del apartado de seguridad (Security.UserName) de la base de mquinas de confianza (TCB). La mquina virtual Java utiliza esta propiedad del sistema para leer el valor CNTRYID del trabajo y lo utiliza para determinar la regin del usuario. La mquina virtual Java utiliza esta propiedad del sistema para obtener el nombre de huso horario utilizando la API QlgRetrieveLocalInformation. Si no se dispone de la informacin de huso horario, user.timezone queda establecido en la UTC (Universal Time Coordinate).
37
Propiedades del sistema Java para Java 2 Software Development Kit (J2SDK), Standard Edition, versin 1.2
Las propiedades de sistema Java determinan cul es el entorno en el que se ejecutan los programas Java. Son parecidas a los valores del sistema o las variables de entorno de OS/400. Cuando se inicia la mquina virtual Java, se establecen diversas propiedades. Las propiedades del sistema se establecen en estos valores por omisin del sistema en Java 2 Software Development Kit (J2SDK), Standard Edition, versin 1.2.
Propiedades de sistema awt.toolkit file.encoding.pkg file.separator java.class.version java.ext.dirs java.home java.library.path java.policy java.specification.name java.specification.vendor java.specification.version java.sys.class.path java.use.policy java.vendor java.vendor.url java.vm.name java.vm.specification.name java.vm.specification.vendor java.vm.specification.version java.vm.vendor java.vm.version line.separator os.arch os.name os400.class.path.rawt os400.class.path.security.check Valores por omisin de sistema com.ibm.rawt.client.CToolkit sun.io / (barra inclinada) 46.0
/QIBM/ProdData/Java400/jdk12/lib/ext:/QIBM/ProdData/Jav Consulte el apartado Soporte a varios JDK para obtener detalles. Lista de bibliotecas OS/400 /QIBM/ProdData/Java400/jdk12/lib/security/java.policy Especificacin de Lenguaje Java Sun Microsystems, Inc. 1.2 Class_Path_Sys true IBM Corporation http://www.ibm.com AS/400 Developer Kit para Java Especificacin de mquina virtual Java Sun Microsystems, Inc. 1.2 IBM Corporation OS400_JVM_12 \n PowerPC OS/400 0
os400.class.path.tools
20 Valores vlidos: 0Sin comprobacin de seguridad 10equivalente a RUNJVA CHKPATH(*IGNORE) 20equivalente a RUNJVA CHKPATH(*WARN) 30equivalente a RUNJVA CHKPATH(*SECURE) 0
38
os400.defineClass.optLevel os400.enbpfrcol
direct Valores vlidos: interpretequivalente a RUNJVA OPTIMIZE(*INTERPRET) e INTERPRET(*OPTIMIZE), o INTERPRET(*YES) directLo contrario 20
0 Valores vlidos: 0equivalente a CRTJVAPGM ENBPFRCOL(*NONE) 1equivalente a CRTJVAPGM ENBPFRCOL(*ENTRYEXIT) 7equivalente a CRTJVAPGM ENBPFRCOL(*FULL) os400.interpret 0 Valores vlidos: 0equivalente a CRTJVAPGM INTERPRET(*NO) 1equivalente a CRTJVAPGM INTERPRET(*YES) os400.optimization 10 Valores vlidos: 0equivalente a CRTJVAPGM OPTIMIZE(*INTERPRET) 10equivalente a CRTJVAPGM OPTIMIZE(10) 20equivalente a CRTJVAPGM OPTIMIZE(20) 30equivalente a CRTJVAPGM OPTIMIZE(30) 40equivalente a CRTJVAPGM OPTIMIZE(40) os400.run.mode program_create_type Valores vlidos: interpretequivalente a RUNJVA OPTIMIZE(*INTERPRET) e INTERPRET(*OPTIMIZE), o INTERPRET(*YES) program_create_typeLo contrario 0 65535 Este valor de propiedad del sistema es una serie que representa la suma de uno o ms valores numricos. Para obtener una lista de estos valores, consulte el apartado Valores numricos de os400.verify.checks.disable. : (dos puntos)
os400.stdin.allowed os400.verify.checks.disable
path.separator
39
Este conjunto de propiedades de sistema se establece tomando como base informacin adicional del sistema.
Propiedades de sistema file.encoding Descripcin Correlaciona el CCSID de trabajo de OS/400 con el CCSID ASCII ISO correspondiente. Asimismo, establece el valor de file.encoding en el valor Java que representa el CCSID ASCII ISO. Consulte el apartado Valores de file.encoding y CCSID AS/400 para obtener una tabla que muestra la relacin existente entre los valores posibles de file.encoding y el identificador de juego de caracteres (CCSID) de AS/400 que ms se aproxima. Va de acceso utilizada para localizar clases. Toma como valor por omisin la va de acceso de clases especificada por el usuario. Especifica si el cdigo se compila con el compilador Just-In-Time (JIT) (jitc) o con el compilador JIT y la ejecucin directa (jitc_de). Determina el Java Development Kit (JDK) que debe ejecutarse. Si especifica un JDK no instalado, se enva un mensaje de error. Si no especifica un JDK, el JDK ms reciente ser el valor por omisin. Si slo hay un nico JDK instalado, ser el valor por omisin. Consulte el apartado Soporte a varios JDK para obtener detalles acerca de las versiones. Obtiene el nivel de release de OS/400 de la API Recuperar Informacin de Producto. Manda al soporte SSL que utilice el contenedor de certificado especificado para el programa Java que se ha iniciado y la propiedad que se ha especificado. Si especifica la propiedad de sistema os400.secureApplication, se hace caso omiso de esta propiedad de sistema. Por ejemplo, especifique -Dos400.certificateContainer=/home/username/mykeyfile.kdb o cualquier otro archivo clave del sistema de archivos integrado. Puede especificar esta propiedad del sistema junto con la propiedad del sistema os400.CertificateContainer. Esta propiedad permite seleccionar el certificado del contenedor especificado que desea que utilice la capa de sockets seguros (SSL). Por ejemplo, especifique -Dos400.certificateLabel=myCert, donde myCert es el nombre de etiqueta que asigna al certificado por medio del Gestor de certificados digitales (DCM) al crear o importar el certificado.
java.class.path
java.compiler
java.version
os.version os400.CertificateContainer
os400.CertificateLabel
40
os400.class.path.system os400.file.io.mode
os400.secureApplication
os400.stderr
os400.stdin
os400.stdin.allowed
os400.stdio.convert
os400.stdout
user.dir
Descripcin Permite el control de la conversin de datos para stdin, stdout y stderr en Java. La conversin de datos se produce por omisin en la mquina virtual Java con el fin de convertir los datos ASCII en EBCDIC y viceversa. Con esta propiedad se pueden activar y desactivar las conversiones, lo que afecta los procesos hijo que haya iniciado este proceso utilizando el mtodo runtime.exec(). Consulte los valores por omisin. Esta propiedad del sistema se ignora en la versin 1.2. Cuando se especifica TEXT en lugar del valor por omisin, que es BINARY, esta propiedad de sistema convierte el CCSID del archivo si es distinto del valor de file.encoding Asocia el programa Java que se inicia cuando se utiliza esta propiedad de sistema (os400.secureApplication) con el nombre de la aplicacin segura registrada. Para ver los nombres de las aplicaciones seguras registradas, utilice Digital Certificate Manager (DCM). Permite la correlacin de stderr con un archivo o un socket. Consulte los valores por omisin. Permite la correlacin de stdin con un archivo o un socket. Consulte los valores por omisin. Especifica si stdin est permitido (1) o no (0). Si el llamador ejecuta un trabajo de proceso por lotes, no debe permitirse stdin. El valor por omisin es 0. Permite el control de la conversin de datos para stdin, stdout y stderr en Java. La conversin de datos se produce por omisin en la mquina virtual Java con el fin de convertir los datos ASCII en EBCDIC y viceversa. Con esta propiedad se pueden activar y desactivar las conversiones, lo que afecta al programa Java actual. Consulte los valores por omisin. Permite la correlacin de stdout con un archivo o un socket. Consulte los valores por omisin. Directorio de trabajo actual que utiliza la API getcwd.
41
user.language
user.name
user.region
user.timezone
Descripcin Recupera el directorio de trabajo inicial utilizando la API Get (getpwnam). Puede colocar un archivo SystemDefault.properties en la va de acceso de user.home path para alterar temporalmente las propiedades por omisin en /QIBM/UserData/Java400/SystemDefault.properties. Consulte el apartado Configuracin de AS/400 para obtener detalles acerca de cmo especificar su propio conjunto de valores de propiedad por omisin. La mquina virtual Java utiliza esta propiedad del sistema para leer el valor LANGID del trabajo y lo utiliza para hallar el idioma Java correspondiente. La mquina virtual Java utiliza esta propiedad del sistema para recuperar el nombre de perfil de usuario efectivo del apartado de seguridad (Security.UserName) de la base de mquinas de confianza (TCB). La mquina virtual Java utiliza esta propiedad del sistema para leer el valor CNTRYID del trabajo y lo utiliza para hallar el idioma Java correspondiente. La mquina virtual Java utiliza esta propiedad del sistema para obtener el nombre de huso horario utilizando la API QlgRetrieveLocalInformation. Si no se dispone de la informacin de huso horario, user.timezone queda establecido en la UTC (Universal Time Coordinate). [ Legal | Glosario de AS/400 ]
Descripcin No se realiza ninguna conversin de stdio durante las operaciones de lectura o grabacin. Se convierten todos los datos stdio durante las operaciones de lectura o grabacin y la conversin se realiza al valor de file.encoding o desde ste al CCSID del trabajo. Slo se convierten los datos stdin durante las operaciones de lectura y la conversin se realiza del CCSID del trabajo a file.encoding. Slo se convierten los datos stdout durante las operaciones de grabacin y la conversin se realiza de file.encoding al CCSID del trabajo. Se realizan las conversiones de stdin y stdout.
1 2
42
Slo se convierten los datos stderr durante las operaciones de grabacin y la conversin se realiza de file.encoding al CCSID del trabajo. Se realizan las conversiones de stdin y stderr. Se realizan las conversiones de stdout y stderr. Se realizan todas las conversiones de stdio. [ Legal | Glosario de AS/400 ]
5 6 7
Valor File
Descripcin
Ejemplo
UnNombreArchivo es una file:/QIBM/UserData/Java400/Output.file va de acceso absoluta o bien una relativa al directorio actual. Direccin del puerto Direccin del puerto port:misistpral:2000 port:1.1.11.111:2000 [ Legal | Glosario de AS/400 ]
Port Port
NombreSistpral DireccinTCPT
Valor
Descripcin Eludir comprobaciones de acceso para clases locales: Indica que desea que la mquina virtual Java eluda las comprobaciones de acceso de los mtodos y campos protegidos y privados para aquellas clases que se cargan desde el sistema de archivos local. Resulta til cuando se transfieren aplicaciones que contienen clases interiores que hagan referencia a campos y mtodos protegidos y privados de las clases que las engloban.
43
Suprimir NoClassDefFoundError durante carga inicial: Indica que desea que la mquina virtual Java haga caso omiso de los errores NoClassDefFoundError que se producen en la fase inicial al realizar comprobaciones con el fin de verificar la conversin de tipos y el acceso a campos o mtodos. Eludir la comprobacin de LocalVariableTable: Indica que, si se encuentra un error en la tabla LocalVariableTable de una clase, la clase funcionar como si LocalVariableTable no existiese. Por lo dems, los errores de LocaleVariableTable dan como resultado ClassFormatError. Valor utilizado en la ejecucin.
Puede indicar el valor en formato decimal, hexadecimal u octal. Se har caso omiso de los valores menores que cero. Por ejemplo, para seleccionar los dos primeros valores de la lista, utilice la sintaxis de mandato de AS/400 siguiente:
JAVA CLASS(Hello) PROP((os400.verify.checks.disable 3)) [ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
44
Para utilizar el mandato Crear programa Java (CRTJVAPGM) con el fin de optimizar un programa, el archivo de clase, el archivo JAR o el archivo ZIP debe tener autorizacin de lectura (*R) y el directorio debe tener autorizacin de ejecucin (*X). Si utiliza un patrn dentro del nombre de archivo de clase, el directorio debe tener autorizacin de lectura y de ejecucin (*RX). Para suprimir un programa Java con el mandato Suprimir programa Java (DLTJVAPGM), hay que tener autorizacin de lectura y grabacin (*RW) sobre el archivo de clase y el directorio debe tener autorizacin de ejecucin (*X). Si utiliza un patrn dentro del nombre de archivo de clase, el directorio debe tener autorizacin de lectura y de ejecucin (*RX). Para visualizar un programa Java con el mandato Visualizar programa Java (DSPJVAPGM), no se necesita tener ninguna autorizacin especial sobre el archivo de clase o el directorio. Nota: para un usuario que posea la autorizacin QSECOFR, siempre parecer que los archivos y los directorios que carecen de autorizacin de ejecucin (*X) tienen dicha autorizacin. Distintos usuarios pueden obtener resultados diferentes en determinadas situaciones, aunque aparentemente todos ellos tengan el mismo tipo de acceso a los mismos archivos. Es importante saberlo cuando se ejecutan scripts de shell mediante el intrprete Qshell o java.Runtime.exec(). Por ejemplo, un usuario escribe un programa Java que utiliza java.Runtime.exec() para llamar a un script de shell y lo prueba utilizando un ID de usuario que tiene la autorizacin QSECOFR. Si la modalidad de archivo del script de shell tiene autorizacin de lectura y de grabacin (*RW), el sistema de archivos integrado permitir ejecutarlo al ID de usuario que tiene la autorizacin QSECOFR. Sin embargo, podra ser que un usuario sin autorizacin QSECOFR intentase ejecutar el mismo programa Java y que el sistema de archivos integrado le indicase al cdigo de java.Runtime.exec() que el script de shell no es ejecutable porque falta *X. En este caso, java.Runtime.exec() lanza una excepcin de entrada y salida. Para obtener ms informacin, consulte las publicaciones OS/400 Program and CL Command APIs, SC41-5870 integrado. o OS/400 Introduccin al sistema de archivos
[ Legal | Glosario de AS/400 ]
45
Se considera que la entrada o salida de datos de programa que utiliza una clase de corriente que no sea java.io.InputStreamReader, java.io.FileReader, java.io.OutputStreamWriter ni java.io.FileWriter est formada por datos binarios y no se realiza ninguna conversin de la pgina de cdigos de caracteres. Se considera que la entrada o salida de datos que utiliza las cuatro clases de corriente anteriores est formada por datos de tipo carcter y se efecta la correspondiente conversin de la pgina de cdigos de caracteres. Dicha conversin depende del origen o el destino de los datos. Los datos de tipo carcter que se graben en un socket TCP/IP que utilice OutputStreamReader se convertirn a la pgina de cdigos que est especificada en la propiedad de sistema file.encoding. Los datos de tipo carcter que se lean en un socket TCP/IP que utilice InputStreamReader se convertirn desde la pgina de cdigos que est especificada en la propiedad de sistema file.encoding. Los datos de tipo carcter que se graben en las corrientes System.out y System.err se convertirn a la pgina de cdigos que el CCSID del trabajo de AS/400 especifique. Los datos de tipo carcter que se lean en la corriente System.in se convertirn desde la pgina de cdigos que el CCSID del trabajo de AS/400 especifique. Si se ha redirigido System.in a otra corriente, la conversin se manejar de otra manera. System.in puede redirigirse con el mtodo java.lang.System.SetIn() si se desea proporcionar la entrada al programa desde la salida de otro programa Java. En este caso, no es pertinente realizar la conversin desde un CCSID de AS/400 porque tanto el origen como el destino son programas Java. Los datos se convierten desde la pgina de cdigos que est especificada en la propiedad de sistema file.encoding Java. Asimismo, los datos destinados a una corriente System.out y/o System.err redirigida se convierten a la pgina de cdigos que est especificada en la propiedad de sistema file.encoding Java. Los datos destinados o procedentes de la base de datos DB2/400, por medio de las API JDBC, se convierten a o desde el CCSID de la base de datos de AS/400. Los datos transferidos a o desde otros programas por medio de Java Native Interface no se convierten. Para obtener ms informacin acerca de la internacionalizacin, consulte la publicacin AS/400 National Language Support, SC41-5101 AS/400 International Application Development, SC41-5603. Tambin le remitimos a la documentacin sobre internacionalizacin de Sun Microsystems, Inc, en la que hallar ms informacin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
o la publicacin
46
Cp037
037
Cp273 Cp277 Cp278 Cp280 Cp284 Cp285 Cp297 Cp420 Cp424 Cp437 Cp500 Cp737 Cp775 Cp838 Cp850 Cp852 Cp855 Cp856 Cp857 Cp860 Cp861 Cp862 Cp863 Cp864 Cp865 Cp866 Cp868 Cp869 Cp870 Cp871 Cp874 Cp875 Cp918 Cp921 Cp922
273 277 278 280 284 285 297 420 424 437 500 737 775 838 850 852 855 856 857 860 861 862 863 864 865 866 868 869 870 871 874 875 918 921 922
Descripcin BIG-5 para chino tradicional ASCII de 8 bits Juego de caracteres nacionales para chino tradicional EBCDIC de IBM para EE.UU., Canad, los Pases Bajos,... EBCDIC de IBM para Alemania y Austria EBCDIC de IBM para Dinamarca y Noruega EBCDIC de IBM para Finlandia y Suecia EBCDIC de IBM para Italia EBCDIC de IBM para Espaa y Amrica Latina EBCDIC de IBM para el Reino Unido EBCDIC de IBM para Francia rabe EBCDIC de IBM Hebreo EBCDIC de IBM PC de EE.UU. ASCII de 8 bits Internacional EBCDIC de IBM Griego MS-DOS ASCII de 8 bits Bltico MS-DOS ASCII de 8 bits EBCDIC de IBM para Tailandia Multinacional Latin-1 ASCII de 8 bits Latin-2 ASCII de 8 bits Cirlico ASCII de 8 bits Hebreo ASCII de 8 bits Latin-5 ASCII de 8 bits ASCII de 8 bits para Portugal ASCII de 8 bits para Islandia Hebreo ASCII de 8 bits ASCII de 8 bits para Canad rabe ASCII de 8 bits ASCII de 8 bits para Dinamarca y Noruega Cirlico ASCII de 8 bits Urdu ASCII de 8 bits Griego ASCII de 8 bits Latin-2 EBCDIC de IBM EBCDIC de IBM para Islandia ASCII de 8 bits para Tailandia Griego EBCDIC de IBM Urdu EBCDIC de IBM Bltico ASCII de 8 bits ASCII de 8 bits para Estonia
47
file.encoding Cp930 Cp933 Cp935 Cp937 Cp939 Cp942 Cp943 Cp948 Cp949 Cp950 Cp964 Cp970 Cp1006 Cp1025 Cp1026 Cp1046 Cp1097 Cp1098 Cp1112 Cp1122 Cp1123 Cp1124 Cp1250 Cp1251 Cp1252 Cp1253 Cp1254 Cp1255 Cp1256 Cp1257 Cp1258 Cp1381 Cp1383 Cp33722 EUC_CN EUC_JP EUC_KR EUC_TW GB2312 GBK ISO2022CN_CNS ISO2022CN_GB
CCSID 930 933 935 937 939 942 943 948 949 950 964 970 1006 1025 1026 1046 1097 1098 1112 1122 1123 1124 1250 1251 1252 1253 1254 1255 1256 1257 1251 1381 1383 33722 1383 33722 970 964 1381 1386 No hay ninguno disponible No hay ninguno disponible
Descripcin Japons katakana ampliado EBCDIC de IBM Coreano EBCDIC de IBM Chino simplificado EBCDIC de IBM Chino tradicional EBCDIC de IBM Japons latino ampliado EBCDIC de IBM Japons ASCII de 8 bits Datos mixtos de PC japons para el entorno abierto Chino tradicional IBM ASCII de 8 bits KSC5601 para coreano ASCII de 8 bits BIG-5 para chino tradicional ASCII de 8 bits Chino tradicional EUC Coreano EUC Urdu de 8 bits ISO Cirlico EBCDIC de IBM EBCDIC de IBM para Turqua rabe ASCII de 8 bits Persa EBCDIC de IBM Persa ASCII de 8 bits Bltico EBCDIC de IBM EBCDIC de IBM para Estonia EBCDIC de IBM para Ucrania 8 bits ISO para Ucrania Latin-2 MS-Win Cirlico MS-Win Latin-1 MS-Win Griego MS-Win Turco MS-Win Hebreo MS-Win rabe MS-Win Bltico MS-Win Ruso MS-Win GB para chino simplificado ASCII de 8 bits Chino simplificado EUC Japons EUC EUC para chino simplificado EUC para japons EUC para coreano EUC para chino tradicional GB para chino simplificado ASCII de 8 bits Nuevo ASCII 9 de 8 bits para chino simplificado ASCII de 7 bits para chino tradicional ASCII de 7 bits para chino simplificado
48
file.encoding ISO2022JP ISO2022KR ISO8859_1 ISO8859_2 ISO8859_3 ISO8859_4 ISO8859_5 ISO8859_6 ISO8859_7 ISO8859_8 ISO8859_9 JIS0201 JIS0208 JIS0212 Johab K018_R KSC5601 MS874 SJIS TIS620 UTF8
CCSID 5054 25546 819 912 913 914 915 1089 813 916 920 897 952 953 No hay ninguno disponible
13488 13488
Descripcin ASCII de 7 bits para japons ASCII de 7 bits para coreano ISO 8859-1 ISO Latin-1 ISO 8859-2 ISO Latin-2 ISO 8859-3 ISO Latin-3 ISO 8859-4 ISO Latin-4 ISO 8859-5 ISO Latin-5 ISO 8859-6 ISO Latin-6 (rabe) ISO 8859-7 ISO Latin-7 (griego/latino) ISO 8859-8 ISO Latin-8 (hebreo) ISO 8859-9 ISO Latin-9 (ECMA-128, Turqua) JIS X0201 JIS X0208 JIS X0212 Codificacin (completa) Hangul para coreano. Cirlico Coreano ASCII de 8 bits MS-Win para Tailandia Japons ASCII de 8 bits TIS 620 UTF-8 (CCSID 1208 de IBM, que no est disponible todava en AS/400) UNICODE, UCS-2 Idntico a Unicode Unicode sin marca de orden de bytes Unicode con orden de bytes little-endian UnicodeLittle sin marca de orden de bytes
49
CCSID de AS/400 37
Descripcin Ingls para EE.UU., Canad, Nueva Zelanda y Australia; portugus para Portugal y Brasil; y holands para los Pases Bajos Internacional n 1 Alemn/Alemania, alemn/Austria Dans/Dinamarca, noruego/Noruega, noruego/Noruega, NY Finlands/Finlandia Italiano/Italia Cataln/Espaa, espaol/Espaa Ingls/Gran Bretaa, ingls/Irlanda Parte SBCS del CCSID mixto EBCDIC japons (CCSID 5026) Francs/Francia rabe/Egipto Grecia Hebreo/Israel Alemn/Suiza, francs/Blgica, francs/Canad, francs/Suiza Parte SBCS del CCSID mixto EBCDIC coreano (CCSID 933) Parte SBCS del CCSID mixto EBCDIC para chino simplificado (CCSID 935) Tailands Checo/Repblica Checa, croata/Croacia, hngaro/Hungra, polaco/Polonia Islands/Islandia Griego/Grecia Bulgaria (ISO 8859_5) Ampliado de Turqua Urdu CCSID mixto EBCDIC japons (muy similar a CCSID 5026)
833
Cp949
836
Cp1381
838 870
Cp874 ISO8859_2
50
Descripcin Coreano/Corea Chino simplificado/China Chino tradicional/Taiwn CCSID mixto EBCDIC japons (muy similar a CCSID 5035) Bielorruso/Bielorrusia, blgaro/Bulgaria, macedonio/Macedonia, ruso/Rusia Turco/Turqua Parte SBCS del CCSID mixto EBCDIC japons (CCSID 5035) Persa Lituano/Lituania, letn/Letonia, bltico Estonio/Estonia Ucraniano/Ucrania Vietnamita. No hay soporte para el idioma vietnamita en JDK 1.1.4, por lo que file.encoding se establece en 8859_1. Laosiano. No hay soporte para el idioma laosiano en JDK 1.1.4, por lo que file.encoding se establece en 8859_1. CCSID mixto EBCDIC para chino simplificado (se incluye GBK) CCSID mixto EBCDIC japons (katakana ampliado) CCSID mixto EBCDIC japons (latino ampliado) rabe (grafas bsicas nicamente) (o ASCII 420 y 8859_6) Tailands (SBCS ampliado de sistema principal) Parte SBCS del CCSID mixto EBCDIC para chino simplificado (se incluye GBK)
1025
ISO8859_5
1026 1027
ISO8859_9 Cp942
1132
ISO8859_1
1388
Cp1381
5026
Cp942
5035
Cp942
8612
Cp864
9030
Cp874
13124
Cp1381
51
Descripcin Parte SBCS del CCSID mixto EBCDIC para chino tradicional (CCSID 937)
Para obtener ms informacin sobre JNDI, le remitimos a Java Naming and Si desea obtener informacin Directory Interface de Sun Microsystems, Inc. concreta de IBM, consulte la publicacin DSSeries LDAP V3 Client for Java Programming Guide.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
52
El depurador maneja la comunicacin entre el trabajo en el que se ejecuta la mquina virtual Java y un trabajo que maneja la interfaz de usuario. Esta interfaz de usuario se encuentra en el AS/400 o en otro sistema. Un programa de servicio denominado QJVAJVMDI, que reside en la biblioteca QSYS, soporta las funciones de JVMDI. Para obtener ms informacin acerca de JVMDI, consulte Java Virtual Machine Debugger Interface by Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
53
La plataforma Java
La plataforma Java es el entorno de desarrollo y gestin de applets y aplicaciones Java. Consta de tres componentes principales: el lenguaje Java, los paquetes Java y la mquina virtual Java. El lenguaje y los paquetes Java son parecidos a C++ y sus bibliotecas de clases. Los paquetes Java contienen clases, que estn disponibles en cualquier implementacin conforme a Java. La API debe ser la misma en cualquier sistema que d soporte a Java. Java se diferencia de los lenguajes tradicionales, como C++, en la manera de compilarse y ejecutarse. En un entorno de programacin tradicional, se escribe el cdigo fuente de un programa y se compila para obtener el cdigo objeto correspondiente a un hardware y un sistema operativo determinados. El cdigo objeto se enlaza lgicamente con otros mdulos de cdigo objeto para crear un programa que se ejecuta. El cdigo ejecutable es especfico de un equipo concreto de hardware y no funciona en ningn otro sistema si no se modifica. El grfico ilustra el entorno de los lenguajes tradicionales.
Cdigo Fuente
Compilador
Enlazador
Cdigo Ejecutable
RV4N304-1
El entorno Java se diferencia de otros entornos de programacin en que el compilador Java no genera cdigo mquina para un grupo de instrucciones especfico del hardware. En lugar de ello, el compilador Java convierte el cdigo fuente Java en instrucciones de la mquina virtual Java, que se almacenan en archivos de clase Java. Para almacenar los archivos de clase, se pueden utilizar archivos ZIP o archivos JAR. El archivo de clase no va dirigido a una plataforma concreta de hardware, sino a la arquitectura de la mquina virtual Java. El grfico muestra el entorno Java, tal y como se ha explicado anteriormente.
Ti e m p o d e c o m p i l a c i n Ti e m p o d e e j e c u c i n
Cargador Bytecode
Ve r i f i c a d o r Bytecode
Archivo de clases
Intrprete Java
RV4N305-1
La mquina virtual Java puede estar incorporada dentro de un navegador Web o de un sistema operativo como, por ejemplo, IBM Operating System/400 (OS/400). La mquina virtual Java consta del intrprete Java y el sistema de ejecucin Java. El intrprete se encarga de la tarea de interpretar el archivo de clase y de ejecutar
54
las instrucciones Java en una plataforma concreta de hardware. La mquina virtual Java es la que permite la escritura y compilacin de cdigo Java una sola vez y su ejecucin en cualquier plataforma. Java es un lenguaje de programacin multihebra, por lo que dentro de la mquina virtual Java puede haber en ejecucin varias hebras a la vez. Las hebras Java ofrecen a los programas Java una manera de llevar a cabo varias tareas a la vez.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
55
de que no se producirn desbordamientos ni subdesbordamientos de la pila de parmetros, y comprobar que no se producen violaciones de acceso. Sin embargo, no es necesario verificar de manera explcita los bytecodes. Si no se utiliza el mandato CRTJVAPGM por anticipado, las comprobaciones tendrn lugar durante la primera utilizacin de una clase. Una vez verificados los bytecodes, el intrprete los descodifica y ejecuta las instrucciones de lenguaje mquina necesarias para llevar a cabo las operaciones deseadas. Nota: se utilizar el intrprete Java nicamente si se especifica OPTIMIZE(*INTERPRET) o INTERPRET(*YES). Adems de cargar y ejecutar los bytecodes, la mquina virtual Java incluye un recogedor de basura que gestiona la memoria. La recogida de basura se ejecuta al mismo tiempo que se cargan e interpretan los bytecodes.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
56
El formato JAR admite tambin la compresin, lo que reduce el tamao del archivo y el tiempo de bajada. Adems, el autor de un applet puede firmar digitalmente las entradas individuales del archivo JAR con el fin de autenticar los orgenes de las mismas. Para actualizar las clases de los archivos JAR, consulte el apartado Herramienta ajar Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Intrprete Java
El intrprete Java es la parte de la mquina virtual Java que interpreta los archivos de clase Java para una plataforma de hardware determinada. El intrprete Java descodifica cada uno de los bytecodes y ejecuta para ellos una serie de instrucciones de lenguaje mquina.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Hebras Java
Una hebra es una corriente individual e independiente que se ejecuta dentro de un programa. Java es un lenguaje de programacin multihebra, por lo que dentro de la mquina virtual Java puede haber en ejecucin varias hebras a la vez. Las hebras Java ofrecen a los programas Java una manera de llevar a cabo varias tareas a la vez. Una hebra es bsicamente un flujo de control de un programa. Las hebras son una estructura de programacin moderna y sirven para dar soporte a programas concurrentes y para mejorar el rendimiento y la escalabilidad de las aplicaciones. La mayora de los lenguajes de programacin dan soporte a las hebras mediante el uso de bibliotecas adicionales de programacin. Java da soporte a las hebras como si fuesen API incorporadas. Nota: la utilizacin de hebras proporciona el soporte necesario para incrementar la interactividad, lo que significa que el tiempo de espera frente al teclado es menor porque hay ms cosas ejecutndose en paralelo. No obstante, el programa no es necesariamente ms interactivo slo porque tenga hebras. Las hebras son el mecanismo de espera en el caso de interacciones de largo alcance, al tiempo que permiten al programa encargarse de otras tareas. Constituyen la facultad de dar soporte a varios flujos mediante una misma corriente de cdigo. En ocasiones reciben el nombre de procesos ligeros. El lenguaje Java incluye soporte directo para hebras. Pero, por diseo, no da soporte a la entrada y salida no bloqueante asncrona con interrupciones o espera mltiple. Las hebras permiten desarrollar programas paralelos con un buen nivel de escalabilidad en un entorno en el que una mquina tiene varios procesadores. Si se construyen de manera correcta, tambin constituyen un modelo para el manejo de varias transacciones y usuarios. Las hebras pueden utilizarse en un programa Java en numerosas situaciones. Algunos programas han de ser capaces de atender varias actividades y, a la vez,
57
responder a la entrada adicional del usuario. Por ejemplo, un navegador Web ha de ser capaz de responder a la entrada de usuario a la vez que reproduce un sonido. Las hebras pueden utilizar tambin mtodos asncronos. Cuando se llama a un segundo mtodo, no se tiene que esperar a que el finalice el primero para que el segundo prosiga con su actividad. Existen tambin diversas razones para no utilizar hebras. Si un programa utiliza de forma inherente la lgica secuencial, una sola hebra puede encargarse de toda la secuencia. La utilizacin, en este caso, de varias hebras da como resultado un programa complejo que no aporta ninguna ventaja. La creacin y el inicio de una hebra conlleva un volumen de trabajo considerable. Si una operacin abarca unas pocas sentencias, resulta ms rpida de manejar en una sola hebra. Esto se cumple incluso cuando la operacin es conceptualmente asncrona. Cuando varias hebras comparten objetos, stos deben estar sincronizados a fin de coordinar el acceso a las hebras y mantener la coherencia. La sincronizacin aade complejidad a un programa, es difcil de ajustar para obtener el rendimiento ptimo y puede ser una fuente de errores de programacin. Si desea obtener ms informacin sobre las hebras, consulte el tema dedicado al desarrollo de aplicaciones multihebra..
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
58
Consulte el apartado Soporte para varios Java Development Kits (JDK) para obtener ms informacin sobre la utilizacin de varias mquinas virtuales Java. Si desea obtener informacin ms concreta sobre el JDK de Sun Microsystems, Inc, consulte los temas siguientes: v En Paquetes Java se da una relacin de los paquetes de que se dispone en el JDK de Sun Microsystems, Inc. v En Herramientas Java hay una tabla de referencia en la que figuran las herramientas que proporciona el JDK de Sun Microsystems, Inc. v En Mtodos nativos y Java Native Interface (JNI) se define lo que es un mtodo nativo y se indica para qu sirve. En este tema se explica tambin de forma breve qu es Java Native Interface.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Paquetes Java
Un paquete Java es una forma de agrupar las interfaces y las clases relacionadas en Java. Los paquetes Java son parecidos a las bibliotecas de clases existentes en otros lenguajes. Los paquetes Java, que proporcionan las API Java, forman parte del Java Development Kit (JDK) de Sun Microsystems, Inc.
Paquete java.applet java.awt java.awt.datatransfer java.awt.event java.awt.image java.awt.peer java.beans java.io java.lang java.lang.reflect java.math java.net java.rmi java.rmi.dgc java.rmi.registry java.rmi.server java.security java.security.acl java.security.interfaces java.sql java.text java.util java.util.zip Contenido Clases de applet Clases grficas, de ventana y de interfaz grfica de usuario (GUI) Clases de transferencia de datos Interfaces y clases de proceso de eventos Clases de proceso de imgenes Interfaces GUI para resolver la independencia de plataforma API de modelo de componentes JavaBeans Clases de entrada y salida Clases que cosntituyen el ncleo del lenguaje Clases de API de reflexin Aritmtica de precisin arbitraria Clases de red Clases de invocacin a mtodos remotos (RMI) Clases relacionadas con RMI Clases relacionadas con RMI Clases relacionadas con RMI Clases de seguridad Clases relacionadas con la seguridad Clases relacionadas con la seguridad API SQL JDBC para clases de base de datos Clases de internacionalizacin Tipos de datos Clases de compresin y descompresin
Si desea obtener ms informacin sobre las API Java de Sun Microsystems, Inc, consulte el manual Sun Microsystems, Inc API Users Guide.
Captulo 3. Conceptos de AS/400 Developer Kit para Java
59
Herramientas Java
Para obtener una lista completa de las herramientas que suministra el Java Development Kit de Sun Microsystems, Inc., consulte la Documentacin de referencia de herramientas de Sun Microsystems, Inc. Para obtener ms informacin acerca de cada una de las herramientas soportadas por AS/400 Developer Kit para Java, consulte el apartado Herramientas Java soportadas por AS/400 Developer Kit para Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
60
61
v v v v
Aunque con algunas excepciones, las herramientas Java, salvo ajar, dan soporte a la sintaxis y a las opciones indicadas en la documentacin de Sun Microsystems, Inc. Todas ellas deben ejecutarse por medio del intrprete Qshell. Para iniciar el intrprete Qshell, puede utilizar el mandato Arrancar Qshell (STRQSH o QSH). Cuando el intrprete Qshell est en ejecucin, aparece la pantalla Entrada de mandato QSH. En esta pantalla aparece la salida y los mensajes de los programas y herramientas Java que se ejecutan en Qshell. Tambin puede leerse en ella la entrada de los programas Java. En El mandato java de Qshell hallar informacin ms detallada. Nota: las funciones de entrada de mandato de AS/400 no estn disponibles directamente desde dentro de Qshell. Para obtener una entrada de mandato, pulse F21 (Entrada de mandato CL).
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
62
Para obtener ms informacin sobre la herramienta appletviewer, le remitimos a la herramienta appletviewer de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]
Si utiliza la herramienta appletviewer en el intrprete de Qshell y ejecuta example1.html fuera del directorio TicTacToe, los mandatos deben tener este aspecto:
63
Si desea emplear una interfaz alternativa a la herramienta jar, vea la herramienta ajar, que sirve para crear y manipular archivos JAR. Si desea obtener ms informacin sobre los sistemas de archivos de AS/400, consulte la publicacin Introduccin al sistema de archivos integrado OS/400 o bien el apartado Archivos del sistema de archivos integrado. Para obtener ms informacin sobre la herramienta jar, le remitimos a la herramienta jar de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Para obtener ms informacin sobre la herramienta javac, le remitimos a la herramienta javac de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
64
-stubs En AS/400, Java slo da soporte al formato JNI de los mtodos nativos. Los apndices son necesarios nicamente para el formato pre-JNI de los mtodos nativos. -trace -v Guarda relacin con la salida de archivos apndice .c, que no est soportada por Java en AS/400. No est soportada.
Nota: se debe especificar siempre la opcin -jni. El sistema AS/400 no da soporte a las implementaciones de mtodos nativos anteriores a JNI. Para obtener ms informacin sobre la herramienta javah, le remitimos a la herramienta javah de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
65
-p -verify
66
La herramienta javap est disponible en el intrprete Qshell. Nota: la utilizacin de la herramienta javap para desensamblar clases puede constituir una violacin del acuerdo de licencia de las clases. Antes de utilizar la herramienta javap, consulte el acuerdo de licencia de las clases. Para obtener ms informacin sobre la herramienta javap, le remitimos a la herramienta javap de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
67
Para obtener ms informacin acerca de policytool, consulte policytool by Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
68
La herramienta serialver est disponible en el intrprete Qshell. Para obtener ms informacin sobre la herramienta serialver, le remitimos a la herramienta serialver de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
-noclassgc
En AS/400, la opcin -classpath no altera temporalmente la va de acceso de clases por omisin. En lugar de ello, se agrega a la va de acceso de clases por omisin del sistema. La opcin -classpath altera temporalmente la variable de entorno CLASSPATH. El mandato java de Qshell da soporte a las opciones nuevas de AS/400, que son las que se indican a continuacin.
Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java
69
Descripcin Comprueba si existe acceso pblico de grabacin a los directorios de CLASSPATH. Especifica la frecuencia de recogida de basura. Especifica la prioridad de recogida de basura. Especifica el nivel de optimizacin. Se visualiza un mensaje a cada pase de la recogida de basura.
En el apartado dedicado al mandato Ejecutar Java (RUNJVA) de la informacin de consulta de mandatos CL se describen de forma detallada estas opciones nuevas. Los apartados dedicados a los mandatos Crear programa Java (CRTJVAPGM), Suprimir programa Java (DLTJVAPGM) y Visualizar programa Java (DSPJVAPGM) en la informacin de consulta de mandatos CL contienen informacin sobre la gestin de programas Java. El mandato java de Qshell est disponible en el intrprete Qshell. Para obtener ms informacin sobre el mandato java de Qshell, le remitimos a la herramienta java de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
70
Notas: (P) Todos los parmetros que preceden a este punto pueden especificarse por posicin. Parmetros necesarios: CLSF El parmetro CLSF especifica el nombre del archivo de clase o del archivo JAR a partir del cual se crearn programas Java en AS/400. El nombre del archivo de clase puede estar calificado por uno o varios nombres de directorio. Como nombre-archivo-clase, especifique el nombre del archivo de clase o un patrn que identifique el nombre de los archivos de clase que se utilizan. Especifique el patrn al final del nombre. Un asterisco equivale a un nmero cualquiera de caracteres y un signo de interrogacin equivale a un solo carcter. Si el nombre est calificado o contiene un patrn, debe ir entre apstrofos. Un ejemplo de nombre de archivo de clase calificado es:
'/directorio1/directorio2/nombremiclase.class'
71
Como nombre-archivo-JAR, especifique el nombre del archivo JAR o un patrn que identifique el nombre de los archivos JAR que se utilizan. Si un archivo termina en .jar o .zip, significa que se trata de un archivo JAR. Especifique el patrn al final del nombre. Un asterisco equivale a un nmero cualquiera de caracteres y un signo de interrogacin equivale a un solo carcter. Si el nombre est calificado o contiene un patrn, debe ir entre apstrofos. Un ejemplo de nombre de archivo JAR calificado es:
'/directorio1/directorio2/nombremiapl.jar'
Parmetros opcionales: OPTIMIZE El parmetro OPTIMIZE del mandato CRTJVAPGM especifica el nivel de optimizacin del programa Java de AS/400 que se conecta con el objeto de archivo de clase o JAR. Si utiliza el parmetro OPTIMIZE(*INTERPRET), se verificar el programa Java resultante y se convertir a un formato interno. Despus de esto, se interpretar cuando se ejecute. En el caso de los dems niveles de optimizacin, el formato interno incluye instrucciones de lenguaje mquina de AS/400. stas se optimizan tomando como base el nivel de optimizacin especificado. El AS/400 ejecutar directamente las instrucciones de lenguaje mquina cuando se ejecute el programa. Si especifica OPTIMIZE(*INTERPRET), los programas Java sern de menor tamao, pero se ejecutarn con ms lentitud que los programas Java creados con un nivel de optimizacin superior. A medida que el nivel de optimizacin se incrementa por encima de 10, el rendimiento de los programas Java va aumentando de forma gradual, pero el tiempo que se necesita para crear el programa Java tambin aumenta. Asimismo, cuanto ms alto es el nivel de optimizacin, ms difcil resulta depurar el programa Java. Normalmente, *INTERPRET es una buena opcin en la fase de desarrollo y de pruebas iniciales debido a la importancia que tienen la rapidez en la edicin, el tiempo total invertido en la compilacin y la calidad ofrecida por las funciones de depuracin. A medida que el programa avanza hacia la fase de entrega, el nivel de la optimizacin suele incrementarse. La lista siguiente muestra en qu se diferencian los niveles de optimizacin y en qu consisten: 10 El programa Java contiene una versin transformada de los bytecodes del archivo de clase, pero la optimizacin adicional de compilador que experimenta es mnima. Durante la depuracin, se pueden visualizar y cambiar las variables. El programa Java contiene una versin compilada de los bytecodes del archivo de clase y realiza una optimizacin adicional de compilador. Durante la depuracin, se pueden visualizar las variables, pero no se pueden cambiar. El programa Java contiene una versin compilada de los bytecodes del archivo de clase y realiza una optimizacin de compilador superior a la del nivel de optimizacin 20. La depuracin resulta ms difcil en los niveles superiores de optimizacin porque sta reduce la capacidad de detenerse en puntos concretos del cdigo y visualizar las variables del programa. Durante la depuracin, se
20
30
72
pueden visualizar las variables, pero no se pueden cambiar. Los valores que se presentan pueden no ser el valor actual de la variable. 40 El programa Java contiene una versin compilada de los bytecodes del archivo de clase y realiza una optimizacin de compilador superior a la del nivel de optimizacin 30. Adems, incluye una optimizacin que inhabilita el rastreo de las instrucciones y las llamadas. El nivel de optimizacin 40 incluye optimizaciones a travs de las clases. En un nmero menor de casos, el orden de ejecucin de los inicializadores estticos para clases no relacionadas (no relacionadas por herencia ni por contencin) puede ser diferente del indicado en la especificacin de inicializacin esttica. Adems, incluye una optimizacin que inhabilita el rastreo de las instrucciones y las llamadas. Nota: si el programa Java no se optimiza o bien lanza una excepcin en el nivel de optimizacin 40, utilice el nivel de optimizacin 30.
*INTERPRET Los programas Java que se crean no se optimizan. Al iniciarse, el programa interpreta el bytecode del archivo de clase. Durante la depuracin, se pueden visualizar y cambiar las variables.
REPLACE El parmetro REPLACE especifica si un programa Java nuevo sustituye a otro ya existente que est asociado con el archivo de clase. *YES Obliga a que, para el nivel de optimizacin seleccionado, se vuelvan a crear todos los programas Java que estn asociados con el archivo de clase o JAR. En el caso de archivos JAR de gran tamao, esto puede llevar tiempo, pero se consigue la generacin de cdigo de mayor rendimiento y se utiliza el mnimo espacio en disco. Vuelve a crear el mnimo de programas Java obligatorios asociados con el archivo de clase o JAR. Si se han modificado las clases, no se asociar ningn programa Java con una o varias clases. Si el programa Java tiene un nivel de optimizacin distinto del especificado por medio del parmetro OPTIMIZE, se crearn programas Java nuevos.
*NO
ENBPFRCOL El parmetro ENBPFRCOL especifica si se habilita o no la recogida de datos de rendimiento. *NONE No se habilita la recogida de datos de rendimiento. No se recogern datos de rendimiento. *ENTRYEXIT Se recogen datos de rendimiento de entrada y salida de procedimientos. *FULL Se recogen datos de rendimiento de entrada y salida de
73
procedimientos. Tambin se recogen datos de rendimiento antes y despus de las llamadas a procedimientos externos.
USRPRF El parmetro USRPRF especifica si la comprobacin de autorizacin realizada mientras se ejecuta el programa debe incluir nicamente al usuario que est ejecutando el programa (*USER) o bien a dicho usuario y al propietario del programa (*OWNER). Los perfiles de usuario del programa, o bien los perfiles del usuario y del propietario del programa, controlan qu objetos puede utilizar el programa. Esto incluye la autorizacin que el programa tiene para cada objeto. El atributo de perfil de usuario de un programa Java existente slo puede cambiarlo el propietario o usuario de programa que posea la autorizacin QSECOFR. Nota: Las funciones del sistema de archivos integrado que el programa puede utilizar, como por ejemplo File.delete(), no reconocen la autorizacin adoptada. Las funciones del sistema de archivos integrado slo utilizan la autorizacin del usuario que ejecuta el programa. *USER El programa se ejecuta con el perfil del usuario del programa. *OWNER Cuando se procesa el programa, se utilizan los dos perfiles de usuario, el del propietario del programa y el del usuario del programa. Para localizar y acceder a los objetos durante el proceso del programa, puede utilizar los conjuntos colectivos de autorizacin sobre objeto de los dos perfiles de usuario. La autorizacin del perfil de grupo del perfil de usuario propietario no se utiliza.
USEADPAUT El parmetro USEADPAUT especifica si, cuando el programa est en ejecucin, se utiliza como origen de autorizacin la autorizacin adoptada por programa procedente de los programas anteriores de la pila de llamadas. Nota: Las funciones del sistema de archivos integrado que el programa puede utilizar, como por ejemplo File.delete(), no reconocen la autorizacin adoptada. Las funciones del sistema de archivos integrado slo utilizan la autorizacin del usuario que ejecuta el programa. *NO Cuando se ejecute el programa, no utilice la autorizacin adoptada por programa procedente de los niveles de llamada anteriores. Si se ha especificado una lista de autorizaciones para el valor del sistema QUSEADPAUT y el usuario que ejecuta CRTJVAPGM no est incluido en dicha lista de autorizaciones, se suministra automticamente el valor *NO para este parmetro. Cuando se ejecute el programa, utilice la autorizacin adoptada por programa procedente de los niveles de llamada anteriores.
*YES
LICOPT
74
El parmetro LICOPT especifica una o varias opciones de optimizacin en tiempo de compilacin del cdigo interno bajo licencia. Este parmetro deben utilizarlo nicamente los programadores avezados, que comprenden las posibles ventajas e inconvenientes de cada tipo de optimizacin seleccionado. Si desea ver un listado de las series reconocidas del parmetro LICOPT, consulte Series del parmetro LICOPT. Nota: para obtener ms informacin sobre la manera de utilizar las optimizaciones, debe ponerse en contacto con el servicio tcnico. *OPTIMIZE La opcin *OPTIMIZE utiliza el conjunto de optimizaciones en tiempo de compilacin que estn asociadas implcitamente con el nivel de optimizacin especificado en el parmetro OPTIMIZE. Si especifica OPTIMIZE(*INTERPRET), no se realizar ninguna optimizacin en tiempo de compilacin. serie de opciones de cdigo interno bajo licencia Las opciones de optimizacin en tiempo de compilacin del cdigo interno bajo licencia seleccionadas se utilizan cuando se crea el objeto de programa Java. Determinadas opciones de optimizacin pueden disminuir la capacidad de depurar el programa Java creado.
SUBTREE El parmetro SUBTREE especifica si se procesan o no los subdirectorios cuando se busquen archivos que coincidan con la palabra clave CLSF. *NONE Slo se procesarn los archivos que coincidan con el patrn de nombre de objeto. No se procesar ningn subrbol. Si el directorio tiene subdirectorios, no se procesarn ni los subdirectorios ni los objetos de los subdirectorios. *ALL Se procesa la totalidad del subrbol de la va de acceso especificada en CLSF a fin de crear programas Java para archivos que coincidan con el nombre especificado en el parmetro CLSF.
TGTRLS El parmetro TGTRLS especifica el release del sistema operativo en el que tiene previsto utilizar el objeto que se crea. Al especificar el release destino, se utiliza el formato VxRxMx. Vx es la versin. Rx es el release y Mx es el nivel de modificacin. Por ejemplo, V4R5M0 es la versin 4, release 5, nivel de modificacin 0. Los valores vlidos dependen de la versin, release y nivel de modificacin actuales. Estos valores vlidos cambian con cada nuevo release. *CURRENT El objeto se utiliza en el release del sistema operativo que se ejecuta actualmente en el sistema. El objeto tambin puede utilizarse en un sistema que tenga instalado un release subsiguiente del sistema operativo.
75
release_destino Especifique el release en el formato VxRxMx. El objeto tambin puede utilizarse en un sistema con un release especificado, o que tenga instalado un release subsiguiente del sistema operativo. Los valores vlidos dependen de la versin, release y nivel de modificacin actuales. Estos valores vlidos cambian con cada nuevo release. Para ver una lista de los niveles de release destino vlidos, pulse la tecla F4.
En Ajustar el rendimiento de los programas Java con AS/400 Developer Kit para Java hallar ms informacin sobre rendimiento. En Ejemplo: mandato Crear programa Java (CRTJVAPGM) hallar un ejemplo en el que se utiliza el mandato CRTJVAPGM.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
NoAllowBindingToLoadedClasses
AllowBindingWithinJar
76
Serie NoAllowBindingWithinJar
AllowInlining
NoAllowInlining AssumeUnknownFieldsNonvolatile
NoAssumeUnknownFieldsNonvolatile
BindErrorHandling
BindInit NoBindInit BindSpecial NoBindSpecial BindStatic NoBindStatic BindTrivialFields NoBindTrivialFields BindVirtual NoBindVirtual
Descripcin Indica que las representaciones de clases dentro de un archivo ZIP o JAR no pueden enlazarse estrechamente con otras representaciones de clases dentro del mismo archivo ZIP o JAR. Indica al convertidor que se permite la incorporacin de mtodos locales. Este es el valor por omisin para los niveles de optimizacin 30 y 40. No se indica al convertidor que se permite la incorporacin de mtodos locales. Cuando los atributos de un campo de una clase externa no pueden determinarse, este parmetro genera cdigo presuponiendo que el campo es no voltil. Cuando los atributos de un campo de una clase externa no pueden determinarse, este parmetro genera cdigo presuponiendo que el campo es voltil. Especifica qu accin debe realizarse si, como resultado de adoptar los valores AssumeUnknownFieldsNonvolatile, PreresolveExtRef o PreLoadExtRef de la opcin de Cdigo Interno bajo Licencia, el cargador de clases de la mquina virtual Java detecta que una representacin de clase contiene representaciones de mtodo, que no pueden utilizarse en el contexto actual. Utilizar una llamada enlazada lgicamente a los mtodos init locales. No utilizar una llamada enlazada lgicamente a los mtodos init locales. Utilizar una llamada enlazada lgicamente a los mtodos special locales. No utilizar una llamada enlazada lgicamente a los mtodos special locales. Utilizar una llamada enlazada lgicamente a los mtodos static locales. No utilizar una llamada enlazada lgicamente a los mtodos static locales. Enlazar lgicamente las referencias a campos triviales durante la creacin del programa. Resolver las referencias a campos a la primera. Utilizar una llamada enlazada lgicamente a los mtodos virtuales finales locales. No utilizar una llamada enlazada lgicamente a los mtodos virtuales finales locales.
77
Serie DeferResolveOnClass
DevirtualizeFinalJDK
NoDevirtualizeFinalJDK
DevirtualizeRecursive
NoDevirtualizeRecursive DisableIntCse
NoDisableIntCse
DoExtBlockCSE NoDoExtBlockCSE
Descripcin Toma un parmetro de tipo serie que presuntamente es el nombre de una clase (por ejemplo, java.lang.Integer). Si establece PreresolveExtRef en el nivel de optimizacin 40, las clases que se especifiquen con DeferResolveOnClass no se incluyen en la operacin de prerresolucin. Esto resulta til si algunas de las clases que residen en vas de acceso no utilizadas del cdigo no figuran en la va de acceso de clases. Permite utilizar el nivel de optimizacin 40 con independencia de este hecho especificando DeferResolveOnClass=unava.unaclase para cada clase que falte. Se permiten varias entradas de DeferResolveOnClass. Permite que CRTJVAPGM utilice el conocimiento del JDK estndar para desvirtualizar las llamadas a aquellos mtodos de JDK que se sabe que son finales o miembros de clases finales. Es el valor por omisin en los niveles de optimizacin 30 y 40. No permite que CRTJVAPGM utilice el conocimiento del JDK estndar para desvirtualizar las llamadas a aquellos mtodos de JDK que se sabe que son finales o miembros de clases finales. Provoca la generacin de cdigo especial en el caso de algunos mtodos recursivos y elimina la mayor parte de la actividad general de las llamadas a mtodos recursivos. Sin embargo, se genera lgica de comprobacin adicional en la entrada inicial para el mtodo recursivo, y por tanto el rendimiento puede no mejorar en casos de recursin superficial. No provoca la generacin de cdigo especial en el caso de algunos mtodos recursivos. Provoca la inhabilitacin de determinadas optimizaciones de subexpresin comunes al generar cdigo para determinados tipos de expresiones de tipo integer. Esto puede aumentar la optimizacin global al exponer otras oportunidades de optimizacin al Conversor de optimizacin. No provoca la inhabilitacin de determinadas optimizaciones de subexpresin comunes al generar cdigo para determinados tipos de expresiones de tipo integer. Generalmente, esto produce un cdigo de mejor rendimiento en niveles de optimizacin ms bajos. Realizar la eliminacin de subexpresiones comunes en el bloque bsico ampliado. No realizar la eliminacin de subexpresiones comunes de bloque bsico ampliado.
78
Serie InlineArrayCopy
NoEnableCseForCastCheck ErrorReporting
NoPreloadExtRef
PreresolveExtRef NoPreresolveExtRef
ShortCktAthrow
Descripcin Provoca la incorporacin del mtodo System.arraycopy en algunos casos de matrices escalares. Impide la incorporacin del mtodo System.arraycopy. Realizar la eliminacin de subexpresiones comunes locales. No realizar la eliminacin de subexpresiones comunes locales. Si se establece, genera cdigo para la comprobacin de la conversin de tipos en el que se puede realizar una operacin DAG de una instancia of anterior. No est establecida; no genera cdigo para la comprobacin de la conversin de tipos en el que se puede realizar una operacin DAG de una instancia of anterior. Campo de informacin de errores de tiempo de ejecucin**: Proporciona la opcin de anular la compilacin al encontrar errores de formato de clase o verificacin. 0=Notificar todos los errores inmediatamente; 1=Diferir la notificacin de errores de verificacin de bytecodes; 2=Diferir la notificacin de errores de verificacin de bytecodes y de errores de formato de clase. Incorporar los mtodos init en las clases de java.lang. No incorporar los mtodos init. Incorporar los mtodos float/double varios de java.lang.Math. No incorporar los mtodos float/double varios. Incorporar los mtodos int/long varios de java.lang.Math. No incorporar los mtodos int/long varios. Incorporar los mtodos float/double transcendentales de java.lang.Math. No incorporar los mtodos float/double transcendentales. Indica que pueden precargarse clases referenciadas (sin inicializacin de clases) en la entrada de mtodo. Indica que no pueden precargarse clases referenciadas en la entrada de mtodo. Sin embargo, el parmetro PreresolveExtRef altera temporalmente este valor y provoca la precarga e inicializacin de clases referenciadas. . Prerresolver, en el momento de entrarlos, los mtodos a los que se hace referencia. Resolver las referencias a mtodos a la primera. Sirve para resolver las excepciones de clase no encontrada de los programas que se ejecutan en otras mquinas. Si se establece, intenta cortocircuitar las excepciones athrow.
79
Descripcin No est establecida; no intenta cortocircuitar las excepciones athrow. Si se establece, reconoce algunas subclases de Exception y las cortocircuita directamente. No est establecida; no reconoce algunas subclases de Exception y no las cortocircuita directamente.
Los dos asteriscos (**) significan que estas series requieren un valor numrico como entrada en la sintaxis de nombreserie=nmero (sin espacios en blanco intercalados).
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
El ejemplo que se da a continuacin es idntico al Ejemplo 1, con la salvedad que se optimiza el programa. El programa se crea con OPTIMIZE(40), por lo que contiene instrucciones de lenguaje mquina compiladas que se ejecutan cuando se inicia el programa Java. Ejemplo 2: crear un programa Java optimizado
CRTJVAPGM CLSF('/projectB/team2/myJavaclassfile.class') OPTIMIZE(40)
En El mandato Crear programa Java (CRTJVAPGM) hallar el diagrama de sintaxis e informacin detallada sobre los parmetros.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
80
programas Java. Cuando se carga una clase que no tiene conectado ningn programa Java actual, se crea un programa Java de forma dinmica. Dentro de un archivo JAR, pueden existir clases a partir de las cuales no se ha creado ningn programa Java. Para crear programas Java a partir de dichas clases, puede utilizar el mandato Crear programa Java (CRTJVAPGM). Este mandato sustituye programas Java existentes nicamente. Sintaxis:
Mandato CHGJVAPGM (P) >>CHGJVAPGMCLSF(.-nombre_archivo_clase-.)> '-nombre_archivo_JAR-' >...-.> | .-SAME-. | | .-*SAME. | '-OPTIMIZE(+-*INTERPRET-+)-' '-ENBPFRCOL(+-*NONE+)-' |-10-| |-*ENTRYEXIT-| |-20-| '-*FULL' |-30-| '-40-' >.-...> | .-*RPL-. | | .-*NONE-. | '-MERGE('-*YES-')-' '-SUBTREE('-*ALL')-' >..-> | .-*SAME. | '-LICOPT(+-*OPTIMIZE+)-' '-serie_opciones-'
Notas: (P) Todos los parmetros que preceden a este punto pueden especificarse por posicin. Parmetro obligatorio: CLSF El parmetro CLSF especifica el nombre del archivo de clase o del archivo JAR que est conectado con los programas Java que deben cambiarse. El nombre del archivo de clase puede estar calificado por uno o varios nombres de directorio. Como nombre-archivo-clase, especifique el nombre del archivo de clase o un patrn que identifique el nombre de los archivos de clase que se utilizan. Especifique el patrn al final del nombre. Un asterisco equivale a un nmero cualquiera de caracteres y un signo de interrogacin equivale a un solo carcter. Si el nombre est calificado o contiene un patrn, debe ir entre apstrofos. Un ejemplo de nombre de archivo de clase calificado es:
'/directorio1/directorio2/nombremiclase.class'
Como nombre-archivo-JAR, especifique el nombre del archivo JAR o un patrn que identifique el nombre de los archivos JAR que se utilizan. Si un archivo termina en .jar o .zip, significa que se trata de un archivo JAR. Especifique el patrn al final del nombre. Un asterisco equivale a un nmero cualquiera de caracteres y un signo de interrogacin equivale a un solo carcter. Si el nombre est calificado o contiene un patrn, debe ir entre apstrofos. Un ejemplo de nombre de archivo JAR calificado es:
'/directorio1/directorio2/nombremiapl.jar'
81
'/directorio1/directorio2/nombremia*.zip'
Parmetros opcionales: OPTIMIZE El parmetro OPTIMIZE del mandato CHGJVAPGM especifica el nivel de optimizacin de cada uno de los programas Java de AS/400 conectados con el objeto de clase o el objeto de archivo JAR. Si utiliza el parmetro OPTIMIZE(*INTERPRET), se verificar el programa Java resultante y se convertir a un formato interno. Despus de esto, se interpretar cuando se ejecute. En el caso de los dems niveles de optimizacin, el formato interno incluye instrucciones de lenguaje mquina de AS/400. stas se optimizan tomando como base el nivel de optimizacin especificado. El AS/400 ejecutar directamente las instrucciones de lenguaje mquina cuando se ejecute el programa. Con OPTIMIZE(*INTERPRET), los programas Java son de menor tamao, pero se ejecutan con ms lentitud que los programas Java creados con un nivel de optimizacin superior. A medida que el nivel de optimizacin se incrementa por encima de 10, el rendimiento de los programas Java va aumentando de forma gradual, pero el tiempo que se necesita para crear el programa Java tambin aumenta. Asimismo, cuanto ms alto es el nivel de optimizacin, ms difcil resulta depurar el programa Java. Normalmente, *INTERPRET es una buena opcin en la fase de desarrollo y de pruebas iniciales debido a la importancia que tienen la rapidez en la edicin, el tiempo total invertido en la compilacin y la calidad ofrecida por las funciones de depuracin. A medida que el programa avanza hacia la fase de release, el nivel de la optimizacin suele incrementarse. La lista siguiente muestra en qu se diferencian los niveles de optimizacin y en qu consisten: *SAME El valor no cambia. 10 El programa Java contiene una versin transformada de los bytecodes del archivo de clase, pero la optimizacin adicional de compilador que experimenta es mnima. Durante la depuracin, se pueden visualizar y cambiar las variables. El programa Java contiene una versin compilada de los bytecodes del archivo de clase y experimenta una optimizacin adicional de compilador. Durante la depuracin, se pueden visualizar las variables, pero no se pueden cambiar. El programa Java contiene una versin compilada de los bytecodes del archivo de clase y experimenta una optimizacin de compilador superior a la del nivel de optimizacin 20. La depuracin resulta ms difcil en los niveles superiores de optimizacin porque sta reduce la capacidad de detenerse en puntos concretos del cdigo y visualizar las variables del programa. Durante la depuracin, se pueden visualizar las variables, pero no se pueden cambiar. Los valores que se presentan pueden no ser el valor actual de la variable. El programa Java contiene una versin compilada de los bytecodes del archivo de clase y experimenta una optimizacin de compilador superior a la del nivel de optimizacin 30. Adems, incluye una optimizacin que inhabilita el rastreo de las
20
30
40
82
instrucciones y las llamadas. Nota: si el programa Java no se optimiza o bien lanza una excepcin en el nivel de optimizacin 40, utilice el nivel de optimizacin 30. *INTERPRET El programa Java creado no contiene instrucciones especficas de mquina. Al iniciarse, el programa Java interpreta los bytecodes del archivo de clase. Durante la depuracin, se pueden visualizar y cambiar las variables.
ENBPFRCOL El parmetro ENBPFRCOL especifica si se habilita o no la recogida de datos de rendimiento. *SAME El valor no cambia. *NONE No se habilita la recogida de datos de rendimiento. No se recogern datos de rendimiento. *ENTRYEXIT Se recogen datos de rendimiento de entrada y salida de procedimientos. *FULL Se recogen datos de rendimiento de entrada y salida de procedimientos. Tambin se recogen datos de rendimiento antes y despus de las llamadas a procedimientos externos.
MERGE El parmetro MERGE especifica si se fusionan los programas Java conectados con un archivo JAR con el fin de tener el mnimo de programas Java posible. Si se procesa un archivo de clase Java, se hace caso omiso de este parmetro. *RPL Especifica que los programas Java conectados con un archivo JAR se fusionarn slo si es necesario volver a crear y sustituir los programas Java porque que estn cambiando otros atributos de programa Java. Si no se est cambiando ningn atributo y no es necesario volver a crear y sustituir ningn programa Java, no se realizar la fusin de programas Java. Los programas Java conectados con un archivo JAR se fusionan con el fin de tener el mnimo de programas Java posible y ahorrar as espacio en disco o bien mejorar el tiempo de carga de clases.
*YES
SUBTREE El parmetro SUBTREE especifica si se procesan o no los subdirectorios cuando se busquen archivos que coincidan con la palabra clave CLSF. *NONE Slo se procesarn los archivos que coincidan con el patrn de
Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java
83
nombre de objeto. No se procesar ningn subrbol. Si el directorio tiene subdirectorios, no se procesarn ni los subdirectorios ni los objetos de los subdirectorios. *ALL Se procesa la totalidad del subrbol de la va de acceso especificada en CLSF a fin de crear programas Java para archivos que coincidan con el nombre especificado en el parmetro CLSF.
LICOPT El parmetro LICOPT especifica una o varias opciones de optimizacin en tiempo de compilacin del cdigo interno bajo licencia. Este parmetro deben utilizarlo nicamente los programadores avezados, que comprenden las posibles ventajas e inconvenientes de cada tipo de optimizacin seleccionado. Nota: para obtener ms informacin sobre la manera de utilizar las optimizaciones, debe ponerse en contacto con el servicio tcnico. *SAME El valor no cambia. *OPTIMIZE La opcin *OPTIMIZE utiliza el conjunto de optimizaciones en tiempo de compilacin que estn asociadas implcitamente con el nivel de optimizacin especificado en el parmetro OPTIMIZE. Si especifica OPTIMIZE(*INTERPRET), no se realizar ninguna optimizacin en tiempo de compilacin. serie-opciones En Series del parmetro LICOPT hallar un listado de las series reconocidas.
En Ajustar el rendimiento de los programas Java con AS/400 Developer Kit para Java hallar ms informacin sobre rendimiento. Consulte el apartado Ejemplo: Mandato Cambiar programa Java (CHGJVAPGM) para obtener un ejemplo de utilizacin del mandato CHGJVAPGM.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
84
El ejemplo que se da a continuacin es idntico al Ejemplo 1, con la salvedad que se optimiza el programa. El programa se cambia con OPTIMIZE(10), por lo que contiene instrucciones de lenguaje mquina compiladas que se ejecutan cuando se inicia el programa Java. Ejemplo 2: cambiar un programa Java optimizado en un archivo JAR
CHGJVAPGM CLSF('/projectB/myJavaappfile.jar') OPTIMIZE(10)
Consulte el apartado Mandato Cambiar programa Java (CHGJVAPGM) para obtener un diagrama de sintaxis y detalles sobre los parmetros.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
El mandato JAVA
El mandato JAVA funciona de la misma forma exactamente que el mandato Ejecutar Java (RUNJVA). Puede utilizar ambos indistintamente. En El mandato Ejecutar Java (RUNJVA) hallar la informacin oportuna y los parmetros que se utilizan con el mandato JAVA.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
85
'-GCHMAX('-tamao_mx_almac_dinmico_recogida_basura-')-' >..> | .-*2048. | '-GCHINL('-tamao_inicial_almac_dinmico_recogida_basura-')-' >.-.-> | .-50-. | '-GCFRQ('-valor_frecuencia_recogida_basura-')-' >....->< | .-20-. | | .-*NONE. | '-GCPTY(+-30-+-)-' | | <-> (4)| | '-10-' '-OPTION('.-*DEBUG-.')-' |-*VERBOSE-| |-*VERBOSEGC-| '-*NOCLASSGC-'
Notas: (1) Si se especifica CLASS(*VERSION), todos los dems parmetros se ignoran. (2) 200 repeticiones como mximo. (P) Todos los parmetros que preceden a este punto pueden especificarse por posicin. (3) 100 repeticiones como mximo. (4) 4 repeticiones como mximo. Parmetros necesarios: CLASS El parmetro CLASS especifica el nombre de la clase que debe ejecutarse. El nombre de la clase puede estar calificado por uno o varios nombres de paquete. Cada nombre de paquete debe ir seguido de un punto. Por ejemplo, CLASS(paq1.paq2.miclase) identifica una clase calificada por dos nombres de paquete. Como nomb-clase, especifique el nombre de la clase que se ejecutar. El lmite para el parmetro CLASS es de 5000 caracteres. *VERSION Se visualiza la informacin de versin de Java Development Kit (JDK) de Sun Microsystems, Inc y de la mquina virtual Java. No se ejecuta ningn programa Java. Parmetros opcionales:
PARM El parmetro PARM especifica uno o ms valores de parmetro que se pasan al programa Java. Puede especificar 200 valores de parmetro como mximo. Como valor-parmetro, especifique los parmetros que deben pasarse al programa Java. El lmite para el parmetro PARM es de 256 caracteres. *NONE No hay parmetros de entrada para el programa Java.
CLASSPATH
86
El parmetro CLASSPATH especifica la va de acceso utilizada para localizar las clases. Los directorios estn separados por signos de dos puntos. La va de acceso de clases sirve para localizar las clases. Un ejemplo de va de acceso de clases es:
'/directorio1/directorio2:/QIBM/ProdData/Java400'
El lmite para el parmetro CLASSPATH es de 5000 caracteres. *ENVVAR La va de acceso de clases est determinada por la variable de entorno CLASSPATH.
CHKPATH El parmetro CHKPATH especifica el nivel de los avisos que se dan para los directorios de la va de acceso de clases (CLASSPATH) que tengan autorizacin de grabacin de uso pblico. Si un directorio de la va de acceso de clases tiene autorizacin de grabacin de uso pblico, representa un riesgo para la seguridad, ya que podra suceder que se insertase un clase no deseada en el directorio situado antes de la clase oficial. *WARN Por cada directorio de la va de acceso de clases que tenga autorizacin de grabacin de uso pblico, se enviar un mensaje de aviso a las anotaciones de trabajo QJVACMDSRV. *SECURE Se enviar un mensaje de aviso por cada directorio de la va de acceso de clases que tenga autorizacin de grabacin de uso pblico. Si se envan uno o varios mensajes de aviso, se enviar un mensaje de escape y no se ejecutar el programa Java. *IGNORE Se pasa por alto el hecho que los directorios de la va de acceso de clases puedan tener autorizacin de grabacin de uso pblico. No se enva ningn mensaje de aviso.
OPTIMIZE El parmetro OPTIMIZE especifica el nivel de optimizacin del programa Java de AS/400 que se utiliza si no se ha asociado nunca ningn programa Java con la clase Java. La optimizacin es una operacin que requiere tiempo; es por ello que, si se utiliza el mandato RUNJVA en lugar de CRTJVAPGM, los programas se ejecutan con lentitud la primera vez que se optimizan. Sin embargo, en ejecuciones posteriores se utiliza el formato optimizado, con lo que la optimizacin es un coste fijo. Esto es as para los archivos de clase, los archivos JAR y los archivos ZIP. El efecto del parmetro OPTIMIZE depende del nivel de optimizacin actual del programa y ste resulta de si se ha utilizado previamente el mandato RUNJVA o el mandato CRTJVAPGM. Si no se ha ejecutado nunca el programa en AS/400 y, adems, tampoco se ha ejecutado previamente el mandato CRTJVAPGM, antes de ejecutar el programa se utiliza el nivel de optimizacin seleccionado. Este nivel de optimizacin est almacenado en el archivo de clase, JAR o ZIP.
Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java
87
Si se ha ejecutado el mandato RUNJVA o CRTJVAPGM en el programa, el parmetro OPTIMIZE del mandato RUNJVA carece de efecto. El parmetro OPTIMIZE(*INTERPRET) es una excepcin. Este parmetro obliga a que todas las clases Java cargadas se ejecuten de manera interpretada sin importar cul sea el valor OPTIMIZE del programa Java asociado. Si desea cambiar el nivel de la optimizacin de un programa que ya haya sido optimizado con anterioridad, utilice el mandato CRTJVAPGM o CHGJVAPGM. Si utiliza el mandato RUNJVA, ste no crear el nivel de optimizacin deseado. En lugar de ello, utiliza el valor guardado que est asociado con el archivo de clase, JAR o ZIP. Nota: el parmetro *INTERPRET se comporta as con el fin de depurar cdigo previamente optimizado. No le obliga a tener que suprimir el programa, volverlo a crear con una optimizacin baja, depurarlo y optimizarlo de nuevo. Si utiliza el parmetro OPTIMIZE(*INTERPRET), se verificar el programa Java resultante y se convertir a un formato interno. A continuacin, se interpretar cuando se ejecute. En el caso de los dems niveles de optimizacin, el formato interno incluye instrucciones de lenguaje mquina de AS/400. stas se optimizan tomando como base el nivel de optimizacin especificado. El AS/400 ejecutar directamente las instrucciones de lenguaje mquina cuando se ejecute el programa. Con OPTIMIZE(*INTERPRET), los programas Java son de menor tamao, pero se ejecutan con ms lentitud que los programas Java creados con un nivel de optimizacin superior. A medida que el nivel de optimizacin se incrementa por encima de 10, el rendimiento de los programas Java va aumentando de forma gradual, pero el tiempo que se necesita para crear el programa Java tambin aumenta. Tambin resulta ms difcil depurar el programa Java. Normalmente, *INTERPRET es una buena opcin en la fase de desarrollo y de pruebas iniciales debido a la importancia que tienen la rapidez en la edicin, el tiempo total invertido en la compilacin y la calidad ofrecida por las funciones de depuracin. A medida que el programa avanza hacia la fase de release, el nivel de la optimizacin suele incrementarse. La lista siguiente muestra en qu se diferencian los niveles de optimizacin y en qu consisten: 10 El programa Java contiene una versin transformada de los bytecodes del archivo de clase, pero la optimizacin adicional de compilador que experimenta es mnima. Durante la depuracin, se pueden visualizar y cambiar las variables.
*INTERPRET El programa Java creado no contiene instrucciones especficas de mquina. Al iniciarse el programa Java, se interpreta. Durante la depuracin, se pueden visualizar y cambiar las variables. *JIT No se crea ningn programa Java que contenga secuencias de instrucciones de mquina. La clase se ejecuta mediante el compilador Just-In-Time (JIT). 20 El programa Java contiene una versin compilada de los bytecodes del archivo de clase y experimenta una optimizacin adicional de compilador. Durante la depuracin, se pueden visualizar y cambiar las variables.
88
30
El programa Java contiene una versin compilada de los bytecodes del archivo de clase y experimenta una optimizacin de compilador superior a la del nivel de optimizacin 20. La depuracin resulta ms difcil en los niveles superiores de optimizacin porque sta reduce la capacidad de detenerse en puntos concretos del cdigo y visualizar las variables del programa. El programa Java contiene una versin compilada de los bytecodes del archivo de clase y experimenta una optimizacin de compilador superior a la del nivel de optimizacin 30. Adems, incluye una optimizacin que inhabilita el rastreo de las instrucciones y las llamadas. Nota: si el programa Java no se optimiza o bien lanza una excepcin en el nivel de optimizacin 40, utilice el nivel de optimizacin 30.
40
INTERPRET El parmetro INTERPRET especifica si todos los archivos de clase Java deben ejecutarse de forma interpretada. OPTIMIZE Los archivos de clase Java se ejecutarn de forma interpretada en funcin del valor especificado para el parmetro OPTIMIZE. Si se ha especificado OPTIMIZE(*INTERPRET), todos los archivos de clase Java se ejecutarn de forma interpretada. Si se ha especificado cualquier otro valor para el parmetro OPTIMIZE, slo se ejecutarn de forma interpretada los archivos de clase Java con programas Java creados mediante el mandato CRTJVAPGM y con OPTIMIZE(*INTERPRET). *NO Slo se ejecutarn de forma interpretada los archivos de clase Java con programas Java creados mediante el mandato CRTJVAPGM y con OPTIMIZE(*INTERPRET). Los archivos de clase Java que necesitan crear un programa Java se crearn con el nivel de optimizacin especificado en el parmetro OPTIMIZE. Todos los archivos de clase Java se ejecutarn de forma interpretada independientemente del valor OPTIMIZE con el que se haya creado el programa Java asociado. Los archivos de clase Java que necesitan crear un programa Java se crearn con el nivel de optimizacin especificado en el parmetro OPTIMIZE. *JIT Todos los archivos de clase Java se ejecutan mediante el compilador Just-In-Time (JIT), independientemente del valor de OPTIMIZE utilizado al crear el programa Java asociado.
*YES
PROP El parmetro PROP especifica una lista de valores que deben asignarse a propiedades del sistema Java. Se pueden asignar 100 propiedades como mximo. El lmite para el parmetro PROP es de 5000 caracteres para nombre y valor.
Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java
89
*NONE No se especifica ninguna propiedad. Como nombre-propiedad, especifique el nombre de la propiedad que debe cambiarse. Como valor-propiedad, especifique el valor que se asignar a la propiedad.
GCHMAX El parmetro GCHMAX especifica la memoria, en kilobytes, que puede asignar como mximo la mquina virtual Java. Normalmente, conviene utilizar el valor por omisin o bien establecer un valor lo ms alto posible. No obstante, si le preocupa que un programa pueda utilizar toda la memoria disponible, puede establecer GCHMAX en un valor ms bajo. El valor por omisin depende del sistema y del modelo. Si la asignacin de memoria de la mquina virtual Java llega a GCHMAX, todas las dems hebras de la mquina virtual Java estarn detenidas mientras tiene lugar la recogida de basura. Si sta no puede reducir la asignacin de memoria, la mquina virtual Java se detiene. *NOMAX El almacenamiento dinmico de recogida de basura crecer hasta que desaparezcan todos los recursos del sistema. A continuacin, se iniciar una recogida de basura sncrona para reclamar los recursos que ya no se utilizan. Con *NOMAX, la recogida de basura sncrona se produce slo si se ha utilizado la totalidad del almacenamiento dinmico disponible.
GCHINL El parmetro GCHINL recomienda un valor umbral para la recogida de basura inicial. Si este valor es igual a GCHMAX, la recogida de basura no se ejecuta hasta que la memoria asignada por la mquina virtual Java se acerca a GCHMAX. Si se establece un valor ms pequeo, la recogida de basura se disparar antes. El valor por omisin depende del sistema y del modelo. GCFRQ Nota: ya no se da soporte a este parmetro. Existe nicamente por compatibilidad con los releases anteriores a la Versin 4 Release 3 Modificacin 0 del sistema AS/400. El parmetro GCFRQ sugiere una frecuencia de recogida de basura. En funcin del modelo y del release del sistema, es posible que se respete o no. Para GCFRQ, se permiten valores comprendidos entre 0 y 100. El parmetro por omisin es 50. Cuanto ms bajo sea el valor, menor ser la frecuencia de recogida de basura. Cuanto ms alto sea el valor, mayor ser la frecuencia de recogida de basura. GCPTY Nota: ya no se da soporte a este parmetro. Existe nicamente por compatibilidad con los releases anteriores a la Versin 4 Release 3 Modificacin 0 del sistema AS/400.
90
El parmetro GCPTY sugiere una prioridad de recogida de basura. En funcin del modelo y del release del sistema, es posible que se respete o no. El parmetro GCPTY especifica la prioridad relativa de las hebras que ejecutan la recogida de basura. La prioridad es relativa a las hebras Java de usuario por omisin. Cuanto ms alto sea el valor, ms alta ser la prioridad. Si una hebra de recogida de basura tiene una prioridad baja, la probabilidad de que se ejecute es menor porque se ejecutarn otras hebras de mayor prioridad. En la mayora de los casos, GCPTY debe definirse con el valor por omisin o con el valor de prioridad ms alto. Si se define GCPTY con el valor de prioridad ms bajo, puede inhibirse la recogida de basura y provocar la retencin de todas las hebras Java mientras el recogedor de basura libera almacenamiento. 20 El valor por omisin del parmetro es 20. Esto indica que la hebra de recogida de basura tiene la misma prioridad que las hebras Java de usuario por omisin. La prioridad 30 da a la recogida de basura una prioridad ms alta que la de las hebras Java de usuario por omisin. La recogida de basura tiene una probabilidad mayor de ejecutarse. La prioridad 10 da a la recogida de basura una prioridad ms baja que la de las hebras Java de usuario por omisin. La recogida de basura tiene una probabilidad menor de ejecutarse.
30
10
OPTION El parmetro OPTION especifica las opciones especiales que se utilizan al ejecutar una clase Java. *NONE No se utiliza ninguna opcin especial al ejecutar una clase Java. *DEBUG Permite la utilizacin del depurador del sistema AS/400 para el programa Java. *VERBOSE Se visualiza un mensaje cada vez que se carga un archivo de clase. *VERBOSEGC Se visualiza un mensaje por cada pase de la recogida de basura. *NOCLASSGC No se reclaman las clases no utilizadas cuando se ejecuta la recogida de basura.
En Ejemplo: utilizacin del mandato Ejecutar Java (RUNJVA) hallar un ejemplo en el que se utiliza el mandato RUNJVA.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
91
Nota:Todos los parmetros que preceden a este punto pueden especificarse por posicin. Propsito: El mandato Suprimir programa Java (DLTJVAPGM) suprime un programa Java de AS/400 asociado con un archivo de clase Java, un archivo ZIP o un archivo JAR. Si no hay ningn programa Java asociado con el archivo especificado, se enva el mensaje informativo JVAB526 y prosigue el proceso del mandato. Parmetros: CLSF El parmetro CLSF especifica el nombre del archivo de clase, ZIP o JAR del que debe suprimirse en AS/400 el programa Java asociado. El nombre del archivo de clase puede estar calificado por uno o varios nombres de directorio. Como nombre-archivo-clase, especifique el nombre del archivo de clase o un patrn que identifique el archivo o archivos que deben utilizarse. Puede especificar el patrn al final del nombre. Un asterisco equivale a un nmero cualquiera de caracteres y un signo de interrogacin equivale a un solo carcter. Si el nombre est calificado o contiene un patrn, debe ir entre apstrofos. Un ejemplo de nombre de clase calificado es:
'/directorio1/directorio2/nombremiclase.class'
SUBTREE El parmetro SUBTREE especifica si se procesan o no los subdirectorios cuando se busquen archivos que coincidan con la palabra clave CLSF. *NONE Slo se procesarn los archivos que coincidan con el patrn de
92
nombre de objeto. No se procesar ningn subrbol. Si el directorio tiene subdirectorios, no se procesarn ni los subdirectorios ni los objetos de los subdirectorios. *ALL Se procesa la totalidad del subrbol de la va de acceso especificada en CLSF a fin de crear programas Java para archivos que coincidan con el nombre especificado en el parmetro CLSF.
En Ejemplo: mandato Suprimir programa Java (DLTJVAPGM) hallar un ejemplo en el que se utiliza el mandato DLTJVAPGM.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Propsito: El mandato Volcar mquina virtual Java (DMPJVM) vuelca informacin acerca de la mquina virtual Java para un trabajo especificado. El vuelco incluye informacin formateada acerca de la va de acceso de clases, recogida de basura y hebras asociadas con la mquina virtual Java. Sintaxis:
Mandato DMPJVM (1) >>DMPJVM-..-> | .-*SRVJOB-. | '-JOB('-.-.nombre_trabajo-')-' '-.-.nombre_usuario/-' '-nmero_trabajo/-' >....>< | .-10-. | | .-*SELECT-. '-STACKFRAME(+-*ALL-+)-' '-DUPJOBOPT('-*MSG')-' '-nmero-'
93
Notas: Todos los parmetros que preceden a este punto pueden especificarse por posicin. Restricciones: v El mandato DMPJVM utiliza los mandatos Iniciar trabajo de servicio (STRSRVJOB) e Iniciar depuracin (STRDBG). El usuario de este mandato debe tener autorizacin sobre los mandatos STRSRVJOB y STRDBG. v El mandato DMPJVM se suministra con la autorizacin de uso pblico *EXECUTE, y los perfiles de usuario QPGMR, QSYSOPR, QSRV y QSRVBAS tienen autorizaciones privadas para utilizar el mandato DMPJVM. v El mandato DMPJVM debe ejecutarse bajo un perfil de usuario, que es el mismo que la identidad de usuario de trabajo del trabajo de la mquina virtual Java, o que tenga la autorizacin de uso (*USE) sobre la identidad de usuario de trabajo del trabajo de la mquina virtual Java. v El mandato DMPJVM no est permitido si se ha iniciado la operacin de servicio remoto para otro trabajo, y dicho trabajo no es el mismo que el especificado en este mandato. v El mandato DMPJVM no est permitido si el trabajo de la mquina virtual Java est retenido, suspendido o finalizando. Parmetros opcionales: JOB El parmetro JOB especifica el nombre del trabajo que en el que se est ejecutando la mquina virtual Java. Si no se suministra ningn nombre de trabajo, el nombre simple del trabajo se busca en todos los trabajos que se encuentran actualmente en el sistema. El nombre de trabajo especificado debe ser un trabajo en el que se est ejecutando actualmente una mquina virtual Java. *SRVJOB Se vuelca informacin acerca de la mquina virtual Java en el trabajo al que se est dando servicio actualmente. Si actualmente no se est dando servicio a ningn trabajo, es necesario un identificador de trabajo. Un identificador de trabajo es un nombre calificado con tres elementos como mximo. Por ejemplo: v nombre_trabajo v nombre_usuario/nombre_trabajo v nmero_trabajo/nombre_usuario/nombre_trabajo nombre_trabajo Especifica el nombre del trabajo de la mquina virtual Java. nombre_usuario Especifica el nombre de usuario del trabajo de la mquina virtual Java. nombre_trabajo Especifica el nmero del trabajo de la mquina virtual Java.
STACKFRAME El parmetro STACKFRAME especifica el nmero mximo de tramas de pila para cada hebra que debe procesarse. Este valor debe ser mayor que cero y no puede ser mayor que 100. Si existen ms tramas que el nmero
94
especificado en una pila de hebras, se procesan las tramas ms recientes de la pila y ... indica que no se han procesado todas las tramas de la pila. 10 *ALL Cada hebra procesa un mximo de diez tramas de pila. Cada hebra procesa todas las tramas de pila. Ai una hebra tiene ms de 100 tramas de pila, slo se procesan las 100 primeras tramas. El nmero mximo (1-100) de tramas de pila que procesa la hebra.
nmero
DUPJOBOPT Especifica la accin que debe realizarse cuando el mandato DMPJVM encuentra trabajos duplicados. *SELECT Cuando el mandato DMPJVM encuentra trabajos duplicados durante una sesin interactiva, se muestra la pantalla de seleccin. De lo contrario, se emite un mensaje de escape. *MSG Cuando el mandato DMPJVM encuentra trabajos duplicados, se emite un mensaje de escape.
Consulte el apartado Ejemplo: mandato Volcar mquina virtual Java (DMPJVM) para obtener un ejemplo de utilizacin del mandato DMPJVM.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
El mandato DMPJVM vuelca la informacin de la mquina virtual Java que se est ejecutando en el trabajo denominado 099246/FRED/QJVACMDSRV. Salida del ejemplo:
INFORMACIN DE MQUINA VIRTUAL JAVA: 099246/FRED/QJVACMDSRV ...................................................................... . Va de acceso de clases ...................................................................... /QIBM/ProdData/Java400/jdk117/lib/jdkptf117.zip:/QIBM/ProdData/Java400/jdk1 17/lib/classes.zip:/QIBM/ProdData/Java400/ext/IBMmisc.jar:/QIBM/ProdData/Ja va400/ext/db2_classes.jar:/QIBM/ProdData/Java400/ext/jssl.jar:/QIBM/ProdDat a/Java400/ext/ibmjssl.jar:/QIBM/ProdData/Java400/:/home/fred ...................................................................... . Recogida de basura ...................................................................... Parmetros del recogedor de basura Tamao inicial: 2048 K Tamao mximo: *NOMAX Valores actuales Tamao de almacenamiento dinmico: 9476 K
Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java
95
Recogidas de basura: 0 ...................................................................... . Informacin de hebras ...................................................................... Informacin para 3 hebra(s) de 3 hebra(s) procesadas Hebra: 00000001 Hebra-0 TDE: B000200002941000 Prioridad de hebra: 5 Estado de hebra: Destruccin en espera Grupo de hebra: principal Ejecutable: java/lang/Thread Pila: Ninguna Bloqueos: Ninguno ...................................................................... Hebra: 00000003 t2 TDE: B000100005B37000 Prioridad de hebra: 5 Estado de hebra: En espera Grupo de hebra: principal Ejecutable: dbgtest2 Pila: java/io/BufferedInputStream.read()I+11 (BufferedInputStream.java:154) pressEnter.theFirstMethod(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String ava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava tring;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Stri 0 (dbgtest2.java:15) dbgtest2.run()V+69 (dbgtest2.java:44) java/lang/Thread.run()V+11 (Thread.java:466) Bloqueos: Ninguno ...................................................................... Hebra: 00000002 t1 TDE: B000100005B33000 Prioridad de hebra: 5 Estado de hebra: Espera Java Grupo de hebra: principal Ejecutable: dbgtest2 Pila: pressEnter.theFirstMethod(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String ava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava tring;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Stri (dbgtest2.java:14) dbgtest2.run()V+69 (dbgtest2.java:44) java/lang/Thread.run()V+11 (Thread.java:466) Bloqueos: Ninguno ......................................................................
96
Nota: Todos los parmetros que preceden a este punto pueden especificarse por posicin. Propsito: El mandato Visualizar programa Java (DSPJVAPGM) visualiza en AS/400 informacin sobre un programa Java. La informacin incluye los atributos de creacin y proceso como, por ejemplo, el nivel de optimizacin y el tamao. Parmetros: CLSF El parmetro CLSF especifica el nombre del archivo de clase, ZIP o JAR del que debe visualizarse en el AS/400 el programa Java asociado. El nombre del archivo de clase puede estar calificado por uno o varios nombres de directorio. Como nombre-archivo-clase, especifique el nombre del archivo de clase, ZIP o JAR. Un ejemplo de nombre de clase calificado es:
'/directorio1/directorio2/nombremiclase.class'
OUTPUT El parmetro OUTPUT especifica a dnde debe enviarse la salida. * La salida solicitada por un trabajo interactivo se muestra en la pantalla. La salida solicitada por un trabajo de proceso por lotes se imprime con la salida en spool del trabajo.
Ejemplo de pantalla: Este ejemplo de pantalla muestra el aspecto que tiene la salida de Visualizar programa Java (DSPJVAPGM) para un archivo ZIP.
++ Visualizar informacin de programa Java Nombre de archivo . . . . . . . . . . . : /usuario/clases.zip1 Propietario . . . . . . . . . . . . . . : USER2 Informacin de creacin de programa Java: Fecha/hora de cambio de archivo . . . . . . . . : 18/07/98 09:03:373 Fecha/hora de creacin de programa Java . . . . : 18/07/98 14:03:384 Programas Java . . . . . . . . . . . . . . . . : 15 Clases con programas Java actuales . . . . . . : 16 Clases sin programas Java actuales . . . . . . : 07 Optimizacin . . . . . . . . . . . . . . . . . : *INTERPRET8 Habilitar recogida de rendimiento . . . . . . . : *NONE9 Utilizar autorizacin adoptada . . . . . . . . : *NO10 Perfil de usuario . . . . . . . . . . . . . . . : *USER11 Opciones de Cdigo Interno bajo Licencia . . . : ErrorReporting=012 Estadsticas de programa Java: Tamao de programa Java . . . . . . . . . . . . : 270745613 Release de programa . . . . . . . . . . . . . . : V4R5M014 Final Pulse Intro para continuar. ++
1. Nombre de archivo: nombre del archivo que tiene conectado un programa Java. Nota: debe tener autorizacin *USE sobre el archivo de clase cuyo programa Java se ha de visualizar.
Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java
97
2. Propietario: nombre del perfil de usuario que es propietario del programa Java. 3. Fecha/hora de cambio de archivo: fecha y hora en que se ha modificado por ltima vez el archivo. 4. Fecha/hora de creacin de programa Java: si se trata de un archivo ZIP, es la fecha y la hora en que se ha conectado el primer programa Java con el archivo. Si se trata de un archivo de clase, es la fecha y la hora en que se ha creado el programa Java. 5. Programas Java: indica el nmero de programas Java que estn asociados con el archivo. Nota: si se desea conseguir el mejor rendimiento posible, el nmero de programas Java debe ser bajo (1 2). El nmero de programas Java ser alto si stos se han creado de forma implcita. Esto sucede cuando se ejecuta un programa Java y las clases del archivo JAR se han cargado antes de ejecutarse el mandato Crear programa Java (CRTJVAPGM) en el archivo JAR. Si el nmero de programas Java es alto, tal vez le interese utilizar la funcin CHGJVAPGM MERGE(*YES) para consolidar los programas y mejorar el rendimiento del cargador de clases. Si el nmero de clases es bajo y el nmero de programas Java es alto, la razn puede ser que se hayan realizado varios cambios en las clases del archivo JAR. Tambin en este caso, puede utilizar el mandato CRTJVAPGM o CHGJVAPGM para consolidar los programas. 6. Clases con programas Java actuales: indica el nmero de clases del archivo que tienen programas Java actuales. 7. Clases sin programas Java actuales: indica el nmero de clases del archivo que no tienen programas Java actuales. Nota: si se desea conseguir el mejor rendimiento posible, el nmero de clases sin programas Java actuales debe ser bajo. Si el nmero de clases sin programas Java actuales es alto, tal vez le interese utilizar el mandato CRTJVAPGM para actualizar el programa. 8. Optimizacin: especifica el nivel de optimizacin del programa Java de AS/400. Si es OPTIMIZE(*INTERPRET), el programa Java resultante interpreta los bytecodes del archivo de clase al iniciarse. Si se trata del uno de los niveles de actualizacin restantes, el programa Java contiene secuencias de instrucciones de lenguaje mquina que se ejecutan al iniciarse el programa Java. Los programas Java que utilizan OPTIMIZE(*INTERPRET) son de menor tamao, pero se ejecutan con ms lentitud que los programas Java creados con un nivel de optimizacin superior. A medida que se incrementa el nivel de optimizacin por encima de 10, el rendimiento del programa Java normalmente mejora. No obstante, el tiempo que se necesita para crear el programa Java aumenta y la depuracin resulta ms difcil. La lista siguiente muestra en qu se diferencian los niveles de optimizacin y en qu consisten: 10 El programa Java contiene una versin compilada de los bytecodes del archivo de clase, pero la optimizacin adicional de compilador que experimenta es mnima. Durante la depuracin, se pueden visualizar y cambiar las variables. El programa Java contiene una versin compilada de los bytecodes del archivo de clase y experimenta una optimizacin adicional de compilador. Durante la depuracin, se pueden visualizar las variables, pero no se pueden cambiar. El programa Java contiene una versin compilada de los bytecodes del archivo de clase y experimenta una optimizacin de compilador superior a la del nivel de optimizacin 20. La depuracin resulta ms
20
30
98
difcil en los niveles superiores de optimizacin porque sta reduce la capacidad de detenerse en puntos concretos del cdigo y visualizar las variables del programa. Durante la depuracin, se pueden visualizar las variables, pero no se pueden cambiar. Los valores que se presentan pueden no ser el valor actual de la variable. 40 El programa Java contiene una versin compilada de los bytecodes del archivo de clase y experimenta una optimizacin de compilador superior a la del nivel de optimizacin 30. Adems, incluye una optimizacin que inhabilita el rastreo de las instrucciones y las llamadas. Nota: si el programa Java no se optimiza o bien lanza una excepcin en el nivel de optimizacin 40, utilice el nivel de optimizacin 30.
*INTERPRET El programa Java no se optimiza. Al iniciarse, el programa Java interpreta los bytecodes del archivo de clase. Durante la depuracin, se pueden visualizar y cambiar las variables. 9. Habilitar recogida de rendimiento: es el nivel de recogida de datos de rendimiento que est permitido al programa Java. Los valores devueltos pueden ser: *NONE La recogida de rendimiento no est habilitada para el programa Java. *ENTRYEXIT Facilita informacin sobre las entradas y las salidas de todos los procedimientos del programa Java, incluidos los que han sido procedimientos hoja. Esto incluye tambin la rutina PEP. *ENTRYEXIT resulta til para capturar informacin referente a todos los procedimientos. *FULL Facilita informacin sobre las entradas y las salidas de todos los procedimientos del programa Java, incluidos los que han sido procedimientos hoja. as como tambin los ganchos de prellamada y postllamada relativos a las llamadas a otros procedimientos. *FULL resulta til para capturar informacin referente a todos los procedimientos. 10. Utilizar autorizacin adoptada: indica si los programas Java utilizan la autorizacin adoptada procedente de los niveles de llamadas anteriores de la pila. 11. Perfil de usuario: indica si la comprobacin de autorizacin realizada mientras se ejecuta el programa debe incluir nicamente al usuario que est ejecutando el programa (*USER) o bien a dicho usuario y al propietario del programa (*OWNER). 12. Opciones de Cdigo Interno bajo Licencia: Las opciones de compilacin del cdigo interno bajo licencia (LIC) seleccionadas que se utilizan al crear el programa Java. 13. Tamao de programa Java: El tamao, en bytes, de los programas Java conectados al archivo. 14. Release de programa: El release del sistema operativo para el que se ha creado el objeto. En Ejemplo: mandato Visualizar programa Java (DSPJVAPGM) hallar un ejemplo en el que se utiliza el mandato DSPJVAPGM.
Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java
99
En El mandato Visualizar programa Java (DSPJVAPGM) hallar el diagrama de sintaxis e informacin detallada sobre los parmetros.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
100
programa Java de AS/400 que est asociado con el archivo de clase. Si no hay ningn programa Java de AS/400 asociado todava con el archivo de clase, se crear antes de ejecutar el programa. Si selecciona Suprimir programa Java en el men de contexto, se suprimir el programa Java de AS/400 que est asociado con el archivo de clase. Si desea saber cules son los parmetros y las opciones de los mandatos Programa Java nuevo, Cambiar programa Java, Ejecutar programa Java y Suprimir programa Java de Operations Navigator, consulte la informacin de ayuda en lnea.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
101
102
103
Nota: la utilizacin de Runtime.exec(), AS/400 Toolbox para Java o JNI puede poner en peligro la portabilidad del programa Java. Debe evitar el uso de estos mtodos en un entorno Java puro. Java Invocation API: La utilizacin de Java Invocation API, que forma parte tambin de la especificacin Java Native Interface (JNI), permite que una aplicacin no Java utilice la mquina virtual Java. Tambin permite utilizar cdigo Java como ampliacin de la aplicacin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
104
a. Incluya el archivo de cabecera creado en los pasos anteriores. b. Correlacione de manera exacta los prototipos del archivo de cabecera. c. Convierta las series al formato ASCII si se han de pasar a la mquina virtual Java. En Codificaciones de caracteres Java hallar ms informacin. 7. Si el mtodo nativo ha de interactuar con la mquina virtual Java, utilice las funciones que se proporcionan con JNI. 8. Compile el cdigo fuente C con CRTCMOD para obtener un objeto de mdulo (*MOD). 9. Enlace uno o varios objetos de mdulo para crear un programa de servicio (*SRVPGM); para ello, utilice el mandato Crear programa de servicio (CRTSRVPGM). El nombre de este programa de servicio debe coincidir con el nombre que ha proporcionado en el cdigo Java que se halla en las llamadas a funcin System.load() o System.loadLibrary(). 10. Si ha utilizado la llamada System.loadLibrary() en el cdigo Java, realice una de las siguientes acciones. Si est utilizando una versin anterior a J2SDK: Aada la biblioteca de AS/400 que contiene el nuevo programa de servicio a la lista de bibliotecas de AS/400. Para ello, utilice el mandato Aadir entrada de lista de bibliotecas (ADDLIBLE). Esto permitir al programa Java buscar el programa de servicio cuando procese la funcin System.loadLibrary(). Si est utilizando J2SDK: No es necesario modificar la lista de bibliotecas. En lugar de ello, puede: v Incluir la lista de bibliotecas necesarias en la variable de entorno LIBPATH. Puede modificar la variable de entorno LIBPATH en QShell y desde la lnea de mandatos de AS/400. En el indicador de mandatos de Qshell, escriba: export LIBPATH=/QSYS.LIB/MYLIB.LIB java -Djava.version=1.2 myclass O, en la lnea de mandatos: ADDENVVAR LIBPATH /QSYS.LIB/MYLIB.LIB JAVA PROP((java.version 1.2)) myclass v O suministre la lista en la propiedad java.library.path. Puede modificar la propiedad java.library.path en QShell y desde la lnea de mandatos de AS/400. En el indicador de mandatos de Qshell, escriba: java -Deja.library.path=/QSYS.LIB/MYLIB.LIB -Djava.version=1.2 myclass O, en la lnea de mandatos de AS/400, escriba: JAVA PROP((java.library.path /QSYS.LIB/MYLIB.LIB) (java.version 1.2)) myclass Donde /QSYS.LIB/MYLIB.LIB es la biblioteca que desea cargar utilizando la llamada System.loadLibrary(), y myclass es el nombre de la aplicacin Java. 11. La sintaxis de va de acceso de System.load(String nombreva) puede ser: v va de acceso (nombre de archivo del sistema de archivos integrado que especifica la biblioteca que el programa de servicio proporciona), que es un enlace simblico con un programa de servicio (*SRVPGM) como, por ejemplo, /qsys.lib/mylib.lib/myNMsp.srvpgm
Captulo 5. Utilizacin de Java con otros lenguajes de programacin
105
v /qsys.lib/sysNMsp.srvpgm v /qsys.lib/mylib.lib/myNMsp.srvpgm v Si tiene una versin anterior a J2SDK: /qsys.lib/%libl%.lib/myNMsp.srvpgm Nota: esto equivale a utilizar el mtodo System.loadLibrary(myNMsp). Nota: si se utiliza nombreva como literal de tipo serie, debe ir entre comillas. Por ejemplo, System.load(/qsys.lib/mylib.lib/myNMsp.srvpgm). 12. La sintaxis de libya de System.loadLibrary(String libya) es mysp. El sistema busca mysp utilizando *LIBL. Por ejemplo, loadLibrary(myNMsp) equivale a System.load(/qsys.lib/%libl%.lib/myNMsp.srvpgm). Si se utiliza nombreva como literal de tipo serie, nombrebib debe ir entre comillas. Nota: La sintaxis %libl% no est soportada para J2SDK. Para obtener una descripcin completa de JNI, consulte Java Native Interface by Sun Microsystems, Inc. y The Source for Java Technology java.sun.com. En Ejemplos: utilizacin de Java Native Interface para emplear mtodos nativos hallar un ejemplo de cmo utilizar JNI para mtodos nativos.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
106
indica la excepcin AS/400 MCH74A5 de AS/400, Mquina virtual Java terminada, a la hebra inicial del proceso si dicha hebra estaba conectada a la mquina virtual Java en el momento de finalizar sta. La mquina virtual Java podra finalizar anormalmente por cualquiera de las razones siguientes: El usuario llama al mtodo java.lang.System.exit(). Finaliza una hebra que la mquina virtual Java necesita. Se produce un error interno en la mquina virtual Java. Este comportamiento es distinto al de la mayora de las plataformas Java. En ellas, el proceso que crea automticamente la mquina virtual Java finaliza de manera brusca tan pronto como finaliza la mquina virtual Java. Si la aplicacin supervisa y maneja una excepcin MCH74A5 indicada, puede seguir ejecutndose. De lo contrario, el proceso finaliza si la excepcin queda sin manejar. Si se aade el cdigo que se encarga de la excepcin MCH74A5, que es especfica de AS/400, el grado de portabilidad de la aplicacin a otras plataformas puede verse mermado. Dado que los mtodos nativos se ejecutan siempre en un proceso multihebra, el cdigo que contienen debe ser seguro en ejecucin multihebra. Este hecho impone las restricciones indicadas a continuacin a los lenguajes y las funciones utilizados para emplear los mtodos nativos: v No se debe utilizar ILE CL para mtodos nativos, ya que este lenguaje no es seguro en ejecucin multihebra. Para ejecutar mandatos CL seguros en ejecucin multihebra, puede utilizar la funcin system() del lenguaje C o el mtodo java.lang.Runtime.exec(). Para ejecutar mandatos CL seguros en ejecucin multihebra desde un mtodo nativo C o C++, utilice la funcin system() del lenguaje C. Para ejecutar mandatos CL seguros en ejecucin multihebra directamente desde Java, utilice el mtodo java.lang.Runtime.exec(). v Se puede utilizar ILE C, ILE C++, ILE COBOL e ILE RPG para escribir un mtodo nativo, pero todas las funciones a las que se llame desde dentro del mtodo nativo deben ser seguras en ejecucin multihebra. Nota: el soporte en tiempo de compilacin para escribir mtodos nativos slo se proporciona actualmente en los lenguajes C y C++. Escribir mtodos nativos en otros lenguajes, si bien es posible, puede resultar mucho ms complicado. Atencin: No todas las funciones estndar C, C++, COBOL o RPG son seguras en ejecucin multihebra. v Las funciones exit() y abort() de C y C++ no deben utilizarse nunca dentro de un mtodo nativo. Estas funciones provocan la detencin de todo el proceso que se ejecuta en la mquina virtual Java. Esto incluye todas las hebras del proceso, con independencia de si son originarias de Java o no. Nota: la funcin exit() a la que se hace referencia es la funcin de C y C++, y no es igual que el mtodo java.lang.Runtime.exit(). Si desea obtener ms informacin acerca de las hebras en AS/400, consulte el tema dedicado al desarrollo de aplicaciones multihebra..
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
107
acepta un parmetro de tipo serie que especifique el nombre totalmente calificado de un archivo de clase. Si se encuentra el archivo de clase, lo cargar FindClass y se devolver una referencia al mismo al llamador de FindClass. Todas las funciones de JNI esperan que los parmetros de tipo serie estn codificados en UTF-8. Si desea obtener informacin ms detallada sobre UTF-8, puede consultar la especificacin JNI, pero en la mayora de los casos basta con tener presente que los caracteres ASCII de 7 bits son equivalentes a la representacin UTF-8. Los caracteres ASCII de 7 bits son realmente caracteres de 8 bits, pero su primer bit es siempre 0. Por tanto, la mayor parte de las series ASCII C ya se encuentran realmente en UTF-8. El compilador C del sistema AS/400 funciona en EBCDIC (cdigo de intercambio decimal ampliado codificado en binario) por omisin, por lo que se pueden proporcionar series en UTF-8 a las funciones de JNI. Existen dos maneras de hacerlo. Se pueden utilizar series literales o bien series dinmicas. Las series literales son aquellas cuyo valor es conocido en el momento de compilar el cdigo fuente. Las series dinmicas son aquellas cuyo valor no es conocido en tiempo de compilacin sino que se calcula en tiempo de ejecucin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
La primera sentencia pragma, con el nmero 819, informa al compilador que debe almacenar todas las series entrecomilladas posteriores (series literales) en formato ASCII. La segunda sentencia pragma, con el nmero 0, indica al compilador que para las series entrecomilladas debe volver a la pgina de cdigos por omisin del compilador, que es normalmente la pgina de cdigos EBCDIC 37. As, incluyendo la llamada entre sentencias pragma, se cumple el requisito de JNI de que todos los parmetros estn codificados en UTF-8. Atencin: tenga cuidado con las sustituciones de texto. Por ejemplo, si el cdigo es:
#pragma #define #pragma myClass convert (819) MyString java/lang/String convert (0) = (*env)->FindClass(env,MyString);
108
La serie resultante es EBCDIC porque durante la compilacin se sustituye el valor de MyString en la llamada a FindClass. En el momento de producirse esta sustitucin, la sentencia pragma nmero 819 no ha entrado en vigor. Por tanto, las series literales no se almacenan en ASCII.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
109
} // Aqu est el cdigo 'principal' de la clase. Es lo que se ejecuta // al entrar 'java NativeHello' en la lnea de mandatos. public static void main(String argv[]){ // Se asigna un objeto NativeHello nuevo. NativeHello nh = new NativeHello(); // Se hace eco de la ubicacin. System.out.println((Java) Instantiated NativeHello object); System.out.println((Java) string field is ' + nh.theString + '); System.out.println((Java) Calling native method to set the string); // Aqu est la llamada al mtodo nativo. nh.setTheString(); // Ahora, se imprime el valor tras la llamada para mayor seguridad System.out.println((Java) Returned from the native method); System.out.println((Java) string field is ' + nh.theString + '); System.out.println((Java) All done...); }
try { // System.loadLibrary utiliza la lista de bibliotecas de AS/400 en JDK.1 // y utiliza la propiedad java.library.path o la variable de entorno // LIBPATH en JDK1.2 System.loadLibrary(NATHELLO); } catch (UnsatisfiedLinkError e1) { // No se ha encontrado el programa de servicio. System.out.println (I did not find NATHELLO *SRVPGM.); System.out.println ((I will try a hardcoded path)); try { // System.load toma el formato completo de la va de acceso del // sistema de archivos integrado. System.load (/qsys.lib/jniexample.lib/nathello.srvpgm); } catch (UnsatisfiedLinkError e2) { // Si se llega a este punto, ya se ha acabado todo. Se graba el // mensaje y se sale. System.out.println (<sigh> I did not find NATHELLO *SRVPGM anywhere. Goodbye); System.exit(1); } }
Este ejemplo NativeHello.c muestra la implementacin del mtodo nativo en C, as como la manera de enlazar Java con los mtodos nativos. No obstante, tambin
110
seala las complicaciones que surgen del hecho que AS/400 es internamente una mquina EBCDIC (cdigo de intercambio decimal ampliado codificado en binario). Asimismo, indica las complicaciones derivadas de la falta de verdaderos elementos de internacionalizacin en JNI. Estas razones, aunque no son una novedad en JNI, originan diversas diferencias exclusivas de AS/400 en el cdigo C que se escribe. Conviene recordar que si se graba en stdout o stderr o bien si se lee de stdin, probablemente los datos estarn codificados en formato EBCDIC. En cdigo C, resulta fcil convertir la mayora de las series literales, aquellas que contienen nicamente caracteres de 7 bits, al formato UTF-8 que requiere JNI. Para ello, hay que incluir las series literales entre sentencias pragma de conversin de pgina de cdigos. No obstante, dado que es posible que se grabe informacin directamente en stdout o stderr desde el cdigo C, podra permitirse que algunos literales conservasen el formato EBCDIC. Nota: las sentencias #pragma convert(0) convierten los datos de tipo carcter a EBCDIC. Las sentencias #pragma convert(819) convierten los datos de tipo carcter a ASCII. Estas sentencias realizan la conversin de los datos de tipo carcter del programa C en tiempo de compilacin. Ejemplo 3: implementacin del mtodo nativo NativeHello.c realizada por la clase Java NativeHello
#include <stdlib.h> /* malloc, free, etc. */ #include <stdio.h> /* fprintf(), etc. */ #include <qtqiconv.H> /* interfaz iconv() */ #include <string.h> /* memset(), etc. */ #include NativeHello.h /* generado por 'javah-jni' */ /* La pgina de cdigos de todas las series literales es la ISO-8859-1 Latin 1 (y en el caso de los caracteres de 7 bits, el formato es automticamente UTF-8 tambin). */ #pragma convert(819) /* se manejan todas las series literales como ASCII */ /* Se notifica y se borra una excepcin de JNI. */ static void HandleError(JNIEnv*); /* Se imprime una serie UTF-8 en stderr con CCSID del trabajo actual. */ static void JobPrint(JNIEnv*, char*); /* Constantes que indican en qu direccin debe realizarse la conversin: */ #define CONV_UTF2JOB 1 #define CONV_JOB2UTF 2 /* Se convierte una serie del CCSID del trabajo a UTF-8 o viceversa. */ int StringConvert(int direction, char *sourceStr, char *targetStr); /* Implementacin de mtodo nativo de 'setTheString()'. */ JNIEXPORT void JNICALL Java_NativeHello_setTheString (JNIEnv *env, jobject javaThis) { jclass thisClass; /* clase del objeto 'this' */ jstring stringObject; /* serie nueva; se colocar en un campo de 'this' */ jfieldID fid; /* ID de campo necesario para actualizar campo de 'this' */ jthrowable exception; /* excepcin; se recupera con ExceptionOccurred */ /* Se graba el estado en la consola. */ JobPrint(env, ( C ) In the native method\n); /* Se construye el nuevo objeto de tipo serie */ if (! (stringObject = (*env)->NewStringUTF(env, Hello, native world!))) { /* Para casi todas las funciones de JNI, un valor de retorno nulo indica que ha habido un error y que se ha colocado una excepcin en un punto en que 'ExceptionOccurred()' puede recuperarla. En este caso, el error sera normalmente muy grave, pero a efectos de este ejemplo, se sigue adelante y se captura el error y despus se continua. */ HandleError(env); return;
Captulo 5. Utilizacin de Java con otros lenguajes de programacin
111
} static void HandleError(JNIEnv *env) { /* Rutina sencilla para notificar y manejar una excepcin. */ JobPrint(env, ( C ) Error occurred on JNI call: ); (*env)->ExceptionDescribe(env); /* se graban los datos de la excepcin en la consola */ (*env)->ExceptionClear(env); /* se borra la excepcin pendiente */ } static void JobPrint(JNIEnv *env, char *str) { char *jobStr; char buf[512]; size_t len; len = strlen(str); /* Slo se imprime la serie no vaca. */ if (len) { jobStr = (len >= 512) ? malloc(len+1) : &buf; if (! StringConvert(CONV_UTF2JOB, str, jobStr)) (*env)->FatalError (env,ERROR in JobPrint: Unable to convert UTF2JOB); fprintf(stderr, jobStr); if (len >= 512) free(jobStr); } } int StringConvert(int direction, char *sourceStr, char *targetStr) { QtqCode_T source, target; /* parmetros para instanciar iconv */ size_t sStrLen, tStrLen; /* copias locales de las longitudes de serie */
} /* se obtiene la clase del objeto 'this', requisito para obtener fieldID if (! (thisClass = (*env)->GetObjectClass(env,javaThis))) { /* Si GetObjectClass devuelve una clase nula, significa que ha habido un problema. En lugar de manejarlo, basta con usar return y saber que el retorno a Java 'lanza' automticamente la excepcin Java almacenada. */ return; } /* Se obtiene fieldID para la actualizacin. */ if (! (fid = (*env)->GetFieldID(env, thisClass, theString, Ljava/lang/String;))) { /* Si GetFieldID devuelve un fieldID nulo, significa que ha habido un problema. Hay que notificarlo desde aqu y borrarlo. No hay que modificar la serie. */ HandleError(env); return; } JobPrint(env, ( C ) Setting the field\n); /* Se realiza la actualizacin propiamente dicha. Nota: SetObjectField es un ejemplo de interfaz que no devuelve un valor de retorno que pueda probarse. En este caso, resulta necesario llamar a ExceptionOccurred() para ver si ha habido un problema con el almacenamiento del valor */ (*env)->SetObjectField(env, javaThis, fid, stringObject); /* Se comprueba si la actualizacin ha sido satisfactoria. Si no lo ha sido, se notifica el error. */ if ((*env)->ExceptionOccurred(env)) { /* Se ha devuelto un objeto de tipo excepcin no nulo desde ExceptionOccurred; as pues, hay un problema y debe notificarse el error. */ HandleError(env); } JobPrint(env, ( C ) Returning from the native method\n); return;
*/
112
} #pragma convert(0)
iconv_t ourConverter; /* descriptor de conversin propiamente dicho int iconvRC; /* cdigo de retorno de la conversin size_t originalLen; /* longitud original de sourceStr /* Se realizan copias locales de los tamaos de entrada y salida que se inicializan segn el tamao de la serie de entrada. iconv() requiere que los parmetros de longitud se pasen por direccin (es decir, como int*). */ originalLen = sStrLen = tStrLen = strlen(sourceStr); /* Se inicializan los parmetros de QtqIconvOpen() a cero. */ memset(&source,0x00,sizeof(source)); memset(&target,0x00,sizeof(target)); /* En funcin del parmetro direction, se establece el CCSID ORIGEN (source) o DESTINO (target) en ISO 8859-1 Latin. */ if (CONV_UTF2JOB == direction ) { source.CCSID = 819; } else { target.CCSID = 819; } /* Se crea el objeto iconv_t converter. */ ourConverter = QtqIconvOpen(&target,&source); /* Se comprueba que el convertidor es vlido; si no es as, se devuelve 0. if (-1 == ourConverter.return_value) return 0; /* Se realiza la conversin. */ iconvRC = iconv(ourConverter, (char**) &sourceStr, &sStrLen, &targetStr, &tStrLen); /* Si la conversin falla, se devuelve un cero. */ if (0 != iconvRC ) return 0; /* Se cierra el descriptor de conversin. */ iconv_close(ourConverter); /* Se devuelve targetStr sealando al carcter que est justo detrs del ltimo carcter convertido; as pues, se establece el terminador nulo aqu y ahora. */ *targetStr = '\0'; /* Se devuelve el nmero de caracteres procesados. */ return originalLen-tStrLen;
*/ */ */
*/
En Utilizacin de Java Native Interface para emplear mtodos nativos hallar la informacin previa necesaria.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Utilizacin de java.lang.Runtime.exec()
El mtodo java.lang.Runtime.exec() llama a programas o mandatos desde dentro de un programa Java. El proceso real que tiene lugar depende de qu informacin exactamente se pasa al mtodo exec(). En todos los casos, el mtodo Runtime.exec() crea otro trabajo inmediato de proceso por lotes (BCI) habilitado para hebras. El trabajo BCI procesa la serie de mandato pasada en el mtodo Runtime.exec(). Para utilizar el mtodo java.lang.Runtime.exec(), debe instalar el intrprete de Qshell en el AS/400. Para obtener ms informacin sobre el intrprete de Qshell, consulte el apartado Intrprete de Qshell. Nota: el mtodo java.lang.Runtime.exec() ejecuta los programas en un proceso aparte. Esto difiere de la funcin de sistema C, que ejecuta un programa en el mismo proceso.
Captulo 5. Utilizacin de Java con otros lenguajes de programacin
113
PROGRAMA CL
Lote trabajo 1 inmediato Qshell Cdigo de aplicacin de mquina virtual Java (clase Exec) Hebra x Recolector de desechos Hebra y
M A N D ATO CL
RV4N309-5
Si el mandato que se procesa es un programa de utilidad de Qshell, se ejecuta en el segundo trabajo BCI y no se crea el tercer trabajo BCI. Si el mandato que se procesa es un mandato CL, se inicia el segundo trabajo BCI para ejecutar Qshell y tambin el tercer trabajo BCI para ejecutar el mandato CL. Los programas de utilidad de Qshell son programas de utilidad incorporados que QSH puede ejecutar de manera directa. Un ejemplo de programa de utilidad de Qshell es el mandato javac, que compila programas Java. El proceso del segundo (o el tercer) trabajo BCI se ejecuta concurrentemente con la mquina virtual Java. Cualquier proceso de salida o conclusin que tenga lugar en dichos trabajos no afecta a la mquina virtual Java original. Cuando llame a un programa o mandato de AS/400, debe asegurarse de que la pgina de cdigos de los parmetros que se pasan al programa llamado es la que espera dicho programa. Consulte los apartados llamar a otro programa Java, llamar a un programa CL o llamar a un mandato CL para obtener ejemplos de java.lang.Runtime.exec().
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
114
public static void main(String args[]) { Process theProcess = null; BufferedReader inStream = null; System.out.println(CallHelloPgm.main() invoked); // se llama a la clase Hello try { theProcess = Runtime.getRuntime().exec(java com.ibm.as400.system.Hello); } catch(IOException e) { System.err.println(Error on exec() method); e.printStackTrace(); } // se lee en la corriente de salida estndar del programa llamado try { inStream = new BufferedReader( new InputStreamReader( theProcess.getInputStream() )); System.out.println(inStream.readLine()); } catch(IOException e) { System.err.println(Error on inStream.readLine()); e.printStackTrace(); } } // fin del mtodo } // fin de la clase
115
} catch(IOException e) { System.err.println(Error on exec() method); e.printStackTrace(); } } // fin del mtodo main() } // fin de la clase
import java.io.*; public class CallCLCom { public static void main(String[] args) { try { Process theProcess = Runtime.getRuntime().exec(system \DSPJVAPGM CLSF('/com/ibm/as400/system/Hello.clas } catch(IOException e) { System.err.println(Error on exec() method); e.printStackTrace(); } } // fin del mtodo main() } // fin de la clase
116
117
118
} } // fin de try catch(IOException e) { System.err.println(Error in cleanup); e.printStackTrace(); System.exit(-1); } } // fin del mtodo cleanUp() } // fin de la clase TalkToC
SockServ.C se inicia pasando un parmetro correspondiente al nmero de puerto. Por ejemplo, CALL SockServ 2001. Ejemplo 2: programa servidor SockServ.C
#include <stdlib.h> #include <stdio.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/tcp.h> #include <unistd.h> #include <sys/time.h> void main(int argc, char* argv[]) { int portNum = atoi(argv[1]); int server; int client; int address_len; int sendrc; int bndrc; char* greeting; struct sockaddr_in local_Address; address_len = sizeof(local_Address); memset(&local_Address,0x00,sizeof(local_Address)); local_Address.sin_family = AF_INET; local_Address.sin_port = htons(portNum); local_Address.sin_addr.s_addr = htonl(INADDR_ANY); #pragma convert (819) greeting = This is a message from the C socket server.; #pragma convert (0) /* se asigna el socket */ if((server = socket(AF_INET, SOCK_STREAM, 0))<0) { printf(failure on socket allocation\n); perror(NULL); exit(-1); } /* se realiza la operacin bind */ if((bndrc=bind(server,(struct sockaddr*)&local_Address, address_len))<0) { printf(Bind failed\n); perror(NULL); exit(-1); } /* se invoca a listen */ listen(server, 1); /* se espera a la peticin del cliente */ if((client = accept(server,(struct sockaddr*)NULL, 0))<0) { printf(accept failed\n); perror(NULL); exit(-1); } /* se enva greeting al cliente */
Captulo 5. Utilizacin de Java con otros lenguajes de programacin
119
if((sendrc = send(client, greeting, strlen(greeting),0))<0) { printf(Send failed\n); perror(NULL); exit(-1); } close(client); close(server);
120
} catch(IOException e) { System.err.println(Error on exec() method); e.printStackTrace(); } // se lee en la corriente de salida estndar del programa llamado try { inStream = new BufferedReader(new InputStreamReader (theProcess.getInputStream())); System.out.println(inStream.readLine()); } catch(IOException e) { System.err.println(Error on inStream.readLine()); e.printStackTrace(); } } // fin del mtodo } // fin de la clase
Para obtener ms informacin, consulte el apartado Utilizacin de corrientes de entrada y de salida para comunicacin entre procesos.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
121
Para obtener ejemplos de cmo llamar al programa Java Hello en C o RPG, consulte los apartados Ejemplo: llamar a Java desde C o Ejemplo: llamar a Java desde RPG, respectivamente. Tambin puede utilizar la especificacin Java Invocation API, que permite a una aplicacin no Java, como puede ser C, utilizar la mquina virtual Java.
[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]
122
123
Devuelve una estructura de JDK 1.1 que contiene los valores por omisin de los argumentos que es necesario pasar a JNI_CreateJavaVM cuando se crea una mquina virtual Java. Firma:
jint JNI_GetDefaultJavaVMInitArgs(void *args_);
v JNI_GetCreatedJavaVMs Devuelve informacin sobre todas las mquina virtuales Java que se han creado. Firma:
jint JNI_GetCreatedJavaVMs(JavaVM **vmBuf, jsize bufLen, jsize *nVMs);
vmBuf es un rea de salida cuyo tamao viene determinado por bufLen, que es el nmero de punteros. Cada mquina virtual Java tiene una estructura JavaVM asociada que est definida en java.h. Esta API almacena un puntero que seala a la estructura JavaVM que est asociada con cada una de las mquinas virtuales Java creadas en vmBuf, a menos que vmBuf est llena. Los punteros que sealan a estructuras JavaVM se almacenan segn el orden de creacin de las correspondientes mquinas virtuales Java. nVMs devuelve el nmero de mquinas virtuales que hay creadas actualmente. AS/400 da soporte a la creacin de ms de una mquina virtual Java, por lo que cabe esperar un valor superior a uno. Esta informacin, junto con el tamao de vmBuf, determina si se devuelven o no los punteros que sealan a las estructuras JavaVM de cada una de las mquinas virtuales Java creadas. v JNI_CreateJavaVM Permite que un usuario cree una mquina virtual Java y que la utilice despus en una aplicacin. Firma para Java Development Kit 1.1.x:
jint JNI_CreateJavaVM(JavaVM **p_vm, JNIEnv **p_env, void *vm_args);
p_vm es la direccin de un puntero de JavaVM para la mquina virtual Java de nueva creacin. Varias otras API Invocation JNI utilizan p_vm para identificar la mquina virtual Java. p_env es la direccin de un puntero de Entorno JNI para la mquina virtual Java de nueva creacin. Seala a una tabla de funciones de JNI que inicia dichas funciones. vm_args es una estructura que contiene los parmetros de inicializacin de la mquina virtual Java. Al utilizar JDK 1.1.x, puede obtenerse una estructura que contiene valores por omisin llamando a JNI_GetDefaultJavaVMInitArgs. Para obtener detalles acerca de cmo realizar esta operacin con J2SDK, consulte el apartado Java Native Interface .
Si se inicia un mandato Ejecutar Java (RUNJVA) o JAVA y se especifica una propiedad que tenga un parmetro de mandato equivalente, ste tiene preferencia. Se hace caso omiso de la propiedad. Por ejemplo, el parmetro os400.optimization no se tiene en cuenta en el mandato siguiente:
JAVA CLASS(Hello) PROP((os400.optimization 0))
124
Para obtener una lista de las propiedades exclusivas de 0S/400 soportadas por la API JNI_CreateJavaVM, consulte el apartado Propiedades del sistema Java. Nota: con varias mquinas virtuales Java dentro de un nico proceso, todas las mquinas virtuales Java comparten el mismo almacenamiento esttico de proceso que se asigna para los mtodos nativos. La implementacin interna de la mquina virtual Java ya realiza particiones en los datos en base a la mquina virtual Java, pero debe tenerse en cuenta que con aplicaciones de mtodo nativo las mquinas virtuales Java comparten el almacenamiento esttico de proceso. Para obtener ms informacin, consulte el apartado Soporte a varias mquinas virtuales Java. v DestroyJavaVM Destruye la mquina virtual Java. Firma:
jint DestroyJavaVM(JavaVM *vm)
Cuando se crea la mquina virtual Java, vm es el puntero de JavaVM devuelto. v AttachCurrentThread Conecta una hebra con una mquina virtual Java para que pueda utilizar los servicios de la mquina virtual Java. Firma para Java Development Kit (JDK) 1.1.x:
jint AttachCurrentThread(JavaVM *vm, JNIEnv **p_env, void *thr_args);
El puntero de JavaVM, vm, identifica la mquina virtual Java a la que se conecta la hebra. p_env es el puntero que seala a la ubicacin en la que est situado el puntero de interfaz JNI de la hebra actual. thr_args contiene argumentos de conexin de hebra especficos de la VM. v DetachCurrentThread Firma:
jint DetachCurrentThread(JavaVM *vm);
vm identifica la mquina virtual Java de la que se desconecta la hebra. Para obtener una descripcin completa de las funciones de Invocation API, consulte la Java Native Interface Specification by Sun Microsystems, Inc., o The Source for Java Technology java.sun.com.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
125
satisfactoriamente a JNI_CreateJavaVM() ms de una vez en un trabajo, y JNI_GetCreatedJavaVMs() puede devolver ms de una mquina virtual Java en su lista de resultados. Si desea crear varias mquinas virtuales Java para utilizarlas dentro de un solo trabajo o proceso, debe tener en cuenta cuidadosamente los siguientes aspectos: mbito de almacenamiento esttico de mtodos nativos: v Los programas de servicio que contienen implementaciones de mtodos nativos slo se activan una vez por trabajo, independientemente del nmero de mquinas virtuales Java que se creen. Esto implica que el mbito del almacenamiento esttico de mtodos nativos se determina con respecto al trabajo y no con respecto a ninguna mquina virtual Java especfica. v Los valores que un mtodo nativo coloca en el almacenamiento esttico son independientes de la mquina virtual Java que ha llamado al mtodo nativo. Estos valores son visibles para cualquier mquina virtual Java del trabajo. v Si intencionadamente utiliza almacenamiento esttico de mtodos nativos en un escenario de varias mquinas virtuales Java, debe tener en cuenta cuidadosamente las posibles necesidades de sincronizacin, por encima y ms all de la utilizacin de mtodos sincronizados y monitores, que son especficos de la mquina virtual Java. La calificacin de un mtodo nativo como sincronizado slo evita las ejecuciones simultneas dentro de una sola mquina virtual Java y no las ejecuciones simultneas desde varias mquinas virtuales Java. Finalizacin de la mquina virtual Java: v Si una mquina virtual Java finaliza anormalmente, debido a que un usuario ha llamado a java.lang.System.exit() o a una anomala interna de la mquina virtual Java, finalizan la mquina virtual Java anmala y todas las hebras conectadas. v Si la hebra inicial de proceso est entre las hebras conectadas a la mquina virtual Java que ha sufrido la anomala, se lanza una excepcin a la hebra inicial. Si la hebra inicial maneja esta excepcin, las otras mquinas virtuales Java pueden continuar la ejecucin. v Si la hebra inicial de proceso finaliza, debido a una excepcin no manejada o por cualquier otra razn, finalizan tambin todas las mquinas virtuales Java del proceso. Finalizacin anmala desde C Si utiliza las rutinas exit() o abort() de ILE/C en cualquier hebra de un trabajo multihebra, finalizar inmediatamente todo el trabajo, incluyendo todas las mquinas virtuales Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
126
v Se busca el ID del mtodo principal de la clase. v Se llama al mtodo principal de la clase. v Se notifican los errores si se produce una excepcin. Para compilar este programa, debe enlazarse lgicamente con un programa de servicio que exporte las funciones precisas para iniciar una nueva mquina virtual Java. Los puntos de entrada que se necesitan son los siguientes: v JNI_GetDefaultJavaVMInitArgs, que inicializa los parmetros que deben crearse. v JNI_CreateJavaVM, que crea la mquina virtual Java. Al compilar el programa, no es necesario realizar ninguna accin explcita con el mandato de compilacin. El programa de servicio que exporta los puntos de entrada est en el directorio de enlace lgico del sistema. El nombre del programa de servicio es QJVAJNI. Para ejecutar este programa, utilice SBMJOB CMD(CALL PGM(BIBLIOT/PROGAMA)) ALWMLTTHD(*YES). Todo trabajo que cree una mquina virtual Java debe tener capacidad multihebra. En AS/400, el nico trabajo con capacidad multihebra es un trabajo inmediato de proceso por lotes (BCI). La salida del programa principal, as como cualquier salida del programa, va a parar a archivos en spool QPRINT. Estos archivos en spool resultan visibles si se utiliza el mandato Trabajar con trabajos sometidos (WRKSBMJOB) y se visualiza el trabajo iniciado con Someter trabajo (SBMJOB). Nota: no se recomienda emplear la rutina exit() de ejecucin C que aparece ms abajo a menos que se tenga la certeza de que el programa es la nica hebra del proceso. Cuando se llama a exit() desde un proceso que es capaz de dar soporte a varias hebras, esta rutina finaliza de forma inmediata todas las hebras de un proceso. Ejemplo: utilizacin de Java Invocation API
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <jni.h> int main (int argc, char *argv[]) { JDK1_1InitArgs initArgs; /* Estructura de inicializacin de la mquina virtual * (VM). * sta es la estructura que se pasa por referencia a * JNI_CreateJavaVM(). * En jni.h hallar informacin ms detallada. */ JavaVM* myJVM; /* Los punteros JavaVM y JNIEnv que se obtienen. */ JNIEnv* myEnv; /* ...de la llamada JNI_CreateJavaVM(). */ char* myClasspath; /* Es necesario modificar la va de acceso de clases * para tener una propia. */ jclass myClass; /* La clase que se va a buscar; se llama * 'NativeHello'. */ jmethodID mainID; /* El ID de mtodo de la rutina main de la clase. */ jclass stringClass; /* Necesario para crear un argumento de tipo matriz de * series para 'main'. */ jobjectArray args; /* Dado que main espera una matriz de series, hay que * pasarle una. */ /* Se establece el campo de versin de los argumentos de inicializacin. */ initArgs.version = 0x00010001; /* Se obtienen los argumentos inicializacin por omisin. */ JNI_GetDefaultJavaVMInitArgs(&initArgs); /* Ahora, interesa aadir el directorio al final de la va de acceso de clases * para que, as, findClass pueda buscarlo correctamente. Para ello, hay dos * opciones. Se pueden agregar las entradas de va de acceso de clases a la
Captulo 5. Utilizacin de Java con otros lenguajes de programacin
127
* va de acceso de clases por omisin devuelta por la llamada a * JNI_GetDefaultJavaVMInitArgs, o bien se pueden utilizar funciones especficas * de OS/400 para obtener el mismo resultado. Se trata de una solucin en tres * pasos: * 1. Establecer la variable de entorno CLASSPATH en sus requisitos con * 'putenv()' * 2. Borrar la va de acceso de clases de los argumentos de * inicializacin con NULL, lo que obliga a JNI_CreateJavaVM a * consultar el valor de CLASSPATH * 3. Establecer la propiedad os400.class.path.system=PRE para obligar a * JNI_CreateJavaVM a anteponer la va de acceso de clases por omisin * del sistema a la va de acceso de clases efectiva. * * En este ejemplo se utiliza la primera opcin porque es ms independiente de * la plataforma * * NOTA: el nombre de directorio debe especificarse en formato UTF-8. As pues, * hay que envolver los bloques de cdigo con sentencias #pragma convert. */ #pragma convert(819) myClasspath = malloc( strlen(initArgs.classpath) + strlen(:/CrtJvmExample) + 1 ); strcpy( myClasspath, initArgs.classpath ); strcat( myClasspath, :/CrtJvmExample ); initArgs.classpath = myClasspath; #pragma convert(0) /* Se crea la JVM. */ if (JNI_CreateJavaVM(&myJVM, &myEnv, &initArgs)) { fprintf(stderr, Failed to create the JVM\n); exit(1); } /* Se utiliza la JVM acabada de crear para buscar la clase de ejemplo. * NOTA: una vez ms, se trata con UTF-8, por lo que se tiene que * envolver las llamadas con #pragma convert. */ #pragma convert(819) if (! (myClass = (*myEnv)->FindClass(myEnv, NativeHello))) { #pragma convert(0) /* No se puede encontrar la clase, as que se graba un mensaje de error * en stderr de C y se sale del programa. */ fprintf(stderr, Failed to find the class 'NativeHello'\n); exit(1); /* Al salir, se termina todo el proceso en AS/400. */ } /* Ahora, hay que obtener el identificador de mtodo del punto de entrada * de 'main' de la clase. Nota: la firma de 'main' es siempre la misma * para todas las clases, main y ([Ljava/lang/String;)V * Una vez ms, se trata con UTF-8. */ #pragma convert(819) if (! (mainID = (*myEnv)->GetStaticMethodID(myEnv, myClass, main, ([Ljava/lang/String;)V))) { /* Por alguna razn, no se encuentra el ID de mtodo de 'main'. */ if ( (*myEnv)->ExceptionOccurred(myEnv) ) { /* se ha producido una excepcin Java, que debe imprimirse */ (*myEnv)->ExceptionDescribe(myEnv); /* Finaliza la JVM. */ (*myEnv)->FatalError(myEnv, Failed to find jmethodID of 'main()'); } #pragma convert(0) /* No se puede encontrar el ID de mtodo de 'main', as que se graba * un mensaje de error en stderr de C y se sale del programa. */ fprintf(stderr, Failed to find the 'main()' method\n); exit(1); /* Al salir, se termina todo el proceso en AS/400. */ } #pragma convert(819)
128
if (! (stringClass = (*myEnv)->FindClass(myEnv,java/lang/String))) { #pragma convert(0) /* No se ha encontrado java/lang/String, as que se graba * en stderr de C y se sale del programa. */ fprintf(stderr, Failed to find the java/lang/String); exit(1); /* Al salir, se termina todo el proceso en AS/400. */ } /* Ahora, es necesario crear una matriz de series vaca * porque ([Ljava/lang/String) es parte obligatoria de la firma * de toda rutina main Java. */ if (! (args = (*myEnv)->NewObjectArray(myEnv,0,stringClass,0))) { /* No se ha creado la matriz vaca, as que se graba un mensaje de error * en stderr de C y se sale del programa. */ fprintf(stderr, Failed to create empty array of strings); exit(1); /* Al salir, se termina todo el proceso en AS/400. */ } /* Ahora, ya se tiene el ID de mtodo de main y la clase, as que ya se puede llamar * al mtodo main. */ (*myEnv)->CallStaticVoidMethod(myEnv,myClass,mainID,args); /* Se comprueba si hay errores. */ if ( (*myEnv)->ExceptionOccurred(myEnv) ) { fprintf(stderr,An exception occurred while running 'main'); exit(1); } /* Finalmente, se destruye la mquina virtual Java creada. */ if ( (*myJVM)->DestroyJavaVM(myJVM) ) { fprintf(stderr, Failed to destroy the JVM\n); exit(1); } /* Eso es todo. */ return 0; }
129
130
Captulo 6. Acceso a la base de datos AS/400 con el controlador JDBC de AS/400 Developer Kit para Java
Con el controlador JDBC de AS/400 Developer Kit para Java, los programas Java pueden acceder a archivos de base de datos AS/400, acceder a funciones de base de datos JDBC con Lenguaje de Consulta Estructurada (SQL) incorporado y JDBC es un componente ejecutar sentencias SQL y procesar resultados. estndar de Java y se incluye en AS/400. JDBC es la API Java para ejecutar sentencias SQL. Permite al usuario emitir sentencias SQL y procesar el resultado. Para utilizar el controlador JDBC: 1. Importe las clases que sean necesarias: v import java.sql.*; v import com.ibm.db2.jdbc.app.*; 2. Defina el URL. 3. Registre el controlador JDBC de AS/400 Developer Kit para Java con DriverManager para poder utilizar JDBC para acceder a los datos de un archivo de base de datos de AS/400. 4. Conctese a una base de datos de AS/400 utilizando el mtodo DriverManager.getConnection(). 5. Cree las sentencias SQL que desee utilizar para actualizar los datos de la tabla. Las sentencias SQL pueden ser cualquiera de las siguientes interfaces: v Statement es la interfaz de sentencia SQL estndar. v PreparedStatement es una sentencia precompilada que puede aceptar parmetros de entrada. v CallableStatement es una sentencia precompilada que puede aceptar parmetros de entrada y salida. Establezca los parmetros para las sentencias SQL PreparedStatement y CallableStatement. Ejecute las sentencias SQL. Cierre cada una de las sentencias SQL utilizando el mtodo Statement.close(). Cierre la conexin con la base de datos AS/400.
6. 7. 8. 9.
JDBC define las interfaces Java relacionadas a continuacin: v La interfaz Driver crea la conexin y devuelve informacin sobre la versin del controlador. v La interfaz Connection representa una conexin con una base de datos determinada. v La interfaz Statement ejecuta sentencias SQL y obtiene el resultado. v La interfaz PreparedStatement ejecuta sentencias SQL compiladas. v La interfaz CallableStatement ejecuta procedimientos SQL almacenados. v La interfaz ResultSet da acceso a una tabla de datos que se genera al ejecutar una consulta SQL o el mtodo de catlogo DatabaseMetaData. v La interfaz ResultSetMetaData determina los tipos y las propiedades de las columnas de un objeto ResultSet.
131
v La interfaz DatabaseMetaData facilita informacin acerca de la base de datos en su totalidad. v JDBC 2.0 define la Interfaz Blob que proporciona acceso a objetos grandes binarios (BLOB). v JDBC 2.0 define la Interfaz Clob que proporciona acceso a objetos grandes de caracteres (CLOB). En Ejemplo: crear una aplicacin JDBC hallar un ejemplo de cmo combinar todas las interfaces para construir una aplicacin JDBC. Se puede acceder a las bases de datos de AS/400 a travs de dos controladores JDBC: el de AS/400 Developer Kit para Java y el de AS/400 Toolbox para Java. Para obtener informacin especfica acerca del controlador JDBC de AS/400 Toolbox para Java, consulte el apartado AS/400 Toolbox para Java. Si desea obtener ms informacin sobre JDBC, consulte le remitimos a JDBC de Sun Microsystems, Inc.. Para obtener ms informacin acerca del controlador JDBC nativo de AS/400, consulte la Pgina Web de JDBC AS/400 Developer Kit para Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Registrar el controlador JDBC de AS/400 Developer Kit para Java antes de utilizar JDBC
Antes de utilizar JDBC para acceder a los datos de un archivo de base de datos de AS/400, debe registrar el controlador JDBC de AS/400 Developer Kit para Java con DriverManager. Puede utilizar una propiedad de sistema Java o bien dejar que el programa Java registre los controladores. v Registro mediante una propiedad de sistema. Cada mquina virtual Java tiene un mtodo propio de establecer las propiedades de sistema. Por ejemplo, el mandato java de Qshell utiliza la opcin -d para establecer las propiedades de sistema. Para establecer el controlador mediante las propiedades de sistema, especifique este mandato desde el intrprete Qshell:
java -djdbc.drivers=com.ibm.db2.jdbc.app.DB2Driver MySQL
Para establecer el controlador mediante las propiedades de sistema, especifique lo siguiente desde la lnea de mandatos CL:
JAVA CLASS(MySQL) PROP((jdbc.drivers com.ibm.db2.jdbc.app.DB2Driver))
En Propiedades de sistema Java hallar informacin detallada sobre la propiedades de sistema. v Registro mediante el programa Java. Para cargar el controlador de forma explcita, aada cualquiera de estos mandatos al programa Java antes de la primera llamada JDBC:
java.sql.DriverManager.registerDriver (new com.ibm.db2.jdbc.app.DB2Driver ());
132
Class.forName(DB2Driver); [ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Conectarse a una base de datos de AS/400 con el controlador JDBC de AS/400 Developer Kit para Java
Para conectarse a la base de datos de AS/400, utilice el mtodo DriverManager.getConnection(). DriverManager.getConnection() toma una serie de URL como argumento. El gestor de controladores JDBC intenta localizar un controlador que pueda conectarse a la base de datos representada por el URL. Cuando utilice el controlador de AS/400 Developer Kit para Java, utilice la sintaxis siguiente para el URL:
jdbc:db2:nombreSistema
nombreSistema contiene una entrada del directorio de bases de datos relacionales. Para visualizar o aadir el nombre de sistema, entre el mandato Trabajar con entradas de directorio de bases de datos relacionales (WRKRDBDIRE). A continuacin, especifique *LOCAL como ubicacin remota en el mandato WRKRDBDIRE. Normalmente, el nombre elegido es el mismo que el nombre de sistema del AS/400 que contiene la base de datos. En Ejemplos: conectarse a una base de datos de AS/400 con el controlador JDBC de AS/400 Developer Kit para Java hallar un ejemplo de cmo conectarse a una base de datos de AS/400.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Ejemplos: conectarse a una base de datos de AS/400 con el controlador JDBC de AS/400 Developer Kit para Java
He aqu ejemplos de cmo utilizar el controlador JDBC para conectarse a un AS/400. Ejemplo 1: conectarse a la base de datos de AS/400; no se especifica ninguna propiedad ni esquema por omisin.
// Conexin con el sistema 'mySystem'. No se especifica ninguna propiedad // ni esquema por omisin. Connection c = DriverManager.getConnection(jdbc:db2://mySystem);
El programa Java puede especificar un conjunto de propiedades JDBC mediante la interfaz java.util.Properties o bien como parte del URL. En el ejemplo siguiente, las propiedades se especifican mediante la interfaz Properties.
Captulo 6. Acceso a la base de datos AS/400 con el controlador JDBC de AS/400 Developer Kit para Java
133
Ejemplo 3: conectarse a la base de datos de AS/400; las propiedades se especifican mediante Java.util.Properties
// Se crea un objeto de propiedades Properties p = new Properties(); // Se establecen las propiedades de la conexin. p.put(naming, sql); p.put(user, JonDoe); p.put(password, JD1); // Se realiza la conexin utilizando el objeto de propiedades. Connection c = DriverManager.getConnection(jdbc:db2://mySystem,p);
En Conectarse a una base de datos de AS/400 con el controlador JDBC de AS/400 Developer Kit para Java hallar ms informacin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
134
135
cs.setInt (1, 123); cs.setInt (2, 234); // Se registra el tipo del parmetro de salida. cs.registerOutParameter (3, Types.INTEGER); // Se ejecuta el procedimiento almacenado. cs.execute (); // Se obtiene el valor del parmetro de salida. int sum = cs.getInt (3); // Se muestra el valor del parmetro de salida devuelto por el procedimiento almacenado ADD System.out.println(sum = + sum + \n); // Se cierra CallableStatement. cs.close(); // Se define una sentencia SQL completa. String myQuery = select * from MYLIBRARY.MYTABLE; // Se ejecuta una consulta SQL en la tabla. ResultSet rs = s.executeQuery(myQuery); System.out.println( Query result: \n); ResultSetMetaData rsmd = rs.getMetaData(); System.out.println(rsmd.getColumnName(1) + + rsmd.getColumnName(2)); System.out.println(); while (rs.next()) { String value1 = rs.getString(1); int value2 = rs.getInt(2); System.out.println(value1 + + value2); } // Se cierra Statement. s.close(); // Se cierra la conexin. c.close(); } }
Para obtener ms informacin, consulte el apartado Controlador JDBC de AS/400 Developer Kit para Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
136
En Interfaz Statement para AS/400 Developer Kit para Java hallar ms informacin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
// Se conecta con AS/400. Connection c = DriverManager.getConnection(db2:as400://mySystem); // Se crea el objeto PreparedStatement. ste precompila la sentencia SQL especificada. // Los signos de interrogacin sealan en lugar en que deben establecerse los // parmetros antes de que se ejecute la sentencia. PreparedStatement ps = c.prepareStatement(INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES (?, ?) // Se establecen los parmetros y se ejecuta la sentencia.
Captulo 6. Acceso a la base de datos AS/400 con el controlador JDBC de AS/400 Developer Kit para Java
137
ps.setString(1, JOSH); ps.setInt(2, 789); ps.executeUpdate(); // Se establecen los parmetros y se ejecuta la sentencia otra vez. ps.setString(1, DAVE); ps.setInt(2, 456); ps.executeUpdate(); // Se cierra PreparedStatement y la conexin. ps.close(); c.close();
En Interfaz PreparedStatement para AS/400 Developer Kit para Java hallar ms informacin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
138
En Interfaz CallableStatement para AS/400 Developer Kit para Java hallar ms informacin.
[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]
En Interfaz ResultSet para AS/400 Developer Kit para Java hallar ms informacin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Captulo 6. Acceso a la base de datos AS/400 con el controlador JDBC de AS/400 Developer Kit para Java
139
En Interfaz DatabaseMetaData para AS/400 Developer Kit para Java hallar ms informacin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
140
v Devolver la totalidad de la blob como una corriente de bytes no interpretados v Devolver parte del contenido de la blob v Devolver la longitud de la blob El ejemplo siguiente muestra cmo utilizar la interfaz DB2Blob:
Blob blob = resultSet.getBlob (1); long length = blob.length (); byte[] bytes = blob.getBytes (0, (int) length);
Captulo 6. Acceso a la base de datos AS/400 con el controlador JDBC de AS/400 Developer Kit para Java
141
142
Captulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java
El soporte SQLJ DB2 est basado en el estndar ANSI SQLJ. El soporte SQLJ DB2 est contenido en AS/400 Developer Kit para Java. El soporte SQLJ DB2 permite crear, construir y ejecutar SQL intercalado para aplicaciones Java. El soporte SQLJ suministrado por AS/400 Developer Kit para Java incluye las clases de ejecucin SQLJ, y est disponible en /QIBM/ProdData/Java400/ext/runtime.zip. Para obtener ms informacin acerca de las clases de ejecucin SQLJ, consulte la documentacin de la API Runtime suministrada en la implementacin desde www.sqlj.org.
Herramientas SQLJ
Las siguientes herramientas tambin se incluyen en el soporte SQLJ suministrado por AS/400 Developer Kit para Java. Nota:Estas herramientas deben ejecutarse en el intrprete de Qshell: v El conversor de SQLJ, sqlj, sustituye sentencias SQL intercaladas en el programa SQLJ por sentencias fuente Java y genera un perfil serializado que contiene informacin acerca de las operaciones SQLJ encontradas en el programa SQLJ. v El personalizador de perfil SQLJ DB2,db2profc, precompila las sentencias SQL almacenadas en el perfil generado y genera un paquete en la base de datos DB2. v El impresor de perfil SQLJ DB2,db2profp, imprime el contenido de un perfil personalizado DB2 en texto plano. v El instalador de auditor de perfil SQLJ,profdb, instala y desinstala auditores de clase de depuracin en un conjunto existente de perfiles binarios. v La herramienta de conversin de perfil SQLJ,profconv, convierte una instancia de perfil serializado a formato de clase Java.
143
El cuerpo del mtodo consta de una clusula ejecutable SQLJ que contiene las variables de sistema principal x, y y z. para obtener ms informacin sobre las variables de sistema principal, consulte el apartado variables de sistema principal en SQLJ. En general, los indicadores SQL son sensibles a maysculas y minsculas (excepto los identificadores delimitados mediante comillas dobles) y pueden escribirse en maysculas, minsculas o ambas. Sin embargo, los indicadores Java son sensibles a maysculas/minsculas. A efectos de claridad en los ejemplos, los indicadores SQL no sensibles a maysculas/minsculas estn en maysculas, y los indicadores Java estn en minsculas o en estilo mixto. A lo largo de este captulo, se utiliza null en minsculas para representar el valor null de Java, y NULL en maysculas para representar el valor null de SQL. Los siguientes tipos de construcciones SQL pueden aparecer en programas SQLJ: v Consultas Por ejemplo, expresiones y sentencias SELECT. v Sentencias de cambio de datos SQL (DML) Por ejemplo, INSERT, UPDATE, DELETE.
144
v Sentencias de datos Por ejemplo, FETCH, SELECT..INTO. v Sentencias de control de transaccin Por ejemplo, COMMIT, ROLLBACK, etc. v Sentencias de Lenguaje de definicin de datos (DDL, tambin conocido como Lenguaje de manipulacin de esquemas) Por ejemplo, CREATE, DROP, ALTER. v Llamadas a procedimientos almacenados Por ejemplo, CALL MYPROC(:x, :y, :z) v Invocaciones de funciones almacenadas Por ejemplo, VALUES( MYFUN(:x) ) Para obtener un ejemplo de SQLJ intercalado, consulte el apartado Ejemplo: intercalar sentencias SQL en la aplicacin Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
145
Nota: este paso es opcional, pero es aconsejable para aumentar el rendimiento de la ejecucin. 3. Ejecute el archivo de clase Java igual que cualquier otro archivo de clase Java. Por ejemplo, escriba: java MyClass Donde MyClass es el nombre del archivo de clase Java.
Perfiles SQLJ
El conversor de SQLJ, sqlj, genera los perfiles cuando el usuario convierte el archivo fuente SQLJ. Los perfiles son archivos binarios serializados. Esta es la razn por la que estos archivos tienen la extensin .ser. Estos archivos contienen las sentencias SQL del archivo fuente SQLJ asociado. Para generar perfiles a partir del cdigo fuente SQLJ, ejecute el conversor de SQLJ, sqlj, en el archivo .sqlj. Para obtener ms informacin, consulte el apartado Compilacin y ejecucin de programas SQLJ.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
146
147
// cursor1.next() devuelve false cuando no hay ms filas System.out.println(Received results:); while (cursor1.next()) // 3 { str1 = cursor1.empno(); // 4 str2 = cursor1.firstnme(); System.out.print ( empno= + str1); System.out.print ( firstname= + str2); System.out.println(); } cursor1.close(); // 9 // recuperar nmero de empleado de la base de datos #sql { SELECT count(*) into :count1 FROM employee }; // 5 if (1 == count1) System.out.println (There is 1 row in employee table); else System.out.println (There are + count1 + rows in employee table); // actualizar la base de datos System.out.println(Update the database.); #sql { UPDATE employee SET firstnme = 'SHILI' WHERE empno = '000010' }; // recuperar los datos actualizados de la base de datos System.out.println(Retrieve the updated data from the database.); str1 = 000010; #sql cursor2 = {SELECT firstnme FROM employee WHERE empno = :str1}; // 6 // visualizar el conjunto de resultados // cursor2.next() devuelve false cuando no hay ms filas System.out.println(Received results:); while (true) { #sql { FETCH :cursor2 INTO :str2 }; // 7 if (cursor2.endFetch()) break; // 8 System.out.print ( empno= + str1); System.out.print ( firstname= + str2); System.out.println(); } cursor2.close(); // 9 // retrotraer la actualizacin System.out.println(Rollback the update.); #sql { ROLLBACK work }; System.out.println(Rollback done.); } catch( Exception e ) { e.printStackTrace(); }
1. Declarar iteradores. Esta seccin declara dos tipos de iteradores: App_Cursor1 Declara nombres y tipos de datos de columna, y devuelve los valores de las columnas de acuerdo con el nombre de columna (Enlace con nombre con columnas). App_Cursor2 Declara tipos de datos de columna, y devuelve los valores de las columnas por posicin de columna (Enlace posicional con columnas). 2. Inicializar el iterador. El objeto iterador cursor1 se inicializa utilizando el resultado de una consulta. La consulta almacena el resultado en cursor1. 3. Adelantar el iterador a la prxima fila. El mtodo cursor1.next() devuelve un Boolean false si no hay que recuperar ms filas.
148
4. Mover los datos. El mtodo de acceso con nombre empno() devuelve el valor de la columna denominada empno en la fila actual. El mtodo de acceso con nombre firstnme() devuelve el valor de la columna denominada firstnme en la fila actual. 5. Aplicar SELECT a los datos en una variable de sistema principal. La sentencia SELECT pasa el nmero de filas de la tabla a la variable de sistema principal count1. 6. Inicializar el iterador. El objeto iterador cursor2 se inicializa utilizando el resultado de una consulta. La consulta almacena el resultado en cursor2. 7. Recuperar los datos. La sentencia FETCH devuelve el valor actual de la primera columna declarada en el cursor ByPos desde la tabla de resultados a la variable de sistema principal str2. 8. Comprobar el xito de una sentencia FETCH..INTO. El mtodo endFetch() devuelve un Boolean true si el iterador no est posicionado en una fila, es decir, si el ltimo intento de extraer una fila ha fallado. El mtodo endFetch() devuelve false si el ltimo intento de extraer una fila ha sido satisfactorio. DB2 intenta extraer una fila cuando se llama al mtodo next(). Una sentencia FETCH...INTO llama implcitamente al mtodo next(). 9. Cerrar los iteradores. El mtodo close() libera los recursos retenidos por los iteradores. Debe cerrar explcitamente los iteradores para asegurarse de que se liberan de forma oportuna los recursos del sistema. Para obtener informacin previa acerca de este ejemplo, consulte el apartado Intercalar sentencias SQL en la aplicacin Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Precompilacin de sentencias SQL en un perfil utilizando el personalizador de perfil SQLJ DB2, db2profc
Puede utilizar el personalizador de perfil SQLJ DB2, db2profc, para que la aplicacin Java funcione de forma ms eficiente con la base de datos. El personalizador de perfil SQLJ DB2 hace lo siguiente: v Precompila las sentencias SQL almacenadas en un perfil y genera un paquete en la base de datos DB2. v Personaliza el perfil SQLJ sustituyendo las sentencias SQL por referencias a la sentencia asociada en el paquete que se ha creado.
Captulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java
149
Para precompilar las sentencias SQL de un perfil, escriba lo siguiente en el indicador de mandatos de Qshell: db2profc MyClass_SJProfile0.ser Donde MyClass_SJProfile0.ser es el nombre del perfil que desea precompilar. Utilizacin y sintaxis del personalizador de perfil SQLJ DB2 db2profc[opciones] <nombre perfil SQLJ> Donde nombre perfil SQLJ es el nombre del perfil que debe imprimirse y opciones es la lista de opciones que desea. Las opciones disponibles para db2profp son: -url=<URL JDBC> -user=<nombre usuario> -password=<contrasea> -package=<nombre biblioteca/ nombre paquete> -commitctrl=<control de compromiso> -datefmt=<formato de fecha> -datesep=<separador de fecha> -timefmt=<formato de hora> -timesep=<separador de hora> -decimalpt=<coma decimal> -stmtCCSID=<CCSID para el texto de la sentencia SQL> -sorttbl=<nombre biblioteca/nombre tabla secuencia ordenacin> -langID=<identificador idioma> A continuacin se ofrece una descripcin detallada de estas opciones. -url=<URL JDBC> Donde URL JDBC es el url de la conexin JDBC. La sintaxis del url es: jdbc:db2:nombreSistema Para obtener ms informacin, consulte el apartado Acceso a base de datos utilizando el controlador JDBC de AS/400 Developer Kit para Java. -user=<nombre usuario> Dondenombre usuario es el nombre del usuario. El valor por omisin es el ID de usuario del usuario actual que ha iniciado la sesin de la conexin local. -password=<contrasea> Dondecontrasea es la contrasea del usuario. El valor por omisin es la contrasea del usuario actual que ha iniciado la sesin de la conexin local. -package=<nombre biblioteca/nombre paquete> Donde nombre biblioteca es la biblioteca donde se colocar el paquete, y nombre paquete es el nombre del paquete que debe generarse. El nombre de biblioteca por omisin es QUSRSYS. El nombre de paquete por omisin se generar a partir del nombre del perfil. La longitud mxima del nombre de paquete es de 10 caracteres. Puesto que el nombre del perfil SQLJ ser siempre superior a 10 caracteres, el nombre de paquete por omisin que se construya ser diferente del nombre de perfil. El nombre de paquete por
150
omisin se construir concatenando las primeras letras del nombre de perfil con el nmero de clave del perfil. Si el nmero de clave del perfil es superior a 10 caracteres de longitud, se utilizarn los ltimos 10 caracteres del nmero de clave del perfil para el nombre de paquete por omisin. Por ejemplo, el siguiente diagrama muestra algunos nombres de perfil y sus nombres de paquete por omisin:
Nombre perfil App_SJProfile0 App_SJProfile01234 App_SJProfile012345678 App_SJProfile01234567891 Nombre paquete por omisin App_SJPro0 App_S01234 A012345678 1234567891
-commitctrl=<control de compromiso> Donde control de compromiso es el nivel de control de compromiso que se desea. El control de compromiso puede tener cualquiera de los siguientes valores de tipo carcter:
Valor C S Definicin *CHG. Son posibles lecturas espurias, lecturas no repetibles y lecturas fantasma. *CS. Las lecturas espurias no son posibles, pero s las lecturas no repetibles y las lecturas fantasma. *ALL. Las lecturas espurias y las lecturas no repetibles no son posibles, pero s las lecturas fantasma. *NONE. No son posibles lecturas espurias, lecturas no repetibles ni lecturas fantasma. Este es el valor por omisin.
-datefmt=<formato de fecha> Donde formato de fecha es el tipo de formato de fecha que se desea. El formato de fecha puede tener cualquiera de los siguientes valores:
Valor USA ISO Definicin Estndar IBM de Estados Unidos (mm.dd.aaaa,hh:mm a.m., hh:mm p.m.) International Standards Organization (aaaa-mm-dd, hh.mm.ss) Este es el valor por omisin. Estndar europeo de IBM (dd.mm.aaaa, hh.mm.ss) Japanese Industrial Standard Christian Era (aaaa-mm-dd, hh:mm:ss) Mes/Da/Ao (mm/d/aa) Da/Mes/Ao (dd/mm/aa) Ao/Mes/Da (aa/mm/dd) Juliana (aa/ddd)
El formato de fecha se utiliza al acceder a columnas de resultados de fecha. Todos los campos de fecha de salida se devuelven en el formato especificado. Para series de fecha de entrada, se utiliza el valor especificado para determinar si la fecha se ha especificado en un formato vlido. El valor por omisin es ISO.
Captulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java
151
-datesep=<separador de fecha> Donde separador de fecha es el tipo de separador que desea utilizar. El separador de fecha se utiliza al acceder a columnas de resultados de fecha. El separador de fecha puede ser cualquiera de los siguientes valores:
Valor / . , blank Definicin Se utiliza una barra inclinada. Se utiliza un punto. Se utiliza una coma. Se utiliza un guin. Este es el valor por omisin. Se utiliza un espacio.
-timefmt=<formato de hora> Donde formato de hora es el formato que desea utilizar para visualizar campos de hora. El formato de hora se utiliza al acceder a columnas de resultados de fecha. Para series de hora de entrada, se utiliza el valor especificado para determinar si la hora se ha especificado en un formato vlido. El formato de hora puede tener cualquiera de los siguientes valores:
Valor USA ISO Definicin Estndar IBM de Estados Unidos (mm.dd.aaaa,hh:mm a.m., hh:mm p.m.) International Standards Organization (aaaa-mm-dd, hh.mm.ss) Este es el valor por omisin. Estndar europeo de IBM (dd.mm.aaaa, hh.mm.ss) Japanese Industrial Standard Christian Era (aaaa-mm-dd, hh:mm:ss) Hora/Minuto/Segundo (hh:mm:ss)
-timesep=<separador de hora> Donde separador de hora es el carcter que desea utilizar para acceder a las columnas de resultados de hora. El separador de hora puede ser cualquiera de los siguientes valores:
Valor : . , blank Definicin Se utilizan dos puntos. Se utiliza un punto. Este es el valor por omisin. Se utiliza una coma. Se utiliza un espacio.
-decimalpt=<coma decimal> Donde coma decimal es la coma decimal que desea utilizar. La coma decimal se utiliza para constantes numricas en sentencias SQL. La coma decimal puede ser cualquiera de los siguientes valores:
Valor . , Definicin Se utiliza un punto. Este es el valor por omisin. Se utiliza una coma.
152
-stmtCCSID=<CCSID> Donde CCSID es el identificador de juego de caracteres para las sentencias SQL preparadas en el paquete. El valor por omisin es el valor del trabajo durante el tiempo de personalizacin. -sorttbl=<nombre biblioteca/nombre tabla secuencia ordenacin> Donde nombre biblioteca/nombre tabla secuencia ordenacin es la ubicacin y el nombre de tabla de la tabla de secuencia de ordenacin que desea utilizar. La tabla de secuencia de ordenacin se utiliza para comparaciones de series en sentencias SQL. El nombre de biblioteca y el nombre de tabla de secuencia de ordenacin tienen ambos un lmite de 10 caracteres. El valor por omisin se toma del trabajo durante el tiempo de personalizacin. -langID=<identificador de idioma> Donde identificador de idioma es el identificador de idioma que desea utilizar. El valor por omisin para el identificador de idioma se toma del trabajo actual durante el tiempo de personalizacin. El identificador de idioma se utiliza junto con la tabla de secuencia de ordenacin. Para obtener informacin ms detallada acerca de cualquiera de los campos anteriores, consulte la publicacin DB2 for AS/400 SQL Programming, SC41-5611
153
-url=<URL JDBC> Donde URL JDBC es el url al que desea conectarse. En el apartado Conectarse a una base de datos de AS/400 con el controlador JDBC de AS/400 Developer Kit para Java hallar ms informacin. -user=<nombre usuario> Dondenombre usuario es el nombre del usuario del perfil. -password=<contrasea> Donde contrasea es la contrasea del perfil de usuario.
154
Conversin de una instancia de perfil serializado a formato de clase Java mediante la herramienta de conversin de perfil SQLJ (profconv)
La herramienta de conversin de perfil SQLJ, (profconv), convierte una instancia de perfil serializado a formato de clase Java. La herramienta profconv es necesaria debido a que algunos navegadores no soportan la carga de un objeto serializado desde un archivo de recurso asociado con un applet. Ejecute el programa de utilidad profconv para realizar la conversin. Para ejecutar el programa de utilidad profconv, escriba lo siguiente en la lnea de mandatos de Qshell: profconv MyApp_SJProfile0.ser Donde MyApp_SJProfile0.ser es el nombre de la instancia de perfil que desea convertir. La herramienta profconv llama a sqlj -ser2class. Consulte el apartado correspondiente a sqlj para obtener opciones de la lnea de mandatos.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Captulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java
155
156
Captulo 8. Ejecucin de la aplicacin Java en un sistema principal sin interfaz grfica de usuario
Si desea ejecutar la aplicacin Java en un sistema principal que no tiene una interfaz grfica de usuario (GUI), como por ejemplo un sistema AS/400, puede utilizar Abstract Window Toolkit (AWT) remoto o Class Broker para Java (CBJ). AWT remoto se utiliza con las interfaces de instalacin y administracin de las aplicaciones de servidor. Estas interfaces suelen tener un mnimo de grficos complejos y un contenido altamente interactivo. AWT remoto distribuye los procesos AWT entre el AS/400 y una estacin de trabajo. As pues, el nivel de respuesta de las operaciones con muchos grficos y un alto grado de interaccin no es tan rpido como en las implementaciones de AWT en plataformas con terminales grficos conectados localmente. Para utilizar AWT remoto, consulte el apartado Configuracin de AWT remoto. Puede utilizar CBJ para servicios de GUI de alto rendimiento. Puesto que el AWT remoto no es aconsejable para operaciones con grficos complejos o alta interaccin, puede utilizar CBJ en su lugar, diseado para estos entornos. Para utilizar CBJ, consulte el apartado Configuracin de CBJ.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
157
el parmetro -classpath del mandato java. Para J2SDK, versin 1.2, el archivo RAWTGui.jar se aade automticamente a CLASSPATH al utilizar el parmetro -jardel mandato java. 3. Inicie AWT remoto en la pantalla remota. Si desea obtener informacin ms detallada y sugerencias sobre la utilizacin de AWT remoto, consulte los temas indicados a continuacin: v En el apartado Ejecutar un programa Java con AWT remoto se dan instrucciones para ejecutar un programa Java con AS/400 utilizando varios JSK y Netscape. v En Imprimir con AWT remoto se explica cmo imprimir, tarea que se realiza igual que en el AWT Java estndar. Tambin se ensea a imprimir en AS/400. v En el apartado Propiedades de AWT remoto se muestra cmo ejecutar una aplicacin de AWT remoto utilizando la propiedad os400.class.path.rawt. v En Restricciones de SecurityManager de AWT remoto se facilita informacin sobre las restricciones en vigor cuando se ejecutan aplicaciones Java con AWT remoto bajo el control de SecurityManager. Si desea obtener ms informacin sobre la configuracin de TCP/IP, consulte el captulo How do I set up TCP/IP de la publicacin 0S/400 TCP/IP Configuration and Reference, SC41-5420. En Ejemplo: configurar AWT remoto para Java en una pantalla remota hallar un ejemplo de la manera de configurar AWT remoto. Si desea obtener ms informacin sobre AWT, le remitimos a Abstract Window Toolkit de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Ejemplo: configurar AWT remoto para Java en una pantalla remota Windows
Este ejemplo muestra una manera de configurar AWT remoto en una pantalla remota Windows. Existen otras formas de hacerlo, en funcin de lo que prefiera. Puede utilizar un proceso parecido en otros sistemas operativos de pantalla remota. El proceso de configuracin e inicio estn automatizados por medio de un archivo .bat Windows o de cualquier otro recurso de programacin que proporcione el sistema operativo de la pantalla remota. Para configurar AWT remoto para Java en una pantalla remota Windows, realice las tareas siguientes: v Ponga los archivos de clase de AWT remoto a disposicin de la pantalla remota. Copie los archivos de clase de AWT remoto en la pantalla remota. Copie /QIBM/ProdData/Java400/jdk117/RAWTGui.zip en c:\rawt\RAWTGui.zip o /QIBM/ProdData/Java400/jdk12/RAWTGui.jar en c:\rawt2\RAWTGui.jar v Inicie AWT remoto en la pantalla remota entrando lo siguiente en la lnea de mandatos:
java -classpath c:\jdk1.1.7\lib\classes.zip;c:\rawt\RAWTGui.zip java com.ibm.rawt.server.RAWTPCServer
158
o
java -jar c:\rawt2\RAWTGui.jar
En Configurar AWT remoto para Java en una pantalla remota hallar ms informacin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Poner los archivos de clase de AWT remoto para Java a disposicin de la pantalla remota
Para poner los archivos de clase de AWT remoto a disposicin de la pantalla remota, siga estos pasos para Java Development Kit (JDK) 1.1. x o para Java 2 SDK (J2SDK), Standard Edition, versin 1.2. Si utiliza JDK 1.1.x, puede: v Copiar los archivos de clase de AWT remoto en la pantalla remota. Los archivos de AWT remoto se instalan con AS/400 Developer Kit para Java en dos archivos ZIP: /QIBM/ProdData/Java400/jdk1.1.x/RAWTApplHost.zip y /QIBM/ProdData/Java400/jdk1.1.x/RAWTGui.zip. El archivo RAWTApplHost.zip contiene las clases de AWT remoto para AS/400. El archivo RAWTGui.zip contiene las clases de AWT remoto para la pantalla remota. Copiar RAWTGui.zip desde /QIBM/ProdData/Java400/jdk1.1.x en la pantalla remota. v Correlacionar la va de acceso, /QIBM/ProdData/Java400/jdk1.1.x/RAWTGui.zip, con una unidad de red de la pantalla remota. Si utiliza J2SDK, versin 1.2, puede: v Copiar los archivos de clase de AWT remoto en la pantalla remota. Los archivos de AWT remoto se instalan con AS/400 Developer Kit para Java en dos archivos JAR: /QIBM/ProdData/Java400/jdk1.2/RAWTAHost.jar y /QIBM/ProdData/Java400/jdk1.2/RAWTGui.jar El archivo RAWTAHost.jar contiene las clases de AWT remoto para AS/400. El archivo RAWTGui.jar contiene las clases de AWT remoto para la pantalla remota. Copiar RAWTGui.jar desde /QIBM/ProdData/Java400/jdk1.2 en una unidad de red de la pantalla remota. v Correlacionar la va de acceso, /QIBM/ProdData/Java400/jdk1.2/RAWTGui.jar, con una unidad de red de la pantalla remota.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Captulo 8. Ejecucin de la aplicacin Java en un sistema principal sin interfaz grfica de usuario
159
El soporte JAR de J2SDK, versin 1.2 establece la va de acceso de clases, de modo que no es necesario establecer explcitamente el parmetro CLASSPATH. Para establecer la va de acceso de clases e iniciar AWT remoto en una pantalla remota, especifique este mandato:
java -jar <VA_DE_ACCESO>RAWTGui.jar
donde <VA_DE_ACCESO> es la unidad y el directorio totalmente calificados donde se encuentra el archivo RAWTGui.jar. Por ejemplo, java -jar c:\rawt2\RAWTGui.jar.
[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]
Para iniciar el daemon servidor de AWT remoto para J2SDK, versin 1.2, especifique lo siguiente en la lnea de mandatos:
java -jar <VIA_DE_ACCESO>RAWTGui.jar
160
donde VIA_DE_ACCESO es la unidad y el directorio totalmente calificados donde se encuentra el archivo RAWTGui.jar. Por ejemplo, java -jar c:\rawt2\RAWTGui.jar .
El daemon servidor selecciona el primer puerto libre por encima del 2000 cuando la aplicacin Java se conecta mediante AWT remoto. La aplicacin Java utilizar ese puerto hasta finalizar. Las aplicaciones Java adicionales se conectarn a los siguientes puertos por encima del 2000 que estn libres. El rango de puertos disponibles llega hasta el 9999. Si desea obtener ms informacin sobre la configuracin de TCP/IP, consulte el captulo How do I set up TCP/IP de la publicacin OS/400 TCP/IP Configuration and Reference, SC41-5420.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
m. Pulse Intro. Para ejecutar un programa Java, se puede utilizar tambin el AWT remoto con Netscape.
Captulo 8. Ejecucin de la aplicacin Java en un sistema principal sin interfaz grfica de usuario
161
2. Abra la pgina RAWT.html con Netscape 4.05 o posterior. Despus de otorgar todos los privilegios solicitados, Netscape inicia el servidor de AWT remoto y lo ejecuta dentro de su mquina virtual Java. 3. Inicie una aplicacin Java en el AS/400 utilizando AWT remoto. 4. Una vez haya salido de la aplicacin, pulse en el botn Recargar mientras mantiene pulsada la tecla Mays para iniciar de nuevo el servidor de AWT remoto. Ejecutar el servidor de AWT remoto dentro de la mquina virtual Java de Netscape e iniciar la sesin en el AS/400: Para ejecutar el servidor de AWT remoto dentro de la mquina virtual Java de Netscape e iniciar la sesin en el AS/400, siga estos pasos: 1. Edite este archivo .html de ejemplo de acuerdo con la informacin especfica de la instalacin de jt400.zip y RAWTGui.zip. Este archivo, RAWT400.html, inicia AWT remoto y utiliza AS/400 Toolbox para Java para iniciar la sesin en AS/400.
162
<HTML> <BODY TEXT=#000000 LINK=#0000EE VLINK=#551A8B ALINK=#FF0000> <CENTER> <APPLET ARCHIVE=file://C\jt400\lib\jt400.zip code=com.ibm.rawt.server.StartRAWT400.class codebase=file://C|remote_awt\jdk1.1.1\lib\RAWTGui.zip WIDTH=600 HEIGHT=50> </APPLET> </CENTER> </BODY> </HTML>
2. Abra esta pgina RAWT400.html con Netscape 4.05. Despus de otorgar todos los privilegios solicitados, Netscape inicia el applet de AWT remoto que visualiza un panel en el que puede elegir cualquiera de las opciones siguientes: v Iniciar la sesin en el AS/400 con AWT remoto utilizando AS/400 Toolbox para Java para acceder al AS/400. v Entrar el nombre de aplicacin Java y los argumentos con las propiedades de AWT remoto. v Pulsar el botn Iniciar aplicacin para iniciar la aplicacin Java especificada con AWT remoto.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
La va de acceso de clases puede actualizarse aadiendo la variable de entorno CLASSPATH o bien utilizando el parmetro de va de acceso de clases. Nota: si aparece el mensaje siguiente mientras imprime en AS/400, significa que AS/400 Toolbox para Java no est instalado o bien que las clases de AS/400 Toolbox para Java no se encuentran en la va de acceso de clases.
Error en carga de archivo de clase: com/ibm/as400/access/PrintObjectList.class Se ha producido una excepcin durante la asignacin de eventos: java.lang.NoClassDefFoundError: com/ibm/as400/access/PrintObjectList
Captulo 8. Ejecucin de la aplicacin Java en un sistema principal sin interfaz grfica de usuario
163
Para comprobar el nivel de versin, entre java -version en la lnea de mandatos. Esta propiedad nueva puede utilizarse en una pantalla remota si hay algn problema con la versin de JDK. Esta propiedad no es procedente en AS/400. Si la versin no est al nivel 1.1.x, debe instalar el nivel pertinente. Si est al nivel 1.1.x, puede ejecutar el servidor de AWT remoto y/o la aplicacin con la propiedad siguiente, que indica la versin de Java: -DJdkVersion=1.1.x.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
164
v v v v
v SecurityManager.checkPropertiesAccess(..)
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
.
[ Legal | Glosario de AS/400 ]
VIA_ACCESO es la va de acceso al directorio donde se encuentra el paquete cbj_1.1.jar. Por ejemplo, QIBM/ProdData/Java400/ext.
Captulo 8. Ejecucin de la aplicacin Java en un sistema principal sin interfaz grfica de usuario
165
Los archivos CBJ se encuentran en el subdirectorio, denominado /usr/local/JCBroker. Consulte el apartado Contenido de paquete de cbj_.1.1.jar para obtener ms informacin. 5. Cree un programa Java en AS/400 para jcb.jar, especificando este mandato:
CRTJVAPGM CLSF('/usr/local/JCBroker/lib/jcb.jar')
6. Si desea utilizar las clases CBJ (no en modalidad de depuracin), debe aadir JCBroker\lib y JCBroker\lib\jcb.jar a la opcin de va de acceso de clases en la lnea de mandatos Java. No es aconsejable aadir JCBroker\lib y JCBroker\lib\jcb.jar a la variable de entorno CLASSPATH, ya que puede entrar en conflicto con la carga de clases al ejecutar applets que tengan establecido applet_jcb.jar en el indicador ARCHIVE. 7. Si desea ejecutar CBJ en modalidad de depuracin, sustituya jcb.jar por jcbd.jar en la va de acceso de clases o altere temporalmente el valor de va de acceso de clases en la lnea de mandatos Java. Tambin puede utilizar este mandato:
CRTJVAPGM CLSF('/usr/local/JCBroker/lib/jcbd.jar')
8. Para obtener ms informacin acerca de las API CBJ, demostraciones de ejecucin, propiedades de edicin, diseo y escritura de aplicaciones CBJ y otros temas, consulte el archivo JCBroker/index.html del paquete cpj_1.1.jar .
Los archivos CBJ se extraen y se copian en el directorio. Consulte el apartado Contenido de paquete de cbj_.1.1.jar para obtener ms informacin. 4. Si desea utilizar las clases CBJ (no en modalidad de depuracin), aada C:\JCBroker\lib y C:\JCBroker\lib\jcb.jar a la opcin de va de acceso de clases en la lnea de mandatos Java. Nota:no es aconsejable aadirlo a la variable de entorno del sistema CLASSPATH, ya que puede entrar en conflicto con la carga de clases al ejecutar applets que tengan establecido applet_jcb.jar en el indicador ARCHIVE. 5. Si desea ejecutar CBJ en modalidad de depuracin, sustituya jcb.jar por jcbd.jar en la va de acceso de clases. Para instalar CBJ en UNIX, siga los mismos pasos que en el caso de Windows, excepto para los siguientes cambios que dependen del sistema: v Sustituya el separador de archivos Windows \ por el separador de archivos UNIX /. v Sustituya el separador de va de acceso de clases Windows ; por el separador de va de acceso de clases UNIX :.
166
v Sustituya las variables de entorno del sistema Windows %XXX% por las variables de entorno del sistema UNIX $XXX. 6. Para obtener ms informacin acerca de las API CBJ, demostraciones de ejecucin, propiedades de edicin, diseo y escritura de aplicaciones CBJ y otros temas, consulte el archivo JCBroker/index.htmldel paquete cpj_1.1.jar.
167
El siguiente nivel de directorios bajo el directorio JCBroker consta de estos datos: demo Este directorio contiene los siguientes subdirectorios: bin, binx, html, images, lib, log y src. Estos subdirectorios contienen el ejecutable Windows, el ejecutable UNIX, pginas HTML, archivos GIF archivos de clase y cdigo fuente (para algunos ejemplos) de varias aplicaciones de demostracin. Puede ejecutar estos ejemplos de demostracin siguiendo las instrucciones. El directorio log es un espacio reservado para archivos de anotaciones de depuracin. doc Este directorio contiene los dos subdirectorios siguientes: api y guide. En este espacio se almacenan la gua de la API CBJ y una gua de usuario acerca de CBJ. La documentacin de la API se ha generado con la herramienta javadoc de J2SDK, versin 1.2. Para examinar el documento de API o la gua de usuario, abra el archivo index.html en el directorio correspondiente. La gua de usuario es un documento de nivel introductorio, mientras que la gua QuickStart es un documento que permite un inicio rpido. Este directorio tambin contiene un archivo FAQ.html y el archivo quickStart.html, que describe cmo instalar y utilizar CBJ y muestra cmo ejecutar los ejemplos de demostracin. lib Este directorio contiene las clases y recursos CBJ necesarios para desarrollar, ejecutar y desplegar aplicaciones nuevas basadas en CBJ. Las clases estn empaquetadas en el archivo jcb.jar. Para la modalidad de depuracin, las clases estn empaquetadas en el archivo jcbd.jar. Las clases incluidas en el indicador ARCHIVE de un applet estn empaquetadas en el archivo applet_jcb.jar. Para la modalidad de depuracin, las clases estn empaquetadas en el archivo applet_ jcbd.jar. El archivo de propiedades de JCB, denominado JCB.properties, se encuentra en el subdirectorio com/ibm/jcb/resources. La ejecucin CBJ lo lee cuando se inicia. Puede cambiar este archivo para que refleje sus preferencias. Las propiedades de describen en la seccin de instalacin y configuracin. Las propiedades que slo afectan a los applets se encuentran en el archivo applet_JCB.properties, que forma parte de applet_ jcb.jar y applet_ jcbd.jar. Tambin puede cambiar este archivo para que refleje sus preferencias al ejecutar en modalidad de applet. Para cambiar este archivo, ejecute la aplicacin Editor Java que reside en este directorio. src Este directorio contiene el cdigo fuente CBJ y el archivo de anotaciones de la versin interna, denominado version.log. El directorio est vaco excepto en el caso de paquetes seleccionados. index.html Esta es la pgina inicial que se utiliza como referencia del resto de la documentacin.
168
Captulo 8. Ejecucin de la aplicacin Java en un sistema principal sin interfaz grfica de usuario
169
170
171
acceder al sistema operativo subyacente o a los datos del sistema. Este modelo de seguridad se denomina sandbox y en l los applets Java slo tienen libertad de movimiento en un espacio acotado. El modelo de seguridad sandbox es una combinacin del cargador de clases, el verificador de archivos de clase y la clase java.lang.SecurityManager. Para obtener ms informacin acerca de la seguridad, consulte la documentacin dedicada a la seguridad de Sun Microsystems, Inc. y el apartado proteccin de las aplicaciones Java con SSL.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Conseguir que una aplicacin Java sea segura con la capa de sockets seguros
Puede utilizar la capa de sockets seguros (SSL) para hacer que la aplicacin Java sea ms segura. SSL hace lo siguiente para mejorar la seguridad de la aplicacin: v Protege los datos de comunicacin mediante cifrado. v Autentica los ID de usuario remotos. v Autentica los nombres de sistema remotos. Nota:SSL utiliza un certificado digital para cifrar la comunicacin de sockets de la aplicacin Java. Los certificados digitales son un estndar de Internet para identificar aplicaciones, usuarios y sistemas seguros. Puede controlar los certificados digitales utilizando el Gestor de certificados digitales de IBM. Para obtener ms informacin, consulte el apartado Gestor de certificados digitales IBM. Para conseguir que la aplicacin Java sea ms segura con SSL: v Prepare AS/400 para que d soporte a SSL. v Disee la aplicacin Java para que utilice SSL; para ello: Modifique el cdigo de socket Java para que utilice las fbricas de sockets si no las utiliza todava. Modifique el cdigo Java para que utilice SSL. v Utilice un certificado digital para conseguir que la aplicacin Java sea ms segura; para ello: 1. Elija el tipo de certificado digital que desee utilizar. 2. Utilice el certificado digital cuando ejecute la aplicacin. Tambin puede registrar la aplicacin Java como aplicacin segura; para ello, utilice la API QsyRegisterAppForCertUse. Para obtener ms informacin, consulte la seccin correspondiente a QsyRegisterAppForCertUse en la publicacin System API Reference: Security APIs .
[ Legal | Glosario de AS/400 ]
172
173
SSL_RSA_WITH_3DES_EDE_CBC_SHA SSL_RSA_WITH_RC4_128_MD5 SSL_RSA_WITH_RC2_CBC_128_MD5 SSL_RSA_WITH_DES_CBC_MD5 SSL_RSA_WITH_3DES_EDE_CBC_MD5 Segn el pas en que se encuentre, es posible que el nmero de programas Cryptographic Access Provider de entre los que puede elegir sea ms limitado. Una vez cargado un programa Cryptographic Access Provider, se puede utilizar cualquiera de las suites de cifrado que ofrece.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
174
Una vez que sepa cul es el tipo de certificado que necesita, podr elegir cualquiera de los certificados digitales que haya en cualquiera de los contenedores de certificados a los que pueda acceder.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
175
En este ejemplo, la aplicacin Java MyClass utilizar el certificado MYCERTIFICATE. MYCERTIFICATE deber estar en el contenedor de certificados por omisin del sistema para que MyClass pueda utilizarlo.
2. Aada una lnea que declare una instancia de un objeto SocketFactory. Por ejemplo:
SocketFactory socketFactory
3. Inicialice la instancia de SocketFactory definindola como igual al mtodo SocketFactory.getDefault(). Por ejemplo:
socketFactory = SocketFactory.getDefault();
4. Inicialice los sockets existentes. Llame al mtodo SocketFactory createSocket(sistpral,puerto) en la fbrica de sockets para cada socket que declare.
176
s es el socket que se crea. socketFactory es la instancia de SocketFactory creada en el paso 2. host es una variable de tipo serie que representa el nombre de un servidor de sistema principal. port es una variable de tipo entero que representa el nmero de puerto de la conexin por socket. Una vez realizados todos los pasos anteriores, el cdigo utilizar fbricas de sockets. No es necesario efectuar ningn otro cambio en el cdigo. Todos los mtodos a los que se llama y la sintaxis con sockets seguirn funcionando. En Ejemplos: modificar el cdigo Java para que utilice fbricas de sockets de servidor hallar un ejemplo de programa cliente convertido para que utilice fbricas de sockets. En el apartado Ejemplos: modificacin del cdigo Java para utilizar fbricas de sockets de cliente hallar un ejemplo de programa cliente convertido para que utilice fbricas de sockets.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Ejemplos: modificacin del cdigo Java para utilizar fbricas de sockets de servidor
Los ejemplos dados a continuacin muestran la manera en que se puede modificar una clase de socket sencilla llamada simpleSocketServer de forma que utilice fbricas de sockets para crear todos los sockets. El primer ejemplo muestra la clase simpleSocketServer sin fbricas de sockets. El segundo ejemplo muestra la clase simpleSocketServer con fbricas de sockets. En el segundo ejemplo, simpleSocketServer cambia de nombre y pasa a llamarse factorySocketServer. Ejemplo 1: programa Socket Server sin fbricas de sockets
/* Archivo simpleSocketServer.java*/ import java.net.*; import java.io.*; public class simpleSocketServer { public static void main (String args[]) throws IOException { int serverPort = 3000; if (args.length < 1) { System.out.println(java simpleSocketServer serverPort); System.out.println(Defaulting to port 3000 since serverPort not specified.); } else serverPort = new Integer(args[0]).intValue(); System.out.println(Establishing server socket at port + serverPort); ServerSocket serverSocket = new ServerSocket(serverPort); // un servidor real manejara ms de un nico cliente as... Socket s = serverSocket.accept(); BufferedInputStream is = new BufferedInputStream(s.getInputStream()); BufferedOutputStream os = new BufferedOutputStream(s.getOutputStream()); // Este servidor tan slo se hace eco de lo que se le enva... byte buffer[] = new byte[4096]; int bytesRead; // se realiza la operacin read hasta que se devuelve eof while ((bytesRead = is.read(buffer)) > 0) { os.write(buffer, 0, bytesRead); // se graba lo recibido
Captulo 9. Seguridad Java
177
os.flush(); // se vaca el almacenamiento intermedio de salida } s.close(); serverSocket.close(); } // fin de main() } // fin de la definicin de clase
Para obtener informacin previa, consulte el apartado Modificacin del cdigo para utilizar fbricas de sockets.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Ejemplos: modificacin del cdigo Java para utilizar fbricas de sockets de cliente
Los ejemplos dados a continuacin muestran la manera en que se puede modificar una clase de socket sencilla llamada simpleSocketClient de forma que utilice fbricas de sockets para crear todos los sockets. El primer ejemplo muestra la clase simpleSocketClient sin fbricas de sockets. El segundo ejemplo muestra la clase simpleSocketClient con fbricas de sockets. En el segundo ejemplo, simpleSocketClient cambia de nombre y pasa a llamarse factorySocketClient. Ejemplo 1: programa Socket Client sin fbricas de sockets
178
/* Programa Simple Socket Client */ import java.net.*; import java.io.*; public class simpleSocketClient { public static void main (String args[]) throws IOException { int serverPort = 3000; if (args.length < 1) { System.out.println(java simpleSocketClient serverHost serverPort); System.out.println(serverPort defaults to 3000 if not specified.); return; } if (args.length == 2) serverPort = new Integer(args[1]).intValue(); System.out.println(Connecting to host + args[0] + at port + serverPort); // Se crea el socket y se conecta con el servidor. Socket s = new Socket(args[0], serverPort); . . . // El resto del programa sigue a partir de aqu.
Para obtener informacin previa, consulte el apartado Modificacin del cdigo para utilizar fbricas de sockets.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
179
Para modificar el cdigo para que utilice SSL: v Importe javax.net.ssl.* para aadir el soporte SSL:
import javax.net.ssl.*;
v Utilice la nueva fbrica de sockets para inicializar los sockets de la misma manera que ha utilizado la anterior:
Socket s = newSF.createSocket(args[0], serverPort);
El cdigo ya utiliza el soporte SSL. No es necesario realizar ningn cambio ms en l. Consulte los apartados Ejemplos: modificacin del cliente Java para utilizar la capa de sockets seguros y Ejemplos: modificacin del servidor Java para utilizar la capa de sockets seguros para obtener cdigo de ejemplo.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Ejemplos: modificacin del servidor Java para utilizar la capa de sockets seguros
Los ejemplos que se dan a continuacin muestran la manera de modificar una clase llamada factorySocketServer para que utilice SSL. El primer ejemplo muestra la clase factorySocketServer sin SSL. El segundo ejemplo muestra la misma clase, que cambia de nombre y pasa a llamarse factorySSLSocketServer, con SSL. Ejemplo 1: clase factorySocketServer sencilla sin soporte SSL
/* Archivo factorySocketServer.java */ // es necesario importar javax.net para tomar la clase ServerSocketFactory import javax.net.*; import java.net.*; import java.io.*; public class factorySocketServer { public static void main (String args[]) throws IOException { int serverPort = 3000; if (args.length < 1) { System.out.println(java simpleSocketServer serverPort); System.out.println(Defaulting to port 3000 since serverPort not specified.); } else serverPort = new Integer(args[0]).intValue(); System.out.println(Establishing server socket at port + serverPort); // Se cambia la clase simpleSocketServer original para que utilice // ServerSocketFactory con el fin de crear sockets de servidor. ServerSocketFactory serverSocketFactory = ServerSocketFactory.getDefault(); // Ahora, la fbrica ha de crear el socket de servidor. Es // el ltimo cambio que se realiza en el programa original. ServerSocket serverSocket = serverSocketFactory.createServerSocket(serverPort); // un servidor real manejara ms de un nico cliente as... Socket s = serverSocket.accept(); BufferedInputStream is = new BufferedInputStream(s.getInputStream()); BufferedOutputStream os = new BufferedOutputStream(s.getOutputStream()); // Este servidor tan slo se hace eco de lo que se le enva. byte buffer[] = new byte[4096]; int bytesRead; while ((bytesRead = is.read(buffer)) > 0) {
180
} s.close(); serverSocket.close();
Para obtener informacin previa, consulte el apartado Modificacin del cdigo Java para utilizar la capa de sockets seguros.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Ejemplos: modificacin del cliente Java para utilizar la capa de sockets seguros
Los ejemplos que se dan a continuacin muestran la manera de modificar una clase llamada factorySocketClient para que utilice SSL. El primer ejemplo muestra la clase factorySocketClient sin SSL. El segundo ejemplo muestra la misma clase, que cambia de nombre y pasa a llamarse factorySSLSocketClient, con SSL.
181
Para obtener informacin previa, consulte el apartado Modificacin del cdigo Java para utilizar la capa de sockets seguros.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
182
183
Nombre de entorno nacional Nombre de entorno nacional Idioma/pas en JDK 1.1.6 ISO ca ca_ES Cataln/Espaa cs cs_CZ Checo/Repblica Checa da da_DK Dans/Dinamarca de de_DE Alemn/Alemania de_AT de_AT Alemn/Austria de_CH de_CH Alemn/Suiza el el_GR Griego/Grecia en en_US Ingls/EE.UU. en_AU en_AU Ingls/Australia en_CA en_CA Ingls/Canad en_GB en_GM Ingls/Gran Bretaa en_IE en_IE Ingls/Irlanda en_NZ en_NZ Ingls/Nueva Zelanda en_ZA en_ZA Ingls/Sudfrica es es_ES Espaol/Espaa es_AR es_AR Espaol/Argentina es_BO es_BO Espaol/Bolivia es_CL es_CL Espaol/Chile es_CR es_CR Espaol/Costa Rica es_DO es_DO Espaol/Repblica Dominicana es_EC es_EC Espaol/Ecuador es_GT es_GT Espaol/Guatemala es_HN es_HN Espaol/Honduras es_MX es_MX Espaol/Mxico es_NI es_NI Espaol/Nicaragua es_PA es_PA Espaol/Panam es_PE es_PE Espaol/Per es_PR es_PR Espaol/Puerto Rico es_PY es_PY Espaol/Paraguay es_SV es_SV Espaol/El Salvador es_UY es_UY Espaol/Uruguay es_VE es_VE Espaol/Venezuela et et_EE Estonio/Estonia fi fi_FI Finlands/Finlandia fr fr_FR Francs/Francia fr_BE fr_BE Francs/Blgica fr_CA fr_CA Francs/Canad fr_CH fr_CH Francs/Suiza hr hr_HR Croata/Croacia hu hu_HU Hngaro/Hungra is is_IS Islands/Islandia it it_IT Italiano/Italia it_CH it_CH Italiano/Suiza iw iw_IL Hebreo/Israel ja ja_JP Japons/Japn ko ko_KR Coreano/Corea lt lt_LT Lituano/Lituania lv lv_LV Letn/Letonia mk mk_MK Macedonio/Macedonia nl nl_NL Holands/Pases Bajos nl_BE nl_BE Flamenco/Blgica no no_NO_B Noruego/Noruega no_NO_NY no_NO_NY Noruego/Noruega, NY
184
Nombre de entorno nacional Nombre de entorno nacional Idioma/pas en JDK 1.1.6 ISO pl pl_PL Polaco/Polonia pt pt_PT Portugus/Portugal ro ro_RO Rumano/Rumana ru ru_RU Ruso/Rusia sh sh_SP Serbocroata/Serbia sk sk_SK Eslovaco/Eslovaquia sl sl_SI Esloveno/Eslovenia sq sq_AL Albans/Albania sr sr_SP Serbio/Serbia sv sv_SE Sueco/Suecia tr tr_TR Turco/Turqua uk uk_UA Ucraniano/Ucrania zh zh_CN Chino simplificado/China zh_TW zh_TW Chino tradicional/Taiwn [ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
185
Ejemplo: internacionalizacin de los datos especficos de entorno nacional con la clase java.util.ResourceBundle
Este ejemplo muestra cmo pueden utilizarse los entornos nacionales junto con paquetes de recursos para internacionalizar las series del programa. Para que el programa ResourceBundleExample funcione como se pretende, se necesitan los archivos de propiedades siguientes: Contenido de RBExample.properties Hello.text=Hello Contenido de RBExample_de.properties Hello.text=Guten Tag Contenido de RBExample_fr_FR.properties Hello.text=Bonjour Ejemplo 1: ensea a utilizar la clase java.util.ResourceBundle para internacionalizar los datos especficos de entorno nacional
186
//********************************* // Archivo: ResourceBundleExample.java //********************************* import java.util.*; public class ResourceBundleExample { public static void main(String args[]) throws MissingResourceException { String resourceName = RBExample; ResourceBundle rb; // Entorno nacional por omisin rb = ResourceBundle.getBundle(resourceName); System.out.println(Default : + rb.getString(Hello + .text)); // Se solicita un paquete de recursos con un entorno nacional // especificado de manera explcita rb = ResourceBundle.getBundle(resourceName, Locale.GERMANY); System.out.println(German : + rb.getString(Hello + .text)); // No existe ningn archivo de propiedades para China en este // ejemplo... se utilizar el valor por omisin rb = ResourceBundle.getBundle(resourceName, Locale.CHINA); System.out.println(Chinese : + rb.getString(Hello + .text)); // He aqu otra manera de hacerlo... Locale.setDefault(Locale.FRANCE); rb = ResourceBundle.getBundle(resourceName); System.out.println(French : + rb.getString(Hello + .text)); // No existe ningn archivo de propiedades para China en este // ejemplo... se utilizar el valor por omisin, que ahora es // fr_FR. rb = ResourceBundle.getBundle(resourceName, Locale.CHINA); System.out.println(Chinese : + rb.getString(Hello + .text)); } }
187
188
Captulo 11. Ajustar el rendimiento de los programas Java con AS/400 Developer Kit para Java
A la hora de construir una aplicacin Java para AS/400, debe tomar en consideracin diversos aspectos del rendimiento de las aplicaciones Java. He aqu algunos enlaces con informacin detallada y sugerencias para obtener un rendimiento mejor: v Utilice el mandato Crear programa Java (CRTJVAPGM) antes de ejecutar archivos de clase Java, archivos JAR o archivos ZIP con el fin de mejorar el rendimiento de ejecucin del cdigo Java. v Cambie los niveles de optimizacin para conseguir el mejor rendimiento de transformacin. v Establezca con cuidado los valores a fin de que el rendimiento de la recogida de basura sea ptimo. v Utilice mtodos nativos slo para iniciar funciones del sistema que sean relativamente de largo alcance y que no estn disponibles directamente en Java. v Utilice la opcin -o de javac en tiempo de compilacin para realizar la incorporacin de mtodos y mejorar significativamente el rendimiento de las llamadas a mtodos. v Utilice excepciones Java en aquellos casos que no forman parte del flujo normal a travs de la aplicacin. Para localizar los problemas de rendimiento en los programas Java, utilice las herramientas indicadas a continuacin junto con el explorador de rendimiento (PEX): v Con la mquina virtual Java de AS/400, se pueden recoger eventos de rastreo Java. v Para determinar el tiempo que se invierte en cada uno de los mtodos Java, utilice rastreos de llamadas Java. v La funcin de perfilado Java localiza el tiempo de CPU relativo que se invierte en cada uno de los mtodos Java y las funciones del sistema que utiliza el programa. v Utilice Java Performance Data Collector para proporcionar informacin de perfil sobre los programas que se ejecutan en AS/400. Cualquier sesin de trabajo puede iniciar y finalizar PEX. Normalmente, los datos se recogen a nivel de todo el sistema y pertenecen a todos los trabajos del sistema, incluidos los programas Java. En ocasiones, puede resultar necesario iniciar y detener la recogida de rendimiento desde dentro de una aplicacin Java. Esto reduce el tiempo de recogida y puede reducir el gran volumen de datos que normalmente se genera con un rastreo de llamada/retorno. PEX no puede ejecutarse desde dentro de una hebra Java. Para iniciar y detener una recogida, es necesario escribir un mtodo nativo que se comunique con un trabajo independiente por medio de una cola o de memoria compartida. A continuacin, el segundo trabajo inicia y detiene la recogida en el momento oportuno. Adems de los datos de rendimiento a nivel de aplicacin, se pueden utilizar las herramientas de rendimiento a nivel de sistema AS/400. Estas herramientas notifican las estadsticas en base a las hebras Java.
189
Para obtener ejemplos de informes PEX, consulte la publicacin Performance Tools/400, SC41-4340.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
190
hallar ms informacin sobre la manera de habilitar e inhabilitar las diversas formas de optimizacin. Por ejemplo, podra intentar crear primero el programa utilizando OPTIMIZE(40) LICOPT(NoPreresolveExtRef). Si la aplicacin contiene llamadas sin salida a clases que no estn disponibles, este valor de LICOPT permite que el programa se ejecute sin problemas. Para determinar a qu nivel de optimizacin se han creado los programas Java, puede utilizar el mandato Visualizar programa Java (DSPJVAPGM). Para cambiar el nivel de optimizacin del programa Java, utilice el mandato Crear programa Java (CRTJVAPGM).
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Captulo 11. Ajustar el rendimiento de los programas Java con AS/400 Developer Kit para Java
191
192
193
v Los eventos del sistema sobre los que desea recoger informacin del sistema Nota: si la salida que desea es de tipo java_g -prof y sabe cul es el nombre concreto del trabajo del programa Java, es preferible que la definicin de PEX sea *STATS en lugar de *TRACE. He aqu un ejemplo de definicin *STATS: ADDPEXDFN DFN(DEFINICIN) JOB(*ALL/SUID/QJVACMDSRV) DTAORG(*HIER) TEXT(la definicin stats) Esta definicin *STATS no obtiene todos los eventos Java en ejecucin. Slo se perfilan los eventos Java que se hallan en su sesin Java. Esta modalidad de funcionamiento puede incrementar el tiempo que se tarda en ejecutar el programa Java. He aqu un ejemplo de definicin de *TRACE: ADDPEXDFN DFN(DEFINICIN) TYPE(*TRACE) JOB(*ALL) TRCTYPE(*SLTEVT) SLTEVT(*YES) PGMEVT(*JVAENTRY *JVAEXIT). Esta definicin *TRACE recoge los eventos de entradas y salidas Java de cualquier programa Java del sistema que cree con ENBPRFRCOL *ENTRYEXIT. Esto hace que el anlisis de este tipo de recogida se realice con ms lentitud que en el caso de un rastreo *STATS, en funcin de cuntos eventos de programa Java se tengan y de cul sea la duracin de la recogida de datos de PEX. 2. Habilite *JVAENTRY y *JVAEXIT dentro de la categora de eventos de programa de la definicin de PEX, de manera que PEX reconozca las entradas y salidas Java. Nota: Si est ejecutando el cdigo Java mediante el compilador Just-in-time (JIT), no habilita la entrada y salida como lo hara si utilizara el mandato CRTJVAPGM para la ejecucin directa. En lugar de ello, JIT genera cdigo con ganchos de entrada y salida cuando se utiliza la propiedad del sistema os400.enbprfcol. 3. Prepare el programa Java para que notifique los eventos de programa a AS/400 Performance Data Collector. Para ello, puede utilizar el mandato Crear programa Java (CRTJVAPGM) en cualquier programa Java sobre el que desee notificar datos de rendimiento. Debe crear el programa Java utilizando el parmetro ENBPFRCOL(*ENTRYEXIT). Nota: debe repetir este paso para todos los programas Java sobre los que desee recoger datos de rendimiento. Si no lo hace, PEX no recoger ningn dato de rendimiento y, al ejecutar la herramienta Java Performance Data Converter (JPDC), no se generar ninguna salida. 4. Inicie la recogida de datos de PEX con el mandato Arrancar explorador de rendimiento (STRPEX). 5. Ejecute el programa que desea analizar. Este programa no debe estar en un entorno de produccin. Generar un volumen elevado de datos en un espacio corto de tiempo. Debe limitar el tiempo de recogida a cinco minutos. Un programa Java que se ejecute durante ese tiempo genera muchos datos de sistema PEX. Si se recogen demasiados datos, es necesario un tiempo demasiado largo para procesarlos. 6. Finalice la recogida de datos de PEX con el mandato Finalizar explorador de rendimiento (ENDPEX). Nota: si no es la primera vez que ha finalizado la recogida de datos de PEX, debe especificar *YES como archivo de sustitucin o, de lo contrario, no se guardarn los datos. 7. Ejecute la herramienta JPDC.
194
8. Conecte el directorio del sistema de archivos integrado con el visor que prefiera: java_g -prof o Jinsight. Puede copiar este archivo desde AS/400 y utilizarlo como entrada de cualquier herramienta de perfilado que considere oportuna.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Captulo 11. Ajustar el rendimiento de los programas Java con AS/400 Developer Kit para Java
195
Nota: para recoger datos de PEX mientras se ejecuta en AS/400 la aplicacin Java especificada, debe seguir los procedimientos de recogida de datos de AS/400 PEX oportunos. Debe establecer una definicin de PEX que defina la entrada y la salida de un programa o un procedimiento de recogida y almacenamiento. Para obtener detalles acerca de cmo recoger datos PEX y establecer una definicin de PEX, consulte la publicacin Performance Tools/400, SC41-4340. Si desea obtener informacin sobre la manera de ejecutar JPDC, consulte Ejecutar Java Performance Data Converter. Para iniciar el programa JPDC, puede utilizar la interfaz de lnea de mandatos Qshell o el mandato Ejecutar Java (RUNJVA).
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
196
2. Entre com.ibm.as400.jpdc.JPDC en la lnea del parmetro de clase. 3. Entre general defpex midir/miarch midirebdr en la lnea de parmetro. 4. Entre /QIBM/ProdData/Java400/ext/JPDC.jar en la lnea del parmetro de va de acceso de clases. Nota: puede omitir la va de acceso de clases si la serie /QIBM/ProdData/Java400/ext/JPDC.jar est en la variable de entorno CLASSPATH. Para aadir esta serie a la variable de entorno CLASSPATH, puede utilizar el mandato Aadir variable de entorno (ADDENVVAR), Cambiar variable de entorno (CHGENVVAR) o Trabajar con variable de entorno (WRKENVVAR). Con el entorno Qshell: 1. Entre el mandato Arrancar Qshell (STRQSH) para iniciar el intrprete Qshell. 2. Entre lo siguiente en la lnea de mandatos:
java -classpath /QIBM/ProdData/Java400/ext/JPDC.jar com.ibm.as400/jpdc/JPDC jiinsight pexdfn mydir/myfile myrdbdire
Nota: puede omitir la va de acceso de clases si se ha aadido la serie /QIBM/ProdData/Java400/ext/JPDC.jar al entorno actual. Para aadir esta serie al entorno actual, puede utilizar el mandato ADDENVVAR, CHGENVVAR o WRKENVVAR. Para obtener informacin previa, consulte el apartado Ejecucin de Java Performance Data Converter .
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Captulo 11. Ajustar el rendimiento de los programas Java con AS/400 Developer Kit para Java
197
198
Captulo 12. Depuracin de programas utilizando AS/400 Developer Kit para Java
Si necesita depurar programas Java, seleccione una de las siguientes opciones: v Depurar un programa Java v Depurar programas Java y de mtodos nativos v Depurar un programa Java desde otra pantalla v Depurar servlets Cuando se depura un programa Java, ste se ejecuta en realidad dentro de la mquina virtual Java en un trabajo inmediato de proceso por lotes (BCI). El cdigo fuente aparece en la pantalla interactiva, pero el programa no se ejecuta en ella, si no en el otro trabajo, que es un trabajo al que se da servicio. Cuando finaliza el programa Java, finaliza tambin el trabajo al que se da servicio y se visualiza un mensaje en el que se indica que el trabajo al que se ha dado servicio ha finalizado. La interfaz entre los dos trabajos se establece al especificar la opcin *DEBUG en el mandato Ejecutar Java (RUNJVA). Para obtener ms informacin acerca del depurador del sistema, consulte la publicacin ILE C Programmers Guide, SC09-2515 en lnea.
[ Pgina de presentacin de Information Center | Comentarios ]
y la informacin de ayuda
[ Legal | Glosario de AS/400 ]
199
apartado Establecer puntos de interrupcin. Si desea obtener informacin ms detallada sobre la funcin de recorrido, consulte Recorrer los programas Java para depurarlos. Nota: mientras utiliza los puntos de interrupcin y el recorrido, compruebe el flujo lgico del programa Java y, a continuacin, vea las variables y modifquelas segn convenga.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Nota: si no est autorizado a utilizar el mandato Arrancar trabajo de servicio (STRSRVJOB), se har caso omiso de OPTION(*DEBUG). Para ver las pantalla de depuracin, consulte Pantallas iniciales de depuracin de programas Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Ms...
200
| Depuracin . . . | | F3=Finalizar programa F6=Aadir/Borrar punto interrupcin | F11=Visualizar variable F12=Reanudar F24=Ms teclas | ++
| | F10=Recorrer | | |
v Pulse F14 (Trabajar con lista de mdulos). v Aparece la pantalla Trabajar con lista de mdulos. Puede aadir otras clases y otros programas que depurar entrando la opcin 1 (Aadir programa). Para visualizar el fuente de los mismos, utilice la opcin 5 (Visualizar fuente del mdulo).
++ | Trabajar con Lista de Mdulos | Sistema: AS400 | Teclee opciones, pulse Intro. | 1=Aadir programa 4=Eliminar programa 5=Visualizar fuente del mdulo | 8=Trabajar con puntos de interrupcin de mdulo | | Opc Progr/mdulo Biblioteca Tipo | *LIBL *SRVPGM | HELLOD *CLASS Seleccionado | | | | | | | | | | Final | Mandato | ===> | F3=Salir F4=Solicitud F5=Renovar F9=Recuperar F12=Cancelar | F22=Visualizar nombre de archivo de clase | ++ | | | | | | | | | | | | | | | | | | | | | | | |
v Cuando aada una clase para depurar, puede que necesite entrar un nombre de clase calificado por paquete cuya longitud supere la del campo de entrada Programa/mdulo. Para entrar un nombre de mayor longitud, siga estos pasos: 1. Entre la opcin 1 (Aadir programa). 2. Deje en blanco el campo Programa/mdulo. 3. Deje el campo Biblioteca como *LIBL. 4. Entre *CLASS en Tipo. 5. Pulse Intro. 6. Se visualiza una pantalla emergente, en la que tiene ms espacio para especificar el nombre de archivo de clase calificado por paquete.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
201
1. Site el cursor en la lnea de cdigo en la que desee establecer un punto de interrupcin. 2. Pulse F6 (Aadir/Borrar punto de interrupcin) para establecer el punto de interrupcin. 3. Pulse F12 (Reanudar) para ejecutar el programa. Nota: justo antes de ejecutarse la lnea de cdigo en la que est establecido el punto de interrupcin, se visualizar el fuente del programa para indicar que se ha llegado al punto de interrupcin.
++ | Visualizar Fuente Mdulo | |Hebra actual: 00000019 Hebra detenida: 00000019 |Nombre archivo clase: Hellod |35 public static void main(String[] args) |36 { |37 int i,j,h,B[],D[][]; |38 Hellod A=new Hellod(); |39 A.myHellod = A; |40 Hellod C[]; |41 C = new Hellod[5]; |42 for (int counter=0; counter<2; counter++) { |43 C[counter] = new Hellod(); |44 C[counter].myHellod = C[counter]; |45 } |46 C[2] = A; |47 C[0].myString = null; |48 C[0].myHellod = null; | |49 A.method1(); |Depuracin . . . | |F3=Finalizar programa F6=Aadir/Borrar punto interrupcin |F11=Visualizar variable F12=Reanudar F24=Ms teclas |Se ha aadido el punto de interrupcin a la lnea 41. ++ | | | | | | | | | | | | | | | | | | | | | | | | |
F10=Recorrer
Cuando llegue a un punto de interrupcin, si desea establecer puntos de interrupcin a los que se llegue slo dentro de la hebra actual, utilice el mandato TBREAK. Para obtener ms informacin acerca de los mandatos del depurador del sistema, consulte la publicacin ILE C Programmers Guide, SC09-2515 informacin de ayuda en lnea. y la
Si desea obtener informacin sobre la evaluacin de variables cuando un programa detiene su ejecucin en un punto de interrupcin, consulte Evaluar variables en programas Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
202
Cuando aparezca el fuente del programa por primera vez, ya puede iniciar el recorrido. El programa se detendr antes de ejecutar la primera sentencia. Pulse F10 (Recorrer). Siga pulsando F10 (Recorrer) para recorrer el programa. Pulse F22 (Recorrer todo) para recorrer cualquier funcin a la que llame el programa. Tambin puede iniciar el recorrido en cualquier momento en que se llegue a un punto de interrupcin. Si desea obtener informacin sobre el establecimiento de puntos de interrupcin, consulte el apartado Establecer puntos de interrupcin.
++ | Visualizar Fuente Mdulo | |Hebra actual: 00000019 Hebra detenida: 00000019 |Nombre archivo clase: Hellod |35 public static void main(String[] args) |36 { |37 int i,j,h,B[],D[][]; |38 Hellod A=new Hellod(); |39 A.myHellod = A; |40 Hellod C[]; |41 C = new Hellod[5]; |42 for (int counter=0; counter<2; counter++) { |43 C[counter] = new Hellod(); |44 C[counter].myHellod = C[counter]; |45 } |46 C[2] = A; |47 C[0].myString = null; |48 C[0].myHellod = null; |49 A.method1(); |Depuracin . . . | |F3=Finalizar programa F6=Aadir/Borrar punto interrupcin |F11=Visualizar variables F12=Reanudar F24=Ms teclas |Recorrido completado en la lnea 42 de la hebra 00000019 ++ | | | | | | | | | | | | | | | | | | | | | | | |
F10=Recorrer
Para detener el recorrido y proseguir con la ejecucin del programa, pulse F12 (Reanudar). Para obtener ms informacin acerca de la accin de recorrer, consulte la publicacin ILE C Programmers Guide, SC09-2515 en lnea. y la informacin de ayuda
Si desea obtener informacin sobre la evaluacin de variables cuando un programa detiene su ejecucin en una parte del recorrido, consulte Evaluar variables en programas Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Captulo 12. Depuracin de programas utilizando AS/400 Developer Kit para Java
203
variable. Para obtener ms informacin acerca de las variaciones del mandato EVAL, consulte la publicacin ILE C Programmers Guide, SC09-2515 informacin de ayuda en lnea. y la
Cuando repase la variables de un programa Java, tenga presente lo siguiente: v Si evala una variable que es una instancia de una clase Java, la primera lnea de la pantalla muestra el tipo de objeto de que se trata. Tambin muestra el identificador del objeto. A continuacin de la primera lnea de la pantalla, se visualiza el contenido de cada uno de los miembros de datos del objeto. Si la variable es nula, la primera lnea de la pantalla indica que lo es. El contenido de cada uno de los miembros de datos (de un objeto nulo) se muestra por medio de asteriscos. v Si evala una variable que es un objeto de tipo serie Java, se visualiza el contenido de la serie. Si la serie es nula, se visualiza null. v No se pueden cambiar las variables que son de tipo serie. v Si evala una variable que es una matriz, se visualiza ARR seguido del identificador de la matriz. Para evaluar los elementos de la matriz, puede utilizar un subndice del nombre de variable. Si la matriz es nula, se visualiza null. v No se pueden cambiar las variables que son de tipo matriz. Se puede cambiar un elemento de una matriz si no se trata de una matriz de series o de objetos. v En el caso de las variables de tipo matriz, se puede especificar nombrematriz.length para ver cuntos elementos hay en la matriz. v Si desea ver el contenido de una variable que es un miembro de datos de una clase, puede especificar variableclase.nombremiembro. v Si intenta evaluar una variable antes de que se haya inicializado la misma, pueden ocurrir dos cosas. O bien aparece un mensaje segn el cual la variable no est disponible para su visualizacin o bien se muestra el contenido de la variable no inicializada, que podra ser un valor extrao.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
204
5. Pulse F12 (Reanudar) para ejecutar el programa. Nota: cuando se llega a un punto de interrupcin en el programa de servicio, se detiene la ejecucin del programa y se visualiza el fuente del programa de servicio.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
205
5. Entre el mandato Finalizar trabajo de servicio (ENDSRVJOB). En Variable de entorno QIBM_CHILD_JOB_SNDINQMSG hallar ms informacin sobre esta variable, que controla si el trabajo BCI se espera antes de llamar a la mquina virtual Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Para ver este mensaje, entre SYSREQ y seleccione la opcin 4. El trabajo BCI espera hasta usted entre una respuesta al mensaje. Si la respuesta es (G), inicia la mquina virtual Java. Antes de responder al mensaje, puede establecer puntos de interrupcin en el programa *SRVPGM o *PGM al que llamar el trabajo BCI. Nota: no se pueden establecer puntos de interrupcin en una clase Java porque en este momento todava no se ha iniciado la mquina virtual Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Depuracin de servlets
La depuracin de servlets es ms complicada que la depuracin de aplicaciones Java habituales, dado que los servlets se ejecutan en la ejecucin Java del servidor IBM HTTP. Para depurar un servlet, siga estos pasos: 1. Utilice el mandato javac -g del intrprete Qshell para compilar el servlet. 2. Copie el cdigo fuente (archivo .java) y el cdigo compilado (archivo .class) en /QIBM/ProdData/Java400. 3. Ejecute el mandato Crear programa Java (CRTJVAPGM) en el archivo .class utilizando el nivel de optimizacin 10, OPTIMIZE(10). 4. Inicie el servidor. 5. Ejecute el mandato Iniciar trabajo de servicio (STRSRVJOB) en el trabajo donde se ejecutar el servlet. 6. Especifique STRDBG CLASS(myServlet), donde myServlet es el nombre del servlet. Debe visualizarse el fuente. 7. Establezca un punto de interrupcin en el servlet y pulse F12.
206
8. Ejecute el servlet. Cuando el servlet alcance el punto de interrupcin, puede continuar depurando.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Captulo 12. Depuracin de programas utilizando AS/400 Developer Kit para Java
207
208
209
descripcin de trabajo QDFTJOBD especifica *NOLIST. Compruebe estos valores y cmbielos para que se genere un archivo de anotaciones para el trabajo BCI. Para generar un archivo de anotaciones para el trabajo que ha ejecutado el mandato Ejecutar Java (RUNJVA): 1. Entre SIGNOFF *LIST. 2. A continuacin, vuelva a iniciar la sesin. 3. Entre el mandato Trabajar con archivos en spool (WRKSPLF) en la lnea de mandatos de AS/400. 4. Vaya al final de la lista. 5. Busque un archivo llamado QPJOBLOG. 6. Pulse F11. 7. Verifique que la fecha y la hora coincidan con la fecha y la hora en que ha entrado el mandato de fin de sesin. Nota: si la fecha y la hora no coinciden con la fecha y la hora en que usted ha finalizado la sesin, siga buscando en la lista de trabajos sometidos. Intente localizar un archivo de anotaciones llamado QJVACMDSRV cuya fecha y hora coincida con el momento en que ha finalizado la sesin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
Si es posible, guarde los archivos fuente de las clases Java implicadas en el problema. Le servirn de ayuda a IBM a la hora de reproducir y analizar el problema. 4. Guarde los programas de servicio que contienen los mtodos nativos que se necesitan para ejecutar el programa. 5. Guarde los archivos de datos que se necesitan para ejecutar el programa Java. 6. Aada una explicacin completa de cmo reproducir el problema. Debe incluir en ella: v El valor de la variable de entorno CLASSPATH. v La descripcin del mandato Java ejecutado. v Una indicacin de cmo debe responderse a la entrada que necesite el programa. 7. Incluya las anotaciones del cdigo interno vertical bajo licencia (VLIC) que se hayan realizado alrededor del momento en que se ha producido la anomala.
210
8. Aada los archivos de anotaciones del trabajo interactivo y del trabajo BCI en el que se ejecutaba la mquina virtual Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
El programa bajo licencia AS/400 Developer Kit para Java incluye informacin para la resolucin de problemas. Si usted cree que existe un defecto potencial en la API de AS/400 Developer Kit para Java, ser necesario que suministre un programa simple que demuestre la existencia del error.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]
211
212
Captulo 14. Ejemplos de cdigo para AS/400 Developer Kit para Java
Mandatos CL: v CRTJVAPGM v CHGJVAPGM v RUNJVA v DLTJVAPGM DMPJVM v v DSPJVAPGM Otros lenguajes de programacin: v Llamar a otro programa Java v Llamar a un programa CL v Llamar a un mandato CL v Corrientes de entrada y de salida v Sockets v Llamadas a Java desde C v Llamadas a Java desde RPG v Invocation API JDBC: v Conectarse v Interfaz Statement v v v v v v Interfaz PreparedStatement Interfaz CallableStatement Interfaz ResultSet Interfaz DatabaseMetaData Aplicacin JDBC Intercalar sentencias SQL
SQLJ: v Intercalar sentencias SQL en la aplicacin Java AWT remoto: v Configurar AWT remoto Capa de sockets seguros: v Fbricas de sockets v Fbricas de sockets de servidor v SSL v Servidor de Capa de sockets seguros Internacionalizacin: v DateFormat v NumberFormat v ResourceBundle
Copyright IBM Corp. 1998, 1999
213
214