224
AS/400 Developer Kit para Java IBM

AS400 Kit Desarrollo Para Java - Rzaha

Embed Size (px)

Citation preview

Page 1: AS400 Kit Desarrollo Para Java - Rzaha

AS/400 Developer Kit para Java

IBM

Page 2: AS400 Kit Desarrollo Para Java - Rzaha
Page 3: AS400 Kit Desarrollo Para Java - Rzaha

AS/400 Developer Kit para Java

IBM

Page 4: AS400 Kit Desarrollo Para Java - Rzaha

© Copyright International Business Machines Corporation 1998, 1999. Reservados todos los derechos.

Page 5: AS400 Kit Desarrollo Para Java - Rzaha

Contenido

Capítulo 1. AS/400 Developer Kit paraJava . . . . . . . . . . . . . . . . 1Imprimir este tema . . . . . . . . . . . . 2Novedades de V4R5 para AS/400 Developer Kit paraJava . . . . . . . . . . . . . . . . . 3

Cómo saber cuáles son las novedades o loscambios: . . . . . . . . . . . . . . . 3Novedades de V4R5 para Java Development Kit(JDK) 1.1.8 . . . . . . . . . . . . . . 3Novedades de V4R5 para Java 2 SoftwareDevelopment Kit (J2SDK), Standard Edition,versión 1.2 . . . . . . . . . . . . . . 4

Capítulo 2. Cómo empezar con AS/400Developer Kit para Java . . . . . . . . 7Instalar AS/400 Developer Kit para Java . . . . . 7

Soporte para varios Java Development Kits (JDK) 8Configuración de AS/400 para AS/400 Developer Kitpara Java . . . . . . . . . . . . . . . 9Ejecutar el primer programa Java Hello World. . . 10Crear, compilar y ejecutar un programa Java HelloWorld . . . . . . . . . . . . . . . . 10Crear y ejecutar programas Java con AS/400Developer Kit para Java . . . . . . . . . . 11

Vía de acceso de clases Java . . . . . . . . 12Seleccionar la modalidad a utilizar al ejecutar unprograma Java . . . . . . . . . . . . 16

Crear y editar archivos fuente Java . . . . . . 17Bajar e instalar paquetes Java en AS/400 . . . . 18Compatibilidad de release a release . . . . . . 20

Capítulo 3. Conceptos de AS/400Developer Kit para Java . . . . . . . 23Transformador Java. . . . . . . . . . . . 25Recogida de basura avanzada de AS/400 DeveloperKit para Java . . . . . . . . . . . . . . 26

Recogida de basura Java . . . . . . . . . 27Entorno de ejecución Java de AS/400 . . . . . 27

Abstract Window Toolkit remoto de AS/400Developer Kit para Java . . . . . . . . . . 28Class Broker para Java de AS/400 Developer Kitpara Java . . . . . . . . . . . . . . . 29Compilador Just-In-Time . . . . . . . . . . 29

Comparación entre el compilador Just-In-Time yla ejecución directa . . . . . . . . . . . 29

Comparación entre el entorno de lenguajesintegrados y Java . . . . . . . . . . . . 30Ejecutar Java en un trabajo de proceso por lotes . . 31Clases, paquetes y directorios Java. . . . . . . 31Propiedades de sistema Java. . . . . . . . . 33

Propiedades del sistema Java para JavaDevelopment Kit (JDK) 1.1.8. . . . . . . . 33

Propiedades del sistema Java para Java 2Software Development Kit (J2SDK), StandardEdition, versión 1.2 . . . . . . . . . . . 38

Archivos en el sistema de archivos integrado . . . 44Autorizaciones de archivo Java en el sistema dearchivos integrado . . . . . . . . . . . . 44Codificaciones de caracteres Java . . . . . . . 45

Valores de file.encoding y CCSID de AS/400 . . 46Java Naming and Directory Interface (JNDI) . . . 52Interfaz de depuración de la máquina virtual Java 52Limitaciones, restricciones y comportamientospropios . . . . . . . . . . . . . . . . 53La plataforma Java . . . . . . . . . . . . 54

Aplicaciones y applets Java . . . . . . . . 55Máquina virtual Java . . . . . . . . . . 55Archivos de clase Java . . . . . . . . . . 56Archivos ZIP Java . . . . . . . . . . . 56Archivos JAR Java . . . . . . . . . . . 56Intérprete Java . . . . . . . . . . . . 57Hebras Java . . . . . . . . . . . . . 57

Java Development Kit de Sun Microsystems, Inc. . . 58Paquetes Java. . . . . . . . . . . . . 59Herramientas Java . . . . . . . . . . . 60Métodos nativos y Java Native Interface (JNI) . . 60

Capítulo 4. Mandatos y herramientasde AS/400 Developer Kit para Java . . 61Herramientas Java soportadas por AS/400Developer Kit para Java . . . . . . . . . . 61

Herramienta ajar de Java . . . . . . . . . 62Herramienta appletviewer Java . . . . . . . 62Ejecución de la herramienta appletviewer de Javacon Abstract Window Toolkit remoto . . . . . 63Herramienta extcheck Java . . . . . . . . 63La herramienta jar Java . . . . . . . . . 63Herramienta jarsigner Java . . . . . . . . 64La herramienta javac Java . . . . . . . . 64La herramienta javadoc Java. . . . . . . . 65Herramienta javah Java . . . . . . . . . 65Herramienta javakey Java . . . . . . . . 66La herramienta javap Java . . . . . . . . 66Herramienta keytool Java. . . . . . . . . 67Herramienta native2ascii Java . . . . . . . 67Herramienta policytool Java . . . . . . . . 67Herramienta rmic Java. . . . . . . . . . 68Herramienta rmid Java . . . . . . . . . 68La herramienta rmiregistry Java . . . . . . 68La herramienta serialver Java . . . . . . . 68Herramienta tnameserv Java. . . . . . . . 69El mandato java de Qshell . . . . . . . . 69

Mandatos CL a los que da soporte Java . . . . . 70El mandato Crear programa Java (CRTJVAPGM) 71Mandato Cambiar programa Java (CHGJVAPGM) 80El mandato JAVA . . . . . . . . . . . 85El mandato Ejecutar Java (RUNJVA) . . . . . 85

© Copyright IBM Corp. 1998, 1999 iii

Page 6: AS400 Kit Desarrollo Para Java - Rzaha

El mandato Suprimir programa Java(DLTJVAPGM) . . . . . . . . . . . . 92Mandato Volcar máquina virtual Java (DMPJVM) 93El mandato Visualizar programa Java(DSPJVAPGM) . . . . . . . . . . . . 96

Mandatos de Operations Navigator a los que dasoporte Java . . . . . . . . . . . . . . 100

Capítulo 5. Utilización de Java conotros lenguajes de programación. . . 103Utilización de Java Native Interface para emplearmétodos nativos . . . . . . . . . . . . 104

Consideraciones en torno a las hebras y losmétodos nativos Java . . . . . . . . . . 106Series en métodos nativos . . . . . . . . 107Ejemplos: utilización de Java Native Interfacepara emplear métodos nativos. . . . . . . 109

Utilización de java.lang.Runtime.exec() . . . . . 113Ejemplo: llamar a otro programa Java conjava.lang.Runtime.exec() . . . . . . . . . 114Ejemplo: llamar a un programa CL conjava.lang.Runtime.exec() . . . . . . . . . 115Ejemplo: Llamar a un mandato CL conjava.lang.Runtime.exec() . . . . . . . . . 116

Ejemplos de comunicación entre procesos . . . . 117Utilización de sockets para la comunicaciónentre procesos . . . . . . . . . . . . 117Utilización de corrientes de entrada y de salidapara comunicación entre procesos . . . . . 120Llamadas a Java desde otros lenguajes . . . . 121

Java Invocation API . . . . . . . . . . . 123Funciones de Invocation API . . . . . . . 123Soporte para varias máquinas virtuales Java . . 125Ejemplo: Java Invocation API . . . . . . . 126

Capítulo 6. Acceso a la base de datosAS/400 con el controlador JDBC deAS/400 Developer Kit para Java . . . 131Registrar el controlador JDBC de AS/400Developer Kit para Java antes de utilizar JDBC . . 132Conectarse a una base de datos de AS/400 con elcontrolador JDBC de AS/400 Developer Kit paraJava . . . . . . . . . . . . . . . . 133

Ejemplos: conectarse a una base de datos deAS/400 con el controlador JDBC de AS/400Developer Kit para Java . . . . . . . . . 133

Crear una aplicación JDBC . . . . . . . . . 134Ejemplo: crear una aplicación JDBC . . . . . 134

Interfaz Statement para AS/400 Developer Kit paraJava . . . . . . . . . . . . . . . . 136

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

Interfaz PreparedStatement para AS/400 DeveloperKit para Java . . . . . . . . . . . . . 137

Ejemplo: interfaz PreparedStatement paraAS/400 Developer Kit para Java . . . . . . 137

Interfaz CallableStatement para AS/400 DeveloperKit para Java . . . . . . . . . . . . . 138

Ejemplo: interfaz CallableStatement paraAS/400 Developer Kit para Java . . . . . . 138

Interfaz ResultSet para AS/400 Developer Kit paraJava . . . . . . . . . . . . . . . . 139

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

Interfaz DatabaseMetaData para AS/400 DeveloperKit para Java . . . . . . . . . . . . . 140

Ejemplo: interfaz DatabaseMetaData paraAS/400 Developer Kit para Java . . . . . . 140

Interfaz Blob para AS/400 Developer Kit para Java 140Interfaz Clob para AS/400 Developer Kit para Java 141

Capítulo 7. Acceso a bases de datosmediante el soporte SQLJ DB2 deAS/400 Developer Kit para Java . . . 143Herramientas SQLJ . . . . . . . . . . . 143Restricciones de SQLJ DB2 . . . . . . . . . 143Intercalar sentencias SQL en la aplicación Java . . 144Compilación y ejecución de programas SQLJ . . . 145

Variables de sistema principal en SQL para Java 146Perfiles SQLJ . . . . . . . . . . . . 146

El conversor de SQL para Java (SQLJ) (sqlj) . . . 149Precompilación de sentencias SQL en un perfilutilizando el personalizador de perfil SQLJ DB2,db2profc . . . . . . . . . . . . . . . 149Imprimir el contenido de perfiles SQLJ DB2(db2profp y profp) . . . . . . . . . . . 153El instalador de auditor de perfil SQLJ (profdb) 154Conversión de una instancia de perfil serializado aformato de clase Java mediante la herramienta deconversión de perfil SQLJ (profconv) . . . . . 155

Capítulo 8. Ejecución de la aplicaciónJava en un sistema principal sininterfaz gráfica de usuario . . . . . . 157Configurar AWT remoto para Java en una pantallaremota . . . . . . . . . . . . . . . 157

Ejemplo: configurar AWT remoto para Java enuna pantalla remota Windows . . . . . . . 158Poner los archivos de clase de AWT remotopara Java a disposición de la pantalla remota. . 159Adición de RAWTGui.zip o RAWTGui.jar a lavía de acceso de clases de la pantalla remota . . 160Iniciar AWT remoto para Java en un pantallaremota . . . . . . . . . . . . . . 160Ejecutar un programa Java con AWT remoto 161Imprimir con AWT remoto . . . . . . . . 163Propiedades de AWT remoto . . . . . . . 164Restricciones de SecurityManager de AWTremoto . . . . . . . . . . . . . . 164

Establecimiento de Class Broker para Java en unapantalla remota. . . . . . . . . . . . . 165

Instalación de Class Broker para Java en AS/400 165Instalación de Class Broker para Java enWindows o UNIX . . . . . . . . . . . 166Contenido de paquete de cbj_1.1.jar . . . . . 167

Capítulo 9. Seguridad Java . . . . . 171El modelo de seguridad Java . . . . . . . . 171Conseguir que una aplicación Java sea segura conla capa de sockets seguros . . . . . . . . . 172

iv AS/400 Developer Kit para Java

Page 7: AS400 Kit Desarrollo Para Java - Rzaha

Preparación de AS/400 para el soporte de capade sockets seguros. . . . . . . . . . . 173Elección de un certificado digital . . . . . . 174Utilización del certificado digital al ejecutar laaplicación Java . . . . . . . . . . . . 175Modificación del código Java para utilizarfábricas de sockets. . . . . . . . . . . 176Modificación del código Java para utilizar lacapa de sockets seguros . . . . . . . . . 179

Capítulo 10. Crear un programa Javainternacionalizado . . . . . . . . . 183Entornos nacionales Java . . . . . . . . . 183Ejemplo: internacionalización de las fechas con laclase java.util.DateFormat . . . . . . . . . 185Ejemplo: internacionalización de las presentacionesnuméricas con la clase java.util.NumberFormat . . 186Ejemplo: internacionalización de los datosespecíficos de entorno nacional con la clasejava.util.ResourceBundle. . . . . . . . . . 186

Capítulo 11. Ajustar el rendimiento delos programas Java con AS/400Developer Kit para Java . . . . . . . 189Consideraciones en torno al rendimiento deejecución Java . . . . . . . . . . . . . 190Consideraciones en torno al rendimiento detransformación Java . . . . . . . . . . . 190Consideraciones en torno al rendimiento de larecogida de basura Java . . . . . . . . . . 191Consideraciones en torno al rendimiento de lainvocación a métodos nativos Java . . . . . . 191Consideraciones en torno al rendimiento de laincorporación de métodos Java . . . . . . . 192Consideraciones en torno al rendimiento de lasexcepciones Java . . . . . . . . . . . . 192

Herramientas de rendimiento de rastreo de eventosJava . . . . . . . . . . . . . . . . 192Herramientas de rendimiento de rastreo dellamadas Java . . . . . . . . . . . . . 193Herramientas de rendimiento de perfilado Java . . 193

Recogida de datos de rendimiento Java. . . . 193Herramienta Performance Data Collector . . . . 195

Herramienta Java Performance Data Converter 195Ejecución de Java Performance Data Converter 196

Capítulo 12. Depuración de programasutilizando AS/400 Developer Kit paraJava . . . . . . . . . . . . . . . 199Depurar un programa Java . . . . . . . . . 199

Depurar programas Java con la opción *DEBUG 200Pantallas iniciales de depuración de programasJava . . . . . . . . . . . . . . . 200Establecimiento de puntos de interrupción . . 201Recorrer los programas Java para depurarlos 202

Depurar programas Java y de métodos nativos . . 204Depurar un programa Java desde otra pantalla . . 205

Variable de entornoQIBM_CHILD_JOB_SNDINQMSG . . . . . 206

Depuración de servlets . . . . . . . . . . 206

Capítulo 13. Resolución de problemasen AS/400 Developer Kit para Java . . 209Buscar archivos de anotaciones de trabajo paraanalizar problemas de Java . . . . . . . . . 209Reunir datos para analizar problemas de Java . . 210Obtener soporte técnico para AS/400 Developer Kitpara Java . . . . . . . . . . . . . . . 211

Capítulo 14. Ejemplos de código paraAS/400 Developer Kit para Java . . . 213

Contenido v

Page 8: AS400 Kit Desarrollo Para Java - Rzaha

vi AS/400 Developer Kit para Java

Page 9: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 1. AS/400 Developer Kit para Java

Qué es:

AS/400 Developer Kit para Java está optimizado para su utilización en un entornode servidor AS/400. Utiliza la compatibilidad de las interfaces de usuario y deprogramación Java para que el usuario pueda desarrollar aplicaciones propias parael sistema AS/400.

AS/400 Developer Kit para Java le permite crear y ejecutar programas Java enAS/400. AS/400 Developer Kit para Java es una implementación compatible de latecnología Java de Sun Microsystems, Inc., y por tanto se presupone que el usuarioestá familiarizado con la documentación de Java Development Kit (JDK). Parafacilitar el trabajo con la información de dicha empresa y la nuestra, se suministrauna lista de enlaces con la información de Sun Microsystems, Inc.

Si, por algún motivo, nuestros enlaces con la documentación de Java DevelopmentKit de Sun Microsystems, Inc no funcionasen, consulte la información que necesiteen la documentación de referencia en formato HTML de dicha empresa. Puedeencontrar esta información en la World Wide Web en The Source for Java

Technology java.sun.com.

Cómo utilizar estas páginas:

Si desea obtener información más detallada sobre la utilización de AS/400Developer Kit para Java, seleccione cualquiera de los temas relacionados acontinuación:v Imprimir este tema proporciona detalles acerca de cómo bajar un archivo PDF

imprimible o un paquete en archivo ZIP de los archivos HTML de AS/400Developer Kit para Java.

v Novedades de V4R5 indica las actualizaciones más recientes de información yproductos.

v Cómo empezar proporciona información sobre la instalación, la configuración, lacreación y ejecución de programas Java Hello World sencillos, el bajar e instalarpaquetes y la compatibilidad de release a release.

v En Conceptos se presentan conceptos concretos con los que se debe estarfamiliarizado a la hora de utilizar AS/400 Developer Kit para Java. También sedan definiciones muy básicas de Java para quienes buscan detalles generales.

v En Mandatos y herramientas se facilita información detallada sobre la manera deutilizar los mandatos y las herramientas Java.

v Otros lenguajes de programación muestra la manera de llamar al código escritoen un lenguaje distinto de Java por medio de Java Native Interface (JNI),java.lang.Runtime.exec(), la comunicación entre procesos y Java Invocation API.

© Copyright IBM Corp. 1998, 1999 1

Page 10: AS400 Kit Desarrollo Para Java - Rzaha

v Controlador JDBC describe cómo el controlador JDBC de AS/400 Developer Kitpara Java permite a los programas Java acceder a archivos de base de datos deAS/400.

v Soporte SQLJ describe la forma en que AS/400 Developer Kit para Java permiteutilizar sentencias SQL intercaladas en la aplicación Java.

v Ejecución en un sistema principal sin GUI contiene información acerca de cómoconfigurar y ejecutar programas Java con Abstract Window Toolkit (AWT)remoto o Class Broker para Java.

v Seguridad proporciona detalles sobre la autorización adoptada y describe cómopuede utilizarse SSL para hacer que las corrientes de sockets sean seguras en laaplicación Java.

v Internacionalización proporciona instrucciones acerca de cómo personalizar unprograma Java para una región específica del mundo.

v En Rendimiento se facilita información sobre la manera de ajustar el rendimientode Java.

v En Depuración se explica cómo depurar programas Java.v En Resolución de problemas se indica cómo buscar archivos de anotaciones de

trabajo y recoger datos para analizar los programas Java. En este tema tambiénse facilita información sobre los arreglos temporales del programa (PTF) y lamanera de obtener soporte técnico para AS/400 Developer Kit para Java.

v Ejemplos de código enlaza directamente con todos los ejemplos de código deesta información.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Imprimir este temaPuede ver o bajar una versión PDF de este documento a efectos de visualización oimpresión. Debe tener instalado Adobe(R) Acrobat(R) Reader para ver archivos

PDF. Puede bajar una copia desde Adobe .

Para ver o bajar la versión PDF, seleccione AS/400 Developer Kit para Java(aproximadamente 943 KB o 176 páginas).

Para guardar un PDF en la estación de trabajo a efectos de visualización oimpresión: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 paraJava en la estación de trabajo:1. Asegúrese de que dispone de 5,0 MB de espacio de almacenamiento como

mínimo en el disco duro.2. Cree un directorio nuevo en el disco duro.3. Baje el paquete. El tamaño del paquete es de 412 KB aproximadamente.

2 AS/400 Developer Kit para Java

Page 11: AS400 Kit Desarrollo Para Java - Rzaha

a. Seleccione la opción Guardar en disco.b. Seleccione un directorio temporal como destino de la operación 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.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Novedades de V4R5 para AS/400 Developer Kit para JavaEn 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, versión

1.2. Si ya está familiarizado con esta información, puede utilizar los enlacescon la versión que elija y saber cuáles son las nuevas actualizaciones:v Java Development Kit (JDK) 1.1.8v Java 2 Software Development Kit (J2SDK), Standard Edition, versión 1.2

Cómo ver en qué punto de la información se encuentra:

Los pequeños enlaces situados al principio de cada página muestran en qué puntode la información se encuentra. Estos enlaces se visualizan en formato deestructura de directorios. Para ver dónde se encuentra, lea a través de los enlaces.Por ejemplo, si observa el principio de esta página, verá:

AS/400 Developer Kit para Java \ Novedades

Estos enlaces le indican que se encuentra en la información “Novedades” bajo eltema “AS/400 Developer Kit para Java”.

Cómo saber cuáles son las novedades o los cambios:En esta información se utiliza lo siguiente a modo de ayuda para indicar dónde sehan realizado cambios técnicos:

v La imagen señala el lugar en el que empieza la información nueva omodificada.

v La imagen señala el lugar en el que acaba la información nueva omodificada.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Novedades de V4R5 para Java Development Kit (JDK) 1.1.8En este tema se destacan los cambios efectuados en AS/400 Developer Kit paraJava en V4R5 para Java Development Kit (JDK) 1.1.8.

Cómo empezar:

v Si desea obtener información sobre los JDK a los que da soporte IBM, consulteSoporte a varios JDK.

Capítulo 1. AS/400 Developer Kit para Java 3

Page 12: AS400 Kit Desarrollo Para Java - Rzaha

v Consulte el apartado vía de acceso de clases Java para obtener detalles acerca decómo establecer adecuadamente la vía de acceso de clases para JDK 1.1.x oJ2SDK.

Herramientas y mandatos:

v Se ha añadido la herramienta ajar Java a la lista de herramientas Java soportadaspor AS/400 Developer Kit para Java.

v Consulte el apartado Herramienta appletviewer Java para conocer nuevosdetalles acerca de cómo ejecutar la herramienta appletviewer con AbstractWindow Toolkit remoto.

v Se ha añadido el mandato nuevo Volcar máquina virtual Java (DMPJVM) paravolcar información acerca de la máquina virtual Java para un trabajoespecificado.

v Se ha añadido el parámetro TGTRLS al mandato Crear programa Java(CRTJVAPGM).

v Se ha añadido el parámetro SUBTREE al mandato Cambiar programa Java(CHGJVAPGM).

v Se ha añadido la opción JIT al parámetro OPTIMIZE y al parámetro INTERPRETdel mandato Ejecutar Java (RUNJVA).

v Se ha añadido un ejemplo de pantalla con la descripción de cada uno de loscampos al mandato Visualizar programa Java (DSPJVAPGM).

Ejecución en un sistema principal sin GUI:

v

Consulte el tema Configuración de Abstract Window Toolkit remoto paraconocer las actualizaciones.

v

Si desea ejecutar la aplicación Java en un sistema principal que no tiene unainterfaz gráfica de usuario (GUI), como por ejemplo un sistema AS/400, puedeutilizar Abstract Window Toolkit (AWT) remoto o Class Broker para Java (CBJ).Puede utilizar CBJ para servicios de GUI de alto rendimiento. Puesto que elAWT remoto no es aconsejable para operaciones con gráficos complejos o altainteracción, puede utilizar CBJ en su lugar, diseñado para estos entornos. Parautilizar CBJ, consulte el apartado Configuración de Class Broker para Java.

Depuración:

v Se han añadido detalles acerca de cómo depurar servlets.

Ejemplos de código:

v Se han añadido más ejemplos de código.

Imprimir este tema:

v Consulte el apartado Imprimir este tema para obtener un PDF de la informaciónde AS/400 Developer Kit para Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Novedades de V4R5 para Java 2 Software Development Kit(J2SDK), Standard Edition, versión 1.2

En este tema se destacan los cambios efectuados en AS/400 Developer Kit paraJava en V4R5 para Java 2 Software Development Kit (J2SDK), Standard Edition,versión 1.2.

4 AS/400 Developer Kit para Java

Page 13: AS400 Kit Desarrollo Para Java - Rzaha

Nota: En esta sección sólo se describen los cambios que son exclusivos ointeresantes en J2SDK, versión 1.2. La información general acerca de lasactualizaciones del capítulo Novedades para Java Development Kit (JDK) 1.1.8también se aplica a J2SDK, versión 1.2.

Cómo empezar:

v Si desea obtener información sobre los JDK a los que da soporte IBM, consulteSoporte a varios JDK.

v Consulte el apartado vía de acceso de clases Java para obtener detalles acerca decómo establecer adecuadamente la vía de acceso de clases para JDK 1.1.x oJ2SDK.

v Se ha añadido el tema Seleccionar la modalidad a utilizar al ejecutar unprograma Java para describir la direferencia entre ejecutar un programa Java enmodalidad interpretada, ejecución directa o compilación Just-In-Time.

v Para obtener información acerca de la infraestructura de ampliaciones Java,consulte el apartado Bajar e instalar paquetes Java en AS/400 e Instalación deampliaciones para AS/400 Developer Kit para Java.

Conceptos:

v Consulte el apartado Class Broker para Java para obtener información generalacerca de cómo ejecutar aplicaciones Java en un sistema principal que no tengauna interfaz gráfica de usuario (GUI).

v Se ha añadido soporte para un compilador Just-In-Time que mejora elrendimiento al compilar código a medida que es necesario.

v Se han añadido propiedades de sistema para J2SDK nuevas.v Se ha añadido soporte para la Interfaz de depuración de la máquina virtual Java.

Mandatos y herramientas:

v Consulte el apartado Herramienta appletviewer Java para conocer nuevosdetalles acerca de cómo ejecutar la herramienta appletviewer con AbstractWindow Toolkit remoto.

v Se han añadido las herramientas Java extcheck, Java jarsigner, Java keytool, Javapolicytool, Java rmid y Java tnameserv a la lista de herramientas Java soportadaspor AS/400 Developer Kit para Java.

v La herramienta javakey Java ha quedado obsoleta en J2SDK, versión 1.2.

Acceso a bases de datos utilizando el soporte SQLJ DB2 de AS/400 DeveloperKit para Java

v La información de acceso a bases de datos utilizando el soporte SQLJ DB2 deAS/400 Developer Kit para Java se ha revisado.

v La herramienta conversor de SQLJ permite generar perfiles SQLJ a partir delcódigo 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 conversión de perfil SQLJ permite convertir una instancia de

perfil serializado al formato de clase Java.v Intercalar sentencias SQL en la aplicación Java muestra cómo intercalar

sentencias SQL en el código fuente Java.v Compilación y ejecución de programas SQLJ muestra cómo compilar y ejecutar

los programas SQLJ.

Capítulo 1. AS/400 Developer Kit para Java 5

Page 14: AS400 Kit Desarrollo Para Java - Rzaha

Ejecución en un sistema principal sin GUI:

v

Consulte el tema Configuración de Abstract Window Toolkit remoto paraconocer las actualizaciones.

v

Si desea ejecutar la aplicación Java en un sistema principal que no tiene unainterfaz gráfica de usuario (GUI), como por ejemplo un sistema AS/400, puedeutilizar Abstract Window Toolkit (AWT) remoto o Class Broker para Java (CBJ).Puede utilizar CBJ para servicios de GUI de alto rendimiento. Puesto que elAWT remoto no es aconsejable para operaciones con gráficos complejos o altainteracción, puede utilizar CBJ en su lugar, diseñado para estos entornos. Parautilizar CBJ, consulte el apartado Configuración de Class Broker para Java.

Depuración:

v Se han añadido detalles acerca de cómo depurar servlets.

Ejemplos de código:

v Se han añadido más ejemplos de código.

Imprimir este tema:

v Consulte el apartado Imprimir este tema para obtener un PDF de la informaciónde AS/400 Developer Kit para Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

6 AS/400 Developer Kit para Java

Page 15: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 2. Cómo empezar con AS/400 Developer Kit paraJava

Si todavía no ha utilizado AS/400 Developer Kit para Java, siga estos pasos parainstalarlo, configurarlo y practicar la ejecución de un programa Java Hello Worldsencillo.1. Si ya está familiarizado con la información de AS/400 Developer Kit para Java,

consulte Novedades, donde hallará enlaces con la información y lasactualizaciones de productos más recientes.

2. Instalar AS/400 Developer Kit para Java.3. Configurar el sistema.4. Si esta información es nueva para usted y todavía no ha utilizado AS/400

Developer Kit para Java, consulte Ejecutar el primer programa Java HelloWorld. En este tema se ilustran dos métodos de ejecución de un programa JavaHello World sencillo con AS/400 Developer Kit para Java. Es una formapráctica de ver si ha instalado correctamente AS/400 Developer Kit para Java.

5. Ahora ya está preparado para crear, compilar y ejecutar un programa JavaHello World propio. Si desea saber cuál es el procedimiento que debe seguir,consulte Crear, compilar y ejecutar un programa Java Hello World.

6. Si está interesado en crear más aplicaciones Java propias, lea los temassiguientes: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 enseñan 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 más eficiente. En este tema se facilitainformación detallada referente a los paquetes con interfaz gráfica de usuario(GUI), el sistema de archivos integrado y la distinción entre mayúsculas yminúsculas, así como el manejo de archivos ZIP y JAR.

v Compatibilidad de release a release proporciona información acerca de lacompatibilidad de un release a otro.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Instalar AS/400 Developer Kit para JavaInstalar AS/400 Developer Kit para Java permite crear y ejecutar programas Javaen AS/400.

Para instalar AS/400 Developer Kit para Java:1. Entre el mandato Ir a programa bajo licencia (GO LICPGM) en la línea de

mandatos.2. Seleccione la opción 11 (Instalar programas bajo licencia).3. Elija la opción 1 (Instalar) para el programa bajo licencia (LP) 5769-JV1 *BASE y

seleccione la opción que coincida con el Java Development Kit (JDK) que deseeinstalar. Si la opción que desea instalar no figura en la lista, puede añadirla a lamisma entrando la opción 1 (Instalar) en el campo de opción. Entre 5769JV1 en

© Copyright IBM Corp. 1998, 1999 7

Page 16: AS400 Kit Desarrollo Para Java - Rzaha

el campo de programa bajo licencia y el número de opción en el campo deopción de producto. IBM da soporte a varios JDK.Nota: se puede instalar más de una opción a la vez.

AS/400 Developer Kit es el programa bajo licencia (LP) número 5769-JV1.

Una vez haya instalado AS/400 Developer Kit para Java en el AS/400, puede optarpor configurar el sistema.

En Ejecutar el primer programa Java Hello World hallará información sobre cómoempezar con AS/400 Developer Kit para Java.

[ Página de presentación de InformationCenter | 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), StandardEdition, versión 1.2. AS/400 soporta la utilización de varios JDK simultáneamente,pero sólo a través de varias máquinas virtuales Java. Una sola máquina virtualJava ejecuta un JDK especificado.

Localice el JDK que usted utiliza, o que desea utilizar, y seleccione la opcióncorrespondiente para instalarlo. Puede instalar más de un JDK a la vez. Lapropiedad del sistema java.version determina qué JDK debe ejecutarse. Noobstante, si se cambia la propiedad del sistema java.version, el cambio no surteefecto una vez la máquina virtual Java está en marcha.

Opción JDK java.home java.version1 1.1.6 /QIBM/ProdData/Java400/jdk116/1.1.62 1.1.7 /QIBM/ProdData/Java400/jdk117/1.1.73 1.2* /QIBM/ProdData/Java400/jdk12/1.2

4 1.1.8/QIBM/ProdData/Java400/jdk118/

1.1.8

* Versión 1.2 es lo mismo que Java 2 SDK (J2SDK), Standard Edition, versión

1.2.

Por ejemplo, estos son los resultados de las opciones que se instalen y el mandatoque se entre.

Instalado Entrado ResultadoOpción 1 (1.1.6) java Hello Se ejecuta JDK 1.1.6 porque

sólo hay un único JDKinstalado y es el valor poromisión.

Opción 1 (1.1.6) java -Djava.version=1.1.7Hello

Error que indica que laOpción 2 no está instalada.

Opción 1 (1.1.6) y Opción 2(1.1.7) y Opción 4 (1.1.8)

java Hello Se ejecuta JDK 1.1.8, ya queel JDK 1.1.x más reciente es elvalor por omisión.

Opción 1 (1.1.6) y Opción 2(1.1.7) y Opción 4 (1.1.8)

java -Djava.version=1.1.7Hello

Se ejecuta JDK 1.1.7.

8 AS/400 Developer Kit para Java

Page 17: AS400 Kit Desarrollo Para Java - Rzaha

Opción 1 (1.1.6), Opción 2(1.1.7) y Opción 3 (1.2)

java -Djava.version=1.2Hello

Se ejecuta J2SDK, StandardEdition, versión 1.2. Si no haespecificado java.version, elvalor por omisión es la 1.1.xmás reciente (por ejemplo,JDK 1.1.7). Para obtener másdetalles acerca de lapropiedad java.version,consulte el apartadopropiedades del sistema Java.

Opción 3 (1.2) java Hello Se ejecuta J2SDK, StandardEdition, versión 1.2.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Configuración de AS/400 para AS/400 Developer Kit para JavaUna vez haya instalado AS/400 Developer Kit para Java en el AS/400, puede optarpor configurar el sistema.

Configuración del huso horario

Si los programas Java son sensibles a la hora, puede resultar necesario configurarel huso horario.

Si el valor del sistema QUTCOFFSET (diferencia horaria universal coordinada) estáestablecido en su valor por omisión (+00:00), Java utilizará la hora del AS/400como hora actual. El valor por omisión de la propiedad del sistema Javauser.timezone es UTC.

Si se da cualquiera de las siguientes circunstancias, se necesita el valor del sistemaQUTCOFFSET y un entorno nacional actualizado:v Si QUTCOFFSET no está establecido en su valor por omisión y, por tanto, es

sensible al huso horario.v Si el código Java espera que la propiedad del sistema user.timezone tome como

valor por omisión un valor distinto de UTC.v Si especifica la propiedad del sistema Java user.timezone al ejecutar el mandato

java.

La categoría LC_TOD del entorno nacional contiene el campo tname, que debeestablecerse en el mismo valor que coincida con el huso horario. Si desea obtenerinformación detallada sobre la manera de crear un entorno nacional y de formatearel campo tname, consulte la publicación AS/400 International Application

Development, SC41-5603.

Configuración de las propiedades de sistema

Las propiedades de sistema Java determinan cuál es el entorno en el que seejecutan los programas Java. Son parecidas a los valores del sistema o las variablesde entorno de OS/400. Cuando se inicia la máquina virtual Java, se establecendiversas propiedades. Puede optar por utilizar los valores por omisión de laspropiedades de sistema o bien por especificar un conjunto propio de valores depropiedad por omisión siguiendo estos pasos:

Capítulo 2. Cómo empezar con AS/400 Developer Kit para Java 9

Page 18: AS400 Kit Desarrollo Para Java - Rzaha

1. Proporcione, en /QIBM/UserData/Java400, un archivo llamadoSystemDefault.properties. Los valores de propiedad que especifique en estearchivo prevalecen sobre los valores por omisión de sistema que proporcionaIBM. Este archivo establece las propiedades del sistema por omisión para todaslas máquinas virtuales Java que se ejecutan en el sistema AS/400.

2. O bien, coloque un archivo SystemDefault.properties en la vía de acceso deuser.home propia. Este archivo y las propiedades que contenga prevaleceránsobre las de /QIBM/UserData/Java400/SystemDefault.properties. Este archivoestablece las propiedades del sistema por omisión para todas las máquinasvirtuales Java que se ejecutan.

En Ejecutar el primer programa Java Hello World hallará información sobre cómoempezar con AS/400 Developer Kit para Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejecutar el primer programa Java Hello WorldPara poner en marcha el programa Java Hello World, puede hacerlo de cualquierade 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 continuación,seleccione la opción 10 (Visualizar programas bajo licencia instalados).Verifique que el programa bajo licencia 5769-JV1 *BASE y, como mínimo,una de las opciones figuren en la lista como instalados.

b. Entre java com.ibm.as400.system.Hello en la línea de mandatos del menúprincipal de AS/400. Pulse Intro para ejecutar el programa Java HelloWorld.

c. Si AS/400 Developer Kit para Java se ha instalado correctamente, en lapantalla 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 instalación se harealizado satisfactoriamente o consulte Obtener soporte técnico para AS/400Developer Kit para Java, donde hallará información sobre el serviciotécnico.

2. También puede ejecutar un programa Hello World propio. Si desea obtener másinformación sobre la manera de crear un programa Java Hello World propio,consulte Crear, compilar y ejecutar un programa Java Hello World.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Crear, compilar y ejecutar un programa Java Hello WorldCrear un programa Java Hello World sencillo es un buen punto de partida parafamiliarizarse con AS/400 Developer Kit para Java.

Para crear, compilar y ejecutar un programa Hello World propio:

10 AS/400 Developer Kit para Java

Page 19: AS400 Kit Desarrollo Para Java - Rzaha

1. Cree el archivo fuente como archivo de texto ASCII en el sistema de archivosintegrado.a. Dé al archivo de texto el nombre de Hello.java. Si desea obtener más

información sobre la manera de crear y editar el archivo, consulte Crear yeditar archivos fuente Java.

b. Asegúrese de que el archivo contiene el código 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, añádala yestablézcala en ’.’ (el directorio actual). Si existe, asegúrese de que ’.’encabeza la lista de vías de acceso. Para obtener detalles acerca de lavariable de entorno CLASSPATH, consulte el apartado Vía de acceso declases Java.

b. Entre el mandato Arrancar Qshell (STRQSH) para iniciar el intérpreteQshell.

c. Utilice el mandato cd (cambiar de directorio) para pasar del directorioactual al directorio del sistema de archivos integrado que contiene el archivoHello.java.

d. Entre javac seguido del nombre del archivo tal y como lo haya guardado enel 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

máquina 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.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Crear y ejecutar programas Java con AS/400 Developer Kit para JavaPara crear programas de applet y aplicación Java, puede utilizar AS/400 DeveloperKit para Java. También puede utilizar el Java Development Kit (JDK) de SunMicrosystems, Inc que haya disponible en la estación de trabajo.

Para crear un programa Java:1. Cree un archivo de código 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, demanera que el archivo fuente Java puede compilarse en una estación de trabajoque tenga también un javac. Una vez compilados los archivos fuente, losarchivos de clase han de transferirse al sistema de archivos integrado.

Capítulo 2. Cómo empezar con AS/400 Developer Kit para Java 11

Page 20: AS400 Kit Desarrollo Para Java - Rzaha

3. Establezca las autorizaciones del archivo de clase en el sistema de archivosintegrado.

4. Optimice el programa Java con el mandato Crear programa Java(CRTJVAPGM).Nota: este paso es opcional.

Para ejecutar un programa Java:1. Asegúrese de que la vía 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 continuación,seleccione qué modalidad desea utilizar para ejecutar el programa Java. Puedeestablecer la modalidad estableciendo una propiedad del sistema con elmandato Java, o estableciendo la variable de entorno antes de ejecutar elmandato Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Vía de acceso de clases JavaLa máquina virtual Java utiliza la vía de acceso de clases Java para buscar lasclases durante la ejecución. Los mandatos y las herramientas Java la utilizantambién para localizar las clases. La vía de acceso de clases del sistema poromisión, la variable de entorno CLASSPATH, y el parámetro de mandato de vía deacceso de clases determinan ambos en qué directorios se realiza la búsquedacuando se desea hallar una clase determinada.

Nota: En Java 2 Software Development Kit (J2SDK), Standard Edition, versión1.2, la propiedad java.ext.dirs determina la vía de acceso de clases para lasampliaciones que se van a cargar. Consulte el apartado Instalación de ampliaciones

para AS/400 Developer Kit para Java para obtener más información.

La vía de acceso de clases del sistema por omisión la define el sistema y el usuariono puede cambiarla. En AS/400, la vía de acceso de clases por omisión especificadónde se encuentran las clases que forman parte de AS/400 Developer Kit, deAWT remoto, y otras clases del sistema.

Para hallar cualquier otra clase en el sistema, debe especificar la vía de acceso declases en la que debe realizarse la búsqueda; para ello, utilice la variable deentorno CLASSPATH o el parámetro de vía de acceso de clases. El parámetro devía de acceso de clases que se utilice en una herramienta o en un mandatoprevalecerá sobre el valor especificado en la variable de entorno CLASSPATH.

Para trabajar con la variable de entorno CLASSPATH, utilice el mandato Trabajarcon variable de entorno (WRKENVVAR). Desde la pantalla WRKENVVAR, sepuede añadir o cambiar la variable de entorno CLASSPATH. Los mandatos Añadirvariable de entorno (ADDENVVAR) y Cambiar variable de entorno(CHGENVVAR) añaden y cambian, respectivamente, la variable de entornoCLASSPATH.

El valor de la variable de entorno CLASSPATH es una lista de nombres de vía deacceso, separados por el signo de dos puntos (:), en los que se busca una clasedeterminada. Un nombre de vía de acceso es una secuencia de cero o más nombresde directorio. Estos nombres de directorio van seguidos del nombre del directorio,

12 AS/400 Developer Kit para Java

Page 21: AS400 Kit Desarrollo Para Java - Rzaha

el archivo ZIP o el archivo JAR en el que se ha de realizar la búsqueda en elsistema de archivos integrado. Los componentes del nombre de vía de acceso vanseparados por medio del carácter barra inclinada (/). Utilice un punto (.) paraindicar cuál es el directorio de trabajo actual.

Para establecer la variable CLASSPATH del entorno Qshell, puede utilizar elprograma de utilidad de exportación que hay disponible con el intérprete Qshell.

Estos mandatos añaden la variable CLASSPATH al entorno y la establecen en elvalor “ .:/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 línea 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 lavía de acceso de clases del sistema, y luego en las vías de acceso de clasesespecificadas por el usuario. J2SDK busca primero en la vía de acceso de clases derutina de carga, a continuación en los directorios de ampliación y finalmente en lavía de acceso de clases.

Por tanto, el orden de búsqueda de JDK 1.1.x, utilizando el código de ejemploanterior, es:1. La vía de acceso de clases del sistema por omisión,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 búsqueda de J2SDK, utilizando el código de ejemplo anterior, es:1. La vía de acceso de clases de rutina de carga, que se encuentra en la propiedad

sun.boot.class.path,2. Los directorios de ampliación, que se encuentran en la propiedad java.ext.dirs,3. La vía de acceso de clases del sistema por omisión,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 lavariable de entorno. El parámetro de vía de acceso de clases especifica una lista denombres de vía de acceso. La sintaxis es idéntica a la de la variable de entornoCLASSPATH. Las herramientas y mandatos siguientes disponen de un parámetrode vía de acceso de clases:v El mandato java de Qshellv La herramienta javac

v La herramienta javah

v La herramienta javap

v La herramienta javadoc

v La herramienta rmic

v El mandato Ejecutar Java (RUNJVA)

Capítulo 2. Cómo empezar con AS/400 Developer Kit para Java 13

Page 22: AS400 Kit Desarrollo Para Java - Rzaha

Si desea obtener más información sobre los mandatos anteriores, consulteMandatos y herramientas. Si utiliza el parámetro de vía de acceso de clases concualquiera de estos mandatos o herramientas, el parámetro hará caso omiso de lavariable de entorno CLASSPATH.

Puede alterar temporalmente la variable de entorno CLASSPATH utilizando lapropiedad java.class.path. Puede cambiar la propiedad java.class.path, así comootras propiedades, utilizando el archivo SystemDefault.properties. Los valores delarchivo SystemDefault.properties alteran temporalmente la variable de entornoCLASSPATH. Para obtener información acerca del archivoSystemDefault.properties, consulte el apartado El archivo SystemDefault.properties.

En JDK 1.1.x, la propiedad os400.class.path.system también afecta al lugar en elque se realiza la búsqueda de las clases. Esta propiedad puede contener uno de lostres valores siguientes: PRE, POST o NONE. Por omisión, está establecida en PRE,lo que hace que la búsqueda tenga lugar primero en la vía de acceso de clases delsistema por omisión y después en la vía de acceso. La variable de entornoCLASSPATH o el parámetro de vía de acceso de clases son los que especifican estavía de acceso. Si establece la propiedad os400.class.path.system en POST, labúsqueda se realizará primero en la vía de acceso de clases especificada porusuario y después en la vía de acceso de clases del sistema por omisión. Si seutiliza el valor NONE, no se efectuará ninguna búsqueda en la vía de acceso de

clases por omisión y sí en la vía de acceso de clases especificada por usuario.

Nota: tenga cuidado al especificar NONE o POST porque pueden producirseresultados 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, deberíapermitir que la búsqueda de clases se realice primero en la vía de acceso de clasesdel sistema por omisión y después en la vía de acceso de clases especificada porusuario.

En Propiedades de sistema Java hallará más información sobre la manera dedeterminar el entorno en el que se ejecutan los programas Java.

Para obtener más información, consulte las publicaciones OS/400 Program and CL

Command APIs, SC41-5870 o OS/400 Introducción al sistema de archivosintegrado.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Archivo SystemDefault.propertiesEl archivo SystemDefault.properties es un archivo de propiedades Java

estándar. En un archivo SystemDefault.properties puede especificar propiedadespor omisión. El archivo SystemDefault.properties que se encuentra en el directorioinicial tiene prioridad sobre el archivo SystemDefault.properties que se encuentraen el directorio /QIBM/UserData/Java400.

Puede especificar los valores de las propiedades en el archivoSystemDefault.properties del mismo modo que en cualquier archivo depropiedades Java.

Ejemplo: Archivo SystemDefault.properties

14 AS/400 Developer Kit para Java

Page 23: AS400 Kit Desarrollo Para Java - Rzaha

#Los comentarios se inician siempre con el signo de almohadilla#esto significa ejecutar siempre con JDK 1.2java.version=1.2#establecer la propiedad especialmyown.propname=6

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Instalación de ampliaciones para AS/400 Developer Kit para JavaLas ampliaciones son paquetes de clases Java que pueden utilizarse para

ampliar la funcionalidad de la plataforma central. Las ampliaciones se empaquetanen uno o más archivos ZIP o JAR y se cargan en la máquina virtual Java medianteun cargador de clases de ampliación.

El mecanismo de ampliación permite que la máquina virtual Java utilice las clasesde ampliación de la misma forma que la máquina virtual Java utiliza las clases delsistema. El mecanismo de ampliación también proporciona una forma de recuperarampliaciones de URL especificados cuando no están ya instalados en JavaDevelopment Kit (JDK) o Java 2 Runtime Environment, Standard Edition, versión1.2.

Los archivos JAR de una ampliación instalada se encuentran en el directorioQIBM/ProdData/Java400/ext. Si desea instalar una ampliación, entre estemandato: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 contienela ampliación que desea instalar.

Al crear un enlace con una ampliación utilizando el mandato Añadir objeto deenlace (ADDLNKOBJ), la lista de archivos en la que busca el cargador de clases deampliación cambia a todas las máquinas virtuales Java que se ejecutan en AS/400. Si nodesea que se produzca un impacto sobre los cargadores de clases de ampliaciónpara otras máquinas virtuales Java en AS/400, pero sigue deseando crear un enlacecon una ampliación, siga estos pasos:1. Cree un directorio para instalar las ampliaciones.

Utilice el mandato Crear directorio (MKDIR) desde la línea de mandatos deAS/400 o el mandato mkdir desde el intérprete Qshell.

2. Instale las ampliaciones en el directorio nuevo utilizando el mandatoADDLNKOBJ.

3. Añada el directorio nuevo a la propiedad java.ext.dirs.Puede añadir el directorio nuevo a la propiedad java.ext.dirs utilizando elcampo PROP del mandato JAVA desde la línea de mandatos AS/400.

Si el nombre del directorio nuevo es “/home/username/ext”, y el nombre delprograma Java es “Hello”, los mandatos que entre deben ser parecidos a lossiguientes:

Capítulo 2. Cómo empezar con AS/400 Developer Kit para Java 15

Page 24: AS400 Kit Desarrollo Para Java - Rzaha

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

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Seleccionar la modalidad a utilizar al ejecutar un programaJava

Al ejecutar un programa Java, puede seleccionar la modalidad que deseautilizar. Puede elegir modalidad interpretada, ejecución directa o compilaciónJust-In-Time (JIT).

Interpretado:

Si elige ejecutar el programa Java en modalidad interpretada, el código se verificay se crea un objeto de programa Java para contener la forma preverificada delprograma. Cada bytecode se interpreta en la ejecución.

Para obtener información acerca de la ejecución del programa Java en modalidadinterpretada, consulte el apartado correspondiente al mandato Ejecutar Java(RUNJVA).

Ejecución directa:

Si elige ejecutar el programa Java utilizando la ejecución directa, el código severifica y se crea un objeto de programa Java para contener la forma preverificadadel programa. Se generan instrucciones de máquina para un método durante laprimera llamada a dicho método, y se guardan para utilizarlas la próxima vez quese ejecute el programa. También se comparte una copia para todo el sistema.

Para obtener información acerca de la ejecución del programa Java utilizando laejecución directa, consulte el apartado correspondiente al mandato Ejecutar Java(RUNJVA).

Compilación Just-In-Time (JIT):

Si elige ejecutar el programa Java utilizando el compilador Just-In-Time, el códigose verifica y se crea un programa Java asociado para contener la formapreverificada del programa. Se generan instrucciones de máquina para un métododurante la primera llamada a dicho método, y se guardan durante la ejecución dela máquina virtual Java.

Para utilizar JIT, es necesario establecer el valor del compilador en jitc. Puedeestablecer el valor añadiendo una variable de entorno o estableciendo la propiedaddel sistema java.compiler. Seleccione un método de la lista siguiente para establecerel valor del compilador:

16 AS/400 Developer Kit para Java

Page 25: AS400 Kit Desarrollo Para Java - Rzaha

v Añada la variable de entorno especificando el mandato Añadir variable deentorno (ADDENVVAR) en la línea de mandatos AS/400. A continuación,ejecute el programa Java mediante el mandato Ejecutar Java (RUNJVA) o elmandato JAVA. Por ejemplo, especifiqueADDENVVAR ENVVAR (JAVA_COMPILER) VALUE(jitc)JAVA CLASS(Test)

v Establezca la propiedad del sistema java.compiler en la línea de mandatosAS/400. Por ejemplo, especifique JAVA CLASS(Test) PROP((java.compilerjitc))

v Establezca la propiedad del sistema java.compiler en la línea de mandatos delintérprete de Qshell. Por ejemplo, especifique java -Djava.compiler=jitc Test

Una vez establecido este valor, el compilador JIT optimiza todo el código Javaantes de ejecutarlo.

Compilación Just-In-Time (JIT) y ejecución directa:

La forma más común de utilizar el compilador Just-In-Time (JIT) es con la opciónjit_de. Al ejecutar con esta opción, los programas que ya se han optimizado con laejecución directa se ejecutan en modalidad de ejecución directa. Los programas queno se han optimizado para la optimización directa se ejecutan en modalidad JIT.

Para utilizar el compilador JIT y la ejecución directa conjuntamente, es necesarioestablecer el valor del compilador en jitc-de. Puede establecer el valor añadiendouna variable de entorno o estableciendo la propiedad del sistema java.compiler.Seleccione un método de la lista siguiente para establecer el valor del compilador:v Añada la variable de entorno especificando el mandato Añadir variable de

entorno (ADDENVVAR) en la línea de mandatos AS/400. A continuación,ejecute el programa Java mediante el mandato Ejecutar Java (RUNJVA) o elmandato JAVA. Por ejemplo, especifiqueADDENVVAR ENVVAR (JAVA_COMPILER) VALUE(jitc_de)JAVA CLASS(Test)

v Establezca la propiedad del sistema java.compiler en la línea de mandatosAS/400. Por ejemplo, especifique JAVA CLASS(Test) PROP((java.compilerjitc_de))

v Establezca la propiedad del sistema java.compiler en la línea de mandatos delintérprete de Qshell. Por ejemplo, especifique java -Djava.compiler=jitc_deTest

Una vez establecido este valor, se utiliza el programa Java para el archivo de clasecreado como ejecución directa. Si el programa Java no se ha creado como ejecucióndirecta, el JIT optimiza el archivo de clase antes de ejecutarlo. Para obtener másinformación, consulte el apartado Comparación entre el compilador Just-In-Time y

la ejecución directa.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Crear y editar archivos fuente JavaCon Client Access:

Los archivos fuente Java son archivos de texto ASCII del sistema de archivosintegrado de AS/400.

Capítulo 2. Cómo empezar con AS/400 Developer Kit para Java 17

Page 26: AS400 Kit Desarrollo Para Java - Rzaha

Para crear y editar un archivo fuente Java, se puede utilizar Client Access y uneditor basado en estación de trabajo.

En una estación de trabajo:

Se puede crear un archivo fuente Java en una estación de trabajo. A continuación,hay que transferirlo al sistema de archivos integrado utilizando para ello elprotocolo FTP.

Para crear y editar archivos fuente Java en una estación de trabajo:1. Cree el archivo ASCII en la estación de trabajo con el editor que prefiera.2. Conéctese 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 deUtilidad 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 archivosintegrado y convertir al mismo tiempo los datos a formato ASCII.

Si ha de realizar cambios en el código fuente, cambie el miembro de base de datoscon SEU y copie de nuevo el archivo.

Para obtener información sobre el almacenamiento de archivos, consulte Archivosen el sistema de archivos integrado.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Bajar e instalar paquetes Java en AS/400Para bajar, instalar y utilizar paquetes Java de una forma más efectiva en AS/400,consulte lo siguiente:v Paquetes con interfaces gráficas de usuario (página 18)v Distinción entre mayúsculas y minúsculas y el sistema de archivos integrado

(página 19)v Manejo de archivos ZIP y JAR (página 19)v Infraestructura de ampliaciones Java (página 20)

Paquetes con interfaces gráficas de usuario:

Los programas Java que se utilizan con una interfaz gráfica de usuario (GUI)requieren el uso de un dispositivo de presentación con posibilidades devisualización gráfica. Por ejemplo, se puede utilizar un PC, una estación de trabajotécnica o un network computer. AS/400 ofrece la función AWT (Abstract WindowToolkit) remoto. Esta función ejecuta aplicaciones en AS/400 utilizando para elloun completo abanico de funciones gráficas en el dispositivo de pantalla TCP/IP

18 AS/400 Developer Kit para Java

Page 27: AS400 Kit Desarrollo Para Java - Rzaha

conectado. Si desea obtener información más concreta sobre la instalación, laconfiguración y el uso general, consulte el tema dedicado a la configuración deAWT remoto.

Distinción entre mayúsculas y minúsculas y el sistema de archivos integrado:

El sistema de archivos integrado proporciona sistemas de archivos sensibles a lasmayúsculas y minúsculas y también otros no sensibles a las mayúsculas yminúsculas por lo que a los nombres de archivo se refiere. QOpenSys es unejemplo de sistema de archivos sensible a las mayúsculas y minúsculas dentro delsistema de archivos integrado. El sistema de archivos raíz, ’/’, es un ejemplo desistema de archivos no sensible a las mayúsculas y minúsculas. Para obtener másinformación acerca del sistema de archivos integrado, consulte la información delapartado “Sistemas de archivos” de la publicación OS/400 Introducción al sistemade archivos integrado.

Manejo de archivos ZIP y JAR:

Los archivos ZIP y JAR contienen un conjunto de clases Java. Cuando se utiliza elmandato Crear programa Java (CRTJVAPGM) en uno de estos archivos, severifican las clases, se convierten a un formato máquina interno y, si se haespecificado así, se transforman en código máquina de AS/400. Los archivos ZIP yJAR pueden recibir el mismo trato que cualquier otro archivo de clase individual.Si se asocia un formato máquina interno con uno de estos archivos, permaneceasociado con el archivo. El formato máquina interno se utilizará en ejecucionesfuturas en lugar del archivo de clase con el fin de mejorar el rendimiento. Si noestá seguro de si existe un programa Java actual asociado con el archivo de clase oJAR, utilice el mandato Visualizar programa Java (DSPJVAPGM) para visualizarinformación acerca del programa Java en AS/400.

En releases anteriores de AS/400 Developer Kit para Java, era necesario volver acrear un programa Java si se cambiaba de algún modo el archivo JAR o ZIP,debido a que el programa Java conectado no hubiera podido utilizarse. Esto ya noes así. En muchos casos, si se cambia un archivo JAR o ZIP, el programa Java siguesiendo válido y no es necesario volver a crearlo. Si se efectúan cambios parciales,como por ejemplo al actualizar un archivo de clase simple dentro de un archivoJAR, sólo es necesario volver a crear los archivos de clase afectados que seencuentran dentro del archivo JAR.

Los programas Java permanecen conectados con el archivo JAR después derealizarse los cambios más habituales en el archivo JAR; por ejemplo, después 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; sinembargo, sí lo hacen con el mandato Mover objeto (MOV). Cada vez que copieun archivo JAR, será necesario que ejecute el mandato CRTJVAPGM en elarchivo JAR resultante a efectos de rendimiento y espacio. O bien, deje que losprogramas Java se creen automáticamente, según convenga, cuando se ejecute laaplicación.

Si accede a un archivo JAR del sistema de archivos integrado por medio de ClientAccess o desde una unidad correlacionada de un PC, los programas Javapermanecen conectados con el archivo JAR después de:

Capítulo 2. Cómo empezar con AS/400 Developer Kit para Java 19

Page 28: AS400 Kit Desarrollo Para Java - Rzaha

v Arrastrar y soltar otro archivo JAR dentro del archivo JAR del sistema dearchivos integrado existente.

v Cambiar o volver a crear el archivo JAR del sistema de archivos integrado con laherramienta jar.

v Sustituir el archivo JAR del sistema de archivos integrado utilizando el mandatocopy de PC.

Cuando se cambia o sustituye un archivo JAR, el programa Java conectado almismo ya no es actual.

Existe un único caso en el que los programas Java no permanecen conectados conel archivo JAR. Los programas Java conectados se destruyen si se utiliza elprotocolo FTP para sustituir el archivo JAR. Esto ocurre, por ejemplo, si se utilizael mandato put de FTP para sustituir el archivo JAR.

En el apartado Rendimiento de ejecución hallará información más detallada sobrelas características de rendimiento de los archivos JAR.

Infraestructura de ampliaciones Java:

En Java 2 SDK, Standard Edition, versión 1.2, las ampliaciones son paquetes declases Java que pueden utilizarse para ampliar la funcionalidad de la plataformacentral. Una ampliación o aplicación está empaquetada en uno o más archivos JAR.El mecanismo de ampliación permite que la máquina virtual Java utilice las clasesde ampliación de la misma forma que la máquina virtual Java utiliza las clases delsistema. El mecanismo de ampliación también proporciona una forma de recuperarampliaciones de URL especificados cuando no están ya instalados en JavaDevelopment Kit (JDK) o Java 2 Runtime Environment, Standard Edition, versión1.2.

Consulte el apartado Instalación de ampliaciones para AS/400 Developer Kit paraJava para obtener más información sobre la instalación de ampliaciones.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Compatibilidad de release a releaseAl igual que sucede con todos los programas Java, los archivos de clase sonportables a los releases anteriores y futuros de AS/400 o de otras máquinas Javacompatibles, respetando las limitaciones que pueda introducir Sun Microsystems,Inc. No obstante, los programas Java no son portables actualmente entre releasesde 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 elarchivo JAR cuando se mueva el programa a otro AS/400 desde un releasediferente.

Los programas Java que pueden asociarse al archivo de clase, archivo ZIP oarchivo JAR no son compatibles en sentido ascendente desde releases anteriores aV4R4. Debe ejecutar el mandato CRTJVAPGM en V4R4 para conseguir la mejoroptimización al utilizar un archivo de clase, archivo ZIP o archivo JAR con unprograma Java asociado desde un release anterior a V4R4. Utilice el mandatoVisualizar programa Java (DSPJVAPGM) para determinar si tiene un programaJava asociado. Independientemente de ello, debe seguir ejecutando el mandatoCRTJVAPGM aunque no exista un programa Java asociado procedente de un

20 AS/400 Developer Kit para Java

Page 29: AS400 Kit Desarrollo Para Java - Rzaha

release anterior. En cualquier caso, se produce la creación implícita si no ejecutaexplícitamente el mandato CRTJVAPGM, pero una creación explícita mediante elmandato CRTJVAPGM produce un código mejor y utiliza menos espacio de disco.

Si tiene programas Java creados en el nivel de optimización 40, antes de lainstalación de Java 2 Software Development Kit (J2SDK), Standard Edition, versión1.2, debe crearlos de nuevo mediante el mandato CRTJVAPGM. Es necesariocrearlos de nuevo debido a los cambios efectuados en las clases básicas J2SDK.

Nota: Si crea programas Java que utilizan características exclusivas de J2SDK,versión 1.2, no son portables a versiones anteriores a J2SDK, versión 1.2. Si losprogramas Java no utilizan características exclusivas, son portables a versionesanteriores.

Consulte el apartado Rendimiento de ejecución para obtener información másdetallada sobre el rendimiento.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 2. Cómo empezar con AS/400 Developer Kit para Java 21

Page 30: AS400 Kit Desarrollo Para Java - Rzaha

22 AS/400 Developer Kit para Java

Page 31: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 3. Conceptos de AS/400 Developer Kit para Java

Conceptos de AS/400 Developer Kit para Java presenta todo aquello con lo que sedebe estar familiarizado a la hora de utilizar AS/400 Developer Kit para Java. Estainformación es específica de AS/400.

En Conceptos básicos de Java se dan definiciones para quienes buscan detallesbásicos. Se trata de información general sobre Java y no es específica del AS/400.Se facilita a modo de consulta rápida. También hay información de consulta paraJava 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 utilización en un entornode servidor AS/400. Utiliza la compatibilidad de las interfaces de usuario y de laprogramación en Java para que usted pueda desarrollar aplicaciones propias paraAS/400.

AS/400 Developer Kit para Java le permite crear y ejecutar programas Java enAS/400. AS/400 Developer Kit para Java es una implementación compatible de latecnología Java de Sun Microsystems, Inc., y por tanto se presupone que el usuarioestá familiarizado con la documentación de Java Development Kit (JDK), y confrecuencia se suministran enlaces con dicha información.

Entre las características únicas del diseño de AS/400 Developer Kit para Java cabeseñalar:v La integración de componentes fundamentales de la máquina virtual Java por

debajo de la interfaz de máquina independiente de la tecnología (TIMI).v Un transformador Java para la conversión de los bytecodes Java en instrucciones

de lenguaje máquina RISC.v Implementaciones avanzadas y escalables de los procesos de recogida de basura,

asignación de objetos y sincronización.v La implementación AWT remoto, que da soporte a las API java.awt.v Class Broker para Java, que puede utilizarse para servicios de interfaz gráfica de

usuario (GUI) de alto rendimiento.v Un compilador Just-In-Time (justo a tiempo) que mejora el rendimiento al

compilar código a medida que es necesario.

AS/400 Developer Kit para Java no es un lenguaje del entorno de lenguajesintegrados (ILE). Introduce en AS/400 un nuevo entorno de lenguajes construidosobre Java, ASCII, el sistema de archivos integrado y otros estándares del sector.

AS/400 Developer Kit para Java da soporte a las herramientas comunes de JDKcomo, por ejemplo, javac, javadoc y jar. También hay mandatos CL e interfaces deOperations Navigator con AS/400 Developer Kit para Java.

Si busca la definición de conceptos concretos de AS/400 Developer Kit para Javaademás de información detallada, pulse en cualquiera de los enlaces siguientes:v En Ejecutar Java en un trabajo de proceso por lotes se explica cómo ejecutar

programas Java en un trabajo de proceso por lotes utilizando el mandatoSometer trabajo (SBMJOB).

© Copyright IBM Corp. 1998, 1999 23

Page 32: AS400 Kit Desarrollo Para Java - Rzaha

v En Clases, paquetes y directorios Java se da la definición de cada uno de estostérminos y se explica cómo están relacionados entre sí.

v En Propiedades de sistema Java se muestran las propiedades de sistema juntocon su descripción y valor por omisión del sistema.

v En Archivos en el sistema de archivos integrado se indica dónde se puedenalmacenar los archivos fuente en los sistemas de archivos integrados.

v En Autorizaciones de archivo Java en el sistema de archivos integrado se enseñaa establecer las autorizaciones de archivo Java.

v En Codificaciones de caracteres Java se explica la manera en que la máquinavirtual Java convierte los datos a otras codificaciones.

v En JNDI (Java Naming and Directory Interface) se informa de cómo ejecutarJNDI.

v En Interfaz de depuración de la máquina virtual Java se describe qué es laJVMDI y por qué se utiliza.

v En Limitaciones, restricciones y comportamientos propios se facilita una relaciónde las limitaciones conocidas.

Conceptos básicos de Java:

Java es un lenguaje de programación orientado a objeto totalmente funcional quesirve para desarrollar aplicaciones y applets. La programación orientada a objetoemplea objetos y clases dentro de un programa para representar las entidades delmundo real y las clasificaciones que pueden establecerse entre ellas. Las clasesdefinen los atributos y el comportamiento que son comunes a todos los objetos deuna misma clase. Un objeto es un caso particular de una clase, el ejemplo concretodel modelo conceptual más general. La programación orientada a objeto permite alos programadores diseñar aplicaciones que utilizan clases y objetos que sonparalelos a los que encontramos en el mundo real.

Pero no tan sólo puede utilizarse la tecnología Java para programar applets o paraescribir aplicaciones, sino que también pueden utilizarse los servlets para llevarJava hasta los servidores. Los servlets son componentes del lado del servidorindependientes del protocolo y la plataforma que se escriben en Java con el fin deampliar de forma dinámica los servidores habilitados para Java. Consulte la página

de presentación de IBM WebSphere Application Server para obtenerinformación más específica acerca de los servlets.

Desde el punto de vista de la sintaxis, el lenguaje Java es parecido a C++. Sinembargo, se ha diseñado para que resulte más fácil de aprender y más sencillo deutilizar. Una de las simplificaciones realizadas en Java ha sido la eliminación de lospunteros. En un lenguaje como C++, los punteros suelen ser la causa más frecuentede los errores de un programa debido a las referencias hechas de forma incorrectaa la memoria. Java permite hacer referencias a objetos, pero el programador nopuede manipularlas ni cambiarlas directamente.

Java es más sencillo que C++ en otros aspectos. No existen la herencia múltiple, lasplantillas, la sobrecarga de operadores ni los archivos de cabecera. Estassimplificaciones se suman a la versatilidad del lenguaje, lo convierten en algo fácilde utilizar para los programadores y reducen el riesgo de cometer errores deprogramación.

Asimismo, Java libra al programador de la obligación de tener que gestionar lamemoria. Un componente de la máquina virtual Java, el llamado recogedor debasura, libera la memoria asignada a un objeto una vez que éste ha dejado de

24 AS/400 Developer Kit para Java

Page 33: AS400 Kit Desarrollo Para Java - Rzaha

utilizarse. El recogedor de basura hace un seguimiento de cuáles son los objetosque están activos en un programa. Cuando el programa deja de hacer referencia alobjeto, el recogedor de basura libera automáticamente la memoria que ocupa elobjeto 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 ejecución y proporciona estructuras delenguaje que permiten al programador escribir código multihebra. Las hebraspermiten la ejecución concurrente y paralela del código dentro de un programa. Lafacultad de crear y ejecutar hebras no es inherente a otros lenguajes deprogramación. Java ofrece el potencial de las hebras como parte del lenguaje base.

Java es un lenguaje que resulta ideal para la informática de redes. Se puedendesarrollar applets y aplicaciones para ejecutarlas en un entorno distribuido. Losprogramas Java son portables de una plataforma a otra y no requieren que serealice ninguna modificación ni compilación nueva para poder ejecutarse en unaconfiguración distinta de sistema operativo o de hardware.

Si desea obtener información más detallada sobre la plataforma Java básica o sobreJava Development Kit de Sun Microsystems, Inc, consulte los temas siguientes, enlos que hallará toda la información previa necesaria:v En La plataforma Java se señalan los puntos en los que el entorno Java se

diferencia de los lenguajes de programación tradicionales.v En Java Development Kit de Sun Microsystems, Inc se facilita información y

detalles acerca de Java Development Kit.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Transformador JavaEl 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 ejecución conla máquina virtual Java de AS/400. Crea un programa objeto optimizado que espersistente y está asociado con el archivo de clase. En el caso por omisión, elprograma objeto contiene una versión compilada con instrucciones de lenguajemáquina RISC de 64 bits de la clase. El intérprete Java no interpreta el programaobjeto optimizado durante la ejecución. En lugar de ello, se ejecuta directamentecuando se carga el archivo de clase.

No es necesario hacer nada para iniciar el transformador Java. Se ejecutaautomáticamente cuando el archivo de clase se ejecuta por primera vez en elsistema, a menos que usted solicite de manera explícita que el archivo de clase seejecute en modalidad interpretada.

Para iniciar explícitamente el transformador Java, puede utilizar el mandato Crearprograma Java (CRTJVAPGM). El mandato CRTJVAPGM optimiza el archivo declase o archivo JAR mientras se ejecuta el mandato, y por tanto no es necesariorealizar ninguna acción mientras se está ejecutando el programa. Esto aumenta lavelocidad del programa la primera vez que se ejecuta. La utilización del mandatoCRTJVAPGM, en lugar de confiar en la optimización por omisión, asegura la mejoroptimización posible y también una mejor utilización del espacio para losprogramas Java asociados con el archivo de clase o archivo JAR.

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 25

Page 34: AS400 Kit Desarrollo Para Java - Rzaha

Si se utiliza el mandato CRTJVAPGM en un archivo de clase, JAR o ZIP, seoptimizan todas las clases del archivo y el programa objeto Java resultante espersistente. El resultado es que el rendimiento de ejecución mejora. También sepuede cambiar el nivel de optimización o seleccionar un nivel de optimizacióndistinto del valor por omisión, 10, con el mandato CRTJVAPGM o el mandatoCambiar programa Java (CHGJVAPGM). En el nivel de optimización 40, se realizaun enlace entre clases entre las clases del interior de un archivo JAR y, en algunoscasos, las clases se incorporan. El enlace entre clases aumenta la velocidad dellamada. La incorporación elimina la llamada por completo. En algunos casos,puede incorporar métodos entre clases del interior del archivo JAR o ZIP. Siespecifica OPTIMIZE(*INTERPRET) en el mandato CRTJVAPGM, las clasesespecificadas en el mandato se verifican y se preparan para ejecutarlas enmodalidad interpretada.

En el mandato Ejecutar Java (RUNJVA) también se puede especificarOPTIMIZE(*INTERPRET). Este parámetro indica que las clases que se ejecuten enla máquina virtual Java son interpretadas, independientemente de cuál sea el nivelde optimización del programa objeto asociado. Esto resulta útil a la hora dedepurar una clase que haya sido transformada con el nivel de optimización 40.Para forzar la interpretación, utilice INTERPRET(*YES).

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Recogida de basura avanzada de AS/400 Developer Kit para JavaAS/400 Developer Kit para Java implementa un algoritmo avanzado de recogidade basura. Este algoritmo permite descubrir y recoger objetos inalcanzables sin quese produzcan pausas significativas en el funcionamiento del programa Java. Unrecogedor concurrente descubre de manera cooperativa las referencias hechas aobjetos en las hebras en ejecución, en lugar de en una sola hebra.

Muchos recogedores de basura son de “detención total”. Esto significa que, en elpunto en que se produce un ciclo de recogida, se detienen todas las hebras,excepto la que efectúa la recogida de basura, mientras el recogedor de basurarealiza su trabajo. Cuando esto sucede, los programas Java sufren una pausa y lacapacidad multiprocesador que pueda tener la plataforma se malgasta por lo que aJava se refiere mientras el recogedor realiza su trabajo. El algoritmo de AS/400 nodetiene nunca las hebras del programa sino que les permite seguir funcionandomientras el recogedor de basura efectúa la tarea. Esto impide que se produzcanpausas y permite utilizar todos los procesadores mientras tiene lugar la recogidade basura.

La recogida de basura se efectúa de forma automática tomando como base losparámetros especificados al iniciar la máquina virtual Java. También puedeiniciarse explícitamente bajo el control del programa Java utilizando el métodojava.lang.Runtime.gc().

En Recogida de basura Java hallará la definición básica del concepto.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

26 AS/400 Developer Kit para Java

Page 35: AS400 Kit Desarrollo Para Java - Rzaha

Recogida de basura JavaLa recogida de basura es el proceso por el cual se libera el almacenamiento queutilizan los objetos a los que ya no hace referencia un programa. Gracias a larecogida de basura, ya no es necesario que los programadores escriban código,susceptible de sufrir errores, para “liberar” o “suprimir” de manera explícita losobjetos. En muchas ocasiones, el resultado que da este código son errores deprograma que provocan “escapes de memoria”. El recogedor de basura detectaautomáticamente el objeto o grupo de objetos a los que ya no puede llegar elprograma de usuario. Lo detecta porque ya no hay referencias al objeto en ningunade las estructuras del programa. Una vez recogido un objeto, se puede asignar elespacio para otros usos.

El entorno de ejecución Java incluye un recogedor de basura que libera la memoriaque ya no se utiliza. El recogedor de basura se ejecuta automáticamente segúnconvenga.

El recogedor de basura puede iniciarse también de forma explícita bajo el controldel programa Java; para ello, debe utilizarse el método java.lang.Runtime.gc().

En Recogida de basura avanzada de AS/400 Developer Kit para Java hallaráinformación más concreta.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Entorno de ejecución Java de AS/400El entorno de ejecución Java se inicia cada vez que se entra el mandato EjecutarJava (RUNJVA) o el mandato JAVA en la línea de mandatos de AS/400. Dado queel entorno Java es multihebra, es necesario ejecutar la máquina virtual Java en untrabajo que dé soporte a las hebras, como puede ser un trabajo inmediato deproceso por lotes (BCI). Una vez iniciada la máquina virtual Java, pueden iniciarsemás hebras en las que se ejecutará el recogedor de basura. El entorno Java típico esel siguiente:

RV4N307-4

Traba jo in terac t i vo Lote de l t raba jo i nmedia to

CLASEJAVA ( 'Ho la ' )

Cód igo deap l i cac ión demáquina v i r tua lJava(c lase Ho la)Hebra x

Reco lec tor dedesechos

Hebra y

También se puede iniciar el entorno de ejecución Java con el mandato java deQshell desde el intérprete Qshell. En este entorno, el intérprete Qshell se ejecuta enun trabajo BCI asociado con un trabajo interactivo. El entorno de ejecución Java seinicia en el trabajo que está en ejecución en el intérprete Qshell.

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 27

Page 36: AS400 Kit Desarrollo Para Java - Rzaha

RV4N311-3

Traba jo in terac t i vo

Qshel l

Lo te t raba jo i nmedia to

STRQSHjava Ho la Código de

ap l i cac ión demáquinav i r tua l Java(c lase Ho la)Hebra x

Reco lec tor dedesechos

Hebra y

Cuando el entorno de ejecución Java se inicia desde un trabajo interactivo, aparecela pantalla de Shell de Java. Esta pantalla proporciona una línea de entrada paraincluir datos en la corriente System.in, así como para visualizar los datos que segraban en la corriente System.out y en la corriente System.err.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Abstract Window Toolkit remoto de AS/400 Developer Kit para JavaAWT remoto es una implementación del AWT (siglas en inglés de AbstractWindow Toolkit). Permite la ejecución de aplicaciones Java, sin cambios, en unsistema principal sin interfaz gráfica de usuario (GUI). AS/400 no da soporte aterminales gráficos conectados de forma local; por lo tanto, AWT remoto resultanecesario para permitir la ejecución de aplicaciones Java gráficas en el AS/400.

AWT remoto se utiliza con las interfaces de instalación y administración de lasaplicaciones de servidor. Estas interfaces suelen tener un mínimo de gráficoscomplejos y un contenido altamente interactivo. AWT remoto distribuye losprocesos AWT entre el AS/400 y una estación de trabajo. El nivel de respuesta delas operaciones con muchos gráficos y un alto grado de interacción no es tanrápido como en las implementaciones de AWT en plataformas con terminalesgráficos conectados localmente.

Puesto que el AWT remoto de AS/400 Developer Kit para Java no es aconsejablepara operaciones con gráficos complejos o alta interacción, puede utilizar en sulugar Class Broker para Java, diseñado para estos entornos.

Para obtener información acerca de cómo configurar AWT remoto, consulte elapartado Configuración de Abstract Window Toolkit remoto en una pantallaremota.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

28 AS/400 Developer Kit para Java

Page 37: AS400 Kit Desarrollo Para Java - Rzaha

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

Class Broker para Java (CBJ) es una infraestructura de carácter general paraescribir aplicaciones cliente/servidor en Java. Generalmente, una aplicacióncliente/servidor consta de un objeto cliente y un objeto servidor. El servidor y elcliente son responsables de toda la comunicación entre los dos objetos.Generalmente, esta comunicación se lleva a cabo mediante Invocación a MétodoRemoto (RMI) o mediante una conexión de socket. RMI no resulta muy fácil niflexible en cuanto a utilización, y existe una curva de aprendizaje considerable si seintentan utilizar sockets de forma efectiva.

CBJ es fácil de utilizar, es flexible y oculta la complejidad de las conexiones desockets. Excepto por lo que respecta a unas pocas llamadas a las clases CBJ parainicializar la aplicación, una aplicación cliente/servidor con intermediario tiene elmismo aspecto que una aplicación local. CBJ maneja toda la carga de recursos ycomunicación entre el cliente y el servidor. El hecho de que algunos de los objetosdel programa se estén ejecutando en el cliente y algunos otros en el servidor escasi transparente. CBJ crea proxies de cliente y de servidor utilizando la ejecuciónCBJ. Una vez que el intermediario crea los objetos proxy, el cliente se comunica conel servidor remoto llamando a los métodos del proxy del servidor. Del mismomodo, el objeto servidor se comunica con el cliente llamando a los métodos delproxy del cliente. Por consiguiente, tanto el lado del cliente como el lado delservidor de la aplicación funcionan como si llamaran a métodos de objetos locales.

Para obtener información acerca de la utilización de Class Broker para Java,

consulte el apartado configuración de Class Broker para Java .

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

Compilador Just-In-Time

Un compilador Just-In-Time (JIT) es un compilador específico de plataformaque genera instrucciones de máquina para cada método en la primera llamada adicho método. Para mejorar el rendimiento, el compilador JIT compila código amedida que se necesita.

Para comprender la diferencia entre el compilador JIT y la ejecución directa,consulte el apartado Comparación entre el compilador JIT y la ejecución directa.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Comparación entre el compilador Just-In-Time y la ejecucióndirecta

Si está tratando de decidir entre utilizar el compilador Just-In-Time o lamodalidad de ejecución directa para ejecutar el programa Java, esta tablaproporciona información adicional que puede ayudarle a efectuar la mejor eleccióncon respecto a su situación.

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 29

Page 38: AS400 Kit Desarrollo Para Java - Rzaha

Compilador Just-In-Time Ejecución directaProporciona una compilación automática decualquier método cuando es necesaria. Estemétodo es mucho más rápido que laejecución directa.

Se compila una clase entera o un archivo JARutilizando el mandato Crear programa Java(CRTJVAPGM) o los archivos se compilanautomáticamente en tiempo de ejecución.

Se utiliza para el desarrollo de aplicacionespequeñas o de baja utilización, y paraaplicaciones altamente dinámicas en las queel código se genera o carga en tiempo deejecución. JIT puede ser la elección paracódigo optimizado, distinto del deinterpretación, que es con frecuencia muchomás lento.

Se utiliza para aplicaciones relativamentegrandes. El código de ejecución directa, en elnivel de optimización 40, es generalmentemás rápido que el JIT. Para desplegaraplicaciones de servidor es más adecuadoutilizar la ejecución directa en el nivel deoptimización 40, ya que es posible que esténsiendo utilizadas por varios usuarios en unmomento dado, y el coste de utilizar el JITuna y otra vez es mucho más elevado.

Las optimizaciones están limitadas a las quepueden realizarse rápidamente en tiempo deejecución.

Son posibles optimizaciones más complejas,dado que la optimización no se realiza entiempo de ejecución.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Comparación entre el entorno de lenguajes integrados y JavaEn AS/400, el entorno Java está aparte del entorno de lenguajes integrados (ILE).Java no es un lenguaje ILE y no puede establecer enlaces lógicos con módulosobjeto ILE para crear programas o programas de servicio en AS/400.

ILE JavaLos miembros que forman parte de labiblioteca o la estructura de archivos enAS/400 almacenan los códigos fuente.

Los archivos continuos del sistema dearchivos integrado contienen el códigofuente.

El programa de utilidad para entrada delfuente (SEU) edita archivos fuente EBCDIC.

Los archivos fuente ASCII se editannormalmente con un editor de estación detrabajo.

El resultado de la compilación de archivosfuente son módulos de código objeto, que sealmacenan en bibliotecas de AS/400.

El resultado de la compilación del códigofuente son archivos de clase, que almacena elsistema de archivos integrado.

Los módulos objeto están unidosestáticamente entre sí en programas oprogramas de servicio.

Las clases se cargan dinámicamente segúnconvenga en tiempo de ejecución.

Se puede llamar directamente a funcionesescritas en otros lenguajes de programaciónILE.

Para llamar a otros lenguajes desde Java, sedebe utilizar Java Native Interface.

Los lenguajes ILE se compilan y ejecutansiempre en forma de instrucciones delenguaje máquina.

Los programas Java pueden ser interpretadoso compilados.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

30 AS/400 Developer Kit para Java

Page 39: AS400 Kit Desarrollo Para Java - Rzaha

Ejecutar Java en un trabajo de proceso por lotesPara ejecutar programas Java en un trabajo de proceso por lotes, hay que utilizar elmandato Someter trabajo (SBMJOB). En esta modalidad, no se dispone de lapantalla Entrada de mandato de Qshell de Java para manejar las corrientesSystem.in, System.out y System.err.

Puede redirigir estas corrientes a otros archivos. Por omisión, las corrientesSystem.out y System.err se envían a un archivo en spool. El trabajo de proceso porlotes, que da como resultado una excepción de entrada y salida para las peticionesde 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.También pueden utilizarse las propiedades de sistema os400.stdin, os400.stdout yos400.stderr para lo mismo.

Nota: SBMJOB establece el directorio de trabajo actual (CWD) en el directorioHOME 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 ejecución 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 ejecutarmás de un trabajo.

Puede verificar que el trabajo de proceso por lotes es capaz de ejecutar más de untrabajo siguiendo estos pasos:1. En la línea de mandatos CL, escriba DSPSBSD(MYSBSD), donde MYSBSD es la

descripción de subsistema del trabajo de proceso por lotes.2. Elija la opción 6, Entradas de cola de trabajos.3. Observe el campo Máx. activo correspondiente a la cola de trabajos.

Si el valor del campo Máx. activo es inferior o igual a 1 y no es *NOMAX,especifique lo siguiente en la línea de mandatos CL:

CHGJOBQE SBSD(MYSBSD) JOBQ(MYJOBQ) MAXACT(*NOMAX)Donde:v MYSBSD es la descripción de subsistema, yv MYJOBQ es la cola de trabajos.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Clases, paquetes y directorios JavaCada clase Java forma parte de un paquete. La primera sentencia de un archivofuente Java indica la clase y el paquete que la contienen. Si el archivo fuente nocontiene la sentencia package, significa que la clase forma parte de un paquete poromisión cuyo nombre no se indica.

El nombre del paquete está relacionado con la estructura de directorios en la quereside la clase. El sistema de archivos integrado da soporte a las clases Java en unaestructura jerárquica de archivos parecida a la que existe en la mayoría de lossistemas UNIX y PC. Las clases Java deben almacenarse en un directorio que tenga

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 31

Page 40: AS400 Kit Desarrollo Para Java - Rzaha

una vía de acceso que sea relativa y que coincida con el nombre de paquete de laclase. Por ejemplo, observe la clase Java siguiente:package classes.geometry;import java.awt.Dimension;public class Shape {Dimension metrics;

// El código de la implementación de la clase Shape estaría aquí ...}

La sentencia package del código anterior indica que la clase Shape forma parte delpaquete “classes.geometry”. Para que el sistema de ejecución Java encuentre laclase Shape, hay que almacenar la clase Shape en la estructura de directoriosrelativa “classes/geometry”.

Nota: el nombre de paquete se corresponde con el nombre de directorio relativo enel que está almacenada la clase. El cargador de clases de la máquina virtual Javabusca la clase agregando el nombre de vía de acceso relativa a cada uno de losdirectorios especificados en la vía de acceso de clases. También puede buscar laclase realizando una búsqueda en los archivos ZIP o JAR especificados en la vía deacceso de clases.

Por ejemplo, si la clase Shape estuviese almacenada en el directorio/Product/classes/geometry del sistema de archivos “raíz” (/), sería necesarioespecificar /Product en la vía de acceso de clases.

Nota: en la estructura de directorios pueden existir varias versiones de la claseShape. Para utilizar la versión “beta” de la clase Shape, sitúe /Beta/myclassesdentro de la vía de acceso de clases antes de cualquier otro directorio o archivoZIP que contenga la clase Shape.

32 AS/400 Developer Kit para Java

Page 41: AS400 Kit Desarrollo Para Java - Rzaha

El compilador Java utiliza la vía de acceso de clases Java, el nombre de paquete yla estructura de directorios para buscar los paquetes y las clases cuando compila elcódigo fuente Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Propiedades de sistema JavaLas propiedades de sistema Java determinan cuál es el entorno en el que seejecutan los programas Java. Son parecidas a los valores del sistema o las variablesde entorno de OS/400. Cuando se inicia la máquina virtual Java, se establecendiversas propiedades.

Para ver las propiedades del sistema soportadas por este release, enlácese con laversión elegida para obtener información detallada:v Java Development Kit (JDK) 1.1.8v Java 2 Software Development Kit (J2SDK), Standard Edition, versión 1.2

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Propiedades del sistema Java para Java Development Kit(JDK) 1.1.8

Las propiedades de sistema Java determinan cuál es el entorno en el que seejecutan los programas Java. Son parecidas a los valores del sistema o las variablesde entorno de OS/400. Cuando se inicia la máquina virtual Java, se establecendiversas propiedades.

En JDK 1.1.8, las propiedades de sistema están establecidas en estos valores poromisión de sistema.

Propiedades de sistema Valores por omisión de sistemaawt.toolkit com.ibm.rawt.client.CToolkitfile.encoding.pkg sun.iofile.separator / (barra inclinada)java.class.version 45.3java.home Consulte el apartado Soporte a varios JDK

para obtener detalles.java.vendor IBM Corporationjava.vendor.url http://www.ibm.comline.separator \nos.arch PowerPCos.name OS/400os400.class.path.rawt 0

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 33

Page 42: AS400 Kit Desarrollo Para Java - Rzaha

Propiedades de sistema Valores por omisión de sistemaos400.class.path.security.check

20Valores válidos:0—Sin comprobación de seguridad10—equivalente a RUNJVACHKPATH(*IGNORE)20—equivalente a RUNJVACHKPATH(*WARN)30—equivalente a RUNJVACHKPATH(*SECURE)

os400.class.path.tools 0os400.create.type

directValores válidos:interpret—equivalente a RUNJVAOPTIMIZE(*INTERPRET) eINTERPRET(*OPTIMIZE), oINTERPRET(*YES)direct—Lo contrario

os400.defineClass.optLevel 20os400.enbpfrcol

0Valores válidos:0—equivalente a CRTJVAPGMENBPFRCOL(*NONE)1—equivalente a CRTJVAPGMENBPFRCOL(*ENTRYEXIT)7—equivalente a CRTJVAPGMENBPFRCOL(*FULL)

os400.interpret

0Valores válidos:0—equivalente a CRTJVAPGMINTERPRET(*NO)1—equivalente a CRTJVAPGMINTERPRET(*YES)

os400.optimization

10Valores válidos:0—equivalente a CRTJVAPGMOPTIMIZE(*INTERPRET)10—equivalente a CRTJVAPGMOPTIMIZE(10)20—equivalente a CRTJVAPGMOPTIMIZE(20)30—equivalente a CRTJVAPGMOPTIMIZE(30)40—equivalente a CRTJVAPGMOPTIMIZE(40)

34 AS/400 Developer Kit para Java

Page 43: AS400 Kit Desarrollo Para Java - Rzaha

Propiedades de sistema Valores por omisión de sistemaos400.run.mode

program_create_typeValores válidos:interpret—equivalente a RUNJVAOPTIMIZE(*INTERPRET) eINTERPRET(*OPTIMIZE), oINTERPRET(*YES)program_create_type—Lo contrario

os400.stdin.allowed 0os400.verify.checks.disable 65535 Este valor de propiedad del sistema es

una serie que representa la suma de uno omás valores numéricos. Para obtener unalista de estos valores, consulte el apartadoValores numéricos deos400.verify.checks.disable.

path.separator : (dos puntos)

Este conjunto de propiedades de sistema se establece tomando como baseinformación adicional del sistema.

Propiedades de sistema Descripciónfile.encoding Correlaciona el CCSID de trabajo de OS/400

con el CCSID ASCII ISO correspondiente.Asimismo, establece el valor de file.encodingen el valor Java que representa el CCSIDASCII ISO. Consulte el apartado Valores defile.encoding y CCSID AS/400 para obteneruna tabla que muestra la relación existenteentre los valores posibles de file.encoding yel identificador de juego de caracteres(CCSID) de AS/400 que más se aproxima.

java.class.path Vía de acceso utilizada para localizar clases.Toma la vía de acceso de clases del sistemapor omisión como valor por omisión seguidade la vía de acceso de clases especificada porel usuario. Puede cambiar la construcción dela propiedad del sistema java.class.pathsystem utilizando la propiedad del sistemaos400.class.path.system.

java.version Determina el Java Development Kit (JDK)que debe ejecutarse.

Si especifica un JDK no instalado, se envíaun mensaje de error. Si no especifica un JDK,el JDK más reciente será el valor poromisión. Si sólo hay un único JDK instalado,será el valor por omisión. Consulte elapartado Soporte a varios JDK para obtenerdetalles acerca de las versiones.

os.version Obtiene el nivel de release de OS/400 de laAPI Recuperar Información de Producto.

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 35

Page 44: AS400 Kit Desarrollo Para Java - Rzaha

Propiedades de sistema Descripciónos400.CertificateContainer Manda al soporte SSL que utilice el

contenedor de certificado especificado para elprograma Java que se ha iniciado y lapropiedad que se ha especificado. Siespecifica la propiedad de sistemaos400.secureApplication, se hace caso omisode esta propiedad de sistema. Por ejemplo,especifique-Dos400.certificateContainer=/home/username/mykeyfile.kdbo cualquier otro archivo clave del sistema dearchivos integrado.

os400.CertificateLabel Puede especificar esta propiedad del sistemajunto con la propiedad del sistemaos400.CertificateContainer. Esta propiedadpermite seleccionar el certificado delcontenedor especificado que desea que utilicela capa de sockets seguros (SSL). Porejemplo, especifique-Dos400.certificateLabel=myCert, dondemyCert es el nombre de etiqueta que asignaal certificado por medio del Gestor decertificados digitales (DCM) al crear oimportar el certificado.

os400.child.stdio.convert Permite el control de la conversión de datospara stdin, stdout y stderr en Java. Laconversión de datos se produce por omisiónen la máquina virtual Java con el fin deconvertir los datos ASCII en EBCDIC yviceversa. Con esta propiedad se puedenactivar y desactivar las conversiones, lo queafecta los procesos hijo que haya iniciadoeste proceso utilizando el métodoruntime.exec(). Consulte los valores poromisión.

os400.class.path.system PRE (esto hace que, al construir la propiedaddel sistema java.class.path, se anteponga lavía de acceso de clases del sistema poromisión de OS/400 a la parte especificadapor el usuario. Otros valores son POST (laclase por omisión del sistema se coloca acontinuación de la parte especificada por elusuario de la vía de acceso de clases) yNONE (sólo se utiliza la vía de acceso declases especificada por el usuario). El valorpor omisión es PRE. Esta propiedad es nosensible a las mayúsculas y minúsculas. Porejemplo, se puede especificar NONE, none,noNe. Sin embargo, el nombre de lapropiedad sí es sensible a las mayúsculas yminúsculas. Por ejemplo, no se puedeespecificar OS400.CLASS.PATH.SYSTEM.Para evitar problemas potenciales, no debecambiar esta propiedad del sistema.

os400.file.io.mode Cuando se especifica TEXT en lugar del valorpor omisión, que es BINARY, esta propiedadde sistema convierte el CCSID del archivo sies distinto del valor de file.encoding.

36 AS/400 Developer Kit para Java

Page 45: AS400 Kit Desarrollo Para Java - Rzaha

Propiedades de sistema Descripciónos400.secureApplication Asocia el programa Java que se inicia cuando

se utiliza esta propiedad de sistema(os400.secureApplication) con el nombre dela aplicación segura registrada. Para ver losnombres de las aplicaciones segurasregistradas, utilice Digital CertificateManager (DCM).

os400.stderr Permite la correlación de stderr con unarchivo o un socket. Consulte los valores poromisión.

os400.stdin Permite la correlación de stdin con unarchivo o un socket. Consulte los valores poromisión.

os400.stdio.convert Permite el control de la conversión de datospara stdin, stdout y stderr en Java. Laconversión de datos se produce por omisiónen la máquina virtual Java con el fin deconvertir los datos ASCII en EBCDIC yviceversa. Con esta propiedad se puedenactivar y desactivar las conversiones, lo queafecta al programa Java actual. Consulte losvalores por omisión.

os400.stdout Permite la correlación de stdout con unarchivo o un socket. Consulte los valores poromisión.

user.dir Directorio de trabajo actual que utiliza la APIgetcwd.

user.home Recupera el directorio de trabajo inicialutilizando la API Get (getpwnam). Puedecolocar un archivo SystemDefault.propertiesen la vía de acceso de user.home path paraalterar temporalmente las propiedades poromisión en/QIBM/UserData/Java400/SystemDefault.properties.Consulte el apartado Configuración deAS/400 para obtener detalles acerca de cómoespecificar su propio conjunto de valores depropiedad por omisión.

user.language La máquina virtual Java utiliza estapropiedad del sistema para leer el valorLANGID del trabajo y lo utiliza para hallarel idioma Java correspondiente.

user.name La máquina virtual Java utiliza estapropiedad del sistema para recuperar elnombre de perfil de usuario efectivo delapartado de seguridad (Security.UserName)de la base de máquinas de confianza (TCB).

user.region La máquina virtual Java utiliza estapropiedad del sistema para leer el valorCNTRYID del trabajo y lo utiliza paradeterminar la región del usuario.

user.timezone La máquina virtual Java utiliza estapropiedad del sistema para obtener elnombre de huso horario utilizando la APIQlgRetrieveLocalInformation. Si no sedispone de la información de huso horario,user.timezone queda establecido en la UTC(Universal Time Coordinate).

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 37

Page 46: AS400 Kit Desarrollo Para Java - Rzaha

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Propiedades del sistema Java para Java 2 SoftwareDevelopment Kit (J2SDK), Standard Edition, versión 1.2

Las propiedades de sistema Java determinan cuál es el entorno en el que seejecutan los programas Java. Son parecidas a los valores del sistema o las variablesde entorno de OS/400. Cuando se inicia la máquina virtual Java, se establecendiversas propiedades.

Las propiedades del sistema se establecen en estos valores por omisión del sistemaen Java 2 Software Development Kit (J2SDK), Standard Edition, versión 1.2.

Propiedades de sistema Valores por omisión de sistemaawt.toolkit com.ibm.rawt.client.CToolkitfile.encoding.pkg sun.iofile.separator / (barra inclinada)java.class.version 46.0java.ext.dirs

/QIBM/ProdData/Java400/jdk12/lib/ext:/QIBM/ProdData/Javjava.home Consulte el apartado Soporte a varios JDK

para obtener detalles.java.library.path Lista de bibliotecas OS/400java.policy

/QIBM/ProdData/Java400/jdk12/lib/security/java.policyjava.specification.name Especificación de Lenguaje Javajava.specification.vendor Sun Microsystems, Inc.java.specification.version 1.2java.sys.class.path Class_Path_Sysjava.use.policy truejava.vendor IBM Corporationjava.vendor.url http://www.ibm.comjava.vm.name AS/400 Developer Kit para Javajava.vm.specification.name Especificación de máquina virtual Javajava.vm.specification.vendor Sun Microsystems, Inc.java.vm.specification.version 1.2java.vm.vendor IBM Corporationjava.vm.version OS400_JVM_12line.separator \nos.arch PowerPCos.name OS/400os400.class.path.rawt 0os400.class.path.security.check

20Valores válidos:0—Sin comprobación de seguridad10—equivalente a RUNJVACHKPATH(*IGNORE)20—equivalente a RUNJVACHKPATH(*WARN)30—equivalente a RUNJVACHKPATH(*SECURE)

os400.class.path.tools 0

38 AS/400 Developer Kit para Java

Page 47: AS400 Kit Desarrollo Para Java - Rzaha

Propiedades de sistema Valores por omisión de sistemaos400.create.type

directValores válidos:interpret—equivalente a RUNJVAOPTIMIZE(*INTERPRET) eINTERPRET(*OPTIMIZE), oINTERPRET(*YES)direct—Lo contrario

os400.defineClass.optLevel 20os400.enbpfrcol

0Valores válidos:0—equivalente a CRTJVAPGMENBPFRCOL(*NONE)1—equivalente a CRTJVAPGMENBPFRCOL(*ENTRYEXIT)7—equivalente a CRTJVAPGMENBPFRCOL(*FULL)

os400.interpret

0Valores válidos:0—equivalente a CRTJVAPGMINTERPRET(*NO)1—equivalente a CRTJVAPGMINTERPRET(*YES)

os400.optimization

10Valores válidos:0—equivalente a CRTJVAPGMOPTIMIZE(*INTERPRET)10—equivalente a CRTJVAPGMOPTIMIZE(10)20—equivalente a CRTJVAPGMOPTIMIZE(20)30—equivalente a CRTJVAPGMOPTIMIZE(30)40—equivalente a CRTJVAPGMOPTIMIZE(40)

os400.run.mode

program_create_typeValores válidos:interpret—equivalente a RUNJVAOPTIMIZE(*INTERPRET) eINTERPRET(*OPTIMIZE), oINTERPRET(*YES)program_create_type—Lo contrario

os400.stdin.allowed 0os400.verify.checks.disable 65535 Este valor de propiedad del sistema es

una serie que representa la suma de uno omás valores numéricos. Para obtener unalista de estos valores, consulte el apartadoValores numéricos deos400.verify.checks.disable.

path.separator : (dos puntos)

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 39

Page 48: AS400 Kit Desarrollo Para Java - Rzaha

Este conjunto de propiedades de sistema se establece tomando como baseinformación adicional del sistema.

Propiedades de sistema Descripciónfile.encoding Correlaciona el CCSID de trabajo de OS/400

con el CCSID ASCII ISO correspondiente.Asimismo, establece el valor de file.encodingen el valor Java que representa el CCSIDASCII ISO. Consulte el apartado Valores defile.encoding y CCSID AS/400 para obteneruna tabla que muestra la relación existenteentre los valores posibles de file.encoding yel identificador de juego de caracteres(CCSID) de AS/400 que más se aproxima.

java.class.path Vía de acceso utilizada para localizar clases.Toma como valor por omisión la vía deacceso de clases especificada por el usuario.

java.compiler Especifica si el código se compila con elcompilador Just-In-Time (JIT) (jitc) o con elcompilador JIT y la ejecución directa (jitc_de).

java.version Determina el Java Development Kit (JDK)que debe ejecutarse.

Si especifica un JDK no instalado, se envíaun mensaje de error. Si no especifica un JDK,el JDK más reciente será el valor poromisión. Si sólo hay un único JDK instalado,será el valor por omisión. Consulte elapartado Soporte a varios JDK para obtenerdetalles acerca de las versiones.

os.version Obtiene el nivel de release de OS/400 de laAPI Recuperar Información de Producto.

os400.CertificateContainer Manda al soporte SSL que utilice elcontenedor de certificado especificado para elprograma Java que se ha iniciado y lapropiedad que se ha especificado. Siespecifica la propiedad de sistemaos400.secureApplication, se hace caso omisode esta propiedad de sistema. Por ejemplo,especifique-Dos400.certificateContainer=/home/username/mykeyfile.kdbo cualquier otro archivo clave del sistema dearchivos integrado.

os400.CertificateLabel Puede especificar esta propiedad del sistemajunto con la propiedad del sistemaos400.CertificateContainer. Esta propiedadpermite seleccionar el certificado delcontenedor especificado que desea que utilicela capa de sockets seguros (SSL). Porejemplo, especifique-Dos400.certificateLabel=myCert, dondemyCert es el nombre de etiqueta que asignaal certificado por medio del Gestor decertificados digitales (DCM) al crear oimportar el certificado.

40 AS/400 Developer Kit para Java

Page 49: AS400 Kit Desarrollo Para Java - Rzaha

Propiedades de sistema Descripciónos400.child.stdio.convert Permite el control de la conversión de datos

para stdin, stdout y stderr en Java. Laconversión de datos se produce por omisiónen la máquina virtual Java con el fin deconvertir los datos ASCII en EBCDIC yviceversa. Con esta propiedad se puedenactivar y desactivar las conversiones, lo queafecta los procesos hijo que haya iniciadoeste proceso utilizando el métodoruntime.exec(). Consulte los valores poromisión.

os400.class.path.system Esta propiedad del sistema se ignora en laversión 1.2.

os400.file.io.mode Cuando se especifica TEXT en lugar del valorpor omisión, que es BINARY, esta propiedadde sistema convierte el CCSID del archivo sies distinto del valor de file.encoding

os400.secureApplication Asocia el programa Java que se inicia cuandose utiliza esta propiedad de sistema(os400.secureApplication) con el nombre dela aplicación segura registrada. Para ver losnombres de las aplicaciones segurasregistradas, utilice Digital CertificateManager (DCM).

os400.stderr Permite la correlación de stderr con unarchivo o un socket. Consulte los valores poromisión.

os400.stdin Permite la correlación de stdin con unarchivo o un socket. Consulte los valores poromisión.

os400.stdin.allowed Especifica si stdin está permitido (1) o no (0).Si el llamador ejecuta un trabajo de procesopor lotes, no debe permitirse stdin. El valorpor omisión es 0.

os400.stdio.convert Permite el control de la conversión de datospara stdin, stdout y stderr en Java. Laconversión de datos se produce por omisiónen la máquina virtual Java con el fin deconvertir los datos ASCII en EBCDIC yviceversa. Con esta propiedad se puedenactivar y desactivar las conversiones, lo queafecta al programa Java actual. Consulte losvalores por omisión.

os400.stdout Permite la correlación de stdout con unarchivo o un socket. Consulte los valores poromisión.

user.dir Directorio de trabajo actual que utiliza la APIgetcwd.

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 41

Page 50: AS400 Kit Desarrollo Para Java - Rzaha

Propiedades de sistema Descripciónuser.home Recupera el directorio de trabajo inicial

utilizando la API Get (getpwnam). Puedecolocar un archivo SystemDefault.propertiesen la vía de acceso de user.home path paraalterar temporalmente las propiedades poromisión en/QIBM/UserData/Java400/SystemDefault.properties.Consulte el apartado Configuración deAS/400 para obtener detalles acerca de cómoespecificar su propio conjunto de valores depropiedad por omisión.

user.language La máquina virtual Java utiliza estapropiedad del sistema para leer el valorLANGID del trabajo y lo utiliza para hallarel idioma Java correspondiente.

user.name La máquina virtual Java utiliza estapropiedad del sistema para recuperar elnombre de perfil de usuario efectivo delapartado de seguridad (Security.UserName)de la base de máquinas de confianza (TCB).

user.region La máquina virtual Java utiliza estapropiedad del sistema para leer el valorCNTRYID del trabajo y lo utiliza para hallarel idioma Java correspondiente.

user.timezone La máquina virtual Java utiliza estapropiedad del sistema para obtener elnombre de huso horario utilizando la APIQlgRetrieveLocalInformation. Si no sedispone de la información de huso horario,user.timezone queda establecido en la UTC(Universal Time Coordinate).

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Valores de las propiedades del sistema os400.stdio.convert yos400.child.stdio.convertEsta tabla muestra los valores del sistema correspondientes a las propiedades desistema os400.stdio.convert y os400.child.stdio.convert.

Valor Descripción

N (valor poromisión)

No se realiza ninguna conversión de stdio durante las operaciones delectura o grabación.

Y Se convierten todos los datos stdio durante las operaciones de lecturao grabación y la conversión se realiza al valor de file.encoding o desdeéste al CCSID del trabajo.

1 Sólo se convierten los datos stdin durante las operaciones de lectura yla conversión se realiza del CCSID del trabajo a file.encoding.

2 Sólo se convierten los datos stdout durante las operaciones degrabación y la conversión se realiza de file.encoding al CCSID deltrabajo.

3 Se realizan las conversiones de stdin y stdout.

42 AS/400 Developer Kit para Java

Page 51: AS400 Kit Desarrollo Para Java - Rzaha

4 Sólo se convierten los datos stderr durante las operaciones degrabación y la conversión se realiza de file.encoding al CCSID deltrabajo.

5 Se realizan las conversiones de stdin y stderr.

6 Se realizan las conversiones de stdout y stderr.

7 Se realizan todas las conversiones de stdio.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

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

Valor Nombre de ejemplo Descripción Ejemplo

File UnNombreArchivo UnNombreArchivo es unavía de acceso absoluta obien una relativa aldirectorio actual.

file:/QIBM/UserData/Java400/Output.file

Port NombreSistpral Dirección del puerto port:misistpral:2000

Port DirecciónTCPT Dirección del puerto port:1.1.11.111:2000

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Valores numéricos de os400.verify.checks.disableEl valor de la propiedad del sistema os400.verify.checks.disable es una serie querepresenta la suma de uno o más valores numéricos de esta lista:

Valor Descripción

1

Eludir comprobaciones de acceso paraclases locales: Indica que desea que lamáquina virtual Java eluda lascomprobaciones de acceso de los métodos ycampos protegidos y privados para aquellasclases que se cargan desde el sistema dearchivos local. Resulta útil cuando setransfieren aplicaciones que contienen clasesinteriores que hagan referencia a campos ymétodos protegidos y privados de las clasesque las engloban.

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 43

Page 52: AS400 Kit Desarrollo Para Java - Rzaha

2 Suprimir NoClassDefFoundError durantecarga inicial: Indica que desea que lamáquina virtual Java haga caso omiso de loserrores NoClassDefFoundError que seproducen en la fase inicial al realizarcomprobaciones con el fin de verificar laconversión de tipos y el acceso a campos ométodos.

4 Eludir la comprobación deLocalVariableTable: Indica que, si seencuentra un error en la tablaLocalVariableTable de una clase, la clasefuncionará como si LocalVariableTable noexistiese. Por lo demás, los errores deLocaleVariableTable dan como resultadoClassFormatError.

7 Valor utilizado en la ejecución.

Puede indicar el valor en formato decimal, hexadecimal u octal. Se hará caso omisode los valores menores que cero. Por ejemplo, para seleccionar los dos primerosvalores de la lista, utilice la sintaxis de mandato de AS/400 siguiente:JAVA CLASS(Hello) PROP((os400.verify.checks.disable 3))

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Archivos en el sistema de archivos integradoEl sistema de archivos integrado almacena los archivos JAR, los archivos ZIP, losarchivos fuente y los archivos de clase relacionados con Java en una estructurajerárquica de archivos. En el sistema de archivos integrado también puedenalmacenarse archivos fuente. Los sistemas de archivos integrados en los que puedealmacenar archivos son los siguientes:v el sistema de archivos “raíz” (/)v el sistema de archivos de los sistemas abiertos (QOpenSys)v el sistema de archivos definido por el usuariov 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 sonseguros en ejecución multihebra.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Autorizaciones de archivo Java en el sistema de archivos integradoPara ejecutar o depurar un programa Java, es necesario que el archivo de clase,JAR o ZIP tenga autorización de lectura (*R). Los directorios necesitan laautorización de lectura y la de ejecución (*RX).

44 AS/400 Developer Kit para Java

Page 53: AS400 Kit Desarrollo Para Java - Rzaha

Para utilizar el mandato Crear programa Java (CRTJVAPGM) con el fin deoptimizar un programa, el archivo de clase, el archivo JAR o el archivo ZIP debetener autorización de lectura (*R) y el directorio debe tener autorización deejecución (*X). Si utiliza un patrón dentro del nombre de archivo de clase, eldirectorio debe tener autorización de lectura y de ejecución (*RX).

Para suprimir un programa Java con el mandato Suprimir programa Java(DLTJVAPGM), hay que tener autorización de lectura y grabación (*RW) sobre elarchivo de clase y el directorio debe tener autorización de ejecución (*X). Si utilizaun patrón dentro del nombre de archivo de clase, el directorio debe tenerautorización de lectura y de ejecución (*RX).

Para visualizar un programa Java con el mandato Visualizar programa Java(DSPJVAPGM), no se necesita tener ninguna autorización especial sobre el archivode clase o el directorio.

Nota: para un usuario que posea la autorización QSECOFR, siempre parecerá quelos archivos y los directorios que carecen de autorización de ejecución (*X) tienendicha autorización. Distintos usuarios pueden obtener resultados diferentes endeterminadas situaciones, aunque aparentemente todos ellos tengan el mismo tipode acceso a los mismos archivos. Es importante saberlo cuando se ejecutan scriptsde shell mediante el intérprete 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 tienela autorización QSECOFR. Si la modalidad de archivo del script de shell tieneautorización de lectura y de grabación (*RW), el sistema de archivos integradopermitirá ejecutarlo al ID de usuario que tiene la autorización QSECOFR. Sinembargo, podría ser que un usuario sin autorización QSECOFR intentase ejecutarel mismo programa Java y que el sistema de archivos integrado le indicase alcódigo de java.Runtime.exec() que el script de shell no es ejecutable porque falta*X. En este caso, java.Runtime.exec() lanza una excepción de entrada y salida.

Para obtener más información, consulte las publicaciones OS/400 Program and CL

Command APIs, SC41-5870 o OS/400 Introducción al sistema de archivosintegrado.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Codificaciones de caracteres JavaInternamente, la máquina virtual Java funciona siempre con datos en formatoUnicode. No obstante, a medida que se transfieren datos a la máquina virtual Javao 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 carácter del sistema de archivosintegrado estarán codificados en la página de códigos que la propiedad de sistemaJava “file.encoding” especifique. Esto incluye a los archivos de código fuente Java(.java), los archivos .property Java y cualquier archivo de programa de usuario dedatos de tipo carácter. Para obtener más información, consulte la tabla de valoresde file.encoding y CCSID de AS/400 o bien la tabla de valores de file.encoding poromisión.

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 45

Page 54: AS400 Kit Desarrollo Para Java - Rzaha

Se considera que la entrada o salida de datos de programa que utiliza una clase decorriente que no sea java.io.InputStreamReader, java.io.FileReader,java.io.OutputStreamWriter ni java.io.FileWriter está formada por datos binarios yno se realiza ninguna conversión de la página de códigos de caracteres. Seconsidera que la entrada o salida de datos que utiliza las cuatro clases de corrienteanteriores está formada por datos de tipo carácter y se efectúa la correspondienteconversión de la página de códigos de caracteres. Dicha conversión depende delorigen o el destino de los datos.

Los datos de tipo carácter que se graben en un socket TCP/IP que utiliceOutputStreamReader se convertirán a la página de códigos que esté especificada enla propiedad de sistema file.encoding. Los datos de tipo carácter que se lean en unsocket TCP/IP que utilice InputStreamReader se convertirán desde la página decódigos que esté especificada en la propiedad de sistema file.encoding.

Los datos de tipo carácter que se graben en las corrientes System.out y System.errse convertirán a la página de códigos que el CCSID del trabajo de AS/400especifique. Los datos de tipo carácter que se lean en la corriente System.in seconvertirán desde la página de códigos que el CCSID del trabajo de AS/400especifique.

Si se ha redirigido System.in a otra corriente, la conversión se manejará de otramanera. System.in puede redirigirse con el método java.lang.System.SetIn() si sedesea proporcionar la entrada al programa desde la salida de otro programa Java.En este caso, no es pertinente realizar la conversión desde un CCSID de AS/400porque tanto el origen como el destino son programas Java. Los datos seconvierten desde la página de códigos que esté especificada en la propiedad desistema file.encoding Java. Asimismo, los datos destinados a una corrienteSystem.out y/o System.err redirigida se convierten a la página de códigos 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 lasAPI 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 NativeInterface no se convierten.

Para obtener más información acerca de la internacionalización, consulte la

publicación AS/400 National Language Support, SC41-5101 o la publicación

AS/400 International Application Development, SC41-5603.

También le remitimos a la documentación sobre internacionalización de SunMicrosystems, Inc, en la que hallará más información.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Valores de file.encoding y CCSID de AS/400Esta tabla muestra la relación existente entre los valores posibles de file.encoding yel identificador de juego de caracteres (CCSID) de AS/400 que más se aproxima.

46 AS/400 Developer Kit para Java

Page 55: AS400 Kit Desarrollo Para Java - Rzaha

file.encoding CCSID DescripciónBig5 950 BIG-5 para chino tradicional

ASCII de 8 bitsCNS11643 964 Juego de caracteres

nacionales para chinotradicional

Cp037 037 EBCDIC de IBM paraEE.UU., Canadá, los PaísesBajos,...

Cp273 273 EBCDIC de IBM paraAlemania y Austria

Cp277 277 EBCDIC de IBM paraDinamarca y Noruega

Cp278 278 EBCDIC de IBM paraFinlandia y Suecia

Cp280 280 EBCDIC de IBM para ItaliaCp284 284 EBCDIC de IBM para España

y América LatinaCp285 285 EBCDIC de IBM para el

Reino UnidoCp297 297 EBCDIC de IBM para FranciaCp420 420 Árabe EBCDIC de IBMCp424 424 Hebreo EBCDIC de IBMCp437 437 PC de EE.UU. ASCII de 8 bitsCp500 500 Internacional EBCDIC de

IBMCp737 737 Griego MS-DOS ASCII de 8

bitsCp775 775 Báltico MS-DOS ASCII de 8

bitsCp838 838 EBCDIC de IBM para

TailandiaCp850 850 Multinacional Latin-1 ASCII

de 8 bitsCp852 852 Latin-2 ASCII de 8 bitsCp855 855 Cirílico ASCII de 8 bitsCp856 856 Hebreo ASCII de 8 bitsCp857 857 Latin-5 ASCII de 8 bitsCp860 860 ASCII de 8 bits para PortugalCp861 861 ASCII de 8 bits para IslandiaCp862 862 Hebreo ASCII de 8 bitsCp863 863 ASCII de 8 bits para CanadáCp864 864 Árabe ASCII de 8 bitsCp865 865 ASCII de 8 bits para

Dinamarca y NoruegaCp866 866 Cirílico ASCII de 8 bitsCp868 868 Urdu ASCII de 8 bitsCp869 869 Griego ASCII de 8 bitsCp870 870 Latin-2 EBCDIC de IBMCp871 871 EBCDIC de IBM para

IslandiaCp874 874 ASCII de 8 bits para

TailandiaCp875 875 Griego EBCDIC de IBMCp918 918 Urdu EBCDIC de IBMCp921 921 Báltico ASCII de 8 bitsCp922 922 ASCII de 8 bits para Estonia

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 47

Page 56: AS400 Kit Desarrollo Para Java - Rzaha

file.encoding CCSID DescripciónCp930 930 Japonés katakana ampliado

EBCDIC de IBMCp933 933 Coreano EBCDIC de IBMCp935 935 Chino simplificado EBCDIC

de IBMCp937 937 Chino tradicional EBCDIC de

IBMCp939 939 Japonés latino ampliado

EBCDIC de IBMCp942 942 Japonés ASCII de 8 bitsCp943 943 Datos mixtos de PC japonés

para el entorno abiertoCp948 948 Chino tradicional IBM ASCII

de 8 bitsCp949 949 KSC5601 para coreano ASCII

de 8 bitsCp950 950 BIG-5 para chino tradicional

ASCII de 8 bitsCp964 964 Chino tradicional EUCCp970 970 Coreano EUCCp1006 1006 Urdu de 8 bits ISOCp1025 1025 Cirílico EBCDIC de IBMCp1026 1026 EBCDIC de IBM para TurquíaCp1046 1046 Árabe ASCII de 8 bitsCp1097 1097 Persa EBCDIC de IBMCp1098 1098 Persa ASCII de 8 bitsCp1112 1112 Báltico EBCDIC de IBMCp1122 1122 EBCDIC de IBM para EstoniaCp1123 1123 EBCDIC de IBM para UcraniaCp1124 1124 8 bits ISO para UcraniaCp1250 1250 Latin-2 MS-WinCp1251 1251 Cirílico MS-WinCp1252 1252 Latin-1 MS-WinCp1253 1253 Griego MS-WinCp1254 1254 Turco MS-WinCp1255 1255 Hebreo MS-WinCp1256 1256 Árabe MS-WinCp1257 1257 Báltico MS-WinCp1258 1251 Ruso MS-WinCp1381 1381 GB para chino simplificado

ASCII de 8 bitsCp1383 1383 Chino simplificado EUCCp33722 33722 Japonés EUCEUC_CN 1383 EUC para chino simplificadoEUC_JP 33722 EUC para japonésEUC_KR 970 EUC para coreanoEUC_TW 964 EUC para chino tradicionalGB2312 1381 GB para chino simplificado

ASCII de 8 bitsGBK 1386 Nuevo ASCII 9 de 8 bits para

chino simplificadoISO2022CN_CNS No hay ninguno disponible ASCII de 7 bits para chino

tradicionalISO2022CN_GB No hay ninguno disponible ASCII de 7 bits para chino

simplificado

48 AS/400 Developer Kit para Java

Page 57: AS400 Kit Desarrollo Para Java - Rzaha

file.encoding CCSID DescripciónISO2022JP 5054 ASCII de 7 bits para japonésISO2022KR 25546 ASCII de 7 bits para coreanoISO8859_1 819 ISO 8859-1 ISO Latin-1ISO8859_2 912 ISO 8859-2 ISO Latin-2ISO8859_3 913 ISO 8859-3 ISO Latin-3ISO8859_4 914 ISO 8859-4 ISO Latin-4ISO8859_5 915 ISO 8859-5 ISO Latin-5ISO8859_6 1089 ISO 8859-6 ISO Latin-6

(árabe)ISO8859_7 813 ISO 8859-7 ISO Latin-7

(griego/latino)ISO8859_8 916 ISO 8859-8 ISO Latin-8

(hebreo)ISO8859_9 920 ISO 8859-9 ISO Latin-9

(ECMA-128, Turquía)JIS0201 897 JIS X0201JIS0208 952 JIS X0208JIS0212 953 JIS X0212Johab No hay ninguno disponible Codificación (completa)

Hangul para coreano.K018_R CirílicoKSC5601 949 Coreano ASCII de 8 bitsMS874 874 MS-Win para TailandiaSJIS 932 Japonés ASCII de 8 bitsTIS620 874 TIS 620UTF8 1208 UTF-8 (CCSID 1208 de IBM,

que no está disponibletodavía en AS/400)

Unicode 13488 UNICODE, UCS-2UnicodeBig 13488 Idéntico a UnicodeUnicodeBigUnmarked Unicode sin marca de orden

de bytesUnicodeLittle Unicode con orden de bytes

little-endianUnicodeLittleUnmarked UnicodeLittle sin marca de

orden de bytes

En Valores de file.encoding por omisión hallará los valores por omisión.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Valores de file.encoding por omisiónEsta tabla muestra cómo se establece el valor de file.encoding tomando como baseel identificador de juego de caracteres (CCSID) de AS/400 cuando se inicia lamáquina virtual Java.

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 49

Page 58: AS400 Kit Desarrollo Para Java - Rzaha

CCSID de AS/400 CCSID ASCIIcorrespondiente

File.encoding poromisión

Descripción

37 ISO8859_1 Inglés para EE.UU.,Canadá, NuevaZelanda y Australia;portugués paraPortugal y Brasil; yholandés para losPaíses Bajos

256 ISO8859_1 Internacional nº 1273 ISO8859_1 Alemán/Alemania,

alemán/Austria277 ISO8859_1 Danés/Dinamarca,

noruego/Noruega,noruego/Noruega,NY

278 ISO8859_1 Finlandés/Finlandia280 ISO8859_1 Italiano/Italia284 ISO8859_1 Catalán/España,

español/España285 ISO8859_1 Inglés/Gran Bretaña,

inglés/Irlanda290 Cp942 Parte SBCS del

CCSID mixtoEBCDIC japonés(CCSID 5026)

297 ISO8859_1 Francés/Francia420 ISO8859_6 Árabe/Egipto423 ISO8859_7 Grecia424 ISO8859_8 Hebreo/Israel500 ISO8859_1 Alemán/Suiza,

francés/Bélgica,francés/Canadá,francés/Suiza

833 Cp949 Parte SBCS delCCSID mixtoEBCDIC coreano(CCSID 933)

836 Cp1381 Parte SBCS delCCSID mixtoEBCDIC para chinosimplificado (CCSID935)

838 Cp874 Tailandés870 ISO8859_2 Checo/República

Checa,croata/Croacia,húngaro/Hungría,polaco/Polonia

871 ISO8859_1 Islandés/Islandia875 ISO8859_7 Griego/Grecia880 ISO8859_5 Bulgaria (ISO 8859_5)905 ISO8859_9 Ampliado de Turquía918 Cp868 Urdu930 Cp942 CCSID mixto

EBCDIC japonés(muy similar a CCSID5026)

50 AS/400 Developer Kit para Java

Page 59: AS400 Kit Desarrollo Para Java - Rzaha

CCSID de AS/400 CCSID ASCIIcorrespondiente

File.encoding poromisión

Descripción

933 Cp970 Coreano/Corea935 Cp1381 Chino

simplificado/China937 Cp950 Chino

tradicional/Taiwán939 Cp942 CCSID mixto

EBCDIC japonés(muy similar a CCSID5035)

1025 ISO8859_5 Bielorruso/Bielorrusia,búlgaro/Bulgaria,macedonio/Macedonia,ruso/Rusia

1026 ISO8859_9 Turco/Turquía1027 Cp942 Parte SBCS del

CCSID mixtoEBCDIC japonés(CCSID 5035)

1097 Cp1098 Persa1112 Cp921 Lituano/Lituania,

letón/Letonia, báltico1122 Cp922 Estonio/Estonia1123 Cp1123 Ucraniano/Ucrania1130 ISO8859_1 Vietnamita. No hay

soporte para elidioma vietnamita enJDK 1.1.4, por lo quefile.encoding seestablece en 8859_1.

1132 ISO8859_1 Laosiano. No haysoporte para elidioma laosiano enJDK 1.1.4, por lo quefile.encoding seestablece en 8859_1.

1388 Cp1381 CCSID mixtoEBCDIC para chinosimplificado (seincluye GBK)

5026 Cp942 CCSID mixtoEBCDIC japonés(katakana ampliado)

5035 Cp942 CCSID mixtoEBCDIC japonés(latino ampliado)

8612 Cp864 Árabe (grafías básicasúnicamente) (o ASCII420 y 8859_6)

9030 Cp874 Tailandés (SBCSampliado de sistemaprincipal)

13124 Cp1381 Parte SBCS delCCSID mixtoEBCDIC para chinosimplificado (seincluye GBK)

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 51

Page 60: AS400 Kit Desarrollo Para Java - Rzaha

CCSID de AS/400 CCSID ASCIIcorrespondiente

File.encoding poromisión

Descripción

28709 Cp948 Parte SBCS delCCSID mixtoEBCDIC para chinotradicional (CCSID937)

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Java Naming and Directory Interface (JNDI)Java Naming and Directory Interface (JNDI) forma parte de las API de plataformade JavaSoft. Gracias a JNDI, se pueden establecer conexiones sin fisuras condiversos servicios de directorio y denominación. Con esta interfaz, se puedenconstruir aplicaciones Java habilitadas para directorio que sean potentes yportables.

JavaSoft ha desarrollado la especificación JNDI con la colaboración de destacadasempresas del sector, entre ellas IBM, SunSoft, Novell, Netscape y Hewlett-PackardCo.

Si le interesa ejecutar JNDI, añada lo siguiente a la vía de acceso de clases:/QIBM/ProdData/Java400/ext/ibmjndi.jar:/QIBM/ProdData/Java400/ext/jndi.jar

Para obtener más información sobre JNDI, le remitimos a Java Naming and

Directory Interface de Sun Microsystems, Inc. Si desea obtener informaciónconcreta de IBM, consulte la publicación DSSeries LDAP V3 Client for JavaProgramming Guide.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Interfaz de depuración de la máquina virtual Java

En Java 2 SDK (J2SDK), Standard Edition, versión 1.2, la interfaz dedepuración de la máquina virtual Java (JVMDI) forma parte de las interfaces delprograma de aplicación (API) de plataforma de Sun Microsystems, Inc. JVMDIpermite a cualquier usuario escribir un depurador Java para AS/400 en código CAS/400. El depurador no necesita conocer la estructura interna de la máquinavirtual Java, y no puede dañar a la máquina virtual Java, dado que utilizainterfaces JVMDI.

El depurador se ejecuta en el mismo trabajo con capacidad multihebra que lamáquina virtual Java. El depurador utiliza las API Invocation de Native Interface(JNI) para crear una máquina virtual Java. A continuación, coloca un gancho alprincipio de un método main de clase de usuario y llama al método main. Cuandose inicia el método main, se encuentra el gancho y la depuración se inicia. Estándisponible recursos habituales de depuración, como por ejemplo el establecimientode puntos de interrupción, el recorrido, la visualización de variables y el cambiode variables.

52 AS/400 Developer Kit para Java

Page 61: AS400 Kit Desarrollo Para Java - Rzaha

El depurador maneja la comunicación entre el trabajo en el que se ejecuta lamáquina virtual Java y un trabajo que maneja la interfaz de usuario. Esta interfazde usuario se encuentra en el AS/400 o en otro sistema.

Un programa de servicio denominado QJVAJVMDI, que reside en la bibliotecaQSYS, soporta las funciones de JVMDI.

Para obtener más información acerca de JVMDI, consulte Java Virtual Machine

Debugger Interface by Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Limitaciones, restricciones y comportamientos propiosA la hora de trabajar con AS/400 Developer Kit para Java, podrá apreciar que laforma de utilización presenta ciertas limitaciones. En esta lista se señalan laslimitaciones, 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 Bamplía la clase A y no se encuentra la segunda al cargar la primera, el errorindica que no se ha encontrado la clase B, aunque en realidad sea la clase A laque no se ha encontrado. Si aparece un error que indica que no se ha encontradouna clase, compruebe que la clase y todas las superclases de la misma están enla vía de acceso de clases. Esto también es pertinente para las interfacesimplementadas por la clase que se carga.

v El almacenamiento dinámico de recogida de basura está limitado a 132.800MB.

v El número de objetos construidos está limitado a 256 millones.v El parámetro backlog de java.net puede tener un comportamiento distinto en

AS/400 del que tiene en otras plataformas. Por ejemplo:– Parámetro baklog = 0 ó 1 en Listen

- Listen(0) significa que se permite una conexión pendiente; no inhabilita elsocket.

- Listen(1) significa que se permite una conexión pendiente y lo mismo queListen(0).

– Parámetro backlog > 1 en Listen- Esto permite que haya muchas peticiones pendientes en la cola de Listen.

Si llega una nueva conexión y la cola está al límite, se suprimirá una de laspeticiones pendientes.

v En otras plataformas que dan soporte a JDK 1.1.6, la clase DecimalFormat puedeformatear de manera incorrecta la entrada numérica. Esto está solucionado en laversión de JDK 1.1.6 que se utiliza en AS/400.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 53

Page 62: AS400 Kit Desarrollo Para Java - Rzaha

La plataforma JavaLa plataforma Java es el entorno de desarrollo y gestión de applets y aplicacionesJava. Consta de tres componentes principales: el lenguaje Java, los paquetes Java yla máquina virtual Java. El lenguaje y los paquetes Java son parecidos a C++ y susbibliotecas de clases. Los paquetes Java contienen clases, que están disponibles encualquier implementación conforme a Java. La API debe ser la misma en cualquiersistema que dé soporte a Java.

Java se diferencia de los lenguajes tradicionales, como C++, en la manera decompilarse y ejecutarse. En un entorno de programación tradicional, se escribe elcódigo fuente de un programa y se compila para obtener el código objetocorrespondiente a un hardware y un sistema operativo determinados. El códigoobjeto se enlaza lógicamente con otros módulos de código objeto para crear unprograma que se ejecuta. El código ejecutable es específico de un equipo concretode hardware y no funciona en ningún otro sistema si no se modifica. El gráficoilustra el entorno de los lenguajes tradicionales.

RV4N304-1

Cód igoFuente

Módulo de cód igode ob je to

CódigoEjecutab le

Compi lador En lazador

El entorno Java se diferencia de otros entornos de programación en que elcompilador Java no genera código máquina para un grupo de instruccionesespecífico del hardware. En lugar de ello, el compilador Java convierte el códigofuente Java en instrucciones de la máquina virtual Java, que se almacenan enarchivos de clase Java. Para almacenar los archivos de clase, se pueden utilizararchivos ZIP o archivos JAR. El archivo de clase no va dirigido a una plataformaconcreta de hardware, sino a la arquitectura de la máquina virtual Java.

El gráfico muestra el entorno Java, tal y como se ha explicado anteriormente.

RV4N305-1

Cód igoFuente

Tiempo de compi lac ión

Arch ivo dec lases

Compi ladorJava

Tiempo de e jecuc ión

CargadorBytecode

In térpre teJava

Ver i f i cadorBytecode

La máquina virtual Java puede estar incorporada dentro de un navegador Web ode un sistema operativo como, por ejemplo, IBM Operating System/400 (OS/400).La máquina virtual Java consta del intérprete Java y el sistema de ejecución Java.El intérprete se encarga de la tarea de interpretar el archivo de clase y de ejecutar

54 AS/400 Developer Kit para Java

Page 63: AS400 Kit Desarrollo Para Java - Rzaha

las instrucciones Java en una plataforma concreta de hardware. La máquina virtualJava es la que permite la escritura y compilación de código Java una sola vez y suejecución en cualquier plataforma.

Java es un lenguaje de programación “multihebra”, por lo que dentro de lamáquina virtual Java puede haber en ejecución varias hebras a la vez. Las hebrasJava ofrecen a los programas Java una manera de llevar a cabo varias tareas a lavez.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Aplicaciones y applets JavaLos programas Java pueden escribirse de dos formas: aplicaciones y applets.

Las aplicaciones son programas autónomos que no requieren la utilización de unnavegador. Para ejecutar las aplicaciones Java, se inicia el intérprete Java desde lalínea de mandatos y se especifica el archivo que contiene la aplicación compilada.Las aplicaciones residen normalmente en el sistema en el que están desplegadas.Acceden a recursos del sistema y no sufren las restricciones del modelo deseguridad “sandbox”.

Un applet Java es un programa informático de pequeño tamaño que está escrito enJava y que se ejecuta dentro de un navegador compatible con Java o de un visorde applets. Un documento Web HTML puede incluir una referencia al sistema enel que reside el applet. En tiempo de ejecución, el servidor baja el applet delservidor al sistema destino. En el sistema destino, el applet no tiene acceso losrecursos del sistema a menos que se le haya otorgado autorización de maneraexplícita.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

Máquina virtual JavaLa máquina virtual Java es un entorno de ejecución que puede añadirse a unnavegador Web o a cualquier sistema operativo como, por ejemplo, IBM OperatingSystem/400 (OS/400). La máquina virtual Java ejecuta las instrucciones que generaun compilador Java. Consta de un intérprete de bytecodes y un sistema deejecución 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 deejecución Java, aíslan el código procedente de otra plataforma. También restringenlos recursos del sistema a los que tiene acceso cada una de las clases que se cargan.

Nota: las aplicaciones Java no sufren restricciones; sólo las sufren los applets. Lasaplicaciones pueden utilizar los métodos nativos y acceder a los recursos delsistema con total libertad. La mayoría de los programas de AS/400 Developer Kitpara Java son aplicaciones.

Para asegurarse de que el código cumple los requisitos de seguridad que el sistemade ejecución exige con el fin de verificar los bytecodes, puede utilizar el mandatoCrear programa Java (CRTJVAPGM). Los requisitos de seguridad son hacer que secumplan las restricciones de tipo, comprobar las conversiones de datos, asegurarse

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 55

Page 64: AS400 Kit Desarrollo Para Java - Rzaha

de que no se producirán desbordamientos ni subdesbordamientos de la pila deparámetros, y comprobar que no se producen violaciones de acceso. Sin embargo,no es necesario verificar de manera explícita los bytecodes. Si no se utiliza elmandato CRTJVAPGM por anticipado, las comprobaciones tendrán lugar durantela primera utilización de una clase. Una vez verificados los bytecodes, el intérpretelos descodifica y ejecuta las instrucciones de lenguaje máquina necesarias parallevar a cabo las operaciones deseadas.

Nota: se utilizará el intérprete Java únicamente si se especificaOPTIMIZE(*INTERPRET) o INTERPRET(*YES).

Además de cargar y ejecutar los bytecodes, la máquina virtual Java incluye unrecogedor de basura que gestiona la memoria. La recogida de basura se ejecuta almismo tiempo que se cargan e interpretan los bytecodes.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Archivos de clase JavaLos archivos de clase Java son archivos continuos que se generan cuando elcompilador Java compila un archivo fuente. Un archivo de clase contiene tablas enlas que se describe cada uno de los campos y los métodos de la clase. Tambiéncontiene los bytecodes de cada uno de los métodos, datos estadísticos ydescripciones que se utilizan para representar los objetos Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Archivos ZIP JavaUn archivo ZIP Java es un único archivo que contiene varios archivos de clase, quepueden extraerse de forma individual. El contenido de un archivo ZIP Java puedeestar comprimido o no. Los archivos ZIP Java constituyen una maneraespecialmente útil de almacenar clases en aquellos sistemas que no dan soporte alos nombres de archivo largos.

Para combinar varios archivos en uno, consulte el apartado Archivos JAR Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Archivos JAR JavaJAR es un formato de archivo, basado en el formato de archivo ZIP, con el que secombinan varios archivos en uno solo. Se puede utilizar JAR como herramientageneral de archivado, pero su propósito principal es bajar applets y loscomponentes de éstos (archivos .class, imágenes y sonidos). Los applets Java sebajan en un navegador en una única transacción HTTP en lugar de hacerloabriendo una nueva conexión para cada elemento. Este método aumenta lavelocidad con la que un applet baja a una página Web y empieza a funcionar.

JAR es el único formato de archivado apto para cualquier plataforma. También esel único formato que maneja archivos de audio y de imágenes, además de archivosde clase. JAR es un formato estándar abierto y totalmente ampliable que estáescrito en Java.

56 AS/400 Developer Kit para Java

Page 65: AS400 Kit Desarrollo Para Java - Rzaha

El formato JAR admite también la compresión, lo que reduce el tamaño del archivoy el tiempo de bajada. Además, el autor de un applet puede firmar digitalmentelas entradas individuales del archivo JAR con el fin de autenticar los orígenes delas mismas.

Para actualizar las clases de los archivos JAR, consulte el apartado Herramientaajar Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Intérprete JavaEl intérprete Java es la parte de la máquina virtual Java que interpreta los archivosde clase Java para una plataforma de hardware determinada. El intérprete Javadescodifica cada uno de los bytecodes y ejecuta para ellos una serie deinstrucciones de lenguaje máquina.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Hebras JavaUna hebra es una corriente individual e independiente que se ejecuta dentro de unprograma. Java es un lenguaje de programación multihebra, por lo que dentro dela máquina virtual Java puede haber en ejecución varias hebras a la vez. Lashebras Java ofrecen a los programas Java una manera de llevar a cabo varias tareasa la vez. Una hebra es básicamente un flujo de control de un programa.

Las hebras son una estructura de programación moderna y sirven para dar soportea programas concurrentes y para mejorar el rendimiento y la escalabilidad de lasaplicaciones. La mayoría de los lenguajes de programación dan soporte a lashebras mediante el uso de bibliotecas adicionales de programación. Java da soportea las hebras como si fuesen API incorporadas.

Nota: la utilización de hebras proporciona el soporte necesario para incrementar lainteractividad, lo que significa que el tiempo de espera frente al teclado es menorporque hay más cosas ejecutándose en paralelo. No obstante, el programa no esnecesariamente más interactivo sólo porque tenga hebras.

Las hebras son el mecanismo de espera en el caso de interacciones de largoalcance, al tiempo que permiten al programa encargarse de otras tareas.Constituyen la facultad de dar soporte a varios flujos mediante una mismacorriente de código. En ocasiones reciben el nombre de “procesos ligeros”. Ellenguaje Java incluye soporte directo para hebras. Pero, por diseño, no da soporte ala entrada y salida no bloqueante asíncrona con interrupciones o espera múltiple.

Las hebras permiten desarrollar programas paralelos con un buen nivel deescalabilidad en un entorno en el que una máquina tiene varios procesadores. Si seconstruyen de manera correcta, también constituyen un modelo para el manejo devarias 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,

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 57

Page 66: AS400 Kit Desarrollo Para Java - Rzaha

responder a la entrada adicional del usuario. Por ejemplo, un navegador Web hade ser capaz de responder a la entrada de usuario a la vez que reproduce unsonido.

Las hebras pueden utilizar también métodos asíncronos. Cuando se llama a unsegundo método, no se tiene que esperar a que el finalice el primero para que elsegundo prosiga con su actividad.

Existen también diversas razones para no utilizar hebras. Si un programa utiliza deforma inherente la lógica secuencial, una sola hebra puede encargarse de toda lasecuencia. La utilización, en este caso, de varias hebras da como resultado unprograma complejo que no aporta ninguna ventaja. La creación y el inicio de unahebra conlleva un volumen de trabajo considerable. Si una operación abarca unaspocas sentencias, resulta más rápida de manejar en una sola hebra. Esto se cumpleincluso cuando la operación es conceptualmente asíncrona. Cuando varias hebrascomparten objetos, éstos deben estar sincronizados a fin de coordinar el acceso alas hebras y mantener la coherencia. La sincronización añade complejidad a unprograma, es difícil de ajustar para obtener el rendimiento óptimo y puede ser unafuente de errores de programación.

Si desea obtener más información sobre las hebras, consulte el tema dedicado aldesarrollo de aplicaciones multihebra..

[ Página de presentación de InformationCenter | 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 intérprete Java, clases Java yherramientas de desarrollo Java: compilador, depurador, desensamblador, visor deapplets, generador de archivos apéndice y generador de documentación.

El JDK permite a los programadores escribir aplicaciones que se desarrollan unasola vez y se ejecutan en cualquier máquina virtual Java. Las aplicaciones Javadesarrolladas con el JDK en un sistema pueden utilizarse en otro sistema sin tenerque cambiar ni volver a compilar el código. Los archivos de clase Java sonportables a cualquier máquina virtual Java estándar.

Si desea buscar más información sobre el JDK actual, compruebe en el AS/400 cuáles la versión de AS/400 Developer Kit para Java.

Puede comprobar en el AS/400 cuál es la versión de la máquina virtual Java deAS/400 Developer Kit para Java por omisión especificando uno de los siguientesmandatos:v java -version en el indicador de mandatos de Qshell.v RUNJVA CLASS(*VERSION) en la línea de mandatos CL.

A continuación, busque la misma versión del JDK de Sun Microsystems, Inc. en

The Source for Java Technology java.sun.com para encontrar documentaciónespecífica. AS/400 Developer Kit para Java es una implementación compatible dela tecnología Java de Sun Microsystems, Inc, por lo que conviene que estéfamiliarizado con la documentación del JDK de dicha empresa.

58 AS/400 Developer Kit para Java

Page 67: AS400 Kit Desarrollo Para Java - Rzaha

Consulte el apartado Soporte para varios Java Development Kits (JDK) paraobtener más información sobre la utilización de varias máquinas virtuales Java.

Si desea obtener información más concreta sobre el JDK de Sun Microsystems, Inc,consulte los temas siguientes:v En Paquetes Java se da una relación 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 Métodos nativos y Java Native Interface (JNI) se define lo que es un método

nativo y se indica para qué sirve. En este tema se explica también de formabreve qué es Java Native Interface.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Paquetes JavaUn paquete Java es una forma de agrupar las interfaces y las clases relacionadas enJava. Los paquetes Java son parecidos a las bibliotecas de clases existentes en otroslenguajes.

Los paquetes Java, que proporcionan las API Java, forman parte del JavaDevelopment Kit (JDK) de Sun Microsystems, Inc.

Paquete Contenidojava.applet Clases de appletjava.awt Clases gráficas, de ventana y de interfaz

gráfica de usuario (GUI)java.awt.datatransfer Clases de transferencia de datosjava.awt.event Interfaces y clases de proceso de eventosjava.awt.image Clases de proceso de imágenesjava.awt.peer Interfaces GUI para resolver la

independencia de plataformajava.beans API de modelo de componentes JavaBeansjava.io Clases de entrada y salidajava.lang Clases que cosntituyen el núcleo del lenguajejava.lang.reflect Clases de API de reflexiónjava.math Aritmética de precisión arbitrariajava.net Clases de redjava.rmi Clases de invocación a métodos remotos

(RMI)java.rmi.dgc Clases relacionadas con RMIjava.rmi.registry Clases relacionadas con RMIjava.rmi.server Clases relacionadas con RMIjava.security Clases de seguridadjava.security.acl Clases relacionadas con la seguridadjava.security.interfaces Clases relacionadas con la seguridadjava.sql API SQL JDBC para clases de base de datosjava.text Clases de internacionalizaciónjava.util Tipos de datosjava.util.zip Clases de compresión y descompresión

Si desea obtener más información sobre las API Java de Sun Microsystems, Inc,consulte el manual Sun Microsystems, Inc API Users Guide.

Capítulo 3. Conceptos de AS/400 Developer Kit para Java 59

Page 68: AS400 Kit Desarrollo Para Java - Rzaha

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramientas JavaPara obtener una lista completa de las herramientas que suministra el JavaDevelopment Kit de Sun Microsystems, Inc., consulte la Documentación dereferencia de herramientas de Sun Microsystems, Inc. Para obtener másinformación acerca de cada una de las herramientas soportadas por AS/400Developer Kit para Java, consulte el apartado Herramientas Java soportadas porAS/400 Developer Kit para Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Métodos nativos y Java Native Interface (JNI)Los métodos nativos son métodos Java que se inician en un lenguaje distinto deJava. Pueden acceder a API y a funciones específicas del sistema que no estándisponibles directamente en Java.

La utilización de métodos nativos limita la portabilidad de una aplicación porqueinterviene código específico del sistema. Un método nativo puede consistir ensentencias de código nativo nuevas o en sentencias de código nativo que llaman acódigo nativo existente.

Una vez se ha decidido que se necesita un método nativo, es posible que éstetenga que interactuar con la máquina virtual Java en la que se ejecuta. Java NativeInterface (JNI) hace más fácil esta interoperatividad de una manera neutral por loque a la plataforma se refiere.

JNI es un conjunto de interfaces que permiten a un método nativo interactuar conla máquina virtual Java de muchas maneras. Por ejemplo, JNI incluye interfacesque crean objetos nuevos y llaman a métodos, que obtienen campos y losestablecen, que procesan excepciones y que manipulan series y matrices.

Para obtener una descripción completa de JNI, consulte Java Native Interface by

Sun Microsystems, Inc. o The Source for Java Technology java.sun.com .

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

60 AS/400 Developer Kit para Java

Page 69: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kitpara Java

A la hora de trabajar con AS/400 Developer Kit para Java, puede utilizarherramientas Java con el intérprete Qshell o bien mandatos CL.

Si ya tiene experiencia previa programando en Java, tal vez le resulte más cómodoutilizar las herramientas Java del intérprete Qshell porque son parecidas a lasherramientas que utilizaría con el Java Development Kit de Sun Microsystems, Inc.En Qshell Interpreter hallará más información sobre la utilización del entornoQshell.

Si es usted programador de AS/400, tal vez le interese utilizar los mandatos CLpara Java más habituales del entorno de servidor AS/400. Si desea obtener másinformación sobre la utilización de los mandatos CL y los mandatos de OperationsNavigator, siga leyendo.

Con AS/400 Developer Kit para Java puede utilizar cualquiera de los mandatos yherramientas que se indican a continuación: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 también crean y ejecutan programas

Java optimizados.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramientas Java soportadas por AS/400 Developer Kit para JavaAS/400 Developer Kit para Java da soporte a las herramientas que se detallan acontinuación.v Herramienta ajar javav Herramienta appletviewer Javav Herramienta extcheck Javav Herramienta jar Javav Herramienta jarsigner Javav Herramienta javac Javav Herramienta javadoc Javav Herramienta javah Javav Herramienta javakey Javav Herramienta javap Javav Herramienta keytool Javav herramienta native2ascii Javav Herramienta policytool Javav Herramienta rmic Java

© Copyright IBM Corp. 1998, 1999 61

Page 70: AS400 Kit Desarrollo Para Java - Rzaha

v Herramienta rmid Javav Herramienta rmiregistry Javav Herramienta serialver Javav Herramienta tnameserv Java

Aunque con algunas excepciones, las herramientas Java, salvo ajar, dan soporte a lasintaxis y a las opciones indicadas en la documentación de Sun Microsystems, Inc.Todas ellas deben ejecutarse por medio del intérprete Qshell.

Para iniciar el intérprete Qshell, puede utilizar el mandato Arrancar Qshell(STRQSH o QSH). Cuando el intérprete Qshell está en ejecución, aparece lapantalla Entrada de mandato QSH. En esta pantalla aparece la salida y losmensajes de los programas y herramientas Java que se ejecutan en Qshell. Tambiénpuede leerse en ella la entrada de los programas Java. En El mandato java deQshell hallará información más detallada.

Nota: las funciones de entrada de mandato de AS/400 no están disponiblesdirectamente desde dentro de Qshell. Para obtener una entrada de mandato, pulseF21 (Entrada de mandato CL).

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramienta ajar de JavaLa herramienta ajar es una interfaz alternativa a la herramienta jar que sirve paracrear y manipular archivos JAR. La herramienta ajar puede utilizarse paramanipular tanto archivos JAR como archivos ZIP.

Si necesita una interfaz ZIP o una interfaz UNZIP, utilice la herramienta ajar enlugar de la herramienta jar.

Al igual que la herramienta jar, la herramienta ajar elabora una relación delcontenido de los archivos JAR, extrae el contenido de los archivos JAR, creaarchivos JAR nuevos y da soporte a la mayoría de formatos ZIP. Además, laherramienta ajar da soporte a la adición y supresión de archivos en los archivosJAR existentes.

La herramienta ajar está disponible en el intérprete Qshell. Para obtener másdetalles, consulte el apartado ajar - Archivo Java alternativo.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

Herramienta appletviewer JavaLa herramienta appletviewer permite ejecutar applets sin necesidad de tener unnavegador Web. Es compatible con la herramienta appletviewer proporcionada porSun Microsystems, Inc.

La herramienta appletviewer está disponible en el intérprete Qshell. Es necesarioutilizar Remote Abstract Window Toolkit para ejecutar la herramienta

appletviewer. Consulte el apartado Ejecución de la herramienta appletviewerde Java con AWT remoto para obtener información acerca de cómo configurar el

AWT remoto para utilizar la herramienta appletviewer.

62 AS/400 Developer Kit para Java

Page 71: AS400 Kit Desarrollo Para Java - Rzaha

Para obtener más información sobre la herramienta appletviewer, le remitimos a laherramienta appletviewer de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

Ejecución de la herramienta appletviewer de Java conAbstract Window Toolkit remoto

Para utilizar la herramienta appletviewer de Java, es necesario configurarAbstract Window Toolkit remoto para Java en una pantalla remota Windows, yutilizar la clase sun.applet.AppletViewer o ejecutar la herramienta appletviewer enel intérprete de Qshell con propiedades de AWT remoto.

Por ejemplo, si utiliza la clase sun.applet.AppletViewer y ejecuta example1.htmlfuera del directorio TicTacToe, la línea de mandatos debe ser parecida a lasiguiente: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 intérprete de Qshell y ejecutaexample1.html fuera del directorio TicTacToe, los mandatos deben tener esteaspecto: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 ejecución para Appletviewer. -D son propiedades.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramienta extcheck Java

En Java 2 SDK (J2SDK), Standard Edition, versión 1.2, la herramienta extcheckdetecta conflictos de versión entre un archivo JAR destino y los archivos JAR deampliación instalados actualmente. Es compatible con la herramienta keytoolsuministrada por Sun Microsystems, Inc.

La herramienta extcheck está disponible utilizando el intérprete Qshell.

Para obtener más información sobre la herramienta extcheck, consulte el apartado

herramienta extcheck de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

La herramienta jar JavaLa herramienta jar combina varios archivos en un único archivo JAR. Escompatible con la herramienta jar proporcionada por Sun Microsystems, Inc.

La herramienta jar está disponible en el intérprete Qshell.

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 63

Page 72: AS400 Kit Desarrollo Para Java - Rzaha

Si desea emplear una interfaz alternativa a la herramienta jar, vea la herramientaajar, que sirve para crear y manipular archivos JAR.

Si desea obtener más información sobre los sistemas de archivos de AS/400,consulte la publicación Introducción al sistema de archivos integrado OS/400 obien el apartado Archivos del sistema de archivos integrado.

Para obtener más información sobre la herramienta jar, le remitimos a laherramienta jar de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramienta jarsigner Java

En Java 2 SDK (J2SDK), Standard Edition, versión 1.2, la herramientajarsigner firma archivos JAR y verifica firmas en archivos JAR firmados. Laherramienta jarsigner accede al almacén de claves, que la herramienta keytoolcrea y gestiona, cuando necesita buscar la clave privada para firmar un archivoJAR. En J2SDK, las herramientas jarsigner y keytool sustituyen a la herramientajavakey. Es compatible con la herramienta jarsigner proporcionada por SunMicrosystems, Inc.

La herramienta jarsigner está disponible en el intérprete Qshell.

Para obtener más información sobre la herramienta jarsigner, consulte el apartado

herramienta jarsigner de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

La herramienta javac JavaLa herramienta javac compila programas Java. Es compatible con la herramientajavac proporcionada por Sun Microsystems, Inc con una excepción.

-classpathNo altera temporalmente la vía de acceso de clases por omisión. En lugarde ello, se agrega a la vía de acceso de clases por omisión del sistema. Laopción -classpath altera temporalmente la variable de entornoCLASSPATH.

La herramienta javac está disponible en el intérprete Qshell.

Si tiene instalado JDK 1.1.x en AS/400 como valor por omisión, pero necesitaejecutar la versión 1.2 del mandato java, entre este mandato:javac -djava.version=1.2 <my_dir> MyProgram.java

Para obtener más información sobre la herramienta javac, le remitimos a laherramienta javac de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

64 AS/400 Developer Kit para Java

Page 73: AS400 Kit Desarrollo Para Java - Rzaha

La herramienta javadoc JavaLa herramienta javadoc genera documentación de API. Es compatible con laherramienta javadoc proporcionada por Sun Microsystems, Inc.

La herramienta javadoc está disponible en el intérprete Qshell.

Para obtener más información sobre la herramienta javadoc, le remitimos a laherramienta javadoc de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramienta javah JavaLa herramienta javah facilita la implementación de los métodos nativos Java. Escompatible con la herramienta javah proporcionada por Sun Microsystems, Inc conalgunas excepciones.

Nota: escribir métodos nativos significa que la aplicación no es 100% puro Java.También significa que la aplicación no es portable directamente de una plataformaa otra. Los métodos nativos son, por naturaleza, específicos de una plataforma oun sistema. La utilización de métodos nativos puede incrementar el coste dedesarrollo y mantenimiento de las aplicaciones.

La herramienta javah está disponible en el intérprete Qshell. Lee un archivo declase Java y crea un archivo de cabecera escrito en C dentro del directorio detrabajo actual. El archivo de cabecera queda grabado en un archivo continuo deAS/400 (STMF). Para poder incluirlo en un programa C de AS/400, primero debecopiarse a un archivo miembro.

La herramienta javah es compatible con la herramienta proporcionada por SunMicrosystems, Inc. No obstante, si se especifican las opciones que se indican acontinuación, el AS/400 hace caso omiso de ellas.

-td La herramienta javah de AS/400 no requiere ningún directorio temporal.

-stubs En AS/400, Java sólo da soporte al formato JNI de los métodos nativos.Los apéndices son necesarios únicamente para el formato pre-JNI de losmétodos nativos.

-trace Guarda relación con la salida de archivos apéndice .c, que no estásoportada por Java en AS/400.

-v No está soportada.

Nota: se debe especificar siempre la opción -jni. El sistema AS/400 no da soporte alas implementaciones de métodos nativos anteriores a JNI.

Para obtener más información sobre la herramienta javah, le remitimos a laherramienta javah de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 65

Page 74: AS400 Kit Desarrollo Para Java - Rzaha

Herramienta javakey JavaLa herramienta javakey sirve para generar y gestionar certificados y claves decifrado, así como para generar firmas digitales para applets. Es compatible con laherramienta javakey proporcionada por Sun Microsystems, Inc. en JavaDevelpment Kit (JDK) versiones 1.1.x.

En Java 2 Software Development Kit (J2SDK), Standard Edition, versión 1.2, laherramienta javakey es obsoleta. Debido a los errores en las versiones 1.1.x de JDK,el código firmado utilizando la herramienta javakey 1.1.x se reconoce como nofirmado en J2SDK, versión 1.2. Si firma código utilizando J2SDK, versión 1.2, sereconoce 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 alas claves que crea esta herramienta. En lugar de este soporte, debe utilizar loscontenedores de claves y certificados que están integrados en el AS/400 y que sehan creado o importado con Digital Certificate Manager. Consulte el apartadoConseguir que una aplicación Java sea segura con la capa de sockets seguros paraobtener más información.

Los paquetes y las firmas de applet dependen del navegador. Consulte ladocumentación de su navegador para asegurarse de que es compatible con elformato de archivo JAR Java y con las firmas de applet de javakey.

Nota: los archivos creados con la herramienta javakey contienen informaciónconfidencial. Los archivos de clave pública y privada están protegidos por laspertinentes medidas de seguridad.

La herramienta javakey está disponible en el intérprete Qshell.

Si desea obtener más información sobre los sistemas de archivos de AS/400,consulte la publicación Introducción al sistema de archivos integrado OS/400 obien el apartado Archivos del sistema de archivos integrado.

Para obtener más información sobre la herramienta javakey, le remitimos a laherramienta javakey de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

La herramienta javap JavaLa herramienta javap desensambla archivos Java compilados e imprime unarepresentación del programa Java. Esto puede resultar útil cuando ya no sedispone del código fuente original en el sistema.

Es compatible con la herramienta javap proporcionada por Sun Microsystems, Inccon algunas excepciones.

-b Se hace caso omiso de esta opción. La compatibilidad retroactiva no esnecesaria puesto que en AS/400 Java sólo da soporte a Java DevelopmentKit 1.1.4 y versiones posteriores.

-p En AS/400, la opción -p no es válida. Debe escribirse -private.

-verifySe hace caso omiso de esta opción. La herramienta javap no realizaverificación alguna en AS/400.

66 AS/400 Developer Kit para Java

Page 75: AS400 Kit Desarrollo Para Java - Rzaha

La herramienta javap está disponible en el intérprete Qshell.

Nota: la utilización de la herramienta javap para desensamblar clases puedeconstituir una violación del acuerdo de licencia de las clases. Antes de utilizar laherramienta javap, consulte el acuerdo de licencia de las clases.

Para obtener más información sobre la herramienta javap, le remitimos a laherramienta javap de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramienta keytool Java

En Java 2 SDK (J2SDK), Standard Edition, versión 1.2, la herramienta keytoolcrea pares de claves públicas y privadas, certificados autofirmados y gestionaalmacenes de claves. En J2SDK, las herramientas jarsigner y keytool sustituyen ala herramienta javakey. Es compatible con la herramienta keytool suministradapor Sun Microsystems, Inc.

La herramienta keytool está disponible utilizando el intérprete Qshell.

Para obtener más información sobre la herramienta keytool, consulte el apartado

herramienta keytool de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramienta native2ascii JavaLa 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 SunMicrosystems, Inc.

La herramienta native2ascii está disponible en el intérprete Qshell.

Para obtener más información sobre la herramienta native2ascii, le remitimos a laherramienta native2ascii de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramienta policytool Java

En Java 2 SDK (J2SDK), Standard Edition, versión 1.2, la herramientapolicytool crea y cambia los archivos de configuración de política externa quedefinen la política de seguridad Java de la instalación. Es compatible con laherramienta policytool proporcionada por Sun Microsystems, Inc.

policytool es una herramienta de interfaz gráfica de usuario (GUI) disponibleutilizando el intérprete de Qshell y Abstract Window Toolkit remoto. Consulte elapartado Abstract Window Toolkit remoto de AS/400 Developer Kit para Java paraobtener más información.

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 67

Page 76: AS400 Kit Desarrollo Para Java - Rzaha

Para obtener más información acerca de policytool, consulte policytool by Sun

Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramienta rmic JavaLa herramienta rmic genera archivos apéndice y archivos de clase para los objetosJava. Es compatible con la herramienta rmic proporcionada por Sun Microsystems,Inc.

La herramienta rmic está disponible en el intérprete Qshell.

Para obtener más información sobre la herramienta rmic, le remitimos a laherramienta rmic de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramienta rmid Java

En Java 2 SDK (J2SDK), Standard Edition, versión 1.2, la herramienta rmidinicia el daemon del sistema de activación, para que los objetos puedan registrarsey activarse en una máquina virtual Java. Es compatible con la herramienta rmidproporcionada por Sun Microsystems, Inc.

La herramienta rmid está disponible en el intérprete Qshell.

Para obtener más información sobre la herramienta rmid, consulte el apartado

herramienta rmid de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

La herramienta rmiregistry JavaLa herramienta rmiregistry inicia un registro de objetos remotos en un puertoconcreto. Es compatible con la herramienta rmiregistry proporcionada por SunMicrosystems, Inc.

La herramienta rmiregistry está disponible en el intérprete Qshell.

Para obtener más información sobre la herramienta rmiregistry, le remitimos a laherramienta rmiregistry de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

La herramienta serialver JavaLa herramienta serialver devuelve el número de versión o el identificadorexclusivo de serialización correspondiente a una o varias clases. Es compatible conla herramienta serialver proporcionada por Sun Microsystems, Inc.

68 AS/400 Developer Kit para Java

Page 77: AS400 Kit Desarrollo Para Java - Rzaha

La herramienta serialver está disponible en el intérprete Qshell.

Para obtener más información sobre la herramienta serialver, le remitimos a laherramienta serialver de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramienta tnameserv Java

En Java 2 SDK (J2SDK), Standard Edition, versión 1.2, la herramientatnameserv proporciona acceso al servicio de nombres. Es compatible con laherramienta tnameserv proporcionada por Sun Microsystems, Inc.

La herramienta tnameserv está disponible en el intérprete Qshell.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

El mandato java de QshellEl mandato java de Qshell ejecuta programas Java. Es compatible con laherramienta java proporcionada por Sun Microsystems, Inc con algunasexcepciones.

AS/400 Developer Kit para Java hace caso omiso de las opciones del mandato javade Qshell que se indican a continuación.

Opción Descripción-cs No está soportada.-checksource No está soportada.-debug Soportada por el depurador interno de

AS/400.-noasyncgc La recogida de basura está permanentemente

en ejecución con AS/400 Developer Kit paraJava.

-noclassgc La recogida de basura está permanentementeen ejecución con AS/400 Developer Kit paraJava.

-prof AS/400 tiene herramientas de rendimientopropias.

-ss No procede en AS/400.-oss No procede en AS/400.-t AS/400 utiliza una función de rastreo propia.-verify La verificación se realiza siempre en AS/400.-verifyremote La verificación se realiza siempre en AS/400.-noverify La verificación se realiza siempre en AS/400.

En AS/400, la opción -classpath no altera temporalmente la vía de acceso declases por omisión. En lugar de ello, se agrega a la vía de acceso de clases poromisión del sistema. La opción -classpath altera temporalmente la variable deentorno CLASSPATH.

El mandato java de Qshell da soporte a las opciones nuevas de AS/400, que sonlas que se indican a continuación.

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 69

Page 78: AS400 Kit Desarrollo Para Java - Rzaha

Opción Descripción-secure Comprueba si existe acceso público de

grabación a los directorios de CLASSPATH.-gcfrq Especifica la frecuencia de recogida de

basura.-gcpty Especifica la prioridad de recogida de basura.-opt Especifica el nivel de optimización.-verbosegc Se visualiza un mensaje a cada pase de la

recogida de basura.

En el apartado dedicado al mandato Ejecutar Java (RUNJVA) de la información deconsulta 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 información de consulta de mandatos CL contienen información sobre lagestión de programas Java.

El mandato java de Qshell está disponible en el intérprete Qshell.

Para obtener más información sobre el mandato java de Qshell, le remitimos a laherramienta java de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Mandatos CL a los que da soporte JavaAS/400 Developer Kit para Java da soporte a los mandatos CL que se indican acontinuación.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 archivoJAR.

v El mandato Volcar máquina virtual Java (DMPJVM) vuelca informaciónacerca de la máquina virtual Java para un trabajo especificado en un archivo de

impresora en spool.v El mandato Visualizar programa Java (DSPJVAPGM) visualiza información sobre

un programa Java de AS/400.

En la publicación OS/400 Program and CL Command APIs, SC41-5870 hallará más

información.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

70 AS/400 Developer Kit para Java

Page 79: AS400 Kit Desarrollo Para Java - Rzaha

El mandato Crear programa Java (CRTJVAPGM)Propósito:

El mandato Crear programa Java (CRTJVAPGM) crea un programa Java en AS/400a partir de un archivo de clase Java o bien uno o varios programas Java a partir deun archivo JAR. Si el nombre de archivo termina en .jar o .zip, quiere decir que setrata de un archivo JAR. El objeto u objetos de programa Java resultantes formaránparte del objeto de archivo de clase o JAR, pero no podrán realizarse cambios enellos de forma directa. Los programas Java se ejecutarán cuando se inicie elmandato Ejecutar Java (RUNJVA). Se puede controlar el tamaño y el rendimientodel programa Java; para ello, utilice el parámetro OPTIMIZE o el parámetroLICOPT.

Sintaxis:Mandato CRTJVAPGM

(P)>>—CRTJVAPGM—CLSF(—.-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 parámetros que preceden a este punto pueden especificarsepor posición.

Parámetros necesarios:

CLSF

El parámetro CLSF especifica el nombre del archivo de clase o del archivoJAR a partir del cual se crearán programas Java en AS/400. El nombre delarchivo de clase puede estar calificado por uno o varios nombres dedirectorio.

Como nombre-archivo-clase, especifique el nombre del archivo de clase oun patrón que identifique el nombre de los archivos de clase que seutilizan. Especifique el patrón al final del nombre. Un asterisco equivale aun número cualquiera de caracteres y un signo de interrogación equivale aun solo carácter. Si el nombre está calificado o contiene un patrón, debe irentre apóstrofos. Un ejemplo de nombre de archivo de clase calificado es:'/directorio1/directorio2/nombremiclase.class'

Un ejemplo de patrón es:'/directorio1/directorio2/nombremicl*.class'

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 71

Page 80: AS400 Kit Desarrollo Para Java - Rzaha

Como nombre-archivo-JAR, especifique el nombre del archivo JAR o unpatrón que identifique el nombre de los archivos JAR que se utilizan. Si unarchivo termina en .jar o .zip, significa que se trata de un archivo JAR.Especifique el patrón al final del nombre. Un asterisco equivale a unnúmero cualquiera de caracteres y un signo de interrogación equivale a unsolo carácter. Si el nombre está calificado o contiene un patrón, debe irentre apóstrofos. Un ejemplo de nombre de archivo JAR calificado es:'/directorio1/directorio2/nombremiapl.jar'

Un ejemplo de patrón es:'/directorio1/directorio2/nombremia*.zip'

Parámetros opcionales:

OPTIMIZE

El parámetro OPTIMIZE del mandato CRTJVAPGM especifica el nivel deoptimización del programa Java de AS/400 que se conecta con el objeto dearchivo de clase o JAR. Si utiliza el parámetro OPTIMIZE(*INTERPRET), severificará el programa Java resultante y se convertirá a un formato interno.Después de esto, se interpretará cuando se ejecute. En el caso de los demásniveles de optimización, el formato interno incluye instrucciones delenguaje máquina de AS/400. Éstas se optimizan tomando como base elnivel de optimización especificado. El AS/400 ejecutará directamente lasinstrucciones de lenguaje máquina cuando se ejecute el programa.

Si especifica OPTIMIZE(*INTERPRET), los programas Java serán de menortamaño, pero se ejecutarán con más lentitud que los programas Javacreados con un nivel de optimización superior. A medida que el nivel deoptimización se incrementa por encima de 10, el rendimiento de losprogramas Java va aumentando de forma gradual, pero el tiempo que senecesita para crear el programa Java también aumenta. Asimismo, cuantomás alto es el nivel de optimización, más difícil resulta depurar elprograma Java.

Normalmente, *INTERPRET es una buena opción en la fase de desarrollo yde pruebas iniciales debido a la importancia que tienen la rapidez en laedición, el tiempo total invertido en la compilación y la calidad ofrecidapor las funciones de depuración. A medida que el programa avanza haciala fase de entrega, el nivel de la optimización suele incrementarse.

La lista siguiente muestra en qué se diferencian los niveles de optimizacióny en qué consisten:

10 El programa Java contiene una versión transformada de losbytecodes del archivo de clase, pero la optimización adicional decompilador que experimenta es mínima. Durante la depuración, sepueden visualizar y cambiar las variables.

20 El programa Java contiene una versión compilada de los bytecodesdel archivo de clase y realiza una optimización adicional decompilador. Durante la depuración, se pueden visualizar lasvariables, pero no se pueden cambiar.

30 El programa Java contiene una versión compilada de los bytecodesdel archivo de clase y realiza una optimización de compiladorsuperior a la del nivel de optimización 20. La depuración resultamás difícil en los niveles superiores de optimización porque éstareduce la capacidad de detenerse en puntos concretos del código yvisualizar las variables del programa. Durante la depuración, se

72 AS/400 Developer Kit para Java

Page 81: AS400 Kit Desarrollo Para Java - Rzaha

pueden visualizar las variables, pero no se pueden cambiar. Losvalores que se presentan pueden no ser el valor actual de lavariable.

40 El programa Java contiene una versión compilada de los bytecodesdel archivo de clase y realiza una optimización de compiladorsuperior a la del nivel de optimización 30. Además, incluye unaoptimización que inhabilita el rastreo de las instrucciones y lasllamadas. El nivel de optimización 40 incluye optimizaciones através de las clases. En un número menor de casos, el orden deejecución de los inicializadores estáticos para clases no relacionadas(no relacionadas por herencia ni por contención) puede serdiferente del indicado en la especificación de inicialización estática.Además, incluye una optimización que inhabilita el rastreo de lasinstrucciones y las llamadas.Nota: si el programa Java no se optimiza o bien lanza unaexcepción en el nivel de optimización 40, utilice el nivel deoptimización 30.

*INTERPRETLos programas Java que se crean no se optimizan. Al iniciarse, elprograma interpreta el bytecode del archivo de clase. Durante ladepuración, se pueden visualizar y cambiar las variables.

REPLACE

El parámetro REPLACE especifica si un programa Java nuevo sustituye aotro ya existente que está asociado con el archivo de clase.

*YES Obliga a que, para el nivel de optimización seleccionado, sevuelvan a crear todos los programas Java que están asociados conel archivo de clase o JAR. En el caso de archivos JAR de grantamaño, esto puede llevar tiempo, pero se consigue la generaciónde código de mayor rendimiento y se utiliza el mínimo espacio endisco.

*NO Vuelve a crear el mínimo de programas Java obligatorios asociadoscon el archivo de clase o JAR. Si se han modificado las clases, nose asociará ningún programa Java con una o varias clases. Si elprograma Java tiene un nivel de optimización distinto delespecificado por medio del parámetro OPTIMIZE, se crearánprogramas Java nuevos.

ENBPFRCOL

El parámetro ENBPFRCOL especifica si se habilita o no la recogida dedatos de rendimiento.

*NONENo se habilita la recogida de datos de rendimiento. No serecogerán datos de rendimiento.

*ENTRYEXITSe recogen datos de rendimiento de entrada y salida deprocedimientos.

*FULL Se recogen datos de rendimiento de entrada y salida de

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 73

Page 82: AS400 Kit Desarrollo Para Java - Rzaha

procedimientos. También se recogen datos de rendimiento antes ydespués de las llamadas a procedimientos externos.

USRPRF

El parámetro USRPRF especifica si la comprobación de autorizaciónrealizada mientras se ejecuta el programa debe incluir únicamente alusuario que está ejecutando el programa (*USER) o bien a dicho usuario yal propietario del programa (*OWNER). Los perfiles de usuario delprograma, o bien los perfiles del usuario y del propietario del programa,controlan qué objetos puede utilizar el programa. Esto incluye laautorización que el programa tiene para cada objeto. El atributo de perfilde usuario de un programa Java existente sólo puede cambiarlo elpropietario o usuario de programa que posea la autorización QSECOFR.

Nota: Las funciones del sistema de archivos integrado que el programapuede utilizar, como por ejemplo File.delete(), no reconocen la autorizaciónadoptada. Las funciones del sistema de archivos integrado sólo utilizan laautorización del usuario que ejecuta el programa.

*USEREl programa se ejecuta con el perfil del usuario del programa.

*OWNERCuando se procesa el programa, se utilizan los dos perfiles deusuario, el del propietario del programa y el del usuario delprograma. Para localizar y acceder a los objetos durante el procesodel programa, puede utilizar los conjuntos colectivos deautorización sobre objeto de los dos perfiles de usuario. Laautorización del perfil de grupo del perfil de usuario propietariono se utiliza.

USEADPAUT

El parámetro USEADPAUT especifica si, cuando el programa esté enejecución, se utiliza como origen de autorización la autorización adoptadapor programa procedente de los programas anteriores de la pila dellamadas.

Nota: Las funciones del sistema de archivos integrado que el programapuede utilizar, como por ejemplo File.delete(), no reconocen la autorizaciónadoptada. Las funciones del sistema de archivos integrado sólo utilizan laautorización del usuario que ejecuta el programa.

*NO Cuando se ejecute el programa, no utilice la autorización adoptadapor programa procedente de los niveles de llamada anteriores. Sise ha especificado una lista de autorizaciones para el valor delsistema QUSEADPAUT y el usuario que ejecuta CRTJVAPGM noestá incluido en dicha lista de autorizaciones, se suministraautomáticamente el valor *NO para este parámetro.

*YES Cuando se ejecute el programa, utilice la autorización adoptadapor programa procedente de los niveles de llamada anteriores.

LICOPT

74 AS/400 Developer Kit para Java

Page 83: AS400 Kit Desarrollo Para Java - Rzaha

El parámetro LICOPT especifica una o varias opciones de optimización entiempo de compilación del código interno bajo licencia. Este parámetrodeben utilizarlo únicamente los programadores avezados, que comprendenlas posibles ventajas e inconvenientes de cada tipo de optimizaciónseleccionado. Si desea ver un listado de las series reconocidas delparámetro LICOPT, consulte Series del parámetro LICOPT.

Nota: para obtener más información sobre la manera de utilizar lasoptimizaciones, debe ponerse en contacto con el servicio técnico.

*OPTIMIZELa opción *OPTIMIZE utiliza el conjunto de optimizaciones entiempo de compilación que están asociadas implícitamente con elnivel de optimización especificado en el parámetro OPTIMIZE. Siespecifica OPTIMIZE(*INTERPRET), no se realizará ningunaoptimización en tiempo de compilación.

’serie de opciones de código interno bajo licencia’Las opciones de optimización en tiempo de compilación del códigointerno bajo licencia seleccionadas se utilizan cuando se crea elobjeto de programa Java. Determinadas opciones de optimizaciónpueden disminuir la capacidad de depurar el programa Javacreado.

SUBTREE

El parámetro SUBTREE especifica si se procesan o no los subdirectorioscuando se busquen archivos que coincidan con la palabra clave CLSF.

*NONESólo se procesarán los archivos que coincidan con el patrón denombre de objeto. No se procesará ningún subárbol. Si el directoriotiene subdirectorios, no se procesarán ni los subdirectorios ni losobjetos de los subdirectorios.

*ALL Se procesa la totalidad del subárbol de la vía de accesoespecificada en CLSF a fin de crear programas Java para archivosque coincidan con el nombre especificado en el parámetro CLSF.

TGTRLS

El parámetro TGTRLS especifica el release del sistema operativo en el quetiene previsto utilizar el objeto que se crea. Al especificar el release destino,se utiliza el formato VxRxMx. Vx es la versión. Rx es el release y Mx es elnivel de modificación. Por ejemplo, V4R5M0 es la versión 4, release 5, nivelde modificación 0. Los valores válidos dependen de la versión, release ynivel de modificación actuales. Estos valores válidos cambian con cadanuevo release.

*CURRENTEl objeto se utiliza en el release del sistema operativo que seejecuta actualmente en el sistema. El objeto también puedeutilizarse en un sistema que tenga instalado un releasesubsiguiente del sistema operativo.

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 75

Page 84: AS400 Kit Desarrollo Para Java - Rzaha

release_destinoEspecifique el release en el formato VxRxMx. El objeto tambiénpuede utilizarse en un sistema con un release especificado, o quetenga instalado un release subsiguiente del sistema operativo. Losvalores válidos dependen de la versión, release y nivel demodificación actuales. Estos valores válidos cambian con cadanuevo release. Para ver una lista de los niveles de release destinoválidos, pulse la tecla F4.

En Ajustar el rendimiento de los programas Java con AS/400 Developer Kit paraJava hallará más información sobre rendimiento.

En Ejemplo: mandato Crear programa Java (CRTJVAPGM) hallará un ejemplo en elque se utiliza el mandato CRTJVAPGM.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Series del parámetro de opción de Código Interno bajo LicenciaEsta tabla muestra las series reconocidas por el parámetro de opción de CódigoInterno bajo Licencia (LICOPT). Las series no son sensible a las mayúsculas yminúsculas, pero aparecen escritas en mayúsculas y minúsculas a fin de queresulten legibles.

Series del parámetro LICOPT

Serie DescripciónAllFieldsVolatile Si se establece, se considera que todos los

campos son volátiles.NoAllFieldsVolatile No está establecida; no trata a todos los

campos como si fuesen volátiles.AllowBindingToLoadedClasses Indica que las representaciones de clases

temporales creadas como resultado dellamadas defineClass dentro de una máquinavirtual Java en ejecución pueden enlazarseestrechamente con otras representaciones declases dentro de la misma máquina virtualJava.

NoAllowBindingToLoadedClasses Indica que las representaciones de clasestemporales creadas como resultado dellamadas defineClass dentro de una máquinavirtual Java en ejecución no pueden enlazarseestrechamente con otras representaciones declases dentro de la misma máquina virtualJava.

AllowBindingWithinJar Indica que las representaciones de clasesdentro de un archivo ZIP o JAR puedenenlazarse estrechamente con otrasrepresentaciones de clases dentro del mismoarchivo ZIP o JAR.

76 AS/400 Developer Kit para Java

Page 85: AS400 Kit Desarrollo Para Java - Rzaha

Serie DescripciónNoAllowBindingWithinJar Indica que las representaciones de clases

dentro de un archivo ZIP o JAR no puedenenlazarse estrechamente con otrasrepresentaciones de clases dentro del mismoarchivo ZIP o JAR.

AllowInlining Indica al convertidor que se permite laincorporación de métodos locales. Este es elvalor por omisión para los niveles deoptimización 30 y 40.

NoAllowInlining No se indica al convertidor que se permite laincorporación de métodos locales.

AssumeUnknownFieldsNonvolatile Cuando los atributos de un campo de unaclase externa no pueden determinarse, esteparámetro genera código presuponiendo queel campo es no volátil.

NoAssumeUnknownFieldsNonvolatile Cuando los atributos de un campo de unaclase externa no pueden determinarse, esteparámetro genera código presuponiendo queel campo es volátil.

BindErrorHandling Especifica qué acción debe realizarse si, comoresultado de adoptar los valoresAssumeUnknownFieldsNonvolatile,PreresolveExtRef o PreLoadExtRef de laopción de Código Interno bajo Licencia, elcargador de clases de la máquina virtual Javadetecta que una representación de clasecontiene representaciones de método, que nopueden utilizarse en el contexto actual.

BindInit Utilizar una llamada enlazada lógicamente alos métodos init locales.

NoBindInit No utilizar una llamada enlazadalógicamente a los métodos init locales.

BindSpecial Utilizar una llamada enlazada lógicamente alos métodos special locales.

NoBindSpecial No utilizar una llamada enlazadalógicamente a los métodos special locales.

BindStatic Utilizar una llamada enlazada lógicamente alos métodos static locales.

NoBindStatic No utilizar una llamada enlazadalógicamente a los métodos static locales.

BindTrivialFields Enlazar lógicamente las referencias a campostriviales durante la creación del programa.

NoBindTrivialFields Resolver las referencias a campos a laprimera.

BindVirtual Utilizar una llamada enlazada lógicamente alos métodos virtuales finales locales.

NoBindVirtual No utilizar una llamada enlazadalógicamente a los métodos virtuales finaleslocales.

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 77

Page 86: AS400 Kit Desarrollo Para Java - Rzaha

Serie DescripciónDeferResolveOnClass Toma un parámetro de tipo serie que

presuntamente es el nombre de una clase(por ejemplo, java.lang.Integer). Si establecePreresolveExtRef en el nivel de optimización40, las clases que se especifiquen conDeferResolveOnClass no se incluyen en laoperación de prerresolución. Esto resulta útilsi algunas de las clases que residen en víasde acceso no utilizadas del código no figuranen la vía de acceso de clases. Permite utilizarel nivel de optimización 40 conindependencia de este hecho especificando“DeferResolveOnClass=’unavía.unaclase’”para cada clase que falte. Se permiten variasentradas de DeferResolveOnClass.

DevirtualizeFinalJDK Permite que CRTJVAPGM utilice elconocimiento del JDK estándar paradesvirtualizar las llamadas a aquellosmétodos de JDK que se sabe que son finaleso miembros de clases finales. Es el valor poromisión en los niveles de optimización 30 y40.

NoDevirtualizeFinalJDK No permite que CRTJVAPGM utilice elconocimiento del JDK estándar paradesvirtualizar las llamadas a aquellosmétodos de JDK que se sabe que son finaleso miembros de clases finales.

DevirtualizeRecursive Provoca la generación de código especial enel caso de algunos métodos recursivos yelimina la mayor parte de la actividadgeneral de las llamadas a métodosrecursivos. Sin embargo, se genera lógica decomprobación adicional en la entrada inicialpara el método recursivo, y por tanto elrendimiento puede no mejorar en casos derecursión superficial.

NoDevirtualizeRecursive No provoca la generación de código especialen el caso de algunos métodos recursivos.

DisableIntCse Provoca la inhabilitación de determinadasoptimizaciones de subexpresión comunes algenerar código para determinados tipos deexpresiones de tipo integer. Esto puedeaumentar la optimización global al exponerotras oportunidades de optimización alConversor de optimización.

NoDisableIntCse No provoca la inhabilitación de determinadasoptimizaciones de subexpresión comunes algenerar código para determinados tipos deexpresiones de tipo integer. Generalmente,esto produce un código de mejorrendimiento en niveles de optimización másbajos.

DoExtBlockCSE Realizar la eliminación de subexpresionescomunes en el bloque básico ampliado.

NoDoExtBlockCSE No realizar la eliminación de subexpresionescomunes de bloque básico ampliado.

78 AS/400 Developer Kit para Java

Page 87: AS400 Kit Desarrollo Para Java - Rzaha

Serie DescripciónInlineArrayCopy Provoca la incorporación del método

System.arraycopy en algunos casos dematrices escalares.

NoInlineArrayCopy Impide la incorporación del métodoSystem.arraycopy.

DoLocalCSE Realizar la eliminación de subexpresionescomunes locales.

NoDoLocalCSE No realizar la eliminación de subexpresionescomunes locales.

EnableCseForCastCheck Si se establece, genera código para lacomprobación de la conversión de tipos en elque se puede realizar una operación DAG deuna instancia of anterior.

NoEnableCseForCastCheck

No está establecida; no genera código para lacomprobación de la conversión de tipos en elque se puede realizar una operación DAG deuna instancia of anterior.

ErrorReporting Campo de información de errores de tiempode ejecución**: Proporciona la opción deanular la compilación al encontrar errores deformato de clase o verificación. 0=Notificartodos los errores inmediatamente; 1=Diferirla notificación de errores de verificación debytecodes; 2=Diferir la notificación de erroresde verificación de bytecodes y de errores deformato de clase.

InlineInit Incorporar los métodos init en las clases dejava.lang.

NoInlineInit No incorporar los métodos init.InlineMiscFloat Incorporar los métodos float/double varios

de java.lang.Math.NoInlineMiscFloat No incorporar los métodos float/double

varios.InlineMiscInt Incorporar los métodos int/long varios de

java.lang.Math.NoInlineMiscInt No incorporar los métodos int/long varios.InlineTransFloat Incorporar los métodos float/double

transcendentales de java.lang.Math.NoInlineTransFloat No incorporar los métodos float/double

transcendentales.PreloadExtRef Indica que pueden precargarse clases

referenciadas (sin inicialización de clases) enla entrada de método.

NoPreloadExtRef Indica que no pueden precargarse clasesreferenciadas en la entrada de método. Sinembargo, el parámetro PreresolveExtRefaltera temporalmente este valor y provoca laprecarga e inicialización de clasesreferenciadas. .

PreresolveExtRef Prerresolver, en el momento de entrarlos, losmétodos a los que se hace referencia.

NoPreresolveExtRef Resolver las referencias a métodos a laprimera. Sirve para resolver las excepcionesde ″clase no encontrada″ de los programasque se ejecutan en otras máquinas.

ShortCktAthrow Si se establece, intenta cortocircuitar lasexcepciones athrow.

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 79

Page 88: AS400 Kit Desarrollo Para Java - Rzaha

Serie DescripciónNoShortCktAthrow No está establecida; no intenta cortocircuitar

las excepciones athrow.ShortCktExSubclasses Si se establece, reconoce algunas subclases de

Exception y las cortocircuita directamente.NoShortCktExSubclasses No está establecida; no reconoce algunas

subclases de Exception y no las cortocircuitadirectamente.

Los dos asteriscos (**) significan que estas series requieren un valor numérico comoentrada en la sintaxis de nombreserie=número (sin espacios en blancointercalados).

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: mandato Crear programa Java (CRTJVAPGM)Para crear un programa Java y asociarlo con el archivo de clasemyJavaClassFileName, se utiliza el mandato Crear programa Java (CRTJVAPGM).Si el programa Java se crea con OPTIMIZE(*INTERPRET), se interpretarán losbytecodes del archivo de clase del programa. Para iniciar el programa, se utiliza elmandato Ejecutar Java (RUNJVA).

Ejemplo 1: crear un programa Java interpretadoCRTJVAPGM CLSF('/projectA/team2/myJavaClassFileName.class')

OPTIMIZE(*INTERPRET)

El ejemplo que se da a continuación es idéntico al Ejemplo 1, con la salvedad quese optimiza el programa. El programa se crea con OPTIMIZE(40), por lo quecontiene instrucciones de lenguaje máquina compiladas que se ejecutan cuando seinicia el programa Java.

Ejemplo 2: crear un programa Java optimizadoCRTJVAPGM CLSF('/projectB/team2/myJavaclassfile.class')

OPTIMIZE(40)

En El mandato Crear programa Java (CRTJVAPGM) hallará el diagrama de sintaxise información detallada sobre los parámetros.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Mandato Cambiar programa Java (CHGJVAPGM)Propósito:

El mandato Cambiar programa Java (CHGJVAPGM) cambia los atributos de unprograma Java conectado con un archivo de clase Java o de un conjunto deprogramas Java conectados con un archivo JAR. Un archivo es un archivo JAR sisu nombre termina en .jar o .zip.

Los programas Java pueden volver a crearse si los atributos especificados sondistintos de los atributos de los programas actuales o bien si se especificaMERGE(*YES). El mandato CHGJVAPGM no crea programas Java para archivos declase ni para clases que estén dentro de archivos JAR que no tienen conectados

80 AS/400 Developer Kit para Java

Page 89: AS400 Kit Desarrollo Para Java - Rzaha

programas Java. Cuando se carga una clase que no tiene conectado ningúnprograma Java actual, se crea un programa Java de forma dinámica. Dentro de unarchivo JAR, pueden existir clases a partir de las cuales no se ha creado ningúnprograma Java. Para crear programas Java a partir de dichas clases, puede utilizarel mandato Crear programa Java (CRTJVAPGM). Este mandato sustituyeprogramas Java existentes únicamente.

Sintaxis:Mandato CHGJVAPGM

(P)>>—CHGJVAPGM—CLSF(—.-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 parámetros que preceden a este punto pueden especificarsepor posición.

Parámetro obligatorio:

CLSF

El parámetro CLSF especifica el nombre del archivo de clase o del archivoJAR que está conectado con los programas Java que deben cambiarse. Elnombre del archivo de clase puede estar calificado por uno o variosnombres de directorio.

Como nombre-archivo-clase, especifique el nombre del archivo de clase oun patrón que identifique el nombre de los archivos de clase que seutilizan. Especifique el patrón al final del nombre. Un asterisco equivale aun número cualquiera de caracteres y un signo de interrogación equivale aun solo carácter. Si el nombre está calificado o contiene un patrón, debe irentre apóstrofos. Un ejemplo de nombre de archivo de clase calificado es:'/directorio1/directorio2/nombremiclase.class'

Un ejemplo de patrón es:'/directorio1/directorio2/nombremicl*.class'

Como nombre-archivo-JAR, especifique el nombre del archivo JAR o unpatrón que identifique el nombre de los archivos JAR que se utilizan. Si unarchivo termina en .jar o .zip, significa que se trata de un archivo JAR.Especifique el patrón al final del nombre. Un asterisco equivale a unnúmero cualquiera de caracteres y un signo de interrogación equivale a unsolo carácter. Si el nombre está calificado o contiene un patrón, debe irentre apóstrofos. Un ejemplo de nombre de archivo JAR calificado es:'/directorio1/directorio2/nombremiapl.jar'

Un ejemplo de patrón es:

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 81

Page 90: AS400 Kit Desarrollo Para Java - Rzaha

'/directorio1/directorio2/nombremia*.zip'

Parámetros opcionales:

OPTIMIZE

El parámetro OPTIMIZE del mandato CHGJVAPGM especifica el nivel deoptimización de cada uno de los programas Java de AS/400 conectadoscon el objeto de clase o el objeto de archivo JAR. Si utiliza el parámetroOPTIMIZE(*INTERPRET), se verificará el programa Java resultante y seconvertirá a un formato interno. Después de esto, se interpretará cuando seejecute. En el caso de los demás niveles de optimización, el formato internoincluye instrucciones de lenguaje máquina de AS/400. Éstas se optimizantomando como base el nivel de optimización especificado. El AS/400ejecutará directamente las instrucciones de lenguaje máquina cuando seejecute el programa.

Con OPTIMIZE(*INTERPRET), los programas Java son de menor tamaño,pero se ejecutan con más lentitud que los programas Java creados con unnivel de optimización superior. A medida que el nivel de optimización seincrementa por encima de 10, el rendimiento de los programas Java vaaumentando de forma gradual, pero el tiempo que se necesita para crear elprograma Java también aumenta. Asimismo, cuanto más alto es el nivel deoptimización, más difícil resulta depurar el programa Java.

Normalmente, *INTERPRET es una buena opción en la fase de desarrollo yde pruebas iniciales debido a la importancia que tienen la rapidez en laedición, el tiempo total invertido en la compilación y la calidad ofrecidapor las funciones de depuración. A medida que el programa avanza haciala fase de release, el nivel de la optimización suele incrementarse.

La lista siguiente muestra en qué se diferencian los niveles de optimizacióny en qué consisten:

*SAMEEl valor no cambia.

10 El programa Java contiene una versión transformada de losbytecodes del archivo de clase, pero la optimización adicional decompilador que experimenta es mínima. Durante la depuración, sepueden visualizar y cambiar las variables.

20 El programa Java contiene una versión compilada de los bytecodesdel archivo de clase y experimenta una optimización adicional decompilador. Durante la depuración, se pueden visualizar lasvariables, pero no se pueden cambiar.

30 El programa Java contiene una versión compilada de los bytecodesdel archivo de clase y experimenta una optimización decompilador superior a la del nivel de optimización 20. Ladepuración resulta más difícil en los niveles superiores deoptimización porque ésta reduce la capacidad de detenerse enpuntos concretos del código y visualizar las variables delprograma. Durante la depuración, se pueden visualizar lasvariables, pero no se pueden cambiar. Los valores que se presentanpueden no ser el valor actual de la variable.

40 El programa Java contiene una versión compilada de los bytecodesdel archivo de clase y experimenta una optimización decompilador superior a la del nivel de optimización 30. Además,incluye una optimización que inhabilita el rastreo de las

82 AS/400 Developer Kit para Java

Page 91: AS400 Kit Desarrollo Para Java - Rzaha

instrucciones y las llamadas.Nota: si el programa Java no se optimiza o bien lanza unaexcepción en el nivel de optimización 40, utilice el nivel deoptimización 30.

*INTERPRETEl programa Java creado no contiene instrucciones específicas demáquina. Al iniciarse, el programa Java interpreta los bytecodes delarchivo de clase. Durante la depuración, se pueden visualizar ycambiar las variables.

ENBPFRCOL

El parámetro ENBPFRCOL especifica si se habilita o no la recogida dedatos de rendimiento.

*SAMEEl valor no cambia.

*NONENo se habilita la recogida de datos de rendimiento. No serecogerán datos de rendimiento.

*ENTRYEXITSe recogen datos de rendimiento de entrada y salida deprocedimientos.

*FULL Se recogen datos de rendimiento de entrada y salida deprocedimientos. También se recogen datos de rendimiento antes ydespués de las llamadas a procedimientos externos.

MERGE

El parámetro MERGE especifica si se fusionan los programas Javaconectados con un archivo JAR con el fin de tener el mínimo de programasJava posible. Si se procesa un archivo de clase Java, se hace caso omiso deeste parámetro.

*RPL Especifica que los programas Java conectados con un archivo JARse fusionarán sólo si es necesario volver a crear y sustituir losprogramas Java porque que están cambiando otros atributos deprograma Java. Si no se está cambiando ningún atributo y no esnecesario volver a crear y sustituir ningún programa Java, no serealizará la fusión de programas Java.

*YES Los programas Java conectados con un archivo JAR se fusionancon el fin de tener el mínimo de programas Java posible y ahorrarasí espacio en disco o bien mejorar el tiempo de carga de clases.

SUBTREE

El parámetro SUBTREE especifica si se procesan o no los subdirectorioscuando se busquen archivos que coincidan con la palabra clave CLSF.

*NONESólo se procesarán los archivos que coincidan con el patrón de

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 83

Page 92: AS400 Kit Desarrollo Para Java - Rzaha

nombre de objeto. No se procesará ningún subárbol. Si el directoriotiene subdirectorios, no se procesarán ni los subdirectorios ni losobjetos de los subdirectorios.

*ALL Se procesa la totalidad del subárbol de la vía de accesoespecificada en CLSF a fin de crear programas Java para archivosque coincidan con el nombre especificado en el parámetro CLSF.

LICOPT

El parámetro LICOPT especifica una o varias opciones de optimización entiempo de compilación del código interno bajo licencia. Este parámetrodeben utilizarlo únicamente los programadores avezados, que comprendenlas posibles ventajas e inconvenientes de cada tipo de optimizaciónseleccionado.

Nota: para obtener más información sobre la manera de utilizar lasoptimizaciones, debe ponerse en contacto con el servicio técnico.

*SAMEEl valor no cambia.

*OPTIMIZELa opción *OPTIMIZE utiliza el conjunto de optimizaciones entiempo de compilación que están asociadas implícitamente con elnivel de optimización especificado en el parámetro OPTIMIZE. Siespecifica OPTIMIZE(*INTERPRET), no se realizará ningunaoptimización en tiempo de compilación.

’serie-opciones’En Series del parámetro LICOPT hallará un listado de las seriesreconocidas.

En Ajustar el rendimiento de los programas Java con AS/400 Developer Kit paraJava hallará más información sobre rendimiento.

Consulte el apartado Ejemplo: Mandato Cambiar programa Java (CHGJVAPGM)para obtener un ejemplo de utilización del mandato CHGJVAPGM.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: Mandato Cambiar programa Java (CHGJVAPGM)Para cambiar un programa Java asociado con el archivo de clasemyJavaClassFileName, se utiliza el mandato Cambiar programa Java(CHGJVAPGM). Se interpretarán los bytecodes del archivo de clase del programa.Para iniciar el programa, se utiliza el mandato Ejecutar Java (RUNJVA). Elprograma Java se volverá a crear sólo si los atributos especificados son distintos delos del programa actual.

Ejemplo 1: cambiar un programa Java interpretadoCHGJVAPGM CLSF('/projectA/team2/myJavaClassFileName.class')

OPTIMIZE(*INTERPRET)

84 AS/400 Developer Kit para Java

Page 93: AS400 Kit Desarrollo Para Java - Rzaha

El ejemplo que se da a continuación es idéntico al Ejemplo 1, con la salvedad quese optimiza el programa. El programa se cambia con OPTIMIZE(10), por lo quecontiene instrucciones de lenguaje máquina compiladas que se ejecutan cuando seinicia el programa Java.

Ejemplo 2: cambiar un programa Java optimizado en un archivo JARCHGJVAPGM CLSF('/projectB/myJavaappfile.jar')

OPTIMIZE(10)

Consulte el apartado Mandato Cambiar programa Java (CHGJVAPGM) paraobtener un diagrama de sintaxis y detalles sobre los parámetros.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

El mandato JAVAEl mandato JAVA funciona de la misma forma exactamente que el mandatoEjecutar Java (RUNJVA). Puede utilizar ambos indistintamente. En El mandatoEjecutar Java (RUNJVA) hallará la información oportuna y los parámetros que seutilizan con el mandato JAVA.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

El mandato Ejecutar Java (RUNJVA)Propósito:

El mandato Ejecutar Java (RUNJVA) ejecuta el programa Java de AS/400 asociadocon la clase Java especificada. Si no existe ningún programa Java, se crea uno y seasocia con el archivo de clase.

Sintaxis:Mandato RUNJVA>>—RUNJVA—CLASS(—.-nombre_clase—.—)———————————————————>

| (1)|'-*VERSION——'

(P)>—.———————————————————————————————————->

| .-*NONE—————————. || | <————————-> (2)| |'-PARM(—'—-valor_parámetro———'—)-'

>—.———————————————-.—.—————————————.—————>| .-*ENVVAR——. | | .-*WARN—-. |'-CLASSPATH(—'-vía_acceso_clases-'—)-' '-CHKPATH(—+-*SECURE-+—)-'

'-*IGNORE-'>—.———————————————.—.———————————————.———->

| .-10————-. | | .-*OPTIMIZE-. |'-OPTIMIZE(—+-*INTERPRET-+—)-' '-INTERPRET(—+-*NO———-+—)-'

+-*JIT———-+ |-*YES———|+-20————-+ '-*JIT———'

+-30————-+'-40————-'

>—.——————————————————————————-.—————————>| .-*NONE————————————————-. || | <————————————————> (3)| |'-PROP(—'—-nombre_propiedad—valor_propiedad———-'—)-'

>—.———————————————————————————.—————————>| .-*NOMAX———————————————-. |

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 85

Page 94: AS400 Kit Desarrollo Para Java - Rzaha

'-GCHMAX(—'-tamaño_máx_almac_dinámico_recogida_basura-'—)-'>—.———————————————————————————.—————————>

| .-*2048————————————————. |'-GCHINL(—'-tamaño_inicial_almac_dinámico_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 demás parámetros seignoran.(2) 200 repeticiones como máximo.(P) Todos los parámetros que preceden a este punto pueden especificarse porposición.(3) 100 repeticiones como máximo.(4) 4 repeticiones como máximo.

Parámetros necesarios:

CLASS

El parámetro CLASS especifica el nombre de la clase que debe ejecutarse.El nombre de la clase puede estar calificado por uno o varios nombres depaquete. Cada nombre de paquete debe ir seguido de un punto. Porejemplo, CLASS(’paq1.paq2.miclase’) identifica una clase calificada por dosnombres de paquete.

Como nomb-clase, especifique el nombre de la clase que se ejecutará.

El límite para el parámetro CLASS es de 5000 caracteres.

*VERSIONSe visualiza la información de versión de Java Development Kit(JDK) de Sun Microsystems, Inc y de la máquina virtual Java. Nose ejecuta ningún programa Java.

Parámetros opcionales:

PARM

El parámetro PARM especifica uno o más valores de parámetro que sepasan al programa Java. Puede especificar 200 valores de parámetro comomáximo.

Como valor-parámetro, especifique los parámetros que deben pasarse alprograma Java.

El límite para el parámetro PARM es de 256 caracteres.

*NONENo hay parámetros de entrada para el programa Java.

CLASSPATH

86 AS/400 Developer Kit para Java

Page 95: AS400 Kit Desarrollo Para Java - Rzaha

El parámetro CLASSPATH especifica la vía de acceso utilizada paralocalizar las clases. Los directorios están separados por signos de dospuntos.

La vía de acceso de clases sirve para localizar las clases. Un ejemplo de víade acceso de clases es:'/directorio1/directorio2:/QIBM/ProdData/Java400'

El límite para el parámetro CLASSPATH es de 5000 caracteres.

*ENVVARLa vía de acceso de clases está determinada por la variable deentorno CLASSPATH.

CHKPATH

El parámetro CHKPATH especifica el nivel de los avisos que se dan paralos directorios de la vía de acceso de clases (CLASSPATH) que tenganautorización de grabación de uso público. Si un directorio de la vía deacceso de clases tiene autorización de grabación de uso público, representaun riesgo para la seguridad, ya que podría suceder que se insertase unclase no deseada en el directorio situado antes de la clase oficial.

*WARNPor cada directorio de la vía de acceso de clases que tengaautorización de grabación de uso público, se enviará un mensajede aviso a las anotaciones de trabajo QJVACMDSRV.

*SECURESe enviará un mensaje de aviso por cada directorio de la vía deacceso de clases que tenga autorización de grabación de usopúblico. Si se envían uno o varios mensajes de aviso, se enviará unmensaje de escape y no se ejecutará el programa Java.

*IGNORESe pasa por alto el hecho que los directorios de la vía de acceso declases puedan tener autorización de grabación de uso público. Nose envía ningún mensaje de aviso.

OPTIMIZE

El parámetro OPTIMIZE especifica el nivel de optimización del programaJava de AS/400 que se utiliza si no se ha asociado nunca ningún programaJava con la clase Java. La optimización es una operación que requieretiempo; es por ello que, si se utiliza el mandato RUNJVA en lugar deCRTJVAPGM, los programas se ejecutan con lentitud la primera vez que seoptimizan. Sin embargo, en ejecuciones posteriores se utiliza el formatooptimizado, con lo que la optimización es un coste fijo. Esto es así para losarchivos de clase, los archivos JAR y los archivos ZIP.

El efecto del parámetro OPTIMIZE depende del nivel de optimizaciónactual del programa y éste resulta de si se ha utilizado previamente elmandato RUNJVA o el mandato CRTJVAPGM.

Si no se ha ejecutado nunca el programa en AS/400 y, además, tampoco seha ejecutado previamente el mandato CRTJVAPGM, antes de ejecutar elprograma se utiliza el nivel de optimización seleccionado. Este nivel deoptimización está almacenado en el archivo de clase, JAR o ZIP.

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 87

Page 96: AS400 Kit Desarrollo Para Java - Rzaha

Si se ha ejecutado el mandato RUNJVA o CRTJVAPGM en el programa, elparámetro OPTIMIZE del mandato RUNJVA carece de efecto. El parámetroOPTIMIZE(*INTERPRET) es una excepción. Este parámetro obliga a quetodas las clases Java cargadas se ejecuten de manera interpretada sinimportar cuál sea el valor OPTIMIZE del programa Java asociado.

Si desea cambiar el nivel de la optimización de un programa que ya hayasido optimizado con anterioridad, utilice el mandato CRTJVAPGM oCHGJVAPGM. Si utiliza el mandato RUNJVA, éste no creará el nivel deoptimización deseado. En lugar de ello, utiliza el valor guardado que estáasociado con el archivo de clase, JAR o ZIP.

Nota: el parámetro *INTERPRET se comporta así con el fin de depurarcódigo previamente optimizado. No le obliga a tener que suprimir elprograma, volverlo a crear con una optimización baja, depurarlo yoptimizarlo de nuevo.

Si utiliza el parámetro OPTIMIZE(*INTERPRET), se verificará el programaJava resultante y se convertirá a un formato interno. A continuación, seinterpretará cuando se ejecute. En el caso de los demás niveles deoptimización, el formato interno incluye instrucciones de lenguaje máquinade AS/400. Éstas se optimizan tomando como base el nivel deoptimización especificado. El AS/400 ejecutará directamente lasinstrucciones de lenguaje máquina cuando se ejecute el programa.

Con OPTIMIZE(*INTERPRET), los programas Java son de menor tamaño,pero se ejecutan con más lentitud que los programas Java creados con unnivel de optimización superior. A medida que el nivel de optimización seincrementa por encima de 10, el rendimiento de los programas Java vaaumentando de forma gradual, pero el tiempo que se necesita para crear elprograma Java también aumenta. También resulta más difícil depurar elprograma Java.

Normalmente, *INTERPRET es una buena opción en la fase de desarrollo yde pruebas iniciales debido a la importancia que tienen la rapidez en laedición, el tiempo total invertido en la compilación y la calidad ofrecidapor las funciones de depuración. A medida que el programa avanza haciala fase de release, el nivel de la optimización suele incrementarse.

La lista siguiente muestra en qué se diferencian los niveles de optimizacióny en qué consisten:

10 El programa Java contiene una versión transformada de losbytecodes del archivo de clase, pero la optimización adicional decompilador que experimenta es mínima. Durante la depuración, sepueden visualizar y cambiar las variables.

*INTERPRETEl programa Java creado no contiene instrucciones específicas demáquina. Al iniciarse el programa Java, se interpreta. Durante la

depuración, se pueden visualizar y cambiar las variables.

*JIT No se crea ningún programa Java que contenga secuencias deinstrucciones de máquina. La clase se ejecuta mediante el

compilador Just-In-Time (JIT).

20 El programa Java contiene una versión compilada de los bytecodesdel archivo de clase y experimenta una optimización adicional decompilador. Durante la depuración, se pueden visualizar y cambiarlas variables.

88 AS/400 Developer Kit para Java

Page 97: AS400 Kit Desarrollo Para Java - Rzaha

30 El programa Java contiene una versión compilada de los bytecodesdel archivo de clase y experimenta una optimización decompilador superior a la del nivel de optimización 20. Ladepuración resulta más difícil en los niveles superiores deoptimización porque ésta reduce la capacidad de detenerse enpuntos concretos del código y visualizar las variables delprograma.

40 El programa Java contiene una versión compilada de los bytecodesdel archivo de clase y experimenta una optimización decompilador superior a la del nivel de optimización 30. Además,incluye una optimización que inhabilita el rastreo de lasinstrucciones y las llamadas.Nota: si el programa Java no se optimiza o bien lanza unaexcepción en el nivel de optimización 40, utilice el nivel deoptimización 30.

INTERPRET

El parámetro INTERPRET especifica si todos los archivos de clase Javadeben ejecutarse de forma interpretada.

OPTIMIZELos archivos de clase Java se ejecutarán de forma interpretada enfunción del valor especificado para el parámetro OPTIMIZE. Si seha especificado OPTIMIZE(*INTERPRET), todos los archivos declase Java se ejecutarán de forma interpretada. Si se ha especificadocualquier otro valor para el parámetro OPTIMIZE, sólo seejecutarán de forma interpretada los archivos de clase Java conprogramas Java creados mediante el mandato CRTJVAPGM y conOPTIMIZE(*INTERPRET).

*NO Sólo se ejecutarán de forma interpretada los archivos de clase Javacon programas Java creados mediante el mandato CRTJVAPGM ycon OPTIMIZE(*INTERPRET). Los archivos de clase Java quenecesitan crear un programa Java se crearán con el nivel deoptimización especificado en el parámetro OPTIMIZE.

*YES Todos los archivos de clase Java se ejecutarán de formainterpretada independientemente del valor OPTIMIZE con el quese haya creado el programa Java asociado. Los archivos de claseJava que necesitan crear un programa Java se crearán con el nivel

de optimización especificado en el parámetro OPTIMIZE.

*JIT Todos los archivos de clase Java se ejecutan mediante elcompilador Just-In-Time (JIT), independientemente del valor de

OPTIMIZE utilizado al crear el programa Java asociado.

PROP

El parámetro PROP especifica una lista de valores que deben asignarse apropiedades del sistema Java. Se pueden asignar 100 propiedades comomáximo.

El límite para el parámetro PROP es de 5000 caracteres para nombre y

valor.

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 89

Page 98: AS400 Kit Desarrollo Para Java - Rzaha

*NONENo se especifica ninguna propiedad.

Como nombre-propiedad, especifique el nombre de la propiedad que debecambiarse.

Como valor-propiedad, especifique el valor que se asignará a la propiedad.

GCHMAX

El parámetro GCHMAX especifica la memoria, en kilobytes, que puedeasignar como máximo la máquina virtual Java. Normalmente, convieneutilizar el valor por omisión o bien establecer un valor lo más alto posible.No obstante, si le preocupa que un programa pueda utilizar toda lamemoria disponible, puede establecer GCHMAX en un valor más bajo. Elvalor por omisión depende del sistema y del modelo.

Si la asignación de memoria de la máquina virtual Java llega a GCHMAX,todas las demás hebras de la máquina virtual Java estarán detenidasmientras tiene lugar la recogida de basura. Si ésta no puede reducir laasignación de memoria, la máquina virtual Java se detiene.

*NOMAXEl almacenamiento dinámico de recogida de basura crecerá hastaque desaparezcan todos los recursos del sistema. A continuación, seiniciará una recogida de basura síncrona para reclamar los recursosque ya no se utilizan. Con *NOMAX, la recogida de basurasíncrona se produce sólo si se ha utilizado la totalidad delalmacenamiento dinámico disponible.

GCHINL

El parámetro GCHINL recomienda un valor umbral para la recogida debasura inicial. Si este valor es igual a GCHMAX, la recogida de basura nose ejecuta hasta que la memoria asignada por la máquina virtual Java seacerca a GCHMAX. Si se establece un valor más pequeño, la recogida debasura se disparará antes. El valor por omisión depende del sistema y delmodelo.

GCFRQ

Nota: ya no se da soporte a este parámetro. Existe únicamente porcompatibilidad con los releases anteriores a la Versión 4 Release 3Modificación 0 del sistema AS/400.

El parámetro GCFRQ sugiere una frecuencia de recogida de basura. Enfunción del modelo y del release del sistema, es posible que se respete ono.

Para GCFRQ, se permiten valores comprendidos entre 0 y 100. Elparámetro por omisión es 50. Cuanto más bajo sea el valor, menor será lafrecuencia de recogida de basura. Cuanto más alto sea el valor, mayor serála frecuencia de recogida de basura.

GCPTY

Nota: ya no se da soporte a este parámetro. Existe únicamente porcompatibilidad con los releases anteriores a la Versión 4 Release 3Modificación 0 del sistema AS/400.

90 AS/400 Developer Kit para Java

Page 99: AS400 Kit Desarrollo Para Java - Rzaha

El parámetro GCPTY sugiere una prioridad de recogida de basura. Enfunción del modelo y del release del sistema, es posible que se respete ono.

El parámetro GCPTY especifica la prioridad relativa de las hebras queejecutan la recogida de basura. La prioridad es relativa a las hebras Java deusuario por omisión. Cuanto más alto sea el valor, más alta será laprioridad. Si una hebra de recogida de basura tiene una prioridad baja, laprobabilidad de que se ejecute es menor porque se ejecutarán otras hebrasde mayor prioridad.

En la mayoría de los casos, GCPTY debe definirse con el valor por omisióno con el valor de prioridad más alto. Si se define GCPTY con el valor deprioridad más bajo, puede inhibirse la recogida de basura y provocar laretención de todas las hebras Java mientras el recogedor de basura liberaalmacenamiento.

20 El valor por omisión del parámetro es 20. Esto indica que la hebrade recogida de basura tiene la misma prioridad que las hebras Javade usuario por omisión.

30 La prioridad 30 da a la recogida de basura una prioridad más altaque la de las hebras Java de usuario por omisión. La recogida debasura tiene una probabilidad mayor de ejecutarse.

10 La prioridad 10 da a la recogida de basura una prioridad más bajaque la de las hebras Java de usuario por omisión. La recogida debasura tiene una probabilidad menor de ejecutarse.

OPTION

El parámetro OPTION especifica las opciones especiales que se utilizan alejecutar una clase Java.

*NONENo se utiliza ninguna opción especial al ejecutar una clase Java.

*DEBUGPermite la utilización del depurador del sistema AS/400 para elprograma Java.

*VERBOSESe visualiza un mensaje cada vez que se carga un archivo de clase.

*VERBOSEGCSe visualiza un mensaje por cada pase de la recogida de basura.

*NOCLASSGCNo se reclaman las clases no utilizadas cuando se ejecuta larecogida de basura.

En Ejemplo: utilización del mandato Ejecutar Java (RUNJVA) hallará un ejemplo enel que se utiliza el mandato RUNJVA.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 91

Page 100: AS400 Kit Desarrollo Para Java - Rzaha

Ejemplo: utilización 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 einformación detallada sobre los parámetros.

[ Página de presentación de InformationCenter | 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 parámetros que preceden a este punto pueden especificarse porposición.

Propósito:

El mandato Suprimir programa Java (DLTJVAPGM) suprime un programa Java deAS/400 asociado con un archivo de clase Java, un archivo ZIP o un archivo JAR. Sino hay ningún programa Java asociado con el archivo especificado, se envía elmensaje informativo JVAB526 y prosigue el proceso del mandato.

Parámetros:

CLSF

El parámetro CLSF especifica el nombre del archivo de clase, ZIP o JAR delque debe suprimirse en AS/400 el programa Java asociado. El nombre delarchivo de clase puede estar calificado por uno o varios nombres dedirectorio.

Como nombre-archivo-clase, especifique el nombre del archivo de clase oun patrón que identifique el archivo o archivos que deben utilizarse. Puedeespecificar el patrón al final del nombre. Un asterisco equivale a unnúmero cualquiera de caracteres y un signo de interrogación equivale a unsolo carácter. Si el nombre está calificado o contiene un patrón, debe irentre apóstrofos. Un ejemplo de nombre de clase calificado es:'/directorio1/directorio2/nombremiclase.class'

SUBTREE

El parámetro SUBTREE especifica si se procesan o no los subdirectorioscuando se busquen archivos que coincidan con la palabra clave CLSF.

*NONESólo se procesarán los archivos que coincidan con el patrón de

92 AS/400 Developer Kit para Java

Page 101: AS400 Kit Desarrollo Para Java - Rzaha

nombre de objeto. No se procesará ningún subárbol. Si el directoriotiene subdirectorios, no se procesarán ni los subdirectorios ni losobjetos de los subdirectorios.

*ALL Se procesa la totalidad del subárbol de la vía de accesoespecificada en CLSF a fin de crear programas Java para archivosque coincidan con el nombre especificado en el parámetro CLSF.

En Ejemplo: mandato Suprimir programa Java (DLTJVAPGM) hallará un ejemploen el que se utiliza el mandato DLTJVAPGM.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: mandato Suprimir programa Java (DLTJVAPGM)El mandato Suprimir programa Java (DLTJVAPGM) suprime el programa Java queestá asociado con el archivo de clase especificado, que se llamamyJavaClassFileName.

Nota: el mandato Suprimir programa Java (DLTJVAPGM) no suprime el archivo declase 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 desintaxis e información detallada sobre los parámetros.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Mandato Volcar máquina virtual Java (DMPJVM)

Propósito:

El mandato Volcar máquina virtual Java (DMPJVM) vuelca información acerca dela máquina virtual Java para un trabajo especificado. El vuelco incluye informaciónformateada acerca de la vía de acceso de clases, recogida de basura y hebrasasociadas con la máquina virtual Java.

Sintaxis:Mandato DMPJVM

(1)>>—DMPJVM——-.——————————————————————————.—->

| .-*SRVJOB———————————————-. |'-JOB(—'-.————————————-.—nombre_trabajo-'—)-'

'-.—————-.—nombre_usuario/-''-número_trabajo/-'

>—.——————————————.—.——————————————.————><| .-10——-. | | .-*SELECT-. |'-STACKFRAME(—+-*ALL—-+—)-' '-DUPJOBOPT(—'-*MSG——'—)-'

'-número-'

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 93

Page 102: AS400 Kit Desarrollo Para Java - Rzaha

Notas: Todos los parámetros que preceden a este punto pueden especificarse porposición.

Restricciones:

v El mandato DMPJVM utiliza los mandatos Iniciar trabajo de servicio(STRSRVJOB) e Iniciar depuración (STRDBG). El usuario de este mandato debetener autorización sobre los mandatos STRSRVJOB y STRDBG.

v El mandato DMPJVM se suministra con la autorización de uso público*EXECUTE, y los perfiles de usuario QPGMR, QSYSOPR, QSRV y QSRVBAStienen autorizaciones privadas para utilizar el mandato DMPJVM.

v El mandato DMPJVM debe ejecutarse bajo un perfil de usuario, que es el mismoque la identidad de usuario de trabajo del trabajo de la máquina virtual Java, oque tenga la autorización de uso (*USE) sobre la identidad de usuario de trabajodel trabajo de la máquina virtual Java.

v El mandato DMPJVM no está permitido si se ha iniciado la operación deservicio remoto para otro trabajo, y dicho trabajo no es el mismo que elespecificado en este mandato.

v El mandato DMPJVM no está permitido si el trabajo de la máquina virtual Javaestá retenido, suspendido o finalizando.

Parámetros opcionales:

JOB El parámetro JOB especifica el nombre del trabajo que en el que se estáejecutando la máquina virtual Java. Si no se suministra ningún nombre detrabajo, el nombre simple del trabajo se busca en todos los trabajos que seencuentran actualmente en el sistema. El nombre de trabajo especificadodebe ser un trabajo en el que se esté ejecutando actualmente una máquinavirtual Java.

*SRVJOBSe vuelca información acerca de la máquina virtual Java en eltrabajo al que se está dando servicio actualmente. Si actualmenteno se está dando servicio a ningún trabajo, es necesario unidentificador de trabajo.

Un identificador de trabajo es un nombre calificado con treselementos como máximo. Por ejemplo:v nombre_trabajov nombre_usuario/nombre_trabajov número_trabajo/nombre_usuario/nombre_trabajo

nombre_trabajoEspecifica el nombre del trabajo de la máquina virtual Java.

nombre_usuarioEspecifica el nombre de usuario del trabajo de la máquina virtualJava.

nombre_trabajoEspecifica el número del trabajo de la máquina virtual Java.

STACKFRAMEEl parámetro STACKFRAME especifica el número máximo de tramas depila para cada hebra que debe procesarse. Este valor debe ser mayor quecero y no puede ser mayor que 100. Si existen más tramas que el número

94 AS/400 Developer Kit para Java

Page 103: AS400 Kit Desarrollo Para Java - Rzaha

especificado en una pila de hebras, se procesan las tramas más recientes dela pila y ’...’ indica que no se han procesado todas las tramas de la pila.

10 Cada hebra procesa un máximo de diez tramas de pila.

*ALL Cada hebra procesa todas las tramas de pila. Ai una hebra tienemás de 100 tramas de pila, sólo se procesan las 100 primerastramas.

númeroEl número máximo (1-100) de tramas de pila que procesa la hebra.

DUPJOBOPTEspecifica la acción que debe realizarse cuando el mandato DMPJVMencuentra trabajos duplicados.

*SELECTCuando el mandato DMPJVM encuentra trabajos duplicadosdurante una sesión interactiva, se muestra la pantalla de selección.De lo contrario, se emite un mensaje de escape.

*MSG Cuando el mandato DMPJVM encuentra trabajos duplicados, seemite un mensaje de escape.

Consulte el apartado Ejemplo: mandato Volcar máquina virtual Java (DMPJVM)

para obtener un ejemplo de utilización del mandato DMPJVM.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: Mandato Volcar máquina virtual Java (DMPJVM)El mandato Volcar máquina virtual Java (DMPJVM) vuelca información acerca

de la máquina virtual Java para un trabajo especificado.

Ejemplo 1: Volcar una máquina virtual JavaDMPJVM JOB(099246/FRED/QJVACMDSRV)

El mandato DMPJVM vuelca la información de la máquina virtual Java que se estáejecutando en el trabajo denominado 099246/FRED/QJVACMDSRV.

Salida del ejemplo:INFORMACIÓN DE MÁQUINA VIRTUAL JAVA: 099246/FRED/QJVACMDSRV....................................................................... Vía de acceso de clases......................................................................

/QIBM/ProdData/Java400/jdk117/lib/jdkptf117.zip:/QIBM/ProdData/Java400/jdk117/lib/classes.zip:/QIBM/ProdData/Java400/ext/IBMmisc.jar:/QIBM/ProdData/Java400/ext/db2_classes.jar:/QIBM/ProdData/Java400/ext/jssl.jar:/QIBM/ProdData/Java400/ext/ibmjssl.jar:/QIBM/ProdData/Java400/:/home/fred....................................................................... Recogida de basura......................................................................

Parámetros del recogedor de basuraTamaño inicial: 2048 KTamaño máximo: *NOMAX

Valores actualesTamaño de almacenamiento dinámico: 9476 K

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 95

Page 104: AS400 Kit Desarrollo Para Java - Rzaha

Recogidas de basura: 0....................................................................... Información de hebras......................................................................

Información para 3 hebra(s) de 3 hebra(s) procesadasHebra: 00000001 Hebra-0TDE: B000200002941000Prioridad de hebra: 5Estado de hebra: Destrucción en esperaGrupo de hebra: principalEjecutable: java/lang/Thread

Pila:Ninguna

Bloqueos:Ninguno

......................................................................Hebra: 00000003 t2TDE: B000100005B37000Prioridad de hebra: 5Estado de hebra: En esperaGrupo de hebra: principalEjecutable: 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;Ljavatring;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Stri0 (dbgtest2.java:15)

dbgtest2.run()V+69 (dbgtest2.java:44)java/lang/Thread.run()V+11 (Thread.java:466)

Bloqueos:Ninguno

......................................................................Hebra: 00000002 t1TDE: B000100005B33000Prioridad de hebra: 5Estado de hebra: Espera Java

Grupo de hebra: principalEjecutable: 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;Ljavatring;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

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

[ Página de presentación de InformationCenter | 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

Page 105: AS400 Kit Desarrollo Para Java - Rzaha

Nota:

Todos los parámetros que preceden a este punto pueden especificarse por posición.

Propósito:

El mandato Visualizar programa Java (DSPJVAPGM) visualiza en AS/400información sobre un programa Java. La información incluye los atributos decreación y proceso como, por ejemplo, el nivel de optimización y el tamaño.

Parámetros:

CLSF El parámetro CLSF especifica el nombre del archivo de clase, ZIP o JAR delque debe visualizarse en el AS/400 el programa Java asociado. El nombredel archivo de clase puede estar calificado por uno o varios nombres dedirectorio.

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'

OUTPUTEl parámetro OUTPUT especifica a dónde debe enviarse la salida.

* La salida solicitada por un trabajo interactivo se muestra en lapantalla. La salida solicitada por un trabajo de proceso por lotes seimprime con la salida en spool del trabajo.

*PRINTLa 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 Visualizarprograma Java (DSPJVAPGM) para un archivo ZIP.+————————————————————————————————————————+

Visualizar información de programa JavaNombre de archivo . . . . . . . . . . . : /usuario/clases.zip1Propietario . . . . . . . . . . . . . . : USER2Información de creación de programa Java:Fecha/hora de cambio de archivo . . . . . . . . : 18/07/98 09:03:373Fecha/hora de creación de programa Java . . . . : 18/07/98 14:03:384Programas Java . . . . . . . . . . . . . . . . : 15Clases con programas Java actuales . . . . . . : 16Clases sin programas Java actuales . . . . . . : 07Optimización . . . . . . . . . . . . . . . . . : *INTERPRET8Habilitar recogida de rendimiento . . . . . . . : *NONE9Utilizar autorización adoptada . . . . . . . . : *NO10Perfil de usuario . . . . . . . . . . . . . . . : *USER11Opciones de Código Interno bajo Licencia . . . : ErrorReporting=012

Estadísticas de programa Java:Tamaño de programa Java . . . . . . . . . . . . : 270745613Release de programa . . . . . . . . . . . . . . : V4R5M014

FinalPulse Intro para continuar.

+————————————————————————————————————————+

1. Nombre de archivo: nombre del archivo que tiene conectado un programaJava.Nota: debe tener autorización *USE sobre el archivo de clase cuyo programaJava se ha de visualizar.

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 97

Page 106: AS400 Kit Desarrollo Para Java - Rzaha

2. Propietario: nombre del perfil de usuario que es propietario del programaJava.

3. Fecha/hora de cambio de archivo: fecha y hora en que se ha modificado porúltima vez el archivo.

4. Fecha/hora de creación de programa Java: si se trata de un archivo ZIP, es lafecha y la hora en que se ha conectado el primer programa Java con elarchivo. Si se trata de un archivo de clase, es la fecha y la hora en que se hacreado el programa Java.

5. Programas Java: indica el número de programas Java que están asociados conel archivo.Nota: si se desea conseguir el mejor rendimiento posible, el número deprogramas Java debe ser bajo (1 ó 2). El número de programas Java será altosi éstos se han creado de forma implícita. Esto sucede cuando se ejecuta unprograma Java y las clases del archivo JAR se han cargado antes de ejecutarseel mandato Crear programa Java (CRTJVAPGM) en el archivo JAR. Si elnúmero de programas Java es alto, tal vez le interese utilizar la funciónCHGJVAPGM MERGE(*YES) para consolidar los programas y mejorar elrendimiento del cargador de clases. Si el número de clases es bajo y el númerode programas Java es alto, la razón puede ser que se hayan realizado varioscambios en las clases del archivo JAR. También en este caso, puede utilizar elmandato CRTJVAPGM o CHGJVAPGM para consolidar los programas.

6. Clases con programas Java actuales: indica el número de clases del archivoque tienen programas Java actuales.

7. Clases sin programas Java actuales: indica el número de clases del archivoque no tienen programas Java actuales.Nota: si se desea conseguir el mejor rendimiento posible, el número de clasessin programas Java actuales debe ser bajo. Si el número de clases sinprogramas Java actuales es alto, tal vez le interese utilizar el mandatoCRTJVAPGM para actualizar el programa.

8. Optimización: especifica el nivel de optimización del programa Java deAS/400. Si es OPTIMIZE(*INTERPRET), el programa Java resultante interpretalos bytecodes del archivo de clase al iniciarse. Si se trata del uno de los nivelesde actualización restantes, el programa Java contiene secuencias deinstrucciones de lenguaje máquina que se ejecutan al iniciarse el programaJava. Los programas Java que utilizan OPTIMIZE(*INTERPRET) son de menortamaño, pero se ejecutan con más lentitud que los programas Java creados conun nivel de optimización superior. A medida que se incrementa el nivel deoptimización por encima de 10, el rendimiento del programa Javanormalmente mejora. No obstante, el tiempo que se necesita para crear elprograma Java aumenta y la depuración resulta más difícil.La lista siguiente muestra en qué se diferencian los niveles de optimización yen qué consisten:

10 El programa Java contiene una versión compilada de los bytecodes delarchivo de clase, pero la optimización adicional de compilador queexperimenta es mínima. Durante la depuración, se pueden visualizar ycambiar las variables.

20 El programa Java contiene una versión compilada de los bytecodes delarchivo de clase y experimenta una optimización adicional decompilador. Durante la depuración, se pueden visualizar las variables,pero no se pueden cambiar.

30 El programa Java contiene una versión compilada de los bytecodes delarchivo de clase y experimenta una optimización de compiladorsuperior a la del nivel de optimización 20. La depuración resulta más

98 AS/400 Developer Kit para Java

Page 107: AS400 Kit Desarrollo Para Java - Rzaha

difícil en los niveles superiores de optimización porque ésta reduce lacapacidad de detenerse en puntos concretos del código y visualizar lasvariables del programa. Durante la depuración, se pueden visualizarlas variables, pero no se pueden cambiar. Los valores que se presentanpueden no ser el valor actual de la variable.

40 El programa Java contiene una versión compilada de los bytecodes delarchivo de clase y experimenta una optimización de compiladorsuperior a la del nivel de optimización 30. Además, incluye unaoptimización que inhabilita el rastreo de las instrucciones y lasllamadas.Nota: si el programa Java no se optimiza o bien lanza una excepciónen el nivel de optimización 40, utilice el nivel de optimización 30.

*INTERPRETEl programa Java no se optimiza. Al iniciarse, el programa Javainterpreta los bytecodes del archivo de clase. Durante la depuración,se pueden visualizar y cambiar las variables.

9. Habilitar recogida de rendimiento: es el nivel de recogida de datos derendimiento que está permitido al programa Java. Los valores devueltospueden ser:

*NONELa recogida de rendimiento no está habilitada para el programa Java.

*ENTRYEXITFacilita información sobre las entradas y las salidas de todos losprocedimientos del programa Java, incluidos los que han sidoprocedimientos hoja. Esto incluye también la rutina PEP. *ENTRYEXITresulta útil para capturar información referente a todos losprocedimientos.

*FULL Facilita información sobre las entradas y las salidas de todos losprocedimientos del programa Java, incluidos los que han sidoprocedimientos hoja. así como también los ganchos de prellamada ypostllamada relativos a las llamadas a otros procedimientos. *FULLresulta útil para capturar información referente a todos losprocedimientos.

10. Utilizar autorización adoptada: indica si los programas Java utilizan laautorización adoptada procedente de los niveles de llamadas anteriores de lapila.

11. Perfil de usuario: indica si la comprobación de autorización realizadamientras se ejecuta el programa debe incluir únicamente al usuario que estáejecutando el programa (*USER) o bien a dicho usuario y al propietario delprograma (*OWNER).

12. Opciones de Código Interno bajo Licencia: Las opciones de compilacióndel código interno bajo licencia (LIC) seleccionadas que se utilizan al crear el

programa Java.13. Tamaño de programa Java: El tamaño, 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 ejemploen el que se utiliza el mandato DSPJVAPGM.

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 99

Page 108: AS400 Kit Desarrollo Para Java - Rzaha

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: mandato Visualizar programa Java (DSPJVAPGM)El mandato Visualizar programa Java (DSPJVAPGM) visualiza el programa Javaque está asociado con el archivo de clase especificado, que se llamamyJavaClassFileName.

Ejemplo 1: visualizar un programa JavaDSPJVAPGM

CLSF('/projectA/team2/myJavaClassFileName.class')OUTPUT(*)

En El mandato Visualizar programa Java (DSPJVAPGM) hallará el diagrama desintaxis e información detallada sobre los parámetros.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Mandatos de Operations Navigator a los que da soporte JavaAS/400 Operations Navigator es una interfaz gráfica para el escritorio deWindows. Forma parte de Client Access para Windows y suple muchas de lasfunciones de AS/400 que los administradores o los usuarios han de llevar a caboen su trabajo diario.

Operations Navigator da soporte a Java como conector de terceros. Para instalar elconector de terceros, es necesario instalar AS/400 Developer Kit para Java en elAS/400. A continuación, debe instalarse AS/400 Developer Kit para Java en el PCmediante la opción Instalación selectiva de la carpeta Client Access.

Los archivos de clase residen en el sistema de archivos integrado. OperationsNavigator permite verlos en el panel de la derecha. Pulse con el botón derecho delratón en el archivo de clase que desee utilizar. Con ello aparecerá un menú decontexto.

Si selecciona Programa Java nuevo en el menú de contexto, se iniciará eltransformador Java, que creará un programa Java de AS/400 asociado con elarchivo de clase. Un recuadro de diálogo permite especificar información detalladasobre la manera de crear el programa, que puede ser para transformación Java opara interpretación Java.

Nota: si selecciona transformación, los bytecodes del archivo de clase setransformarán en instrucciones RISC, lo que da como resultado mejor rendimientoque la interpretación.

La opción Cambiar programa Java del menú de contexto sirve para cambiar losatributos de los programas Java que están conectados con archivos de clase Java,archivos ZIP o archivos JAR.

Si selecciona Ejecutar programa Java en el menú de contexto, se ejecutará elarchivo de clase en AS/400. Aparecerá un diálogo que permite especificarinformación detallada sobre la manera de ejecutar el programa. Si ya haseleccionado Programa Java nuevo, al ejecutar el programa se utilizará el

100 AS/400 Developer Kit para Java

Page 109: AS400 Kit Desarrollo Para Java - Rzaha

programa Java de AS/400 que está asociado con el archivo de clase. Si no hayningún programa Java de AS/400 asociado todavía con el archivo de clase, secreará antes de ejecutar el programa.

Si selecciona Suprimir programa Java en el menú de contexto, se suprimirá elprograma Java de AS/400 que está asociado con el archivo de clase.

Si desea saber cuáles son los parámetros y las opciones de los mandatos ProgramaJava nuevo, Cambiar programa Java, Ejecutar programa Java y Suprimirprograma Java de Operations Navigator, consulte la información de ayuda enlínea.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 4. Mandatos y herramientas de AS/400 Developer Kit para Java 101

Page 110: AS400 Kit Desarrollo Para Java - Rzaha

102 AS/400 Developer Kit para Java

Page 111: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 5. Utilización de Java con otros lenguajes deprogramación

Con Java existen varias maneras de llamar al código escrito en un lenguaje distintode Java.

Java Native Interface:

Una de las formas de llamar a código escrito en otro lenguaje es implementarmétodos Java seleccionados como ’métodos nativos’. Los métodos nativos sonprocedimientos, escritos en otro lenguaje, que proporcionan la implementación realde un método Java. Los métodos nativos pueden acceder a la máquina virtual Javautilizando Java Native Interface (JNI). Estos métodos nativos se ejecutan en lahebra Java, que es una hebra del kernel, por lo que han de ser seguros en ejecuciónmultihebra. Una función es segura en ejecución multihebra si puede iniciarsesimultáneamente en varias hebras dentro de un mismo proceso. Asimismo, lo es, siy sólo si, todas las funciones a las que llama lo son también.

Los métodos nativos constituyen el “puente” que permite acceder a las funcionesdel sistema a las que Java no da soporte directamente o que actúa de interfaz conel código de usuario existente. A la hora de utilizar métodos nativos, conviene serprecavido porque el código al que se llama puede no ser seguro en ejecuciónmultihebra. En Utilización de Java Native Interface para emplear métodos nativoshallará más información sobre JNI y los métodos nativos.

java.lang.Runtime.exec():

Para llamar a programas o mandatos desde dentro de un programa Java, puedeutilizar java.lang.Runtime.exec(). El método exec() inicia otro proceso en el que sepuede ejecutar cualquier mandato o programa de AS/400. En este modelo, para lacomunicación entre procesos se puede utilizar la corriente de entrada, de salida yde error estándar del proceso hijo.

Comunicación entre procesos:

Una opción es utilizar sockets para la comunicación entre el proceso padre y elproceso hijo.

También se pueden utilizar archivos continuos para la comunicación entreprogramas. En Ejemplos de comunicación entre procesos se da una visión generalde las opciones con que se cuenta en la comunicación con programas que seejecutan en otro proceso.

Para realizar llamadas a Java desde otros lenguajes, consulte Llamadas a Javadesde otros lenguajes.

Asimismo, para llamar en AS/400 a mandatos y programas existentes, puedeutilizar AS/400 Toolbox para Java. Con este producto, para la comunicación entreprocesos se suelen utilizar mensajes de AS/400 y colas de datos.

© Copyright IBM Corp. 1998, 1999 103

Page 112: AS400 Kit Desarrollo Para Java - Rzaha

Nota: la utilización de Runtime.exec(), AS/400 Toolbox para Java o JNI puedeponer en peligro la portabilidad del programa Java. Debe evitar el uso de estosmétodos en un entorno Java “puro”.

Java Invocation API:

La utilización de Java Invocation API, que forma parte también de la especificaciónJava Native Interface (JNI), permite que una aplicación no Java utilice la máquinavirtual Java. También permite utilizar código Java como ampliación de laaplicación.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Utilización de Java Native Interface para emplear métodos nativosLos métodos nativos deben utilizarse únicamente en aquellos casos en que Javapuro no responde a las necesidades de programación. Debe limitar el uso demétodos nativos y emplearlos sólo en las circunstancias siguientes:v Para acceder a funciones del sistema que no están disponibles por medio de Java

puro.v Para implementar métodos extremadamente sensibles al rendimiento que

pueden beneficiarse en gran medida de una implementación 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 métodos nativos, sigalos pasos indicados a continuación:

1. Diseñe la clase especificando por medio de la sintaxis estándar del lenguajeJava qué métodos serán nativos.

2. Escoja un nombre de biblioteca y programa para el programa de servicio(*SRVPGM) que contiene las implementaciones de método nativo. Cuandocodifique la llamada a método System.loadLibrary() en el inicializador estáticode la clase, especifique el nombre del programa de servicio.

3. Utilice la herramienta javac para compilar el fuente Java y obtener un archivode clase.

4. Utilice la herramienta javah para crear el archivo de cabecera (.h). Éstecontiene los prototipos exactos para crear las implementaciones de métodonativo. La opción -d especifica el directorio en el que debe crearse el archivode cabecera.

5. Copie el archivo de cabecera desde el sistema de archivos integrado en unmiembro de un archivo fuente; para ello, utilice el mandato Copiar desdearchivo continuo (CPYFRMSTMF). Debe copiar el archivo de cabecera en unmiembro de archivo fuente para que el compilador C pueda utilizarlo. Utiliceel nuevo soporte de archivos continuos del mandato Crear programa ILEC/400 enlazado lógicamente (CRTCMOD) para dejar los archivos fuente y decabecera C en el sistema de archivos integrado. Para obtener más informaciónsobre el mandato CRTCMOD y la utilización de archivos continuos, consulte

la publicación ILE C Programmer’s Guide, SC09-2712.6. Escriba el código de método nativo. En Consideraciones en torno a las hebras

y los métodos nativos Java hallará información detallada sobre los lenguajes ylas funciones que se utilizan para emplear métodos nativos.

104 AS/400 Developer Kit para Java

Page 113: AS400 Kit Desarrollo Para Java - Rzaha

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 máquina

virtual Java. En Codificaciones de caracteres Java hallará más información.7. Si el método nativo ha de interactuar con la máquina virtual Java, utilice las

funciones que se proporcionan con JNI.8. Compile el código fuente C con CRTCMOD para obtener un objeto de módulo

(*MOD).9. Enlace uno o varios objetos de módulo 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 elnombre que ha proporcionado en el código Java que se halla en las llamadas afunción System.load() o System.loadLibrary().

10. Si ha utilizado la llamada ’System.loadLibrary()’ en el código Java, realice unade las siguientes acciones.

Si está utilizando una versión anterior a J2SDK:Añada la biblioteca de AS/400 que contiene el nuevo programa de servicio ala lista de bibliotecas de AS/400. Para ello, utilice el mandato Añadir entradade lista de bibliotecas (ADDLIBLE). Esto permitirá al programa Java buscar elprograma de servicio cuando procese la función 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 líneade mandatos de AS/400.– En el indicador de mandatos de Qshell, escriba:

export LIBPATH=/QSYS.LIB/MYLIB.LIBjava -Djava.version=1.2 myclass

– O, en la línea 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 lapropiedad java.library.path en QShell y desde la línea de mandatos deAS/400.– En el indicador de mandatos de Qshell, escriba:

java -Deja.library.path=/QSYS.LIB/MYLIB.LIB -Djava.version=1.2myclass

– O, en la línea 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 lallamada ’System.loadLibrary()’, y myclass es el nombre de la aplicación Java.

11.

La sintaxis de vía de acceso de System.load(String nombrevía) puede ser:v “vía de acceso” (nombre de archivo del sistema de archivos integrado que

especifica la biblioteca que el programa de servicio proporciona), que es unenlace simbólico con un programa de servicio (*SRVPGM) como, porejemplo, “/qsys.lib/mylib.lib/myNMsp.srvpgm”

Capítulo 5. Utilización de Java con otros lenguajes de programación 105

Page 114: AS400 Kit Desarrollo Para Java - Rzaha

v /qsys.lib/sysNMsp.srvpgmv /qsys.lib/mylib.lib/myNMsp.srvpgm

v Si tiene una versión anterior a J2SDK:

/qsys.lib/%libl%.lib/myNMsp.srvpgmNota: esto equivale a utilizar el método System.loadLibrary(“myNMsp”).

Nota: si se utiliza “nombrevía” como literal de tipo serie, debe ir entrecomillas. Por ejemplo, System.load(“/qsys.lib/mylib.lib/myNMsp.srvpgm”).

12.

La sintaxis de “libya” de System.loadLibrary(String libya) es mysp. El sistemabusca mysp utilizando *LIBL. Por ejemplo, loadLibrary(“myNMsp”) equivalea System.load(“/qsys.lib/%libl%.lib/myNMsp.srvpgm”). Si se utiliza“nombrevía” como literal de tipo serie, nombrebib debe ir entre comillas.

Nota: La sintaxis %libl% no está soportada para J2SDK.

Para obtener una descripción completa de JNI, consulte Java Native Interface by

Sun Microsystems, Inc. y The Source for Java Technology java.sun.com.

En Ejemplos: utilización de Java Native Interface para emplear métodos nativoshallará un ejemplo de cómo utilizar JNI para métodos nativos.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Consideraciones en torno a las hebras y los métodos nativosJava

Los métodos nativos sirven para acceder a funciones que no están disponibles enJava.

Para utilizar mejor Java junto con los métodos nativos, es necesario tener claros losconceptos 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 hebraejecuta un método nativo que vuelve a habilitar las excepciones de comaflotante, Java no las desactivará por segunda vez. Si la aplicación de usuario nolas inhabilita antes de volver a ejecutar el código Java, es posible que elcomportamiento de éste no sea el correcto si se produce una excepción de comaflotante. Cuando una hebra nativa se desconecta de la máquina virtual Java, serestablece su máscara de excepción de coma flotante en el valor que estaba envigor en el momento de conectarse.

v Cuando una hebra nativa se conecta a la máquina virtual Java, ésta cambia laprioridad de las hebras, si conviene, para ajustarse a los esquemas de prioridadde uno a diez que define Java. Cuando la hebra se desconecta, se restablece laprioridad. Después de conectarse, la hebra puede cambiar la prioridad de hebrautilizando una interfaz de método nativo (por ejemplo, una API POSIX). Java nocambiará la prioridad de hebra en las transiciones de regreso a la máquinavirtual Java.

v El componente Invocation API de Java Native Interface (JNI) permite a unusuario incorporar una máquina virtual Java dentro de la aplicación. Si unaaplicación crea una máquina virtual Java y ésta finaliza de manera anormal, se

106 AS/400 Developer Kit para Java

Page 115: AS400 Kit Desarrollo Para Java - Rzaha

indica la excepción AS/400 MCH74A5 de AS/400, “Máquina virtual Javaterminada”, a la hebra inicial del proceso si dicha hebra estaba conectada a lamáquina virtual Java en el momento de finalizar ésta. La máquina virtual Javapodría finalizar anormalmente por cualquiera de las razones siguientes:– El usuario llama al método java.lang.System.exit().– Finaliza una hebra que la máquina virtual Java necesita.– Se produce un error interno en la máquina virtual Java.

Este comportamiento es distinto al de la mayoría de las plataformas Java. Enellas, el proceso que crea automáticamente la máquina virtual Java finaliza demanera brusca tan pronto como finaliza la máquina virtual Java. Si la aplicaciónsupervisa y maneja una excepción MCH74A5 indicada, puede seguirejecutándose. De lo contrario, el proceso finaliza si la excepción queda sinmanejar. Si se añade el código que se encarga de la excepción MCH74A5, que esespecífica de AS/400, el grado de portabilidad de la aplicación a otrasplataformas puede verse mermado.

Dado que los métodos nativos se ejecutan siempre en un proceso multihebra, elcódigo que contienen debe ser seguro en ejecución multihebra. Este hecho imponelas restricciones indicadas a continuación a los lenguajes y las funciones utilizadospara emplear los métodos nativos:v No se debe utilizar ILE CL para métodos nativos, ya que este lenguaje no es

seguro en ejecución multihebra. Para ejecutar mandatos CL seguros en ejecuciónmultihebra, puede utilizar la función system() del lenguaje C o el métodojava.lang.Runtime.exec().– Para ejecutar mandatos CL seguros en ejecución multihebra desde un método

nativo C o C++, utilice la función system() del lenguaje C.– Para ejecutar mandatos CL seguros en ejecución multihebra directamente

desde Java, utilice el método java.lang.Runtime.exec().v Se puede utilizar ILE C, ILE C++, ILE COBOL e ILE RPG para escribir un

método nativo, pero todas las funciones a las que se llame desde dentro delmétodo nativo deben ser seguras en ejecución multihebra.Nota: el soporte en tiempo de compilación para escribir métodos nativos sólo seproporciona actualmente en los lenguajes C y C++. Escribir métodos nativos enotros lenguajes, si bien es posible, puede resultar mucho más complicado.Atención:No todas las funciones estándar C, C++, COBOL o RPG son seguras en ejecuciónmultihebra.

v Las funciones exit() y abort() de C y C++ no deben utilizarse nunca dentro deun método nativo. Estas funciones provocan la detención de todo el proceso quese ejecuta en la máquina virtual Java. Esto incluye todas las hebras del proceso,con independencia de si son originarias de Java o no.Nota: la función exit() a la que se hace referencia es la función de C y C++, y noes igual que el método java.lang.Runtime.exit().

Si desea obtener más información acerca de las hebras en AS/400, consulte el temadedicado al desarrollo de aplicaciones multihebra..

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Series en métodos nativosLa mayoría de las funciones de Java Native Interface (JNI) aceptan comoparámetros series estilo lenguaje C. Por ejemplo, la función FindClass() de JNI

Capítulo 5. Utilización de Java con otros lenguajes de programación 107

Page 116: AS400 Kit Desarrollo Para Java - Rzaha

acepta un parámetro de tipo serie que especifique el nombre totalmente calificadode un archivo de clase. Si se encuentra el archivo de clase, lo cargará FindClass yse devolverá una referencia al mismo al llamador de FindClass.

Todas las funciones de JNI esperan que los parámetros de tipo serie esténcodificados en UTF-8. Si desea obtener información más detallada sobre UTF-8,puede consultar la especificación JNI, pero en la mayoría de los casos basta contener presente que los caracteres ASCII de 7 bits son equivalentes a larepresentación UTF-8. Los caracteres ASCII de 7 bits son realmente caracteres de 8bits, pero su primer bit es siempre 0. Por tanto, la mayor parte de las series ASCIIC ya se encuentran realmente en UTF-8.

El compilador C del sistema AS/400 funciona en EBCDIC (código de intercambiodecimal ampliado codificado en binario) por omisión, por lo que se puedenproporcionar series en UTF-8 a las funciones de JNI. Existen dos maneras dehacerlo. Se pueden utilizar series literales o bien series dinámicas. Las seriesliterales son aquellas cuyo valor es conocido en el momento de compilar el códigofuente. Las series dinámicas son aquellas cuyo valor no es conocido en tiempo decompilación sino que se calcula en tiempo de ejecución.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Series literales en métodos nativosResulta más fácil codificar las series literales en UTF-8 si la serie está compuestapor una representación ASCII de 7 bits. Si la serie es representable en ASCII, comoocurre con la mayoría, puede ir entre sentencias ’pragma’ que modifiquen lapágina de códigos actual del compilador. Entonces, el compilador almacenaráinternamente la serie en el formato UTF-8 que JNI requiere. Si la serie no esrepresentable en ASCII, es más fácil tratar la serie EBCDIC original como si fueseuna serie dinámica y procesarla con iconv() antes de pasarla a JNI. Para obtenermás información acerca de series dinámicas, consulte el apartado Series dinámicas.

Por ejemplo, para buscar una clase llamada “java/lang/String”, el código será así:#pragma convert (819)myClass = (*env)->FindClass(env,“java/lang/String”);#pragma convert (0)

La primera sentencia pragma, con el número 819, informa al compilador que debealmacenar todas las series entrecomilladas posteriores (series literales) en formatoASCII. La segunda sentencia pragma, con el número 0, indica al compilador quepara las series entrecomilladas debe volver a la página de códigos por omisión delcompilador, que es normalmente la página de códigos EBCDIC 37. Así, incluyendola llamada entre sentencias pragma, se cumple el requisito de JNI de que todos losparámetros estén codificados en UTF-8.

Atención: tenga cuidado con las sustituciones de texto. Por ejemplo, si el códigoes:

#pragma convert (819)#define MyString “java/lang/String”#pragma convert (0)myClass = (*env)->FindClass(env,MyString);

108 AS/400 Developer Kit para Java

Page 117: AS400 Kit Desarrollo Para Java - Rzaha

La serie resultante es EBCDIC porque durante la compilación se sustituye el valorde MyString en la llamada a FindClass. En el momento de producirse estasustitución, la sentencia pragma número 819 no ha entrado en vigor. Por tanto, lasseries literales no se almacenan en ASCII.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Conversión de series dinámica s a y desde EBCDIC, Unicode yUTF-8Para manipular variables de tipo serie calculadas en tiempo de ejecución, puedeser necesario convertir las series a, o desde, EBCDIC, Unicode y UTF-8.

La API de sistema que proporciona la función de conversión de página de códigoses iconv(). Para utilizar iconv(), siga estos pasos:1. Cree un descriptor de conversión 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 utilización de Java Native Interface para ejemplos demétodos nativos, la rutina crea, utiliza y a continuación destruye el descriptor deconversión iconv dentro de la rutina. Esta estrategia evita los problemas queplantea la utilización multihebra del descriptor iconv_t, pero en el caso de códigosensible al rendimiento es mejor crear un descriptor de conversión enalmacenamiento estático y moderar el acceso múltiple al mismo utilizando unaexclusión mutua u otro recurso de sincronización.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplos: utilización de Java Native Interface para emplearmétodos nativos

Este programa de ejemplo es un ejemplo sencillo de Java Native Interface (JNI) enel que se utiliza un método nativo C para visualizar “Hello, World”. Para generarel archivo NativeHello.h, se utiliza la herramienta javah con el archivo de claseNativeHello. En este ejemplo, se supone que la implementación C NativeHelloforma parte de un programa de servicio llamado NATHELLO.Nota: para poder ejecutar este ejemplo, la biblioteca en la que se encuentra elprograma de servicio NATHELLO debe estar en la lista de bibliotecas.

Ejemplo 1: clase NativeHellopublic 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 método nativo propiamente dicho. Éste crea// un nuevo objeto de tipo serie y coloca una referencia al mismo// en 'theString'public native void setTheString(); // método nativo para establecer la serie// Se llama a este código de 'inicializador estático' antes de// utilizar la clase por primera vez.static {

// Se intenta cargar la biblioteca de método nativo. Si no se// encuentra, se escribe un mensaje en 'out' y se intenta una vía de acceso// especificada en el código. Si esto falla, se sale.

Capítulo 5. Utilización de Java con otros lenguajes de programación 109

Page 118: AS400 Kit Desarrollo Para Java - Rzaha

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.2System.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 vía 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);}

}}// Aquí está el código 'principal' de la clase. Es lo que se ejecuta// al entrar 'java NativeHello' en la línea de mandatos.public static void main(String argv[]){

// Se asigna un objeto NativeHello nuevo.NativeHello nh = new NativeHello();// Se hace eco de la ubicación.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 método nativo.nh.setTheString();// Ahora, se imprime el valor tras la llamada para mayor seguridadSystem.out.println(“(Java) Returned from the native method”);System.out.println(“(Java) string field is '” + nh.theString + “'”);System.out.println(“(Java) All done...”);

}}

Ejemplo 2: archivo de cabecera NativeHello.h generado/* NO EDITE ESTE ARCHIVO - está generado por máquina */#include <jni.h>/* Cabecera de la clase NativeHello */#ifndef _Included_NativeHello#define _Included_NativeHello#ifdef __cplusplusextern “C” {#endif/** Clase: NativeHello* Método: setTheString* Firma: ()V*/

JNIEXPORT void JNICALL Java_NativeHello_setTheString(JNIEnv *, jobject);

#ifdef __cplusplus}#endif#endif

Este ejemplo NativeHello.c muestra la implementación del método nativo en C, asícomo la manera de enlazar Java con los métodos nativos. No obstante, también

110 AS/400 Developer Kit para Java

Page 119: AS400 Kit Desarrollo Para Java - Rzaha

señala las complicaciones que surgen del hecho que AS/400 es internamente unamáquina EBCDIC (código de intercambio decimal ampliado codificado en binario).Asimismo, indica las complicaciones derivadas de la falta de verdaderos elementosde internacionalización en JNI.

Estas razones, aunque no son una novedad en JNI, originan diversas diferenciasexclusivas de AS/400 en el código C que se escribe. Conviene recordar que si segraba en stdout o stderr o bien si se lee de stdin, probablemente los datos estaráncodificados en formato EBCDIC.

En código C, resulta fácil convertir la mayoría de las series literales, aquellas quecontienen únicamente caracteres de 7 bits, al formato UTF-8 que requiere JNI. Paraello, hay que incluir las series literales entre sentencias pragma de conversión depágina de códigos. No obstante, dado que es posible que se grabe informacióndirectamente en stdout o stderr desde el código C, podría permitirse que algunosliterales conservasen el formato EBCDIC.

Nota: las sentencias #pragma convert(0) convierten los datos de tipo carácter aEBCDIC. Las sentencias #pragma convert(819) convierten los datos de tipo caráctera ASCII. Estas sentencias realizan la conversión de los datos de tipo carácter delprograma C en tiempo de compilación.

Ejemplo 3: implementación del método nativo NativeHello.c realizada por la claseJava 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 página de códigos 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 automáticamente UTF-8también). */#pragma convert(819) /* se manejan todas las series literales como ASCII *//* Se notifica y se borra una excepción 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é dirección debe realizarse la conversión: */#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);/* Implementación de método 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; /* excepción; 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 indicaque ha habido un error y que se ha colocado una excepción en un punto enque 'ExceptionOccurred()' puede recuperarla. En este caso, el error seríanormalmente muy grave, pero a efectos de este ejemplo, se sigue adelantey se captura el error y después se continua. */HandleError(env);

return;

Capítulo 5. Utilización de Java con otros lenguajes de programación 111

Page 120: AS400 Kit Desarrollo Para Java - Rzaha

}/* 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 hahabido un problema. En lugar de manejarlo, basta con usar return ysaber que el retorno a Java 'lanza' automáticamente la excepciónJava almacenada. */

return;}/* Se obtiene fieldID para la actualización. */if (! (fid = (*env)->GetFieldID(env,

thisClass,“theString”,“Ljava/lang/String;”)))

{/* Si GetFieldID devuelve un fieldID nulo, significa que hahabido 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 actualización propiamente dicha.Nota: SetObjectField es un ejemplo de interfaz que no devuelveun valor de retorno que pueda probarse. En este caso, resultanecesario llamar a ExceptionOccurred() para ver si ha habidoun problema con el almacenamiento del valor */(*env)->SetObjectField(env, javaThis, fid, stringObject);/* Se comprueba si la actualización ha sido satisfactoria. Si no lo hasido, se notifica el error. */if ((*env)->ExceptionOccurred(env)) {

/* Se ha devuelto un objeto de tipo excepción no nulo desdeExceptionOccurred; así pues, hay un problema y debe notificarseel error. */HandleError(env);

}JobPrint(env, “( C ) Returning from the native method\n”);return;

}static void HandleError(JNIEnv *env){

/* Rutina sencilla para notificar y manejar una excepción. */JobPrint(env, “( C ) Error occurred on JNI call: ”);(*env)->ExceptionDescribe(env); /* se graban los datos de la excepción en la consola */(*env)->ExceptionClear(env); /* se borra la excepción pendiente */

}static void JobPrint(JNIEnv *env, char *str){

char *jobStr;char buf[512];size_t len;len = strlen(str);/* Sólo se imprime la serie no vacía. */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; /* parámetros para instanciar iconv */size_t sStrLen, tStrLen; /* copias locales de las longitudes de serie */

112 AS/400 Developer Kit para Java

Page 121: AS400 Kit Desarrollo Para Java - Rzaha

iconv_t ourConverter; /* descriptor de conversión propiamente dicho */int iconvRC; /* código de retorno de la conversión */size_t originalLen; /* longitud original de sourceStr *//* Se realizan copias locales de los tamaños de entrada y salida que seinicializan según el tamaño de la serie de entrada. iconv() requiere quelos parámetros de longitud se pasen por dirección (es decir, como int*). */originalLen = sStrLen = tStrLen = strlen(sourceStr);/* Se inicializan los parámetros de QtqIconvOpen() a cero. */memset(&source,0x00,sizeof(source));memset(&target,0x00,sizeof(target));/* En función del parámetro direction, se establece el CCSIDORIGEN (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 válido; si no es así, se devuelve 0. */if (-1 == ourConverter.return_value) return 0;/* Se realiza la conversión. */iconvRC = iconv(ourConverter,

(char**) &sourceStr,&sStrLen,&targetStr,&tStrLen);

/* Si la conversión falla, se devuelve un cero. */if (0 != iconvRC ) return 0;/* Se cierra el descriptor de conversión. */iconv_close(ourConverter);/* Se devuelve targetStr señalando al carácter que está justodetrás del último carácter convertido; así pues, se estableceel terminador nulo aquí y ahora. */*targetStr = '\0';/* Se devuelve el número de caracteres procesados. */return originalLen-tStrLen;

}#pragma convert(0)

En Utilización de Java Native Interface para emplear métodos nativos hallará lainformación previa necesaria.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Utilización de java.lang.Runtime.exec()El método java.lang.Runtime.exec() llama a programas o mandatos desde dentro deun programa Java. El proceso real que tiene lugar depende de qué informaciónexactamente se pasa al método exec(). En todos los casos, el método Runtime.exec()crea otro trabajo inmediato de proceso por lotes (BCI) habilitado para hebras. Eltrabajo BCI procesa la serie de mandato pasada en el método Runtime.exec().

Para utilizar el método java.lang.Runtime.exec(), debe instalar el intérprete deQshell en el AS/400. Para obtener más información sobre el intérprete de Qshell,consulte el apartado Intérprete de Qshell.

Nota: el método java.lang.Runtime.exec() ejecuta los programas en un procesoaparte. Esto difiere de la función de sistema C, que ejecuta un programa en elmismo proceso.

Capítulo 5. Utilización de Java con otros lenguajes de programación 113

Page 122: AS400 Kit Desarrollo Para Java - Rzaha

Traba jo in terac t i vo Lote t raba jo 1inmedia to

Lote t raba jo 2inmedia to

Lote t raba jo 3inmedia to

RV4N309-5

CLASEJAVA ( 'Exec ' )

Qshe l l(hebras

hab i l i t adas)

Qshe l l(hebras

hab i l i t adas)

Qshe l l(hebras

hab i l i t adas)

Mandato CL(hebras

hab i l i t adas)

CLASEJAVA ( 'Exec ' )

Qshe l l

Cód igo deap l i cac ión demáquinav i r tua l Java(c lase Exec)Hebra x

Reco lec torde desechos

Hebra y

PR

OG

RA

MA

CL

MA

ND

AT

OC

L

Si el mandato que se procesa es un programa de utilidad de Qshell, se ejecuta enel segundo trabajo BCI y no se crea el tercer trabajo BCI. Si el mandato que seprocesa es un mandato CL, se inicia el segundo trabajo BCI para ejecutar Qshell ytambién el tercer trabajo BCI para ejecutar el mandato CL. Los programas deutilidad de Qshell son programas de utilidad incorporados que QSH puedeejecutar de manera directa. Un ejemplo de programa de utilidad de Qshell es elmandato javac, que compila programas Java. El proceso del segundo (o el tercer)trabajo BCI se ejecuta concurrentemente con la máquina virtual Java. Cualquierproceso de salida o conclusión que tenga lugar en dichos trabajos no afecta a lamáquina virtual Java original.

Cuando llame a un programa o mandato de AS/400, debe asegurarse de que lapágina de códigos de los parámetros que se pasan al programa llamado es la queespera dicho programa.

Consulte los apartados llamar a otro programa Java, llamar a un programa CL ollamar a un mandato CL para obtener ejemplos de java.lang.Runtime.exec().

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

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

Este ejemplo muestra la manera de llamar a otro programa Java conjava.lang.Runtime.exec(). Esta clase llama al programa Hello que se entrega comoparte de AS/400 Developer Kit para Java. Cuando la clase Hello graba enSystem.out, este programa obtiene un handle para la corriente y puede leer en ella.

Nota: para llamar al programa, utilice el intérprete Qshell.

Ejemplo 1: clase CallHelloPgm

import java.io.*;public class CallHelloPgm{

114 AS/400 Developer Kit para Java

Page 123: AS400 Kit Desarrollo Para Java - Rzaha

public static void main(String args[]){

Process theProcess = null;BufferedReader inStream = null;System.out.println(“CallHelloPgm.main() invoked”);// se llama a la clase Hellotry{

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 estándar del programa llamadotry{

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 método

} // fin de la clase

En Utilización de java.lang.Runtime.exec() hallará la información previa necesaria.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

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

Este ejemplo muestra cómo ejecutar programas CL desde dentro de un programaJava. Consulte el apartado llamar a un mandato CL para obtener un ejemplo decómo llamar a un mandato CL desde un programa Java. En este ejemplo, la claseJava CallCLPgm ejecuta un programa CL. Éste utiliza el mandato Visualizarprograma Java (DSPJVAPGM) para visualizar el programa asociado con el archivode clase Hello. En este ejemplo, se supone que se ha compilado el programa CL yque existe en una biblioteca que se llama JAVSAMPLIB. La salida del programa CLestá en el archivo en spool QSYSPRT.

Nota: JAVSAMPLIB no se crea como parte del proceso de instalación del programabajo licencia (LP) AS/400 Developer Kit, número 5769-JV1. Se debe crear demanera explícita.

Ejemplo 1: clase CallCLPgmimport java.io.*;public class CallCLPgm{

public static void main(String[] args){

try{

Capítulo 5. Utilización de Java con otros lenguajes de programación 115

Page 124: AS400 Kit Desarrollo Para Java - Rzaha

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

}catch(IOException e){

System.err.println(“Error on exec() method”);e.printStackTrace();

}} // fin del método main()

} // fin de la clase

Ejemplo 2: Visualizar un programa CL JavaPGM

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

ENDPGM

En Utilización de java.lang.Runtime.exec() hallará la información previa necesaria.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

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

Este ejemplo muestra cómo ejecutar un mandato CL desde dentro de un programaJava. En este ejemplo de llamada a un mandato CL, la clase Java ejecuta unmandato CL. Éste utiliza el mandato Visualizar programa Java (DSPJVAPGM) paravisualizar el programa asociado con el archivo de clase Hello. La salida delmandato CL está en el archivo en spool QSYSPRT.

Nota: Todos los mandatos que se pasan a la función Runtime.getRuntime().exec()deben estar entrecomillados y en formato Qshell. Además, para poder ejecutar unmandato CL desde Qshell es necesario pasar la serie:“system \”CL COMMAND\“”Donde CL COMMAND es el mandato CL que se desea ejecutar. Así, la línea para llamaral mandato MYCLCOM debe ser la siguiente: Runtime.getRuntime().exec(“system\”MYCLCOM\“”);

Ejemplo 1: clase CallCLComimport 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 método main()

} // fin de la clase

En Utilización de java.lang.Runtime.exec() hallará la información previa necesaria.

116 AS/400 Developer Kit para Java

Page 125: AS400 Kit Desarrollo Para Java - Rzaha

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplos de comunicación entre procesosA la hora de comunicar con programas que se ejecutan en otro proceso, existendiversas opciones.

Una opción es utilizar sockets para la comunicación entre procesos. Un programapuede actuar de programa servidor, a la escucha de entrada procedente delprograma cliente en una conexión por socket. El programa cliente se conecta alservidor por medio de un socket. Una vez establecida la conexión por socket,cualquiera de los dos programas puede enviar o recibir información.

Otra opción es utilizar archivos continuos para la comunicación entre programas.Para ello, se utilizan las clases System.in, System.out y System.err.

Una tercera opción es utilizar AS/400 Toolbox para Java, que proporciona objetosde mensaje de AS/400 y colas de datos.

También se pueden realizar llamadas a Java desde otros lenguajes.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Utilización de sockets para la comunicación entre procesosLas corrientes de sockets comunican entre sí programas que se ejecutan enprocesos aparte. Los programas pueden iniciarse por separado o bien utilizando elmétodo java.lang.Runtime.exec() desde dentro del programa Java principal. Si unprograma está escrito en un lenguaje distinto de Java, hay que asegurarse de quetiene lugar la conversión ASCII o EBCDIC. En Codificaciones de caracteres Javahallará información más detallada.

En Ejemplo: utilización de sockets para la comunicación entre procesos hallará unejemplo en el que se utilizan sockets.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: utilización de sockets para la comunicación entreprocesosEn este ejemplo se utilizan sockets para comunicar entre sí un programa Java y unprograma C. El programa C, que está a la escucha en un socket, debe iniciarseprimero. Una vez el programa Java se ha conectado al socket, el programa C leenvía una serie utilizando la conexión por socket. La serie que envía el programa Ces una serie ASCII cuya página de códigos es la 819.

El programa Java debe iniciarse con el mandato java TalkToC xxxxx nnnn en lalínea de mandatos del intérprete Qshell o en otra plataforma Java. También sepuede entrar JAVA TALKTOC PARM(xxxxx nnnn) en la línea de mandatos de AS/400para iniciar el programa Java. xxxxx es el nombre de dominio o la dirección IP delsistema en el que se ejecuta el programa C. nnnn es el número de puerto del socketque el programa C utiliza. Este número de puerto debe utilizarse también comoprimer parámetro de la llamada al programa C.

Capítulo 5. Utilización de Java con otros lenguajes de programación 117

Page 126: AS400 Kit Desarrollo Para Java - Rzaha

Ejemplo 1: clase cliente TalkToCimport 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 método 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 método 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 método converse()public void cleanUp(){

try{

if(inStream != null){

inStream.close();}if(socket != null){

socket.close();

118 AS/400 Developer Kit para Java

Page 127: AS400 Kit Desarrollo Para Java - Rzaha

}} // fin de trycatch(IOException e){

System.err.println(“Error in cleanup”);e.printStackTrace();System.exit(-1);

}} // fin del método cleanUp()

} // fin de la clase TalkToC

SockServ.C se inicia pasando un parámetro correspondiente al número 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 operación 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 petición del cliente */if((client = accept(server,(struct sockaddr*)NULL, 0))<0){printf(“accept failed\n”);perror(NULL);exit(-1);

}/* se envía greeting al cliente */

Capítulo 5. Utilización de Java con otros lenguajes de programación 119

Page 128: AS400 Kit Desarrollo Para Java - Rzaha

if((sendrc = send(client, greeting, strlen(greeting),0))<0){

printf(“Send failed\n”);perror(NULL);exit(-1);

}close(client);close(server);

}

En Utilización de sockets para la comunicación entre procesos hallará másinformación.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Utilización de corrientes de entrada y de salida paracomunicación entre procesos

Las corrientes de entrada y de salida comunican entre sí programas que se ejecutanen procesos aparte. El método java.lang.Runtime.exec() ejecuta un programa. Elprograma padre puede obtener handles para las corrientes de entrada y de salidadel proceso hijo y grabar o leer en ellas. Si el programa hijo está escrito en unlenguaje distinto de Java, hay que asegurarse de que tiene lugar la conversiónASCII o EBCDIC. En Codificaciones de caracteres Java hallará información másdetallada.

En Ejemplo: utilización de corrientes de entrada y de salida para la comunicaciónentre procesos hallará un ejemplo en el que se utilizan corrientes de entrada y desalida para la comunicación entre procesos.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: utilización de corrientes de entrada y de salida para lacomunicación entre procesosEste ejemplo muestra cómo llamar a un programa C desde Java y utilizarcorrientes de entrada y de salida para la comunicación entre procesos. En esteejemplo, el programa C graba una serie en su corriente de salida estándar y elprograma Java la lee y la visualiza. En este ejemplo, se supone que se ha creadouna biblioteca llamada JAVSAMPLIB y que en ella se ha creado el programaCSAMP1.

Nota: JAVSAMPLIB no se crea como parte del proceso de instalación del programabajo licencia (LP) AS/400 Developer Kit, número 5769-JV1. Debe crearse de maneraexplícita.

Ejemplo 1: clase CallPgmimport 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 CSAMP1try

120 AS/400 Developer Kit para Java

Page 129: AS400 Kit Desarrollo Para Java - Rzaha

{theProcess = Runtime.getRuntime().exec(

“/QSYS.LIB/JAVSAMPLIB.LIB/CSAMP1.PGM”);}catch(IOException e){

System.err.println(“Error on exec() method”);e.printStackTrace();

}// se lee en la corriente de salida estándar del programa llamadotry{

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 método

} // fin de la clase

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 compilación */#pragma convert(819)

printf(“Program JAVSAMPLIB/CSAMP1 was invoked\n”);#pragma convert(0)

/* es posible que Stdout esté en el almacenamiento intermedio, así que sevacía el mismo */fflush(stdout);

}

Para obtener más información, consulte el apartado Utilización de corrientes deentrada y de salida para comunicación entre procesos.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Llamadas a Java desde otros lenguajesPara llamar a programas Java desde otros lenguajes, es necesario llamar a unmandato que ejecute la máquina virtual Java. La API de llamada a un mandatovaría y está en función del lenguaje que realiza la llamada a Java. Desde C, porejemplo, la función system() ejecuta el mandato Ejecutar Java (RUNJVA). DesdeCL, se puede llamar directamente al mandato RUNJVA. Otros lenguajes ILEpueden utilizar la llamada QCMDEXC.

Nota: cualquiera de estas llamadas provoca la creación de otro proceso en el que seejecuta la máquina virtual Java. Para comunicar los procesos entre sí, debe utilizaralguna forma de comunicación entre procesos. Los sockets, las colas de datos y losarchivos continuos son algunos de los métodos de comunicación entre procesos. Sise pasan datos entre programas, es necesario asegurarse de que los programasconvierten correctamente los datos.

Capítulo 5. Utilización de Java con otros lenguajes de programación 121

Page 130: AS400 Kit Desarrollo Para Java - Rzaha

Para obtener ejemplos de cómo llamar al programa Java Hello en C o RPG,consulte los apartados Ejemplo: llamar a Java desde C o Ejemplo: llamar a Javadesde RPG, respectivamente.

También puede utilizar la especificación Java Invocation API, que permite a unaaplicación no Java, como puede ser C, utilizar la máquina virtual Java.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

Ejemplo: llamadas a Java desde CÉste es un ejemplo de programa C que utiliza la función system() para llamar alprograma Java Hello.

Ejemplo 1: llamadas a Java desde C#include <stdlib.h>int main(void){int result;

/* La función de sistema pasa la serie dada al procesador de mandatos CLpara su ejecución. */

result = system(“JAVA CLASS('com.ibm.as400.system.Hello')”);}

En Llamadas a Java desde otros lenguajes hallará más información.

[ Página de presentación de InformationCenter | 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 alprograma Java Hello.

Ejemplo 1: llamadas a Java desde RPGD* SE DEFINEN LOS PARÁMETROS 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 CMDSTRINGC PARM CMDLENGTHC* La siguiente línea visualizará 'DID IT' después de salir delC* shell Java por medio de F3 o F12.C 'DID IT' DSPLYC* Se activa LR para salir del programa RPGC SETON LRC

En Llamadas a Java desde otros lenguajes hallará más información.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

122 AS/400 Developer Kit para Java

Page 131: AS400 Kit Desarrollo Para Java - Rzaha

Java Invocation APIInvocation API, que forma parte de Java Native Interface (JNI), permite al códigono Java crear una máquina virtual Java, así como cargar y utilizar clases Java. Estafunción permite a un programa multihebra utilizar las clases Java que se ejecutanen varias hebras de una sola máquina virtual Java.

La aplicación controla la máquina virtual Java. La aplicación puede crear lamáquina virtual Java, llamar a métodos Java (de forma parecida a cómo unaaplicación llama a subrutinas) y destruir la máquina virtual Java. Una vez creada,la máquina virtual Java está preparada para ejecutarse dentro del proceso hastaque la aplicación la destruye de manera explícita. Mientras se destruye, la máquinavirtual Java realiza operaciones de borrado como, por ejemplo, ejecutarfinalizadores, finalizar las hebras de la máquina virtual Java y liberar los recursosde la máquina virtual Java.

Con una máquina virtual Java preparada para ejecutarse, una aplicación escrita enC puede llamar a la máquina virtual Java para que realice cualquier función.También puede volver desde la máquina virtual Java a la aplicación C, llamar denuevo a la máquina virtual Java y así sucesivamente. La máquina virtual Java secrea una vez y no hace falta volverla a crear antes de llamarla para que ejecutecódigo Java (poco o mucho).

Cuando se utiliza Invocation API para ejecutar programas Java, el destino deSTDOUT y STDERR se controla por medio de una variable de entorno llamadaQIBM_USE_DESCRIPTOR_STDIO. Si está establecida en Y o I (por ejemplo,QIBM_USE_DESCRIPTOR_STDIO=Y), la máquina virtual Java utiliza descriptoresde archivo para STDIN (fd 0), STDOUT (fd 1) y STDERR (fd 2). En este caso, elprograma debe establecer los descriptores de archivo en valores válidosabriéndolos como los tres primeros archivos o conductos del trabajo. Al primerarchivo abierto en el trabajo se le da 0 como fd, al segundo 1 y al tercero 2. Paralos trabajos iniciados con la API de engendramiento, estos descriptores puedenpreasignarse mediante una correlación de descriptores de archivo (consulte ladocumentación de la API de engendramiento). Si la variable de entornoQIBM_USE_DESCRIPTOR_STDIO no está establecida o bien lo está en cualquierotro 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 spoolpropiedad del trabajo actual y la utilización de STDIN da como resultado unaexcepción de E/S.

En Ejemplo: Java Invocation API hallará un ejemplo en el que se utiliza InvocationAPI. En Funciones de Invocation API hallará información más detallada sobre lasfunciones de invocation API a las que AS/400 Developer Kit para Java da soporte.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Funciones de Invocation APIAS/400 Developer Kit para Java da soporte a las funciones de Invocation API quese relacionan a continuación.Nota: antes de usar esta API, debe asegurarse de que está en un trabajo concapacidad multihebra. En el tema dedicado al desarrollo de aplicacionesmultihebra hallará más información sobre los trabajos con capacidad multihebra.v JNI_GetDefaultJavaVMInitArgs Nota: Esta función sólo está soportada para

Java Development Kit (JDK) 1.1.x.

Capítulo 5. Utilización de Java con otros lenguajes de programación 123

Page 132: AS400 Kit Desarrollo Para Java - Rzaha

Devuelve una estructura de JDK 1.1 que contiene los valores por omisión de losargumentos que es necesario pasar a JNI_CreateJavaVM cuando se crea unamáquina virtual Java.Firma:jint JNI_GetDefaultJavaVMInitArgs(void *args_);

v JNI_GetCreatedJavaVMs

Devuelve información sobre todas las máquina virtuales Java que se han creado.Firma:jint JNI_GetCreatedJavaVMs(JavaVM **vmBuf,

jsize bufLen,jsize *nVMs);

vmBuf es un área de salida cuyo tamaño viene determinado por bufLen, que esel número de punteros. Cada máquina virtual Java tiene una estructura JavaVMasociada que está definida en java.h. Esta API almacena un puntero que señala ala estructura JavaVM que está asociada con cada una de las máquinas virtualesJava creadas en vmBuf, a menos que vmBuf esté llena. Los punteros que señalana estructuras JavaVM se almacenan según el orden de creación de lascorrespondientes máquinas virtuales Java. nVMs devuelve el número demáquinas virtuales que hay creadas actualmente. AS/400 da soporte a lacreación de más de una máquina virtual Java, por lo que cabe esperar un valorsuperior a uno. Esta información, junto con el tamaño de vmBuf, determina si sedevuelven o no los punteros que señalan a las estructuras JavaVM de cada unade las máquinas virtuales Java creadas.

v JNI_CreateJavaVM

Permite que un usuario cree una máquina virtual Java y que la utilice despuésen una aplicación.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 dirección de un puntero de JavaVM para la máquina virtual Java denueva creación. Varias otras API Invocation JNI utilizan p_vm para identificar lamáquina virtual Java. p_env es la dirección de un puntero de Entorno JNI parala máquina virtual Java de nueva creación. Señala a una tabla de funciones deJNI que inicia dichas funciones. vm_args es una estructura que contiene losparámetros de inicialización de la máquina virtual Java. Al utilizar JDK 1.1.x,puede obtenerse una estructura que contiene valores por omisión llamando aJNI_GetDefaultJavaVMInitArgs. Para obtener detalles acerca de cómo realizar

esta operación con J2SDK, consulte el apartado Java Native Interface .

Si se inicia un mandato Ejecutar Java (RUNJVA) o JAVA y se especifica unapropiedad que tenga un parámetro de mandato equivalente, éste tienepreferencia. Se hace caso omiso de la propiedad. Por ejemplo, el parámetroos400.optimization no se tiene en cuenta en el mandato siguiente:JAVA CLASS(Hello) PROP((os400.optimization 0))

124 AS/400 Developer Kit para Java

Page 133: AS400 Kit Desarrollo Para Java - Rzaha

Para obtener una lista de las propiedades exclusivas de 0S/400 soportadas por laAPI JNI_CreateJavaVM, consulte el apartado Propiedades del sistema Java.

Nota: con varias máquinas virtuales Java dentro de un único proceso, todas lasmáquinas virtuales Java comparten el mismo almacenamiento estático deproceso que se asigna para los métodos nativos. La implementación interna de lamáquina virtual Java ya realiza particiones en los datos en base a la máquinavirtual Java, pero debe tenerse en cuenta que con aplicaciones de método nativolas máquinas virtuales Java comparten el almacenamiento estático de proceso.Para obtener más información, consulte el apartado Soporte a varias máquinasvirtuales Java.

v DestroyJavaVM

Destruye la máquina virtual Java.Firma:jint DestroyJavaVM(JavaVM *vm)

Cuando se crea la máquina virtual Java, vm es el puntero de JavaVM devuelto.v AttachCurrentThread

Conecta una hebra con una máquina virtual Java para que pueda utilizar losservicios de la máquina 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 máquina virtual Java a la que se conectala hebra. p_env es el puntero que señala a la ubicación en la que está situado elpuntero de interfaz JNI de la hebra actual. thr_args contiene argumentos deconexión de hebra específicos de la VM.

v DetachCurrentThread

Firma:jint DetachCurrentThread(JavaVM *vm);

vm identifica la máquina virtual Java de la que se desconecta la hebra.

Para obtener una descripción 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.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Soporte para varias máquinas virtuales Java

Java en el sistema AS/400, a diferencia de la implementación de referencia deSun Microsystems, Inc., soporta la creación de varias máquinas virtuales Javadentro de un solo trabajo o proceso. Esto significa que puede llamarse

Capítulo 5. Utilización de Java con otros lenguajes de programación 125

Page 134: AS400 Kit Desarrollo Para Java - Rzaha

satisfactoriamente a JNI_CreateJavaVM() más de una vez en un trabajo, yJNI_GetCreatedJavaVMs() puede devolver más de una máquina virtual Java en sulista de resultados.

Si desea crear varias máquinas virtuales Java para utilizarlas dentro de un solotrabajo o proceso, debe tener en cuenta cuidadosamente los siguientes aspectos:

Ámbito de almacenamiento estático de métodos nativos:

v Los programas de servicio que contienen implementaciones de métodos nativossólo se activan una vez por trabajo, independientemente del número demáquinas virtuales Java que se creen. Esto implica que el ámbito delalmacenamiento estático de métodos nativos se determina con respecto al trabajoy no con respecto a ninguna máquina virtual Java específica.

v Los valores que un método nativo coloca en el almacenamiento estático sonindependientes de la máquina virtual Java que ha llamado al método nativo.Estos valores son visibles para cualquier máquina virtual Java del trabajo.

v Si intencionadamente utiliza almacenamiento estático de métodos nativos en unescenario de varias máquinas virtuales Java, debe tener en cuentacuidadosamente las posibles necesidades de sincronización, por encima y másallá de la utilización de métodos sincronizados y monitores, que son específicosde la máquina virtual Java. La calificación de un método nativo comosincronizado sólo evita las ejecuciones simultáneas dentro de una sola máquinavirtual Java y no las ejecuciones simultáneas desde varias máquinas virtualesJava.

Finalización de la máquina virtual Java:

v Si una máquina virtual Java finaliza anormalmente, debido a que un usuario hallamado a java.lang.System.exit() o a una anomalía interna de la máquinavirtual Java, finalizan la máquina virtual Java anómala y todas las hebrasconectadas.

v Si la hebra inicial de proceso está entre las hebras conectadas a la máquinavirtual Java que ha sufrido la anomalía, se lanza una excepción a la hebra inicial.Si la hebra inicial maneja esta excepción, las otras máquinas virtuales Javapueden continuar la ejecución.

v Si la hebra inicial de proceso finaliza, debido a una excepción no manejada o porcualquier otra razón, finalizan también todas las máquinas virtuales Java delproceso.

Finalización anómala desde C

Si utiliza las rutinas exit() o abort() de ILE/C en cualquier hebra de un trabajomultihebra, finalizará inmediatamente todo el trabajo, incluyendo todas las

máquinas virtuales Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: Java Invocation APIEste ejemplo sigue el paradigma de Invocation API estándar. Por ejemplo, en él sehace lo siguiente:v Se crea una máquina virtual Java por medio de JNI_CreateJavaVM.v Se utiliza la máquina virtual Java para buscar el archivo de clase que se desea

ejecutar.

126 AS/400 Developer Kit para Java

Page 135: AS400 Kit Desarrollo Para Java - Rzaha

v Se busca el ID del método principal de la clase.v Se llama al método principal de la clase.v Se notifican los errores si se produce una excepción.

Para compilar este programa, debe enlazarse lógicamente con un programa deservicio que exporte las funciones precisas para iniciar una nueva máquina virtualJava. Los puntos de entrada que se necesitan son los siguientes:v JNI_GetDefaultJavaVMInitArgs, que inicializa los parámetros que deben crearse.v JNI_CreateJavaVM, que crea la máquina virtual Java.

Al compilar el programa, no es necesario realizar ninguna acción explícita con elmandato de compilación. El programa de servicio que exporta los puntos deentrada está en el directorio de enlace lógico del sistema. El nombre del programade servicio es QJVAJNI.

Para ejecutar este programa, utilice SBMJOB CMD(CALL PGM(BIBLIOT/PROGAMA))ALWMLTTHD(*YES). Todo trabajo que cree una máquina virtual Java debe tenercapacidad multihebra. En AS/400, el único trabajo con capacidad multihebra es untrabajo 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. Estosarchivos en spool resultan visibles si se utiliza el mandato Trabajar con trabajossometidos (WRKSBMJOB) y se visualiza el trabajo iniciado con Someter trabajo(SBMJOB).

Nota: no se recomienda emplear la rutina exit() de ejecución C que aparece másabajo a menos que se tenga la certeza de que el programa es la única hebra delproceso. Cuando se llama a exit() desde un proceso que es capaz de dar soporte avarias hebras, esta rutina finaliza de forma inmediata todas las hebras de unproceso.

Ejemplo: utilización 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 inicialización de la máquina virtual* (VM).* Ésta es la estructura que se pasa por referencia a* JNI_CreateJavaVM().* En jni.h hallará información más detallada.*/

JavaVM* myJVM; /* Los punteros JavaVM y JNIEnv que se obtienen. */JNIEnv* myEnv; /* ...de la llamada JNI_CreateJavaVM(). */char* myClasspath; /* Es necesario modificar la vía 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 método 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 versión de los argumentos de inicialización. */initArgs.version = 0x00010001;/* Se obtienen los argumentos inicialización por omisión. */JNI_GetDefaultJavaVMInitArgs(&initArgs);/* Ahora, interesa añadir el directorio al final de la vía de acceso de clases* para que, así, findClass pueda buscarlo correctamente. Para ello, hay dos* opciones. Se pueden agregar las entradas de vía de acceso de clases a la

Capítulo 5. Utilización de Java con otros lenguajes de programación 127

Page 136: AS400 Kit Desarrollo Para Java - Rzaha

* vía de acceso de clases por omisión devuelta por la llamada a* JNI_GetDefaultJavaVMInitArgs, o bien se pueden utilizar funciones específicas* de OS/400 para obtener el mismo resultado. Se trata de una solución en tres* pasos:* 1. Establecer la variable de entorno CLASSPATH en sus requisitos con* 'putenv()'* 2. Borrar la vía de acceso de clases de los argumentos de* inicialización 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 vía de acceso de clases por omisión* del sistema a la vía de acceso de clases efectiva.** En este ejemplo se utiliza la primera opción porque es más independiente de* la plataforma** NOTA: el nombre de directorio debe especificarse en formato UTF-8. Así pues,* hay que envolver los bloques de código 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 más, 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 método 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 más, se trata con UTF-8.*/

#pragma convert(819)if (! (mainID = (*myEnv)->GetStaticMethodID(myEnv, myClass,

“main”,“([Ljava/lang/String;)V”))) {

/* Por alguna razón, no se encuentra el ID de método de 'main'. */if ( (*myEnv)->ExceptionOccurred(myEnv) ) {

/* se ha producido una excepción 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 método 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

Page 137: AS400 Kit Desarrollo Para Java - Rzaha

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 vacía* 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 vacía, 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 método de main y la clase, así que ya se puede llamar* al método 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 máquina 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á más información.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 5. Utilización de Java con otros lenguajes de programación 129

Page 138: AS400 Kit Desarrollo Para Java - Rzaha

130 AS/400 Developer Kit para Java

Page 139: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 6. Acceso a la base de datos AS/400 con elcontrolador JDBC de AS/400 Developer Kit para Java

Con el controlador JDBC de AS/400 Developer Kit para Java, los programasJava pueden acceder a archivos de base de datos AS/400, acceder a funciones debase de datos JDBC con Lenguaje de Consulta Estructurada (SQL) incorporado y

ejecutar sentencias SQL y procesar resultados. JDBC es un componenteestándar de Java y se incluye en AS/400. JDBC es la API Java para ejecutarsentencias 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 archivode base de datos de AS/400.

4. Conéctese a una base de datos de AS/400 utilizando el métodoDriverManager.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 estándar.v PreparedStatement es una sentencia precompilada que puede aceptar

parámetros de entrada.v CallableStatement es una sentencia precompilada que puede aceptar

parámetros de entrada y salida.6. Establezca los parámetros para las sentencias SQL PreparedStatement y

CallableStatement.7. Ejecute las sentencias SQL.8. Cierre cada una de las sentencias SQL utilizando el método Statement.close().9. Cierre la conexión con la base de datos AS/400.

JDBC define las interfaces Java relacionadas a continuación:v La interfaz Driver crea la conexión y devuelve información sobre la versión del

controlador.v La interfaz Connection representa una conexión 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 método de catálogo DatabaseMetaData.v La interfaz ResultSetMetaData determina los tipos y las propiedades de las

columnas de un objeto ResultSet.

© Copyright IBM Corp. 1998, 1999 131

Page 140: AS400 Kit Desarrollo Para Java - Rzaha

v La interfaz DatabaseMetaData facilita información acerca de la base de datos ensu totalidad.

v JDBC 2.0 define la Interfaz Blob que proporciona acceso a objetos grandesbinarios (BLOB).

v JDBC 2.0 define la Interfaz Clob que proporciona acceso a objetos grandes decaracteres (CLOB).

En Ejemplo: crear una aplicación JDBC hallará un ejemplo de cómo combinar todaslas interfaces para construir una aplicación JDBC.

Se puede acceder a las bases de datos de AS/400 a través de dos controladoresJDBC: el de AS/400 Developer Kit para Java y el de AS/400 Toolbox para Java.Para obtener información específica acerca del controlador JDBC de AS/400Toolbox para Java, consulte el apartado AS/400 Toolbox para Java.

Si desea obtener más información sobre JDBC, consulte le remitimos a JDBC deSun Microsystems, Inc..

Para obtener más información acerca del controlador JDBC nativo de AS/400,consulte la Página Web de JDBC AS/400 Developer Kit para Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Registrar el controlador JDBC de AS/400 Developer Kit para Javaantes de utilizar JDBC

Antes de utilizar JDBC para acceder a los datos de un archivo de base de datos deAS/400, debe registrar el controlador JDBC de AS/400 Developer Kit para Java conDriverManager.

Puede utilizar una propiedad de sistema Java o bien dejar que el programa Javaregistre los controladores.v Registro mediante una propiedad de sistema.

Cada máquina virtual Java tiene un método propio de establecer las propiedadesde sistema. Por ejemplo, el mandato java de Qshell utiliza la opción -d paraestablecer las propiedades de sistema.Para establecer el controlador mediante las propiedades de sistema, especifiqueeste mandato desde el intérprete Qshell:java -djdbc.drivers=com.ibm.db2.jdbc.app.DB2Driver MySQL

Para establecer el controlador mediante las propiedades de sistema, especifiquelo siguiente desde la línea de mandatos CL:JAVA CLASS(MySQL)

PROP((jdbc.drivers com.ibm.db2.jdbc.app.DB2Driver))

En Propiedades de sistema Java hallará información detallada sobre lapropiedades de sistema.

v Registro mediante el programa Java.Para cargar el controlador de forma explícita, añada cualquiera de estosmandatos 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

Page 141: AS400 Kit Desarrollo Para Java - Rzaha

–Class.forName(“DB2Driver”);

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Conectarse a una base de datos de AS/400 con el controlador JDBCde AS/400 Developer Kit para Java

Para conectarse a la base de datos de AS/400, utilice el métodoDriverManager.getConnection().

DriverManager.getConnection() toma una serie de URL como argumento. El gestorde controladores JDBC intenta localizar un controlador que pueda conectarse a labase de datos representada por el URL. Cuando utilice el controlador de AS/400Developer 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 añadir el nombre de sistema, entre el mandato Trabajar conentradas de directorio de bases de datos relacionales (WRKRDBDIRE). Acontinuación, especifique *LOCAL como ubicación remota en el mandatoWRKRDBDIRE. Normalmente, el nombre elegido es el mismo que el nombre desistema del AS/400 que contiene la base de datos.

En Ejemplos: conectarse a una base de datos de AS/400 con el controlador JDBCde AS/400 Developer Kit para Java hallará un ejemplo de cómo conectarse a unabase de datos de AS/400.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplos: conectarse a una base de datos de AS/400 con elcontrolador JDBC de AS/400 Developer Kit para Java

He aquí ejemplos de cómo utilizar el controlador JDBC para conectarse a unAS/400.

Ejemplo 1: conectarse a la base de datos de AS/400; no se especifica ningunapropiedad ni esquema por omisión.// Conexión con el sistema 'mySystem'. No se especifica ninguna propiedad// ni esquema por omisión.Connection c = DriverManager.getConnection(“jdbc:db2://mySystem”);

Ejemplo 2: conectarse a la base de datos de AS/400; se especifica el esquema poromisión.// Conexión con el sistema 'mySys2'. Se especifica el esquema por// omisión 'mySchema'.// El esquema es la biblioteca por omisión 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 lainterfaz java.util.Properties o bien como parte del URL. En el ejemplo siguiente, laspropiedades se especifican mediante la interfaz Properties.

Capítulo 6. Acceso a la base de datos AS/400 con el controlador JDBC de AS/400 Developer Kit para Java 133

Page 142: AS400 Kit Desarrollo Para Java - Rzaha

Ejemplo 3: conectarse a la base de datos de AS/400; las propiedades se especificanmediante Java.util.Properties// Se crea un objeto de propiedadesProperties p = new Properties();// Se establecen las propiedades de la conexión.p.put(“naming”, “sql”);p.put(“user”, “JonDoe”);p.put(“password”, “JD1”);// Se realiza la conexión utilizando el objeto de propiedades.Connection c = DriverManager.getConnection(“jdbc:db2://mySystem”,p);

Ejemplo 4: desconectarse de la base de datosc.close();

En Conectarse a una base de datos de AS/400 con el controlador JDBC de AS/400Developer Kit para Java hallará más información.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Crear una aplicación JDBCJDBC es la API Java para ejecutar sentencias SQL. Permite al usuario emitirsentencias 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. Conéctese 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. Cierre Statement.8. Cree el objeto PreparedStatement.9. Establezca los parámetros y ejecute la sentencia.

10. Cierre PreparedStatement.11. Cree el objeto CallableStatement.12. Establezca los parámetros de entrada, registre los parámetros de salida y

ejecute los procedimientos almacenados.13. Cierre CallableStatement.14. Cierre la conexión.

En Ejemplo: crear una aplicación JDBC hallará un ejemplo de cómo combinar todaslas interfaces para construir una aplicación JDBC.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: crear una aplicación JDBCLos ejemplos dados a continuación ilustran la manera de conjuntar todas lasinterfaces para construir una aplicación JDBC.

134 AS/400 Developer Kit para Java

Page 143: AS400 Kit Desarrollo Para Java - Rzaha

Ejemplo 1: aplicación JDBC// Antes de ejecutar este ejemplo, es necesario realizar alguna configuración en el AS/400.//// 1. Busque una base de datos relacional *LOCAL (por ejemplo AS400NAME) mediante el mandato// CL WRKRDBDIRE, o añada uno si no existe tal entrada. Modifique el código fuente para// este programa Java con este nombre y compílelo.//// 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á vacía, 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 interrogación señalan el lugar en que deben establecerse los// parámetros antes de que se ejecute la sentencia.PreparedStatement ps = c.prepareStatement(“INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES (?,// Se establecen los parámetros y se ejecuta la sentencia.ps.setString(1, “JOSH”);ps.setInt(2, 789);ps.executeUpdate();// Se establecen los parámetros 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 interrogación señalan en lugar en que deben establecerse// los parámetros de entrada y el lugar en que deben recuperarse los// parámetros de salida.// Los dos primeros parámetros son de entrada// y el tercero es de salida.CallableStatement cs = c.prepareCall(“CALL MYLIBRARY.ADD (?, ?, ?)”);// Se establecen los parámetros de entrada.

Capítulo 6. Acceso a la base de datos AS/400 con el controlador JDBC de AS/400 Developer Kit para Java 135

Page 144: AS400 Kit Desarrollo Para Java - Rzaha

cs.setInt (1, 123);cs.setInt (2, 234);// Se registra el tipo del parámetro de salida.cs.registerOutParameter (3, Types.INTEGER);// Se ejecuta el procedimiento almacenado.cs.execute ();// Se obtiene el valor del parámetro de salida.int sum = cs.getInt (3);// Se muestra el valor del parámetro de salida devuelto por el procedimiento almacenado ADDSystem.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 conexión.c.close();}

}

Para obtener más información, consulte el apartado Controlador JDBC de AS/400Developer Kit para Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Interfaz Statement para AS/400 Developer Kit para JavaUn 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 deStatement. Statement ejecuta una sentencia SQL sencilla sin parámetros.PreparedStatement ejecuta una sentencia SQL precompilada que puede o no tenerparámetros IN. CallableStatement ejecuta una llamada a un procedimientoalmacenado de base de datos. CallableStatement puede o no tener parámetros IN yOUT.

En Ejemplo: interfaz Statement para AS/400 Developer Kit para Java hallará unejemplo de objeto Statement.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

136 AS/400 Developer Kit para Java

Page 145: AS400 Kit Desarrollo Para Java - Rzaha

Ejemplo: interfaz Statement para AS/400 Developer Kit paraJava

É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 conexión.s.close();c.close();

En Interfaz Statement para AS/400 Developer Kit para Java hallará másinformación.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Interfaz PreparedStatement para AS/400 Developer Kit para JavaUn objeto PreparedStatement es un objeto que precompila y almacena sentenciasSQL. El hecho de haber sido precompilada es lo que convierte en “preparada” a lasentencia. Este enfoque es más eficiente que ejecutar la misma sentencia variasveces con un objeto Statement que compile la sentencia cada vez que se ejecute.Además, la sentencia SQL contenida en un objeto PreparedStatement puede teneruno o varios parámetros IN.

Para crear objetos PreparedStatement, utilice Connection.prepareStatement().

En Ejemplo: interfaz PreparedStatement para AS/400 Developer Kit para Javahallará un ejemplo de objeto PreparedStatement.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: interfaz PreparedStatement para AS/400 DeveloperKit 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 interrogación señalan en lugar en que deben establecerse los// parámetros antes de que se ejecute la sentencia.PreparedStatement ps = c.prepareStatement(“INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES (?, ?)”// Se establecen los parámetros y se ejecuta la sentencia.

Capítulo 6. Acceso a la base de datos AS/400 con el controlador JDBC de AS/400 Developer Kit para Java 137

Page 146: AS400 Kit Desarrollo Para Java - Rzaha

ps.setString(1, “JOSH”);ps.setInt(2, 789);ps.executeUpdate();// Se establecen los parámetros y se ejecuta la sentencia otra vez.ps.setString(1, “DAVE”);ps.setInt(2, 456);ps.executeUpdate();// Se cierra PreparedStatement y la conexión.ps.close();c.close();

En Interfaz PreparedStatement para AS/400 Developer Kit para Java hallará másinformación.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Interfaz CallableStatement para AS/400 Developer Kit para JavaUn objeto CallableStatement ejecuta procedimientos almacenados SQL. Elprocedimiento almacenado al que se llama debe estar ya almacenado en la base dedatos. CallableStatement no contiene el procedimiento almacenado sino sólo lallamada al mismo.

Un procedimiento almacenado puede devolver uno o varios objetos ResultSet ypuede utilizar parámetros IN, OUT e INOUT.

Para crear objetos CallableStatement nuevos, utilice Connection.prepareCall().

En Ejemplo: interfaz CallableStatement para AS/400 Developer Kit para Javahallará un ejemplo de cómo utilizar la interfaz CallableStatement.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

Ejemplo: interfaz CallableStatement para AS/400 Developer Kitpara Java

Éste es un ejemplo de cómo 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 interrogación señalan en lugar en que deben establecerse// los parámetros de entrada y el lugar en que deben recuperarse los// parámetros de salida.// Los dos primeros parámetros son de entrada y el tercero es de salida.CallableStatement cs = c.prepareCall(“CALL MYLIBRARY.ADD (?, ?, ?)”);// Se establecen los parámetros de entrada.cs.setInt (1, 123);cs.setInt (2, 234);// Se registra el tipo del parámetro de salida.cs.registerOutParameter (3, Types.INTEGER);// Se ejecuta el procedimiento almacenado.cs.execute ();// Se obtiene el valor del parámetro de salida.

138 AS/400 Developer Kit para Java

Page 147: AS400 Kit Desarrollo Para Java - Rzaha

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

En Interfaz CallableStatement para AS/400 Developer Kit para Java hallará másinformación.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

Interfaz ResultSet para AS/400 Developer Kit para JavaEl objeto ResultSet es un objeto que da acceso a una tabla de datos que se generaal ejecutar una consulta. Las filas de la tabla se recuperan en secuencia. Dentro deuna fila, se puede acceder a los valores de columna en cualquier orden.

Los datos almacenados en ResultSet se recuperan utilizando diversos métodos get,en función del tipo de datos recuperados. El método next() pasa a la siguiente fila.

En Ejemplo: interfaz ResultSet para AS/400 Developer Kit para Java hallará unejemplo de cómo utilizar la interfaz ResultSet.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: interfaz ResultSet para AS/400 Developer Kit paraJava

Éste es un ejemplo de cómo 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 conexión.s.close();c.close();

En Interfaz ResultSet para AS/400 Developer Kit para Java hallará másinformación.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 6. Acceso a la base de datos AS/400 con el controlador JDBC de AS/400 Developer Kit para Java 139

Page 148: AS400 Kit Desarrollo Para Java - Rzaha

Interfaz DatabaseMetaData para AS/400 Developer Kit para JavaEl objeto DatabaseMetaData facilita información acerca de la base de datos en sutotalidad, así como información de catálogo. DatabaseMetaData determina cuál esel soporte concreto que proporciona la base de datos.

En Ejemplo: interfaz DatabaseMetaData para AS/400 Developer Kit para Javahallará un ejemplo de cómo utilizar la interfaz DatabaseMetaData.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: interfaz DatabaseMetaData para AS/400 DeveloperKit para Java

Este ejemplo muestra cómo 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 conexión.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 patrón de búsquedaString 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á másinformación.

[ Página de presentación de InformationCenter | 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 sólo si también utiliza Java 2 para desarrollar laaplicación.

Con la clase Blob, puede utilizarse la propiedad de umbral lob. Esta propiedadespecifica el tamaño máximo de objeto grande (LOB) (en kilobytes) que puederecuperarse como parte de un conjunto de resultados. Los LOB cuyo tamaño essuperior a este umbral se recuperan por partes utilizando una comunicaciónadicional con el servidor. Los umbrales de LOB más amplios reducen la frecuenciade comunicación con el servidor, pero bajan más datos de LOB, aunque no seutilicen. Umbrales de LOB más pequeños pueden aumentar la frecuencia decomunicación con el servidor, pero sólo bajan datos de LOB cuando son necesarios.

Mediante la interfaz Blob, puede hacer lo siguiente:

140 AS/400 Developer Kit para Java

Page 149: AS400 Kit Desarrollo Para Java - Rzaha

v Devolver la totalidad de la blob como una corriente de bytes no interpretadosv Devolver parte del contenido de la blobv Devolver la longitud de la blob

El ejemplo siguiente muestra cómo utilizar la interfaz DB2Blob:Blob blob = resultSet.getBlob (1);long length = blob.length ();byte[] bytes = blob.getBytes (0, (int) length);

[ Página de presentación de InformationCenter | 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 grandesde caracteres (CLOB), como por ejemplo documentos grandes.

NOTA: Utilice la interfaz Clob sólo si también utiliza Java 2 para desarrollar laaplicación.

Con la clase Clob, puede utilizarse la propiedad de umbral lob. Esta propiedadespecifica el tamaño máximo de objeto grande (LOB) (en kilobytes) que puederecuperarse como parte de un conjunto de resultados. Los LOB cuyo tamaño essuperior a este umbral se recuperan por partes utilizando una comunicaciónadicional con el servidor. Los umbrales de LOB más amplios reducen la frecuenciade comunicación con el servidor, pero bajan más datos de LOB, aunque no seutilicen. Umbrales de LOB más pequeños pueden aumentar la frecuencia decomunicación con el servidor, pero sólo 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 ASCIIv Devolver el contenido del clob como una corriente de caracteresv Devolver parte del contenido del clobv Devolver la longitud del clob

El ejemplo siguiente muestra cómo utilizar la interfaz DB2Clob:Clob clob = rs.getClob (1);int length = clob.getLength ();String s = clob.getSubString (0, (int) length);

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 6. Acceso a la base de datos AS/400 con el controlador JDBC de AS/400 Developer Kit para Java 141

Page 150: AS400 Kit Desarrollo Para Java - Rzaha

142 AS/400 Developer Kit para Java

Page 151: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 7. Acceso a bases de datos mediante el soporteSQLJ DB2 de AS/400 Developer Kit para Java

El soporte SQLJ DB2 está basado en el estándar ANSI SQLJ. El soporte SQLJDB2 está contenido en AS/400 Developer Kit para Java. El soporte SQLJ DB2permite crear, construir y ejecutar SQL intercalado para aplicaciones Java.

El soporte SQLJ suministrado por AS/400 Developer Kit para Java incluye lasclases de ejecución SQLJ, y está disponible en/QIBM/ProdData/Java400/ext/runtime.zip. Para obtener más información acercade las clases de ejecución SQLJ, consulte la documentación de la API Runtime

suministrada en la implementación desde www.sqlj.org.

Herramientas SQLJLas siguientes herramientas también se incluyen en el soporte SQLJ suministradopor AS/400 Developer Kit para Java.Nota:Estas herramientas deben ejecutarse en el intérprete 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 quecontiene información acerca de las operaciones SQLJ encontradas en el programaSQLJ.

v El personalizador de perfil SQLJ DB2,db2profc, precompila las sentencias SQLalmacenadas 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 perfilpersonalizado DB2 en texto plano.

v El instalador de auditor de perfil SQLJ,profdb, instala y desinstala auditores declase de depuración en un conjunto existente de perfiles binarios.

v La herramienta de conversión de perfil SQLJ,profconv, convierte una instanciade perfil serializado a formato de clase Java.

Restricciones de SQLJ DB2Al crear aplicaciones DB2 con SQLJ, debe tener en cuenta las siguientesrestricciones:v El soporte SQLJ DB2 se ajusta a las restricciones estándar de DB2 Universal

Database con respecto a la emisión de sentencias SQL.v El personalizador de perfil SQLJ DB2 sólo debe ejecutarse en perfiles asociados

con conexiones a la base de datos local.v La implementación de referencia SQLJ requiere JDK 1.1.x. Consulte el apartado

Soporte para varios Java Development Kit (JDK) para obtener más informaciónsobre la ejecución de varias versiones de Java Development Kit.

Para obtener información sobre la utilización de SQL en la aplicación Java, consultelos apartados Intercalar sentencias SQL en la aplicación Java y Compilación y

ejecución de programas SQLJ.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

© Copyright IBM Corp. 1998, 1999 143

Page 152: AS400 Kit Desarrollo Para Java - Rzaha

Intercalar sentencias SQL en la aplicación Java

Las sentencias SQL estáticas en SQLJ se encuentran en cláusulas SQLJ. Lascláusulas SQLJ empiezan por #sql y finalizan con un punto y coma (;).

Antes de crear cláusulas SQLJ en la aplicación Java, importe los siguientespaquetes:v import java.sql.*;v import sqlj.runtime.*;v import sqlj.runtime.ref.*;

Las cláusulas SQLJ más simples son cláusulas ejecutables y constan del indicador#sql seguido de una sentencia SQL entre corchetes. Por ejemplo, la siguientecláusula SQLJ puede aparecer en cualquier lugar donde pueda aparecer legalmenteuna sentencia Java:

#sql { DELETE FROM TAB };

El ejemplo anterior suprimirá todas las filas de la tabla denominada TAB.

Nota: Para obtener información sobre la compilación y ejecución de aplicacionesSQLJ, consulte el apartado Compilación y ejecución de programas SQLJ.

En una cláusula ejecutable SQLJ, los indicadores que aparecen dentro de loscorchetes son indicadores SQL o variables de sistema principal. Todas las variablesde sistema principal se distinguen mediante el carácter de dos puntos (:). Losindicadores SQL nunca aparecen fuera de los corchetes de una cláusula ejecutableSQLJ. Por ejemplo, el siguiente método Java inserta sus argumentos en una tablaSQL:public void insertIntoTAB1 (int x, String y, float z) throws SQLException{

#sql { INSERT INTO TAB1 VALUES (:x, :y, :z) };}

El cuerpo del método consta de una cláusula ejecutable SQLJ que contiene lasvariables de sistema principal x, y y z. para obtener más información sobre lasvariables de sistema principal, consulte el apartado variables de sistema principalen SQLJ.

En general, los indicadores SQL son sensibles a mayúsculas y minúsculas (exceptolos identificadores delimitados mediante comillas dobles) y pueden escribirse enmayúsculas, minúsculas o ambas. Sin embargo, los indicadores Java son sensibles amayúsculas/minúsculas. A efectos de claridad en los ejemplos, los indicadores SQLno sensibles a mayúsculas/minúsculas están en mayúsculas, y los indicadores Javaestán en minúsculas o en estilo mixto. A lo largo de este capítulo, se utiliza null enminúsculas para representar el valor “null” de Java, y NULL en mayúsculas pararepresentar 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

Page 153: AS400 Kit Desarrollo Para Java - Rzaha

v Sentencias de datosPor ejemplo, FETCH, SELECT..INTO.

v Sentencias de control de transacciónPor ejemplo, COMMIT, ROLLBACK, etc.

v Sentencias de Lenguaje de definición de datos (DDL, también conocido comoLenguaje de manipulación de esquemas)Por ejemplo, CREATE, DROP, ALTER.

v Llamadas a procedimientos almacenadosPor ejemplo, CALL MYPROC(:x, :y, :z)

v Invocaciones de funciones almacenadasPor ejemplo, VALUES( MYFUN(:x) )

Para obtener un ejemplo de SQLJ intercalado, consulte el apartado Ejemplo:

intercalar sentencias SQL en la aplicación Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Compilación y ejecución de programas SQLJ

Si el programa Java tiene sentencias SQLJ intercaladas, es necesario seguir unprocedimiento especial para poder compilarlo y ejecutarlo. Para compilar y ejecutarel programa de Lenguaje de Consulta Estructurada para Java (SQLJ), siga estospasos:

Nota:Antes de empezar, configure la CLASSPATH para que contenga losiguiente:

/QIBM/ProdData/Java400/ext/sqlj_classes.jar

/QIBM/ProdData/Java400/ext/translator.zip

/QIBM/ProdData/Java400/ext/runtime.zip1. Utilice el conversor de SQLJ, sqlj, en el código fuente Java con SQL intercalado

para generar código fuente Java y perfiles asociados. Se generará un perfil paracada conexión.

Por ejemplo, escriba el mandato:sqlj MyClass.sqlj

Donde MyClass.sqlj es el nombre del archivo SQLJ. En este ejemplo, elconversor de SQLJ generará un archivo de código fuente MyClass.java y losperfiles asociados. Los perfiles asociados se denominaránMyClass_SJProfile0.ser, MyClass_SJProfile1.ser, MyClass_SJProfile2.ser, y asísucesivamente.

Nota: el conversor de SQLJ compila automáticamente el código fuente Javaconvertido en un archivo de clase, a menos que se desactive explícitamente laopción de compilación con la cláusula -compile=false.

2. Utilice la herramienta SQLJ Profile Customizer, db2profc, para instalarpersonalizadores SQLJ DB2 en los perfiles generados y crear los paquetes DB2en el sistema local.

Por ejemplo, escriba el mandato:db2profc MyClass_SJProfile0.ser

Donde MyClass_SJProfile0.ser es el nombre del perfil que el personalizadorSQLJ DB2 ejecutará.

Capítulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java 145

Page 154: AS400 Kit Desarrollo Para Java - Rzaha

Nota: este paso es opcional, pero es aconsejable para aumentar el rendimientode la ejecución.

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.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Variables de sistema principal en SQL para JavaLos argumentos para sentencias SQL intercaladas se pasan por medio de variablesde sistema principal. Las variables de sistema principal son variables del lenguajedel sistema principal, y pueden aparecer en sentencias SQL. Estas variables puedentres 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

parámetro, variable o campo.v Un identificador de modalidad de parámetro opcional.

este identificador de modalidad puede ser uno de los siguientes:IN, OUT o INOUT.

La evaluación de un identificador Java no tiene efectos colaterales en un programaJava, y por tanto puede aparecer varias veces en el código Java generado parasustituir una cláusula SQLJ.

La siguiente consulta contiene la variable de sistema principal :x. Esta variable desistema principal es el parámetro, campo o variable Java x que es visible en elámbito que contiene la consulta.

SELECT COL1, COL2 FROM TABLE1 WHERE :x > COL3

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Perfiles SQLJ

El conversor de SQLJ, sqlj, genera los perfiles cuando el usuario convierte elarchivo fuente SQLJ. Los perfiles son archivos binarios serializados. Esta es larazón por la que estos archivos tienen la extensión .ser. Estos archivos contienenlas sentencias SQL del archivo fuente SQLJ asociado.

Para generar perfiles a partir del código fuente SQLJ, ejecute el conversor de SQLJ,sqlj, en el archivo .sqlj.

Para obtener más información, consulte el apartado Compilación y ejecución de

programas SQLJ.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

146 AS/400 Developer Kit para Java

Page 155: AS400 Kit Desarrollo Para Java - Rzaha

Ejemplo: intercalar sentencias SQL en la aplicación JavaEl siguiente ejemplo de aplicación SQLJ, App.sqlj, utiliza SQL estático para

recuperar y actualizar datos de la tabla EMPLOYEE de la base de datos de ejemploDB2.

Ejemplo: intercalar sentencias SQL en la aplicación 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:dbnameString url = “jdbc:db2:sample”;DefaultContext ctx = DefaultContext.getDefaultContext();

if (ctx == null){

try{// conectar con id/contraseña por omisiónConnection 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 datosSystem.out.println(“Retrieve some data from the database.”);#sql cursor1 = {SELECT empno, firstnme FROM employee}; // 2// visualizar el conjunto de resultados

Capítulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java 147

Page 156: AS400 Kit Desarrollo Para Java - Rzaha

// cursor1.next() devuelve false cuando no hay más filasSystem.out.println(“Received results:”);while (cursor1.next()) // 3{str1 = cursor1.empno(); // 4str2 = cursor1.firstnme();System.out.print (“ empno= ” + str1);System.out.print (“ firstname= ” + str2);System.out.println(“”);

}cursor1.close(); // 9// recuperar número de empleado de la base de datos#sql { SELECT count(*) into :count1 FROM employee }; // 5if (1 == count1)System.out.println (“There is 1 row in employee table”);

elseSystem.out.println (“There are ” + count1

+ “ rows in employee table”);// actualizar la base de datosSystem.out.println(“Update the database.”);#sql { UPDATE employee SET firstnme = 'SHILI' WHERE empno = '000010' };// recuperar los datos actualizados de la base de datosSystem.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 más filasSystem.out.println(“Received results:”);while (true){#sql { FETCH :cursor2 INTO :str2 }; // 7if (cursor2.endFetch()) break; // 8System.out.print (“ empno= ” + str1);System.out.print (“ firstname= ” + str2);System.out.println(“”);

}cursor2.close(); // 9// retrotraer la actualizaciónSystem.out.println(“Rollback the update.”);#sql { ROLLBACK work };System.out.println(“Rollback done.”);

}catch( Exception e ){

e.printStackTrace();}

}}

1. Declarar iteradores. Esta sección declara dos tipos de iteradores:

App_Cursor1Declara nombres y tipos de datos de columna, y devuelve los valoresde las columnas de acuerdo con el nombre de columna (Enlace connombre con columnas).

App_Cursor2Declara tipos de datos de columna, y devuelve los valores de lascolumnas por posición de columna (Enlace posicional con columnas).

2. Inicializar el iterador. El objeto iterador cursor1 se inicializa utilizando elresultado de una consulta. La consulta almacena el resultado en cursor1.

3. Adelantar el iterador a la próxima fila. El método cursor1.next() devuelve unBoolean false si no hay que recuperar más filas.

148 AS/400 Developer Kit para Java

Page 157: AS400 Kit Desarrollo Para Java - Rzaha

4. Mover los datos. El método de acceso con nombre empno() devuelve el valorde la columna denominada empno en la fila actual. El método de acceso connombre firstnme() devuelve el valor de la columna denominada firstnme en lafila actual.

5. Aplicar SELECT a los datos en una variable de sistema principal. Lasentencia SELECT pasa el número de filas de la tabla a la variable de sistemaprincipal count1.

6. Inicializar el iterador. El objeto iterador cursor2 se inicializa utilizando elresultado de una consulta. La consulta almacena el resultado en cursor2.

7. Recuperar los datos. La sentencia FETCH devuelve el valor actual de laprimera columna declarada en el cursor ByPos desde la tabla de resultados a lavariable de sistema principal str2.

8. Comprobar el éxito de una sentencia FETCH..INTO. El método endFetch()devuelve un Boolean true si el iterador no está posicionado en una fila, esdecir, si el último intento de extraer una fila ha fallado. El método endFetch()devuelve false si el último intento de extraer una fila ha sido satisfactorio. DB2intenta extraer una fila cuando se llama al método next(). Una sentenciaFETCH...INTO llama implícitamente al método next().

9. Cerrar los iteradores. El método close() libera los recursos retenidos por lositeradores. Debe cerrar explícitamente los iteradores para asegurarse de que seliberan de forma oportuna los recursos del sistema.

Para obtener información previa acerca de este ejemplo, consulte el apartado

Intercalar sentencias SQL en la aplicación Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

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

El conversor de SQLJ, sqlj, genera un perfil serializado que contieneinformación acerca de las operaciones SQL encontradas en el programa SQLJ. Elconversor SQLJ utiliza el archivo /QIBM/ProdData/Java400/ext/translator.zip.

Para obtener más información acerca de las opciones de la línea de mandatos sqlj,consulte la guía de usuario de SQLJ suministrada en la implementación desde

www.sqlj.org .

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Precompilación de sentencias SQL en un perfil utilizando elpersonalizador de perfil SQLJ DB2, db2profc

Puede utilizar el personalizador de perfil SQLJ DB2, db2profc, para que laaplicación Java funcione de forma más 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.

Capítulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java 149

Page 158: AS400 Kit Desarrollo Para Java - Rzaha

Para precompilar las sentencias SQL de un perfil, escriba lo siguiente en elindicador de mandatos de Qshell:db2profc MyClass_SJProfile0.serDonde MyClass_SJProfile0.ser es el nombre del perfil que desea precompilar.

Utilización 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 opcioneses la lista de opciones que desea.

Las opciones disponibles para db2profp son:-url=<URL JDBC>

-user=<nombre usuario>

-password=<contraseña>

-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 ordenación>

-langID=<identificador idioma>

A continuación se ofrece una descripción detallada de estas opciones.

-url=<URL JDBC>Donde URL JDBC es el url de la conexión JDBC. La sintaxis del url es:“jdbc:db2:nombreSistema”Para obtener más información, consulte el apartado Acceso a base de datosutilizando el controlador JDBC de AS/400 Developer Kit para Java.

-user=<nombre usuario>Dondenombre usuario es el nombre del usuario. El valor por omisión es elID de usuario del usuario actual que ha iniciado la sesión de la conexiónlocal.

-password=<contraseña>Dondecontraseña es la contraseña del usuario. El valor por omisión es lacontraseña del usuario actual que ha iniciado la sesión de la conexión local.

-package=<nombre biblioteca/nombre paquete>Donde nombre biblioteca es la biblioteca donde se colocará el paquete, ynombre paquete es el nombre del paquete que debe generarse. El nombrede biblioteca por omisión es QUSRSYS. El nombre de paquete por omisiónse generará a partir del nombre del perfil. La longitud máxima del nombrede paquete es de 10 caracteres. Puesto que el nombre del perfil SQLJ serásiempre superior a 10 caracteres, el nombre de paquete por omisión que seconstruya será diferente del nombre de perfil. El nombre de paquete por

150 AS/400 Developer Kit para Java

Page 159: AS400 Kit Desarrollo Para Java - Rzaha

omisión se construirá concatenando las primeras letras del nombre deperfil con el número de clave del perfil. Si el número de clave del perfil essuperior a 10 caracteres de longitud, se utilizarán los últimos 10 caracteresdel número de clave del perfil para el nombre de paquete por omisión. Porejemplo, el siguiente diagrama muestra algunos nombres de perfil y susnombres de paquete por omisión:

Nombre perfil Nombre paquete por omisión

App_SJProfile0 App_SJPro0

App_SJProfile01234 App_S01234

App_SJProfile012345678 A012345678

App_SJProfile01234567891 1234567891

-commitctrl=<control de compromiso>Donde control de compromiso es el nivel de control de compromiso que sedesea. El control de compromiso puede tener cualquiera de los siguientesvalores de tipo carácter:

Valor DefiniciónC *CHG. Son posibles lecturas espurias,

lecturas no repetibles y lecturas fantasma.S *CS. Las lecturas espurias no son posibles,

pero sí las lecturas no repetibles y laslecturas fantasma.

A *ALL. Las lecturas espurias y las lecturas norepetibles no son posibles, pero sí las lecturasfantasma.

N *NONE. No son posibles lecturas espurias,lecturas no repetibles ni lecturas fantasma.Este es el valor por omisión.

-datefmt=<formato de fecha>Donde formato de fecha es el tipo de formato de fecha que se desea. Elformato de fecha puede tener cualquiera de los siguientes valores:

Valor DefiniciónUSA Estándar IBM de Estados Unidos

(mm.dd.aaaa,hh:mm a.m., hh:mm p.m.)ISO International Standards Organization

(aaaa-mm-dd, hh.mm.ss) Este es el valor poromisión.

EUR Estándar europeo de IBM (dd.mm.aaaa,hh.mm.ss)

JIS Japanese Industrial Standard Christian Era(aaaa-mm-dd, hh:mm:ss)

MDY Mes/Día/Año (mm/d/aa)DMY Día/Mes/Año (dd/mm/aa)YMD Año/Mes/Día (aa/mm/dd)JUL Juliana (aa/ddd)

El formato de fecha se utiliza al acceder a columnas de resultados de fecha.Todos los campos de fecha de salida se devuelven en el formatoespecificado. Para series de fecha de entrada, se utiliza el valorespecificado para determinar si la fecha se ha especificado en un formatoválido. El valor por omisión es ISO.

Capítulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java 151

Page 160: AS400 Kit Desarrollo Para Java - Rzaha

-datesep=<separador de fecha>Donde separador de fecha es el tipo de separador que desea utilizar. Elseparador de fecha se utiliza al acceder a columnas de resultados de fecha.El separador de fecha puede ser cualquiera de los siguientes valores:

Valor Definición/ Se utiliza una barra inclinada.. Se utiliza un punto., Se utiliza una coma.- Se utiliza un guión. Este es el valor por

omisión.blank Se utiliza un espacio.

-timefmt=<formato de hora>Donde formato de hora es el formato que desea utilizar para visualizarcampos de hora. El formato de hora se utiliza al acceder a columnas deresultados de fecha. Para series de hora de entrada, se utiliza el valorespecificado para determinar si la hora se ha especificado en un formatoválido. El formato de hora puede tener cualquiera de los siguientes valores:

Valor DefiniciónUSA Estándar IBM de Estados Unidos

(mm.dd.aaaa,hh:mm a.m., hh:mm p.m.)ISO International Standards Organization

(aaaa-mm-dd, hh.mm.ss) Este es el valor poromisión.

EUR Estándar europeo de IBM (dd.mm.aaaa,hh.mm.ss)

JIS Japanese Industrial Standard Christian Era(aaaa-mm-dd, hh:mm:ss)

HMS Hora/Minuto/Segundo (hh:mm:ss)

-timesep=<separador de hora>Donde separador de hora es el carácter que desea utilizar para acceder alas columnas de resultados de hora. El separador de hora puede sercualquiera de los siguientes valores:

Valor Definición: Se utilizan dos puntos.. Se utiliza un punto. Este es el valor por

omisión., Se utiliza una coma.blank Se utiliza un espacio.

-decimalpt=<coma decimal>Donde coma decimal es la coma decimal que desea utilizar. La comadecimal se utiliza para constantes numéricas en sentencias SQL. La comadecimal puede ser cualquiera de los siguientes valores:

Valor Definición. Se utiliza un punto. Este es el valor por

omisión., Se utiliza una coma.

152 AS/400 Developer Kit para Java

Page 161: AS400 Kit Desarrollo Para Java - Rzaha

-stmtCCSID=<CCSID>Donde CCSID es el identificador de juego de caracteres para las sentenciasSQL preparadas en el paquete. El valor por omisión es el valor del trabajodurante el tiempo de personalización.

-sorttbl=<nombre biblioteca/nombre tabla secuencia ordenación>Donde nombre biblioteca/nombre tabla secuencia ordenación es laubicación y el nombre de tabla de la tabla de secuencia de ordenación quedesea utilizar. La tabla de secuencia de ordenación se utiliza paracomparaciones de series en sentencias SQL. El nombre de biblioteca y elnombre de tabla de secuencia de ordenación tienen ambos un límite de 10caracteres. El valor por omisión se toma del trabajo durante el tiempo depersonalización.

-langID=<identificador de idioma>Donde identificador de idioma es el identificador de idioma que deseautilizar. El valor por omisión para el identificador de idioma se toma deltrabajo actual durante el tiempo de personalización. El identificador deidioma se utiliza junto con la tabla de secuencia de ordenación.

Para obtener información más detallada acerca de cualquiera de los camposanteriores, consulte la publicación DB2 for AS/400 SQL Programming, SC41-5611

[ Página de presentación de InformationCenter | 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 perfilpersonalizado DB2 en texto plano. El impresor de perfil, profp, imprime elcontenido 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 entexto plano, utilice el programa de utilidad profp de la forma siguiente:profp MyClass_SJProfile0.serDonde MyClass_SJProfile0.ser es el nombre del perfil que desea imprimir.

Para imprimir el contenido de la versión personalizada DB2 del perfil en textoplano, utilice el programa de utilidad db2profp de la forma siguiente:db2profp MyClass_SJProfile0.serDonde 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.

Utilización 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 opcioneses la lista de opciones que desea.

Las opciones disponibles para db2profp son:

Capítulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java 153

Page 162: AS400 Kit Desarrollo Para Java - Rzaha

-url=<URL JDBC>Donde URL JDBC es el url al que desea conectarse. En el apartadoConectarse a una base de datos de AS/400 con el controlador JDBC deAS/400 Developer Kit para Java hallará más información.

-user=<nombre usuario>Dondenombre usuario es el nombre del usuario del perfil.

-password=<contraseña>Donde contraseña es la contraseña del perfil de usuario.

[ Página de presentación de InformationCenter | 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 auditoresde clase de depuración. Loa auditores de clase de depuración se instalan en unconjunto existente de perfiles binarios. Una vez instalados los auditores de clase dedepuración, se anotan todas las llamadas RTStatement y RTResultSet efectuadasdurante la ejecución de la aplicación. Pueden anotarse en un archivo o en la salidaestándar. A continuación, las anotaciones pueden inspeccionarse para verificar elcomportamiento y rastrear errores de la aplicación. Tenga en cuenta que sólo seauditan las llamadas efectuadas en tiempo de ejecución a las interfacesRTStatement y RTResultSetcall subyacentes.

Para instalar auditores de clase de depuración, especifique lo siguiente en elindicador de mandatos de Qshell:

profdb MyClass_SJProfile0.ser

Donde MyClass_SJProfile0.ser es el nombre del perfil generado por el conversorSQLJ.

Para desinstalar auditores de clase de depuración, especifique lo siguiente en elindicador de mandatos de Qshell:

profdb -Cuninstall MyClass_SJProfile.ser

Donde MyClass_SJProfile0.ser es el nombre del perfil generado por el conversorSQLJ.

Para obtener información acerca de las opciones de línea de mandatos de profdb,

consulte www.sqlj.org , seleccione la categoría de implementación y diríjase ala clase sqlj.runtime.profile.util.AuditorInstaller que se encuentra en la

documentación de la API Runtime.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

154 AS/400 Developer Kit para Java

Page 163: AS400 Kit Desarrollo Para Java - Rzaha

Conversión de una instancia de perfil serializado a formato de claseJava mediante la herramienta de conversión de perfil SQLJ (profconv)

La herramienta de conversión de perfil SQLJ, (profconv), convierte unainstancia de perfil serializado a formato de clase Java. La herramienta profconv esnecesaria debido a que algunos navegadores no soportan la carga de un objetoserializado desde un archivo de recurso asociado con un applet. Ejecute elprograma de utilidad profconv para realizar la conversión.

Para ejecutar el programa de utilidad profconv, escriba lo siguiente en la línea demandatos de Qshell:profconv MyApp_SJProfile0.serDonde MyApp_SJProfile0.ser es el nombre de la instancia de perfil que deseaconvertir.

La herramienta profconv llama a sqlj -ser2class. Consulte el apartado

correspondiente a sqlj para obtener opciones de la línea de mandatos.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 7. Acceso a bases de datos mediante el soporte SQLJ DB2 de AS/400 Developer Kit para Java 155

Page 164: AS400 Kit Desarrollo Para Java - Rzaha

156 AS/400 Developer Kit para Java

Page 165: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 8. Ejecución de la aplicación Java en un sistemaprincipal sin interfaz gráfica de usuario

Si desea ejecutar la aplicación Java en un sistema principal que no tiene unainterfaz gráfica de usuario (GUI), como por ejemplo un sistema AS/400, puedeutilizar Abstract Window Toolkit (AWT) remoto o Class Broker para Java (CBJ).

AWT remoto se utiliza con las interfaces de instalación y administración de lasaplicaciones de servidor. Estas interfaces suelen tener un mínimo de gráficoscomplejos y un contenido altamente interactivo. AWT remoto distribuye losprocesos AWT entre el AS/400 y una estación de trabajo. Así pues, el nivel derespuesta de las operaciones con muchos gráficos y un alto grado de interacción noes tan rápido como en las implementaciones de AWT en plataformas conterminales gráficos conectados localmente. Para utilizar AWT remoto, consulte elapartado Configuración de AWT remoto.

Puede utilizar CBJ para servicios de GUI de alto rendimiento. Puesto que el AWTremoto no es aconsejable para operaciones con gráficos complejos o altainteracción, puede utilizar CBJ en su lugar, diseñado para estos entornos. Para

utilizar CBJ, consulte el apartado Configuración de CBJ.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Configurar AWT remoto para Java en una pantalla remotaCon AWT remoto se pueden ejecutar programas gráficos AWT Java en AS/400 sinefectuar cambios en AS/400 y visualizar los gráficos de forma remota. Para utilizarel AWT remoto debe tener el protocolo TCP/IP configurado y el JDK 1.1.x o Java 2SDK (J2SDK), Standard Edition, versión 1.2. de Sun Microsystems, Inc. instalado enel AS/400 y en la pantalla remota.

Como pantalla remota de AWT remoto se puede utilizar cualquier dispositivo dehardware con funciones gráficas, incluido IBM Network Station, que cumpla losrequisitos siguientes:v El sistema operativo que utiliza es Windows 95, Windows NT 4.0, IBM

Operating System/2 (OS/2), Sun Solaris o AIXv Está configurado para acceder al AS/400 con TCP/IPv Java Development Kit 1.1.x (es aconsejable JDK 1.1.7 o posterior) o J2SDK,

versión 1.2.

Para configurar AWT remoto, realice las tareas siguientes:1. Ponga los archivos de clase de AWT remoto a disposición de la pantalla

remota; para ello, copie los archivos en la pantalla remota o correlacione la víade acceso con una unidad de red de la pantalla remota.

2. Añada RAWTGui.zip o RAWTGui.jar a la CLASSPATH de la pantallaremotaPara JDK 1.1.x, añada el archivo RAWTGui.zip a la CLASSPATH de lapantalla remota estableciendo la variable de entorno CLASSPATH o utilizando

© Copyright IBM Corp. 1998, 1999 157

Page 166: AS400 Kit Desarrollo Para Java - Rzaha

el parámetro -classpath del mandato java. Para J2SDK, versión 1.2, elarchivo RAWTGui.jar se añade automáticamente a CLASSPATH al utilizar el

parámetro -jardel mandato java.3. Inicie AWT remoto en la pantalla remota.

Si desea obtener información más detallada y sugerencias sobre la utilización deAWT remoto, consulte los temas indicados a continuación: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 cómo imprimir, tarea que se realiza

igual que en el AWT Java estándar. También se enseña a imprimir en AS/400.v En el apartado Propiedades de AWT remoto se muestra cómo ejecutar una

aplicación de AWT remoto utilizando la propiedad os400.class.path.rawt.v En Restricciones de SecurityManager de AWT remoto se facilita información

sobre las restricciones en vigor cuando se ejecutan aplicaciones Java con AWTremoto bajo el control de SecurityManager.

Si desea obtener más información sobre la configuración de TCP/IP, consulte elcapítulo “How do I set up TCP/IP” de la publicación 0S/400 TCP/IP

Configuration and Reference, SC41-5420.

En Ejemplo: configurar AWT remoto para Java en una pantalla remota hallará unejemplo de la manera de configurar AWT remoto.

Si desea obtener más información sobre AWT, le remitimos a Abstract WindowToolkit de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: configurar AWT remoto para Java en una pantallaremota Windows

Este ejemplo muestra una manera de configurar AWT remoto en una pantallaremota Windows. Existen otras formas de hacerlo, en función de lo que prefiera.Puede utilizar un proceso parecido en otros sistemas operativos de pantallaremota. El proceso de configuración e inicio están automatizados por medio de unarchivo “.bat” Windows o de cualquier otro recurso de programación queproporcione el sistema operativo de la pantalla remota.

Para configurar AWT remoto para Java en una pantalla remota Windows, realicelas tareas siguientes:v Ponga los archivos de clase de AWT remoto a disposición 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 línea demandatos: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

Page 167: AS400 Kit Desarrollo Para Java - Rzaha

ojava -jar c:\rawt2\RAWTGui.jar

En Configurar AWT remoto para Java en una pantalla remota hallará másinformación.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Poner los archivos de clase de AWT remoto para Java adisposición de la pantalla remota

Para poner los archivos de clase de AWT remoto a disposición de la pantallaremota, siga estos pasos para Java Development Kit (JDK) 1.1. x o para Java 2 SDK(J2SDK), Standard Edition, versión 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 endos 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 pantallaremota.Copiar RAWTGui.zip desde /QIBM/ProdData/Java400/jdk1.1.x en la pantallaremota.

v Correlacionar la vía de acceso,/QIBM/ProdData/Java400/jdk1.1.x/RAWTGui.zip, con una unidad de red de lapantalla remota.

Si utiliza J2SDK, versión 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 endos archivos JAR: /QIBM/ProdData/Java400/jdk1.2/RAWTAHost.jar y/QIBM/ProdData/Java400/jdk1.2/RAWTGui.jarEl archivo RAWTAHost.jar contiene las clases de AWT remoto para AS/400. Elarchivo RAWTGui.jar contiene las clases de AWT remoto para la pantallaremota.Copiar RAWTGui.jar desde /QIBM/ProdData/Java400/jdk1.2 en una unidad dered de la pantalla remota.

v Correlacionar la vía de acceso, /QIBM/ProdData/Java400/jdk1.2/RAWTGui.jar,

con una unidad de red de la pantalla remota.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 8. Ejecución de la aplicación Java en un sistema principal sin interfaz gráfica de usuario 159

Page 168: AS400 Kit Desarrollo Para Java - Rzaha

Adición de RAWTGui.zip o RAWTGui.jar a la vía de acceso declases de la pantalla remota

Establecer la vía de acceso de clases permite que la máquina virtual Java de lapantalla remota encuentre las clases de AWT remoto. Para añadir el archivoRAWTGui.zip a la vía de acceso de clases de la pantalla remota, realice cualquierade estos pasos:v Establezca la variable de entorno CLASSPATH. Consulte la información de Java

Development Kit (JDK) correspondiente a la pantalla remota para obtenerdetalles.Añada la vía de acceso en la que se encuentra situado el archivo RAWTGui.zip ala variable de entorno CLASSPATH.

v Utilice el parámetro -classpath del mandato java.Cuando se utiliza el mandato java para iniciar AWT remoto, se puede utilizar elparámetro -classpath para especificar una vía de acceso de clases. El parámetroCLASSPATH incluye la vía de acceso donde se encuentra el archivoRAWTGui.zip.Por ejemplo, en Windows, el parámetro de vía de acceso de clases puede ser así:-classpath c:\jdk1.1.7\lib\classes.zip;c:\rawt\RAWTGui.zip

El soporte JAR de J2SDK, versión 1.2 establece la vía de acceso de clases, demodo que no es necesario establecer explícitamente el parámetro CLASSPATH.Para establecer la vía de acceso de clases e iniciar AWT remoto en una pantallaremota, especifique este mandato:java -jar <VÍA_DE_ACCESO>RAWTGui.jar

donde <VÍA_DE_ACCESO> es la unidad y el directorio totalmente calificadosdonde se encuentra el archivo RAWTGui.jar. Por ejemplo, java -jar

c:\rawt2\RAWTGui.jar.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

Iniciar AWT remoto para Java en un pantalla remotaEs necesario iniciar el daemon servidor en la pantalla remota una sola vez ypermanecerá activo hasta que lo finalice. Los programas Java que salen a AS/400no finalizan el servidor.

Nota: el diálogo Bienvenido permanece activo al iniciar el daemon servidor.Cuando se cierra el diálogo Bienvenido, finaliza el daemon servidor. Puedeminimizar la pantalla del diálogo Bienvenido mientras el daemon servidor estáactivo y utilizar la pantalla para finalizarlo.

Para iniciar el daemon servidor de Abstract Window Toolkit (AWT) remoto paraJDK 1.1.x, especifique lo siguiente en la línea de mandatos:java com.ibm.rawt.server.RAWTPCServer

Para iniciar el daemon servidor de AWT remoto para J2SDK, versión 1.2,especifique lo siguiente en la línea de mandatos:java -jar <VIA_DE_ACCESO>RAWTGui.jar

160 AS/400 Developer Kit para Java

Page 169: AS400 Kit Desarrollo Para Java - Rzaha

donde “VIA_DE_ACCESO” es la unidad y el directorio totalmente calificadosdonde 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 cuandola aplicación Java se conecta mediante AWT remoto. La aplicación Java utilizaráese puerto hasta finalizar. Las aplicaciones Java adicionales se conectarán a lossiguientes puertos por encima del 2000 que estén libres. El rango de puertosdisponibles llega hasta el 9999.

Si desea obtener más información sobre la configuración de TCP/IP, consulte elcapítulo “How do I set up TCP/IP” de la publicación OS/400 TCP/IP

Configuration and Reference, SC41-5420.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejecutar un programa Java con AWT remotoPara 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 línea de mandatos.Nota: debe definir la vía de acceso de clases Java del programa Java.

b. Pulse F4 (Solicitud).c. Entre el nombre de clase del programa Java en la línea de parámetro de

clase.d. Pulse F10 (Parámetros adicionales).e. Pulse la tecla Av Pág.f. Entre RmtAwtServer en la siguiente línea de parámetro de nombre de

propiedad.g. Entre la dirección TCP/IP (por ejemplo, 1.1.11.11) de la pantalla remota en

la siguiente línea de parámetro de valor de propiedad.h. Entre os400.class.path.rawt en la línea de parámetro de nombre de

propiedad.i. Entre 1 en la línea de parámetro de valor de propiedad.

j. Especifique + para entrar más propiedades.

k. Especifique java.version en la línea de parámetro de nombre de

propiedad.

l. Especifique 1.2 en la línea de parámetro de valor de propiedad.La línea 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 también el AWT remoto conNetscape.

Capítulo 8. Ejecución de la aplicación Java en un sistema principal sin interfaz gráfica de usuario 161

Page 170: AS400 Kit Desarrollo Para Java - Rzaha

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejecutar un programa Java utilizando AWT remoto con NetscapeA la hora de ejecutar aplicaciones Java con Netscape, esto puede hacerse de dosmaneras.

Una opción es iniciar el servidor de AWT remoto dentro de la máquina virtualJava de Netscape abriendo un archivo HTML que contengacom.ibm.rawt.server.StartRAWT.class. Por ejemplo, vea el el archivo RAWT.htmlque figura más abajo. Una vez se haya iniciado, ya puede iniciar una aplicaciónJava en el AS/400.

Otra posibilidad es iniciar el servidor de AWT remoto dentro de la máquina virtualJava de Netscape abriendo un archivo HTML que contengacom.ibm.rawt.server.StartRAWT400.class y las clases de AS/400 Toolbox para Java.Por ejemplo, vea el archivo RAWT400.html que se muestra más abajo. Una vez sehaya iniciado, ya puede iniciar la sesión en el AS/400 en el que reside la aplicaciónJava e iniciar dicha aplicación.

Ejecutar el servidor de AWT remoto dentro de la máquina virtual Java deNetscape:

Para ejecutar el servidor de AWT remoto dentro de la máquina virtual Java deNetscape, siga estos pasos:1. Edite este archivo .html de ejemplo de acuerdo con la información específica de

la instalación de RAWTGui.zip. Este archivo, RAWT.html, inicia AWT remotodentro de la máquina 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 página RAWT.html con Netscape 4.05 o posterior. Después de otorgartodos los privilegios solicitados, Netscape inicia el servidor de AWT remoto ylo ejecuta dentro de su máquina virtual Java.

3. Inicie una aplicación Java en el AS/400 utilizando AWT remoto.4. Una vez haya salido de la aplicación, pulse en el botón Recargar mientras

mantiene pulsada la tecla Mayús para iniciar de nuevo el servidor de AWTremoto.

Ejecutar el servidor de AWT remoto dentro de la máquina virtual Java deNetscape e iniciar la sesión en el AS/400:

Para ejecutar el servidor de AWT remoto dentro de la máquina virtual Java deNetscape e iniciar la sesión en el AS/400, siga estos pasos:1. Edite este archivo .html de ejemplo de acuerdo con la información específica de

la instalación de jt400.zip y RAWTGui.zip. Este archivo, RAWT400.html, iniciaAWT remoto y utiliza AS/400 Toolbox para Java para iniciar la sesión enAS/400.

162 AS/400 Developer Kit para Java

Page 171: AS400 Kit Desarrollo Para Java - Rzaha

<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 página RAWT400.html con Netscape 4.05. Después de otorgar todoslos privilegios solicitados, Netscape inicia el applet de AWT remoto quevisualiza un panel en el que puede elegir cualquiera de las opciones siguientes:v Iniciar la sesión en el AS/400 con AWT remoto utilizando AS/400 Toolbox

para Java para acceder al AS/400.v Entrar el nombre de aplicación Java y los argumentos con las propiedades de

AWT remoto.v Pulsar el botón Iniciar aplicación para iniciar la aplicación Java especificada

con AWT remoto.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Imprimir con AWT remotoImprimir con AWT remoto es una tarea que se realiza igual que en el AWT Javaestándar. La pantalla remota de AWT remoto procesa la salida de impresión y ladirige a cualquier impresora que el sistema operativo de la pantalla remotaconozca. Puede tratarse de una impresora que esté conectada directamente a lapantalla remota o bien de una impresora de red que el sistema operativo de lapantalla remota conozca.

Puede optar por imprimir en la pantalla remota o en un AS/400. Cuando unaaplicación emite una petición de impresión, se abre un diálogo de imprimir nuevo.La petición de impresión permite seleccionar una impresora de la pantalla remotao una de OS/400. Si selecciona una impresora de OS/400, aparecerá una pantallade inicio de sesión. Una vez iniciada la sesión, aparecerá una pantalla con eldiálogo de imprimir. Puede especificar el título de la página de cabecera y elarchivo, el archivo de impresión y la cola de impresión de OS/400. También puedeseleccionar el tamaño del papel, la orientación y el número de copias.

Para utilizar la impresión remota, debe instalar AS/400 Toolbox para Java(5763-JC1) y añadir lo siguiente a la vía de acceso de clases del AS/400:QIBM/ProdData/HTTP/Public/jt400/lib/jt400.zip

La vía de acceso de clases puede actualizarse añadiendo la variable de entornoCLASSPATH o bien utilizando el parámetro de vía de acceso de clases.

Nota: si aparece el mensaje siguiente mientras imprime en AS/400, significa queAS/400 Toolbox para Java no está instalado o bien que las clases de AS/400Toolbox para Java no se encuentran en la vía de acceso de clases.Error en carga de archivo de clase: com/ibm/as400/access/PrintObjectList.classSe ha producido una excepción durante la asignación de eventos:java.lang.NoClassDefFoundError: com/ibm/as400/access/PrintObjectList

Capítulo 8. Ejecución de la aplicación Java en un sistema principal sin interfaz gráfica de usuario 163

Page 172: AS400 Kit Desarrollo Para Java - Rzaha

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Propiedades de AWT remotoCuando se ejecuta una aplicación de AWT remoto Java en el sistema AS/400, se

debe utilizar la propiedad os400.class.path.rawt con el valor 1. Existe unnúmero de propiedades por omisión que son necesarias al utilizar AWT remoto.Estas propiedades por omisión, junto con la versión adecuada de AWT remoto y laCLASSPATH, se establecen al utilizar la propiedad os400.class.path.rawt. Laversión de AWT remoto se establece de acuerdo con la versión de JDK, que es laversión por omisión, si no se especifica, o la versión especificada con la propiedadjava.version.

Estas son las propiedades por omisión que son necesarias para AWT remoto.

Para JDK 1.1.x:v awt.toolkit=com.ibm.rawt.CToolkit

Para J2SDK, versión 1.2:v awt.toolkit=com.ibm.rawt2.ahost.java.awt.AHToolkitv 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 aplicación Java finaliza de forma anormal con elmensaje siguiente, compruebe la versión de Java de la pantalla remota.La versión de JDK del sistema principal de la aplicación/de laestación del usuario es incompatible con la versión de AWT remoto...

Para comprobar el nivel de versión, entre java -version en la línea de mandatos.Esta propiedad nueva puede utilizarse en una pantalla remota si hay algúnproblema con la versión de JDK. Esta propiedad no es procedente en AS/400. Si laversión 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 aplicación con la propiedadsiguiente, que indica la versión de Java: -DJdkVersion=1.1.x.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Restricciones de SecurityManager de AWT remotoLas aplicaciones Java que utilizan AWT remoto bajo el control de SecurityManagertienen algunas restricciones. Las clases de AWT remoto inician métodos, quellaman a métodos de comprobación SecurityManager en aquellos casos en que estáestablecido SecurityManager. En tales casos, es posible que una aplicación Java quese ejecute con AWT remoto se encuentre con una excepción SecurityException. Losmétodos de comprobación a los que se llama como resultado de la ejecución conAWT remoto son:v SecurityManager.checkAccess(..)v SecurityManager.checkMemberAccess(..)v SecurityManager.checkExit(..)

164 AS/400 Developer Kit para Java

Page 173: AS400 Kit Desarrollo Para Java - Rzaha

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

[ Página de presentación de InformationCenter | 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 gráficos Javahabilitados para Class Broker para Java en AS/400 y visualizar los gráficosremotamente.

Puede instalar CBJ por su cuenta o solicitar al administrador del sistema que loinstale. Si el administrador del sistema instala el producto, todos losprogramadores pueden compartir el mismo código Java.

Puede instalar CBJ en Windows 95/98/NT, UNIX o AS/400. En la mayoría de loscasos, debe instalar CBJ en la máquina cliente y en la máquina servidor.

Nota:si la máquina cliente ejecuta un applet cliente al que se accede a través de unservidor Web de la máquina servidor, no es necesario instalar CBJ en la máquinacliente.

Para instalar CBJ en AS/400, consulte el apartado Instalación de Class Broker paraJava en AS/400 .

Para instalar CBJ en la estación de trabajo, consulte el apartado Instalación de

Class Broker para Java en Windows 95/98/NT o UNIX .

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Instalación de Class Broker para Java en AS/400

Para instalar Class Broker para Java (CBJ) en AS/400, siga estos pasos:1. Asegúrese de que AS/400 Developer Kit para Java esté instalado correctamente.

Consulte el apartado Instalación de AS/400 Developer Kit para Java paracomprobar la instalación.

2. Seleccione un directorio del sistema de archivos integrado para almacenar elpaquete CBJ denominado cbj_1.1.jar. Por ejemplo, /usr/local.

3. Inicie el intérprete de Qshell entrando el mandato QSH y vaya al directorio queha 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 instalaen QIBM/ProdData/Java400/ext.

4. Entre este mandato en Qshell:jar xvf “VIA_ACCESO”cbj_1.1.jar

“VIA_ACCESO” es la vía de acceso al directorio donde se encuentra el paquetecbj_1.1.jar. Por ejemplo, QIBM/ProdData/Java400/ext.

Capítulo 8. Ejecución de la aplicación Java en un sistema principal sin interfaz gráfica de usuario 165

Page 174: AS400 Kit Desarrollo Para Java - Rzaha

Los archivos CBJ se encuentran en el subdirectorio, denominado/usr/local/JCBroker. Consulte el apartado Contenido de paquete de cbj_.1.1.jarpara obtener más información.

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 depuración), debe añadirJCBroker\lib y JCBroker\lib\jcb.jar a la opción de vía de acceso de clases enla línea de mandatos Java. No es aconsejable añadir JCBroker\lib yJCBroker\lib\jcb.jar a la variable de entorno CLASSPATH, ya que puedeentrar en conflicto con la carga de clases al ejecutar applets que tenganestablecido applet_jcb.jar en el indicador ARCHIVE.

7. Si desea ejecutar CBJ en modalidad de depuración, sustituya jcb.jar porjcbd.jar en la vía de acceso de clases o altere temporalmente el valor de vía deacceso de clases en la línea de mandatos Java. También puede utilizar estemandato:

CRTJVAPGM CLSF('/usr/local/JCBroker/lib/jcbd.jar')

8. Para obtener más información acerca de las API CBJ, demostraciones deejecución, propiedades de edición, diseño y escritura de aplicaciones CBJ yotros temas, consulte el archivo JCBroker/index.html del paquete cpj_1.1.jar .

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Instalación de Class Broker para Java en Windows o UNIX

Para instalar Class Broker para Java (CBJ) en Windows, siga estos pasos:1. Asegúrese de que JDK/JRE1.1 o JDK/JRE1.2 estén 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 apartadoContenido de paquete de cbj_.1.1.jar para obtener más información.

4. Si desea utilizar las clases CBJ (no en modalidad de depuración), añadaC:\JCBroker\lib y C:\JCBroker\lib\jcb.jar a la opción de vía de acceso declases en la línea de mandatos Java. Nota:no es aconsejable añadirlo a lavariable de entorno del sistema CLASSPATH, ya que puede entrar en conflictocon la carga de clases al ejecutar applets que tengan establecido applet_jcb.jaren el indicador ARCHIVE.

5. Si desea ejecutar CBJ en modalidad de depuración, sustituya jcb.jar porjcbd.jar en la vía 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 vía de acceso de clases Windows “;” por el

separador de vía de acceso de clases UNIX “:”.

166 AS/400 Developer Kit para Java

Page 175: AS400 Kit Desarrollo Para Java - Rzaha

v Sustituya las variables de entorno del sistema Windows “%XXX%” por lasvariables de entorno del sistema UNIX “$XXX”.

6. Para obtener más información acerca de las API CBJ, demostraciones deejecución, propiedades de edición, diseño y escritura de aplicaciones CBJ yotros temas, consulte el archivo JCBroker/index.htmldel paquete cpj_1.1.jar.

[ Página de presentación de InformationCenter | 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 adirectorios principales de subdirectorios. Los que no aparecen en negritacorresponden 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 (sólo para usuarios designados)| | |_____ ibm| | |_____ jcb| | | |___ proxies| | | |___ resources| | | |___ u t i l| | |_____ jcbimpl| | |___ transport| |________ version.log|_______ index.html (open it)

Capítulo 8. Ejecución de la aplicación Java en un sistema principal sin interfaz gráfica de usuario 167

Page 176: AS400 Kit Desarrollo Para Java - Rzaha

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,páginas HTML, archivos GIF archivos de clase y código fuente (para algunosejemplos) de varias aplicaciones de demostración. Puede ejecutar estos ejemplos dedemostración siguiendo las instrucciones. El directorio log es un espacio reservadopara archivos de anotaciones de depuración.

doc

Este directorio contiene los dos subdirectorios siguientes: api y guide. En esteespacio se almacenan la guía de la API CBJ y una guía de usuario acerca de CBJ.La documentación de la API se ha generado con la herramienta javadoc de J2SDK,versión 1.2. Para examinar el documento de API o la guía de usuario, abra elarchivo index.html en el directorio correspondiente. La guía de usuario es undocumento de nivel introductorio, mientras que la guía QuickStart es undocumento que permite un inicio rápido.

Este directorio también contiene un archivo FAQ.html y el archivo quickStart.html,que describe cómo instalar y utilizar CBJ y muestra cómo ejecutar los ejemplos dedemostración.

lib

Este directorio contiene las clases y recursos CBJ necesarios para desarrollar,ejecutar y desplegar aplicaciones nuevas basadas en CBJ. Las clases estánempaquetadas en el archivo jcb.jar. Para la modalidad de depuración, las clasesestán empaquetadas en el archivo jcbd.jar. Las clases incluidas en el indicadorARCHIVE de un applet están empaquetadas en el archivo applet_jcb.jar. Para lamodalidad de depuración, las clases están empaquetadas en el archivo applet_jcbd.jar. El archivo de propiedades de JCB, denominado JCB.properties, seencuentra en el subdirectorio com/ibm/jcb/resources. La ejecución CBJ lo leecuando se inicia. Puede cambiar este archivo para que refleje sus preferencias. Laspropiedades de describen en la sección de instalación y configuración. Laspropiedades que sólo afectan a los applets se encuentran en el archivoapplet_JCB.properties, que forma parte de applet_ jcb.jar y applet_ jcbd.jar.También puede cambiar este archivo para que refleje sus preferencias al ejecutar enmodalidad de applet. Para cambiar este archivo, ejecute la aplicación Editor Javaque reside en este directorio.

src

Este directorio contiene el código fuente CBJ y el archivo de anotaciones de laversión interna, denominado version.log. El directorio está vacío excepto en el casode paquetes seleccionados.

index.html

Esta es la página inicial que se utiliza como referencia del resto de la

documentación.

168 AS/400 Developer Kit para Java

Page 177: AS400 Kit Desarrollo Para Java - Rzaha

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

Capítulo 8. Ejecución de la aplicación Java en un sistema principal sin interfaz gráfica de usuario 169

Page 178: AS400 Kit Desarrollo Para Java - Rzaha

170 AS/400 Developer Kit para Java

Page 179: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 9. Seguridad Java

La mayoría de los programas Java que se ejecutan en AS/00 son aplicaciones y noapplets, por lo que no están restringidos por el modelo de seguridad “sandbox”.Desde el punto de vista de la seguridad, las aplicaciones Java están sujetas a lasmismas restricciones que cualquier otro programa en AS/400. Para ejecutar unprograma Java en AS/400, se debe tener autorización sobre el archivo de clase enel sistema de archivos integrado. Una vez iniciado, el programa se ejecuta con laautorización del usuario.

Se puede utilizar la autorización adoptada para acceder a los objetos con laautorización del usuario que ejecuta el programa y la autorización del propietariodel programa. La autorización adoptada da temporalmente a un usuarioautorización sobre objetos a los que, en principio, no habría estado autorizado aacceder. En el tema dedicado al mandato Crear programa Java (CRTJVAPGM)hallará información detallada sobre los dos nuevos parámetros de autorizaciónadoptada, que son USRPRF y USEADPAUT.

El cargador y el verificador de bytecodes, dentro de la máquina virtual Java,también constituyen una medida del modelo de seguridad Java. Al igual quesucede con los applets, el cargador y el verificador de bytecodes comprueban quelos bytecodes sean válidos y que los tipos de datos se utilicen correctamente.También comprueban que se acceda correctamente a los registros y a la memoria yque la pila no sufra desbordamientos ni subdesbordamientos. Estascomprobaciones garantizan que la máquina virtual Java puede ejecutar con totalseguridad la clase sin poner en peligro la integridad del sistema.

La ampliación estándar Java SSL de JDK 1.1 es otro factor de seguridad al queAS/400 Developer Kit para Java da soporte. SSL proporciona los medios paraautenticar un servidor y un cliente con el fin de ofrecer privacidad e integridad dedatos. Toda comunicación SSL comienza con el “reconocimiento” mutuo delservidor y el cliente. Durante el reconocimiento, SSL negocia la suite de cifrado queutilizarán el cliente y el servidor para comunicarse entre sí. La suite de cifrado esuna combinación de diversas funciones de seguridad disponibles a través de SSL.La combinación de varias funciones distintas de seguridad ofrece un mayor gradode seguridad en las comunicaciones de cliente y servidor.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

El modelo de seguridad JavaLos applets Java se pueden bajar de cualquier sistema; por tanto, dentro de lamáquina virtual Java existen mecanismos de seguridad encargados de la protecciónfrente a applets malintencionados. El sistema de ejecución Java verifica losbytecodes a medida que la máquina virtual Java los va cargando. Esto garantizaque son bytecodes válidos y que el código no viola ninguna de las restriccionesque la máquina virtual Java impone a los applets Java. Éstas afectan a lasoperaciones que pueden realizar los applets, a la forma en que éstos puedenacceder a la memoria y a la manera en que pueden utilizar la máquina virtualJava. Las restricciones se imponen con el fin de impedir que un applet Java pueda

© Copyright IBM Corp. 1998, 1999 171

Page 180: AS400 Kit Desarrollo Para Java - Rzaha

acceder al sistema operativo subyacente o a los datos del sistema. Este modelo deseguridad se denomina “sandbox” y en él los applets Java sólo tienen “libertad demovimiento” en un espacio acotado.

El modelo de seguridad “sandbox” es una combinación del cargador de clases, elverificador de archivos de clase y la clase java.lang.SecurityManager.

Para obtener más información acerca de la seguridad, consulte la documentacióndedicada a la seguridad de Sun Microsystems, Inc. y el apartado protección de lasaplicaciones Java con SSL.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Conseguir que una aplicación Java sea segura con la capa de socketsseguros

Puede utilizar la capa de sockets seguros (SSL) para hacer que la aplicación Javasea más segura. SSL hace lo siguiente para mejorar la seguridad de la aplicación:v Protege los datos de comunicación 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 comunicación de sockets de laaplicación Java. Los certificados digitales son un estándar de Internet paraidentificar aplicaciones, usuarios y sistemas seguros. Puede controlar loscertificados digitales utilizando el Gestor de certificados digitales de IBM. Paraobtener más información, consulte el apartado Gestor de certificados digitales IBM.

Para conseguir que la aplicación Java sea más segura con SSL:v Prepare AS/400 para que dé soporte a SSL.v Diseñe la aplicación Java para que utilice SSL; para ello:

– Modifique el código de socket Java para que utilice las fábricas de sockets sino las utiliza todavía.

– Modifique el código Java para que utilice SSL.v Utilice un certificado digital para conseguir que la aplicación Java sea más

segura; para ello:1. Elija el tipo de certificado digital que desee utilizar.2. Utilice el certificado digital cuando ejecute la aplicación.

También puede registrar la aplicación Java como aplicación segura; para ello,utilice la API QsyRegisterAppForCertUse. Para obtener más información, consultela sección correspondiente a QsyRegisterAppForCertUse en la publicación System

API Reference: Security APIs .

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

172 AS/400 Developer Kit para Java

Page 181: AS400 Kit Desarrollo Para Java - Rzaha

Preparación de AS/400 para el soporte de capa de socketsseguros

Para preparar el sistema a fin de que pueda utilizar SSL, es necesario instalar elprograma bajo licencia Digital Certificate Manager:v 5769-SS1 OS/400 - Digital Certificate Manager

También es necesario instalar uno de los programas bajo licencia CryptographicAccess Provider siguientes:v 5769-AC1 Cryptographic Access Provider de 40 bitsv 5769-AC2 Cryptographic Access Provider de 56 bitsv 5769-AC3 Cryptographic Access Provider de 128 bits

También debe asegurarse de que puede acceder a un certificado digital, o biencrear uno, en el sistema. Si desea obtener más información sobre la gestión decertificados digitales de AS/400 e Internet, consulte la guía de iniciación de IBMDigital Certificate Manager.

Para obtener más información sobre la seguridad de AS/400 en general, consulte laguía de iniciación de Firewall.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Cryptographic Access ProvidersLos programas Cryptographic Access Provider ofrecen innumerables suites decifrado al sistema. Una suite de cifrado es una combinación de distintas funcionesde seguridad. En esta lista se indica cuáles son las suites de cifrado que ofrece cadaprograma Cryptographic Access Provider:

5769-AC1 Cryptographic Access Provider de 40 bitsSSL_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 bitsSSL_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 bitsSSL_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

Capítulo 9. Seguridad Java 173

Page 182: AS400 Kit Desarrollo Para Java - Rzaha

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

Según el país en que se encuentre, es posible que el número de programasCryptographic Access Provider de entre los que puede elegir sea más limitado.Una vez cargado un programa Cryptographic Access Provider, se puede utilizarcualquiera de las suites de cifrado que ofrece.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Elección de un certificado digitalA la hora de decidir cuál es el certificado digital que va a utilizar, debe tomar enconsideración diversos factores. Se puede utilizar el certificado por omisión delsistema o bien especificar otro certificado.

Interesa utilizar el certificado por omisión del sistema si:v No existe ningún requisito específico de seguridad para la aplicación Java.v Se desconoce el tipo de seguridad que se necesita para la aplicación Java.v El certificado por omisión del sistema cumple los requisitos de seguridad de la

aplicación Java.

Nota: si decide que desea utilizar el certificado por omisión del sistema, consultecon el administrador del sistema para asegurarse de que se ha creado uncertificado por omisión del sistema. Para obtener más información acerca de lagestión de certificados digitales, consulte la Guía de iniciación de IBM DigitalCertificate Manager.

Si no desea utilizar el certificado por omisión del sistema, tendrá que elegir otrocertificado. Puede optar por dos tipos de certificados:v Un certificado de usuario, que identifica al usuario de la aplicación.v Un certificado de sistema, que identifica al sistema en el que se ejecuta la

aplicación.

Las cuestiones planteadas a continuación pueden servirle de ayuda a la hora dedecidirse por un certificado de usuario o uno de sistema:v ¿Cómo se ejecuta la aplicación Java, como cliente o como servidor?

– Si se ejecuta como cliente, probablemente le interese utilizar un certificado deusuario.

– Si se ejecuta como servidor, probablemente le interese utilizar un certificadode sistema.

v ¿A quién desea que identifique el servidor, al usuario que trabaja con laaplicación o al sistema en el que se ejecuta la misma?– Si desea que identifique al usuario que trabaja con la aplicación, le interesa

utilizar un certificado de usuario.– Si desea que identifique al sistema en el que se ejecuta la aplicación, le

interesa utilizar un certificado de sistema.

174 AS/400 Developer Kit para Java

Page 183: AS400 Kit Desarrollo Para Java - Rzaha

Una vez que sepa cuál es el tipo de certificado que necesita, podrá elegircualquiera de los certificados digitales que haya en cualquiera de los contenedoresde certificados a los que pueda acceder.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Utilización del certificado digital al ejecutar la aplicación JavaPara utilizar SSL, es necesario ejecutar la aplicación Java con un certificado digital.

Para especificar el certificado digital que debe utilizarse, utilice las siguientespropiedades:v -os400.certificateContainerv -os400.certificateLabel

Por ejemplo, si desea ejecutar la aplicación Java MyClass.class utilizando elcertificado digital MYCERTIFICATE, y MYCERTIFICATE se encuentra en elcontenedor de certificados digitales YOURDCC, el mandato java será el siguiente:java -os400.certificateContainer=YOURDCC-os400.certificateLabel=MYCERTIFICATE MyClass

Si todavía no se ha decidido por un certificado digital, consulte el apartado Decidircuál es el certificado digital que va a utilizarse. También puede decidir utilizar elcertificado por omisión del sistema, que está almacenado en el contenedor decertificados por omisión del sistema.

Para utilizar el certificado digital por omisión del sistema, no es necesario queespecifique ningún certificado ni ningún contenedor de certificados en ningunaparte. La aplicación Java utilizará el certificado digital por omisión del sistema deforma automática.

Siga leyendo para obtener más información sobre los siguientes temas:v Certificados digitales y la propiedad -os400.certificateLabel (página “Certificados

digitales y la propiedad -os400.certificateLabel”)v Contenedores de certificados digitales y la propiedad -os400.certificateContainer

(página “Contenedores de certificados digitales y la propiedad-os400.certificateContainer” en la página 176)

Si desea obtener más información sobre la gestión de certificados digitales deAS/400 e Internet, consulte la guía de iniciación de IBM Digital CertificateManager.

Certificados digitales y la propiedad -os400.certificateLabelLos certificados digitales son un estándar de Internet para identificar aplicaciones,usuarios y sistemas seguros. Los certificados digitales se almacenan encontenedores de certificados digitales. Si desea utilizar el certificado por omisiónde un contenedor de certificados digitales, no es necesario que especifique unaetiqueta de certificado. Si desea utilizar un certificado digital determinado, esnecesario que especifique la etiqueta de dicho certificado en el mandato javautilizando esta propiedad:-os400.certificateLabel=

Por ejemplo, si el nombre del certificado que desea utilizar es MYCERTIFICATE, elmandato java especificado será el siguiente:java -os400.certificateLabel=MYCERTIFICATE MyClass

Capítulo 9. Seguridad Java 175

Page 184: AS400 Kit Desarrollo Para Java - Rzaha

En este ejemplo, la aplicación Java MyClass utilizará el certificadoMYCERTIFICATE. MYCERTIFICATE deberá estar en el contenedor de certificadospor omisión del sistema para que MyClass pueda utilizarlo.

Contenedores de certificados digitales y la propiedad-os400.certificateContainerLos contenedores de certificados digitales almacenan certificados digitales. Si deseautilizar el contenedor de certificados por omisión del sistema AS/400, no esnecesario que especifique un contenedor de certificados. Si desea utilizar uncontenedor de certificados digitales determinado, es necesario que especifiquedicho contenedor de certificados digitales en el mandato java utilizando estapropiedad:-os400.certificateContainer=

Por ejemplo, si el nombre del contenedor de certificados que contiene el certificadodigital que desea utilizar se denomina MYDCC, el mandato java que deberíaentrar sería:java -os400.certificateContainer=MYDCC MyClass

En este ejemplo, la aplicación Java llamada MyClass.class se ejecutaría en elsistema utilizando el certificado digital por omisión que se halla en el contenedorde certificados digitales llamado MYDCC. Los sockets creados en la aplicaciónutilizarán el certificado por omisión de MYDCC para identificarse y hacer que lascomunicaciones sean seguras.

Si deseara utilizar el certificado digital MYCERTIFICATE en el contenedor decertificados digitales, el mandato java especificado sería el siguiente:java -os400.certificateContainer=MYDCC-os400.certificateLabel=MYCERTIFICATE MyClass

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Modificación del código Java para utilizar fábricas de socketsPara utilizar SSL con el código existente, primero debe modificar éste para queutilice las fábricas de sockets.

Para modificar el código para que utilice fábricas de sockets:1. Añada la línea siguiente al programa con el fin de importar la clase

SocketFactory:import javax.net.*;

2. Añada una línea que declare una instancia de un objeto SocketFactory. Porejemplo:SocketFactory socketFactory

3. Inicialice la instancia de SocketFactory definiéndola como igual al métodoSocketFactory.getDefault(). Por ejemplo:socketFactory = SocketFactory.getDefault();

v La declaración completa de SocketFactory debe ser así:SocketFactory socketFactory =SocketFactory.getDefault();

4. Inicialice los sockets existentes. Llame al método SocketFactorycreateSocket(sistpral,puerto) en la fábrica de sockets para cada socket quedeclare.

176 AS/400 Developer Kit para Java

Page 185: AS400 Kit Desarrollo Para Java - Rzaha

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 desistema principal.port es una variable de tipo entero que representa el número de puerto de laconexión por socket.

Una vez realizados todos los pasos anteriores, el código utilizará fábricas desockets. No es necesario efectuar ningún otro cambio en el código. Todos losmétodos a los que se llama y la sintaxis con sockets seguirán funcionando.

En Ejemplos: modificar el código Java para que utilice fábricas de sockets deservidor hallará un ejemplo de programa cliente convertido para que utilicefábricas de sockets.

En el apartado Ejemplos: modificación del código Java para utilizar fábricas desockets de cliente hallará un ejemplo de programa cliente convertido para queutilice fábricas de sockets.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplos: modificación del código Java para utilizar fábricas desockets de servidorLos ejemplos dados a continuación muestran la manera en que se puede modificaruna clase de socket sencilla llamada simpleSocketServer de forma que utilicefábricas de sockets para crear todos los sockets. El primer ejemplo muestra la clasesimpleSocketServer sin fábricas de sockets. El segundo ejemplo muestra la clasesimpleSocketServer con fábricas de sockets. En el segundo ejemplo,simpleSocketServer cambia de nombre y pasa a llamarse factorySocketServer.

Ejemplo 1: programa Socket Server sin fábricas 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 manejaría más de un único cliente así...Socket s = serverSocket.accept();BufferedInputStream is = new BufferedInputStream(s.getInputStream());BufferedOutputStream os = new BufferedOutputStream(s.getOutputStream());// Este servidor tan sólo se hace eco de lo que se le envía...byte buffer[] = new byte[4096];int bytesRead;// se realiza la operación read hasta que se devuelve “eof”while ((bytesRead = is.read(buffer)) > 0) {os.write(buffer, 0, bytesRead); // se graba lo recibido

Capítulo 9. Seguridad Java 177

Page 186: AS400 Kit Desarrollo Para Java - Rzaha

os.flush(); // se vacía el almacenamiento intermedio de salida}s.close();serverSocket.close();

} // fin de main()} // fin de la definición de clase

Ejemplo 2: programa Simple Socket Server con fábricas de sockets/* Archivo factorySocketServer.java */// es necesario importar javax.net para tomar la clase ServerSocketFactoryimport 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 fábrica 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 manejaría más de un único cliente así...Socket s = serverSocket.accept();BufferedInputStream is = new BufferedInputStream(s.getInputStream());BufferedOutputStream os = new BufferedOutputStream(s.getOutputStream());// Este servidor tan sólo se hace eco de lo que se le envía...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 información previa, consulte el apartado Modificación del código parautilizar fábricas de sockets.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplos: modificación del código Java para utilizar fábricas desockets de clienteLos ejemplos dados a continuación muestran la manera en que se puede modificaruna clase de socket sencilla llamada simpleSocketClient de forma que utilicefábricas de sockets para crear todos los sockets. El primer ejemplo muestra la clasesimpleSocketClient sin fábricas de sockets. El segundo ejemplo muestra la clasesimpleSocketClient con fábricas de sockets. En el segundo ejemplo,simpleSocketClient cambia de nombre y pasa a llamarse factorySocketClient.

Ejemplo 1: programa Socket Client sin fábricas de sockets

178 AS/400 Developer Kit para Java

Page 187: AS400 Kit Desarrollo Para Java - Rzaha

/* 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 fábricas 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// fábrica de sockets y utilizar ésta para crear sockets.SocketFactory socketFactory = SocketFactory.getDefault();// Ahora la fábrica 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 información previa, consulte el apartado Modificación del código parautilizar fábricas de sockets.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Modificación del código Java para utilizar la capa de socketsseguros

Si el código utiliza fábricas de sockets para crear los sockets, puede añadir alprograma el soporte SSL. Si el código no utiliza fábricas de sockets, consulteModificar el código Java para que utilice fábricas de sockets.

Capítulo 9. Seguridad Java 179

Page 188: AS400 Kit Desarrollo Para Java - Rzaha

Para modificar el código para que utilice SSL:v Importe javax.net.ssl.* para añadir el soporte SSL:

import javax.net.ssl.*;

v Declare una fábrica de sockets utilizando SSLSocketFactory para inicializarla:SocketFactory newSF = SSLSocketFactory.getDefault();

v Utilice la nueva fábrica de sockets para inicializar los sockets de la mismamanera que ha utilizado la anterior:Socket s = newSF.createSocket(args[0], serverPort);

El código ya utiliza el soporte SSL. No es necesario realizar ningún cambio más enél.

Consulte los apartados Ejemplos: modificación del cliente Java para utilizar la capade sockets seguros y Ejemplos: modificación del servidor Java para utilizar la capade sockets seguros para obtener código de ejemplo.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplos: modificación del servidor Java para utilizar la capa desockets segurosLos ejemplos que se dan a continuación muestran la manera de modificar unaclase llamada factorySocketServer para que utilice SSL.

El primer ejemplo muestra la clase factorySocketServer sin SSL. El segundoejemplo muestra la misma clase, que cambia de nombre y pasa a llamarsefactorySSLSocketServer, con SSL.

Ejemplo 1: clase factorySocketServer sencilla sin soporte SSL/* Archivo factorySocketServer.java */// es necesario importar javax.net para tomar la clase ServerSocketFactoryimport 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 fábrica 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 manejaría más de un único cliente así...Socket s = serverSocket.accept();BufferedInputStream is = new BufferedInputStream(s.getInputStream());BufferedOutputStream os = new BufferedOutputStream(s.getOutputStream());// Este servidor tan sólo se hace eco de lo que se le envía.byte buffer[] = new byte[4096];int bytesRead;while ((bytesRead = is.read(buffer)) > 0) {

180 AS/400 Developer Kit para Java

Page 189: AS400 Kit Desarrollo Para Java - Rzaha

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

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

}}

Ejemplo 2: clase factorySocketServer sencilla con soporte SSL/* Archivo factorySocketServer.java */// es necesario importar javax.net para tomar la clase ServerSocketFactoryimport 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 fábrica 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 manejaría más de un único cliente así...Socket s = serverSocket.accept();BufferedInputStream is = new BufferedInputStream(s.getInputStream());BufferedOutputStream os = new BufferedOutputStream(s.getOutputStream());// Este servidor tan sólo se hace eco de lo que se le envía.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 información previa, consulte el apartado Modificación del código Javapara utilizar la capa de sockets seguros.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplos: modificación del cliente Java para utilizar la capa desockets segurosLos ejemplos que se dan a continuación muestran la manera de modificar unaclase llamada factorySocketClient para que utilice SSL.

El primer ejemplo muestra la clase factorySocketClient sin SSL. El segundo ejemplomuestra la misma clase, que cambia de nombre y pasa a llamarsefactorySSLSocketClient, con SSL.

Capítulo 9. Seguridad Java 181

Page 190: AS400 Kit Desarrollo Para Java - Rzaha

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 SSLimport 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 más.// ¡Ahí está la gracia de utilizar fábricas!Socket s = socketFactory.createSocket(args[0], serverPort);...// El resto del programa sigue a partir de aquí.

Para obtener información previa, consulte el apartado Modificación del código Javapara utilizar la capa de sockets seguros.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

182 AS/400 Developer Kit para Java

Page 191: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 10. Crear un programa Java internacionalizado

Si necesita adaptar un programa Java a una región concreta del mundo, puedecrear 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 código sensibles al entorno nacional. Por ejemplo, las

series, las fechas y los números del programa.2. Definir u obtener el entorno nacional con la clase Locale.3. Formatear las fechas y los números con el fin de especificar un entorno

nacional si no se desea utilizar el entorno nacional por omisión.4. Crear paquetes de recursos para manejar las series y demás datos sensibles al

entorno nacional.

Para llevar a cabo estas tareas en programas Java propios, consulte los ejemplossiguientes:v Internacionalización de las fechas con la clase java.util.DateFormatv Internacionalización de las presentaciones numéricas con la clase

java.util.NumberFormatv Internacionalización de los datos específicos de entorno nacional con la clase

java.util.ResourceBundle

Si desea obtener más información sobre la internacionalización, pulse en cualquierade los enlaces siguientes:

v AS/400 National Language Support, SC41-5101

v AS/400 International Application Development, SC41-5603v Documentación sobre internacionalización de Sun Microsystems, Inc.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Entornos nacionales JavaUn entorno nacional es una región geográfica o política del mundo que tiene unascostumbres y un idioma comunes. En Java, la clase Locale representa un entornonacional.

Entornos nacionales Java soportados:

AS/400 Developer Kit para Java da soporte a los entornos nacionales que seindican a continuación. En AS/400, el entorno nacional por omisión vienedeterminado por los valores LANGID y CNTRYID del trabajo. En Propiedades desistema Java hallará información más detallada.

Nombre de entorno nacionalen JDK 1.1.6

Nombre de entorno nacionalISO

Idioma/país

ar ar_EG Árabe/Egiptobe be_BY Bielorruso/Bielorrusiabg bg_BG Búlgaro/Bulgaria

© Copyright IBM Corp. 1998, 1999 183

Page 192: AS400 Kit Desarrollo Para Java - Rzaha

Nombre de entorno nacionalen JDK 1.1.6

Nombre de entorno nacionalISO

Idioma/país

ca ca_ES Catalán/Españacs cs_CZ Checo/República Checada da_DK Danés/Dinamarcade de_DE Alemán/Alemaniade_AT de_AT Alemán/Austriade_CH de_CH Alemán/Suizael el_GR Griego/Greciaen en_US Inglés/EE.UU.en_AU en_AU Inglés/Australiaen_CA en_CA Inglés/Canadáen_GB en_GM Inglés/Gran Bretañaen_IE en_IE Inglés/Irlandaen_NZ en_NZ Inglés/Nueva Zelandaen_ZA en_ZA Inglés/Sudáfricaes es_ES Español/Españaes_AR es_AR Español/Argentinaes_BO es_BO Español/Boliviaes_CL es_CL Español/Chilees_CR es_CR Español/Costa Ricaes_DO es_DO Español/República

Dominicanaes_EC es_EC Español/Ecuadores_GT es_GT Español/Guatemalaes_HN es_HN Español/Hondurases_MX es_MX Español/Méxicoes_NI es_NI Español/Nicaraguaes_PA es_PA Español/Panamáes_PE es_PE Español/Perúes_PR es_PR Español/Puerto Ricoes_PY es_PY Español/Paraguayes_SV es_SV Español/El Salvadores_UY es_UY Español/Uruguayes_VE es_VE Español/Venezuelaet et_EE Estonio/Estoniafi fi_FI Finlandés/Finlandiafr fr_FR Francés/Franciafr_BE fr_BE Francés/Bélgicafr_CA fr_CA Francés/Canadáfr_CH fr_CH Francés/Suizahr hr_HR Croata/Croaciahu hu_HU Húngaro/Hungríais is_IS Islandés/Islandiait it_IT Italiano/Italiait_CH it_CH Italiano/Suizaiw iw_IL Hebreo/Israelja ja_JP Japonés/Japónko ko_KR Coreano/Corealt lt_LT Lituano/Lituanialv lv_LV Letón/Letoniamk mk_MK Macedonio/Macedonianl nl_NL Holandés/Países Bajosnl_BE nl_BE Flamenco/Bélgicano no_NO_B Noruego/Noruegano_NO_NY no_NO_NY Noruego/Noruega, NY

184 AS/400 Developer Kit para Java

Page 193: AS400 Kit Desarrollo Para Java - Rzaha

Nombre de entorno nacionalen JDK 1.1.6

Nombre de entorno nacionalISO

Idioma/país

pl pl_PL Polaco/Poloniapt pt_PT Portugués/Portugalro ro_RO Rumano/Rumaníaru ru_RU Ruso/Rusiash sh_SP Serbocroata/Serbiask sk_SK Eslovaco/Eslovaquiasl sl_SI Esloveno/Esloveniasq sq_AL Albanés/Albaniasr sr_SP Serbio/Serbiasv sv_SE Sueco/Sueciatr tr_TR Turco/Turquíauk uk_UA Ucraniano/Ucraniazh zh_CN Chino simplificado/Chinazh_TW zh_TW Chino tradicional/Taiwán

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: internacionalización de las fechas con la clasejava.util.DateFormat

Este ejemplo muestra cómo pueden utilizarse los entornos nacionales paraformatear las fechas.

Ejemplo 1: enseña a utilizar la clase java.util.DateFormat para internacionalizar lasfechas//**************************// 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 fechaDate now = new Date();// Se obtienen los formateadores de fecha de los entornos nacionales por// omisión, alemán y francésDateFormat 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 fechasSystem.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á más información.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 10. Crear un programa Java internacionalizado 185

Page 194: AS400 Kit Desarrollo Para Java - Rzaha

Ejemplo: internacionalización de las presentaciones numéricas con laclase java.util.NumberFormat

Este ejemplo muestra cómo pueden utilizarse los entornos nacionales paraformatear los números.

Ejemplo 1: enseña a utilizar la clase java.util.NumberFormat para internacionalizarla salida numérica.//**************************// Archivo: NumberExample.java//**************************import java.lang.*;import java.text.*;import java.util.*;public class NumberExample {

public static void main(String args[]) throws NumberFormatException {// El número que debe formatearsedouble number = 12345.678;// Se obtienen los formateadores de los entornos nacionales// por omisión, español y japonésNumberFormat defaultFormat = NumberFormat.getInstance();NumberFormat spanishFormat = NumberFormat.getInstance(new

Locale(“es”, “ES”));NumberFormat japaneseFormat = NumberFormat.getInstance(Locale.JAPAN);// Se imprimen los números con el formato por omisión, español y japonés// (Nota: NumberFormat no es necesario para el formato por omisión)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á más información.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplo: internacionalización de los datos específicos de entornonacional con la clase java.util.ResourceBundle

Este ejemplo muestra cómo pueden utilizarse los entornos nacionales junto conpaquetes de recursos para internacionalizar las series del programa.

Para que el programa ResourceBundleExample funcione como se pretende, senecesitan los archivos de propiedades siguientes:

Contenido de RBExample.propertiesHello.text=Hello

Contenido de RBExample_de.propertiesHello.text=Guten Tag

Contenido de RBExample_fr_FR.propertiesHello.text=Bonjour

Ejemplo 1: enseña a utilizar la clase java.util.ResourceBundle para internacionalizarlos datos específicos de entorno nacional

186 AS/400 Developer Kit para Java

Page 195: AS400 Kit Desarrollo Para Java - Rzaha

//*********************************// 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 omisiónrb = ResourceBundle.getBundle(resourceName);System.out.println(“Default : ” + rb.getString(“Hello” + “.text”));// Se solicita un paquete de recursos con un entorno nacional// especificado de manera explícitarb = ResourceBundle.getBundle(resourceName, Locale.GERMANY);System.out.println(“German : ” + rb.getString(“Hello” + “.text”));// No existe ningún archivo de propiedades para China en este// ejemplo... se utilizará el valor por omisiónrb = 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 ningún archivo de propiedades para China en este// ejemplo... se utilizará el valor por omisión, 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á más información.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 10. Crear un programa Java internacionalizado 187

Page 196: AS400 Kit Desarrollo Para Java - Rzaha

188 AS/400 Developer Kit para Java

Page 197: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 11. Ajustar el rendimiento de los programas Javacon AS/400 Developer Kit para Java

A la hora de construir una aplicación Java para AS/400, debe tomar enconsideración diversos aspectos del rendimiento de las aplicaciones Java. He aquíalgunos enlaces con información detallada y sugerencias para obtener unrendimiento 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 elrendimiento de ejecución del código Java.

v Cambie los niveles de optimización para conseguir el mejor rendimiento detransformación.

v Establezca con cuidado los valores a fin de que el rendimiento de la recogida debasura sea óptimo.

v Utilice métodos nativos sólo para iniciar funciones del sistema que seanrelativamente de largo alcance y que no estén disponibles directamente en Java.

v Utilice la opción -o de javac en tiempo de compilación para realizar laincorporación de métodos y mejorar significativamente el rendimiento de lasllamadas a métodos.

v Utilice excepciones Java en aquellos casos que no forman parte del flujo normala través de la aplicación.

Para localizar los problemas de rendimiento en los programas Java, utilice lasherramientas indicadas a continuación junto con el explorador de rendimiento(PEX):v Con la máquina 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 métodos Java,

utilice rastreos de llamadas Java.v La función de perfilado Java localiza el tiempo de CPU relativo que se invierte

en cada uno de los métodos Java y las funciones del sistema que utiliza elprograma.

v Utilice Java Performance Data Collector para proporcionar información de perfilsobre los programas que se ejecutan en AS/400.

Cualquier sesión de trabajo puede iniciar y finalizar PEX. Normalmente, los datosse 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 ydetener la recogida de rendimiento desde dentro de una aplicación Java. Estoreduce el tiempo de recogida y puede reducir el gran volumen de datos quenormalmente se genera con un rastreo de llamada/retorno. PEX no puedeejecutarse desde dentro de una hebra Java. Para iniciar y detener una recogida, esnecesario escribir un método nativo que se comunique con un trabajoindependiente por medio de una cola o de memoria compartida. A continuación, elsegundo trabajo inicia y detiene la recogida en el momento oportuno.

Además de los datos de rendimiento a nivel de aplicación, se pueden utilizar lasherramientas de rendimiento a nivel de sistema AS/400. Estas herramientasnotifican las estadísticas en base a las hebras Java.

© Copyright IBM Corp. 1998, 1999 189

Page 198: AS400 Kit Desarrollo Para Java - Rzaha

Para obtener ejemplos de informes PEX, consulte la publicación Performance

Tools/400, SC41-4340.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Consideraciones en torno al rendimiento de ejecución JavaPara mejorar considerablemente el rendimiento de ejecución del código Java, utiliceel mandato Crear programa Java (CRTJVAPGM) antes de ejecutar archivos de claseJava, archivos JAR o archivos ZIP. El mandato CRTJVAPGM utiliza los bytecodespara crear un programa Java, que contiene instrucciones nativas optimizadas paraAS/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 código Java se ejecuta más despacio la primeravez porque se crea un programa Java optimizado con el nivel de optimización 10.Las ejecuciones futuras serán mucho más rápidas porque se guarda el programaJava y permanece asociado con el archivo de clase o el archivo JAR. Ejecutar losbytecodes de manera interpretada puede dar un rendimiento aceptable durante lafase de desarrollo de la aplicación, pero tal vez le interese utilizar el mandatoCRTJVAPGM antes de ejecutar el código Java en un entorno de producción.

Un compilador Just-In-Time mejora el rendimiento mediante la compilación decódigo, que está optimizado para un entorno de ejecución de máquina virtual Javadeterminado. Debe comparar las ventajas de este tipo de optimización con eltiempo que se tarda en generar este código cada vez que se crea una máquinavirtual Java.

Si el programa se ejecuta con lentitud, entre el mandato Visualizar programa Java(DSPJVAPGM) para ver los atributos de un programa Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Consideraciones en torno al rendimiento de transformación JavaSe puede determinar la velocidad de transformación por el nivel de optimizaciónestablecido. El nivel de optimización 10 realiza la transformación con más rapidez,pero el programa resultante suele ser más lento que uno que tenga establecido unnivel de optimización superior. El nivel de optimización 40 tarda más en realizar latransformación, pero suele ejecutarse con mayor rapidez.

Con el nivel de optimización 40, algunas optimizaciones de programa Java no soncompatibles al 100% con Java. Así, algunos de los programas que no se ejecutan alnivel 40, pueden ejecutarse en cambio al nivel 30. Los programas que no seejecutan al nivel de optimización 40 puede ejecutarlos utilizando las series delparámetro LICOPT de optimización del código interno bajo licencia. No obstante,el rendimiento al nivel 30 puede bastar para el programa.

Si tiene problemas al ejecutar código Java que parecía funcionar en otra máquinavirtual Java, pruebe con el nivel de optimización 30 en lugar del nivel 40. Sifunciona y el nivel de rendimiento es aceptable, no es necesario hacer nada más. Sinecesita un rendimiento mejor, consulte Series del parámetro LICOPT, donde

190 AS/400 Developer Kit para Java

Page 199: AS400 Kit Desarrollo Para Java - Rzaha

hallará más información sobre la manera de habilitar e inhabilitar las diversasformas de optimización. Por ejemplo, podría intentar crear primero el programautilizando OPTIMIZE(40) LICOPT(NoPreresolveExtRef). Si la aplicación contienellamadas ″sin salida″ a clases que no están disponibles, este valor de LICOPTpermite que el programa se ejecute sin problemas.

Para determinar a qué nivel de optimización se han creado los programas Java,puede utilizar el mandato Visualizar programa Java (DSPJVAPGM). Para cambiarel nivel de optimización del programa Java, utilice el mandato Crear programaJava (CRTJVAPGM).

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Consideraciones en torno al rendimiento de la recogida de basuraJava

La recogida de basura en la máquina virtual Java de AS/400 funciona enmodalidad asíncrona continua. El parámetro de tamaño inicial de recogida debasura (GCHINL) del mandato Ejecutar Java (RUNJVA) puede afectar alrendimiento de las aplicaciones. Este parámetro especifica el espacio de objetosnuevos que está permitido entre recogidas de basura. Si el valor es bajo, puedeprovocar una actividad general excesiva de recogida de basura. Si es alto, larecogida de basura puede sufrir limitaciones y provocar errores por falta dememoria. Sin embargo, para la mayoría de las aplicaciones, los valores por omisióndeberían ser correctos.

La recogida de basura determina si un objeto ya no es necesario evaluando si hayo no referencias válidas a dicho objeto.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Consideraciones en torno al rendimiento de la invocación a métodosnativos Java

La invocación a métodos nativos en AS/400 puede no tener un rendimiento tanbueno como en otras plataformas. En AS/400, se ha optimizado Java trasladandola máquina virtual Java debajo de la interfaz de máquina (MI). La invocación amétodos nativos requiere una llamada por encima del código MI y puede requerirllamadas costosas de Java Native Interface (JNI) a la máquina virtual Java. Losmétodos nativos no deben llevar a cabo rutinas pequeñas, que pueden escribirsefácilmente en Java. Utilícelos para iniciar funciones del sistema que seanrelativamente de largo alcance y que no estén disponibles directamente en Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 11. Ajustar el rendimiento de los programas Java con AS/400 Developer Kit para Java 191

Page 200: AS400 Kit Desarrollo Para Java - Rzaha

Consideraciones en torno al rendimiento de la incorporación demétodos Java

La incorporación de métodos puede mejorar de manera significativa el rendimientode las llamadas a métodos. Cualquier método que sea final es un candidato enpotencia a la incorporación. La función de incorporación está disponible en AS/400a través de la opción -o de javac en tiempo de compilación. El tamaño de losarchivos de clase y del programa Java transformado se incrementa si se utiliza laopción -o de javac. A la hora de utilizar esta opción, debe tomar en consideracióntanto el espacio como las características de rendimiento de la aplicación.

El transformador de Java habilita la incorporación para los niveles de optimización30 y 40. El nivel de optimización 30 habilita alguna incorporación de métodosfinales dentro de una sola clase. El nivel de optimización 40 habilita laincorporación de métodos finales dentro de un archivo ZIP o JAR. Laincorporación de métodos puede controlarse por medio de las series del parámetroLICOPT AllowInlining y NoAllowInlining. El intérprete de AS/400 no realizaincorporación de métodos.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Consideraciones en torno al rendimiento de las excepciones JavaLa arquitectura de excepciones de AS/400 permite disponer de una capacidad deinterrupción y reintento versátil. Permite la interacción de lenguajes mixtos. Lanzarexcepciones Java en AS/400 puede resultar más costoso que en otras plataformas.Esto no debe afectar al rendimiento global de la aplicación a menos que se utilicenrutinariamente excepciones Java en el recorrido habitual de la aplicación.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramientas de rendimiento de rastreo de eventos JavaLa máquina virtual Java AS/400 habilita el rastreo de determinados eventos Java.Estos eventos pueden recogerse sin ninguna instrumentación en el código Java.Abarcan actividades tales como la recogida de basura, la creación de hebras, lacarga de clases y los bloqueos. El mandato Ejecutar Java (RUNJVA) no especificaestos eventos. En cambio, se puede crear una definición del explorador derendimiento (PEX) y utilizar el mandato Arrancar explorador de rendimiento(STRPEX) para recoger los eventos. Cada evento contiene información útil derendimiento como, por ejemplo, la indicación de la hora y los ciclos de CPU. Sepueden rastrear eventos Java y otras actividades del sistema, tales como la entraday salida de disco, con una misma definición de rastreo.

Para obtener una descripción completa de los eventos Java, consulte la publicación

Performance Tools/400, SC41-4340.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

192 AS/400 Developer Kit para Java

Page 201: AS400 Kit Desarrollo Para Java - Rzaha

Herramientas de rendimiento de rastreo de llamadas JavaLos rastreos de llamadas a métodos Java facilitan información significativa derendimiento acerca del tiempo que se invierte en cada uno de los métodos Java. Enotras máquinas virtuales Java, se puede utilizar la opción -prof (perfilado) delmandato java. Para habilitar el rastreo de las llamadas a métodos en AS/400, debeespecificar el mandato Habilitar recogida de rendimiento (ENBPFRCOL) en la líneade mandatos de Crear programa Java (CRTJVAPGM). Una vez creado el programaJava con esta palabra clave, puede iniciar la recogida de los rastreos de llamadas amétodos mediante una definición del explorador de rendimiento (PEX) que incluyael tipo de rastreo de llamada/retorno.

La salida de rastreo de llamada/retorno generada con el mandato Imprimirinforme del explorador de rendimiento (PRTPEXRPT) muestra el tiempo de CPUpara cada una de las llamadas de todos los métodos Java de los que se harealizado un rastreo. En algunos casos, puede que no resulte posible habilitar todoslos archivos de clase para el rastreo de llamada/retorno. O es posible que seefectúen llamadas a métodos nativos y a funciones del sistema que no esténhabilitados para rastreo. En esta situación, el tiempo de CPU invertido en dichosmétodos o funciones del sistema se acumula. Después, se notifica al último métodoJava al que se llame y que haya sido habilitado.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

Herramientas de rendimiento de perfilado JavaEl perfilado de CPU a nivel de todo el sistema calcula el tiempo relativo de CPUque se invierte en cada uno de los métodos Java y en todas las funciones delsistema que el programa Java utiliza. Utilice una definición del explorador derendimiento (PEX) que rastree los eventos de ciclo de ejecución de desbordamientodel contador del supervisor de rendimiento (*PMCO). Las muestras suelenespecificarse a intervalos de un milisegundo. Para recoger un perfil de rastreoválido, debe ejecutar la aplicación Java hasta que acumule de dos a tres minutos detiempo de CPU. Esto debería generar más de 100.000 muestras. El mandatoImprimir informe del explorador de rendimiento (PRTPEXRPT) genera unhistograma del tiempo de CPU invertido en toda la aplicación. Esto incluye todoslos métodos Java y toda actividad a nivel de sistema. La herramienta PerformanceData Collector (PDC) también facilita información de perfil sobre los programasque se ejecutan en AS/400.

Nota: el perfilado de CPU no muestra el uso relativo de CPU de los programasJava interpretados.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Recogida de datos de rendimiento JavaPara recoger datos de rendimiento en AS/400, siga estos pasos:1. Cree una definición del explorador de rendimiento (PEX) que especifique:v Un nombre definido por el usuariov El tipo de recogida de datosv El nombre de trabajo

Capítulo 11. Ajustar el rendimiento de los programas Java con AS/400 Developer Kit para Java 193

Page 202: AS400 Kit Desarrollo Para Java - Rzaha

v Los eventos del sistema sobre los que desea recoger información del sistema

Nota: si la salida que desea es de tipo java_g -prof y sabe cuál es el nombreconcreto del trabajo del programa Java, es preferible que la definición de PEXsea *STATS en lugar de *TRACE.

He aquí un ejemplo de definición *STATS: ADDPEXDFN DFN(DEFINICIÓN)JOB(*ALL/SUID/QJVACMDSRV) DTAORG(*HIER) TEXT(’la definición stats’) Estadefinición *STATS no obtiene todos los eventos Java en ejecución. Sólo seperfilan los eventos Java que se hallan en su sesión Java. Esta modalidad defuncionamiento puede incrementar el tiempo que se tarda en ejecutar elprograma Java.

He aquí un ejemplo de definición de *TRACE: ADDPEXDFN DFN(DEFINICIÓN)TYPE(*TRACE) JOB(*ALL) TRCTYPE(*SLTEVT) SLTEVT(*YES) PGMEVT(*JVAENTRY*JVAEXIT). Esta definición *TRACE recoge los eventos de entradas y salidasJava de cualquier programa Java del sistema que cree con ENBPRFRCOL*ENTRYEXIT. Esto hace que el análisis de este tipo de recogida se realice conmás lentitud que en el caso de un rastreo *STATS, en función de cuántoseventos de programa Java se tengan y de cuál sea la duración de la recogida dedatos de PEX.

2. Habilite *JVAENTRY y *JVAEXIT dentro de la categoría de eventos deprograma de la definición de PEX, de manera que PEX reconozca las entradas ysalidas Java. Nota: Si está ejecutando el código Java mediante el compiladorJust-in-time (JIT), no habilita la entrada y salida como lo haría si utilizara elmandato CRTJVAPGM para la ejecución directa. En lugar de ello, JIT generacódigo con ganchos de entrada y salida cuando se utiliza la propiedad delsistema os400.enbprfcol.

3. Prepare el programa Java para que notifique los eventos de programa a AS/400Performance Data Collector. Para ello, puede utilizar el mandato Crearprograma Java (CRTJVAPGM) en cualquier programa Java sobre el que deseenotificar datos de rendimiento. Debe crear el programa Java utilizando elparámetro ENBPFRCOL(*ENTRYEXIT).Nota: debe repetir este paso para todos los programas Java sobre los que deseerecoger datos de rendimiento. Si no lo hace, PEX no recogerá ningún dato derendimiento 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 derendimiento (STRPEX).

5. Ejecute el programa que desea analizar. Este programa no debe estar en unentorno de producción. Generará un volumen elevado de datos en un espaciocorto de tiempo. Debe limitar el tiempo de recogida a cinco minutos. Unprograma Java que se ejecute durante ese tiempo genera muchos datos desistema PEX. Si se recogen demasiados datos, es necesario un tiempodemasiado largo para procesarlos.

6. Finalice la recogida de datos de PEX con el mandato Finalizar explorador derendimiento (ENDPEX).Nota: si no es la primera vez que ha finalizado la recogida de datos de PEX,debe especificar *YES como archivo de sustitución o, de lo contrario, no seguardarán los datos.

7. Ejecute la herramienta JPDC.

194 AS/400 Developer Kit para Java

Page 203: AS400 Kit Desarrollo Para Java - Rzaha

8. Conecte el directorio del sistema de archivos integrado con el visor queprefiera: java_g -prof o Jinsight. Puede copiar este archivo desde AS/400 yutilizarlo como entrada de cualquier herramienta de perfilado que considereoportuna.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramienta Performance Data CollectorLa herramienta Performance Data Collector (PDC) facilita información de perfilsobre los programas que se ejecutan en AS/400.

La opción de perfil estándar del sector de la mayoría de las máquinas virtualesJava depende de la implementación de la característica java_g. Ésta es una versiónespecial de depuración de la máquina virtual Java, que ofrece la opción -prof. Estaopción se especifica en una llamada a un programa Java. Si se especifica, lamáquina virtual Java genera un archivo de registro que contiene información sobrecuáles son los componentes del programa que están en funcionamiento mientrasdura el programa. La máquina virtual Java genera esta información en tiempo real.

En AS/400, la función explorador de rendimiento (PEX) analiza programas yeventos del sistema específicos de registro. Esta información se almacena en unabase de datos DB/2 y se recupera mediante funciones SQL. La información de PEXes el repositorio de información específica de programa que genera datos de perfilJava. Estos datos de perfil son compatibles con la información de perfil deprograma de java_g -prof. La herramienta Java Performance Data Converter(JPDC) proporciona información de perfil de programa y la salida de programa dejava_g -prof para una herramienta IBM determinada que se conoce con el nombrede Jinsight.

Si desea obtener información sobre la manera de recoger datos de rendimientoJava, consulte el apartado Recogida de datos de rendimiento Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Herramienta Java Performance Data ConverterLa herramienta Java Performance Data Converter (JPDC) ofrece una manera decrear datos de rendimiento Java referentes a los programas Java que se ejecutan enel AS/400. Estos datos de rendimiento son compatibles con la salida de datos derendimiento de la opción java_g -prof de la máquina virtual Java de SunMicrosystems, 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 deJinsight.

La herramienta JPDC accede a los datos del explorador de rendimiento (PEX) deAS/00 que almacena DB2/400 (mediante JDBC). Convierte los datos al tipo derendimiento de Jinsight o a uno general. A continuación, almacena el archivo desalida en una ubicación del sistema de archivos integrado especificada por elusuario.

Capítulo 11. Ajustar el rendimiento de los programas Java con AS/400 Developer Kit para Java 195

Page 204: AS400 Kit Desarrollo Para Java - Rzaha

Nota: para recoger datos de PEX mientras se ejecuta en AS/400 la aplicación Javaespecificada, debe seguir los procedimientos de recogida de datos de AS/400 PEXoportunos. Debe establecer una definición de PEX que defina la entrada y la salidade un programa o un procedimiento de recogida y almacenamiento. Para obtenerdetalles acerca de cómo recoger datos PEX y establecer una definición de PEX,

consulte la publicación Performance Tools/400, SC41-4340.

Si desea obtener información sobre la manera de ejecutar JPDC, consulte EjecutarJava Performance Data Converter.

Para iniciar el programa JPDC, puede utilizar la interfaz de línea de mandatosQshell o el mandato Ejecutar Java (RUNJVA).

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejecución de Java Performance Data ConverterPara ejecutar Java Performance Data Converter (JPDC) con el fin de realizar larecogida de datos de rendimiento, siga los pasos indicados a continuación.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 definición 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 lautilización interna de las conexiones del mismo.

3. Entre el tercer argumento de entrada, que es el nombre del archivo que laherramienta JPDC genera. Este archivo generado se graba en el directorioactual del sistema de archivos integrado. Para especificar el directorio actual delsistema de archivos integrado, utilice el mandato cd (PF4).

4. Entre el cuarto argumento de entrada, que es el nombre de la entrada dedirectorio de bases de datos relacionales de sistema principal de AS/400. Paraver cuál es el nombre, utilice el mandato Trabajar con entrada de directorio debases de datos relacionales (WRKRDBDIRE). Se trata de la única base de datosrelacional en la que se indica *LOCAL.

Para que este código funcione, el archivo /QIBM/ProdData/Java400/ext/JPDC.jardebe estar en la vía de acceso de clases Java de AS/400. Cuando el programa acabede ejecutarse, en el directorio actual habrá un archivo de salida de tipo texto.

Para ejecutar JPDC, utilice la línea de mandatos de AS/400 o el entorno Qshell.Consulte el apartado Ejemplo: ejecución de Java Performance Data Converter paraobtener detalles.

[ Página de presentación de InformationCenter | Comentarios ]

[Legal | Glosario de AS/400]

Ejemplo: ejecución de Java Performance Data ConverterPara ejecutar Java Performance Data Converter (JPDC), puede utilizar la línea demandatos de AS/400 o el entorno Qshell.

Con la línea de mandatos de AS/400:

1. Entre el mandato Ejecutar (RUNJVA) o JAVA en la línea de mandatos deAS/400.

196 AS/400 Developer Kit para Java

Page 205: AS400 Kit Desarrollo Para Java - Rzaha

2. Entre com.ibm.as400.jpdc.JPDC en la línea del parámetro de clase.3. Entre general defpex midir/miarch midirebdr en la línea de parámetro.4. Entre ’/QIBM/ProdData/Java400/ext/JPDC.jar’ en la línea del parámetro de vía

de acceso de clases.Nota: puede omitir la vía de acceso de clases si la serie’/QIBM/ProdData/Java400/ext/JPDC.jar’ está en la variable de entornoCLASSPATH. Para añadir esta serie a la variable de entorno CLASSPATH,puede utilizar el mandato Añadir variable de entorno (ADDENVVAR), Cambiarvariable de entorno (CHGENVVAR) o Trabajar con variable de entorno(WRKENVVAR).

Con el entorno Qshell:

1. Entre el mandato Arrancar Qshell (STRQSH) para iniciar el intérprete Qshell.2. Entre lo siguiente en la línea de mandatos:

java -classpath /QIBM/ProdData/Java400/ext/JPDC.jar com.ibm.as400/jpdc/JPDCjiinsight pexdfn mydir/myfile myrdbdire

Nota: puede omitir la vía de acceso de clases si se ha añadido la serie’/QIBM/ProdData/Java400/ext/JPDC.jar’ al entorno actual. Para añadir estaserie al entorno actual, puede utilizar el mandato ADDENVVAR, CHGENVVARo WRKENVVAR.

Para obtener información previa, consulte el apartado Ejecución de JavaPerformance Data Converter .

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 11. Ajustar el rendimiento de los programas Java con AS/400 Developer Kit para Java 197

Page 206: AS400 Kit Desarrollo Para Java - Rzaha

198 AS/400 Developer Kit para Java

Page 207: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 12. Depuración de programas utilizando AS/400Developer Kit para Java

Si necesita depurar programas Java, seleccione una de las siguientes opciones:v Depurar un programa Javav Depurar programas Java y de métodos nativosv Depurar un programa Java desde otra pantallav Depurar servlets

Cuando se depura un programa Java, éste se ejecuta en realidad dentro de lamáquina virtual Java en un trabajo inmediato de proceso por lotes (BCI). El códigofuente aparece en la pantalla interactiva, pero el programa no se ejecuta en ella, sino en el otro trabajo, que es un trabajo al que se da servicio. Cuando finaliza elprograma Java, finaliza también el trabajo al que se da servicio y se visualiza unmensaje en el que se indica que el trabajo al que se ha dado servicio hafinalizado.

La interfaz entre los dos trabajos se establece al especificar la opción *DEBUG en elmandato Ejecutar Java (RUNJVA).

Para obtener más información acerca del depurador del sistema, consulte la

publicación ILE C Programmer’s Guide, SC09-2515 y la información de ayudaen línea.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Depurar un programa JavaExisten muchas formas distintas de depurar un programa Java. Se puede utilizar laopción *DEBUG para ver el código fuente antes de ejecutar el programa. Acontinuación, se pueden establecer puntos de interrupción o bien recorrer lafunción principal o todas las funciones del programa con el fin de analizar loserrores mientras se ejecuta el programa.

Para depurar programas Java:1. Compile el programa Java con la opción DEBUG, que es la opción -g de la

herramienta javac. En Depurar programas Java con la opción *DEBUG hallaráinformación más detallada.

2. Inserte el archivo de clase (.class) y el archivo fuente (.java) en el mismodirectorio de AS/400.

3. Ejecute el programa Java utilizando el mandato Ejecutar Java (RUNJVA) en lalínea de mandatos de AS/400. Especifique OPTION(*DEBUG) en el mandatoEjecutar Java (RUNJVA).

4. Se visualizará el fuente del programa Java.5. Pulse F6 (Añadir/Borrar punto de interrupción), para establecer puntos de

interrupción, o F10 (Recorrer), para recorrer el programa. Si desea obtener másinformación sobre el establecimiento de puntos de interrupción, consulte el

© Copyright IBM Corp. 1998, 1999 199

Page 208: AS400 Kit Desarrollo Para Java - Rzaha

apartado Establecer puntos de interrupción. Si desea obtener información másdetallada sobre la función de recorrido, consulte Recorrer los programas Javapara depurarlos.

Nota: mientras utiliza los puntos de interrupción y el recorrido, compruebe el flujológico del programa Java y, a continuación, vea las variables y modifíquelas segúnconvenga.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Depurar programas Java con la opción *DEBUGLa opción *DEBUG sirve para ver el código fuente antes de ejecutar el programa.Permite establecer puntos de interrupción dentro del código.

Para utilizar la opción *DEBUG, entre el mandato Ejecutar Java (RUNJVA) seguidodel nombre del archivo de clase y de OPTION(*DEBUG) en la línea de mandatos.Por ejemplo, la línea 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 depuración, consulte Pantallas iniciales de depuración deprogramas Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Pantallas iniciales de depuración de programas JavaCuando vaya a depurar programas Java, siga estas pantallas de ejemplo. En ellasaparece 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 módulo. Se trata del

fuente del programa Java HELLOD.+————————————————————————————————————————+| Visualizar Fuente Módulo || || 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() || Más... |

200 AS/400 Developer Kit para Java

Page 209: AS400 Kit Desarrollo Para Java - Rzaha

| Depuración . . . || || F3=Finalizar programa F6=Añadir/Borrar punto interrupción F10=Recorrer || F11=Visualizar variable F12=Reanudar F24=Más teclas || |+————————————————————————————————————————+

v Pulse F14 (Trabajar con lista de módulos).v Aparece la pantalla Trabajar con lista de módulos. Puede añadir otras clases y

otros programas que depurar entrando la opción 1 (Añadir programa). Paravisualizar el fuente de los mismos, utilice la opción 5 (Visualizar fuente delmódulo).+————————————————————————————————————————+| Trabajar con Lista de Módulos || Sistema: AS400 || Teclee opciones, pulse Intro. || 1=Añadir programa 4=Eliminar programa 5=Visualizar fuente del módulo || 8=Trabajar con puntos de interrupción de módulo || || Opc Progr/módulo 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 añada una clase para depurar, puede que necesite entrar un nombre declase calificado por paquete cuya longitud supere la del campo de entradaPrograma/módulo. Para entrar un nombre de mayor longitud, siga estos pasos:1. Entre la opción 1 (Añadir programa).2. Deje en blanco el campo Programa/módulo.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 más espacio para

especificar el nombre de archivo de clase calificado por paquete.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Establecimiento de puntos de interrupciónLa ejecución de un programa puede controlarse con puntos de interrupción. Lospuntos de interrupción detienen la ejecución de un programa en una sentenciadeterminada.

Para establecer puntos de interrupción:

Capítulo 12. Depuración de programas utilizando AS/400 Developer Kit para Java 201

Page 210: AS400 Kit Desarrollo Para Java - Rzaha

1. Sitúe el cursor en la línea de código en la que desee establecer un punto deinterrupción.

2. Pulse F6 (Añadir/Borrar punto de interrupción) para establecer el punto deinterrupción.

3. Pulse F12 (Reanudar) para ejecutar el programa.

Nota: justo antes de ejecutarse la línea de código en la que está establecido elpunto de interrupción, se visualizará el fuente del programa para indicar que se hallegado al punto de interrupción.+————————————————————————————————————————+| Visualizar Fuente Módulo || ||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(); ||Depuración . . . || ||F3=Finalizar programa F6=Añadir/Borrar punto interrupción F10=Recorrer ||F11=Visualizar variable F12=Reanudar F24=Más teclas ||Se ha añadido el punto de interrupción a la línea 41. |+————————————————————————————————————————+

Cuando llegue a un punto de interrupción, si desea establecer puntos deinterrupción a los que se llegue sólo dentro de la hebra actual, utilice el mandatoTBREAK.

Para obtener más información acerca de los mandatos del depurador del sistema,

consulte la publicación ILE C Programmer’s Guide, SC09-2515 y lainformación de ayuda en línea.

Si desea obtener información sobre la evaluación de variables cuando un programadetiene su ejecución en un punto de interrupción, consulte Evaluar variables enprogramas Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Recorrer los programas Java para depurarlosPuede recorrer el programa mientras lo depura. Puede recorrer la función principalo bien otras funciones del mismo. Los programas Java y los métodos nativospueden utilizar la función de recorrido.

202 AS/400 Developer Kit para Java

Page 211: AS400 Kit Desarrollo Para Java - Rzaha

Cuando aparezca el fuente del programa por primera vez, ya puede iniciar elrecorrido. El programa se detendrá antes de ejecutar la primera sentencia. PulseF10 (Recorrer). Siga pulsando F10 (Recorrer) para recorrer el programa. Pulse F22(Recorrer todo) para recorrer cualquier función a la que llame el programa.También puede iniciar el recorrido en cualquier momento en que se llegue a unpunto de interrupción. Si desea obtener información sobre el establecimiento depuntos de interrupción, consulte el apartado Establecer puntos de interrupción.+————————————————————————————————————————+| Visualizar Fuente Módulo || ||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(); ||Depuración . . . || ||F3=Finalizar programa F6=Añadir/Borrar punto interrupción F10=Recorrer ||F11=Visualizar variables F12=Reanudar F24=Más teclas ||Recorrido completado en la línea 42 de la hebra 00000019 |+————————————————————————————————————————+

Para detener el recorrido y proseguir con la ejecución del programa, pulse F12(Reanudar).

Para obtener más información acerca de la acción de recorrer, consulte la

publicación ILE C Programmer’s Guide, SC09-2515 y la información de ayudaen línea.

Si desea obtener información sobre la evaluación de variables cuando un programadetiene su ejecución en una parte del recorrido, consulte Evaluar variables enprogramas Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Evaluar variables en programas JavaExisten dos formas de evaluar una variable cuando un programa detiene suejecución en un punto de interrupción o en una parte del recorrido:v Entre EVAL NombreVariable en la línea de mandatos de depuración.v Sitúe el cursor en el nombre de la variable dentro del código fuente visualizado

y pulse F11 (Visualizar variable).

Para evaluar las variable de un programa Java, utilice el mandato EVAL.Nota: con el mandato EVAL, también se puede cambiar el contenido de una

Capítulo 12. Depuración de programas utilizando AS/400 Developer Kit para Java 203

Page 212: AS400 Kit Desarrollo Para Java - Rzaha

variable. Para obtener más información acerca de las variaciones del mandato

EVAL, consulte la publicación ILE C Programmer’s Guide, SC09-2515 y lainformación de ayuda en línea.

Cuando repase la variables de un programa Java, tenga presente lo siguiente:v Si evalúa una variable que es una instancia de una clase Java, la primera línea

de la pantalla muestra el tipo de objeto de que se trata. También muestra elidentificador del objeto. A continuación de la primera línea de la pantalla, sevisualiza el contenido de cada uno de los miembros de datos del objeto. Si lavariable es nula, la primera línea de la pantalla indica que lo es. El contenido decada uno de los miembros de datos (de un objeto nulo) se muestra por medio deasteriscos.

v Si evalúa una variable que es un objeto de tipo serie Java, se visualiza elcontenido 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 evalúa una variable que es una matriz, se visualiza ’ARR’ seguido del

identificador de la matriz. Para evaluar los elementos de la matriz, puedeutilizar un subíndice del nombre de variable. Si la matriz es nula, se visualizanull.

v No se pueden cambiar las variables que son de tipo matriz. Se puede cambiarun 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 especificarnombrematriz.length para ver cuántos elementos hay en la matriz.

v Si desea ver el contenido de una variable que es un miembro de datos de unaclase, 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 según el cual la variableno está disponible para su visualización o bien se muestra el contenido de lavariable no inicializada, que podría ser un valor extraño.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Depurar programas Java y de métodos nativosSe pueden depurar programas Java y programas de métodos nativos a la vez.Mientras se depura el fuente en la pantalla interactiva, se puede depurar unmétodo nativo programado en C que esté dentro de un programa de servicio(*SRVPGM).

Para depurar programas Java y programas de métodos nativos simultáneamente:1. Pulse F14 (Trabajar con lista de módulos) cuando aparezca el fuente del

programa Java para visualizar la pantalla Trabajar con lista de módulos(WRKMODLST).

2. Seleccione la opción 1 (Añadir programa) para añadir el programa de servicio.3. Seleccione la opción 5 (Visualizar fuente del módulo) para visualizar el

*MODULE que desea depurar y el fuente.4. Pulse F6 (Añadir/Borrar punto de interrupción), para establecer puntos de

interrupción en el programa de servicio. Si desea obtener más informaciónsobre el establecimiento de puntos de interrupción, consulte el apartadoEstablecer puntos de interrupción.

204 AS/400 Developer Kit para Java

Page 213: AS400 Kit Desarrollo Para Java - Rzaha

5. Pulse F12 (Reanudar) para ejecutar el programa.

Nota: cuando se llega a un punto de interrupción en el programa de servicio, sedetiene la ejecución del programa y se visualiza el fuente del programa de servicio.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Depurar un programa Java desde otra pantallaMientras se depura un programa Java, se visualiza el fuente del programa cadavez que éste se encuentra con un punto de interrupción. Esto puede interferir conla salida de pantalla del programa Java. Para evitarlo, depure el programa Javadesde otra pantalla. La salida del programa Java se visualizará allí donde seejecute 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 preparación de la

depuración.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 línea 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 listadoSubsistemas/trabajo. Busque su ID de usuario en el listado Usuario. BusqueBCI bajo Tipo.

c. Entre la opción 5 para trabajar con el trabajo.d. En la parte superior de la pantalla Trabajar con trabajo figura el número, el

usuario y el trabajo. Entre STRSRVJOB Número/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 haespecificado en el mandato Java o de otra clase.

f. El fuente de dicha clase aparece en la pantalla Visualizar fuente de módulo.g. Establezca puntos de interrupción, pulsando F6 (Añadir/Borrar punto de

interrupción), allí donde desee detenerse dentro de la clase Java. Pulse F14para añadir más clases, programas o programas de servicio que depurar. Sidesea obtener más información sobre el establecimiento de puntos deinterrupción, consulte el apartado Establecer puntos de interrupción.

h. Pulse F12 (Reanudar) para proseguir con la ejecución del programa.3. Deje de retener el programa Java original. Cuando se llegue a un punto de

interrupción, aparecerá la pantalla Visualizar fuente de módulo en la pantallaen la que se hayan entrado los mandatos Arrancar programa de servicio(STRSRVJOB) y Arrancar depuración (STRDBG). Cuando finalice el programaJava, aparecerá el mensaje El trabajo al que se ha dado servicio hafinalizado.

4. Entre el mandato Finalizar depuración (ENDDBG).

Capítulo 12. Depuración de programas utilizando AS/400 Developer Kit para Java 205

Page 214: AS400 Kit Desarrollo Para Java - Rzaha

5. Entre el mandato Finalizar trabajo de servicio (ENDSRVJOB).

En Variable de entorno QIBM_CHILD_JOB_SNDINQMSG hallará más informaciónsobre esta variable, que controla si el trabajo BCI se espera antes de llamar a lamáquina virtual Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Variable de entorno QIBM_CHILD_JOB_SNDINQMSGLa variable de entorno QIBM_CHILD_JOB_SNDINQMSG es la variable quecontrola si el trabajo inmediato de proceso por lotes (BCI), en el que se ejecuta lamáquina virtual Java, espera antes de iniciar la máquina virtual Java.

Si establece la variable de entorno en 1 al ejecutar el mandato Ejecutar Java(RUNJVA), se envía un mensaje a la cola de mensajes del usuario. El mensaje seenvía antes de que se inicie la máquina virtual Java en el trabajo BCI. Es similar alsiguiente:El proceso (hijo) engendrado 023173/JOB/QJVACMDSRV está detenido (G C)

Para ver este mensaje, entre SYSREQ y seleccione la opción 4.

El trabajo BCI espera hasta usted entre una respuesta al mensaje. Si la respuesta es(G), inicia la máquina virtual Java.

Antes de responder al mensaje, puede establecer puntos de interrupción en elprograma *SRVPGM o *PGM al que llamará el trabajo BCI.Nota: no se pueden establecer puntos de interrupción en una clase Java porque eneste momento todavía no se ha iniciado la máquina virtual Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Depuración de servlets

La depuración de servlets es más complicada que la depuración deaplicaciones Java habituales, dado que los servlets se ejecutan en la ejecución Javadel servidor IBM HTTP.

Para depurar un servlet, siga estos pasos:1. Utilice el mandato javac -g del intérprete Qshell para compilar el servlet.2. Copie el código fuente (archivo .java) y el código compilado (archivo .class) en

/QIBM/ProdData/Java400.3. Ejecute el mandato Crear programa Java (CRTJVAPGM) en el archivo .class

utilizando el nivel de optimización 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 interrupción en el servlet y pulse F12.

206 AS/400 Developer Kit para Java

Page 215: AS400 Kit Desarrollo Para Java - Rzaha

8. Ejecute el servlet. Cuando el servlet alcance el punto de interrupción, puede

continuar depurando.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 12. Depuración de programas utilizando AS/400 Developer Kit para Java 207

Page 216: AS400 Kit Desarrollo Para Java - Rzaha

208 AS/400 Developer Kit para Java

Page 217: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 13. Resolución de problemas en AS/400 DeveloperKit para Java

Si surgen problemas al utilizar AS/400 Developer Kit para Java, siga cualquiera delos pasos indicados a continuación para determinar cuál 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 haejecutado el programa Java con el fin de analizar la causa de la anomalía.

v Reuna datos que sean útiles para elaborar un informe autorizado de análisis deprograma (APAR).

v Aplique los arreglos temporales del programa (PTF).v Averigüe cómo obtener soporte técnico si detecta un defecto potencial en AS/400

Developer Kit para Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Buscar archivos de anotaciones de trabajo para analizar problemas deJava

Para analizar las causas de una anomalía de Java, utilice el archivo de anotacionesdel trabajo que ha ejecutado el mandato Java y el del trabajo inmediato de procesopor lotes (BCI) en el que se ha ejecutado el programa Java. Ambos puedencontener información de error importante.

Existen dos formas de buscar el archivo de anotaciones del trabajo BCI. Puedebuscar el nombre del trabajo BCI que figura en las anotaciones del trabajo que haejecutado el mandato Java. A continuación, utilice el nombre de trabajo para buscarel archivo de anotaciones del trabajo BCI.

También puede buscar el archivo de anotaciones del trabajo BCI realizando lospasos siguientes:1. Entre el mandato Trabajar con trabajos sometidos (WRKSBMJOB) en la línea 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 opción 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 anomalía.Nota: si la fecha y la hora no coinciden con la fecha y la hora en que usted hafinalizado la sesión, siga buscando en la lista de trabajos sometidos. Intentelocalizar un archivo de anotaciones llamado QJVACMDSRV cuya fecha y horacoincida con el momento en que ha finalizado la sesión.

Si no puede hallar ningún archivo de anotaciones para el trabajo BCI, es posibleque no se haya generado ninguno. Esto ocurre si ha establecido un valor ENDSEPdemasiado alto para la descripción de trabajo QDFTJOBD o si el valor LOG de la

© Copyright IBM Corp. 1998, 1999 209

Page 218: AS400 Kit Desarrollo Para Java - Rzaha

descripción de trabajo QDFTJOBD especifica *NOLIST. Compruebe estos valores ycámbielos para que se genere un archivo de anotaciones para el trabajo BCI.

Para generar un archivo de anotaciones para el trabajo que ha ejecutado elmandato Ejecutar Java (RUNJVA):1. Entre SIGNOFF *LIST.2. A continuación, vuelva a iniciar la sesión.3. Entre el mandato Trabajar con archivos en spool (WRKSPLF) en la línea 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 sesión. Nota: si la fecha y la hora no coincidencon la fecha y la hora en que usted ha finalizado la sesión, siga buscando en lalista de trabajos sometidos. Intente localizar un archivo de anotaciones llamadoQJVACMDSRV cuya fecha y hora coincida con el momento en que hafinalizado la sesión.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Reunir datos para analizar problemas de JavaPara reunir datos con el fin de elaborar un informe autorizado de análisis deprograma (APAR):1. Incluya una descripción 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 elprograma precisa para ejecutarse. Asimismo, tal vez le interese guardar yenviar un directorio completo con el fin de que IBM lo utilice, si fuesenecesario, cuando intente reproducir el problema. He aquí un ejemplo de cómoguardar 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 elproblema. Le servirán de ayuda a IBM a la hora de reproducir y analizar elproblema.

4. Guarde los programas de servicio que contienen los métodos nativos que senecesitan para ejecutar el programa.

5. Guarde los archivos de datos que se necesitan para ejecutar el programa Java.6. Añada una explicación completa de cómo reproducir el problema. Debe incluir

en ella:v El valor de la variable de entorno CLASSPATH.v La descripción del mandato Java ejecutado.v Una indicación de cómo debe responderse a la entrada que necesite el

programa.7. Incluya las anotaciones del código interno vertical bajo licencia (VLIC) que se

hayan realizado alrededor del momento en que se ha producido la anomalía.

210 AS/400 Developer Kit para Java

Page 219: AS400 Kit Desarrollo Para Java - Rzaha

8. Añada los archivos de anotaciones del trabajo interactivo y del trabajo BCI enel que se ejecutaba la máquina virtual Java.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Obtener soporte técnico para AS/400 Developer Kit para JavaLos servicios de soporte técnico de AS/400 Developer Kit para Java se prestan enlas condiciones habituales de los productos de software AS/400. Dichos serviciosincluyen servicio técnico de programas, atención telefónica y servicios deconsultoría. Utilice la información en línea suministrada en la Página de

presentación de IBM AS/400 en el tema “Support” para obtener másinformación. Utilice IBM Support Services para 5769-JV1 (AS/400 Developer Kitpara Java). O bien, póngase en contacto con el representante local de IBM.

Es posible que, por indicación de IBM, deba obtener un nivel más actual deAS/400 Developer Kit para Java con el fin de poder recibir el servicio técnico deprogramas de forma continuada. Para obtener más información, consulte elapartado Soporte a varios Java Development Kits (JDK).

Los defectos que pueda presentar el programa AS/400 Developer Kit para Javapueden resolverse por medio del servicio técnico de programas o la atencióntelefónica. Las cuestiones relacionadas con la depuración o la programación de laaplicación deben resolverse a través de los servicios de consultoría.

Las cuestiones relacionadas con llamadas a la API de AS/400 Developer Kit paraJava deben remitirse a los servicios de consultoría, a menos que:1. Se trate claramente de un defecto de la API Java que queda demostrado por

medio de su reproducción en un programa de relativa simplicidad.2. Sea una cuestión que requiere una aclaración de lo explicado en la

documentación.3. Sea una cuestión referente a la ubicación de los ejemplos o la documentación.

Los servicios de consultoría comprenden también el prestar ayuda deprogramación. Esto incluye los ejemplos de programa que se facilitan en elproducto programa bajo licencia (LP) AS/400 Developer Kit para Java. Puedehaber ejemplos adicionales en Internet, en la Página de presentación de IBM

AS/400 pero sin soporte técnico.

El programa bajo licencia AS/400 Developer Kit para Java incluye informaciónpara la resolución de problemas. Si usted cree que existe un defecto potencial en laAPI de AS/400 Developer Kit para Java, será necesario que suministre unprograma simple que demuestre la existencia del error.

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

Capítulo 13. Resolución de problemas en AS/400 Developer Kit para Java 211

Page 220: AS400 Kit Desarrollo Para Java - Rzaha

212 AS/400 Developer Kit para Java

Page 221: AS400 Kit Desarrollo Para Java - Rzaha

Capítulo 14. Ejemplos de código para AS/400 Developer Kitpara Java

Mandatos CL:

v CRTJVAPGMv CHGJVAPGMv RUNJVAv DLTJVAPGM

v DMPJVMv DSPJVAPGM

Otros lenguajes de programación:

v Llamar a otro programa Javav Llamar a un programa CLv Llamar a un mandato CLv Corrientes de entrada y de salidav Socketsv Llamadas a Java desde Cv Llamadas a Java desde RPGv Invocation API

JDBC:

v Conectarsev Interfaz Statementv Interfaz PreparedStatementv Interfaz CallableStatementv Interfaz ResultSetv Interfaz DatabaseMetaDatav Aplicación JDBCv Intercalar sentencias SQL

SQLJ:

v Intercalar sentencias SQL en la aplicación Java

AWT remoto:

v Configurar AWT remoto

Capa de sockets seguros:

v Fábricas de socketsv Fábricas de sockets de servidorv SSLv Servidor de Capa de sockets seguros

Internacionalización:

v DateFormatv NumberFormatv ResourceBundle

© Copyright IBM Corp. 1998, 1999 213

Page 222: AS400 Kit Desarrollo Para Java - Rzaha

Herramientas de rendimiento:

v Java Performance Data Converter

[ Página de presentación de InformationCenter | Comentarios ]

[ Legal | Glosario de AS/400 ]

214 AS/400 Developer Kit para Java

Page 223: AS400 Kit Desarrollo Para Java - Rzaha
Page 224: AS400 Kit Desarrollo Para Java - Rzaha

IBM