Anda di halaman 1dari 224

AS/400 Developer Kit para Java

AS/400 Developer Kit para Java

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

Captulo 2. Cmo empezar con AS/400 Developer Kit para Java . . . . . . . . 7


Instalar AS/400 Developer Kit para Java . . . . . 7 Soporte para varios Java Development Kits (JDK) 8 Configuracin de AS/400 para AS/400 Developer Kit para Java . . . . . . . . . . . . . . . 9 Ejecutar el primer programa Java Hello World. . . 10 Crear, compilar y ejecutar un programa Java Hello World . . . . . . . . . . . . . . . . 10 Crear y ejecutar programas Java con AS/400 Developer Kit para Java . . . . . . . . . . 11 Va de acceso de clases Java . . . . . . . . 12 Seleccionar la modalidad a utilizar al ejecutar un programa Java . . . . . . . . . . . . 16 Crear y editar archivos fuente Java . . . . . . 17 Bajar e instalar paquetes Java en AS/400 . . . . 18 Compatibilidad de release a release . . . . . . 20

. . . . . . . . . . . . .

Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java . . 61


Herramientas Java soportadas por AS/400 Developer Kit para Java . . . . . . . . . . Herramienta ajar de Java . . . . . . . . . Herramienta appletviewer Java . . . . . . . Ejecucin de la herramienta appletviewer de Java con Abstract Window Toolkit remoto . . . . . Herramienta extcheck Java . . . . . . . . La herramienta jar Java . . . . . . . . . Herramienta jarsigner Java . . . . . . . . La herramienta javac Java . . . . . . . . La herramienta javadoc Java. . . . . . . . Herramienta javah Java . . . . . . . . . Herramienta javakey Java . . . . . . . . La herramienta javap Java . . . . . . . . Herramienta keytool Java. . . . . . . . . Herramienta native2ascii Java . . . . . . . Herramienta policytool Java . . . . . . . . Herramienta rmic Java. . . . . . . . . . Herramienta rmid Java . . . . . . . . . La herramienta rmiregistry Java . . . . . . La herramienta serialver Java . . . . . . . Herramienta tnameserv Java. . . . . . . . El mandato java de Qshell . . . . . . . . Mandatos CL a los que da soporte Java . . . . . El mandato Crear programa Java (CRTJVAPGM) Mandato Cambiar programa Java (CHGJVAPGM) El mandato JAVA . . . . . . . . . . . El mandato Ejecutar Java (RUNJVA) . . . . . 61 62 62 63 63 63 64 64 65 65 66 66 67 67 67 68 68 68 68 69 69 70 71 80 85 85

Captulo 3. Conceptos de AS/400 Developer Kit para Java . . . . . . . 23


Transformador Java. . . . . . . . . . . . Recogida de basura avanzada de AS/400 Developer Kit para Java . . . . . . . . . . . . . . Recogida de basura Java . . . . . . . . . Entorno de ejecucin Java de AS/400 . . . . . Abstract Window Toolkit remoto de AS/400 Developer Kit para Java . . . . . . . . . . Class Broker para Java de AS/400 Developer Kit para Java . . . . . . . . . . . . . . . Compilador Just-In-Time . . . . . . . . . . Comparacin entre el compilador Just-In-Time y la ejecucin directa . . . . . . . . . . . Comparacin entre el entorno de lenguajes integrados y Java . . . . . . . . . . . . Ejecutar Java en un trabajo de proceso por lotes . . Clases, paquetes y directorios Java. . . . . . . Propiedades de sistema Java. . . . . . . . . Propiedades del sistema Java para Java Development Kit (JDK) 1.1.8. . . . . . . . 25 26 27 27 28 29 29 29 30 31 31 33 33

Copyright IBM Corp. 1998, 1999

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

Captulo 5. Utilizacin de Java con otros lenguajes de programacin . . . 103


Utilizacin de Java Native Interface para emplear mtodos nativos . . . . . . . . . . . Consideraciones en torno a las hebras y los mtodos nativos Java . . . . . . . . . Series en mtodos nativos . . . . . . . Ejemplos: utilizacin de Java Native Interface para emplear mtodos nativos. . . . . . Utilizacin de java.lang.Runtime.exec() . . . . Ejemplo: llamar a otro programa Java con java.lang.Runtime.exec() . . . . . . . . Ejemplo: llamar a un programa CL con java.lang.Runtime.exec() . . . . . . . . Ejemplo: Llamar a un mandato CL con java.lang.Runtime.exec() . . . . . . . . Ejemplos de comunicacin entre procesos . . . Utilizacin de sockets para la comunicacin entre procesos . . . . . . . . . . . Utilizacin de corrientes de entrada y de salida para comunicacin entre procesos . . . . Llamadas a Java desde otros lenguajes . . . Java Invocation API . . . . . . . . . . Funciones de Invocation API . . . . . . Soporte para varias mquinas virtuales Java . Ejemplo: Java Invocation API . . . . . . . 104 . 106 . 107 . 109 . 113 . 114 . 115 . 116 . 117 . 117 . . . . . . 120 121 123 123 125 126

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

139 139 140 140 140 141

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

149 153 154

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

133 134 134 136 137 137 137 138 138

Captulo 9. Seguridad Java . . . . . 171


El modelo de seguridad Java . . . . . . . . 171 Conseguir que una aplicacin Java sea segura con la capa de sockets seguros . . . . . . . . . 172

iv

AS/400 Developer Kit para Java

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 . . . . . . . .

. 173 . 174 . 175 . 176 . 179

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

192 193 193 193 195 195 196

Captulo 10. Crear un programa Java internacionalizado . . . . . . . . . 183


Entornos nacionales Java . . . . . . . . . Ejemplo: internacionalizacin de las fechas con la clase java.util.DateFormat . . . . . . . . . Ejemplo: internacionalizacin de las presentaciones numricas con la clase java.util.NumberFormat . . Ejemplo: internacionalizacin de los datos especficos de entorno nacional con la clase java.util.ResourceBundle. . . . . . . . . . 183 185 186

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

AS/400 Developer Kit para Java

Captulo 1. AS/400 Developer Kit para Java

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 ]

Imprimir este tema


Puede ver o bajar una versin PDF de este documento a efectos de visualizacin o impresin. Debe tener instalado Adobe(R) Acrobat(R) Reader para ver archivos PDF. Puede bajar una copia desde Adobe .

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.

AS/400 Developer Kit para Java

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 ]

Novedades de V4R5 para AS/400 Developer Kit para Java


En este tema se destacan los cambios efectuados en AS/400 Developer Kit para Java en V4R5. Se destacan los cambios efectuados en Java Development Kit (JDK) 1.1.8 y Java 2 Software Development Kit (J2SDK), Standard Edition, versin 1.2. Si ya est familiarizado con esta informacin, puede utilizar los enlaces con la versin que elija y saber cules son las nuevas actualizaciones: v Java Development Kit (JDK) 1.1.8 v Java 2 Software Development Kit (J2SDK), Standard Edition, versin 1.2 Cmo ver en qu punto de la informacin se encuentra: Los pequeos enlaces situados al principio de cada pgina muestran en qu punto de la informacin se encuentra. Estos enlaces se visualizan en formato de estructura de directorios. Para ver dnde se encuentra, lea a travs de los enlaces. Por ejemplo, si observa el principio de esta pgina, ver: AS/400 Developer Kit para Java \ Novedades Estos enlaces le indican que se encuentra en la informacin Novedades bajo el tema AS/400 Developer Kit para Java.

Cmo saber cules son las novedades o los cambios:


En esta informacin se utiliza lo siguiente a modo de ayuda para indicar dnde se han realizado cambios tcnicos: v La imagen modificada. v La imagen modificada. seala el lugar en el que empieza la informacin nueva o seala el lugar en el que acaba la informacin nueva o
[ Legal | Glosario de AS/400 ]

[ Pgina de presentacin de Information Center | Comentarios ]

Novedades de V4R5 para Java Development Kit (JDK) 1.1.8


En este tema se destacan los cambios efectuados en AS/400 Developer Kit para Java en V4R5 para Java Development Kit (JDK) 1.1.8. Cmo empezar: v Si desea obtener informacin sobre los JDK a los que da soporte IBM, consulte Soporte a varios JDK.

Captulo 1. AS/400 Developer Kit para Java

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.

AS/400 Developer Kit para Java

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.

Captulo 1. AS/400 Developer Kit para Java

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 ]

AS/400 Developer Kit para Java

Captulo 2. Cmo empezar con AS/400 Developer Kit para Java


Si todava no ha utilizado AS/400 Developer Kit para Java, siga estos pasos para instalarlo, configurarlo y practicar la ejecucin de un programa Java Hello World sencillo. 1. Si ya est familiarizado con la informacin de AS/400 Developer Kit para Java, consulte Novedades, donde hallar enlaces con la informacin y las actualizaciones de productos ms recientes. 2. Instalar AS/400 Developer Kit para Java. 3. Configurar el sistema. 4. Si esta informacin es nueva para usted y todava no ha utilizado AS/400 Developer Kit para Java, consulte Ejecutar el primer programa Java Hello World. En este tema se ilustran dos mtodos de ejecucin de un programa Java Hello World sencillo con AS/400 Developer Kit para Java. Es una forma prctica de ver si ha instalado correctamente AS/400 Developer Kit para Java. 5. Ahora ya est preparado para crear, compilar y ejecutar un programa Java Hello World propio. Si desea saber cul es el procedimiento que debe seguir, consulte Crear, compilar y ejecutar un programa Java Hello World. 6. Si est interesado en crear ms aplicaciones Java propias, lea los temas siguientes: v En Crear y ejecutar programas se facilitan las instrucciones paso a paso para crear y ejecutar programas Java propios. v En Crear y editar archivos fuente Java se ensean tres maneras diferentes de crear y editar archivos fuente Java. v Bajar e instalar paquetes Java en AS/400 sirve de ayuda para utilizar los paquetes Java de una forma ms eficiente. En este tema se facilita informacin detallada referente a los paquetes con interfaz grfica de usuario (GUI), el sistema de archivos integrado y la distincin entre maysculas y minsculas, as como el manejo de archivos ZIP y JAR. v Compatibilidad de release a release proporciona informacin acerca de la compatibilidad de un release a otro.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Instalar AS/400 Developer Kit para Java


Instalar AS/400 Developer Kit para Java permite crear y ejecutar programas Java en AS/400. Para instalar AS/400 Developer Kit para Java: 1. Entre el mandato Ir a programa bajo licencia (GO LICPGM) en la lnea de mandatos. 2. Seleccione la opcin 11 (Instalar programas bajo licencia). 3. Elija la opcin 1 (Instalar) para el programa bajo licencia (LP) 5769-JV1 *BASE y seleccione la opcin que coincida con el Java Development Kit (JDK) que desee instalar. Si la opcin que desea instalar no figura en la lista, puede aadirla a la misma entrando la opcin 1 (Instalar) en el campo de opcin. Entre 5769JV1 en
Copyright IBM Corp. 1998, 1999

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 ]

Soporte para varios Java Development Kits (JDK)


AS/400 soporta varios Java Development Kits (JDK) y 2 SDK (J2SDK), Standard Edition, versin 1.2. AS/400 soporta la utilizacin de varios JDK simultneamente, pero slo a travs de varias mquinas virtuales Java. Una sola mquina virtual Java ejecuta un JDK especificado. Localice el JDK que usted utiliza, o que desea utilizar, y seleccione la opcin correspondiente para instalarlo. Puede instalar ms de un JDK a la vez. La propiedad del sistema java.version determina qu JDK debe ejecutarse. No obstante, si se cambia la propiedad del sistema java.version, el cambio no surte efecto una vez la mquina virtual Java est en marcha.
Opcin 1 2 3 4 JDK 1.1.6 1.1.7 1.2* 1.1.8 java.home java.version /QIBM/ProdData/Java400/jdk116/ 1.1.6 /QIBM/ProdData/Java400/jdk117/ 1.1.7 /QIBM/ProdData/Java400/jdk12/ 1.2 1.1.8 /QIBM/ProdData/Java400/jdk118/

* 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)

java -Djava.version=1.1.7 Hello java Hello

java -Djava.version=1.1.7 Hello

AS/400 Developer Kit para Java

Opcin 1 (1.1.6), Opcin 2 (1.1.7) y Opcin 3 (1.2)

java -Djava.version=1.2 Hello

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 ]

[ Pgina de presentacin de Information Center | Comentarios ]

Configuracin de AS/400 para AS/400 Developer Kit para Java


Una vez haya instalado AS/400 Developer Kit para Java en el AS/400, puede optar por configurar el sistema. Configuracin del huso horario Si los programas Java son sensibles a la hora, puede resultar necesario configurar el huso horario. Si el valor del sistema QUTCOFFSET (diferencia horaria universal coordinada) est establecido en su valor por omisin (+00:00), Java utilizar la hora del AS/400 como hora actual. El valor por omisin de la propiedad del sistema Java user.timezone es UTC. Si se da cualquiera de las siguientes circunstancias, se necesita el valor del sistema QUTCOFFSET y un entorno nacional actualizado: v Si QUTCOFFSET no est establecido en su valor por omisin y, por tanto, es sensible al huso horario. v Si el cdigo Java espera que la propiedad del sistema user.timezone tome como valor por omisin un valor distinto de UTC. v Si especifica la propiedad del sistema Java user.timezone al ejecutar el mandato java. La categora LC_TOD del entorno nacional contiene el campo tname, que debe establecerse en el mismo valor que coincida con el huso horario. Si desea obtener informacin detallada sobre la manera de crear un entorno nacional y de formatear el campo tname, consulte la publicacin AS/400 International Application Development, SC41-5603. Configuracin de las propiedades de sistema 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. Puede optar por utilizar los valores por omisin de las propiedades de sistema o bien por especificar un conjunto propio de valores de propiedad por omisin siguiendo estos pasos:
Captulo 2. Cmo empezar con AS/400 Developer Kit para Java

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 ]

Ejecutar el primer programa Java Hello World


Para poner en marcha el programa Java Hello World, puede hacerlo de cualquiera de las dos maneras siguientes: 1. Puede, simplemente, ejecutar el programa Java Hello World que se entrega con AS/400 Developer Kit para Java en el paquete com.ibm.as400.system. Para ejecutar el programa que se incluye: a. Compruebe que AS/400 Developer Kit para Java est instalado; para ello, entre el mandato Ir a programa bajo licencia (GO LICPGM). A continuacin, seleccione la opcin 10 (Visualizar programas bajo licencia instalados). Verifique que el programa bajo licencia 5769-JV1 *BASE y, como mnimo, una de las opciones figuren en la lista como instalados. b. Entre java com.ibm.as400.system.Hello en la lnea de mandatos del men principal de AS/400. Pulse Intro para ejecutar el programa Java Hello World. c. Si AS/400 Developer Kit para Java se ha instalado correctamente, en la pantalla de la Shell Java aparecer Hello World. Pulse F3 (Salir) o F12 (Salir) para volver a la pantalla de entrada de mandato. d. Si no se ejecuta la clase Hello World, compruebe si la instalacin se ha realizado satisfactoriamente o consulte Obtener soporte tcnico para AS/400 Developer Kit para Java, donde hallar informacin sobre el servicio tcnico. 2. Tambin puede ejecutar un programa Hello World propio. Si desea obtener ms informacin sobre la manera de crear un programa Java Hello World propio, consulte Crear, compilar y ejecutar un programa Java Hello World.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Crear, compilar y ejecutar un programa Java Hello World


Crear un programa Java Hello World sencillo es un buen punto de partida para familiarizarse con AS/400 Developer Kit para Java. Para crear, compilar y ejecutar un programa Hello World propio:

10

AS/400 Developer Kit para Java

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.

Captulo 2. Cmo empezar con AS/400 Developer Kit para Java

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 ]

Va de acceso de clases Java


La mquina virtual Java utiliza la va de acceso de clases Java para buscar las clases durante la ejecucin. Los mandatos y las herramientas Java la utilizan tambin para localizar las clases. La va de acceso de clases del sistema por omisin, la variable de entorno CLASSPATH, y el parmetro de mandato de va de acceso de clases determinan ambos en qu directorios se realiza la bsqueda cuando se desea hallar una clase determinada. Nota: En Java 2 Software Development Kit (J2SDK), Standard Edition, versin 1.2, la propiedad java.ext.dirs determina la va de acceso de clases para las ampliaciones que se van a cargar. Consulte el apartado Instalacin de ampliaciones para AS/400 Developer Kit para Java para obtener ms informacin. La va de acceso de clases del sistema por omisin la define el sistema y el usuario no puede cambiarla. En AS/400, la va de acceso de clases por omisin especifica dnde se encuentran las clases que forman parte de AS/400 Developer Kit, de AWT remoto, y otras clases del sistema. Para hallar cualquier otra clase en el sistema, debe especificar la va de acceso de clases en la que debe realizarse la bsqueda; para ello, utilice la variable de entorno CLASSPATH o el parmetro de va de acceso de clases. El parmetro de va de acceso de clases que se utilice en una herramienta o en un mandato prevalecer sobre el valor especificado en la variable de entorno CLASSPATH. Para trabajar con la variable de entorno CLASSPATH, utilice el mandato Trabajar con variable de entorno (WRKENVVAR). Desde la pantalla WRKENVVAR, se puede aadir o cambiar la variable de entorno CLASSPATH. Los mandatos Aadir variable de entorno (ADDENVVAR) y Cambiar variable de entorno (CHGENVVAR) aaden y cambian, respectivamente, la variable de entorno CLASSPATH. El valor de la variable de entorno CLASSPATH es una lista de nombres de va de acceso, separados por el signo de dos puntos (:), en los que se busca una clase determinada. Un nombre de va de acceso es una secuencia de cero o ms nombres de directorio. Estos nombres de directorio van seguidos del nombre del directorio,

12

AS/400 Developer Kit para Java

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

v Este mandato establece la variable CLASSPATH desde la lnea de mandatos:


ADDENVVAR ENVVAR(CLASSPATH) VALUE(.:/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

v La herramienta rmic v El mandato Ejecutar Java (RUNJVA)

Captulo 2. Cmo empezar con AS/400 Developer Kit para Java

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 ]

[ Pgina de presentacin de Information Center | Comentarios ]

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

AS/400 Developer Kit para Java

#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

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Instalacin de ampliaciones para AS/400 Developer Kit para Java


Las ampliaciones son paquetes de clases Java que pueden utilizarse para ampliar la funcionalidad de la plataforma central. Las ampliaciones se empaquetan en uno o ms archivos ZIP o JAR y se cargan en la mquina virtual Java mediante un cargador de clases de ampliacin. 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. Los archivos JAR de una ampliacin instalada se encuentran en el directorio QIBM/ProdData/Java400/ext. Si desea instalar una ampliacin, entre este mandato:
ADDLNKOBJ('/QIBM/ProdData/Java400/ext/extensionToInstall.jar') NEWLNK('/QIBM/UserData/Java400/ext/extensionToInstall.jar') LNKTYPE(*SYMBOLIC)

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:

Captulo 2. Cmo empezar con AS/400 Developer Kit para Java

15

MKDIR DIR('/home/username/ext') ADDLNKOBJ('/QIBM/ProdData/Java400/ext/extensionToInstall.jar') NEWLNK('/home/username/ext/extensionToInstall.jar') LNKTYPE(*SYMBOLIC) JAVA Hello PROP((java.ext.dirs '/home/username/ext'))

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Seleccionar la modalidad a utilizar al ejecutar un programa Java


Al ejecutar un programa Java, puede seleccionar la modalidad que desea utilizar. Puede elegir modalidad interpretada, ejecucin directa o compilacin Just-In-Time (JIT). Interpretado: Si elige ejecutar el programa Java en modalidad interpretada, el cdigo se verifica y se crea un objeto de programa Java para contener la forma preverificada del programa. Cada bytecode se interpreta en la ejecucin. Para obtener informacin acerca de la ejecucin del programa Java en modalidad interpretada, consulte el apartado correspondiente al mandato Ejecutar Java (RUNJVA). Ejecucin directa: Si elige ejecutar el programa Java utilizando la ejecucin directa, el cdigo se verifica y se crea un objeto de programa Java para contener la forma preverificada del programa. Se generan instrucciones de mquina para un mtodo durante la primera llamada a dicho mtodo, y se guardan para utilizarlas la prxima vez que se ejecute el programa. Tambin se comparte una copia para todo el sistema. Para obtener informacin acerca de la ejecucin del programa Java utilizando la ejecucin directa, consulte el apartado correspondiente al mandato Ejecutar Java (RUNJVA). Compilacin Just-In-Time (JIT): Si elige ejecutar el programa Java utilizando el compilador Just-In-Time, el cdigo se verifica y se crea un programa Java asociado para contener la forma preverificada del programa. Se generan instrucciones de mquina para un mtodo durante la primera llamada a dicho mtodo, y se guardan durante la ejecucin de la mquina virtual Java. Para utilizar JIT, es necesario establecer el valor del compilador en jitc. 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:

16

AS/400 Developer Kit para Java

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 ]

Crear y editar archivos fuente Java


Con Client Access: Los archivos fuente Java son archivos de texto ASCII del sistema de archivos integrado de AS/400.
Captulo 2. Cmo empezar con AS/400 Developer Kit para Java

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 ]

Bajar e instalar paquetes Java en AS/400


Para bajar, instalar y utilizar paquetes Java de una forma ms efectiva en AS/400, consulte lo siguiente: v Paquetes con interfaces grficas de usuario (pgina 18) v Distincin entre maysculas y minsculas y el sistema de archivos integrado (pgina 19) v Manejo de archivos ZIP y JAR (pgina 19) v Infraestructura de ampliaciones Java (pgina 20) Paquetes con interfaces grficas de usuario: Los programas Java que se utilizan con una interfaz grfica de usuario (GUI) requieren el uso de un dispositivo de presentacin con posibilidades de visualizacin grfica. Por ejemplo, se puede utilizar un PC, una estacin de trabajo tcnica o un network computer. AS/400 ofrece la funcin AWT (Abstract Window Toolkit) remoto. Esta funcin ejecuta aplicaciones en AS/400 utilizando para ello un completo abanico de funciones grficas en el dispositivo de pantalla TCP/IP

18

AS/400 Developer Kit para Java

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:

Captulo 2. Cmo empezar con AS/400 Developer Kit para Java

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 ]

Compatibilidad de release a release


Al igual que sucede con todos los programas Java, los archivos de clase son portables a los releases anteriores y futuros de AS/400 o de otras mquinas Java compatibles, respetando las limitaciones que pueda introducir Sun Microsystems, Inc. No obstante, los programas Java no son portables actualmente entre releases de AS/400, por lo que es necesario ejecutar el mandato Crear programa Java (CRTJVAPGM) con el fin de optimizar el archivo de clase, el archivo ZIP o el archivo JAR cuando se mueva el programa a otro AS/400 desde un release diferente. Los programas Java que pueden asociarse al archivo de clase, archivo ZIP o archivo JAR no son compatibles en sentido ascendente desde releases anteriores a V4R4. Debe ejecutar el mandato CRTJVAPGM en V4R4 para conseguir la mejor optimizacin al utilizar un archivo de clase, archivo ZIP o archivo JAR con un programa Java asociado desde un release anterior a V4R4. Utilice el mandato Visualizar programa Java (DSPJVAPGM) para determinar si tiene un programa Java asociado. Independientemente de ello, debe seguir ejecutando el mandato CRTJVAPGM aunque no exista un programa Java asociado procedente de un

20

AS/400 Developer Kit para Java

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 ]

Captulo 2. Cmo empezar con AS/400 Developer Kit para Java

21

22

AS/400 Developer Kit para Java

Captulo 3. Conceptos de AS/400 Developer Kit para Java


Conceptos de AS/400 Developer Kit para Java presenta todo aquello con lo que se debe estar familiarizado a la hora de utilizar AS/400 Developer Kit para Java. Esta informacin es especfica de AS/400. En Conceptos bsicos de Java se dan definiciones para quienes buscan detalles bsicos. Se trata de informacin general sobre Java y no es especfica del AS/400. Se facilita a modo de consulta rpida. Tambin hay informacin de consulta para Java Development Kit (JDK) de Sun Microsystems Inc. Conceptos de AS/400 Developer Kit para Java: 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 la programacin en Java para que usted pueda desarrollar aplicaciones propias para 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), y con frecuencia se suministran enlaces con dicha informacin. Entre las caractersticas nicas del diseo de AS/400 Developer Kit para Java cabe sealar: v La integracin de componentes fundamentales de la mquina virtual Java por debajo de la interfaz de mquina independiente de la tecnologa (TIMI). v Un transformador Java para la conversin de los bytecodes Java en instrucciones de lenguaje mquina RISC. v Implementaciones avanzadas y escalables de los procesos de recogida de basura, asignacin de objetos y sincronizacin. v La implementacin AWT remoto, que da soporte a las API java.awt. v Class Broker para Java, que puede utilizarse para servicios de interfaz grfica de usuario (GUI) de alto rendimiento. v Un compilador Just-In-Time (justo a tiempo) que mejora el rendimiento al compilar cdigo a medida que es necesario. AS/400 Developer Kit para Java no es un lenguaje del entorno de lenguajes integrados (ILE). Introduce en AS/400 un nuevo entorno de lenguajes construido sobre Java, ASCII, el sistema de archivos integrado y otros estndares del sector. AS/400 Developer Kit para Java da soporte a las herramientas comunes de JDK como, por ejemplo, javac, javadoc y jar. Tambin hay mandatos CL e interfaces de Operations Navigator con AS/400 Developer Kit para Java. Si busca la definicin de conceptos concretos de AS/400 Developer Kit para Java adems de informacin detallada, pulse en cualquiera de los enlaces siguientes: v En Ejecutar Java en un trabajo de proceso por lotes se explica cmo ejecutar programas Java en un trabajo de proceso por lotes utilizando el mandato Someter trabajo (SBMJOB).
Copyright IBM Corp. 1998, 1999

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

AS/400 Developer Kit para Java

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.

Captulo 3. Conceptos de AS/400 Developer Kit para Java

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 ]

Recogida de basura avanzada de AS/400 Developer Kit para Java


AS/400 Developer Kit para Java implementa un algoritmo avanzado de recogida de basura. Este algoritmo permite descubrir y recoger objetos inalcanzables sin que se produzcan pausas significativas en el funcionamiento del programa Java. Un recogedor concurrente descubre de manera cooperativa las referencias hechas a objetos en las hebras en ejecucin, en lugar de en una sola hebra. Muchos recogedores de basura son de detencin total. Esto significa que, en el punto en que se produce un ciclo de recogida, se detienen todas las hebras, excepto la que efecta la recogida de basura, mientras el recogedor de basura realiza su trabajo. Cuando esto sucede, los programas Java sufren una pausa y la capacidad multiprocesador que pueda tener la plataforma se malgasta por lo que a Java se refiere mientras el recogedor realiza su trabajo. El algoritmo de AS/400 no detiene nunca las hebras del programa sino que les permite seguir funcionando mientras el recogedor de basura efecta la tarea. Esto impide que se produzcan pausas y permite utilizar todos los procesadores mientras tiene lugar la recogida de basura. La recogida de basura se efecta de forma automtica tomando como base los parmetros especificados al iniciar la mquina virtual Java. Tambin puede iniciarse explcitamente bajo el control del programa Java utilizando el mtodo java.lang.Runtime.gc(). En Recogida de basura Java hallar la definicin bsica del concepto.
[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]

26

AS/400 Developer Kit para Java

Recogida de basura Java


La recogida de basura es el proceso por el cual se libera el almacenamiento que utilizan los objetos a los que ya no hace referencia un programa. Gracias a la recogida de basura, ya no es necesario que los programadores escriban cdigo, susceptible de sufrir errores, para liberar o suprimir de manera explcita los objetos. En muchas ocasiones, el resultado que da este cdigo son errores de programa que provocan escapes de memoria. El recogedor de basura detecta automticamente el objeto o grupo de objetos a los que ya no puede llegar el programa de usuario. Lo detecta porque ya no hay referencias al objeto en ninguna de las estructuras del programa. Una vez recogido un objeto, se puede asignar el espacio para otros usos. El entorno de ejecucin Java incluye un recogedor de basura que libera la memoria que ya no se utiliza. El recogedor de basura se ejecuta automticamente segn convenga. El recogedor de basura puede iniciarse tambin de forma explcita bajo el control del programa Java; para ello, debe utilizarse el mtodo java.lang.Runtime.gc(). En Recogida de basura avanzada de AS/400 Developer Kit para Java hallar informacin ms concreta.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Entorno de ejecucin Java de AS/400


El entorno de ejecucin Java se inicia cada vez que se entra el mandato Ejecutar Java (RUNJVA) o el mandato JAVA en la lnea de mandatos de AS/400. Dado que el entorno Java es multihebra, es necesario ejecutar la mquina virtual Java en un trabajo que d soporte a las hebras, como puede ser un trabajo inmediato de proceso por lotes (BCI). Una vez iniciada la mquina virtual Java, pueden iniciarse ms hebras en las que se ejecutar el recogedor de basura. El entorno Java tpico es el siguiente:
Tr a b a j o i n t e r a c t i v o L o t e d e l t r a b a j o i n m e d i a t o CLASE J AVA ( ' H o l a ' ) Cdigo de aplicacin de mquina virtual Java (clase Hola) Hebra x

Recolector de desechos Hebra y


RV4N307-4

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.

Captulo 3. Conceptos de AS/400 Developer Kit para Java

27

Tr a b a j o i n t e r a c t i v o STRQSH java Hola

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 ]

Abstract Window Toolkit remoto de AS/400 Developer Kit para Java


AWT remoto es una implementacin del AWT (siglas en ingls de Abstract Window Toolkit). Permite la ejecucin de aplicaciones Java, sin cambios, en un sistema principal sin interfaz grfica de usuario (GUI). AS/400 no da soporte a terminales grficos conectados de forma local; por lo tanto, AWT remoto resulta necesario para permitir la ejecucin de aplicaciones Java grficas en el AS/400. 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. 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. Puesto que el AWT remoto de AS/400 Developer Kit para Java no es aconsejable para operaciones con grficos complejos o alta interaccin, puede utilizar en su lugar Class Broker para Java, diseado para estos entornos. Para obtener informacin acerca de cmo configurar AWT remoto, consulte el apartado Configuracin de Abstract Window Toolkit remoto en una pantalla remota.
[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]

28

AS/400 Developer Kit para Java

Class Broker para Java de AS/400 Developer Kit para Java


Class Broker para Java (CBJ) es una infraestructura de carcter general para escribir aplicaciones cliente/servidor en Java. Generalmente, una aplicacin cliente/servidor consta de un objeto cliente y un objeto servidor. El servidor y el cliente son responsables de toda la comunicacin entre los dos objetos. Generalmente, esta comunicacin se lleva a cabo mediante Invocacin a Mtodo Remoto (RMI) o mediante una conexin de socket. RMI no resulta muy fcil ni flexible en cuanto a utilizacin, y existe una curva de aprendizaje considerable si se intentan utilizar sockets de forma efectiva. CBJ es fcil de utilizar, es flexible y oculta la complejidad de las conexiones de sockets. Excepto por lo que respecta a unas pocas llamadas a las clases CBJ para inicializar la aplicacin, una aplicacin cliente/servidor con intermediario tiene el mismo aspecto que una aplicacin local. CBJ maneja toda la carga de recursos y comunicacin entre el cliente y el servidor. El hecho de que algunos de los objetos del programa se estn ejecutando en el cliente y algunos otros en el servidor es casi transparente. CBJ crea proxies de cliente y de servidor utilizando la ejecucin CBJ. Una vez que el intermediario crea los objetos proxy, el cliente se comunica con el servidor remoto llamando a los mtodos del proxy del servidor. Del mismo modo, el objeto servidor se comunica con el cliente llamando a los mtodos del proxy del cliente. Por consiguiente, tanto el lado del cliente como el lado del servidor de la aplicacin funcionan como si llamaran a mtodos de objetos locales. Para obtener informacin acerca de la utilizacin de Class Broker para Java, consulte el apartado configuracin de Class Broker para Java
[ Pgina de presentacin de Information Center | Comentarios ]

[Legal | Glosario de AS/400]

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.

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Comparacin entre el compilador Just-In-Time y la ejecucin directa


Si est tratando de decidir entre utilizar el compilador Just-In-Time o la modalidad de ejecucin directa para ejecutar el programa Java, esta tabla proporciona informacin adicional que puede ayudarle a efectuar la mejor eleccin con respecto a su situacin.

Captulo 3. Conceptos de AS/400 Developer Kit para Java

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.

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Comparacin entre el entorno de lenguajes integrados y Java


En AS/400, el entorno Java est aparte del entorno de lenguajes integrados (ILE). Java no es un lenguaje ILE y no puede establecer enlaces lgicos con mdulos objeto ILE para crear programas o programas de servicio en AS/400.
ILE Los miembros que forman parte de la biblioteca o la estructura de archivos en AS/400 almacenan los cdigos fuente. El programa de utilidad para entrada del fuente (SEU) edita archivos fuente EBCDIC. El resultado de la compilacin de archivos fuente son mdulos de cdigo objeto, que se almacenan en bibliotecas de AS/400. Los mdulos objeto estn unidos estticamente entre s en programas o programas de servicio. Se puede llamar directamente a funciones escritas en otros lenguajes de programacin ILE. Los lenguajes ILE se compilan y ejecutan siempre en forma de instrucciones de lenguaje mquina. [ Pgina de presentacin de Information Center | Comentarios ] Java Los archivos continuos del sistema de archivos integrado contienen el cdigo fuente. Los archivos fuente ASCII se editan normalmente con un editor de estacin de trabajo. El resultado de la compilacin del cdigo fuente son archivos de clase, que almacena el sistema de archivos integrado. Las clases se cargan dinmicamente segn convenga en tiempo de ejecucin. Para llamar a otros lenguajes desde Java, se debe utilizar Java Native Interface. Los programas Java pueden ser interpretados o compilados.

[ Legal | Glosario de AS/400 ]

30

AS/400 Developer Kit para Java

Ejecutar Java en un trabajo de proceso por lotes


Para ejecutar programas Java en un trabajo de proceso por lotes, hay que utilizar el mandato Someter trabajo (SBMJOB). En esta modalidad, no se dispone de la pantalla Entrada de mandato de Qshell de Java para manejar las corrientes System.in, System.out y System.err. Puede redirigir estas corrientes a otros archivos. Por omisin, las corrientes System.out y System.err se envan a un archivo en spool. El trabajo de proceso por lotes, que da como resultado una excepcin de entrada y salida para las peticiones de lectura procedentes de System.in, es el propietario del archivo en spool. System.in, System.out y System.err pueden redirigirse dentro del programa Java. Tambin pueden utilizarse las propiedades de sistema os400.stdin, os400.stdout y os400.stderr para lo mismo. Nota: SBMJOB establece el directorio de trabajo actual (CWD) en el directorio HOME especificado en el perfil de usuario. Ejemplo: ejecutar Java en un trabajo de proceso por lotes SBMJOB CMD(JAVA Hello OPTION(*VERBOSE)) CPYENVVAR(*YES) La ejecucin del mandato JAVA en el ejemplo anterior lanzar un segundo trabajo. Por tanto, el subsistema en el que se ejecuta el trabajo debe ser capaz de ejecutar ms de un trabajo. Puede verificar que el trabajo de proceso por lotes es capaz de ejecutar ms de un trabajo siguiendo estos pasos: 1. En la lnea de mandatos CL, escriba DSPSBSD(MYSBSD), donde MYSBSD es la descripcin de subsistema del trabajo de proceso por lotes. 2. Elija la opcin 6, Entradas de cola de trabajos. 3. Observe el campo Mx. activo correspondiente a la cola de trabajos. Si el valor del campo Mx. activo es inferior o igual a 1 y no es *NOMAX, especifique lo siguiente en la lnea de mandatos CL: CHGJOBQE SBSD(MYSBSD) JOBQ(MYJOBQ) MAXACT(*NOMAX) Donde: v MYSBSD es la descripcin de subsistema, y v MYJOBQ es la cola de trabajos.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Clases, paquetes y directorios Java


Cada clase Java forma parte de un paquete. La primera sentencia de un archivo fuente Java indica la clase y el paquete que la contienen. Si el archivo fuente no contiene la sentencia package, significa que la clase forma parte de un paquete por omisin cuyo nombre no se indica. El nombre del paquete est relacionado con la estructura de directorios en la que reside la clase. El sistema de archivos integrado da soporte a las clases Java en una estructura jerrquica de archivos parecida a la que existe en la mayora de los sistemas UNIX y PC. Las clases Java deben almacenarse en un directorio que tenga
Captulo 3. Conceptos de AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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 de sistema Java


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. Para ver las propiedades del sistema soportadas por este release, enlcese con la versin elegida para obtener informacin detallada: v Java Development Kit (JDK) 1.1.8 v Java 2 Software Development Kit (J2SDK), Standard Edition, versin 1.2
[ 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

Captulo 3. Conceptos de AS/400 Developer Kit para Java

33

Propiedades de sistema os400.class.path.security.check

Valores por omisin de sistema

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

AS/400 Developer Kit para Java

Propiedades de sistema os400.run.mode

Valores por omisin de sistema

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

Captulo 3. Conceptos de AS/400 Developer Kit para Java

35

Propiedades de sistema os400.CertificateContainer

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

AS/400 Developer Kit para Java

Propiedades de sistema os400.secureApplication

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).

Captulo 3. Conceptos de AS/400 Developer Kit para Java

37

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

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

AS/400 Developer Kit para Java

Propiedades de sistema os400.create.type

Valores por omisin de sistema

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

Captulo 3. Conceptos de AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

Propiedades de sistema os400.child.stdio.convert

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.

Captulo 3. Conceptos de AS/400 Developer Kit para Java

41

Propiedades de sistema user.home

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 ]

[ Pgina de presentacin de Information Center | Comentarios ]

Valores de las propiedades del sistema os400.stdio.convert y os400.child.stdio.convert


Esta tabla muestra los valores del sistema correspondientes a las propiedades de sistema os400.stdio.convert y os400.child.stdio.convert.

Valor N (valor por omisin) Y

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

AS/400 Developer Kit para Java

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

[ Pgina de presentacin de Information Center | Comentarios ]

Valores de las propiedades del sistema os400.stdin, os400.stdout y os400.stderr


Esta tabla muestra los valores del sistema correspondientes a las propiedades de sistema os400.stdin, os400.stdout y os400.stderr.

Valor File

Nombre de ejemplo UnNombreArchivo

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

[ Pgina de presentacin de Information Center | Comentarios ]

Valores numricos de os400.verify.checks.disable


El valor de la propiedad del sistema os400.verify.checks.disable es una serie que representa la suma de uno o ms valores numricos de esta lista:

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.

Captulo 3. Conceptos de AS/400 Developer Kit para Java

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 ]

Archivos en el sistema de archivos integrado


El sistema de archivos integrado almacena los archivos JAR, los archivos ZIP, los archivos fuente y los archivos de clase relacionados con Java en una estructura jerrquica de archivos. En el sistema de archivos integrado tambin pueden almacenarse archivos fuente. Los sistemas de archivos integrados en los que puede almacenar archivos son los siguientes: v el sistema de archivos raz (/) v el sistema de archivos de los sistemas abiertos (QOpenSys) v el sistema de archivos definido por el usuario v el sistema de archivos de bibliotecas (QSYS.LIB) v el sistema de archivos de OS/2 Warp Server para AS/400 (QLANSrv) v el sistema de archivos ptico (QOPT) Nota: no se da soporte a otros sistemas de archivos integrados porque no son seguros en ejecucin multihebra.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Autorizaciones de archivo Java en el sistema de archivos integrado


Para ejecutar o depurar un programa Java, es necesario que el archivo de clase, JAR o ZIP tenga autorizacin de lectura (*R). Los directorios necesitan la autorizacin de lectura y la de ejecucin (*RX).

44

AS/400 Developer Kit para Java

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 ]

[ Pgina de presentacin de Information Center | Comentarios ]

Codificaciones de caracteres Java


Internamente, la mquina virtual Java funciona siempre con datos en formato Unicode. No obstante, a medida que se transfieren datos a la mquina virtual Java o bien desde ella, sta convierte los datos a otras codificaciones. Los archivos de programa Java se almacenan en el sistema de archivos integrado. Los archivos de programa de tipo texto o carcter del sistema de archivos integrado estarn codificados en la pgina de cdigos que la propiedad de sistema Java file.encoding especifique. Esto incluye a los archivos de cdigo fuente Java (.java), los archivos .property Java y cualquier archivo de programa de usuario de datos de tipo carcter. Para obtener ms informacin, consulte la tabla de valores de file.encoding y CCSID de AS/400 o bien la tabla de valores de file.encoding por omisin.
Captulo 3. Conceptos de AS/400 Developer Kit para Java

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

Valores de file.encoding y CCSID de AS/400


Esta tabla 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.

46

AS/400 Developer Kit para Java

file.encoding Big5 CNS11643

CCSID 950 964

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

Captulo 3. Conceptos de AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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

949 874 932 874 1208

Unicode UnicodeBig UnicodeBigUnmarked UnicodeLittle UnicodeLittleUnmarked

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

En Valores de file.encoding por omisin hallar los valores por omisin.


[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Valores de file.encoding por omisin


Esta tabla muestra cmo se establece el valor de file.encoding tomando como base el identificador de juego de caracteres (CCSID) de AS/400 cuando se inicia la mquina virtual Java.

Captulo 3. Conceptos de AS/400 Developer Kit para Java

49

CCSID de AS/400 37

CCSID ASCII correspondiente

File.encoding por omisin ISO8859_1

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)

256 273 277

ISO8859_1 ISO8859_1 ISO8859_1

278 280 284 285 290

ISO8859_1 ISO8859_1 ISO8859_1 ISO8859_1 Cp942

297 420 423 424 500

ISO8859_1 ISO8859_6 ISO8859_7 ISO8859_8 ISO8859_1

833

Cp949

836

Cp1381

838 870

Cp874 ISO8859_2

871 875 880 905 918 930

ISO8859_1 ISO8859_7 ISO8859_5 ISO8859_9 Cp868 Cp942

50

AS/400 Developer Kit para Java

CCSID de AS/400 933 935 937 939

CCSID ASCII correspondiente

File.encoding por omisin Cp970 Cp1381 Cp950 Cp942

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

1097 1112 1122 1123 1130

Cp1098 Cp921 Cp922 Cp1123 ISO8859_1

1132

ISO8859_1

1388

Cp1381

5026

Cp942

5035

Cp942

8612

Cp864

9030

Cp874

13124

Cp1381

Captulo 3. Conceptos de AS/400 Developer Kit para Java

51

CCSID de AS/400 28709

CCSID ASCII correspondiente

File.encoding por omisin Cp948

Descripcin Parte SBCS del CCSID mixto EBCDIC para chino tradicional (CCSID 937)

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Java Naming and Directory Interface (JNDI)


Java Naming and Directory Interface (JNDI) forma parte de las API de plataforma de JavaSoft. Gracias a JNDI, se pueden establecer conexiones sin fisuras con diversos servicios de directorio y denominacin. Con esta interfaz, se pueden construir aplicaciones Java habilitadas para directorio que sean potentes y portables. JavaSoft ha desarrollado la especificacin JNDI con la colaboracin de destacadas empresas del sector, entre ellas IBM, SunSoft, Novell, Netscape y Hewlett-Packard Co. Si le interesa ejecutar JNDI, aada lo siguiente a la va de acceso de clases:
/QIBM/ProdData/Java400/ext/ibmjndi.jar:/QIBM/ProdData/Java400/ext/jndi.jar

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 ]

Interfaz de depuracin de la mquina virtual Java


En Java 2 SDK (J2SDK), Standard Edition, versin 1.2, la interfaz de depuracin de la mquina virtual Java (JVMDI) forma parte de las interfaces del programa de aplicacin (API) de plataforma de Sun Microsystems, Inc. JVMDI permite a cualquier usuario escribir un depurador Java para AS/400 en cdigo C AS/400. El depurador no necesita conocer la estructura interna de la mquina virtual Java, y no puede daar a la mquina virtual Java, dado que utiliza interfaces JVMDI. El depurador se ejecuta en el mismo trabajo con capacidad multihebra que la mquina virtual Java. El depurador utiliza las API Invocation de Native Interface (JNI) para crear una mquina virtual Java. A continuacin, coloca un gancho al principio de un mtodo main de clase de usuario y llama al mtodo main. Cuando se inicia el mtodo main, se encuentra el gancho y la depuracin se inicia. Estn disponible recursos habituales de depuracin, como por ejemplo el establecimiento de puntos de interrupcin, el recorrido, la visualizacin de variables y el cambio de variables.

52

AS/400 Developer Kit para Java

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 ]

Limitaciones, restricciones y comportamientos propios


A la hora de trabajar con AS/400 Developer Kit para Java, podr apreciar que la forma de utilizacin presenta ciertas limitaciones. En esta lista se sealan las limitaciones, restricciones o comportamientos propios que se conocen. v Cuando se carga una clase y no se encuentran las superclases de la misma, el error indica que no se ha encontrado la clase original. Por ejemplo, si la clase B ampla la clase A y no se encuentra la segunda al cargar la primera, el error indica que no se ha encontrado la clase B, aunque en realidad sea la clase A la que no se ha encontrado. Si aparece un error que indica que no se ha encontrado una clase, compruebe que la clase y todas las superclases de la misma estn en la va de acceso de clases. Esto tambin es pertinente para las interfaces implementadas por la clase que se carga. v MB. v El nmero de objetos construidos est limitado a 256 millones. v El parmetro backlog de java.net puede tener un comportamiento distinto en AS/400 del que tiene en otras plataformas. Por ejemplo: Parmetro baklog = 0 1 en Listen - Listen(0) significa que se permite una conexin pendiente; no inhabilita el socket. - Listen(1) significa que se permite una conexin pendiente y lo mismo que Listen(0). Parmetro backlog > 1 en Listen - Esto permite que haya muchas peticiones pendientes en la cola de Listen. Si llega una nueva conexin y la cola est al lmite, se suprimir una de las peticiones pendientes. v En otras plataformas que dan soporte a JDK 1.1.6, la clase DecimalFormat puede formatear de manera incorrecta la entrada numrica. Esto est solucionado en la versin de JDK 1.1.6 que se utiliza en AS/400.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

El almacenamiento dinmico de recogida de basura est limitado a 132.800

Captulo 3. Conceptos de AS/400 Developer Kit para Java

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

Mdulo de cdigo de objeto

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

Cdigo Fuente Compilador Java

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

AS/400 Developer Kit para Java

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 ]

Aplicaciones y applets Java


Los programas Java pueden escribirse de dos formas: aplicaciones y applets. Las aplicaciones son programas autnomos que no requieren la utilizacin de un navegador. Para ejecutar las aplicaciones Java, se inicia el intrprete Java desde la lnea de mandatos y se especifica el archivo que contiene la aplicacin compilada. Las aplicaciones residen normalmente en el sistema en el que estn desplegadas. Acceden a recursos del sistema y no sufren las restricciones del modelo de seguridad sandbox. Un applet Java es un programa informtico de pequeo tamao que est escrito en Java y que se ejecuta dentro de un navegador compatible con Java o de un visor de applets. Un documento Web HTML puede incluir una referencia al sistema en el que reside el applet. En tiempo de ejecucin, el servidor baja el applet del servidor al sistema destino. En el sistema destino, el applet no tiene acceso los recursos del sistema a menos que se le haya otorgado autorizacin de manera explcita.
[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]

Mquina virtual Java


La mquina virtual Java es un entorno de ejecucin que puede aadirse a un navegador Web o a cualquier sistema operativo como, por ejemplo, IBM Operating System/400 (OS/400). La mquina virtual Java ejecuta las instrucciones que genera un compilador Java. Consta de un intrprete de bytecodes y un sistema de ejecucin que permite ejecutar los archivos de clase Java en cualquier plataforma, con independencia de la plataforma en la que se hayan desarrollado originalmente. El cargador de clases y el gestor de seguridad, que forma parte del sistema de ejecucin Java, aslan el cdigo procedente de otra plataforma. Tambin restringen los recursos del sistema a los que tiene acceso cada una de las clases que se cargan. Nota: las aplicaciones Java no sufren restricciones; slo las sufren los applets. Las aplicaciones pueden utilizar los mtodos nativos y acceder a los recursos del sistema con total libertad. La mayora de los programas de AS/400 Developer Kit para Java son aplicaciones. Para asegurarse de que el cdigo cumple los requisitos de seguridad que el sistema de ejecucin exige con el fin de verificar los bytecodes, puede utilizar el mandato Crear programa Java (CRTJVAPGM). Los requisitos de seguridad son hacer que se cumplan las restricciones de tipo, comprobar las conversiones de datos, asegurarse
Captulo 3. Conceptos de AS/400 Developer Kit para Java

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 ]

Archivos de clase Java


Los archivos de clase Java son archivos continuos que se generan cuando el compilador Java compila un archivo fuente. Un archivo de clase contiene tablas en las que se describe cada uno de los campos y los mtodos de la clase. Tambin contiene los bytecodes de cada uno de los mtodos, datos estadsticos y descripciones que se utilizan para representar los objetos Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Archivos ZIP Java


Un archivo ZIP Java es un nico archivo que contiene varios archivos de clase, que pueden extraerse de forma individual. El contenido de un archivo ZIP Java puede estar comprimido o no. Los archivos ZIP Java constituyen una manera especialmente til de almacenar clases en aquellos sistemas que no dan soporte a los nombres de archivo largos. Para combinar varios archivos en uno, consulte el apartado Archivos JAR Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Archivos JAR Java


JAR es un formato de archivo, basado en el formato de archivo ZIP, con el que se combinan varios archivos en uno solo. Se puede utilizar JAR como herramienta general de archivado, pero su propsito principal es bajar applets y los componentes de stos (archivos .class, imgenes y sonidos). Los applets Java se bajan en un navegador en una nica transaccin HTTP en lugar de hacerlo abriendo una nueva conexin para cada elemento. Este mtodo aumenta la velocidad con la que un applet baja a una pgina Web y empieza a funcionar. JAR es el nico formato de archivado apto para cualquier plataforma. Tambin es el nico formato que maneja archivos de audio y de imgenes, adems de archivos de clase. JAR es un formato estndar abierto y totalmente ampliable que est escrito en Java.

56

AS/400 Developer Kit para Java

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,

Captulo 3. Conceptos de AS/400 Developer Kit para Java

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 ]

Java Development Kit de Sun Microsystems, Inc.


Java Development Kit (JDK) es software distribuido por Sun Microsystems, Inc. para los desarrolladores de Java. Incluye el intrprete Java, clases Java y herramientas de desarrollo Java: compilador, depurador, desensamblador, visor de applets, generador de archivos apndice y generador de documentacin. El JDK permite a los programadores escribir aplicaciones que se desarrollan una sola vez y se ejecutan en cualquier mquina virtual Java. Las aplicaciones Java desarrolladas con el JDK en un sistema pueden utilizarse en otro sistema sin tener que cambiar ni volver a compilar el cdigo. Los archivos de clase Java son portables a cualquier mquina virtual Java estndar. Si desea buscar ms informacin sobre el JDK actual, compruebe en el AS/400 cul es la versin de AS/400 Developer Kit para Java. Puede comprobar en el AS/400 cul es la versin de la mquina virtual Java de AS/400 Developer Kit para Java por omisin especificando uno de los siguientes mandatos: v java -version en el indicador de mandatos de Qshell. v RUNJVA CLASS(*VERSION) en la lnea de mandatos CL. A continuacin, busque la misma versin del JDK de Sun Microsystems, Inc. en para encontrar documentacin The Source for Java Technology java.sun.com especfica. AS/400 Developer Kit para Java es una implementacin compatible de la tecnologa Java de Sun Microsystems, Inc, por lo que conviene que est familiarizado con la documentacin del JDK de dicha empresa.

58

AS/400 Developer Kit para Java

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

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

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 ]

Mtodos nativos y Java Native Interface (JNI)


Los mtodos nativos son mtodos Java que se inician en un lenguaje distinto de Java. Pueden acceder a API y a funciones especficas del sistema que no estn disponibles directamente en Java. La utilizacin de mtodos nativos limita la portabilidad de una aplicacin porque interviene cdigo especfico del sistema. Un mtodo nativo puede consistir en sentencias de cdigo nativo nuevas o en sentencias de cdigo nativo que llaman a cdigo nativo existente. Una vez se ha decidido que se necesita un mtodo nativo, es posible que ste tenga que interactuar con la mquina virtual Java en la que se ejecuta. Java Native Interface (JNI) hace ms fcil esta interoperatividad de una manera neutral por lo que a la plataforma se refiere. JNI es un conjunto de interfaces que permiten a un mtodo nativo interactuar con la mquina virtual Java de muchas maneras. Por ejemplo, JNI incluye interfaces que crean objetos nuevos y llaman a mtodos, que obtienen campos y los establecen, que procesan excepciones y que manipulan series y matrices. Para obtener una descripcin completa de JNI, consulte Java Native Interface 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 ]

60

AS/400 Developer Kit para Java

Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java


A la hora de trabajar con AS/400 Developer Kit para Java, puede utilizar herramientas Java con el intrprete Qshell o bien mandatos CL. Si ya tiene experiencia previa programando en Java, tal vez le resulte ms cmodo utilizar las herramientas Java del intrprete Qshell porque son parecidas a las herramientas que utilizara con el Java Development Kit de Sun Microsystems, Inc. En Qshell Interpreter hallar ms informacin sobre la utilizacin del entorno Qshell. Si es usted programador de AS/400, tal vez le interese utilizar los mandatos CL para Java ms habituales del entorno de servidor AS/400. Si desea obtener ms informacin sobre la utilizacin de los mandatos CL y los mandatos de Operations Navigator, siga leyendo. Con AS/400 Developer Kit para Java puede utilizar cualquiera de los mandatos y herramientas que se indican a continuacin: v El entorno Qshell, que incluye las herramientas de desarrollo Java que se requieren habitualmente para el desarrollo de programas. v El entorno CL, que contiene los mandatos CL necesarios para optimizar y gestionar programas Java. v Los mandatos de Operations Navigator, que tambin crean y ejecutan programas Java optimizados.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Herramientas Java soportadas por AS/400 Developer Kit para Java


AS/400 Developer Kit para Java da soporte a las herramientas que se detallan a continuacin. v Herramienta ajar java v Herramienta appletviewer Java v Herramienta extcheck Java v Herramienta jar Java v Herramienta jarsigner Java v Herramienta javac Java v v v v v v v Herramienta javadoc Java Herramienta javah Java Herramienta javakey Java Herramienta javap Java Herramienta keytool Java herramienta native2ascii Java Herramienta policytool Java

v Herramienta rmic Java


Copyright IBM Corp. 1998, 1999

61

v v v v

Herramienta Herramienta Herramienta Herramienta

rmid Java rmiregistry Java serialver Java tnameserv Java

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 ]

Herramienta ajar de Java


La herramienta ajar es una interfaz alternativa a la herramienta jar que sirve para crear y manipular archivos JAR. La herramienta ajar puede utilizarse para manipular tanto archivos JAR como archivos ZIP. Si necesita una interfaz ZIP o una interfaz UNZIP, utilice la herramienta ajar en lugar de la herramienta jar. Al igual que la herramienta jar, la herramienta ajar elabora una relacin del contenido de los archivos JAR, extrae el contenido de los archivos JAR, crea archivos JAR nuevos y da soporte a la mayora de formatos ZIP. Adems, la herramienta ajar da soporte a la adicin y supresin de archivos en los archivos JAR existentes. La herramienta ajar est disponible en el intrprete Qshell. Para obtener ms detalles, consulte el apartado ajar - Archivo Java alternativo.
[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]

Herramienta appletviewer Java


La herramienta appletviewer permite ejecutar applets sin necesidad de tener un navegador Web. Es compatible con la herramienta appletviewer proporcionada por Sun Microsystems, Inc. La herramienta appletviewer est disponible en el intrprete Qshell. Es necesario utilizar Remote Abstract Window Toolkit para ejecutar la herramienta Consulte el apartado Ejecucin de la herramienta appletviewer appletviewer. de Java con AWT remoto para obtener informacin acerca de cmo configurar el AWT remoto para utilizar la herramienta appletviewer.

62

AS/400 Developer Kit para Java

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]

Ejecucin de la herramienta appletviewer de Java con Abstract Window Toolkit remoto


Para utilizar la herramienta appletviewer de Java, es necesario configurar Abstract Window Toolkit remoto para Java en una pantalla remota Windows, y utilizar la clase sun.applet.AppletViewer o ejecutar la herramienta appletviewer en el intrprete de Qshell con propiedades de AWT remoto. Por ejemplo, si utiliza la clase sun.applet.AppletViewer y ejecuta example1.html fuera del directorio TicTacToe, la lnea de mandatos debe ser parecida a la siguiente:
JAVA CLASS(sun.applet.AppletViewer) PARM('example1.html') CLASSPATH('/TicTacToe') PROP((RmtAwtServer '1.1.11.11') (os400.class.path.rawt 1)(java version 1.2))

Si utiliza la herramienta appletviewer en el intrprete de Qshell y ejecuta example1.html fuera del directorio TicTacToe, los mandatos deben tener este aspecto:

qsh enter cd TicTacToe enter Appletviewer -J-DRmtAwtServer=1.1.11.11 -J-Dos400.class.path.rawt=1 -J-Djava.version=1.2 example1.

Nota:-J son indicadores de ejecucin para Appletviewer. -D son propiedades.


[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Herramienta extcheck Java


En Java 2 SDK (J2SDK), Standard Edition, versin 1.2, la herramienta extcheck detecta conflictos de versin entre un archivo JAR destino y los archivos JAR de ampliacin instalados actualmente. Es compatible con la herramienta keytool suministrada por Sun Microsystems, Inc. La herramienta extcheck est disponible utilizando el intrprete Qshell. Para obtener ms informacin sobre la herramienta extcheck, consulte el apartado herramienta extcheck de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

La herramienta jar Java


La herramienta jar combina varios archivos en un nico archivo JAR. Es compatible con la herramienta jar proporcionada por Sun Microsystems, Inc. La herramienta jar est disponible en el intrprete Qshell.
Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

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 ]

Herramienta jarsigner Java


En Java 2 SDK (J2SDK), Standard Edition, versin 1.2, la herramienta jarsigner firma archivos JAR y verifica firmas en archivos JAR firmados. La herramienta jarsigner accede al almacn de claves, que la herramienta keytool crea y gestiona, cuando necesita buscar la clave privada para firmar un archivo JAR. En J2SDK, las herramientas jarsigner y keytool sustituyen a la herramienta javakey. Es compatible con la herramienta jarsigner proporcionada por Sun Microsystems, Inc. La herramienta jarsigner est disponible en el intrprete Qshell. Para obtener ms informacin sobre la herramienta jarsigner, consulte el apartado herramienta jarsigner de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

La herramienta javac Java


La herramienta javac compila programas Java. Es compatible con la herramienta javac proporcionada por Sun Microsystems, Inc con una excepcin. -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. La herramienta javac est disponible en el intrprete Qshell. Si tiene instalado JDK 1.1.x en AS/400 como valor por omisin, pero necesita ejecutar la versin 1.2 del mandato java, entre este mandato:
javac -djava.version=1.2 <my_dir> MyProgram.java

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

AS/400 Developer Kit para Java

La herramienta javadoc Java


La herramienta javadoc genera documentacin de API. Es compatible con la herramienta javadoc proporcionada por Sun Microsystems, Inc. La herramienta javadoc est disponible en el intrprete Qshell. Para obtener ms informacin sobre la herramienta javadoc, le remitimos a la herramienta javadoc de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Herramienta javah Java


La herramienta javah facilita la implementacin de los mtodos nativos Java. Es compatible con la herramienta javah proporcionada por Sun Microsystems, Inc con algunas excepciones. Nota: escribir mtodos nativos significa que la aplicacin no es 100% puro Java. Tambin significa que la aplicacin no es portable directamente de una plataforma a otra. Los mtodos nativos son, por naturaleza, especficos de una plataforma o un sistema. La utilizacin de mtodos nativos puede incrementar el coste de desarrollo y mantenimiento de las aplicaciones. La herramienta javah est disponible en el intrprete Qshell. Lee un archivo de clase Java y crea un archivo de cabecera escrito en C dentro del directorio de trabajo actual. El archivo de cabecera queda grabado en un archivo continuo de AS/400 (STMF). Para poder incluirlo en un programa C de AS/400, primero debe copiarse a un archivo miembro. La herramienta javah es compatible con la herramienta proporcionada por Sun Microsystems, Inc. No obstante, si se especifican las opciones que se indican a continuacin, el AS/400 hace caso omiso de ellas. -td La herramienta javah de AS/400 no requiere ningn directorio temporal.

-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 ]

Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

65

Herramienta javakey Java


La herramienta javakey sirve para generar y gestionar certificados y claves de cifrado, as como para generar firmas digitales para applets. Es compatible con la herramienta javakey proporcionada por Sun Microsystems, Inc. en Java Develpment Kit (JDK) versiones 1.1.x. En Java 2 Software Development Kit (J2SDK), Standard Edition, versin 1.2, la herramienta javakey es obsoleta. Debido a los errores en las versiones 1.1.x de JDK, el cdigo firmado utilizando la herramienta javakey 1.1.x se reconoce como no firmado en J2SDK, versin 1.2. Si firma cdigo utilizando J2SDK, versin 1.2, se reconoce como no firmado en las versiones 1.1.x de JDK. Nota: el soporte de capa de sockets seguros (SSL) de AS/400 no puede acceder a las claves que crea esta herramienta. En lugar de este soporte, debe utilizar los contenedores de claves y certificados que estn integrados en el AS/400 y que se han creado o importado con Digital Certificate Manager. Consulte el apartado Conseguir que una aplicacin Java sea segura con la capa de sockets seguros para obtener ms informacin. Los paquetes y las firmas de applet dependen del navegador. Consulte la documentacin de su navegador para asegurarse de que es compatible con el formato de archivo JAR Java y con las firmas de applet de javakey. Nota: los archivos creados con la herramienta javakey contienen informacin confidencial. Los archivos de clave pblica y privada estn protegidos por las pertinentes medidas de seguridad. La herramienta javakey est disponible en el intrprete Qshell. 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 javakey, le remitimos a la herramienta javakey de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

La herramienta javap Java


La herramienta javap desensambla archivos Java compilados e imprime una representacin del programa Java. Esto puede resultar til cuando ya no se dispone del cdigo fuente original en el sistema. Es compatible con la herramienta javap proporcionada por Sun Microsystems, Inc con algunas excepciones. -b Se hace caso omiso de esta opcin. La compatibilidad retroactiva no es necesaria puesto que en AS/400 Java slo da soporte a Java Development Kit 1.1.4 y versiones posteriores. En AS/400, la opcin -p no es vlida. Debe escribirse -private. Se hace caso omiso de esta opcin. La herramienta javap no realiza verificacin alguna en AS/400.

-p -verify

66

AS/400 Developer Kit para Java

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 ]

Herramienta keytool Java


En Java 2 SDK (J2SDK), Standard Edition, versin 1.2, la herramienta keytool crea pares de claves pblicas y privadas, certificados autofirmados y gestiona almacenes de claves. En J2SDK, las herramientas jarsigner y keytool sustituyen a la herramienta javakey. Es compatible con la herramienta keytool suministrada por Sun Microsystems, Inc. La herramienta keytool est disponible utilizando el intrprete Qshell. Para obtener ms informacin sobre la herramienta keytool, consulte el apartado herramienta keytool de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Herramienta native2ascii Java


La herramienta native2ascii convierte un archivo que contenga caracteres nativos (caracteres que no son Latin-1 ni Unicode) en un archivo con caracteres Unicode. Es compatible con la herramienta native2ascii proporcionada por Sun Microsystems, Inc. La herramienta native2ascii est disponible en el intrprete Qshell. Para obtener ms informacin sobre la herramienta native2ascii, le remitimos a la herramienta native2ascii de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Herramienta policytool Java


En Java 2 SDK (J2SDK), Standard Edition, versin 1.2, la herramienta policytool crea y cambia los archivos de configuracin de poltica externa que definen la poltica de seguridad Java de la instalacin. Es compatible con la herramienta policytool proporcionada por Sun Microsystems, Inc. policytool es una herramienta de interfaz grfica de usuario (GUI) disponible utilizando el intrprete de Qshell y Abstract Window Toolkit remoto. Consulte el apartado Abstract Window Toolkit remoto de AS/400 Developer Kit para Java para obtener ms informacin.
Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

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 ]

Herramienta rmic Java


La herramienta rmic genera archivos apndice y archivos de clase para los objetos Java. Es compatible con la herramienta rmic proporcionada por Sun Microsystems, Inc. La herramienta rmic est disponible en el intrprete Qshell. Para obtener ms informacin sobre la herramienta rmic, le remitimos a la herramienta rmic de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Herramienta rmid Java


En Java 2 SDK (J2SDK), Standard Edition, versin 1.2, la herramienta rmid inicia el daemon del sistema de activacin, para que los objetos puedan registrarse y activarse en una mquina virtual Java. Es compatible con la herramienta rmid proporcionada por Sun Microsystems, Inc. La herramienta rmid est disponible en el intrprete Qshell. Para obtener ms informacin sobre la herramienta rmid, consulte el apartado herramienta rmid de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

La herramienta rmiregistry Java


La herramienta rmiregistry inicia un registro de objetos remotos en un puerto concreto. Es compatible con la herramienta rmiregistry proporcionada por Sun Microsystems, Inc. La herramienta rmiregistry est disponible en el intrprete Qshell. Para obtener ms informacin sobre la herramienta rmiregistry, le remitimos a la herramienta rmiregistry de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

La herramienta serialver Java


La herramienta serialver devuelve el nmero de versin o el identificador exclusivo de serializacin correspondiente a una o varias clases. Es compatible con la herramienta serialver proporcionada por Sun Microsystems, Inc.

68

AS/400 Developer Kit para Java

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 ]

Herramienta tnameserv Java


En Java 2 SDK (J2SDK), Standard Edition, versin 1.2, la herramienta tnameserv proporciona acceso al servicio de nombres. Es compatible con la herramienta tnameserv proporcionada por Sun Microsystems, Inc. La herramienta tnameserv est disponible en el intrprete Qshell.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

El mandato java de Qshell


El mandato java de Qshell ejecuta programas Java. Es compatible con la herramienta java proporcionada por Sun Microsystems, Inc con algunas excepciones. AS/400 Developer Kit para Java hace caso omiso de las opciones del mandato java de Qshell que se indican a continuacin.
Opcin -cs -checksource -debug -noasyncgc Descripcin No est soportada. No est soportada. Soportada por el depurador interno de AS/400. La recogida de basura est permanentemente en ejecucin con AS/400 Developer Kit para Java. La recogida de basura est permanentemente en ejecucin con AS/400 Developer Kit para Java. AS/400 tiene herramientas de rendimiento propias. No procede en AS/400. No procede en AS/400. AS/400 utiliza una funcin de rastreo propia. La verificacin se realiza siempre en AS/400. La verificacin se realiza siempre en AS/400. La verificacin se realiza siempre en AS/400.

-noclassgc

-prof -ss -oss -t -verify -verifyremote -noverify

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

Opcin -secure -gcfrq -gcpty -opt -verbosegc

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 ]

Mandatos CL a los que da soporte Java


AS/400 Developer Kit para Java da soporte a los mandatos CL que se indican a continuacin. v El mandato Crear programa Java (CRTJVAPGM) crea un programa Java en AS/400 a partir de un archivo de clase Java, un archivo ZIP o un archivo JAR. v El mandato Cambiar programa Java (CHGJVAPGM) cambia los atributos de un programa Java. v El mandato JAVA y el mandato Ejecutar Java (RUNJVA) ejecutan programas Java de AS/400. v 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. v El mandato Volcar mquina virtual Java (DMPJVM) vuelca informacin acerca de la mquina virtual Java para un trabajo especificado en un archivo de impresora en spool. v El mandato Visualizar programa Java (DSPJVAPGM) visualiza informacin sobre un programa Java de AS/400. En la publicacin OS/400 Program and CL Command APIs, SC41-5870 hallar ms informacin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

70

AS/400 Developer Kit para Java

El mandato Crear programa Java (CRTJVAPGM)


Propsito: El mandato Crear programa Java (CRTJVAPGM) crea un programa Java en AS/400 a partir de un archivo de clase Java o bien uno o varios programas Java a partir de un archivo JAR. Si el nombre de archivo termina en .jar o .zip, quiere decir que se trata de un archivo JAR. El objeto u objetos de programa Java resultantes formarn parte del objeto de archivo de clase o JAR, pero no podrn realizarse cambios en ellos de forma directa. Los programas Java se ejecutarn cuando se inicie el mandato Ejecutar Java (RUNJVA). Se puede controlar el tamao y el rendimiento del programa Java; para ello, utilice el parmetro OPTIMIZE o el parmetro LICOPT. Sintaxis:
Mandato CRTJVAPGM (P) >>CRTJVAPGMCLSF(.-nombre_archivo_clase-.)> '-nombre_archivo_JAR-' >...-.> | .-10-. | | .-*YES-. | '-OPTIMIZE(+-*INTERPRET-+)-' '-REPLACE('-*NO')-' |-20-| |-30-| '-40-' >.-...> | .-*NONE. | | .-*USER. | '-ENBPFRCOL(+-*ENTRYEXIT-+)-' '-USRPRF('-*OWNER-')-' '-*FULL' >.-...> | .-*NO. | | .-*NONE-. | '-USEADPAUT('-*YES-')-' '-SUBTREE('-*ALL')-' >.-.> | .-*OPTIMIZE. | '-LICOPT('-serie_opciones-')' >..->< | .-*CURRENT-. | '-TGTRLS('-release_destino-')-'

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'

Un ejemplo de patrn es:


'/directorio1/directorio2/nombremicl*.class'
Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

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'

Un ejemplo de patrn es:


'/directorio1/directorio2/nombremia*.zip'

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

AS/400 Developer Kit para Java

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

Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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.

Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

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 ]

Series del parmetro de opcin de Cdigo Interno bajo Licencia


Esta tabla muestra las series reconocidas por el parmetro de opcin de Cdigo Interno bajo Licencia (LICOPT). Las series no son sensible a las maysculas y minsculas, pero aparecen escritas en maysculas y minsculas a fin de que resulten legibles. Series del parmetro LICOPT
Serie AllFieldsVolatile NoAllFieldsVolatile AllowBindingToLoadedClasses Descripcin Si se establece, se considera que todos los campos son voltiles. No est establecida; no trata a todos los campos como si fuesen voltiles. Indica que las representaciones de clases temporales creadas como resultado de llamadas defineClass dentro de una mquina virtual Java en ejecucin pueden enlazarse estrechamente con otras representaciones de clases dentro de la misma mquina virtual Java. Indica que las representaciones de clases temporales creadas como resultado de llamadas defineClass dentro de una mquina virtual Java en ejecucin no pueden enlazarse estrechamente con otras representaciones de clases dentro de la misma mquina virtual Java. Indica que las representaciones de clases dentro de un archivo ZIP o JAR pueden enlazarse estrechamente con otras representaciones de clases dentro del mismo archivo ZIP o JAR.

NoAllowBindingToLoadedClasses

AllowBindingWithinJar

76

AS/400 Developer Kit para Java

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.

Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

Serie InlineArrayCopy

NoInlineArrayCopy DoLocalCSE NoDoLocalCSE EnableCseForCastCheck

NoEnableCseForCastCheck ErrorReporting

InlineInit NoInlineInit InlineMiscFloat NoInlineMiscFloat InlineMiscInt NoInlineMiscInt InlineTransFloat NoInlineTransFloat PreloadExtRef

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.

Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

79

Serie NoShortCktAthrow ShortCktExSubclasses NoShortCktExSubclasses

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 ]

Ejemplo: mandato Crear programa Java (CRTJVAPGM)


Para crear un programa Java y asociarlo con el archivo de clase myJavaClassFileName, se utiliza el mandato Crear programa Java (CRTJVAPGM). Si el programa Java se crea con OPTIMIZE(*INTERPRET), se interpretarn los bytecodes del archivo de clase del programa. Para iniciar el programa, se utiliza el mandato Ejecutar Java (RUNJVA). Ejemplo 1: crear un programa Java interpretado
CRTJVAPGM CLSF('/projectA/team2/myJavaClassFileName.class') OPTIMIZE(*INTERPRET)

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 ]

Mandato Cambiar programa Java (CHGJVAPGM)


Propsito: El mandato Cambiar programa Java (CHGJVAPGM) cambia los atributos de un programa Java conectado con un archivo de clase Java o de un conjunto de programas Java conectados con un archivo JAR. Un archivo es un archivo JAR si su nombre termina en .jar o .zip. Los programas Java pueden volver a crearse si los atributos especificados son distintos de los atributos de los programas actuales o bien si se especifica MERGE(*YES). El mandato CHGJVAPGM no crea programas Java para archivos de clase ni para clases que estn dentro de archivos JAR que no tienen conectados

80

AS/400 Developer Kit para Java

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'

Un ejemplo de patrn es:


'/directorio1/directorio2/nombremicl*.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'

Un ejemplo de patrn es:


Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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 ]

Ejemplo: Mandato Cambiar programa Java (CHGJVAPGM)


Para cambiar un programa Java asociado con el archivo de clase myJavaClassFileName, se utiliza el mandato Cambiar programa Java (CHGJVAPGM). Se interpretarn los bytecodes del archivo de clase del programa. Para iniciar el programa, se utiliza el mandato Ejecutar Java (RUNJVA). El programa Java se volver a crear slo si los atributos especificados son distintos de los del programa actual. Ejemplo 1: cambiar un programa Java interpretado
CHGJVAPGM CLSF('/projectA/team2/myJavaClassFileName.class') OPTIMIZE(*INTERPRET)

84

AS/400 Developer Kit para Java

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 ]

El mandato Ejecutar Java (RUNJVA)


Propsito: El mandato Ejecutar Java (RUNJVA) ejecuta el programa Java de AS/400 asociado con la clase Java especificada. Si no existe ningn programa Java, se crea uno y se asocia con el archivo de clase. Sintaxis:
Mandato RUNJVA >>RUNJVACLASS(.-nombre_clase.)> | (1)| '-*VERSION' (P) >.-> | .-*NONE. | | | <-> (2)| | '-PARM('-valor_parmetro')-' >.-...> | .-*ENVVAR. | | .-*WARN-. | '-CLASSPATH('-va_acceso_clases-')-' '-CHKPATH(+-*SECURE-+)-' '-*IGNORE-' >....-> | .-10-. | | .-*OPTIMIZE-. | '-OPTIMIZE(+-*INTERPRET-+)-' '-INTERPRET(+-*NO-+)-' +-*JIT-+ |-*YES| +-20-+ '-*JIT' +-30-+ '-40-' >.-.> | .-*NONE-. | | | <> (3)| | '-PROP('-nombre_propiedadvalor_propiedad-')-' >..> | .-*NOMAX-. |
Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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 ]

Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

91

Ejemplo: utilizacin del mandato Ejecutar Java (RUNJVA)


El mandato Ejecutar Java (RUNJVA) ejecuta el programa Java de AS/400 que est asociado con la clase. Ejemplo 1: ejecutar un programa Java RUNJVA CLASS (/projectA/myJavaclassname) En El mandato Ejecutar Java (RUNJVA) hallar el diagrama de sintaxis e informacin detallada sobre los parmetros.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

El mandato Suprimir programa Java (DLTJVAPGM)


Sintaxis:
Mandato DLTJVAPGM (1) >>-DLTJVAPGM-CLSF('nombre-archivo-clase')-> >-++->< | .-NONE-. | '-SUBTREE(+-*ALL-+-)-'

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

AS/400 Developer Kit para Java

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 ]

Ejemplo: mandato Suprimir programa Java (DLTJVAPGM)


El mandato Suprimir programa Java (DLTJVAPGM) suprime el programa Java que est asociado con el archivo de clase especificado, que se llama myJavaClassFileName. Nota: el mandato Suprimir programa Java (DLTJVAPGM) no suprime el archivo de clase ni el archivo ZIP. Ejemplo 1: suprimir un programa Java DLTJVAPGM CLSF(/projectA/team2/myJavaClassFileName.class) En El mandato Suprimir programa Java (DLTJVAPGM) hallar el diagrama de sintaxis e informacin detallada sobre los parmetros.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Mandato Volcar mquina virtual Java (DMPJVM)

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-'

Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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 ]

Ejemplo: Mandato Volcar mquina virtual Java (DMPJVM)


El mandato Volcar mquina virtual Java (DMPJVM) vuelca informacin acerca de la mquina virtual Java para un trabajo especificado. Ejemplo 1: Volcar una mquina virtual Java
DMPJVM JOB(099246/FRED/QJVACMDSRV)

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 ......................................................................

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

El mandato Visualizar programa Java (DSPJVAPGM)


Sintaxis:
Mandato DSPJVAPGM (1) >>-DSPJVAPGM-CLSF('nombre-archivo-clase')-> >-++->< | .-*. | '-OUTPUT(+-*PRINT-+-)'

96

AS/400 Developer Kit para Java

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.

*PRINT La salida 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

AS/400 Developer Kit para Java

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

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: mandato Visualizar programa Java (DSPJVAPGM)


El mandato Visualizar programa Java (DSPJVAPGM) visualiza el programa Java que est asociado con el archivo de clase especificado, que se llama myJavaClassFileName. Ejemplo 1: visualizar un programa Java
DSPJVAPGM CLSF('/projectA/team2/myJavaClassFileName.class') OUTPUT(*)

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 ]

Mandatos de Operations Navigator a los que da soporte Java


AS/400 Operations Navigator es una interfaz grfica para el escritorio de Windows. Forma parte de Client Access para Windows y suple muchas de las funciones de AS/400 que los administradores o los usuarios han de llevar a cabo en su trabajo diario. Operations Navigator da soporte a Java como conector de terceros. Para instalar el conector de terceros, es necesario instalar AS/400 Developer Kit para Java en el AS/400. A continuacin, debe instalarse AS/400 Developer Kit para Java en el PC mediante la opcin Instalacin selectiva de la carpeta Client Access. Los archivos de clase residen en el sistema de archivos integrado. Operations Navigator permite verlos en el panel de la derecha. Pulse con el botn derecho del ratn en el archivo de clase que desee utilizar. Con ello aparecer un men de contexto. Si selecciona Programa Java nuevo en el men de contexto, se iniciar el transformador Java, que crear un programa Java de AS/400 asociado con el archivo de clase. Un recuadro de dilogo permite especificar informacin detallada sobre la manera de crear el programa, que puede ser para transformacin Java o para interpretacin Java. Nota: si selecciona transformacin, los bytecodes del archivo de clase se transformarn en instrucciones RISC, lo que da como resultado mejor rendimiento que la interpretacin. La opcin Cambiar programa Java del men de contexto sirve para cambiar los atributos de los programas Java que estn conectados con archivos de clase Java, archivos ZIP o archivos JAR. Si selecciona Ejecutar programa Java en el men de contexto, se ejecutar el archivo de clase en AS/400. Aparecer un dilogo que permite especificar informacin detallada sobre la manera de ejecutar el programa. Si ya ha seleccionado Programa Java nuevo, al ejecutar el programa se utilizar el

100

AS/400 Developer Kit para Java

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 ]

Captulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java

101

102

AS/400 Developer Kit para Java

Captulo 5. Utilizacin de Java con otros lenguajes de programacin


Con Java existen varias maneras de llamar al cdigo escrito en un lenguaje distinto de Java. Java Native Interface: Una de las formas de llamar a cdigo escrito en otro lenguaje es implementar mtodos Java seleccionados como mtodos nativos. Los mtodos nativos son procedimientos, escritos en otro lenguaje, que proporcionan la implementacin real de un mtodo Java. Los mtodos nativos pueden acceder a la mquina virtual Java utilizando Java Native Interface (JNI). Estos mtodos nativos se ejecutan en la hebra Java, que es una hebra del kernel, por lo que han de ser seguros en ejecucin multihebra. Una funcin es segura en ejecucin multihebra si puede iniciarse simultneamente en varias hebras dentro de un mismo proceso. Asimismo, lo es, si y slo si, todas las funciones a las que llama lo son tambin. Los mtodos nativos constituyen el puente que permite acceder a las funciones del sistema a las que Java no da soporte directamente o que acta de interfaz con el cdigo de usuario existente. A la hora de utilizar mtodos nativos, conviene ser precavido porque el cdigo al que se llama puede no ser seguro en ejecucin multihebra. En Utilizacin de Java Native Interface para emplear mtodos nativos hallar ms informacin sobre JNI y los mtodos nativos. java.lang.Runtime.exec(): Para llamar a programas o mandatos desde dentro de un programa Java, puede utilizar java.lang.Runtime.exec(). El mtodo exec() inicia otro proceso en el que se puede ejecutar cualquier mandato o programa de AS/400. En este modelo, para la comunicacin entre procesos se puede utilizar la corriente de entrada, de salida y de error estndar del proceso hijo. Comunicacin entre procesos: Una opcin es utilizar sockets para la comunicacin entre el proceso padre y el proceso hijo. Tambin se pueden utilizar archivos continuos para la comunicacin entre programas. En Ejemplos de comunicacin entre procesos se da una visin general de las opciones con que se cuenta en la comunicacin con programas que se ejecutan en otro proceso. Para realizar llamadas a Java desde otros lenguajes, consulte Llamadas a Java desde otros lenguajes. Asimismo, para llamar en AS/400 a mandatos y programas existentes, puede utilizar AS/400 Toolbox para Java. Con este producto, para la comunicacin entre procesos se suelen utilizar mensajes de AS/400 y colas de datos.

Copyright IBM Corp. 1998, 1999

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 ]

Utilizacin de Java Native Interface para emplear mtodos nativos


Los mtodos nativos deben utilizarse nicamente en aquellos casos en que Java puro no responde a las necesidades de programacin. Debe limitar el uso de mtodos nativos y emplearlos slo en las circunstancias siguientes: v Para acceder a funciones del sistema que no estn disponibles por medio de Java puro. v Para implementar mtodos extremadamente sensibles al rendimiento que pueden beneficiarse en gran medida de una implementacin nativa. v Para tener una interfaz con API existentes que permitan a Java llamar a otras API. Para utilizar Java Native Interface (JNI) con el fin de emplear mtodos nativos, siga los pasos indicados a continuacin: 1. Disee la clase especificando por medio de la sintaxis estndar del lenguaje Java qu mtodos sern nativos. 2. Escoja un nombre de biblioteca y programa para el programa de servicio (*SRVPGM) que contiene las implementaciones de mtodo nativo. Cuando codifique la llamada a mtodo System.loadLibrary() en el inicializador esttico de la clase, especifique el nombre del programa de servicio. 3. Utilice la herramienta javac para compilar el fuente Java y obtener un archivo de clase. 4. Utilice la herramienta javah para crear el archivo de cabecera (.h). ste contiene los prototipos exactos para crear las implementaciones de mtodo nativo. La opcin -d especifica el directorio en el que debe crearse el archivo de cabecera. 5. Copie el archivo de cabecera desde el sistema de archivos integrado en un miembro de un archivo fuente; para ello, utilice el mandato Copiar desde archivo continuo (CPYFRMSTMF). Debe copiar el archivo de cabecera en un miembro de archivo fuente para que el compilador C pueda utilizarlo. Utilice el nuevo soporte de archivos continuos del mandato Crear programa ILE C/400 enlazado lgicamente (CRTCMOD) para dejar los archivos fuente y de cabecera C en el sistema de archivos integrado. Para obtener ms informacin sobre el mandato CRTCMOD y la utilizacin de archivos continuos, consulte la publicacin ILE C Programmers Guide, SC09-2712. 6. Escriba el cdigo de mtodo nativo. En Consideraciones en torno a las hebras y los mtodos nativos Java hallar informacin detallada sobre los lenguajes y las funciones que se utilizan para emplear mtodos nativos.

104

AS/400 Developer Kit para Java

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 ]

Consideraciones en torno a las hebras y los mtodos nativos Java


Los mtodos nativos sirven para acceder a funciones que no estn disponibles en Java. Para utilizar mejor Java junto con los mtodos nativos, es necesario tener claros los conceptos siguientes: v Una hebra Java, tanto si la ha creado Java como si es una hebra nativa conectada, tiene inhabilitadas todas las excepciones de coma flotante. Si la hebra ejecuta un mtodo nativo que vuelve a habilitar las excepciones de coma flotante, Java no las desactivar por segunda vez. Si la aplicacin de usuario no las inhabilita antes de volver a ejecutar el cdigo Java, es posible que el comportamiento de ste no sea el correcto si se produce una excepcin de coma flotante. Cuando una hebra nativa se desconecta de la mquina virtual Java, se restablece su mscara de excepcin de coma flotante en el valor que estaba en vigor en el momento de conectarse. v Cuando una hebra nativa se conecta a la mquina virtual Java, sta cambia la prioridad de las hebras, si conviene, para ajustarse a los esquemas de prioridad de uno a diez que define Java. Cuando la hebra se desconecta, se restablece la prioridad. Despus de conectarse, la hebra puede cambiar la prioridad de hebra utilizando una interfaz de mtodo nativo (por ejemplo, una API POSIX). Java no cambiar la prioridad de hebra en las transiciones de regreso a la mquina virtual Java. v El componente Invocation API de Java Native Interface (JNI) permite a un usuario incorporar una mquina virtual Java dentro de la aplicacin. Si una aplicacin crea una mquina virtual Java y sta finaliza de manera anormal, se

106

AS/400 Developer Kit para Java

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 ]

Series en mtodos nativos


La mayora de las funciones de Java Native Interface (JNI) aceptan como parmetros series estilo lenguaje C. Por ejemplo, la funcin FindClass() de JNI
Captulo 5. Utilizacin de Java con otros lenguajes de programacin

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 ]

Series literales en mtodos nativos


Resulta ms fcil codificar las series literales en UTF-8 si la serie est compuesta por una representacin ASCII de 7 bits. Si la serie es representable en ASCII, como ocurre con la mayora, puede ir entre sentencias pragma que modifiquen la pgina de cdigos actual del compilador. Entonces, el compilador almacenar internamente la serie en el formato UTF-8 que JNI requiere. Si la serie no es representable en ASCII, es ms fcil tratar la serie EBCDIC original como si fuese una serie dinmica y procesarla con iconv() antes de pasarla a JNI. Para obtener ms informacin acerca de series dinmicas, consulte el apartado Series dinmicas. Por ejemplo, para buscar una clase llamada java/lang/String, el cdigo ser as:
#pragma convert (819) myClass = (*env)->FindClass(env,java/lang/String); #pragma convert (0)

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

AS/400 Developer Kit para Java

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 ]

Conversin de series dinmicas a y desde EBCDIC, Unicode y UTF-8


Para manipular variables de tipo serie calculadas en tiempo de ejecucin, puede ser necesario convertir las series a, o desde, EBCDIC, Unicode y UTF-8. La API de sistema que proporciona la funcin de conversin de pgina de cdigos es iconv(). Para utilizar iconv(), siga estos pasos: 1. Cree un descriptor de conversin con QtqIconvOpen(). 2. Llame a iconv() para que utilice el descriptor con el fin de convertir una serie. 3. Cierre el descriptor mediante iconv_close. En el Ejemplo 3 de la utilizacin de Java Native Interface para ejemplos de mtodos nativos, la rutina crea, utiliza y a continuacin destruye el descriptor de conversin iconv dentro de la rutina. Esta estrategia evita los problemas que plantea la utilizacin multihebra del descriptor iconv_t, pero en el caso de cdigo sensible al rendimiento es mejor crear un descriptor de conversin en almacenamiento esttico y moderar el acceso mltiple al mismo utilizando una exclusin mutua u otro recurso de sincronizacin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Ejemplos: utilizacin de Java Native Interface para emplear mtodos nativos


Este programa de ejemplo es un ejemplo sencillo de Java Native Interface (JNI) en el que se utiliza un mtodo nativo C para visualizar Hello, World. Para generar el archivo NativeHello.h, se utiliza la herramienta javah con el archivo de clase NativeHello. En este ejemplo, se supone que la implementacin C NativeHello forma parte de un programa de servicio llamado NATHELLO. Nota: para poder ejecutar este ejemplo, la biblioteca en la que se encuentra el programa de servicio NATHELLO debe estar en la lista de bibliotecas. Ejemplo 1: clase NativeHello
public class NativeHello { // Se declara un campo de tipo 'String' (serie) en el objeto NativeHello. // Se trata de un campo de 'instancia', de manera que cada objeto // NativeHello contiene uno. public String theString; // variable de instancia // Se declara el mtodo nativo propiamente dicho. ste crea // un nuevo objeto de tipo serie y coloca una referencia al mismo // en 'theString' public native void setTheString(); // mtodo nativo para establecer la serie // Se llama a este cdigo de 'inicializador esttico' antes de // utilizar la clase por primera vez. static { // Se intenta cargar la biblioteca de mtodo nativo. Si no se // encuentra, se escribe un mensaje en 'out' y se intenta una va de acceso // especificada en el cdigo. Si esto falla, se sale.
Captulo 5. Utilizacin de Java con otros lenguajes de programacin

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); } }

Ejemplo 2: archivo de cabecera NativeHello.h generado


/* NO EDITE ESTE ARCHIVO - est generado por mquina */ #include <jni.h> /* Cabecera de la clase NativeHello */ #ifndef _Included_NativeHello #define _Included_NativeHello #ifdef __cplusplus extern C { #endif /* * Clase: NativeHello * Mtodo: setTheString * Firma: ()V */ JNIEXPORT void JNICALL Java_NativeHello_setTheString (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif

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

AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

} #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

Tr a b a j o i n t e r a c t i v o CLASE J AVA ( ' E x e c ' )

Lote trabajo 1 inmediato Qshell Cdigo de aplicacin de mquina virtual Java (clase Exec) Hebra x Recolector de desechos Hebra y

Lote trabajo 2 inmediato Qshell (hebras habilitadas)

Lote trabajo 3 inmediato Qshell (hebras habilitadas)

M A N D ATO CL

CLASE J AVA ( ' E x e c ' )

Qshell (hebras habilitadas)

Mandato CL (hebras habilitadas)

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 ]

Ejemplo: llamar a otro programa Java con java.lang.Runtime.exec()


Este ejemplo muestra la manera de llamar a otro programa Java con java.lang.Runtime.exec(). Esta clase llama al programa Hello que se entrega como parte de AS/400 Developer Kit para Java. Cuando la clase Hello graba en System.out, este programa obtiene un handle para la corriente y puede leer en ella. Nota: para llamar al programa, utilice el intrprete Qshell. Ejemplo 1: clase CallHelloPgm

import java.io.*; public class CallHelloPgm {

114

AS/400 Developer Kit para Java

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

En Utilizacin de java.lang.Runtime.exec() hallar la informacin previa necesaria.


[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Ejemplo: llamar a un programa CL con java.lang.Runtime.exec()


Este ejemplo muestra cmo ejecutar programas CL desde dentro de un programa Java. Consulte el apartado llamar a un mandato CL para obtener un ejemplo de cmo llamar a un mandato CL desde un programa Java. En este ejemplo, la clase Java CallCLPgm ejecuta un programa CL. ste utiliza el mandato Visualizar programa Java (DSPJVAPGM) para visualizar el programa asociado con el archivo de clase Hello. En este ejemplo, se supone que se ha compilado el programa CL y que existe en una biblioteca que se llama JAVSAMPLIB. La salida del programa CL est en el archivo en spool QSYSPRT. Nota: JAVSAMPLIB no se crea como parte del proceso de instalacin del programa bajo licencia (LP) AS/400 Developer Kit, nmero 5769-JV1. Se debe crear de manera explcita. Ejemplo 1: clase CallCLPgm
import java.io.*; public class CallCLPgm { public static void main(String[] args) { try {
Captulo 5. Utilizacin de Java con otros lenguajes de programacin

115

} catch(IOException e) { System.err.println(Error on exec() method); e.printStackTrace(); } } // fin del mtodo main() } // fin de la clase

Process theProcess = Runtime.getRuntime().exec(/QSYS.LIB/JAVSAMPLIB.LIB/DSPJVA.PGM);

Ejemplo 2: Visualizar un programa CL Java


PGM ENDPGM DSPJVAPGM CLSF('/QIBM/ProdData/Java400/com/ibm/as400/system/Hello.class') + OUTPUT(*PRINT)

En Utilizacin de java.lang.Runtime.exec() hallar la informacin previa necesaria.


[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]

Ejemplo: Llamar a un mandato CL con java.lang.Runtime.exec()


Este ejemplo muestra cmo ejecutar un mandato CL desde dentro de un programa Java. En este ejemplo de llamada a un mandato CL, la clase Java ejecuta un mandato CL. ste utiliza el mandato Visualizar programa Java (DSPJVAPGM) para visualizar el programa asociado con el archivo de clase Hello. La salida del mandato CL est en el archivo en spool QSYSPRT. Nota: Todos los mandatos que se pasan a la funcin Runtime.getRuntime().exec() deben estar entrecomillados y en formato Qshell. Adems, para poder ejecutar un mandato CL desde Qshell es necesario pasar la serie: system \CL COMMAND\ Donde CL COMMAND es el mandato CL que se desea ejecutar. As, la lnea para llamar al mandato MYCLCOM debe ser la siguiente: Runtime.getRuntime().exec(system \MYCLCOM\); Ejemplo 1: clase CallCLCom

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

En Utilizacin de java.lang.Runtime.exec() hallar la informacin previa necesaria.

116

AS/400 Developer Kit para Java

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplos de comunicacin entre procesos


A la hora de comunicar con programas que se ejecutan en otro proceso, existen diversas opciones. Una opcin es utilizar sockets para la comunicacin entre procesos. Un programa puede actuar de programa servidor, a la escucha de entrada procedente del programa cliente en una conexin por socket. El programa cliente se conecta al servidor por medio de un socket. Una vez establecida la conexin por socket, cualquiera de los dos programas puede enviar o recibir informacin. Otra opcin es utilizar archivos continuos para la comunicacin entre programas. Para ello, se utilizan las clases System.in, System.out y System.err. Una tercera opcin es utilizar AS/400 Toolbox para Java, que proporciona objetos de mensaje de AS/400 y colas de datos. Tambin se pueden realizar llamadas a Java desde otros lenguajes.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Utilizacin de sockets para la comunicacin entre procesos


Las corrientes de sockets comunican entre s programas que se ejecutan en procesos aparte. Los programas pueden iniciarse por separado o bien utilizando el mtodo java.lang.Runtime.exec() desde dentro del programa Java principal. Si un programa est escrito en un lenguaje distinto de Java, hay que asegurarse de que tiene lugar la conversin ASCII o EBCDIC. En Codificaciones de caracteres Java hallar informacin ms detallada. En Ejemplo: utilizacin de sockets para la comunicacin entre procesos hallar un ejemplo en el que se utilizan sockets.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Ejemplo: utilizacin de sockets para la comunicacin entre procesos


En este ejemplo se utilizan sockets para comunicar entre s un programa Java y un programa C. El programa C, que est a la escucha en un socket, debe iniciarse primero. Una vez el programa Java se ha conectado al socket, el programa C le enva una serie utilizando la conexin por socket. La serie que enva el programa C es una serie ASCII cuya pgina de cdigos es la 819. El programa Java debe iniciarse con el mandato java TalkToC xxxxx nnnn en la lnea de mandatos del intrprete Qshell o en otra plataforma Java. Tambin se puede entrar JAVA TALKTOC PARM(xxxxx nnnn) en la lnea de mandatos de AS/400 para iniciar el programa Java. xxxxx es el nombre de dominio o la direccin IP del sistema en el que se ejecuta el programa C. nnnn es el nmero de puerto del socket que el programa C utiliza. Este nmero de puerto debe utilizarse tambin como primer parmetro de la llamada al programa C.
Captulo 5. Utilizacin de Java con otros lenguajes de programacin

117

Ejemplo 1: clase cliente TalkToC


import java.net.*; import java.io.*; class TalkToC { private String host = null; private int port = -999; private Socket socket = null; private BufferedReader inStream = null; public static void main(String[] args) { TalkToC caller = new TalkToC(); caller.host = args[0]; caller.port = new Integer(args[1]).intValue(); caller.setUp(); caller.converse(); caller.cleanUp(); } // fin del mtodo main() public void setUp() { System.out.println(TalkToC.setUp() invoked); try { socket = new Socket(host, port); inStream = new BufferedReader(new InputStreamReader( socket.getInputStream())); } catch(UnknownHostException e) { System.err.println(Cannot find host called: + host); e.printStackTrace(); System.exit(-1); } catch(IOException e) { System.err.println(Could not establish connection for + host); e.printStackTrace(); System.exit(-1); } } // fin del mtodo setUp() public void converse() { System.out.println(TalkToC.converse() invoked); if (socket != null && inStream != null) { try { System.out.println(inStream.readLine()); } catch(IOException e) { System.err.println(Conversation error with host + host); e.printStackTrace(); } } // fin de if } // fin del mtodo converse() public void cleanUp() { try { if(inStream != null) { inStream.close(); } if(socket != null) { socket.close();

118

AS/400 Developer Kit para Java

} } // 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);

En Utilizacin de sockets para la comunicacin entre procesos hallar ms informacin.


[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Utilizacin de corrientes de entrada y de salida para comunicacin entre procesos


Las corrientes de entrada y de salida comunican entre s programas que se ejecutan en procesos aparte. El mtodo java.lang.Runtime.exec() ejecuta un programa. El programa padre puede obtener handles para las corrientes de entrada y de salida del proceso hijo y grabar o leer en ellas. Si el programa hijo est escrito en un lenguaje distinto de Java, hay que asegurarse de que tiene lugar la conversin ASCII o EBCDIC. En Codificaciones de caracteres Java hallar informacin ms detallada. En Ejemplo: utilizacin de corrientes de entrada y de salida para la comunicacin entre procesos hallar un ejemplo en el que se utilizan corrientes de entrada y de salida para la comunicacin entre procesos.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Ejemplo: utilizacin de corrientes de entrada y de salida para la comunicacin entre procesos


Este ejemplo muestra cmo llamar a un programa C desde Java y utilizar corrientes de entrada y de salida para la comunicacin entre procesos. En este ejemplo, el programa C graba una serie en su corriente de salida estndar y el programa Java la lee y la visualiza. En este ejemplo, se supone que se ha creado una biblioteca llamada JAVSAMPLIB y que en ella se ha creado el programa CSAMP1. Nota: JAVSAMPLIB no se crea como parte del proceso de instalacin del programa bajo licencia (LP) AS/400 Developer Kit, nmero 5769-JV1. Debe crearse de manera explcita. Ejemplo 1: clase CallPgm
import java.io.*; public class CallPgm { public static void main(String args[]) { Process theProcess = null; BufferedReader inStream = null; System.out.println(CallPgm.main() invoked); // se llama al programa CSAMP1 try

120

AS/400 Developer Kit para Java

} 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

theProcess = Runtime.getRuntime().exec( /QSYS.LIB/JAVSAMPLIB.LIB/CSAMP1.PGM);

Ejemplo 2: programa C CSAMP1


#include <stdio.h> #include <stdlib.h> void main(int argc, char* args[]) { /* Se convierte la serie a ASCII en tiempo de compilacin */ #pragma convert(819) printf(Program JAVSAMPLIB/CSAMP1 was invoked\n); #pragma convert(0) /* es posible que Stdout est en el almacenamiento intermedio, as que se vaca el mismo */ fflush(stdout); }

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 ]

Llamadas a Java desde otros lenguajes


Para llamar a programas Java desde otros lenguajes, es necesario llamar a un mandato que ejecute la mquina virtual Java. La API de llamada a un mandato vara y est en funcin del lenguaje que realiza la llamada a Java. Desde C, por ejemplo, la funcin system() ejecuta el mandato Ejecutar Java (RUNJVA). Desde CL, se puede llamar directamente al mandato RUNJVA. Otros lenguajes ILE pueden utilizar la llamada QCMDEXC. Nota: cualquiera de estas llamadas provoca la creacin de otro proceso en el que se ejecuta la mquina virtual Java. Para comunicar los procesos entre s, debe utilizar alguna forma de comunicacin entre procesos. Los sockets, las colas de datos y los archivos continuos son algunos de los mtodos de comunicacin entre procesos. Si se pasan datos entre programas, es necesario asegurarse de que los programas convierten correctamente los datos.

Captulo 5. Utilizacin de Java con otros lenguajes de programacin

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]

Ejemplo: llamadas a Java desde C


ste es un ejemplo de programa C que utiliza la funcin system() para llamar al programa Java Hello. Ejemplo 1: llamadas a Java desde C
#include <stdlib.h> int main(void) { int result; /* La funcin de sistema pasa la serie dada al procesador de mandatos CL para su ejecucin. */ result = system(JAVA CLASS('com.ibm.as400.system.Hello')); }

En Llamadas a Java desde otros lenguajes hallar ms informacin.


[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]

Ejemplo: llamadas a Java desde RPG


ste es un ejemplo de programa RPG que utiliza la API QCMDEXC para llamar al programa Java Hello. Ejemplo 1: llamadas a Java desde RPG
D* SE DEFINEN LOS PARMETROS DE LA API QCMDEXC D* DCMDSTRING S 25 INZ('JAVA CLASS(''com.ibm.as400.system.Hello'')') DCMDLENGTH S 15P 5 INZ(25) D* AHORA SE LLAMA A QCMDEXC CON EL MANDATO CL 'JAVA' C CALL 'QCMDEXC' C PARM CMDSTRING C PARM CMDLENGTH C* La siguiente lnea visualizar 'DID IT' despus de salir del C* shell Java por medio de F3 o F12. C 'DID IT' DSPLY C* Se activa LR para salir del programa RPG C SETON LR C

En Llamadas a Java desde otros lenguajes hallar ms informacin.


[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]

122

AS/400 Developer Kit para Java

Java Invocation API


Invocation API, que forma parte de Java Native Interface (JNI), permite al cdigo no Java crear una mquina virtual Java, as como cargar y utilizar clases Java. Esta funcin permite a un programa multihebra utilizar las clases Java que se ejecutan en varias hebras de una sola mquina virtual Java. La aplicacin controla la mquina virtual Java. La aplicacin puede crear la mquina virtual Java, llamar a mtodos Java (de forma parecida a cmo una aplicacin llama a subrutinas) y destruir la mquina virtual Java. Una vez creada, la mquina virtual Java est preparada para ejecutarse dentro del proceso hasta que la aplicacin la destruye de manera explcita. Mientras se destruye, la mquina virtual Java realiza operaciones de borrado como, por ejemplo, ejecutar finalizadores, finalizar las hebras de la mquina virtual Java y liberar los recursos de la mquina virtual Java. Con una mquina virtual Java preparada para ejecutarse, una aplicacin escrita en C puede llamar a la mquina virtual Java para que realice cualquier funcin. Tambin puede volver desde la mquina virtual Java a la aplicacin C, llamar de nuevo a la mquina virtual Java y as sucesivamente. La mquina virtual Java se crea una vez y no hace falta volverla a crear antes de llamarla para que ejecute cdigo Java (poco o mucho). Cuando se utiliza Invocation API para ejecutar programas Java, el destino de STDOUT y STDERR se controla por medio de una variable de entorno llamada QIBM_USE_DESCRIPTOR_STDIO. Si est establecida en Y o I (por ejemplo, QIBM_USE_DESCRIPTOR_STDIO=Y), la mquina virtual Java utiliza descriptores de archivo para STDIN (fd 0), STDOUT (fd 1) y STDERR (fd 2). En este caso, el programa debe establecer los descriptores de archivo en valores vlidos abrindolos como los tres primeros archivos o conductos del trabajo. Al primer archivo abierto en el trabajo se le da 0 como fd, al segundo 1 y al tercero 2. Para los trabajos iniciados con la API de engendramiento, estos descriptores pueden preasignarse mediante una correlacin de descriptores de archivo (consulte la documentacin de la API de engendramiento). Si la variable de entorno QIBM_USE_DESCRIPTOR_STDIO no est establecida o bien lo est en cualquier otro valor, no se utilizan descriptores de archivo para STDIN, STDOUT y STDERR. En lugar de ello, se direcciona STDOUT y STDERR a un archivo en spool propiedad del trabajo actual y la utilizacin de STDIN da como resultado una excepcin de E/S. En Ejemplo: Java Invocation API hallar un ejemplo en el que se utiliza Invocation API. En Funciones de Invocation API hallar informacin ms detallada sobre las funciones de invocation API a las que AS/400 Developer Kit para Java da soporte.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Funciones de Invocation API


AS/400 Developer Kit para Java da soporte a las funciones de Invocation API que se relacionan a continuacin. Nota: antes de usar esta API, debe asegurarse de que est en un trabajo con capacidad multihebra. En el tema dedicado al desarrollo de aplicaciones multihebra hallar ms informacin sobre los trabajos con capacidad multihebra. v JNI_GetDefaultJavaVMInitArgs Nota: Esta funcin slo est soportada para Java Development Kit (JDK) 1.1.x.
Captulo 5. Utilizacin de Java con otros lenguajes de programacin

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);

Firma para Java 2 Software Development Kit (J2SDK):


jint JNI_CreateJavaVM(JavaVM **p_vm, void **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

AS/400 Developer Kit para Java

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);

Firma para Java 2 Software Development Kit (J2SDK):


jint AttachCurrentThread(JavaVM *vm, void **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 ]

Soporte para varias mquinas virtuales Java


Java en el sistema AS/400, a diferencia de la implementacin de referencia de Sun Microsystems, Inc., soporta la creacin de varias mquinas virtuales Java dentro de un solo trabajo o proceso. Esto significa que puede llamarse

Captulo 5. Utilizacin de Java con otros lenguajes de programacin

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 ]

Ejemplo: Java Invocation API


Este ejemplo sigue el paradigma de Invocation API estndar. Por ejemplo, en l se hace lo siguiente: v Se crea una mquina virtual Java por medio de JNI_CreateJavaVM. v Se utiliza la mquina virtual Java para buscar el archivo de clase que se desea ejecutar.

126

AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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; }

En Java Invocation API hallar ms informacin.


[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Captulo 5. Utilizacin de Java con otros lenguajes de programacin

129

130

AS/400 Developer Kit para Java

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.

Copyright IBM Corp. 1998, 1999

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

AS/400 Developer Kit para Java


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);

Ejemplo 2: conectarse a la base de datos de AS/400; se especifica el esquema por omisin.


// Conexin con el sistema 'mySys2'. Se especifica el esquema por // omisin 'mySchema'. // El esquema es la biblioteca por omisin si no se especifica // ninguna en una consulta. Connection c2 = DriverManager.getConnection(jdbc:db2://mySys2/mySchema);

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);

Ejemplo 4: desconectarse de la base de datos


c.close();

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 ]

Crear una aplicacin JDBC


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. 2. Defina el URL. 3. Registre el controlador. 4. Conctese a la base de datos. 5. Cree un objeto Statement. 6. Ejecute las sentencias SQL que crean una tabla en la base de datos e insertan registros. 7. 8. 9. 10. 11. 12. Cierre Statement. Cree el objeto PreparedStatement. Establezca los parmetros y ejecute la sentencia. Cierre PreparedStatement. Cree el objeto CallableStatement. Establezca los parmetros de entrada, registre los parmetros de salida y ejecute los procedimientos almacenados. 13. Cierre CallableStatement. 14. Cierre la conexin. En Ejemplo: crear una aplicacin JDBC hallar un ejemplo de cmo combinar todas las interfaces para construir una aplicacin JDBC.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Ejemplo: crear una aplicacin JDBC


Los ejemplos dados a continuacin ilustran la manera de conjuntar todas las interfaces para construir una aplicacin JDBC.

134

AS/400 Developer Kit para Java

Ejemplo 1: aplicacin JDBC


// Antes de ejecutar este ejemplo, es necesario realizar alguna configuracin en el AS/400. // // 1. Busque una base de datos relacional *LOCAL (por ejemplo AS400NAME) mediante el mandato // CL WRKRDBDIRE, o aada uno si no existe tal entrada. Modifique el cdigo fuente para // este programa Java con este nombre y complelo. // // 2. Cree el procedimiento almacenado ADD en el AS/400 donde se va a ejecutar este // programa Java mediante los siguientes mandatos CL: // // (Nota: el ejemplo presupone que la biblioteca MYLIBRARY est vaca, una vez creada)// // > CRTLIB MYLIBRARY // > STRSQL // > CREATE PROCEDURE MYLIBRARY/ADD // (IN P1 INTEGER, IN P2 INTEGER, OUT P3 INTEGER) // LANGUAGE SQL SPECIFIC MYLIBRARY/ADD // JDCSPRSX: BEGIN // SET P3 = P1 + P2; // END JDCSPRSX // import java.lang.*; import java.util.*; import java.sql.*; import com.ibm.db2.jdbc.app.*; public class aJDBCApp { public static void main(String args[]) throws Exception { // Definir un URL donde AS400NAME sea una base de datos relacional *LOCAL // definida en un AS/400 mediante el mandato CL WRKRDBDIRE. String url = jdbc:db2://AS400NAME; // Se registra el controlador. Class.forName(com.ibm.db2.jdbc.app.DB2Driver); // Se conecta con la base de datos. Connection c = DriverManager.getConnection(url, ); // Se crea un objeto Statement. Statement s = c.createStatement(); // Se ejecuta una sentencia SQL que crea una tabla en la base de datos. s.executeUpdate(CREATE TABLE MYLIBRARY.MYTABLE (NAME VARCHAR(20), ID INTEGER)); // Se ejecuta una sentencia SQL que inserta un registro en la tabla. s.executeUpdate(INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES ('DAVE', 123)); // Se ejecuta una sentencia SQL que inserta un registro en la tabla. s.executeUpdate(INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES ('CINDY', 456)); // Se crea el objeto PreparedStatement. // ste precompila la sentencia SQL especificada. // Los signos de interrogacin sealan el 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. 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. ps.close(); // Se crea el objeto CallableStatement. // ste precompila la llamada especificada a un procedimiento almacenado. // Los signos de interrogacin sealan en lugar en que deben establecerse // los parmetros de entrada y el lugar en que deben recuperarse los // parmetros de salida. // Los dos primeros parmetros son de entrada // y el tercero es de salida. CallableStatement cs = c.prepareCall(CALL MYLIBRARY.ADD (?, ?, ?)); // Se establecen los parmetros de entrada.
Captulo 6. Acceso a la base de datos AS/400 con el controlador JDBC de AS/400 Developer Kit para Java

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 ]

Interfaz Statement para AS/400 Developer Kit para Java


Un objeto Statement es un objeto que ejecuta una sentencia SQL y, opcionalmente, obtiene el objeto ResultSet generado con ello. Para crear objetos Statement nuevos, utilice Connection.createStatement(). CallableStatement hereda de PreparedStatement y PreparedStatement hereda de Statement. Statement ejecuta una sentencia SQL sencilla sin parmetros. PreparedStatement ejecuta una sentencia SQL precompilada que puede o no tener parmetros IN. CallableStatement ejecuta una llamada a un procedimiento almacenado de base de datos. CallableStatement puede o no tener parmetros IN y OUT. En Ejemplo: interfaz Statement para AS/400 Developer Kit para Java hallar un ejemplo de objeto Statement.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

136

AS/400 Developer Kit para Java

Ejemplo: interfaz Statement para AS/400 Developer Kit para Java


ste es un ejemplo de objeto Statement. Ejemplo 1: objeto Statement
// Se conecta con AS/400. Connection c = DriverManager.getConnection(jdbc:db2://mySystem); // Se crea un objeto Statement. Statement s = c.createStatement(); // Se ejecuta una sentencia SQL que crea una tabla en la base de datos. s.executeUpdate(CREATE TABLE MYLIBRARY.MYTABLE (NAME VARCHAR(20), ID INTEGER)); // Se ejecuta una sentencia SQL que inserta un registro en la tabla. s.executeUpdate(INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES ('DAVE', 123)); // Se ejecuta una sentencia SQL que inserta un registro en la tabla. s.executeUpdate(INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES ('CINDY', 456)); // Se ejecuta una consulta SQL en la tabla. ResultSet rs = s.executeQuery(SELECT * FROM MYLIBRARY.MYTABLE); // Se cierra Statement y la conexin. s.close(); c.close();

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 ]

Interfaz PreparedStatement para AS/400 Developer Kit para Java


Un objeto PreparedStatement es un objeto que precompila y almacena sentencias SQL. El hecho de haber sido precompilada es lo que convierte en preparada a la sentencia. Este enfoque es ms eficiente que ejecutar la misma sentencia varias veces con un objeto Statement que compile la sentencia cada vez que se ejecute. Adems, la sentencia SQL contenida en un objeto PreparedStatement puede tener uno o varios parmetros IN. Para crear objetos PreparedStatement, utilice Connection.prepareStatement(). En Ejemplo: interfaz PreparedStatement para AS/400 Developer Kit para Java hallar un ejemplo de objeto PreparedStatement.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Ejemplo: interfaz PreparedStatement para AS/400 Developer Kit para Java


ste es un ejemplo de interfaz PreparedStatement. Ejemplo 1: interfaz PreparedStatement

// 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 ]

Interfaz CallableStatement para AS/400 Developer Kit para Java


Un objeto CallableStatement ejecuta procedimientos almacenados SQL. El procedimiento almacenado al que se llama debe estar ya almacenado en la base de datos. CallableStatement no contiene el procedimiento almacenado sino slo la llamada al mismo. Un procedimiento almacenado puede devolver uno o varios objetos ResultSet y puede utilizar parmetros IN, OUT e INOUT. Para crear objetos CallableStatement nuevos, utilice Connection.prepareCall(). En Ejemplo: interfaz CallableStatement para AS/400 Developer Kit para Java hallar un ejemplo de cmo utilizar la interfaz CallableStatement.
[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]

Ejemplo: interfaz CallableStatement para AS/400 Developer Kit para Java


ste es un ejemplo de cmo utilizar la interfaz CallableStatement. Ejemplo 1: interfaz CallableStatement
// Se conecta con AS/400. Connection c = DriverManager.getConnection(jdbc:db2://mySystem); // Se crea el objeto CallableStatement. // ste precompila la llamada a un procedimiento almacenado especificada. // Los signos de interrogacin sealan en lugar en que deben establecerse // los parmetros de entrada y el lugar en que deben recuperarse los // parmetros de salida. // Los dos primeros parmetros son de entrada y el tercero es de salida. CallableStatement cs = c.prepareCall(CALL MYLIBRARY.ADD (?, ?, ?)); // Se establecen los parmetros de entrada. 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.

138

AS/400 Developer Kit para Java

int sum = cs.getInt (3); // Se cierra CallableStatement y la conexin. cs.close(); c.close();

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]

Interfaz ResultSet para AS/400 Developer Kit para Java


El objeto ResultSet es un objeto que da acceso a una tabla de datos que se genera al ejecutar una consulta. Las filas de la tabla se recuperan en secuencia. Dentro de una fila, se puede acceder a los valores de columna en cualquier orden. Los datos almacenados en ResultSet se recuperan utilizando diversos mtodos get, en funcin del tipo de datos recuperados. El mtodo next() pasa a la siguiente fila. En Ejemplo: interfaz ResultSet para AS/400 Developer Kit para Java hallar un ejemplo de cmo utilizar la interfaz ResultSet.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Ejemplo: interfaz ResultSet para AS/400 Developer Kit para Java


ste es un ejemplo de cmo utilizar la interfaz ResultSet. Ejemplo 1: interfaz ResultSet
// Se conecta con AS/400. Connection c = DriverManager.getConnection(db2:as400://mySystem); // Se crea un objeto Statement. Statement s = c.createStatement(); // Se ejecuta una consulta. El resultado se coloca en un objeto ResultSet. ResultSet rs = s.executeQuery (SELECT NAME,ID FROM MYLIBRARY.MYTABLE); // Se repite en todas las filas de ResultSet. while (rs.next ()) { // Se obtienen los valores de ResultSet. // El primer valor es una serie y el segundo un entero. String name = rs.getString(NAME); int id = rs.getInt(ID); System.out.println(Name = + name); System.out.println(ID = + id); } // Se cierra Statement y la conexin. s.close(); c.close();

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

Interfaz DatabaseMetaData para AS/400 Developer Kit para Java


El objeto DatabaseMetaData facilita informacin acerca de la base de datos en su totalidad, as como informacin de catlogo. DatabaseMetaData determina cul es el soporte concreto que proporciona la base de datos. En Ejemplo: interfaz DatabaseMetaData para AS/400 Developer Kit para Java hallar un ejemplo de cmo utilizar la interfaz DatabaseMetaData.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Ejemplo: interfaz DatabaseMetaData para AS/400 Developer Kit para Java


Este ejemplo muestra cmo devolver una lista de tablas. Ejemplo 1: devolver una lista de tablas.
// Se conecta con AS/400. Connection c = DriverManager.getConnection(jdbc:db2://mySystem); // Se obtienen los metadatos de base de datos de la conexin. DatabaseMetaData dbMeta = c.getMetaData(); // Se obtiene una lista de tablas que cumplen los criterios. String catalog = myCatalog; String schema = mySchema; String table = myTable%; // % indica el patrn de bsqueda String types[] = {TABLE, VIEW, SYSTEM TABLE}: ResultSet rs = dbMeta.getTables(catalog, schema, table, types); // ... se repite en ResultSet para obtener los valores. // Se cierra Connection. c.close():

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 ]

Interfaz Blob para AS/400 Developer Kit para Java


Puede utilizar un objeto Blob para acceder a objetos grandes binarios (BLOB), como por ejemplo archivos byte de sonido (.wav) o archivos de imagen (.gif). NOTA: Utilice la interfaz Blob slo si tambin utiliza Java 2 para desarrollar la aplicacin. Con la clase Blob, puede utilizarse la propiedad de umbral lob. Esta propiedad especifica el tamao mximo de objeto grande (LOB) (en kilobytes) que puede recuperarse como parte de un conjunto de resultados. Los LOB cuyo tamao es superior a este umbral se recuperan por partes utilizando una comunicacin adicional con el servidor. Los umbrales de LOB ms amplios reducen la frecuencia de comunicacin con el servidor, pero bajan ms datos de LOB, aunque no se utilicen. Umbrales de LOB ms pequeos pueden aumentar la frecuencia de comunicacin con el servidor, pero slo bajan datos de LOB cuando son necesarios. Mediante la interfaz Blob, puede hacer lo siguiente:

140

AS/400 Developer Kit para Java

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);

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Interfaz Clob para AS/400 Developer Kit para Java


Si tiene JDBC 2.0, puede utilizar un objeto Clob para acceder a objetos grandes de caracteres (CLOB), como por ejemplo documentos grandes. NOTA: Utilice la interfaz Clob slo si tambin utiliza Java 2 para desarrollar la aplicacin. Con la clase Clob, puede utilizarse la propiedad de umbral lob. Esta propiedad especifica el tamao mximo de objeto grande (LOB) (en kilobytes) que puede recuperarse como parte de un conjunto de resultados. Los LOB cuyo tamao es superior a este umbral se recuperan por partes utilizando una comunicacin adicional con el servidor. Los umbrales de LOB ms amplios reducen la frecuencia de comunicacin con el servidor, pero bajan ms datos de LOB, aunque no se utilicen. Umbrales de LOB ms pequeos pueden aumentar la frecuencia de comunicacin con el servidor, pero slo bajan datos de LOB cuando son necesarios. Mediante la interfaz Clob, puede hacer lo siguiente: v Devolver la totalidad del clob como una corriente de caracteres ASCII v Devolver el contenido del clob como una corriente de caracteres v Devolver parte del contenido del clob v Devolver la longitud del clob El ejemplo siguiente muestra cmo utilizar la interfaz DB2Clob:
Clob clob = rs.getClob (1); int length = clob.getLength (); String s = clob.getSubString (0, (int) length);

[ 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

141

142

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
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.

Restricciones de SQLJ DB2


Al crear aplicaciones DB2 con SQLJ, debe tener en cuenta las siguientes restricciones: v El soporte SQLJ DB2 se ajusta a las restricciones estndar de DB2 Universal Database con respecto a la emisin de sentencias SQL. v El personalizador de perfil SQLJ DB2 slo debe ejecutarse en perfiles asociados con conexiones a la base de datos local. v La implementacin de referencia SQLJ requiere JDK 1.1.x. Consulte el apartado Soporte para varios Java Development Kit (JDK) para obtener ms informacin sobre la ejecucin de varias versiones de Java Development Kit. Para obtener informacin sobre la utilizacin de SQL en la aplicacin Java, consulte los apartados Intercalar sentencias SQL en la aplicacin Java y Compilacin y ejecucin de programas SQLJ.
[ Pgina de presentacin de Information Center | Comentarios ]
Copyright IBM Corp. 1998, 1999

[ Legal | Glosario de AS/400 ]

143

Intercalar sentencias SQL en la aplicacin Java


Las sentencias SQL estticas en SQLJ se encuentran en clusulas SQLJ. Las clusulas SQLJ empiezan por #sql y finalizan con un punto y coma (;). Antes de crear clusulas SQLJ en la aplicacin Java, importe los siguientes paquetes: v import java.sql.*; v import sqlj.runtime.*; v import sqlj.runtime.ref.*; Las clusulas SQLJ ms simples son clusulas ejecutables y constan del indicador #sql seguido de una sentencia SQL entre corchetes. Por ejemplo, la siguiente clusula SQLJ puede aparecer en cualquier lugar donde pueda aparecer legalmente una sentencia Java: #sql { DELETE FROM TAB }; El ejemplo anterior suprimir todas las filas de la tabla denominada TAB. Nota: Para obtener informacin sobre la compilacin y ejecucin de aplicaciones SQLJ, consulte el apartado Compilacin y ejecucin de programas SQLJ. En una clusula ejecutable SQLJ, los indicadores que aparecen dentro de los corchetes son indicadores SQL o variables de sistema principal. Todas las variables de sistema principal se distinguen mediante el carcter de dos puntos (:). Los indicadores SQL nunca aparecen fuera de los corchetes de una clusula ejecutable SQLJ. Por ejemplo, el siguiente mtodo Java inserta sus argumentos en una tabla SQL:
public void insertIntoTAB1 (int x, String y, float z) throws SQLException { #sql { INSERT INTO TAB1 VALUES (:x, :y, :z) }; }

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

AS/400 Developer Kit para Java

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 ]

Compilacin y ejecucin de programas SQLJ


Si el programa Java tiene sentencias SQLJ intercaladas, es necesario seguir un procedimiento especial para poder compilarlo y ejecutarlo. Para compilar y ejecutar el programa de Lenguaje de Consulta Estructurada para Java (SQLJ), siga estos pasos: Nota:Antes de empezar, configure la CLASSPATH para que contenga lo siguiente: /QIBM/ProdData/Java400/ext/sqlj_classes.jar /QIBM/ProdData/Java400/ext/translator.zip /QIBM/ProdData/Java400/ext/runtime.zip 1. Utilice el conversor de SQLJ, sqlj, en el cdigo fuente Java con SQL intercalado para generar cdigo fuente Java y perfiles asociados. Se generar un perfil para cada conexin. Por ejemplo, escriba el mandato: sqlj MyClass.sqlj Donde MyClass.sqlj es el nombre del archivo SQLJ. En este ejemplo, el conversor de SQLJ generar un archivo de cdigo fuente MyClass.java y los perfiles asociados. Los perfiles asociados se denominarn MyClass_SJProfile0.ser, MyClass_SJProfile1.ser, MyClass_SJProfile2.ser, y as sucesivamente. Nota: el conversor de SQLJ compila automticamente el cdigo fuente Java convertido en un archivo de clase, a menos que se desactive explcitamente la opcin de compilacin con la clusula -compile=false. 2. Utilice la herramienta SQLJ Profile Customizer, db2profc, para instalar personalizadores SQLJ DB2 en los perfiles generados y crear los paquetes DB2 en el sistema local. Por ejemplo, escriba el mandato: db2profc MyClass_SJProfile0.ser Donde MyClass_SJProfile0.ser es el nombre del perfil que el personalizador SQLJ DB2 ejecutar.
Captulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java

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.

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Variables de sistema principal en SQL para Java


Los argumentos para sentencias SQL intercaladas se pasan por medio de variables de sistema principal. Las variables de sistema principal son variables del lenguaje del sistema principal, y pueden aparecer en sentencias SQL. Estas variables pueden tres hasta tres componentes: v Un signo de dos puntos (:) como prefijo. v Una variable de sistema principal Java que es un identificador Java para un parmetro, variable o campo. v Un identificador de modalidad de parmetro opcional. este identificador de modalidad puede ser uno de los siguientes: IN, OUT o INOUT. La evaluacin de un identificador Java no tiene efectos colaterales en un programa Java, y por tanto puede aparecer varias veces en el cdigo Java generado para sustituir una clusula SQLJ. La siguiente consulta contiene la variable de sistema principal :x. Esta variable de sistema principal es el parmetro, campo o variable Java x que es visible en el mbito que contiene la consulta. SELECT COL1, COL2 FROM TABLE1 WHERE :x > COL3
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

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

AS/400 Developer Kit para Java

Ejemplo: intercalar sentencias SQL en la aplicacin Java


El siguiente ejemplo de aplicacin SQLJ, App.sqlj, utiliza SQL esttico para recuperar y actualizar datos de la tabla EMPLOYEE de la base de datos de ejemplo DB2. Ejemplo: intercalar sentencias SQL en la aplicacin Java:
import java.sql.*; import sqlj.runtime.*; import sqlj.runtime.ref.*; #sql iterator App_Cursor1 (String empno, String firstnme) ; // 1 #sql iterator App_Cursor2 (String) ; class App { /********************** ** Controlador de registro ** **********************/ static { try { Class.forName(com.ibm.db2.jdbc.app.DB2Driver).newInstance(); } catch (Exception e) { e.printStackTrace(); } } /******************** ** Main ** ********************/ public static void main(String argv[]) { try { App_Cursor1 cursor1; App_Cursor2 cursor2; String str1 = null; String str2 = null; long count1; // el URL es jdbc:db2:dbname String url = jdbc:db2:sample; DefaultContext ctx = DefaultContext.getDefaultContext(); if (ctx == null) { try { // conectar con id/contrasea por omisin Connection con = DriverManager.getConnection(url); con.setAutoCommit(false); ctx = new DefaultContext(con); } catch (SQLException e) { System.out.println(Error: could not get a default context); System.err.println(e) ; System.exit(1); } DefaultContext.setDefaultContext(ctx); } // recuperar datos de la base de datos System.out.println(Retrieve some data from the database.); #sql cursor1 = {SELECT empno, firstnme FROM employee}; // 2 // visualizar el conjunto de resultados
Captulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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 ]

El conversor de SQL para Java (SQLJ) (sqlj)


El conversor de SQLJ, sqlj, genera un perfil serializado que contiene informacin acerca de las operaciones SQL encontradas en el programa SQLJ. El conversor SQLJ utiliza el archivo /QIBM/ProdData/Java400/ext/translator.zip. Para obtener ms informacin acerca de las opciones de la lnea de mandatos sqlj, consulte la gua de usuario de SQLJ suministrada en la implementacin desde www.sqlj.org .
[ Legal | Glosario de AS/400 ]

[ Pgina de presentacin de Information Center | Comentarios ]

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

AS/400 Developer Kit para Java

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)

EUR JIS MDY DMY YMD JUL

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)

EUR JIS HMS

-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

AS/400 Developer Kit para Java

-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

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Imprimir el contenido de perfiles SQLJ DB2 (db2profp y profp)


El impresor de perfil SQLJ DB2, db2profp, imprime el contenido de un perfil personalizado DB2 en texto plano. El impresor de perfil, profp, imprime el contenido de los perfiles generados por el conversor de SQLJ en texto plano. Para imprimir el contenido de los perfiles generados por el conversor de SQLJ en texto plano, utilice el programa de utilidad profp de la forma siguiente: profp MyClass_SJProfile0.ser Donde MyClass_SJProfile0.ser es el nombre del perfil que desea imprimir. Para imprimir el contenido de la versin personalizada DB2 del perfil en texto plano, utilice el programa de utilidad db2profp de la forma siguiente: db2profp MyClass_SJProfile0.ser Donde MyClass_SJProfile0.ser es el nombre del perfil que desea imprimir. Nota: si ejecuta db2profp en un perfil no personalizado, simplemente le indicar que el perfil no se ha personalizado. Si ejecuta profp en un perfil personalizado, visualizar el contenido del perfil sin las personalizaciones. Utilizacin y sintaxis del impresor de perfil SQLJ DB2: db2profp [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:
Captulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java

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.

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

El instalador de auditor de perfil SQLJ (profdb)


El instalador de auditor de perfil SQLJ (profdb) instala y desinstala auditores de clase de depuracin. Loa auditores de clase de depuracin se instalan en un conjunto existente de perfiles binarios. Una vez instalados los auditores de clase de depuracin, se anotan todas las llamadas RTStatement y RTResultSet efectuadas durante la ejecucin de la aplicacin. Pueden anotarse en un archivo o en la salida estndar. A continuacin, las anotaciones pueden inspeccionarse para verificar el comportamiento y rastrear errores de la aplicacin. Tenga en cuenta que slo se auditan las llamadas efectuadas en tiempo de ejecucin a las interfaces RTStatement y RTResultSetcall subyacentes. Para instalar auditores de clase de depuracin, especifique lo siguiente en el indicador de mandatos de Qshell: profdb MyClass_SJProfile0.ser Donde MyClass_SJProfile0.ser es el nombre del perfil generado por el conversor SQLJ. Para desinstalar auditores de clase de depuracin, especifique lo siguiente en el indicador de mandatos de Qshell: profdb -Cuninstall MyClass_SJProfile.ser Donde MyClass_SJProfile0.ser es el nombre del perfil generado por el conversor SQLJ. Para obtener informacin acerca de las opciones de lnea de mandatos de profdb, , seleccione la categora de implementacin y dirjase a consulte www.sqlj.org la clase sqlj.runtime.profile.util.AuditorInstaller que se encuentra en la documentacin de la API Runtime.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

154

AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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 ]

Configurar AWT remoto para Java en una pantalla remota


Con AWT remoto se pueden ejecutar programas grficos AWT Java en AS/400 sin efectuar cambios en AS/400 y visualizar los grficos de forma remota. Para utilizar el AWT remoto debe tener el protocolo TCP/IP configurado y el JDK 1.1.x o Java 2 SDK (J2SDK), Standard Edition, versin 1.2. de Sun Microsystems, Inc. instalado en el AS/400 y en la pantalla remota. Como pantalla remota de AWT remoto se puede utilizar cualquier dispositivo de hardware con funciones grficas, incluido IBM Network Station, que cumpla los requisitos siguientes: v El sistema operativo que utiliza es Windows 95, Windows NT 4.0, IBM Operating System/2 (OS/2), Sun Solaris o AIX v Est configurado para acceder al AS/400 con TCP/IP v Java Development Kit 1.1.x (es aconsejable JDK 1.1.7 o posterior) o J2SDK, versin 1.2. Para configurar AWT remoto, realice las tareas siguientes: 1. Ponga los archivos de clase de AWT remoto a disposicin de la pantalla remota; para ello, copie los archivos en la pantalla remota o correlacione la va de acceso con una unidad de red de la pantalla remota. 2. Aada RAWTGui.zip o RAWTGui.jar a la CLASSPATH de la pantalla remotaPara JDK 1.1.x, aada el archivo RAWTGui.zip a la CLASSPATH de la pantalla remota estableciendo la variable de entorno CLASSPATH o utilizando

Copyright IBM Corp. 1998, 1999

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

AS/400 Developer Kit para Java

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

Adicin de RAWTGui.zip o RAWTGui.jar a la va de acceso de clases de la pantalla remota


Establecer la va de acceso de clases permite que la mquina virtual Java de la pantalla remota encuentre las clases de AWT remoto. Para aadir el archivo RAWTGui.zip a la va de acceso de clases de la pantalla remota, realice cualquiera de estos pasos: v Establezca la variable de entorno CLASSPATH. Consulte la informacin de Java Development Kit (JDK) correspondiente a la pantalla remota para obtener detalles. Aada la va de acceso en la que se encuentra situado el archivo RAWTGui.zip a la variable de entorno CLASSPATH. v Utilice el parmetro -classpath del mandato java. Cuando se utiliza el mandato java para iniciar AWT remoto, se puede utilizar el parmetro -classpath para especificar una va de acceso de clases. El parmetro CLASSPATH incluye la va de acceso donde se encuentra el archivo RAWTGui.zip. Por ejemplo, en Windows, el parmetro de va de acceso de clases puede ser as:
-classpath c:\jdk1.1.7\lib\classes.zip;c:\rawt\RAWTGui.zip

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]

Iniciar AWT remoto para Java en un pantalla remota


Es necesario iniciar el daemon servidor en la pantalla remota una sola vez y permanecer activo hasta que lo finalice. Los programas Java que salen a AS/400 no finalizan el servidor. Nota: el dilogo Bienvenido permanece activo al iniciar el daemon servidor. Cuando se cierra el dilogo Bienvenido, finaliza el daemon servidor. Puede minimizar la pantalla del dilogo Bienvenido mientras el daemon servidor est activo y utilizar la pantalla para finalizarlo. Para iniciar el daemon servidor de Abstract Window Toolkit (AWT) remoto para JDK 1.1.x, especifique lo siguiente en la lnea de mandatos:
java com.ibm.rawt.server.RAWTPCServer

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

AS/400 Developer Kit para Java

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 ]

Ejecutar un programa Java con AWT remoto


Para ejecutar Java con AWT remoto: 1. Inicie AWT remoto en la pantalla remota. 2. Inicie el programa Java en AS/400. a. Entre el mandato Ejecutar Java (RUNJVA) en la lnea de mandatos. Nota: debe definir la va de acceso de clases Java del programa Java. b. Pulse F4 (Solicitud). c. Entre el nombre de clase del programa Java en la lnea de parmetro de clase. d. Pulse F10 (Parmetros adicionales). e. Pulse la tecla Av Pg. f. Entre RmtAwtServer en la siguiente lnea de parmetro de nombre de propiedad. g. Entre la direccin TCP/IP (por ejemplo, 1.1.11.11) de la pantalla remota en la siguiente lnea de parmetro de valor de propiedad. h. Entre os400.class.path.rawt en la lnea de parmetro de nombre de propiedad. i. Entre 1 en la lnea de parmetro de valor de propiedad. j. k. Especifique + para entrar ms propiedades. Especifique java.version en la lnea de parmetro de nombre de propiedad. l. Especifique 1.2 en la lnea de parmetro de valor de propiedad. La lnea de mandatos ser as:

java class (classname) prop((RmtAwtServer '1.1.11.11') (os400.class.path.rawt 1)(java versio

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

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejecutar un programa Java utilizando AWT remoto con Netscape


A la hora de ejecutar aplicaciones Java con Netscape, esto puede hacerse de dos maneras. Una opcin es iniciar el servidor de AWT remoto dentro de la mquina virtual Java de Netscape abriendo un archivo HTML que contenga com.ibm.rawt.server.StartRAWT.class. Por ejemplo, vea el el archivo RAWT.html que figura ms abajo. Una vez se haya iniciado, ya puede iniciar una aplicacin Java en el AS/400. Otra posibilidad es iniciar el servidor de AWT remoto dentro de la mquina virtual Java de Netscape abriendo un archivo HTML que contenga com.ibm.rawt.server.StartRAWT400.class y las clases de AS/400 Toolbox para Java. Por ejemplo, vea el archivo RAWT400.html que se muestra ms abajo. Una vez se haya iniciado, ya puede iniciar la sesin en el AS/400 en el que reside la aplicacin Java e iniciar dicha aplicacin. Ejecutar el servidor de AWT remoto dentro de la mquina virtual Java de Netscape: Para ejecutar el servidor de AWT remoto dentro de la mquina virtual Java de Netscape, siga estos pasos: 1. Edite este archivo .html de ejemplo de acuerdo con la informacin especfica de la instalacin de RAWTGui.zip. Este archivo, RAWT.html, inicia AWT remoto dentro de la mquina virtual Java de Netscape.
<HTML> <BODY TEXT=#000000 LINK=#0000EE VLINK=#551A8B ALINK=#FF0000> <CENTER> <APPLET CODE=com.ibm.rawt.server.StartRAWT.class codebase=file://C|remote_awt\jdk1.1.7\lib\RAWTGui.zip WIDTH=600 HEIGHT=50> </APPLET> </CENTER> </BODY> </HTML>

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

AS/400 Developer Kit para Java

<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 ]

Imprimir con AWT remoto


Imprimir con AWT remoto es una tarea que se realiza igual que en el AWT Java estndar. La pantalla remota de AWT remoto procesa la salida de impresin y la dirige a cualquier impresora que el sistema operativo de la pantalla remota conozca. Puede tratarse de una impresora que est conectada directamente a la pantalla remota o bien de una impresora de red que el sistema operativo de la pantalla remota conozca. Puede optar por imprimir en la pantalla remota o en un AS/400. Cuando una aplicacin emite una peticin de impresin, se abre un dilogo de imprimir nuevo. La peticin de impresin permite seleccionar una impresora de la pantalla remota o una de OS/400. Si selecciona una impresora de OS/400, aparecer una pantalla de inicio de sesin. Una vez iniciada la sesin, aparecer una pantalla con el dilogo de imprimir. Puede especificar el ttulo de la pgina de cabecera y el archivo, el archivo de impresin y la cola de impresin de OS/400. Tambin puede seleccionar el tamao del papel, la orientacin y el nmero de copias. Para utilizar la impresin remota, debe instalar AS/400 Toolbox para Java (5763-JC1) y aadir lo siguiente a la va de acceso de clases del AS/400:
QIBM/ProdData/HTTP/Public/jt400/lib/jt400.zip

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

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Propiedades de AWT remoto


Cuando se ejecuta una aplicacin de AWT remoto Java en el sistema AS/400, se debe utilizar la propiedad os400.class.path.rawt con el valor 1. Existe un nmero de propiedades por omisin que son necesarias al utilizar AWT remoto. Estas propiedades por omisin, junto con la versin adecuada de AWT remoto y la CLASSPATH, se establecen al utilizar la propiedad os400.class.path.rawt. La versin de AWT remoto se establece de acuerdo con la versin de JDK, que es la versin por omisin, si no se especifica, o la versin especificada con la propiedad java.version. Estas son las propiedades por omisin que son necesarias para AWT remoto. Para JDK 1.1.x: v awt.toolkit=com.ibm.rawt.CToolkit Para J2SDK, versin 1.2: v awt.toolkit=com.ibm.rawt2.ahost.java.awt.AHToolkit v java.awt.graphicsenv=com.ibm.rawt2.ahost.java.awt.AHGraphicsEnvironment v java.awt.printerjob=com.ibm.rawt2.ahost.java.awt.print.AHPrinterjob Propiedades de AWT remoto para la pantalla remota: Si el daemon servidor o la aplicacin Java finaliza de forma anormal con el mensaje siguiente, compruebe la versin de Java de la pantalla remota.
La versin de JDK del sistema principal de la aplicacin/de la estacin del usuario es incompatible con la versin de AWT remoto...

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 ]

Restricciones de SecurityManager de AWT remoto


Las aplicaciones Java que utilizan AWT remoto bajo el control de SecurityManager tienen algunas restricciones. Las clases de AWT remoto inician mtodos, que llaman a mtodos de comprobacin SecurityManager en aquellos casos en que est establecido SecurityManager. En tales casos, es posible que una aplicacin Java que se ejecute con AWT remoto se encuentre con una excepcin SecurityException. Los mtodos de comprobacin a los que se llama como resultado de la ejecucin con AWT remoto son: v SecurityManager.checkAccess(..) v SecurityManager.checkMemberAccess(..) v SecurityManager.checkExit(..)

164

AS/400 Developer Kit para Java

v v v v

SecurityManager.checkRead(String file) SecurityManager.checkConnect(...) SecurityManager.checkListen(...) SecurityManager.checkAccept(...)

v SecurityManager.checkPropertiesAccess(..)
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Establecimiento de Class Broker para Java en una pantalla remota


Con Class Broker para Java (CBJ), puede ejecutar programas grficos Java habilitados para Class Broker para Java en AS/400 y visualizar los grficos remotamente. Puede instalar CBJ por su cuenta o solicitar al administrador del sistema que lo instale. Si el administrador del sistema instala el producto, todos los programadores pueden compartir el mismo cdigo Java. Puede instalar CBJ en Windows 95/98/NT, UNIX o AS/400. En la mayora de los casos, debe instalar CBJ en la mquina cliente y en la mquina servidor. Nota:si la mquina cliente ejecuta un applet cliente al que se accede a travs de un servidor Web de la mquina servidor, no es necesario instalar CBJ en la mquina cliente. Para instalar CBJ en AS/400, consulte el apartado Instalacin de Class Broker para Java en AS/400 . Para instalar CBJ en la estacin de trabajo, consulte el apartado Instalacin de Class Broker para Java en Windows 95/98/NT o UNIX
[ Pgina de presentacin de Information Center | Comentarios ]

.
[ Legal | Glosario de AS/400 ]

Instalacin de Class Broker para Java en AS/400


Para instalar Class Broker para Java (CBJ) en AS/400, siga estos pasos: 1. Asegrese de que AS/400 Developer Kit para Java est instalado correctamente. Consulte el apartado Instalacin de AS/400 Developer Kit para Java para comprobar la instalacin. 2. Seleccione un directorio del sistema de archivos integrado para almacenar el paquete CBJ denominado cbj_1.1.jar. Por ejemplo, /usr/local. 3. Inicie el intrprete de Qshell entrando el mandato QSH y vaya al directorio que ha seleccionado en el sistema de archivos integrado. Por ejemplo, /usr/local. Al instalar AS/400 Developer Kit para Java, el paquete cbj_1.1.jar se instala en QIBM/ProdData/Java400/ext. 4. Entre este mandato en Qshell:
jar xvf VIA_ACCESOcbj_1.1.jar

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 .

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Instalacin de Class Broker para Java en Windows o UNIX


Para instalar Class Broker para Java (CBJ) en Windows, siga estos pasos: 1. Asegrese de que JDK/JRE1.1 o JDK/JRE1.2 estn instalados correctamente. 2. Seleccione un directorio para almacenar el paquete CBJ denominado cbj_1.1.jar. Por ejemplo, C:\. 3. Cambie al directorio (C:\) y entre este mandato:
C:\ > jar xvf cbj_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

AS/400 Developer Kit para Java

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.

[ Pgina de presentacin de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Contenido de paquete de cbj_1.1.jar


Este es el paquete CBJ (cbj_1.1.jar). Los elementos en negrita corresponden a directorios principales de subdirectorios. Los que no aparecen en negrita corresponden a archivos.
JCBroker | |____ demo | |______ bin | |______ binx | |______ html | |______ images | |______ lib | | |___ discovery | | |___ distreetable | | |___ ftp | | |___ hellojcb | | |___ jcbcalc | | |___ jcbchat | | |___ lhellojcb | | |___ remotethread | | |___ stylepad | | |___ websmdemo | |______ log | |______ src |____ doc | |_______ api | |_______ guide | |_______ FAQ.html | |_______ quickStart.html |____ lib | |________ com | | |____ ibm | | |______ jcb | | |____ resources | | |_______ JCB.properties | |________ jcb.jar | |________ jcbd.jar | |________ applet_jcb.jar | |________ applet_jcbd.jar | |________ Editor.class |____ src | |________ com (slo para usuarios designados) | | |_____ ibm | | |_____ jcb | | | |___ proxies | | | |___ resources | | | |___ u t i l | | |_____ jcbimpl | | |___ transport | |________ version.log |_______ index.html (open it)
Captulo 8. Ejecucin de la aplicacin Java en un sistema principal sin interfaz grfica de usuario

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

AS/400 Developer Kit para Java

[ 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

169

170

AS/400 Developer Kit para Java

Captulo 9. Seguridad Java


La mayora de los programas Java que se ejecutan en AS/00 son aplicaciones y no applets, por lo que no estn restringidos por el modelo de seguridad sandbox. Desde el punto de vista de la seguridad, las aplicaciones Java estn sujetas a las mismas restricciones que cualquier otro programa en AS/400. Para ejecutar un programa Java en AS/400, se debe tener autorizacin sobre el archivo de clase en el sistema de archivos integrado. Una vez iniciado, el programa se ejecuta con la autorizacin del usuario. Se puede utilizar la autorizacin adoptada para acceder a los objetos con la autorizacin del usuario que ejecuta el programa y la autorizacin del propietario del programa. La autorizacin adoptada da temporalmente a un usuario autorizacin sobre objetos a los que, en principio, no habra estado autorizado a acceder. En el tema dedicado al mandato Crear programa Java (CRTJVAPGM) hallar informacin detallada sobre los dos nuevos parmetros de autorizacin adoptada, que son USRPRF y USEADPAUT. El cargador y el verificador de bytecodes, dentro de la mquina virtual Java, tambin constituyen una medida del modelo de seguridad Java. Al igual que sucede con los applets, el cargador y el verificador de bytecodes comprueban que los bytecodes sean vlidos y que los tipos de datos se utilicen correctamente. Tambin comprueban que se acceda correctamente a los registros y a la memoria y que la pila no sufra desbordamientos ni subdesbordamientos. Estas comprobaciones garantizan que la mquina virtual Java puede ejecutar con total seguridad la clase sin poner en peligro la integridad del sistema. La ampliacin estndar Java SSL de JDK 1.1 es otro factor de seguridad al que AS/400 Developer Kit para Java da soporte. SSL proporciona los medios para autenticar un servidor y un cliente con el fin de ofrecer privacidad e integridad de datos. Toda comunicacin SSL comienza con el reconocimiento mutuo del servidor y el cliente. Durante el reconocimiento, SSL negocia la suite de cifrado que utilizarn el cliente y el servidor para comunicarse entre s. La suite de cifrado es una combinacin de diversas funciones de seguridad disponibles a travs de SSL. La combinacin de varias funciones distintas de seguridad ofrece un mayor grado de seguridad en las comunicaciones de cliente y servidor.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

El modelo de seguridad Java


Los applets Java se pueden bajar de cualquier sistema; por tanto, dentro de la mquina virtual Java existen mecanismos de seguridad encargados de la proteccin frente a applets malintencionados. El sistema de ejecucin Java verifica los bytecodes a medida que la mquina virtual Java los va cargando. Esto garantiza que son bytecodes vlidos y que el cdigo no viola ninguna de las restricciones que la mquina virtual Java impone a los applets Java. stas afectan a las operaciones que pueden realizar los applets, a la forma en que stos pueden acceder a la memoria y a la manera en que pueden utilizar la mquina virtual Java. Las restricciones se imponen con el fin de impedir que un applet Java pueda

Copyright IBM Corp. 1998, 1999

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 ]

[ Pgina de presentacin de Information Center | Comentarios ]

172

AS/400 Developer Kit para Java

Preparacin de AS/400 para el soporte de capa de sockets seguros


Para preparar el sistema a fin de que pueda utilizar SSL, es necesario instalar el programa bajo licencia Digital Certificate Manager: v 5769-SS1 OS/400 - Digital Certificate Manager Tambin es necesario instalar uno de los programas bajo licencia Cryptographic Access Provider siguientes: v 5769-AC1 Cryptographic Access Provider de 40 bits v 5769-AC2 Cryptographic Access Provider de 56 bits v 5769-AC3 Cryptographic Access Provider de 128 bits Tambin debe asegurarse de que puede acceder a un certificado digital, o bien crear uno, en el sistema. Si desea obtener ms informacin sobre la gestin de certificados digitales de AS/400 e Internet, consulte la gua de iniciacin de IBM Digital Certificate Manager. Para obtener ms informacin sobre la seguridad de AS/400 en general, consulte la gua de iniciacin de Firewall.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Cryptographic Access Providers


Los programas Cryptographic Access Provider ofrecen innumerables suites de cifrado al sistema. Una suite de cifrado es una combinacin de distintas funciones de seguridad. En esta lista se indica cules son las suites de cifrado que ofrece cada programa Cryptographic Access Provider: 5769-AC1 Cryptographic Access Provider de 40 bits SSL_RSA_WITH_NULL_MD5 SSL_RSA_WITH_NULL_SHA SSL_RSA_EXPORT_WITH_RC4_40_MD5 SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 5769-AC2 Cryptographic Access Provider de 56 bits SSL_RSA_WITH_NULL_MD5 SSL_RSA_WITH_NULL_SHA SSL_RSA_WITH_DES_CBC_SHA SSL_RSA_WITH_DES_CBC_MD5 SSL_RSA_EXPORT_WITH_RC4_40_MD5 SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 5769-AC3 Cryptographic Access Provider de 128 bits SSL_RSA_WITH_NULL_MD5 SSL_RSA_WITH_NULL_SHA SSL_RSA_EXPORT_WITH_RC4_40_MD5 SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 SSL_RSA_WITH_RC4_128_SHA SSL_RSA_WITH_DES_CBC_SHA
Captulo 9. Seguridad Java

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 ]

Eleccin de un certificado digital


A la hora de decidir cul es el certificado digital que va a utilizar, debe tomar en consideracin diversos factores. Se puede utilizar el certificado por omisin del sistema o bien especificar otro certificado. Interesa utilizar el certificado por omisin del sistema si: v No existe ningn requisito especfico de seguridad para la aplicacin Java. v Se desconoce el tipo de seguridad que se necesita para la aplicacin Java. v El certificado por omisin del sistema cumple los requisitos de seguridad de la aplicacin Java. Nota: si decide que desea utilizar el certificado por omisin del sistema, consulte con el administrador del sistema para asegurarse de que se ha creado un certificado por omisin del sistema. Para obtener ms informacin acerca de la gestin de certificados digitales, consulte la Gua de iniciacin de IBM Digital Certificate Manager. Si no desea utilizar el certificado por omisin del sistema, tendr que elegir otro certificado. Puede optar por dos tipos de certificados: v Un certificado de usuario, que identifica al usuario de la aplicacin. v Un certificado de sistema, que identifica al sistema en el que se ejecuta la aplicacin. Las cuestiones planteadas a continuacin pueden servirle de ayuda a la hora de decidirse por un certificado de usuario o uno de sistema: v Cmo se ejecuta la aplicacin Java, como cliente o como servidor? Si se ejecuta como cliente, probablemente le interese utilizar un certificado de usuario. Si se ejecuta como servidor, probablemente le interese utilizar un certificado de sistema. v A quin desea que identifique el servidor, al usuario que trabaja con la aplicacin o al sistema en el que se ejecuta la misma? Si desea que identifique al usuario que trabaja con la aplicacin, le interesa utilizar un certificado de usuario. Si desea que identifique al sistema en el que se ejecuta la aplicacin, le interesa utilizar un certificado de sistema.

174

AS/400 Developer Kit para Java

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 ]

Utilizacin del certificado digital al ejecutar la aplicacin Java


Para utilizar SSL, es necesario ejecutar la aplicacin Java con un certificado digital. Para especificar el certificado digital que debe utilizarse, utilice las siguientes propiedades: v -os400.certificateContainer v -os400.certificateLabel Por ejemplo, si desea ejecutar la aplicacin Java MyClass.class utilizando el certificado digital MYCERTIFICATE, y MYCERTIFICATE se encuentra en el contenedor de certificados digitales YOURDCC, el mandato java ser el siguiente: java -os400.certificateContainer=YOURDCC -os400.certificateLabel=MYCERTIFICATE MyClass Si todava no se ha decidido por un certificado digital, consulte el apartado Decidir cul es el certificado digital que va a utilizarse. Tambin puede decidir utilizar el certificado por omisin del sistema, que est almacenado en el contenedor de certificados por omisin del sistema. Para utilizar el certificado digital por omisin del sistema, no es necesario que especifique ningn certificado ni ningn contenedor de certificados en ninguna parte. La aplicacin Java utilizar el certificado digital por omisin del sistema de forma automtica. Siga leyendo para obtener ms informacin sobre los siguientes temas: v Certificados digitales y la propiedad -os400.certificateLabel (pgina Certificados digitales y la propiedad -os400.certificateLabel) v Contenedores de certificados digitales y la propiedad -os400.certificateContainer (pgina Contenedores de certificados digitales y la propiedad -os400.certificateContainer en la pgina 176) Si desea obtener ms informacin sobre la gestin de certificados digitales de AS/400 e Internet, consulte la gua de iniciacin de IBM Digital Certificate Manager.

Certificados digitales y la propiedad -os400.certificateLabel


Los certificados digitales son un estndar de Internet para identificar aplicaciones, usuarios y sistemas seguros. Los certificados digitales se almacenan en contenedores de certificados digitales. Si desea utilizar el certificado por omisin de un contenedor de certificados digitales, no es necesario que especifique una etiqueta de certificado. Si desea utilizar un certificado digital determinado, es necesario que especifique la etiqueta de dicho certificado en el mandato java utilizando esta propiedad: -os400.certificateLabel= Por ejemplo, si el nombre del certificado que desea utilizar es MYCERTIFICATE, el mandato java especificado ser el siguiente: java -os400.certificateLabel=MYCERTIFICATE MyClass
Captulo 9. Seguridad Java

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.

Contenedores de certificados digitales y la propiedad -os400.certificateContainer


Los contenedores de certificados digitales almacenan certificados digitales. Si desea utilizar el contenedor de certificados por omisin del sistema AS/400, no es necesario que especifique un contenedor de certificados. Si desea utilizar un contenedor de certificados digitales determinado, es necesario que especifique dicho contenedor de certificados digitales en el mandato java utilizando esta propiedad: -os400.certificateContainer= Por ejemplo, si el nombre del contenedor de certificados que contiene el certificado digital que desea utilizar se denomina MYDCC, el mandato java que debera entrar sera: java -os400.certificateContainer=MYDCC MyClass En este ejemplo, la aplicacin Java llamada MyClass.class se ejecutara en el sistema utilizando el certificado digital por omisin que se halla en el contenedor de certificados digitales llamado MYDCC. Los sockets creados en la aplicacin utilizarn el certificado por omisin de MYDCC para identificarse y hacer que las comunicaciones sean seguras. Si deseara utilizar el certificado digital MYCERTIFICATE en el contenedor de certificados digitales, el mandato java especificado sera el siguiente: java -os400.certificateContainer=MYDCC -os400.certificateLabel=MYCERTIFICATE MyClass
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Modificacin del cdigo Java para utilizar fbricas de sockets


Para utilizar SSL con el cdigo existente, primero debe modificar ste para que utilice las fbricas de sockets. Para modificar el cdigo para que utilice fbricas de sockets: 1. Aada la lnea siguiente al programa con el fin de importar la clase SocketFactory:
import javax.net.*;

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();

v La declaracin completa de SocketFactory debe ser as:


SocketFactory 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

AS/400 Developer Kit para Java

Las declaraciones de sockets deben ser as:


Socket s = socketFactory.createSocket(host,port);

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

Ejemplo 2: programa Simple Socket Server con fbricas de sockets


/* 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) { os.write(buffer, 0, bytesRead); os.flush(); } s.close(); serverSocket.close(); } }

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

AS/400 Developer Kit para Java

/* 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.

Ejemplo 2: programa Simple Socket Client con fbricas de sockets


/* Programa Simple Socket Factory Client */ // Observe que se importa javax.net.* para tomar la clase SocketFactory. import javax.net.*; import java.net.*; import java.io.*; public class factorySocketClient { public static void main (String args[]) throws IOException { int serverPort = 3000; if (args.length < 1) { System.out.println(java factorySocketClient 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 cambia el programa simpleSocketClient original para crear una // fbrica de sockets y utilizar sta para crear sockets. SocketFactory socketFactory = SocketFactory.getDefault(); // Ahora la fbrica crea el socket. Es el ltimo cambio // que se realiza en el programa simpleSocketClient original. Socket s = socketFactory.createSocket(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 ]

Modificacin del cdigo Java para utilizar la capa de sockets seguros


Si el cdigo utiliza fbricas de sockets para crear los sockets, puede aadir al programa el soporte SSL. Si el cdigo no utiliza fbricas de sockets, consulte Modificar el cdigo Java para que utilice fbricas de sockets.
Captulo 9. Seguridad Java

179

Para modificar el cdigo para que utilice SSL: v Importe javax.net.ssl.* para aadir el soporte SSL:
import javax.net.ssl.*;

v Declare una fbrica de sockets utilizando SSLSocketFactory para inicializarla:


SocketFactory newSF = SSLSocketFactory.getDefault();

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

AS/400 Developer Kit para Java

} s.close(); serverSocket.close();

os.write(buffer, 0, bytesRead); os.flush();

Ejemplo 2: clase factorySocketServer sencilla con 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) { os.write(buffer, 0, bytesRead); os.flush(); } 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.

Captulo 9. Seguridad Java

181

Ejemplo 1: clase factorySocketClient sencilla sin soporte SSL


/* Programa Simple Socket Factory Client */ import javax.net.*; import java.net.*; import java.io.*; public class factorySocketClient { public static void main (String args[]) throws IOException { int serverPort = 3000; if (args.length < 1) { System.out.println(java factorySocketClient 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); SocketFactory socketFactory = SocketFactory.getDefault(); Socket s = socketFactory.createSocket(args[0], serverPort); . . . // El resto del programa sigue a partir de aqu.

Ejemplo 2: clase factorySocketClient sencilla con soporte SSL


// Observe que importamos javax.net.ssl.* para tomar el soporte SSL import javax.net.ssl.*; import javax.net.*; import java.net.*; import java.io.*; public class factorySSLSocketClient { public static void main (String args[]) throws IOException { int serverPort = 3000; if (args.length < 1) { System.out.println(java factorySSLSocketClient 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); // Cambiamos esto para crear SSLSocketFactory en lugar de SocketFactory. SocketFactory socketFactory = SSLSocketFactory.getDefault(); // No es necesario que cambiemos nada ms. // Ah est la gracia de utilizar fbricas! Socket s = socketFactory.createSocket(args[0], serverPort); . . . // El resto del programa sigue a partir de aqu.

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

AS/400 Developer Kit para Java

Captulo 10. Crear un programa Java internacionalizado


Si necesita adaptar un programa Java a una regin concreta del mundo, puede crear un programa Java internacionalizado con los entornos nacionales Java. Crear un programa Java internacionalizado conlleva realizar los pasos siguientes: 1. Aislar los datos y el cdigo sensibles al entorno nacional. Por ejemplo, las series, las fechas y los nmeros del programa. 2. Definir u obtener el entorno nacional con la clase Locale. 3. Formatear las fechas y los nmeros con el fin de especificar un entorno nacional si no se desea utilizar el entorno nacional por omisin. 4. Crear paquetes de recursos para manejar las series y dems datos sensibles al entorno nacional. Para llevar a cabo estas tareas en programas Java propios, consulte los ejemplos siguientes: v Internacionalizacin de las fechas con la clase java.util.DateFormat v Internacionalizacin de las presentaciones numricas con la clase java.util.NumberFormat v Internacionalizacin de los datos especficos de entorno nacional con la clase java.util.ResourceBundle Si desea obtener ms informacin sobre la internacionalizacin, pulse en cualquiera de los enlaces siguientes: v AS/400 National Language Support, SC41-5101 v AS/400 International Application Development, SC41-5603 v Documentacin sobre internacionalizacin de Sun Microsystems, Inc.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Entornos nacionales Java


Un entorno nacional es una regin geogrfica o poltica del mundo que tiene unas costumbres y un idioma comunes. En Java, la clase Locale representa un entorno nacional. Entornos nacionales Java soportados: AS/400 Developer Kit para Java da soporte a los entornos nacionales que se indican a continuacin. En AS/400, el entorno nacional por omisin viene determinado por los valores LANGID y CNTRYID del trabajo. En Propiedades de sistema Java hallar informacin ms detallada.
Nombre de entorno nacional Nombre de entorno nacional Idioma/pas en JDK 1.1.6 ISO ar ar_EG rabe/Egipto be be_BY Bielorruso/Bielorrusia bg bg_BG Blgaro/Bulgaria
Copyright IBM Corp. 1998, 1999

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

AS/400 Developer Kit para Java

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 ]

Ejemplo: internacionalizacin de las fechas con la clase java.util.DateFormat


Este ejemplo muestra cmo pueden utilizarse los entornos nacionales para formatear las fechas. Ejemplo 1: ensea a utilizar la clase java.util.DateFormat para internacionalizar las fechas
//************************** // Archivo: DateExample.java //************************** import java.text.*; import java.util.*; import java.util.Date; public class DateExample { public static void main(String args[]) { // Se obtiene la fecha Date now = new Date(); // Se obtienen los formateadores de fecha de los entornos nacionales por // omisin, alemn y francs DateFormat theDate = DateFormat.getDateInstance(DateFormat.LONG); DateFormat germanDate = DateFormat.getDateInstance(DateFormat.LONG, Locale.GERMANY); DateFormat frenchDate = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE); // Se formatean y se imprimen las fechas System.out.println(Date in the default locale: + theDate.format(now)); System.out.println(Date in the German locale : + germanDate.format(now)); System.out.println(Date in the French locale : + frenchDate.format(now)); } }

En Crear un programa Java internacionalizado hallar ms informacin.


[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Captulo 10. Crear un programa Java internacionalizado

185

Ejemplo: internacionalizacin de las presentaciones numricas con la clase java.util.NumberFormat


Este ejemplo muestra cmo pueden utilizarse los entornos nacionales para formatear los nmeros. Ejemplo 1: ensea a utilizar la clase java.util.NumberFormat para internacionalizar la salida numrica.
//************************** // Archivo: NumberExample.java //************************** import java.lang.*; import java.text.*; import java.util.*; public class NumberExample { public static void main(String args[]) throws NumberFormatException { // El nmero que debe formatearse double number = 12345.678; // Se obtienen los formateadores de los entornos nacionales // por omisin, espaol y japons NumberFormat defaultFormat = NumberFormat.getInstance(); NumberFormat spanishFormat = NumberFormat.getInstance(new Locale(es, ES)); NumberFormat japaneseFormat = NumberFormat.getInstance(Locale.JAPAN); // Se imprimen los nmeros con el formato por omisin, espaol y japons // (Nota: NumberFormat no es necesario para el formato por omisin) System.out.println(The number formatted for the default locale; + defaultFormat.format(number)); System.out.println(The number formatted for the Spanish locale; + spanishFormat.format(number)); System.out.println(The number formatted for the Japanese locale; + japaneseFormat.format(number)); } }

En Crear un programa Java internacionalizado hallar ms informacin.


[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

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

AS/400 Developer Kit para Java

//********************************* // 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)); } }

En Crear un programa Java internacionalizado hallar ms informacin.


[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Captulo 10. Crear un programa Java internacionalizado

187

188

AS/400 Developer Kit para Java

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.

Copyright IBM Corp. 1998, 1999

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 ]

Consideraciones en torno al rendimiento de ejecucin Java


Para mejorar considerablemente el rendimiento de ejecucin del cdigo Java, utilice el mandato Crear programa Java (CRTJVAPGM) antes de ejecutar archivos de clase Java, archivos JAR o archivos ZIP. El mandato CRTJVAPGM utiliza los bytecodes para crear un programa Java, que contiene instrucciones nativas optimizadas para AS/400, y asocia el programa objeto Java con el archivo de clase, JAR o ZIP. Si no se utiliza el mandato CRTJVAPGM antes de ejecutar un archivo de clase Java, un archivo JAR o un archivo ZIP, el cdigo Java se ejecuta ms despacio la primera vez porque se crea un programa Java optimizado con el nivel de optimizacin 10. Las ejecuciones futuras sern mucho ms rpidas porque se guarda el programa Java y permanece asociado con el archivo de clase o el archivo JAR. Ejecutar los bytecodes de manera interpretada puede dar un rendimiento aceptable durante la fase de desarrollo de la aplicacin, pero tal vez le interese utilizar el mandato CRTJVAPGM antes de ejecutar el cdigo Java en un entorno de produccin. Un compilador Just-In-Time mejora el rendimiento mediante la compilacin de cdigo, que est optimizado para un entorno de ejecucin de mquina virtual Java determinado. Debe comparar las ventajas de este tipo de optimizacin con el tiempo que se tarda en generar este cdigo cada vez que se crea una mquina virtual Java. Si el programa se ejecuta con lentitud, entre el mandato Visualizar programa Java (DSPJVAPGM) para ver los atributos de un programa Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Consideraciones en torno al rendimiento de transformacin Java


Se puede determinar la velocidad de transformacin por el nivel de optimizacin establecido. El nivel de optimizacin 10 realiza la transformacin con ms rapidez, pero el programa resultante suele ser ms lento que uno que tenga establecido un nivel de optimizacin superior. El nivel de optimizacin 40 tarda ms en realizar la transformacin, pero suele ejecutarse con mayor rapidez. Con el nivel de optimizacin 40, algunas optimizaciones de programa Java no son compatibles al 100% con Java. As, algunos de los programas que no se ejecutan al nivel 40, pueden ejecutarse en cambio al nivel 30. Los programas que no se ejecutan al nivel de optimizacin 40 puede ejecutarlos utilizando las series del parmetro LICOPT de optimizacin del cdigo interno bajo licencia. No obstante, el rendimiento al nivel 30 puede bastar para el programa. Si tiene problemas al ejecutar cdigo Java que pareca funcionar en otra mquina virtual Java, pruebe con el nivel de optimizacin 30 en lugar del nivel 40. Si funciona y el nivel de rendimiento es aceptable, no es necesario hacer nada ms. Si necesita un rendimiento mejor, consulte Series del parmetro LICOPT, donde

190

AS/400 Developer Kit para Java

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 ]

Consideraciones en torno al rendimiento de la recogida de basura Java


La recogida de basura en la mquina virtual Java de AS/400 funciona en modalidad asncrona continua. El parmetro de tamao inicial de recogida de basura (GCHINL) del mandato Ejecutar Java (RUNJVA) puede afectar al rendimiento de las aplicaciones. Este parmetro especifica el espacio de objetos nuevos que est permitido entre recogidas de basura. Si el valor es bajo, puede provocar una actividad general excesiva de recogida de basura. Si es alto, la recogida de basura puede sufrir limitaciones y provocar errores por falta de memoria. Sin embargo, para la mayora de las aplicaciones, los valores por omisin deberan ser correctos. La recogida de basura determina si un objeto ya no es necesario evaluando si hay o no referencias vlidas a dicho objeto.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Consideraciones en torno al rendimiento de la invocacin a mtodos nativos Java


La invocacin a mtodos nativos en AS/400 puede no tener un rendimiento tan bueno como en otras plataformas. En AS/400, se ha optimizado Java trasladando la mquina virtual Java debajo de la interfaz de mquina (MI). La invocacin a mtodos nativos requiere una llamada por encima del cdigo MI y puede requerir llamadas costosas de Java Native Interface (JNI) a la mquina virtual Java. Los mtodos nativos no deben llevar a cabo rutinas pequeas, que pueden escribirse fcilmente en Java. Utilcelos para iniciar funciones del sistema que sean relativamente de largo alcance y que no estn disponibles directamente en Java.
[ 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

Consideraciones en torno al rendimiento de la incorporacin de mtodos Java


La incorporacin de mtodos puede mejorar de manera significativa el rendimiento de las llamadas a mtodos. Cualquier mtodo que sea final es un candidato en potencia a la incorporacin. La funcin de incorporacin est disponible en AS/400 a travs de la opcin -o de javac en tiempo de compilacin. El tamao de los archivos de clase y del programa Java transformado se incrementa si se utiliza la opcin -o de javac. A la hora de utilizar esta opcin, debe tomar en consideracin tanto el espacio como las caractersticas de rendimiento de la aplicacin. El transformador de Java habilita la incorporacin para los niveles de optimizacin 30 y 40. El nivel de optimizacin 30 habilita alguna incorporacin de mtodos finales dentro de una sola clase. El nivel de optimizacin 40 habilita la incorporacin de mtodos finales dentro de un archivo ZIP o JAR. La incorporacin de mtodos puede controlarse por medio de las series del parmetro LICOPT AllowInlining y NoAllowInlining. El intrprete de AS/400 no realiza incorporacin de mtodos.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Consideraciones en torno al rendimiento de las excepciones Java


La arquitectura de excepciones de AS/400 permite disponer de una capacidad de interrupcin y reintento verstil. Permite la interaccin de lenguajes mixtos. Lanzar excepciones Java en AS/400 puede resultar ms costoso que en otras plataformas. Esto no debe afectar al rendimiento global de la aplicacin a menos que se utilicen rutinariamente excepciones Java en el recorrido habitual de la aplicacin.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Herramientas de rendimiento de rastreo de eventos Java


La mquina virtual Java AS/400 habilita el rastreo de determinados eventos Java. Estos eventos pueden recogerse sin ninguna instrumentacin en el cdigo Java. Abarcan actividades tales como la recogida de basura, la creacin de hebras, la carga de clases y los bloqueos. El mandato Ejecutar Java (RUNJVA) no especifica estos eventos. En cambio, se puede crear una definicin del explorador de rendimiento (PEX) y utilizar el mandato Arrancar explorador de rendimiento (STRPEX) para recoger los eventos. Cada evento contiene informacin til de rendimiento como, por ejemplo, la indicacin de la hora y los ciclos de CPU. Se pueden rastrear eventos Java y otras actividades del sistema, tales como la entrada y salida de disco, con una misma definicin de rastreo. Para obtener una descripcin completa de los eventos Java, consulte la publicacin Performance Tools/400, SC41-4340.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

192

AS/400 Developer Kit para Java

Herramientas de rendimiento de rastreo de llamadas Java


Los rastreos de llamadas a mtodos Java facilitan informacin significativa de rendimiento acerca del tiempo que se invierte en cada uno de los mtodos Java. En otras mquinas virtuales Java, se puede utilizar la opcin -prof (perfilado) del mandato java. Para habilitar el rastreo de las llamadas a mtodos en AS/400, debe especificar el mandato Habilitar recogida de rendimiento (ENBPFRCOL) en la lnea de mandatos de Crear programa Java (CRTJVAPGM). Una vez creado el programa Java con esta palabra clave, puede iniciar la recogida de los rastreos de llamadas a mtodos mediante una definicin del explorador de rendimiento (PEX) que incluya el tipo de rastreo de llamada/retorno. La salida de rastreo de llamada/retorno generada con el mandato Imprimir informe del explorador de rendimiento (PRTPEXRPT) muestra el tiempo de CPU para cada una de las llamadas de todos los mtodos Java de los que se ha realizado un rastreo. En algunos casos, puede que no resulte posible habilitar todos los archivos de clase para el rastreo de llamada/retorno. O es posible que se efecten llamadas a mtodos nativos y a funciones del sistema que no estn habilitados para rastreo. En esta situacin, el tiempo de CPU invertido en dichos mtodos o funciones del sistema se acumula. Despus, se notifica al ltimo mtodo Java al que se llame y que haya sido habilitado.
[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]

Herramientas de rendimiento de perfilado Java


El perfilado de CPU a nivel de todo el sistema calcula el tiempo relativo de CPU que se invierte en cada uno de los mtodos Java y en todas las funciones del sistema que el programa Java utiliza. Utilice una definicin del explorador de rendimiento (PEX) que rastree los eventos de ciclo de ejecucin de desbordamiento del contador del supervisor de rendimiento (*PMCO). Las muestras suelen especificarse a intervalos de un milisegundo. Para recoger un perfil de rastreo vlido, debe ejecutar la aplicacin Java hasta que acumule de dos a tres minutos de tiempo de CPU. Esto debera generar ms de 100.000 muestras. El mandato Imprimir informe del explorador de rendimiento (PRTPEXRPT) genera un histograma del tiempo de CPU invertido en toda la aplicacin. Esto incluye todos los mtodos Java y toda actividad a nivel de sistema. La herramienta Performance Data Collector (PDC) tambin facilita informacin de perfil sobre los programas que se ejecutan en AS/400. Nota: el perfilado de CPU no muestra el uso relativo de CPU de los programas Java interpretados.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Recogida de datos de rendimiento Java


Para recoger datos de rendimiento en AS/400, siga estos pasos: 1. Cree una definicin del explorador de rendimiento (PEX) que especifique: v Un nombre definido por el usuario v El tipo de recogida de datos v El nombre de trabajo
Captulo 11. Ajustar el rendimiento de los programas Java con AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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 ]

Herramienta Performance Data Collector


La herramienta Performance Data Collector (PDC) facilita informacin de perfil sobre los programas que se ejecutan en AS/400. La opcin de perfil estndar del sector de la mayora de las mquinas virtuales Java depende de la implementacin de la caracterstica java_g. sta es una versin especial de depuracin de la mquina virtual Java, que ofrece la opcin -prof. Esta opcin se especifica en una llamada a un programa Java. Si se especifica, la mquina virtual Java genera un archivo de registro que contiene informacin sobre cules son los componentes del programa que estn en funcionamiento mientras dura el programa. La mquina virtual Java genera esta informacin en tiempo real. En AS/400, la funcin explorador de rendimiento (PEX) analiza programas y eventos del sistema especficos de registro. Esta informacin se almacena en una base de datos DB/2 y se recupera mediante funciones SQL. La informacin de PEX es el repositorio de informacin especfica de programa que genera datos de perfil Java. Estos datos de perfil son compatibles con la informacin de perfil de programa de java_g -prof. La herramienta Java Performance Data Converter (JPDC) proporciona informacin de perfil de programa y la salida de programa de java_g -prof para una herramienta IBM determinada que se conoce con el nombre de Jinsight. Si desea obtener informacin sobre la manera de recoger datos de rendimiento Java, consulte el apartado Recogida de datos de rendimiento Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Herramienta Java Performance Data Converter


La herramienta Java Performance Data Converter (JPDC) ofrece una manera de crear datos de rendimiento Java referentes a los programas Java que se ejecutan en el AS/400. Estos datos de rendimiento son compatibles con la salida de datos de rendimiento de la opcin java_g -prof de la mquina virtual Java de Sun Microsystems, Inc y con la salida de IBM Jinsight. Nota: la herramienta JPDC no genera una salida legible. Para analizar los datos, utilice una herramienta de perfilado Java que acepte java_g -prof o los datos de Jinsight. La herramienta JPDC accede a los datos del explorador de rendimiento (PEX) de AS/00 que almacena DB2/400 (mediante JDBC). Convierte los datos al tipo de rendimiento de Jinsight o a uno general. A continuacin, almacena el archivo de salida en una ubicacin del sistema de archivos integrado especificada por el usuario.

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 ]

Ejecucin de Java Performance Data Converter


Para ejecutar Java Performance Data Converter (JPDC) con el fin de realizar la recogida de datos de rendimiento, siga los pasos indicados a continuacin. 1. Entre el primer argumento de entrada, que es general para java_g -prof o jinsight para la salida de Jinsight. 2. Entre el segundo argumento de entrada, que es el nombre de la definicin del explorador de rendimiento (PEX) que se ha utilizado para recoger los datos. Nota: debe limitar este nombre a cuatro o cinco caracteres debido a la utilizacin interna de las conexiones del mismo. 3. Entre el tercer argumento de entrada, que es el nombre del archivo que la herramienta JPDC genera. Este archivo generado se graba en el directorio actual del sistema de archivos integrado. Para especificar el directorio actual del sistema de archivos integrado, utilice el mandato cd (PF4). 4. Entre el cuarto argumento de entrada, que es el nombre de la entrada de directorio de bases de datos relacionales de sistema principal de AS/400. Para ver cul es el nombre, utilice el mandato Trabajar con entrada de directorio de bases de datos relacionales (WRKRDBDIRE). Se trata de la nica base de datos relacional en la que se indica *LOCAL. Para que este cdigo funcione, el archivo /QIBM/ProdData/Java400/ext/JPDC.jar debe estar en la va de acceso de clases Java de AS/400. Cuando el programa acabe de ejecutarse, en el directorio actual habr un archivo de salida de tipo texto. Para ejecutar JPDC, utilice la lnea de mandatos de AS/400 o el entorno Qshell. Consulte el apartado Ejemplo: ejecucin de Java Performance Data Converter para obtener detalles.
[ Pgina de presentacin de Information Center | Comentarios ] [Legal | Glosario de AS/400]

Ejemplo: ejecucin de Java Performance Data Converter


Para ejecutar Java Performance Data Converter (JPDC), puede utilizar la lnea de mandatos de AS/400 o el entorno Qshell. Con la lnea de mandatos de AS/400: 1. Entre el mandato Ejecutar (RUNJVA) o JAVA en la lnea de mandatos de AS/400.

196

AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

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 ]

Depurar un programa Java


Existen muchas formas distintas de depurar un programa Java. Se puede utilizar la opcin *DEBUG para ver el cdigo fuente antes de ejecutar el programa. A continuacin, se pueden establecer puntos de interrupcin o bien recorrer la funcin principal o todas las funciones del programa con el fin de analizar los errores mientras se ejecuta el programa. Para depurar programas Java: 1. Compile el programa Java con la opcin DEBUG, que es la opcin -g de la herramienta javac. En Depurar programas Java con la opcin *DEBUG hallar informacin ms detallada. 2. Inserte el archivo de clase (.class) y el archivo fuente (.java) en el mismo directorio de AS/400. 3. Ejecute el programa Java utilizando el mandato Ejecutar Java (RUNJVA) en la lnea de mandatos de AS/400. Especifique OPTION(*DEBUG) en el mandato Ejecutar Java (RUNJVA). 4. Se visualizar el fuente del programa Java. 5. Pulse F6 (Aadir/Borrar punto de interrupcin), para establecer puntos de interrupcin, o F10 (Recorrer), para recorrer el programa. Si desea obtener ms informacin sobre el establecimiento de puntos de interrupcin, consulte el

Copyright IBM Corp. 1998, 1999

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 ]

Depurar programas Java con la opcin *DEBUG


La opcin *DEBUG sirve para ver el cdigo fuente antes de ejecutar el programa. Permite establecer puntos de interrupcin dentro del cdigo. Para utilizar la opcin *DEBUG, entre el mandato Ejecutar Java (RUNJVA) seguido del nombre del archivo de clase y de OPTION(*DEBUG) en la lnea de mandatos. Por ejemplo, la lnea de mandatos de AS/400 debe ser as:
RUNJVA CLASS(nombreclase) OPTION(*DEBUG)

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 ]

Pantallas iniciales de depuracin de programas Java


Cuando vaya a depurar programas Java, siga estas pantallas de ejemplo. En ellas aparece un programa de ejemplo llamado Hellod. v Entre ADDENVVAR ENVVAR(CLASSPATH) VALUE (/MIDIR). v Entre este mandato: RUNJVA CLASS(HELLOD) OPTION(*DEBUG). Inserte el nombre del programa Java en lugar de HELLOD. v Espere a que se visualice la pantalla Visualizar fuente de mdulo. Se trata del fuente del programa Java HELLOD.
++ | Visualizar Fuente Mdulo | | Nombre archivo clase: HELLOD | 1 import java.lang.*; | 2 | 3 public class Hellod extends Object | 4 { | 5 int k; | 6 int l; | 7 int m; | 8 int n; | 9 int o; | 10 int p; | 11 String myString; | 12 Hellod myHellod; | 13 int myArray[]; | 14 | 15 public Hellod() | | | | | | | | | | | | | | | | | | | |

Ms...

200

AS/400 Developer Kit para Java

| 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 ]

Establecimiento de puntos de interrupcin


La ejecucin de un programa puede controlarse con puntos de interrupcin. Los puntos de interrupcin detienen la ejecucin de un programa en una sentencia determinada. Para establecer puntos de interrupcin:
Captulo 12. Depuracin de programas utilizando AS/400 Developer Kit para Java

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 ]

Recorrer los programas Java para depurarlos


Puede recorrer el programa mientras lo depura. Puede recorrer la funcin principal o bien otras funciones del mismo. Los programas Java y los mtodos nativos pueden utilizar la funcin de recorrido.

202

AS/400 Developer Kit para Java

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 ]

Evaluar variables en programas Java


Existen dos formas de evaluar una variable cuando un programa detiene su ejecucin en un punto de interrupcin o en una parte del recorrido: v Entre EVAL NombreVariable en la lnea de mandatos de depuracin. v Site el cursor en el nombre de la variable dentro del cdigo fuente visualizado y pulse F11 (Visualizar variable). Para evaluar las variable de un programa Java, utilice el mandato EVAL. Nota: con el mandato EVAL, tambin se puede cambiar el contenido de una

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 ]

Depurar programas Java y de mtodos nativos


Se pueden depurar programas Java y programas de mtodos nativos a la vez. Mientras se depura el fuente en la pantalla interactiva, se puede depurar un mtodo nativo programado en C que est dentro de un programa de servicio (*SRVPGM). Para depurar programas Java y programas de mtodos nativos simultneamente: 1. Pulse F14 (Trabajar con lista de mdulos) cuando aparezca el fuente del programa Java para visualizar la pantalla Trabajar con lista de mdulos (WRKMODLST). 2. Seleccione la opcin 1 (Aadir programa) para aadir el programa de servicio. 3. Seleccione la opcin 5 (Visualizar fuente del mdulo) para visualizar el *MODULE que desea depurar y el fuente. 4. Pulse F6 (Aadir/Borrar punto de interrupcin), para establecer puntos de interrupcin en el programa de servicio. Si desea obtener ms informacin sobre el establecimiento de puntos de interrupcin, consulte el apartado Establecer puntos de interrupcin.

204

AS/400 Developer Kit para Java

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 ]

Depurar un programa Java desde otra pantalla


Mientras se depura un programa Java, se visualiza el fuente del programa cada vez que ste se encuentra con un punto de interrupcin. Esto puede interferir con la salida de pantalla del programa Java. Para evitarlo, depure el programa Java desde otra pantalla. La salida del programa Java se visualizar all donde se ejecute el mandato Java y el fuente del programa en la otra pantalla. Para depurar Java desde otra pantalla: 1. El programa Java debe estar retenido mientras se inicia la preparacin de la depuracin. Para retener el programa Java, se puede hace que ste: v Espere a que se produzca una entrada desde el teclado. v Espere durante un intervalo de tiempo. v Entre en un bucle para comprobar una variable, lo que requiere que usted haya establecido un valor para sacar al programa Java del bucle. 2. Una vez retenido el programa Java, vaya a otra pantalla y lleve a cabo los pasos siguientes: a. Entre el mandato Trabajar con trabajos activos (WRKACTJOB) en la lnea de mandatos de AS/400. b. Busque el trabajo inmediato de proceso por lotes (BCI) en el que se est ejecutando el programa Java. Busque QJVACMDSRV en el listado Subsistemas/trabajo. Busque su ID de usuario en el listado Usuario. Busque BCI bajo Tipo. c. Entre la opcin 5 para trabajar con el trabajo. d. En la parte superior de la pantalla Trabajar con trabajo figura el nmero, el usuario y el trabajo. Entre STRSRVJOB Nmero/Usuario/Trabajo. e. Entre STRDBG CLASS(nombreclase). Nombreclase es el nombre de la clase Java que desea depurar. Puede tratarse del nombre de clase que ha especificado en el mandato Java o de otra clase. f. El fuente de dicha clase aparece en la pantalla Visualizar fuente de mdulo. g. Establezca puntos de interrupcin, pulsando F6 (Aadir/Borrar punto de interrupcin), all donde desee detenerse dentro de la clase Java. Pulse F14 para aadir ms clases, programas o programas de servicio que depurar. Si desea obtener ms informacin sobre el establecimiento de puntos de interrupcin, consulte el apartado Establecer puntos de interrupcin. h. Pulse F12 (Reanudar) para proseguir con la ejecucin del programa. 3. Deje de retener el programa Java original. Cuando se llegue a un punto de interrupcin, aparecer la pantalla Visualizar fuente de mdulo en la pantalla en la que se hayan entrado los mandatos Arrancar programa de servicio (STRSRVJOB) y Arrancar depuracin (STRDBG). Cuando finalice el programa Java, aparecer el mensaje El trabajo al que se ha dado servicio ha finalizado. 4. Entre el mandato Finalizar depuracin (ENDDBG).
Captulo 12. Depuracin de programas utilizando AS/400 Developer Kit para Java

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 ]

Variable de entorno QIBM_CHILD_JOB_SNDINQMSG


La variable de entorno QIBM_CHILD_JOB_SNDINQMSG es la variable que controla si el trabajo inmediato de proceso por lotes (BCI), en el que se ejecuta la mquina virtual Java, espera antes de iniciar la mquina virtual Java. Si establece la variable de entorno en 1 al ejecutar el mandato Ejecutar Java (RUNJVA), se enva un mensaje a la cola de mensajes del usuario. El mensaje se enva antes de que se inicie la mquina virtual Java en el trabajo BCI. Es similar al siguiente:
El proceso (hijo) engendrado 023173/JOB/QJVACMDSRV est detenido (G C)

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

AS/400 Developer Kit para Java

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

AS/400 Developer Kit para Java

Captulo 13. Resolucin de problemas en AS/400 Developer Kit para Java


Si surgen problemas al utilizar AS/400 Developer Kit para Java, siga cualquiera de los pasos indicados a continuacin para determinar cul es el origen del problema. v Busque el archivo de anotaciones del trabajo que ha ejecutado el mandato Java, as como el del trabajo inmediato de proceso por lotes (BCI) en el que se ha ejecutado el programa Java con el fin de analizar la causa de la anomala. v Reuna datos que sean tiles para elaborar un informe autorizado de anlisis de programa (APAR). v Aplique los arreglos temporales del programa (PTF). v Averige cmo obtener soporte tcnico si detecta un defecto potencial en AS/400 Developer Kit para Java.
[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

Buscar archivos de anotaciones de trabajo para analizar problemas de Java


Para analizar las causas de una anomala de Java, utilice el archivo de anotaciones del trabajo que ha ejecutado el mandato Java y el del trabajo inmediato de proceso por lotes (BCI) en el que se ha ejecutado el programa Java. Ambos pueden contener informacin de error importante. Existen dos formas de buscar el archivo de anotaciones del trabajo BCI. Puede buscar el nombre del trabajo BCI que figura en las anotaciones del trabajo que ha ejecutado el mandato Java. A continuacin, utilice el nombre de trabajo para buscar el archivo de anotaciones del trabajo BCI. Tambin puede buscar el archivo de anotaciones del trabajo BCI realizando los pasos siguientes: 1. Entre el mandato Trabajar con trabajos sometidos (WRKSBMJOB) en la lnea de mandatos de AS/400. 2. Vaya al final de la lista. 3. Busque el ltimo trabajo de la lista; se llama QJVACMDSRV. 4. Entre la opcin 8 (Trabajar con archivos en spool) para el trabajo. 5. Se visualizar un archivo llamado QPJOBLOG. 6. Pulse F11 para ver la vista 2 de los archivos en spool. 7. Verifique que la fecha y la hora coincidan con la fecha y la hora en que se ha producido la anomala. 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. Si no puede hallar ningn archivo de anotaciones para el trabajo BCI, es posible que no se haya generado ninguno. Esto ocurre si ha establecido un valor ENDSEP demasiado alto para la descripcin de trabajo QDFTJOBD o si el valor LOG de la
Copyright IBM Corp. 1998, 1999

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 ]

Reunir datos para analizar problemas de Java


Para reunir datos con el fin de elaborar un informe autorizado de anlisis de programa (APAR): 1. Incluya una descripcin completa del problema. 2. Guarde el archivo de clase Java que ha originado el problema al ejecutarse. 3. Puede utilizar el mandato SAV para guardar objetos del sistema de archivos integrado. Es posible que necesite guardar otros archivos de clase que el programa precisa para ejecutarse. Asimismo, tal vez le interese guardar y enviar un directorio completo con el fin de que IBM lo utilice, si fuese necesario, cuando intente reproducir el problema. He aqu un ejemplo de cmo guardar un directorio entero. Ejemplo:
SAV DEV('/QSYS.LIB/TAP01.DEVD') OBJ(('/midir'))

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

AS/400 Developer Kit para Java

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 ]

Obtener soporte tcnico para AS/400 Developer Kit para Java


Los servicios de soporte tcnico de AS/400 Developer Kit para Java se prestan en las condiciones habituales de los productos de software AS/400. Dichos servicios incluyen servicio tcnico de programas, atencin telefnica y servicios de consultora. Utilice la informacin en lnea suministrada en la Pgina de en el tema Support para obtener ms presentacin de IBM AS/400 informacin. Utilice IBM Support Services para 5769-JV1 (AS/400 Developer Kit para Java). O bien, pngase en contacto con el representante local de IBM. Es posible que, por indicacin de IBM, deba obtener un nivel ms actual de AS/400 Developer Kit para Java con el fin de poder recibir el servicio tcnico de programas de forma continuada. Para obtener ms informacin, consulte el apartado Soporte a varios Java Development Kits (JDK). Los defectos que pueda presentar el programa AS/400 Developer Kit para Java pueden resolverse por medio del servicio tcnico de programas o la atencin telefnica. Las cuestiones relacionadas con la depuracin o la programacin de la aplicacin deben resolverse a travs de los servicios de consultora. Las cuestiones relacionadas con llamadas a la API de AS/400 Developer Kit para Java deben remitirse a los servicios de consultora, a menos que: 1. Se trate claramente de un defecto de la API Java que queda demostrado por medio de su reproduccin en un programa de relativa simplicidad. 2. Sea una cuestin que requiere una aclaracin de lo explicado en la documentacin. 3. Sea una cuestin referente a la ubicacin de los ejemplos o la documentacin. Los servicios de consultora comprenden tambin el prestar ayuda de programacin. Esto incluye los ejemplos de programa que se facilitan en el producto programa bajo licencia (LP) AS/400 Developer Kit para Java. Puede haber ejemplos adicionales en Internet, en la Pgina de presentacin de IBM AS/400 pero sin soporte tcnico.

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 ]

Captulo 13. Resolucin de problemas en AS/400 Developer Kit para Java

211

212

AS/400 Developer Kit para Java

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

Herramientas de rendimiento: v Java Performance Data Converter


[ Pgina de presentacin de Information Center | Comentarios ] [ Legal | Glosario de AS/400 ]

214

AS/400 Developer Kit para Java

Anda mungkin juga menyukai