programación ibmtoolbox para java · instalación y gestión de ibm toolbox para java. . . 2...

606
IBM i Versión 7.2 Programación IBM Toolbox para Java

Upload: others

Post on 17-Aug-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188

IBM iVersioacuten 72

ProgramacioacutenIBM Toolbox para Java

IBM iVersioacuten 72

ProgramacioacutenIBM Toolbox para Java

NotaAntes de utilizar esta informacioacuten y el producto al que da soporte lea la informacioacuten de la seccioacuten ldquoAvisosrdquo en la paacutegina593

Este documento puede contener referencias al coacutedigo interno bajo licencia (LIC) El Coacutedigo interno bajo licencia esCoacutedigo maacutequina que se proporciona bajo los teacuterminos del acuerdo de licencia IBM License Agreement for MachineCode

copy Copyright IBM Corporation 1999 2014

Contenido

IBM Toolbox para Java 1Novedades de IBM i 72 1Archivo PDF para IBM Toolbox para Java 2Instalacioacuten y gestioacuten de IBM Toolbox para Java 2

Gestioacuten de la instalacioacuten de IBM Toolbox paraJava 2Instalacioacuten de IBM Toolbox para Java 3

Requisitos de IBM i para IBM Toolbox paraJava 3

Opciones de IBM i necesarias 3Coacutemo determinar si IBM Toolbox para Javaestaacute instalado en el sistema 4Comprobar el perfil QUSER 4Cambiar el perfil de usuario QUSER 4Dependencias de otros programas bajolicencia 4Compatibilidad con niveles distintos de IBMi 5Optimizaciones nativas al llevar a cabo laejecucioacuten en la JVM de IBM i 6

Requisitos de estacioacuten de trabajo para IBMToolbox para Java 6

Requisitos de estacioacuten de trabajo paraejecutar aplicaciones de IBM Toolbox paraJava 6Requisitos de estacioacuten de trabajo paraejecutar applets de IBM Toolbox para Java 6

Instalacioacuten de IBM Toolbox para Java en elsistema 7Instalacioacuten de IBM Toolbox para Java en laestacioacuten de trabajo 7

Archivos JAR 8Propiedades del sistema 11

JTOpenLite 20Clases de IBM Toolbox para Java 20

Clases de acceso 20Puntos de acceso de servidor 20Clase AS400 21

Gestioacuten de identificadores de usuariopredeterminado 22Utilizacioacuten de una memoria cacheacute decontrasentildeas 23Solicitud de identificadores de usuario ycontrasentildeas 23Resumen de solicitudes ID de usuariopredeterminado y colocacioacuten decontrasentildeas en memoria cacheacute 24

Clase SecureAS400 26Clase AS400JPing 27Clase BidiTransform 27Clase BidiConversionProperties 28Clase CallStackEntry 28Clases ClusteredHashTable 28Clase CommandCall 30Agrupacioacuten de conexiones 31Aacuterea de datos 32

Conversioacuten y descripcioacuten de datos 34Clases de conversioacuten para datos numeacutericos 36Conversioacuten de texto 37Clases de conversioacuten para tiposcompuestos 38Clases de descripcioacuten de campo 39Clase RecordFormat 40Clase Record 40Recuperacioacuten del contenido de un campo 41Establecimiento del contenido de un campo 42Clase LineDataRecordWriter 42

Colas de datos 44Colas de datos secuenciales 45Colas de datos por clave 46

Certificados digitales 46Clase EnvironmentVariable 48Excepciones 49Clase FileAttributes 50Clase FTP 50Clases del sistema de archivos integrado 51

Clase IFSFile 52Clase IFSJavaFile 53IFSFileInputStream 55Clase IFSTextFileInputStream 55IFSFileReader 56Clase IFSFileOutputStream 57Clase IFSTextFileOutputStream 57IFSFileWriter 58IFSRandomAccessFile 58Clase IFSKey 59Modalidad de compartimiento de archivo 60IFSSystemView 61

Clase ISeriesNetServer 61Clase JavaApplicationCall 61Clases JDBC 62

Clase AS400JDBCBlob 63Interfaz CallableStatement 65Clase AS400JDBCClob 65Clase AS400JDBCConnection 67AS400JDBCConnectionPool 68ClaseAS400JDBCManagedConnectionPoolDataSource69Interfaz DatabaseMetaData 78Clase AS400JDBCDataSource 79Registro del controlador JDBC 80Clase AS400JDBCParameterMetaData 82Interfaz PreparedStatement 83Clase ResultSet 84Clase AS400JDBCRowSet 86Clase AS400JDBCSavepoint 87Ejecucioacuten de sentencias SQL con objetosStatement 89Gestioacuten de transacciones distribuidas XAde JDBC 91

Clases de trabajos 92Clase Job 93

copy Copyright IBM Corp 1999 2014 iii

||

Clase JobList 93Clase JobLog 94

Clases de mensajes 95Clase NetServer 97Clase ObjectReferences 98Clases de permisos 99

Clase DLOPermission 100QSYSPermission 101RootPermission 103

Clases de impresioacuten 104Listar objetos de impresioacuten 105Trabajar con objetos de impresioacuten 106Recuperar atributos de PrintObject 107Atributos de recursos AFP 108Atributos de la cola de salida 108Atributos de impresora 109Atributos de archivo de impresora 110Atributos de archivo en spool 114Atributos de trabajo de transcriptor 117Atributos de objeto de impresioacuten 117Copiar archivos en spool 155Crear archivos en spool nuevos 157Generar una corriente de datos SCS 158Leer archivos en spool y recursos AFP 159Leer archivos en spool mediantePrintObjectPageInputStream yPrintObjectTransformedInputStream 160

Clase ProductLicense 160Clase ProgramCall 161Clase QSYSObjectPathName 163Acceso a nivel de registro 164

AS400File 166KeyedFile 166SequentialFile 168AS400FileRecordDescription 169Crear y suprimir archivos y miembros 171Leer y escribir registros 174Bloquear archivos 175Utilizar bloques de registros 176Fijar la posicioacuten del cursor 178Control de compromiso 179

Clase SaveFile 180Clase ServiceProgramCall 181Clase Subsystem 181Clases SystemStatus 181

Clase SystemPool 183Valores del sistema 183Clase Trace 185Clases de usuarios y grupos 188Clase UserSpace 189

Clases commtrace 190Modelo de commtrace 190Clases Format y FormatProperties 191

Ejecutar Format como un programaautoacutenomo 193

Clase Prolog 194Clase Frame 194Clase LanHeader 195Clase IPPacket 195Clase Header 196

Ejemplo coacutemo se utilizan las clasescommtrace 197

Clases HTML 198Clase BidiOrdering 199Clase HTMLAlign 200Clase HTMLDocument 201

Coacutemo se utiliza HTMLDocument paracrear datos HTML 201Coacutemo se utiliza HTMLDocument paracrear datos FO XSL 202Ejemplos coacutemo se utilizaHTMLDocument 205

Clases de formularios HTML 210Clases FormInput 211Clase LayoutFormPanel 215Clase TextAreaFormElement 216Clase LabelFormElement 217Clase SelectFormElement 217Clase SelectOption 218Clase RadioFormInputGroup 218

Clase HTMLHead 219Clase HTMLHeading 220Clase HTMLHyperlink 220Clase HTMLImage 221Clases HTMLList 221Clase HTMLMeta 224Clase HTMLParameter 225Clase HTMLServlet 225Clases de tablas HTML 226

Clase HTMLTableCell 226Clase HTMLTableRow 227Clase HTMLTableHeader 227Clase HTMLTableCaption 228

Clase HTMLText 228Clases HTMLTree 228

Clase HTMLTreeElement 229Clase FileTreeElement 230Clase FileListElement 231Clase FileListRenderer 231

Clases ReportWriter 232Clases Context 233Clase JSPReportProcessor 233Clase XSLReportProcessor 233

Clases de seguridad 234SSL (capa de sockets segura) 234

Utilizacioacuten de SSL para cifrar datos entreIBM Toolbox para Java y los servidoresIBM i 235

Servicios de autenticacioacuten 236Clases de servlets 238

Clases de autenticacioacuten 239Clase RowData 240

Clase ListRowData 240Clase RecordListRowData 241Clase ResourceListRowData 241Clase QLResultSetRowData 242

Clases RowMetaData 242Clase ListMetaData 242Clase RecordFormatMetaData 243Clase SQLResultSetMetaData 243

Clases conversoras 244

iv IBM Toolbox para Java IBM Toolbox para Java

Clase StringConverter 244Clase HTMLFormConverter 244Clase HTMLTableConverter 244

Clases de utilidades 245Clases de instalacioacuten y actualizacioacuten encliente 245AS400ToolboxJarMaker 246

Componentes soportados en IBM Toolboxpara Java 247Valores de CCSID y codificacioacutensoportados por IBM Toolbox para Java 249

Clase CommandHelpRetriever 253Clase CommandPrompter 254RunJavaApplication 254JPing 255

Beans de IBM Toolbox para Java 256JDBC 256

Mejoras efectuadas en el soporte JDBC de IBMToolbox para Java para IBM i 72 256Mejoras efectuadas en el soporte JDBC de IBMToolbox para Java para IBM i 71 257Mejoras efectuadas en el soporte JDBC de IBMToolbox para Java para IBM i 61 261Mejoras efectuadas en el soporte JDBC de IBMToolbox para Java para IBM i 54 265Propiedades JDBC de IBM Toolbox para Java 266

Propiedad LibraryList de JDBC 285Tipos SQL JDBC 287

Soporte de proxy 287Capa de Sockets Segura y Extensioacuten de socketsseguros Java 293Componentes XML (Extensible Markup Language) 293

PCML (Program Call Markup Language) 293Requisitos para utilizar PCML 294Construir llamadas a programa IBM i conPCML 294Sintaxis de PCML 299

Coacutedigo PCML program 299Coacutedigo PCML struct 301Coacutedigo PCML data 307

Record Format Markup Language 320Requisitos para utilizar RFML 320Ejemplo coacutemo se utiliza RFML encomparacioacuten con el uso de las clases Recordde IBM Toolbox para Java 320Clase RecordFormatDocument 322Documentos RFML y sintaxis RFML 323

Definicioacuten de tipo de documento RFML(DTD) 323Coacutedigo RFML data 325Coacutedigo RFML rfml 329Coacutedigo RFML recordformat 329Coacutedigo RFML struct 330

Analizador XML y procesador XSLT 330XPCML (Extensible Program Call MarkupLanguage) 331

Ventajas de XPCML respecto de PCML 331Requisitos de uso de XPCML 332Esquema y sintaxis XPCML 333

Comparacioacuten del fuente XPCML con elfuente PCML 333

Archivo xpcmlxsd de esquema 335Sintaxis de XPCML 350Atributos de coacutedigos XPCML 352

Utilizacioacuten de XPCML 353Convertir fuente PCML existente enXPCML 353Utilizar XPCML para llamar a unprograma del servidor 354Obtener los resultados de una llamada aprograma en formato de XPCML 355Pasar valores de paraacutemetros comoXPCML 356Coacutemo se utiliza fuente XPCMLcondensado 356Identificar errores de anaacutelisis en XPCML 357

Preguntas habituales (FAQ) 358Consejos para la programacioacuten 358

Coacutemo concluir el programa Java 358Nombres de viacutea de acceso del sistema dearchivos integrado para objetos de servidor 359Gestionar conexiones en programas Java 361Maacutequina virtual Java de IBM i 369

Comparacioacuten de la maacutequina virtual Java deIBM i y las clases de IBM Toolbox para Java 369Ejecutar las clases de IBM Toolbox para Javaen la maacutequina virtual Java de IBM i 370Establecer el nombre del sistema el ID deusuario y la contrasentildea con un objeto AS400en la maacutequina virtual Java de IBM i 371

Agrupacioacuten de almacenamiento auxiliar (ASP)independiente 373Excepciones 374Clase Trace 375Optimizacioacuten de IBM i 377Mejoras en el rendimiento 379Clases de instalacioacuten y actualizacioacuten en cliente 381AS400ToolboxJarMaker 381Soporte de idiomas nacionales para Java 383Servicio y soporte para IBM Toolbox para Java 383

Ejemplos de coacutedigo 384Ejemplos clases de acceso 384Ejemplos JavaBeans 473Ejemplos clases commtrace 480Ejemplos de las clases HTML 480Ejemplos PCML (Program Call MarkupLanguage) 504Ejemplos clases ReportWriter 513Ejemplos RFML 530Ejemplo coacutemo se utiliza una credencial desiacutembolo de perfil para intercambiar la identidadde la hebra de IBM i 531Ejemplos de las clases de servlets 532Ejemplos simples de programacioacuten 560Ejemplos consejos para la programacioacuten 574Ejemplos clases de utilidades 575Ejemplos XPCML 577

Informacioacuten relacionada para IBM Toolbox paraJava 588

Avisos 593Informacioacuten sobre interfaces de programacioacuten 595

Contenido v

|||

Marcas registradas 595 Teacuterminos y condiciones 595

vi IBM Toolbox para Java IBM Toolbox para Java

IBM Toolbox para Java

IBMreg Toolbox para Javatrade es un conjunto de clases Java que permiten utilizar programas Java paraacceder a datos del sistema Con estas clases puede escribir aplicaciones de clienteservidor applets yservlets que funcionen con datos existentes en el sistema Tambieacuten puede ejecutar las aplicaciones Javaque utilizan las clases de IBM Toolbox para Java en la maacutequina virtual Java (JVM) de IBM i

IBM Toolbox para Java utiliza los servidores de host de IBM i como puntos de acceso al sistema Dadoque IBM Toolbox para Java utiliza funciones de comunicacioacuten incorporadas a Java no es necesarioutilizar IBM i Access para Windows para utilizar IBM Toolbox para Java Cada servidor se ejecuta en untrabajo aparte en el servidor y cada trabajo servidor enviacutea y recibe corrientes de datos a traveacutes de unaconexioacuten por socket

Nota al utilizar los ejemplos de coacutedigo acepta los teacuterminos del ldquoInformacioacuten sobre licencia de coacutedigo yexencioacuten de responsabilidadrdquo en la paacutegina 590

Novedades de IBM i 72Conozca la informacioacuten nueva o con modificaciones importantes de la coleccioacuten de temas de IBMToolbox para Java

Se han realizado los siguientes cambios en IBM Toolbox para Java en IBM i 72v Las clases siguientes se han antildeadido desde el release anterior de IBM i Todas las clases listadas aquiacute

estaacuten en el paquete comibmas400access a menos que se indique lo contrariondash comibmas400accessAS400JDBCTimestamp

v Se han realizado mejoras significativas en las clases de JDBC que estaacuten en el paquetecomibmas400access

v Se ha antildeadido informacioacuten sobre ldquoJTOpenLiterdquo en la paacutegina 20 ubicada en el paquetecomibmjtopenlite JTOpenLite permite escribir programas Java que permiten a diversos dispositivosmoacuteviles acceder directamente a datos y recursos de IBM i

Obtener IBM Toolbox para Java

IBM Toolbox para Java estaacute disponible en los formatos siguientesv Los Archivos JAR de IBM Toolbox para Java se instalan en el sistema de archivos integrado de IBM i

bajo el directorio QIBMProdDataOS400jt400v IBM Toolbox para Java tambieacuten estaacute disponible en una versioacuten de fuente abierto Puede descargar el

coacutedigo y obtener maacutes informacioacuten en el sitio Web de JTOpen

Coacutemo ver las novedades y los cambios realizados

Para ayudarle a ver doacutende se han realizado cambios teacutecnicos el Information Center utilizav La imagen para marcar doacutende empieza la informacioacuten nueva o modificadav La imagen para marcar doacutende finaliza la informacioacuten nueva o modificada

En los archivos PDF aparecen barras de revisioacuten (|) en el margen izquierdo de la informacioacuten nueva omodificada

Si desea obtener otra informacioacuten sobre las novedades o modificaciones de este release consulte eldocumento Memoraacutendum para los usuarios

copy Copyright IBM Corp 1999 2014 1

Archivo PDF para IBM Toolbox para JavaPuede visualizar e imprimir un archivo PDF de esta informacioacuten

Para visualizar o descargar la versioacuten en PDF de este documento seleccione IBM Toolbox para Java

Puede visualizar o descargar estos archivos PDF de temas relacionadosv IBM Developer Kit para Javav Depurador de IBM i

Otra informacioacuten

Tambieacuten puede descargar un paquete comprimido en zip del tema IBM Toolbox para Java que incluye

los Javadocs del sitio Web de IBM Toolbox para Java y JTOpen

Nota la informacioacuten del paquete comprimido tiene enlaces con documentos que no se incluyen en elpaquete comprimido por lo que esos enlaces no funcionaraacuten

Guardar archivos PDF

Para guardar un PDF en la estacioacuten de trabajo con el fin de verlo o imprimirlo1 Pulse el enlace PDF con el botoacuten derecho del ratoacuten en el navegador2 Pulse la opcioacuten que guarda el PDF localmente3 Navegue al directorio en el que desea guardar el archivo PDF4 Pulse Guardar

Descargar Adobe Reader

Necesita tener instalado Adobe Reader en el sistema para poder visualizar o imprimir estos PDF Puededescargar una copia gratuita desde el sitio Web de Adobe

(wwwadobecomproductsacrobatreadstephtml)

Instalacioacuten y gestioacuten de IBM Toolbox para JavaEl uso de IBM Toolbox para Java facilita la tarea de escribir applets servlets y aplicaciones Java clienteque accedan a los recursos datos y programas del sistema

Gestioacuten de la instalacioacuten de IBM Toolbox para JavaSolo es necesario que instale IBM Toolbox para Java en los sistemas cliente que lo utilicen o en unaubicacioacuten de la red en la que los clientes puedan acceder al mismo Los clientes pueden ser PCestaciones de trabajo dedicadas o sistemas IBM i Es importante recordar que puede configurar unservidor IBM i o una particioacuten del servidor como cliente En el segundo caso debe instalar IBM Toolboxpara Java en la particioacuten cliente del servidor

Puede utilizar cualquiera de los meacutetodos siguientes (solos o combinados) para instalar y gestionar IBMToolbox para Javav Gestioacuten individual para instalar y gestionar de forma individual IBM Toolbox para Java en cada

clientev Gestioacuten en red de una sola instalacioacuten utilizando la red para instalar y gestionar una uacutenica instalacioacuten

compartida de IBM Toolbox para Java en un servidor

2 IBM Toolbox para Java IBM Toolbox para Java

En los apartados siguientes se describe brevemente coacutemo afecta al rendimiento y a la facilidad de gestioacutencada uno de los meacutetodos El modo de desarrollo de las aplicaciones Java y gestioacuten de los recursos queelija determinaraacute cuaacutel de los meacutetodos (o cuaacutel de las combinaciones de meacutetodos) utilizaraacute

Gestioacuten individual

Puede elegir gestionar las instalaciones de IBM Toolbox para Java de forma individual en los distintosclientes La principal ventaja de instalar IBM Toolbox para Java en clientes individuales es que con ello sereduce el tiempo que tarda un cliente en iniciar una aplicacioacuten que utiliza las clases de IBM Toolbox paraJava

La principal desventaja es la gestioacuten individual de esas instalaciones Un usuario o una aplicacioacuten creadapor el usuario debe hacer un seguimiento de queacute versioacuten de IBM Toolbox para Java estaacute instalada encada estacioacuten de trabajo y llevar a cabo las tareas de gestioacuten

Gestioacuten en red de una sola instalacioacuten

Tambieacuten puede utilizar la red para instalar y gestionar una uacutenica copia de IBM Toolbox para Java en unservidor al que todos los clientes puedan acceder Este tipo de instalacioacuten en red proporciona lassiguientes ventajasv Todos los clientes utilizan la misma versioacuten de IBM Toolbox para Javav La actualizacioacuten de la uacutenica instalacioacuten de IBM Toolbox para Java beneficia a todos los clientesv Los distintos clientes no tienen que preocuparse de llevar a cabo ninguna tarea de mantenimiento

excepto la de establecer la misma CLASSPATH inicial

Este tipo de instalacioacuten tambieacuten tiene el inconveniente de aumentar el tiempo que tarda un cliente eniniciar una aplicacioacuten de IBM Toolbox para Java Asimismo debe permitir que la CLASSPATH del clienteapunte al servidor Puede utilizar NetServer que estaacute integrado en IBM i u otro meacutetodo que le permitaacceder a los archivos del sistema como IBM i Access para Windows

Instalacioacuten de IBM Toolbox para JavaEl meacutetodo que utilice para instalar IBM Toolbox para Java dependeraacute de coacutemo desee gestionar lainstalacioacuten Utilice estos temas para instalar IBM Toolbox para Java

Requisitos de IBM i para IBM Toolbox para JavaEste tema detalla los requisitos que el entorno debe cumplir para poder utilizar IBM Toolbox para Java

Nota antes de utilizar IBM Toolbox para Java compruebe que se cumplen los requisitos de estacioacuten detrabajo que corresponden a su entorno

Opciones de IBM i necesarias

Para ejecutar IBM Toolbox para Java en un entorno de clienteservidor debe habilitar el perfil de usuarioQUSER iniciar los servidores de host y tener TCPIP en ejecucioacutenv El perfil de usuario QUSER debe estar habilitado para iniciar los servidores de hostv Los servidores de host escuchan y aceptan las peticiones de conexioacuten de los clientes La opcioacuten

Servidores de host IBM i se incluye con la opcioacuten base de IBM i Para obtener maacutes informacioacutenconsulte el tema acerca de la administracioacuten de servidores de host

v El soporte TCPIP que estaacute integrado en IBM i permite conectar el servidor a una red Para obtenermaacutes informacioacuten consulte TCPIP

Coacutemo iniciar las opciones de IBM i necesarias

En una liacutenea de mandatos inicie las opciones de IBM i necesarias siguiendo estos pasos

IBM Toolbox para Java 3

1 Compruebe que el perfil QUSER estaacute habilitado2 Para iniciar los servidores de host IBM i utilice el mandato CL Iniciar servidor de host Escriba

STRHOSTSVR ALL y pulse INTRO3 Para iniciar el servidor de gestioacuten de datos distribuidos (DDM) TCPIP utilice el mandato CL Iniciar

servidor TCPIP Escriba STRTCPSVR SERVER(DDM) y pulse INTRO

Coacutemo determinar si IBM Toolbox para Java estaacute instalado en el sistema

Para ver si IBM Toolbox para Java ya estaacute instalado en el servidor IBM i siga los pasos de este tema1 En System i Navigator seleccione el sistema que desea utilizar e inicie la sesioacuten en eacutel2 En el aacuterbol de funciones (el panel izquierdo) expanda el sistema y a continuacioacuten expanda

Configuracioacuten y servicio3 Expanda Software y a continuacioacuten expanda Productos instalados4 En el panel Detalles (el panel derecho) consulte si se ha instalado la opcioacuten 3 del producto 5770-SS1

Si ve este producto y la combinacioacuten de opciones IBM Toolbox para Java estaacute instalado en el servidorseleccionado

Nota tambieacuten puede averiguar si IBM Toolbox para Java estaacute instalado ejecutando el mandato CL Ira menuacute (GO MENU(LICPGM)) Opcioacuten 11

Si IBM Toolbox para Java no estaacute instalado puede instalar IBM Toolbox para Java instalando la opcioacuten 3del producto 5770-SS1

Comprobar el perfil QUSER

Los servidores de host IBM i se inician con el perfil de usuario QUSER por lo que primero debeasegurarse de que el perfil QUSER estaacute habilitado para poder ejecutar IBM Toolbox para Java en unentorno clienteservidor

Comprobar el perfil QUSER

Para utilizar la liacutenea de mandatos a fin de comprobar el perfil QUSER siga estos pasos1 En una liacutenea de mandatos escriba DSPUSRPRF USRPRF(QUSER) y pulse Intro2 Compruebe que Estado tiene establecido el valor ENABLED Si el estado del perfil no es ENABLED

cambie el perfil QUSER

Cambiar el perfil de usuario QUSER

Si el perfil QUSER no estaacute establecido en ENABLED (habilitado) debe habilitarlo para iniciar losservidores de host IBM i Asimismo la contrasentildea del perfil QUSER no puede ser NONE Si ese es elcaso debe restablecerla

Para utilizar la liacutenea de mandatos a fin de habilitar el perfil QUSER siga estos pasos1 Escriba CHGUSRPRF USRPRF(QUSER) y pulse INTRO2 Cambie el campo Estado a ENABLED y pulse INTRO

El perfil de usuario QUSER estaacute ahora preparado para iniciar los servidores de host IBM i

Dependencias de otros programas bajo licencia

En funcioacuten de coacutemo desee utilizar IBM Toolbox para Java puede que tenga que instalar otros programasbajo licencia

4 IBM Toolbox para Java IBM Toolbox para Java

Visor de archivos en spool

Si desea utilizar las funciones del visor de archivos en spool (clase SpooledFileViewer) de IBM Toolboxpara Java aseguacuterese de que en el servidor esteacute instalada la opcioacuten 8 de host (Fonts de compatibilidadAFP)

Nota las clases SpooledFileViewer PrintObjectPageInputStream y PrintObjectTransformedInputStreamsolo funcionan cuando se conectan a sistemas cuya versioacuten sea igual o posterior a V4R4

SSL (capa de sockets segura)

Si desea utilizar SSL (capa de sockets segura) compruebe que tenga instalado lo siguientev Programa bajo licencia IBM HTTP Server para i 5770-DG1v Opcioacuten 34 de IBM i (Digital Certificate Manager)

Para obtener maacutes informacioacuten sobre SSL consulte ldquoCapa de Sockets Segura y Extensioacuten de socketsseguros Javardquo en la paacutegina 293

Servidor HTTP para utilizar applets servlets o SSL

Si desea utilizar applets servlets o SSL en el servidor IBM i debe configurar un servidor HTTP e instalarlos archivos de clase en el sistema Para obtener maacutes informacioacuten acerca de IBM HTTP Server para i

consulte el sitio Web de HTTP Server

Si desea informacioacuten sobre el gestor de certificados digitales y sobre coacutemo crear certificados digitales conIBM HTTP Server y trabajar con ellos consulte Gestioacuten de certificados digitales

Compatibilidad con niveles distintos de IBM i

Dado que puede utilizar IBM Toolbox para Java tanto en el servidor como en el cliente las cuestiones decompatibilidad afectan tanto a la ejecucioacuten en un servidor como a la conexioacuten desde un cliente a unservidor

Utilizar IBM Toolbox para Java para conectarse desde un cliente a un servidor

Puede utilizar distintas versiones de IBM Toolbox para Java en un cliente y en el servidor al que seconecta Para utilizar IBM Toolbox para Java con el fin de acceder a los datos y recursos de un servidorIBM i el servidor al que se conecta debe ejecutar uno de los sistemas operativos siguientesv IBM i 72v IBM i 71v IBM i 61

La tabla siguiente muestra los requisitos de compatibilidad para la conexioacuten con distintas versionesanteriores de IBM i

Nota IBM Toolbox para Java no da soporte a la compatibilidad con versiones posteriores No se puedeinstalar IBM Toolbox para Java en un servidor que ejecute una versioacuten maacutes reciente de IBM i Porejemplo si utiliza la versioacuten de IBM Toolbox para Java que se distribuye con IBM i 61 no puedeconectarse a un servidor que ejecute IBM i 72

LPP Se suministra con IBM i Se conecta a IBM i

5761-JC1 61 53 y superior

5770-SS1 71 54 y superior

IBM Toolbox para Java 5

|

LPP Se suministra con IBM i Se conecta a IBM i

5770-SS1 72 61 y posterior

Optimizaciones nativas al llevar a cabo la ejecucioacuten en la JVM de IBM i

Las optimizaciones nativas son un conjunto de funciones que hacen que las clases de IBM Toolbox paraJava funcionen como un usuario esperariacutea que funcionaran al ejecutarse en IBM i Las optimizacionessolo inciden en el funcionamiento de IBM Toolbox para Java al ejecutarse en la JVM de IBM i

Las optimizaciones de IBM Toolbox para Java cuando se ejecuta en IBM i sonv Inicio de sesioacuten si no se especifica ninguacuten ID de usuario o ninguna contrasentildea en el objeto AS400 se

utilizan el ID de usuario y la contrasentildea del trabajo actualv Llamada directa a las API de IBM i en lugar de efectuar llamadas por socket a los servidores de host

ndash Acceso a base de datos a nivel de registro colas de datos y espacio de usuario cuando se cumplenlos requisitos de seguridad

ndash Llamada a programa y llamada a mandato cuando se cumplen los requisitos de seguridad y losrequisitos de seguridad de hebras

Nota para obtener un mejor rendimiento establezca la propiedad driver de JDBC para utilizar elcontrolador nativo cuando el programa Java y el archivo de base de datos esteacuten en el mismo servidor

No es necesario efectuar ninguacuten cambio en la aplicacioacuten Java para obtener las optimizaciones IBMToolbox para Java habilita automaacuteticamente las optimizaciones cuando corresponde

Para obtener las mejoras en el rendimiento debe asegurarse de utilizar el archivo JAR que contiene lasoptimizaciones nativas de IBM i Para obtener maacutes informacioacuten consulte la nota 1 de Archivos JAR

Si no utiliza el archivo JAR que incluye las optimizaciones nativas de IBM i IBM Toolbox para Javafunciona como si se ejecutara en un cliente

Requisitos de estacioacuten de trabajo para IBM Toolbox para JavaAseguacuterese de que la estacioacuten de trabajo cumple con los siguientes requisitos

Nota antes de utilizar IBM Toolbox para Java compruebe que se cumplen los requisitos de IBM irelativos a su entorno

Requisitos de estacioacuten de trabajo para ejecutar aplicaciones de IBM Toolbox para Java

Para desarrollar y ejecutar aplicaciones de IBM Toolbox para Java aseguacuterese de que la estacioacuten de trabajocumpla los requisitos siguientesv Se recomienda emplear una maacutequina virtual Java de Java 2 Standard Edition (J2SE) soportada Son

muchas las nuevas funciones de IBM Toolbox para Java que requieren utilizar la versioacuten 14 o superiorde la JVM

v TCPIP instalado y configurado

Requisitos de estacioacuten de trabajo para ejecutar applets de IBM Toolbox para Java

Para desarrollar y ejecutar aplicaciones de IBM Toolbox para Java aseguacuterese de que la estacioacuten de trabajocumpla los requisitos siguientesv Un navegador que tenga una maacutequina virtual Java (JVM) compatiblev TCPIP instalado y configuradov La estacioacuten de trabajo debe conectarse a un servidor que ejecute IBM i 61 o un release maacutes reciente

6 IBM Toolbox para Java IBM Toolbox para Java

|||

|

Instalacioacuten de IBM Toolbox para Java en el sistemaUacutenicamente debe instalar IBM Toolbox para Java en el servidor IBM i si ha configurado como cliente elsistema o una particioacuten del sistema

Antes de instalar IBM Toolbox para Java debe asegurarse de que la versioacuten de IBM i cumple losrequisitos para ejecutar IBM Toolbox para Java Puede resultarle de intereacutes determinar si IBM Toolboxpara Java ya estaacute instalado en el servidor

Instalacioacuten de IBM Toolbox para Java

Puede instalar IBM Toolbox para Java instalando la opcioacuten 3 de 5770-SS1 Puede utilizar System iNavigator o la liacutenea de mandatos

Utilizacioacuten de System i Navigator para instalar IBM Toolbox para Java

Para instalar IBM Toolbox para Java utilizando System i Navigator siga estos pasos1 En System i Navigator inicie la sesioacuten en el sistema que desea utilizar2 En el aacuterbol de funciones (el panel izquierdo) expanda Mis conexiones3 Bajo Mis conexiones pulse con el botoacuten derecho el sistema donde desea instalar IBM Toolbox para

Java4 Seleccione Ejecutar mandato5 En el diaacutelogo Restaurar programa bajo licencia (RSTLICPGM) escriba la siguiente informacioacuten y a

continuacioacuten pulse Aceptarv Producto 5770-SS1v Dispositivo el nombre del dispositivo o archivo de salvarv Parte opcional a a restaurar 3

Nota para obtener maacutes informacioacuten pulse Ayuda en el diaacutelogo Restaurar programa bajo licencia(RSTLICPGM)

Puede utilizar System i Navigator para ver el estado de la tarea Mandato de Management Centralresultante siguiendo estos pasos1 Expanda Management Central2 Expanda Actividad de tareas3 Bajo Actividad de tareas seleccione Mandatos4 En el panel de detalles pulse la tarea de Ejecutar mandato adecuada

Utilizar la liacutenea de mandatos para instalar IBM Toolbox para Java

Para instalar IBM Toolbox para Java desde una liacutenea de mandatos siga estos pasos1 En una liacutenea de mandatos utilice el mandato CL Ir a menuacute Escriba GO MENU(LICPGM) y pulse

INTRO2 Seleccione 11 Instalar programa bajo licencia3 Seleccione 5770-SS1 3 Soporte de directorio base ampliado

Encontraraacute maacutes informacioacuten sobre coacutemo instalar programas bajo licencia en Gestioacuten de software yprogramas bajo licencia

Instalacioacuten de IBM Toolbox para Java en la estacioacuten de trabajoAntes de instalar IBM Toolbox para Java compruebe que se cumplen los requisitos de estacioacuten de trabajoque corresponden a su entorno

IBM Toolbox para Java 7

El meacutetodo que utilice para instalar IBM Toolbox para Java en la estacioacuten de trabajo dependeraacute de coacutemodesee gestionar la instalacioacutenv Para instalar IBM Toolbox para Java en clientes individuales copie los archivos JAR en la estacioacuten de

trabajo y configure la CLASSPATH de la estacioacuten de trabajov Para utilizar el producto IBM Toolbox para Java instalado en un servidor solo tiene que configurar la

CLASSPATH de la estacioacuten de trabajo de modo que apunte a la instalacioacuten del servidor Para que laCLASSPATH de la estacioacuten de trabajo apunte al servidor el servidor debe tener instalado IBM iNetServer

En esta informacioacuten se describe coacutemo copiar los archivos de clase en la estacioacuten de trabajo Para obtenermaacutes informacioacuten sobre coacutemo establecer la CLASSPATH de la estacioacuten de trabajo consulte ladocumentacioacuten del sistema operativo de la estacioacuten de trabajo o la informacioacuten disponible en el sitio Web

de Sun Java

Nota para utilizar las clases de IBM Toolbox para Java en la aplicacioacuten tambieacuten es preciso que elsistema cumpla los requisitos de IBM i

Los archivos de clase de IBM Toolbox para Java estaacuten empaquetados en varios archivos JAR por lo quedebe copiar uno o maacutes de estos archivos JAR en la estacioacuten de trabajo Para obtener maacutes informacioacutensobre queacute archivos JAR son necesarios para las funciones de IBM Toolbox para Java especiacuteficas consulteArchivos JAR

Ejemplo coacutemo copiar jt400jar

En el ejemplo que figura a continuacioacuten se supone que se desea copiar jt400jar que contiene las clases denuacutecleo de IBM Toolbox para Java

Para copiar manualmente el archivo JAR siga estos pasos1 Busque el archivo jt400jar en el directorio siguiente QIBMProdDataHTTPPublicjt400lib2 Copie jt400jar del servidor en la estacioacuten de trabajo Para ello existen varios meacutetodos

v Utilice IBM i Access para Windows a fin de correlacionar una unidad de red de la estacioacuten detrabajo con el servidor y a continuacioacuten copie el archivo

v Utilice el protocolo de transferencia de archivos (FTP) para enviar el archivo a la estacioacuten de trabajo(en modalidad binaria)

3 Actualice la variable de entorno CLASSPATH de la estacioacuten de trabajov Por ejemplo si utiliza Windows NT y ha copiado jt400jar en Cjt400lib antildeada la serie siguiente

al final de la CLASSPATHCjt400libjt400jar

Tambieacuten tiene la opcioacuten de utilizar la versioacuten de fuente abierto de IBM Toolbox para Java denominadaJTOpen Para obtener maacutes informacioacuten sobre JTOpen consulte el sitio Web de IBM Toolbox para Java y

JTOpen

Archivos JAR

IBM Toolbox para Java se suministra en forma de conjunto de archivos JAR Cada uno de los archivosJAR contiene paquetes Java que proporcionan funciones especiacuteficas Puede reducir la cantidad de espaciode almacenamiento necesario utilizando uacutenicamente los archivos JAR que sean precisos para habilitar lasfunciones concretas que desee

Para utilizar un archivo JAR compruebe que especifica una entrada para el mismo en la variableCLASSPATH

8 IBM Toolbox para Java IBM Toolbox para Java

El diagrama siguiente indica los archivos JAR que debe antildeadir a la variable CLASSPATH para utilizar lafuncioacuten o el paquete asociado

Paquete o funcioacuten de IBM Toolbox para JavaArchivos JAR que deben estar en la variableCLASSPATH

Clases de acceso jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 ojt400Proxyjar en un entorno de proxy

ldquoClase CommandHelpRetrieverrdquo en la paacutegina 253 jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 y unanalizador XML y un procesador XSLT Nota 3

CommandPrompter Nota 3 jt400jar jui400jar util400jar Nota 4 y un analizador XMLNota 3

Clases commtrace jt400jar (cliente) o jt400Nativejar (servidor) Nota 1

Clases HTML jt400jar Nota 1 maacutes jt400Servletjar (cliente) ojt400Nativejar (servidor) Nota 1

Clase HTMLDocument Los mismos archivos JAR necesarios para las clasesHTML maacutes un analizador XML y un procesador XSLTNota 3

Clases JCA jt400jar (cliente) o jt400Nativejar (servidor) Nota 1

GUI de origen de datos JDBC jt400jar (cliente) Nota 1 y jui400jarNota 5

Mensajes de error y del sistema de NLS jt400Mri_lang_cntryjar Nota 6

PCML (desarrollo y ejecucioacuten analizado) Nota 7 jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 Nota 8 yun analizador XML Nota 3

PCML (ejecucioacuten serializado) jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 Nota 8

Clases ReportWriter jt400jar (cliente) o jt400Nativejar (servidor) Nota 1archivos JAR de reportwriter Nota 9 y un analizador XMLy un procesador XSLT Nota 3

RFML jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 y unanalizador XML Nota 3

Clases de seguridad jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 ojt400Proxyjar en un entorno de proxy

Clases de servlets jt400jar Nota 1 maacutes jt400Servletjar (cliente) ojt400Nativejar (servidor) Nota 1

Depurador de IBM i Nota 4 jt400jar (cliente) Nota 1 y tesjar

XPCML jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 y unanalizador XML y un procesador XSLT Nota 3

Nota 1 no coloque jt400jar y jt400Nativejar en la CLASSPATH Elija el archivo JAR maacutes adecuado a suentorno y utilice soacutelo ese archivo JAR en la CLASSPATH

Nota 2 algunas de las clases de IBM Toolbox para Java se encuentran en maacutes de un archivo JARv jt400jar - Acceso commtrace JCA soporte para JDBC PCML RFML seguridad utilidades y XPCMLv jt400zip - Utilice jt400jar en lugar de jt400zip jt400zip se distribuye para mantener la compatibilidad

con los releases anteriores de IBM Toolbox para Javav jt400Accesszip - Las mismas clases que contiene jt400jar jtAccess400zip se distribuye para mantener

la compatibilidad con los releases anteriores de IBM Toolbox para Java Utilice jt400jar o jt400Nativejaren lugar de jt400Accesszip

v jt400Nativejar - Acceso HTML PCML RFML seguridad XPCML y optimizaciones nativas Lasoptimizaciones nativas son un conjunto de clases (menos de 20) que aprovechan la funcioacuten de IBM icuando se ejecuta en la JVM de IBM i Dado que jt400Nativejar contiene las optimizaciones nativas al

IBM Toolbox para Java 9

ejecutarse en la JVM de IBM i utilice jt400Nativejar en lugar de jt400jar jt400Nativejar se suministracon IBM i y reside en el directorio QIBMProdDataOS400jt400lib

v jt400Native11xjar - Utilice jt400Nativejar en lugar de jt400Native11xjar jt400Native11xjar sedistribuye para mantener la compatibilidad con los releases anteriores de IBM Toolbox para Java

Nota 3 cuando tenga que utilizar un analizador XML o procesador XSLT aseguacuterese de que es compatiblecon JAXP Encontraraacute maacutes informacioacuten en esta paacutegina

ldquoAnalizador XML y procesador XSLTrdquo en la paacutegina 330

Nota 4 al utilizar CommandPrompter o el depurador de IBM i tambieacuten es necesario un archivo JARadicional que no forma parte de IBM Toolbox para Java jhalljar Para obtener maacutes informacioacuten sobre

coacutemo bajar jhalljar consulte el sitio Web de Sun JavaHelp

Nota 5 util400jar contiene clases especiacuteficas de IBM i para dar formato a la entrada y para emplear elprograma de solicitud de liacutenea de mandatos Para utilizar la clase CommandPrompter se necesitautil400jar

Nota 6 jui400jar contiene las clases necesarias para utilizar la interfaz de GUI DataSource JDBC jt400jar(Nota 1) contiene las clases necesarias para todas las demaacutes funciones JDBC

Nota 7 jt400Mri_xx_yyjar contiene mensajes traducidos entre los que se encuentran series incluidas enmensajes de excepcioacuten diaacutelogos y salida de otros procesos normales En jt400Mri_lang_cntryjar lang = elcoacutedigo de idioma ISO y cntry = el coacutedigo de paiacutes o regioacuten ISO utilizado para traducir el texto incluidoEn algunos casos no se emplea el coacutedigo de paiacutes o regioacuten ISO Al instalar una versioacuten en idioma nacionalconcreta del programa bajo licencia IBM Toolbox para Java en el sistema se instala el archivojt400Mri_lang_cntryjar adecuado Si el idioma no estaacute soportado la instalacioacuten utiliza de formapredeterminada la versioacuten en ingleacutes que se incluye en los archivos JAR de IBM Toolbox para Javav Por ejemplo al instalar la versioacuten del idioma alemaacuten del programa bajo licencia 5770-SS1 se instala el

archivo JAR del idioma alemaacuten jt400Mri_dejar

Puede antildeadir soporte para otros idiomas antildeadiendo maacutes de uno de estos archivos JAR a la variableclasspath Java carga la serie correcta seguacuten el entorno local actual

Nota 8 la serializacioacuten del archivo PCML durante el desarrollo supone dos ventajas1 Tan solo deberaacute analizar el archivo PCML durante el desarrollo y no durante la ejecucioacuten2 Los usuarios necesitaraacuten incluir menos archivos JAR en la variable CLASSPATH para ejecutar la

aplicacioacuten

Para analizar el archivo PCML durante el desarrollo necesitaraacute el moacutedulo de ejecucioacuten de PCML dedatajar o jt400jar y el analizador PCML de x4j400jar Para ejecutar la aplicacioacuten serializada los usuariossolo necesitaraacuten jt400jar Para obtener maacutes informacioacuten consulte ldquoConstruir llamadas a programa IBM icon PCMLrdquo en la paacutegina 294

Nota 9 utilice jt400jar y jt400Nativejar en lugar de data400jar data400jar contiene las clases deejecucioacuten PCML que ahora tambieacuten estaacuten en jt400jar y jt400Nativejar (Nota 1) data400jar se distribuyepara mantener la compatibilidad con los releases anteriores de IBM Toolbox para Java

Nota 10 hay copias de las clases ReportWriter en maacutes de un archivo JARv composerjarv outputwriterjarv reportwritersjar

10 IBM Toolbox para Java IBM Toolbox para Java

Si su aplicacioacuten enviacutea corrientes de datos PCL a un archivo en spool del IBM i debe establecer comodisponibles las clases de acceso mediante el archivo JAR adecuado (Nota 1) Para crear un archivo enspool que contenga los datos PCL se necesitan las clases AS400 OutputQueue PrintParameterList ySpooledFileOutputStream Para obtener maacutes informacioacuten consulte las clases ReportWriter

Propiedades del sistemaPuede especificar propiedades del sistema para configurar diversos aspectos de IBM Toolbox para Java

Por ejemplo puede utilizar las propiedades del sistema para definir un servidor proxy o un nivel derastreo Las propiedades del sistema son uacutetiles para la adecuada configuracioacuten en tiempo de ejecucioacuten sinnecesidad de volver a compilar el coacutedigo Las propiedades del sistema funcionan como las variables deentorno en el sentido de que cuando se cambia una propiedad del sistema durante la ejecucioacuten por logeneral el cambio no se refleja hasta la proacutexima vez que se ejecuta la aplicacioacuten

Puede establecer las propiedades del sistema de varias formasv Mediante el meacutetodo javalangSystemsetProperties()

Puede establecer las propiedades del sistema de forma programaacutetica mediante el meacutetodojavalangSystemsetProperties()Por ejemplo el coacutedigo siguiente establece la propiedad comibmas400accessAS400proxyServer enhqoffice

Properties systemProperties = SystemgetProperties()systemPropertiesput (comibmas400accessAS400proxyServer hqoffice)SystemsetProperties (systemProperties)

v Mediante la opcioacuten -D del mandato java

Muchos entornos permiten establecer propiedades del sistema al ejecutar aplicaciones desde una liacuteneade mandatos mediante la opcioacuten -D del mandato javaPor ejemplo el programa siguiente ejecuta la aplicacioacuten denominada Inventory con la propiedadcomibmas400accessAS400proxyServer establecida en hqoffice

java -Dcomibmas400accessAS400proxyServer=hqoffice Inventory

v Mediante un archivo jt400properties

En algunos entornos puede resultar poco praacutectico ordenar a todos los usuarios que establezcan suspropias propiedades del sistema Como alternativa puede especificar las propiedades del sistema deIBM Toolbox para Java en un archivo denominado jt400properties donde se buscaraacute como si fueraparte del paquete comibmas400access Dicho de otro modo coloque el archivo jt400properties en undirectorio comibmas400access al que apunte la sentencia CLASSPATHPor ejemplo establezca la propiedad comibmas400accessAS400proxyServer en hqoffice insertandola liacutenea siguiente en el archivo jt400properties

comibmas400accessAS400proxyServer=hqoffice

El caraacutecter de barra inclinada invertida () funciona como caraacutecter de escape en los archivos depropiedades Para especificar un caraacutecter de barra inclinada invertida literal emplee dos caracteres debarra inclinada invertida ()Modifique este ejemplo de un archivo jt400properties para su entorno

v Mediante una clase Properties

Algunos navegadores no cargan los archivos de propiedades sin cambiar expliacutecitamente los valores deseguridad Sin embargo la mayoriacutea de los navegadores siacute admiten propiedades en archivos class demodo que las propiedades del sistema de IBM Toolbox para Java tambieacuten pueden especificarsemediante una clase denominada comibmas400accessProperties que ampliacutea javautilPropertiesPor ejemplo para establecer la propiedad comibmas400accessAS400proxyServer en hqofficeutilice el coacutedigo Java siguiente

package comibmas400access

public class Properties

IBM Toolbox para Java 11

extends javautilProperties

public Properties ()

put (comibmas400accessAS400proxyServer hqoffice)

Modifique y compile este ejemplo de un archivo fuente Propertiesjava para su entorno

Si una propiedad del sistema de IBM Toolbox para Java se establece mediante maacutes de uno de losprocedimientos descritos anteriormente se aplica la prioridad siguiente (por orden de prioridaddecreciente)1 La propiedad del sistema establecida programaacuteticamente mediante

javalangSystemsetProperties()

2 La propiedad del sistema establecida mediante la opcioacuten -D del mandato java

3 La propiedad del sistema establecida mediante una clase Properties4 La propiedad del sistema establecida mediante un archivo jt400properties

IBM Toolbox para Java da soporte a las propiedades del sistema siguientesv ldquoPropiedades de servidor proxyrdquov ldquoPropiedades de rastreordquo en la paacutegina 13v ldquoPropiedades de llamada a mandatoprogramardquo en la paacutegina 13v ldquoPropiedades de FTPrdquo en la paacutegina 13v ldquoPropiedades de conexioacutenrdquo en la paacutegina 14

Propiedades de servidor proxy

Propiedad de servidor proxy Descripcioacuten

comibmas400accessAS400proxyServer Especifica el nombre de host y el nuacutemero depuerto de servidor proxy con el formato

nombrehostnuacutemeropuerto

El nuacutemero de puerto es opcional

comibmas400accessTunnelProxyServerclientCleanupInterval Especifica con queacute frecuencia en segundosel servidor proxy busca si hay conexionesdesocupadas El servidor proxy inicia unahebra para buscar los clientes que ya notienen comunicacioacuten Utilice esta propiedadpara establecer con queacute frecuencia busca lahebra si hay conexiones desocupadas

comibmas400accessTunnelProxyServerclientLifetime Especifica durante cuaacutento tiempo ensegundos puede estar desocupado un clienteantes de que el servidor proxy elimine lasreferencias a los objetos de modo que lamaacutequina virtual Java pueda eliminarlos en larecogida de basura El servidor proxy iniciauna hebra para buscar los clientes que ya notienen comunicacioacuten Utilice esta propiedadpara establecer durante cuaacutento tiempo puedeestar desocupado un cliente antes de que seejecute la recogida de basura sobre eacutel

12 IBM Toolbox para Java IBM Toolbox para Java

Propiedades de rastreo

Propiedad de rastreo Descripcioacuten

comibmas400accessTracecategory Especifica queacute categoriacuteas de rastreo deben habilitarse Setrata de una lista delimitada por comas que contienecualquier combinacioacuten de categoriacuteas de rastreo La listacompleta de categoriacuteas de rastreo se define en la claseTrace

comibmas400accessTracefile Especifica el archivo en que se escribe la salida derastreo Por omisioacuten la salida de rastreo se escribe enSystemout

comibmas400accessServerTraceJDBC Especifica queacute categoriacuteas de rastreo deben iniciarse en eltrabajo servidor JDBC Para obtener informacioacuten sobrelos valores soportados consulte la propiedad de rastreodel servidor JDBC

Propiedades de llamada a mandatoprograma

Propiedad de llamada a mandatoprograma Descripcioacuten

comibmas400accessCommandCallthreadSafe Especifica si puede suponerse que las llamadas amandato son seguras en ejecucioacuten multihebra Si es truese supone que todas las llamadas a mandato son segurasen ejecucioacuten multihebra Si es false se supone que todaslas llamadas a mandato no son seguras en ejecucioacutenmultihebra Esta propiedad no se tiene en cuenta para unobjeto CommandCall determinado siCommandCallsetThreadSafe() oAS400setMustUseSockets(true) se ha llevado a cabosobre el objeto

comibmas400accessProgramCallthreadSafe Especifica si puede suponerse que las llamadas aprograma son seguras en ejecucioacuten multihebra Si estrue se supone que todas las llamadas a programa sonseguras en ejecucioacuten multihebra Si es false se suponeque todas las llamadas a programa no son seguras enejecucioacuten multihebra Esta propiedad no se tiene encuenta para un objeto ProgramCall determinado siProgramCallsetThreadSafe() oAS400setMustUseSockets(true) se ha llevado a cabosobre el objeto

Propiedades de FTP

Propiedad de FTP Descripcioacuten

comibmas400accessFTPreuseSocket Especifica si el socket se reutiliza para variastransferencias de archivo (a traveacutes de una sola instanciaFTP) cuando estaacute en la modalidad active Si el valor estrue se reutiliza el socket Si el valor es false se crea unsocket nuevo para cada transferencia de archivo Estapropiedad no se tiene en cuenta para un objeto FTP dadosi se ha realizado FTPsetReuseSocket() sobre el objeto

IBM Toolbox para Java 13

Propiedades de conexioacuten

Propiedad de conexioacuten Descripcioacuten

comibmas400accessAS400guiAvailable Indica si el entorno actual tiene capacidad GUI Si estrue puede solicitarse informacioacuten durante el inicio desesioacuten para mostrar las condiciones de error solicitarinformacioacuten adicional o solicitar un cambio decontrasentildea Si es false las condiciones de error o lainformacioacuten que falta generaraacuten excepciones Lasaplicaciones que se ejecutan como aplicaciones de IBM io que desean controlar la interfaz de usuario de inicio desesioacuten pueden ejecutarse con la modalidad de solicitudde informacioacuten establecida en false El valorpredeterminado es true

comibmas400accessAS400mustAddLanguageLibrary Indica si los objetos AS400 deben intentar antildeadir labiblioteca de idioma secundario a la lista de bibliotecascuando se ejecutan en el sistema Si establece labiblioteca de idioma se garantiza que los mensajes deerror del sistema que se devuelven esteacuten en el idiomanacional correspondiente al entorno local del cliente Sise establece en true los objetos AS400 intentaraacuten antildeadirla biblioteca de idioma secundario a la lista de bibliotecascuando se ejecutan en el sistema Si se establece enfalse los objetos AS400 no intentaraacuten antildeadir labiblioteca de idioma secundario a la lista de bibliotecasEl valor predeterminado es false

comibmas400accessAS400mustUseNetSockets Especifica si los objetos AS400 deben utilizar soacutelo socketsde dominio de Internet Cuando el programa Java seejecuta en el sistema algunas clases de IBM Toolbox paraJava crean conexiones de socket de dominio UNIX Si seestablece en true los objetos AS400 soacutelo utilizaraacutensockets de dominio de Internet Si se establece en falselos objetos AS400 pueden utilizar conexiones de socketde dominio UNIX ademaacutes de los sockets de dominio deInternet El valor predeterminado es false

comibmas400accessAS400mustUseSockets Especifica si los objetos AS400 deben utilizar socketsCuando el programa Java se ejecuta en el sistemaalgunas clases de IBM Toolbox para Java acceden a losdatos llamando a una API en lugar de realizar unallamada de socket al sistema Existen algunas pequentildeasdiferencias en el comportamiento de las clases cuando seutilizan llamadas de API en lugar de llamadas de socketSi el programa se ve afectado por estas diferenciaspuede obligar a las clases a que utilicen llamadas desocket en lugar de llamadas de API estableciendo lapropiedad en true El valor predeterminado es false

comibmas400accessAS400mustUseSuppliedProfile Especifica si los objetos AS400 deben utilizar soacutelo unperfil suministrado Cuando el programa Java se ejecutaen el sistema puede utilizarse la informacioacuten del perfilde usuario con el que se ha iniciado actualmente lasesioacuten (CURRENT) Si el valor es true debesuministrarse un perfil de usuario Si es false losobjetos AS400 recuperan la informacioacuten del perfil deusuario actual si no se suministra un perfil de usuario Elvalor predeterminado es false

14 IBM Toolbox para Java IBM Toolbox para Java

Propiedad de conexioacuten Descripcioacuten

comibmas400accessAS400signonHandler Especifica el manejador de inicio de sesioacutenpredeterminado Esta propiedad no se tiene en cuentapara un objeto AS400 dado si se ha realizadoAS400setSignonHandler() sobre el objeto o si se hallamado a AS400setDefaultSignonHandler()

comibmas400accessAS400threadUsed Especifica si los objetos AS400 usan hebras en unacomunicacioacuten con los servidores de host Si IBM Toolboxpara Java utiliza hebras puede ser ventajoso para elrendimiento la desactivacioacuten de las hebras puede sernecesaria si la aplicacioacuten debe ser compatible con laespecificacioacuten de Enterprise Java Beans El valorpredeterminado es true

Ejemplo archivo de propiedadesEste ejemplo muestra las propiedades del servidor proxy las categoriacuteas de rastreo las llamadas amandato las llamadas a programa las transferencias de archivo y las conexiones========================================================= IBM Toolbox para Java --------------------------------------------------------- Archivo de propiedades de ejemplo Denomine este archivo jt400properties y almaceacutenelo en un directorio comibmas400access al que apunte la la classpath =========================================================

--------------------------------------------------------- Propiedades del sistema de servidor proxy ---------------------------------------------------------

Esta propiedad del sistema especifica el nombre de host y el nuacutemero de puerto del servidor proxy con el formato nombrehostnuacutemeropuerto El nuacutemero de puerto es opcionalcomibmas400accessAS400proxyServer=hqoffice

Esta propiedad del sistema especifica con queacute frecuencia en segundos el servidor proxy buscaraacute si hay conexiones desocupadas El servidor proxy inicia una hebra para buscar los clientes que ya no tienen comunicacioacuten Utilice esta propiedad para establecer con queacute frecuencia busca la hebra si hay conexiones desocupadascomibmas400accessTunnelProxyServerclientCleanupInterval=7200

Esta propiedad del sistema especifica durante cuaacutento tiempo en segundos un cliente puede estar desocupado antes de eliminarse El servidor proxy inicia una hebra para buscar los clientes que ya no tienen comunicacioacuten Utilice esta propiedad para establecer cuaacutento tiempo puede estar desocupado un cliente antes de eliminarsecomibmas400accessTunnelProxyServerclientLifetime=2700

--------------------------------------------------------- Propiedades del sistema de rastreo ---------------------------------------------------------

Esta propiedad del sistema especifica queacute categoriacuteas de rastreo deben habilitarse Se trata de una lista delimitada por comas que contiene cualquier combinacioacuten de categoriacuteas de rastreo La lista completa de categoriacuteas de rastreo se define en la clase Tracecomibmas400accessTracecategory=errorwarninginformation

Esta propiedad del sistema especifica el archivo en que se escribe la

IBM Toolbox para Java 15

salida de rastreo Por omisioacuten la salida de rastreo se escribe en Systemoutcomibmas400accessTracefile=ctemptraceout

--------------------------------------------------------- Propiedades del sistema de llamada a mandato ---------------------------------------------------------

Esta propiedad del sistema especifica si las llamadas a mandato deben suponerse como seguras en ejecucioacuten multihebra Si es true se supone que todas las llamadas a mandato son seguras en ejecucioacuten multihebra Si es false se supone que todas las llamadas a mandato no son seguras en ejecucioacuten multihebra Esta propiedad se omite para un objeto CommandCall determinado si CommandCallsetThreadSafe(truefalse) o AS400setMustUseSockets(true) se ha llevado a cabo sobre el objetocomibmas400accessCommandCallthreadSafe=true

--------------------------------------------------------- Propiedades del sistema de llamada a programa ---------------------------------------------------------

Esta propiedad del sistema especifica si las llamadas a programa deben suponerse como seguras en ejecucioacuten multihebra Si es true se supone que todas las llamadas a mandato son seguras en ejecucioacuten multihebra Si es false se supone que todas las llamadas a mandato no son seguras en ejecucioacuten multihebra Esta propiedad se omite para un objeto ProgramCall determinado si ProgramCallsetThreadSafe(truefalse) o AS400setMustUseSockets(true) se ha llevado a cabo sobre el objetocomibmas400accessProgramCallthreadSafe=true

--------------------------------------------------------- Propiedades del sistema de FTP ---------------------------------------------------------

Esta propiedad del sistema especifica si se reutiliza el socket para varias transferencias de archivo (a traveacutes de una sola instancia FTP) cuando estaacute en la modalidad active Si el valor es true se reutiliza el socket Si es false se crea un socket nuevo para cada transferencia de archivo Esta propiedad no se tiene en cuenta para un objeto FTP dado si FTPsetReuseSocket(truefalse) se ha realizado sobre el objetocomibmas400accessFTPreuseSocket=true

--------------------------------------------------------- Propiedades del sistema de conexioacuten ---------------------------------------------------------

Esta propiedad del sistema especifica el manejador de inicio de sesioacuten predeterminado Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setSignonHandler() se ha ejecutado sobre el objeto o si se ha llamado a AS400setDefaultSignonHandler()comibmas400accessAS400signonHandler=mypackageMyHandler

Esta propiedad del sistema especifica si en Toolbox se debe suponer que el entorno actual tiene capacidad GUI Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setGuiAvailable() se ha ejecutado en el objetocomibmas400accessAS400guiAvailable=true

Esta propiedad del sistema especifica si debe antildeadirse la biblioteca de idioma secundario correspondiente a la lista de bibliotecas cuando se ejecuta en el sistema De forma predeterminada la biblioteca no se antildeade

16 IBM Toolbox para Java IBM Toolbox para Java

Esta propiedad no se tiene en cuenta para un objeto AS400 dado si se ha ejecutado AS400setMustAddLanguageLibrary() en el objetocomibmas400accessAS400mustAddLanguageLibrary=true

Esta propiedad del sistema especifica si deben utilizarse sockets cuando se comunica con el sistema Si se establece en true esta propiedad indica a Toolbox que no explote optimizaciones nativas cuando se ejecute directamente en el sistema De forma predeterminada cuando se ejecuta directamente en el sistema Toolbox explotaraacute optimizaciones nativas si estaacuten disponibles y sockets de elusioacuten Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setMustUseSockets() se ha ejecutado en el objetocomibmas400accessAS400mustUseSockets=true

Esta propiedad del sistema especifica si deben utilizarse sockets de dominio de Internet cuando se comunica con el sistema Si se establece en true esta propiedad indica a Toolbox que no explote los sockets Unix cuando se ejecute directamente en el sistema De forma predeterminada cuando se ejecuta directamente en el sistema Toolbox explotaraacute los sockets Unix si estaacuten disponibles en lugar de sockets de dominio de Internet Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setMustUseNetSockets() se ha ejecutado en el objetocomibmas400accessAS400mustUseNetSockets=true

Esta propiedad del sistema especifica si debe utilizarse el perfil proporcionado de forma expliacutecita cuando se comunica con el sistema Si se establece en true esta propiedad indica a Toolbox que no explote el perfil con el que se ha iniciado la sesioacuten actualmente de forma predeterminada cuando se ejecuta directamente en el sistema Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setMustUseSuppliedProfile() se ha ejecutado en el objetocomibmas400accessAS400mustUseSuppliedProfile=true

Esta propiedad del sistema especifica si se utilizan hebras cuando se comunica con los servidores de host De forma predeterminada el objeto AS400 crea hebras diferentes para escuchar en los sockets de comunicacioacuten a los servidores de host Si se establece en false esta propiedad indica a Toolbox que no cree hebras diferentes para las comunicaciones de los servidores de host Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setThreadUsed() se ha ejecutado en el objetocomibmas400accessAS400threadUsed=true End

Ejemplo archivo fuente de clase de propiedades del sistema========================================================= IBM Toolbox para Java--------------------------------------------------------- Archivo fuente de clase de propiedades de ejemplo Compile este archivo fuente y almacene el archivo de clase en la sentencia CLASSPATH=========================================================package comibmas400access

public class Propertiesextends javautilProperties

public Properties ()

--------------------------------------------------------- Propiedades del sistema de servidor proxy

IBM Toolbox para Java 17

---------------------------------------------------------

Esta propiedad del sistema especifica el nombre de host y el nuacutemero de puerto del servidor proxy con el formato nombrehostnuacutemeropuerto El nuacutemero de puerto es opcionalput (comibmas400accessAS400proxyServer hqoffice)

Esta propiedad del sistema especifica con queacute frecuencia en segundos el servidor proxy buscaraacute si hay conexiones desocupadas El servidor proxy inicia una hebra para buscar los clientes que ya no tienen comunicacioacuten Utilice esta propiedad para establecer con queacute frecuencia busca la hebra si hay conexiones desocupadasput(comibmas400accessTunnelProxyServerclientCleanupInterval 7200)

Esta propiedad del sistema especifica durante cuaacutento tiempo en segundos un cliente puede estar desocupado antes de eliminarse El servidor proxy inicia una hebra para buscar los clientes que ya no tienen comunicacioacuten Utilice esta propiedad para establecer cuaacutento tiempo puede estar desocupado un cliente antes de eliminarseput(comibmas400accessTunnelProxyServerclientLifetime 2700)

--------------------------------------------------------- Propiedades del sistema de rastreo ---------------------------------------------------------

Esta propiedad del sistema especifica queacute categoriacuteas de rastreo deben habilitarse Se trata de una lista delimitada por comas que contiene cualquier combinacioacuten de categoriacuteas de rastreo La lista completa de categoriacuteas de rastreo se define en la clase Traceput (comibmas400accessTracecategory errorwarninginformation)

Esta propiedad del sistema especifica el archivo en que se escribe la salida de rastreo Por omisioacuten la salida de rastreo se escribe en Systemoutput (comibmas400accessTracefile ctemptraceout)

--------------------------------------------------------- Propiedades del sistema de llamada a mandato ---------------------------------------------------------

Esta propiedad del sistema especifica si las llamadas a mandato deben suponerse como seguras en ejecucioacuten multihebra Si es true se supone que todas las llamadas a mandato son seguras en ejecucioacuten multihebra Si es false se supone que todas las llamadas a programa no son seguras en ejecucioacuten multihebra Esta propiedad se omite para un objeto CommandCall determinado si CommandCallsetThreadSafe(truefalse) o AS400setMustUseSockets(true) se ha llevado a cabo sobre el objetoput (comibmas400accessCommandCallthreadSafe true)

--------------------------------------------------------- Propiedades del sistema de llamada a programa ---------------------------------------------------------

Esta propiedad del sistema especifica si las llamadas a programa deben suponerse como seguras en ejecucioacuten multihebra Si es true se supone que todas las llamadas a mandato son seguras en ejecucioacuten multihebra Si es false se supone que todas las llamadas a programa no son seguras en ejecucioacuten multihebra Esta propiedad se omite para un objeto ProgramCall determinado si ProgramCallsetThreadSafe(truefalse) o AS400setMustUseSockets(true) se ha llevado a cabo sobre el objetoput (comibmas400accessProgramCallthreadSafe true)

--------------------------------------------------------- Propiedades del sistema de FTP

18 IBM Toolbox para Java IBM Toolbox para Java

---------------------------------------------------------

Esta propiedad del sistema especifica si se reutiliza el socket para varias transferencias de archivo (a traveacutes de una sola instancia FTP) en modalidad active Si el valor es true se reutiliza el socket Si el valor es false se crea un socket nuevo para cada transferencia de archivos Esta propiedad no se tiene en cuenta para un objeto FTP dado si FTPsetReuseSocket(truefalse) se ha realizado sobre el objetoput (comibmas400accessFTPreuseSocket true)

--------------------------------------------------------- Propiedades del sistema de conexioacuten ---------------------------------------------------------

Esta propiedad del sistema especifica el manejador de inicio de sesioacuten predeterminado Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setSignonHandler() se ha ejecutado en el objeto o si se ha llamado a AS400setDefaultSignonHandler()put (comibmas400accessAS400signonHandler mypackageMyHandler)

Esta propiedad del sistema especifica si en Toolbox se debe suponer que el entorno actual tiene capacidad GUI Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setGuiAvailable() se ha ejecutado en el objetoput (comibmas400accessAS400guiAvailable true)

Esta propiedad del sistema especifica si debe antildeadirse la biblioteca de idioma secundario correspondiente a la lista de bibliotecas cuando se ejecuta en el sistema De forma predeterminada la biblioteca no se antildeade Esta propiedad no se tiene en cuenta para un objeto AS400 dado si se ha ejecutado AS400setMustAddLanguageLibrary() en el objetoput (comibmas400accessAS400mustAddLanguageLibrary true)

Esta propiedad del sistema especifica si deben utilizarse sockets cuando se comunica con el sistema De forma predeterminada cuando se ejecuta directamente en el sistema Toolbox explotaraacute optimizaciones nativas si estaacuten disponibles y sockets de elusioacuten Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setMustUseSockets() se ha ejecutado en el objetoput (comibmas400accessAS400mustUseSockets true)

Esta propiedad del sistema especifica si deben utilizarse sockets de dominio de Internet cuando se comunica con el sistema Si se establece en true esta propiedad indica a Toolbox que no explote los sockets Unix cuando se ejecute directamente en el sistema De forma predeterminada cuando se ejecuta directamente en el sistema Toolbox explotaraacute los sockets Unix si estaacuten disponibles en lugar de sockets de dominio de Internet Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setMustUseNetSockets() se ha ejecutado en el objetoput (comibmas400accessAS400mustUseNetSockets true)

Esta propiedad del sistema especifica si debe utilizarse el perfil proporcionado de forma expliacutecita cuando se comunica con el sistema Si se establece en true esta propiedad indica a Toolbox que no explote el perfil con el que se ha iniciado la sesioacuten actualmente de forma predeterminada cuando se ejecuta directamente en el sistema Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setMustUseSuppliedProfile() se ha ejecutado en el objetoput (comibmas400accessAS400mustUseSuppliedProfile true)

IBM Toolbox para Java 19

Esta propiedad del sistema especifica si se utilizan hebras cuando se comunica con los servidores de host De forma predeterminada el objeto AS400 crea hebras diferentes para escuchar en los sockets de comunicacioacuten a los servidores de host Si se establece en false esta propiedad indica a Toolbox que no cree hebras diferentes para las comunicaciones de los servidores de host Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setThreadUsed() se ha ejecutado en el objetoput (comibmas400accessAS400threadUsed true)

JTOpenLiteEl paquete JTOpenLite (comibmjtopenlite) permite escribir programas Java que permiten a diversosdispositivos moacuteviles acceder directamente a datos y recursos de IBM i Aunque JTOpenLite se consideraparte de IBM Toolbox para Java no se incluye en el producto bajo licencia El archivo jar de JTOpenLite(jtopenlitejar) se incluye en la versioacuten de fuente abierto de IBM Toolbox para Java denominada JTOpenDebe bajar y configurar por separado JTOpenLite que estaacute contenido en JTOpen

Iniciacioacuten a JTOpenLite

Puede bajar JTOpenLite del sitio web de IBM Toolbox for JavaJTOpen El sitio web tambieacuten ofreceinformacioacuten adicional sobre la configuracioacuten de JTOpenLiteInformacioacuten relacionada

Sitio web de IBM Toolbox for JavaJTOpen

Clases de IBM Toolbox para JavaLas clases de IBM Toolbox para Java estaacuten categorizadas por paquetes como todas las clases Java Cadapaquete proporciona un tipo determinado de funcionalidad

Para mayor comodidad en esta documentacioacuten habitualmente se hace referencia a cada paquete con unnombre corto Por ejemplo el paquete comibmas400access se denomina paquete access

Clases de accesoLas clases de acceso de IBM Toolbox para Java representan datos y recursos de IBM iInformacioacuten relacionadaJavadoc de clases EventLogPermite anotar excepciones y mensajes con independencia del dispositivo utilizado para visualizarlosResumen de paquetes de acceso

Puntos de acceso de servidorLas clases de acceso de IBM Toolbox para Java suministran funciones similares al uso de las API de IBM iAccess para Windows Sin embargo la instalacioacuten de IBM i Access para Windows no es un requisito parala utilizacioacuten de estas clases

Las clases de acceso utilizan los sistemas existentes como puntos de acceso Cada servidor se ejecuta enun trabajo aparte del sistema y enviacutea y recibe corrientes de datos a traveacutes de una conexioacuten por socket

Figura 1 Puntos de acceso de servidor

20 IBM Toolbox para Java IBM Toolbox para Java

|

|||||

|

||

|

|

Clase AS400La clase AS400 de IBM Toolbox para Java gestiona un conjunto de conexiones por socket a los trabajos deservidor en el servidor sobre comportamiento de inicio de sesioacuten para el servidor incluido lapresentacioacuten al usuario de la solicitud de informacioacuten de inicio de sesioacuten la colocacioacuten de contrasentildeas enmemoria cacheacute y la gestioacuten de usuario predeterminado

El programa Java debe proporcionar un objeto AS400 cuando el programa Java utiliza una instancia deuna clase que accede al sistema IBM i Por ejemplo el objeto CommandCall requiere un objeto AS400para poder enviar mandatos al sistema

El objeto AS400 maneja de manera diferente las conexiones los ID de usuario y las contrasentildeas cuando seejecuta en la maacutequina virtual Java de IBM i Para obtener maacutes informacioacuten consulte ldquoMaacutequina virtualJava de IBM irdquo en la paacutegina 369

Los objetos AS400 ahora soportan la autenticacioacuten de Kerberos utilizando la interfaz de programacioacuten deaplicaciones Java Generic Security Service (API JGSS) para autenticar en el servidor en lugar de utilizarun ID de usuario y una contrasentildea

IBM Toolbox para Java 21

Nota para utilizar los tickets de kerberos debe configurarse la interfaz de programacioacuten de aplicacionesJava Generic Security Services (JGSS) Para obtener maacutes informacioacuten sobre JGSS consulte la

Documentacioacuten de seguridad de Java

Consulte la seccioacuten Gestionar conexiones para obtener informacioacuten acerca de coacutemo se gestionan lasconexiones con el servidor mediante el objeto AS400 En el Javadoc AS400ConnectionPool encontraraacuteinformacioacuten acerca de coacutemo reducir el tiempo de conexioacuten inicial solicitando conexiones desde unaagrupacioacuten de conexiones

La clase AS400 proporciona las siguientes funciones de inicio de sesioacutenv Autenticar el perfil de usuariov Obtener una credencial de siacutembolo de perfil y autenticar el perfil de usuario asociadov Establecer una credencial de siacutembolo de perfilv Gestionar identificadores de usuario predeterminadosv Colocar contrasentildeas en la memoria cacheacutev Solicitar ID de usuariov Cambiar una contrasentildeav Obtener la versioacuten y el release del sistema operativo

Para obtener informacioacuten acerca de coacutemo utilizar un objeto AS400 al enviar o recibir datos cifradosconsulte la clase SecureAS400Informacioacuten relacionadaJavadoc AS400ConnectionPoolJavadoc AS400

Gestioacuten de identificadores de usuario predeterminado

Si desea minimizar el nuacutemero de veces que un usuario debe iniciar la sesioacuten utilice un ID de usuariopredeterminado El programa Java utiliza el ID de usuario predeterminado si no se suministra ninguacuten IDde usuario El ID de usuario predeterminado puede establecerse ya sea por medio del programa Java omediante la interfaz de usuario Si el ID de usuario predeterminado no se ha establecido el diaacutelogo Iniciode sesioacuten permite al usuario establecer el ID de usuario predeterminado

Una vez establecido el ID de usuario predeterminado para un servidor determinado el diaacutelogo Inicio desesioacuten no permite realizar cambios en el mismo Cuando se construye un objeto AS400 el programa Javapuede suministrar el ID de usuario y la contrasentildea Cuando un programa suministra el ID de usuario alobjeto AS400 el ID de usuario predeterminado no se ve afectado El programa si va a establecer ocambiar el ID de usuario predeterminado debe establecer expliacutecitamente setUseDefaultUser() EnResumen de solicitudes ID de usuario predeterminado y colocacioacuten de contrasentildeas en memoria cacheacuteencontraraacute maacutes informacioacuten

El objeto AS400 tiene meacutetodos para obtener establecer y eliminar el ID de usuario predeterminado Elprograma Java tambieacuten puede inhabilitar el proceso de ID de usuario predeterminado mediante elmeacutetodo setUseDefaultUser() Si el proceso de ID de usuario predeterminado estaacute inhabilitado y laaplicacioacuten Java no suministra ninguacuten ID de usuario el objeto AS400 solicita el ID de usuario cada vezque se establece una conexioacuten con el servidor

Todos los objetos AS400 que representan el mismo servidor IBM i dentro de una maacutequina virtual Javautilizan el mismo ID de usuario predeterminado

En el ejemplo que sigue se crean dos conexiones con el servidor utilizando dos objetos AS400 Si elusuario al iniciar la sesioacuten marcoacute el recuadro ID de usuario predeterminado cuando se establezca lasegunda conexioacuten no se presentaraacute al usuario ninguna solicitud para que escriba un ID de usuario

22 IBM Toolbox para Java IBM Toolbox para Java

Cree dos objetos AS400 para elmismo sistema

AS400 sys1 = new AS400(mySystemmyCompanycom)AS400 sys2 = new AS400(mySystemmyCompanycom)

Inicie una conexioacuten con el servicio de llamada a mandato Se solicita al usuario el ID de usuario y la contrasentildeasys1connectService(AS400COMMAND)

Inicie otra conexioacuten con el servicio de llamada a mandato No se solicita informacioacuten al usuariosys2connectService(AS400COMMAND)

La informacioacuten de ID de usuario predeterminado se eliminaraacute cuando el colector de basura haya recogidoel uacuteltimo objeto AS400 correspondiente al servidor

Utilizacioacuten de una memoria cacheacute de contrasentildeas

La memoria cacheacute de contrasentildeas permite a IBM Toolbox para Java guardar informacioacuten de contrasentildea yde ID de usuario para que no se solicite al usuario dicha informacioacuten cada vez que se establezca unaconexioacuten

Los meacutetodos proporcionados por el objeto AS400 permiten realizar estas tareasv Borrar la memoria cacheacute de contrasentildeas e inhabilitarlav Minimizar el nuacutemero de veces que el usuario debe escribir informacioacuten de inicio de sesioacuten

La memoria cacheacute de contrasentildeas es aplicable a todos los objetos AS400 que representan un sistema IBM identro de una maacutequina virtual Java Java no permite a las maacutequinas virtuales compartir informacioacutenentre siacute por lo que una contrasentildea colocada en la memoria cacheacute en una maacutequina virtual Java no esvisible para otra maacutequina virtual La memoria cacheacute quedaraacute descartada en cuanto el colector de basurahaya recogido el uacuteltimo objeto AS400 El diaacutelogo Inicio de sesioacuten dispone de un recuadro de seleccioacutenque ofrece al usuario la opcioacuten de guardar la contrasentildea en la memoria cacheacute Cuando se construye unobjeto AS400 el programa Java tiene la opcioacuten de suministrar el ID de usuario y la contrasentildea Lascontrasentildeas suministradas en los constructores no se almacenan en la memoria cacheacute

El objeto AS400 proporciona meacutetodos para borrar la memoria cacheacute de contrasentildeas e inhabilitar lamemoria cacheacute de contrasentildeas En la seccioacuten Resumen de solicitudes ID de usuario predeterminado ycolocacioacuten de contrasentildeas en la memoria cacheacute encontraraacute maacutes informacioacuten

Solicitud de identificadores de usuario y contrasentildeas

Si se utiliza la clase AS400 la solicitud de ID de usuario y contrasentildea puede presentarse cuando seestablece la conexioacuten con el servidor La solicitud puede quedar desactivada por el programa Java

Los programas Java pueden desactivar la solicitud de ID de usuario y contrasentildea asiacute como las ventanasde mensajes visualizadas por el objeto AS400 Ello puede ser necesario por ejemplo cuando unaaplicacioacuten se estaacute ejecutando en una pasarela en nombre de muchos clientes Si las solicitudes y losmensajes se visualizan en la maacutequina pasarela el usuario no puede interactuar con las solicitudes Lasaplicaciones de este tipo pueden desactivar toda presentacioacuten de solicitudes utilizando el meacutetodosetGuiAvailable() en el objeto AS400

En Resumen de solicitudes ID de usuario predeterminado y colocacioacuten de contrasentildeas en memoria cacheacuteencontraraacute maacutes informacioacuten

IBM Toolbox para Java 23

Resumen de solicitudes ID de usuario predeterminado y colocacioacuten de contrasentildeas en memoriacacheacute

Los programas Java pueden controlar en queacute momento se presenta la solicitud de ID de usuario ycuaacutendo entra en juego la colocacioacuten de contrasentildeas en la memoria cacheacute La informacioacuten del diaacutelogoInicio de sesioacuten permite establecer el ID de usuario predeterminado y poner la contrasentildea en la memoriacacheacute La tabla que figura a continuacioacuten es un resumen de cuaacutendo se presentan las solicitudes queacuteinformacioacuten se recupera y cuaacutel es la informacioacuten que se establece

En esta tabla se presupone que el programa Java permite el proceso de ID de usuario predeterminado yla colocacioacuten de contrasentildeas en la memoria cacheacute y que se ha marcado el recuadro ID de usuariopredeterminado y el recuadro Guardar contrasentildea en el diaacutelogo Inicio de sesioacuten

Utilice esta tabla para las conexiones de cliente no para la ejecucioacuten de Java en el servidor

Sistemaproporcionado enel constructor

ID de usuarioproporcionado enel constructor

Contrasentildeaproporcionada enel constructor

Se estableceusuariopredeterminado

Contrasentildea enmemoria cacheacutepara ID deusuario

Resultado deutilizar valoresmarcados

Se solicita alusuario el nombredel sistema el IDde usuario y lacontrasentildea El IDde usuariopredeterminadose establece y lacontrasentildea sepone en memoriacacheacute

Siacute Se solicita alusuario el ID deusuario y lacontrasentildea Elnombre delsistema sevisualiza pero nopuede cambiarseEl ID de usuariopredeterminadose establece y lacontrasentildea sepone en memoriacacheacute

24 IBM Toolbox para Java IBM Toolbox para Java

Sistemaproporcionado enel constructor

ID de usuarioproporcionado enel constructor

Contrasentildeaproporcionada enel constructor

Se estableceusuariopredeterminado

Contrasentildea enmemoria cacheacutepara ID deusuario

Resultado deutilizar valoresmarcados

Siacute Siacute Se solicita alusuario lacontrasentildea El IDde usuario sevisualiza y puedecambiarse Elnombre delsistema sevisualiza pero nopuede cambiarseEl ID de usuariopredeterminadono cambia Lacontrasentildea sepone en memoriacacheacute

Siacute Siacute Siacute No se presentaninguna solicitudEl ID de usuariopredeterminadono cambia Lacontrasentildea no sepone en memoriacacheacute

Siacute Se solicita alusuario el nombredel sistema y lacontrasentildea El IDde usuario sevisualiza y puedecambiarseCambiar el ID deusuario nomodifica el ID deusuariopredeterminadoLa contrasentildea sepone en memoriacacheacute

Siacute Siacute Se solicita lacontrasentildea del IDde usuariopredeterminadoEl ID de usuariose visualiza ypuede cambiarseEl nombre delsistema sevisualiza pero nopuede cambiarseLa contrasentildea sepone en memoriacacheacute

IBM Toolbox para Java 25

Sistemaproporcionado enel constructor

ID de usuarioproporcionado enel constructor

Contrasentildeaproporcionada enel constructor

Se estableceusuariopredeterminado

Contrasentildea enmemoria cacheacutepara ID deusuario

Resultado deutilizar valoresmarcados

Siacute Siacute Siacute No se presentaninguna solicitudLa conexioacuten serealiza utilizandoel ID de usuariopredeterminado yla contrasentildea dela memoria cacheacute

Siacute Siacute Siacute No se presentaninguna solicitudLa conexioacuten serealiza como elusuarioespecificadoutilizando lacontrasentildea de lamemoria cacheacute

Siacute Siacute Siacute Siacute No se presentaninguna solicitudLa conexioacuten serealiza como elusuarioespecificadoutilizando lacontrasentildea de lamemoria cacheacute

Siacute Siacute Siacute Siacute No se presentaninguna solicitudLa conexioacuten serealiza como elusuarioespecificado

Clase SecureAS400La clase SecureAS400 permite utilizar un objeto AS400 al enviar o recibir datos cifrados Cuando unobjeto AS400 se comunica con el servidor los datos de usuario (excepto la contrasentildea de usuario) seenviacutean sin cifrar al servidor Por consiguiente los objetos de IBM Toolbox para Java asociados a un objetoAS400 intercambian datos con el servidor por medio de una conexioacuten normal

Si desea utilizar IBM Toolbox para Java para intercambiar datos confidenciales con el servidor puedecifrar los datos mediante SSL (capa de sockets segura) Utilice el objeto SecureAS400 para designar losdatos que desea cifrar Los objetos de IBM Toolbox para Java asociados a un objeto SecureAS400intercambian datos con el servidor por medio de una conexioacuten segura

Encontraraacute maacutes informacioacuten en el tema acerca de Capa de Sockets Segura y Extensioacuten de sockets segurosJava

La clase SecureAS400 es una subclase de la AS400

Puede configurar una conexioacuten de servidor segura creando una instancia de un objeto SecureAS400 delos modos siguientesv SecureAS400(String systemName String userID) le solicita informacioacuten de inicio de sesioacuten

26 IBM Toolbox para Java IBM Toolbox para Java

v SecureAS400(String systemName String userID String password) no le solicita informacioacuten de iniciode sesioacuten

A continuacioacuten figura un ejemplo de coacutemo se utiliza CommandCall para enviar mandatos al servidorutilizando una conexioacuten segura

Cree un objeto AS400 seguro Esta sentencia es la uacutenica que cambia en relacioacuten con el caso no SSLSecureAS400 sys = new SecureAS400(mySystemmyCompanycom)

Cree un objeto de llamada a mandatoCommandCall cmd = new CommandCall(sys myCommand)

Ejecute los mandatos Se establece una conexioacuten segura al ejecutarse el mandato Toda la informacioacuten pasada entre el cliente y el servidor estaacute cifradacmdrun()

Informacioacuten relacionadaJavadoc SecureAS400Javadoc AS400

Clase AS400JPingLa clase AS400JPing de IBM Toolbox para Java permite al programa Java consultar los servidores de hostpara ver queacute servicios estaacuten en ejecucioacuten y queacute puertos estaacuten en servicio

Para consultar los servidores desde una liacutenea de mandatos utilice la clase JPing

La clase AS400JPing proporciona varios meacutetodosv Realizar un ping del servidorv Realizar un ping de un servicio especiacutefico en el servidorv Establecer un objeto PrintWriter en el que desea anotar la informacioacuten de la operacioacuten pingv Establecer el tiempo de espera de la operacioacuten ping

Ejemplo coacutemo se utiliza AS400JPing

El ejemplo siguiente muestra coacutemo utilizar AS400JPing dentro de un programa Java para realizar un pingdel servicio de mandatos remotos

AS400JPing pingObj = new AS400JPing(myAS400 AS400COMMAND false)if (pingObjping())

Systemoutprintln(SATISFACTORIO)else

Systemoutprintln(ANOacuteMALO)

Informacioacuten relacionadaClase AS400JPing

Clase BidiTransformLa clase BidiTransform de IBM Toolbox para Java proporciona transformaciones de disentildeo que hacenposible la conversioacuten de texto bidireccional en formato IBM i (tras convertirlo primero a Unicode) a textobidireccional en formato Java o de formato Java a formato IBM i

Clase AS400BidiTransform

La clase AS400BidiTransform permite llevar a cabo estas accionesv Obtener y establecer el CCSID del sistemav Obtener y establecer el tipo de serie de los datos IBM iv Obtener y establecer el tipo de serie de los datos de Java

IBM Toolbox para Java 27

v Convertir datos de un disentildeo Java a IBM iv Convertir datos de un disentildeo IBM i a Java

Ejemplo coacutemo se utiliza AS400BidiTransform

El ejemplo que sigue muestra coacutemo se puede utilizar la clase AS400BidiTransform para transformar textobidireccional

Datos Javaa disentildeo del sistema

AS400BidiTransform abtabt = new AS400BidiTransform(424)String dst = abttoAS400Layout(alguna serie bidireccional)

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Clase BidiConversionPropertiesLa clase BidiConversionProperties proporciona un conjunto de propiedades que pueden utilizarse paracontrolar la conversioacuten de datos del juego de caracteresInformacioacuten relacionadaDocumentacioacuten java de BidiConversionProperties

Clase CallStackEntryLa clase CallStackEntry representa una entrada en la pila de llamadas de una hebra especiacutefica de untrabajo servidor

Los objetos de este tipo se generan llamando a JobgetCallStack()Informacioacuten relacionadaJavadoc de CallStackEntry

Clases ClusteredHashTableLas clases ClusteredHashTable de IBM Toolbox para Java permiten a los programas Java utilizar tablashash agrupadas en cluacutester de gran disponibilidad para compartir y duplicar datos en almacenamiento nopersistente entre los nodos de un cluacutester

Para utilizar las clases ClusteredHashTable compruebe que puede emplear almacenamiento nopersistente para los datos Los datos duplicados no estaacuten cifrados

Nota la siguiente informacioacuten da por supuesto que se han entendido los conceptos y teacuterminoshabituales de la tecnologiacutea de cluacutester de IBM i Consulte la seccioacuten Tecnologiacutea de cluacutester de IBM i paraobtener detalles

Para utilizar la clase ClusteredHashTable es necesario haber definido y activado un cluacutester en lossistemas Tambieacuten debe iniciar un servidor de tablas hash agrupadas en cluacutester Para obtener maacutesinformacioacuten consulte Configurar cluacutesteres e Interfaces API de tablas hash agrupadas en cluacutester

Los paraacutemetros obligatorios son el nombre del servidor de tablas hash agrupadas en cluacutester y el objetoAS400 que representa el sistema que contiene el servidor de tablas hash agrupadas en cluacutester

Para almacenar datos en un servidor de tablas hash agrupadas en cluacutester necesita un handle de conexioacuteny una clavev Al abrir una conexioacuten el servidor de tablas hash agrupadas en cluacutester asigna el handle de conexioacuten

que debe especificar en las peticiones posteriores efectuadas al servidor de tablas hash agrupadas encluacutester Este handle de conexioacuten solo es adecuado para el objeto AS400 del que se ha creado unainstancia por lo que debe abrir otra conexioacuten si utiliza un objeto AS400 distinto

28 IBM Toolbox para Java IBM Toolbox para Java

v Debe especificar la clave para acceder a los datos de la tabla hash agrupada en cluacutester y cambiar losdatos Las claves duplicadas no estaacuten soportadas

La clase ClusteredHashTable proporciona meacutetodos que permiten llevar a cabo las acciones siguientesv Abrir una conexioacuten con el trabajo servidor de tablas hash agrupadas en cluacutesterv Generar una clave exclusiva para almacenar datos en la tabla hash agrupada en cluacutesterv Cerrar la conexioacuten activa con el trabajo servidor de tablas hash agrupadas en cluacutester

Algunos meacutetodos de la clase ClusteredHashTable utilizan la clase ClusteredHashTableEntry para llevar acabo las acciones siguientesv Obtener una entrada de la tabla hash agrupada en cluacutesterv Almacenar una entrada en la tabla hash agrupada en cluacutesterv Obtener una lista de entradas de la tabla hash agrupada en cluacutester para todos los perfiles de usuario

Ejemplo coacutemo se utiliza ClusteredHashTable

El ejemplo siguiente se ejecuta en el servidor de tablas hash agrupadas en cluacutester denominadoCHTSVR01 Supone que ya hay un cluacutester y un servidor de tablas hash agrupadas en cluacutester activosAbre una conexioacuten genera una clave coloca una entrada utilizando la clave nueva en la tabla hashagrupada en cluacutester obtiene una entrada de la tabla hash agrupada en cluacutester y cierra la conexioacuten

ClusteredHashTableEntry myEntry = null

String myData = new String(Estos son mis datos)Systemoutprintln(Datos que deben almacenarse + myData)

AS400 system = new AS400()

ClusteredHashTable cht = new ClusteredHashTable(systemCHTSVR01)

Abra una conexioacutenchtopen()

Obtenga una clave para la tabla hashbyte[] key = nullkey = chtgenerateKey()

Prepare algunos datos que desee almacenar en la tabla hash ENTRY_AUTHORITY_ANY_USER significa que cualquier usuario puede acceder a la entrada de la tabla hash agrupada en cluacutester DUPLICATE_KEY_FAIL significa que si la clave especificada ya existe la peticioacuten ClusteredHashTableput() no se ejecutaraacute correctamenteint timeToLive = 500myEntry = new ClusteredHashTableEntry(keymyDatagetBytes()timeToLive

ClusteredHashTableEntryENTRY_AUTHORITY_ANY_USERClusteredHashTableEntryDUPLICATE_KEY_FAIL)

Almacene (o coloque) la entrada en la tabla hashchtput(myEntry)

Obtenga una entrada de la tabla hashClusteredHashTableEntry output = chtget(key)

Cierre la conexioacutenchtclose()

La utilizacioacuten de la clase ClusteredHashTable hace que el objeto AS400 se conecte al servidor Paraobtener maacutes informacioacuten consulte Gestioacuten de conexiones

IBM Toolbox para Java 29

Clase CommandCallLa clase CommandCall permite a un programa Java llamar a un mandato IBM i no interactivo

Los resultados del mandato estaacuten disponibles en una lista de objetos AS400Message

La entrada de CommandCall esv La serie del mandato que ha de ejecutarsev El objeto AS400 que representa el sistema que va a ejecutar el mandato

La serie del mandato se puede establecer en el constructor mediante el meacutetodo setCommand() deCommandCall o se puede establecer en el meacutetodo run() Una vez ejecutado el mandato el programa Javapuede emplear el meacutetodo getMessageList() para recuperar los mensajes de IBM i que se hayan producidocomo consecuencia del mandato

La utilizacioacuten de la clase CommandCall hace que el objeto AS400 se conecte al sistema En Gestioacuten deconexiones encontraraacute informacioacuten acerca de coacutemo se gestionan las conexiones

Cuando el programa Java y el mandato de IBM i estaacuten en el mismo servidor el comportamientopredeterminado de IBM Toolbox para Java es consultar la seguridad de la hebra para el mandato en elsistema Si es segura el mandato se ejecuta en la hebra Puede suprimir la consulta en tiempo deejecucioacuten especificando expliacutecitamente la seguridad de la hebra para el mandato con el meacutetodosetThreadSafe()

Ejemplos

En los ejemplos siguientes se muestran varios modos de utilizar la clase CommandCall para ejecutardistintos tipos de mandatos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Ejemplo ejecutar un mandato

El ejemplo siguiente muestra coacutemo se utiliza la clase CommandCall para ejecutar un mandato en elsistema

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de llamada a mandato Este programa establece el mandato para que se ejecute maacutes adelante Puede establecerse aquiacute en el constructorCommandCall cmd = new CommandCall(sys)

Ejecute el mandato CRTLIBcmdrun(CRTLIB MYLIB)

Obtenga la lista de mensajes que contiene el resultado del mandatoAS400Message[] messageList = cmdgetMessageList()

Procese la lista de mensajes

Desconecte puesto que ya ha terminado de enviar mandatos al servidorsysdisconnectService(AS400COMMAND)

Ejemplo ejecutar un mandato especificado por el usuario

30 IBM Toolbox para Java IBM Toolbox para Java

En ldquoEjemplo coacutemo se utiliza CommandCallrdquo en la paacutegina 387 se muestra coacutemo ejecutar un mandatoespecificado por el usuarioInformacioacuten relacionadaJavadoc CommandCallJavadoc AS400MessageJavadoc AS400

Agrupacioacuten de conexionesUtilice las agrupaciones de conexiones para compartir conexiones y gestionar conjuntos (agrupaciones) deconexiones con un sistema IBM i Por ejemplo una aplicacioacuten puede recuperar una conexioacuten de unaagrupacioacuten utilizarla y a continuacioacuten devolverla a la agrupacioacuten para volver a utilizarla

La clase AS400ConnectionPool gestiona una agrupacioacuten de objetos AS400 La claseAS400JDBCConnectionPool representa una agrupacioacuten de AS400JDBCConnections disponibles para suuso por parte de un programa Java como parte del soporte de IBM Toolbox para Java para la API JDBC20 Optional Package La interfaz JDBC ConnectionPool tambieacuten estaacute soportada en la API JDBC 30 queestaacute empaquetada con Java 2 Platform Standard Edition versioacuten 14

Una agrupacioacuten de conexiones de cualquiera de los dos tipos posibles hace un seguimiento del nuacutemerode conexiones que crea Con los meacutetodos heredados de ConnectionPool puede establecer diversaspropiedades de agrupacioacuten de conexiones entre las que se incluyen las siguientesv el nuacutemero maacuteximo de conexiones que una agrupacioacuten puede proporcionarv el tiempo maacuteximo de vida de una conexioacutenv el tiempo maacuteximo de inactividad de una conexioacuten

En teacuterminos de rendimiento la conexioacuten con el servidor es una operacioacuten cara El uso de agrupacionesde conexiones puede mejorar el rendimiento al evitar tiempos de conexioacuten repetidos Por ejemplo creeconexiones cuando cree la agrupacioacuten de conexiones rellenando la agrupacioacuten con conexiones activas(preconectadas) utilizando la clase AS400ConnectionPool En lugar de crear nuevas conexiones puedeutilizar una agrupacioacuten de conexiones para recuperar utilizar devolver y volver a utilizar faacutecilmente losobjetos de conexioacuten

Puede recuperar una conexioacuten mediante AS400ConnectionPool especificando el nombre del sistema el IDde usuario la contrasentildea y (si lo desea) el servicio Para especificar el servicio al que desea conectarutilice las constantes de la clase AS400 (FILE PRINT COMMAND etc)

Tras recuperar y utilizar la conexioacuten las aplicaciones devuelven las conexiones a la agrupacioacuten Es cadaaplicacioacuten la responsable de devolver las conexiones a la agrupacioacuten para que vuelvan a emplearse Si lasconexiones no se devuelven a la agrupacioacuten el tamantildeo de la agrupacioacuten de conexiones sigue creciendo ylas conexiones no se reutilizan

Consulte la seccioacuten Gestioacuten de conexiones para obtener maacutes informacioacuten acerca de coacutemo gestionarcuaacutendo se abre una conexioacuten con el sistema al utilizar las clases AS400ConnectionPool

Ejemplo coacutemo se utiliza AS400ConnectionPool

En ldquoEjemplo coacutemo se utiliza AS400ConnectionPoolrdquo en la paacutegina 389 se muestra coacutemo reutilizar losobjetos AS400Informacioacuten relacionadaJavadoc AS400ConnectionPoolJavadoc AS400

IBM Toolbox para Java 31

Aacuterea de datosLa clase DataArea de IBM Toolbox para Java es una clase base abstracta que representa un objeto aacuterea dedatos de IBM i

Esta clase base tiene cuatro subclases que dan soporte a estos elementos datos de tipo caraacutecter datosdecimales datos loacutegicos y aacutereas de datos locales que contienen datos de tipo caraacutecter

Mediante la clase DataArea se pueden realizar estas tareasv Obtener el tamantildeo del aacuterea de datosv Obtener el nombre del aacuterea de datosv Devolver el objeto de sistema AS400 correspondiente al aacuterea de datosv Renovar los atributos del aacuterea de datosv Establecer el sistema en el que existe el aacuterea de datos

La utilizacioacuten de la clase DataArea hace que el objeto AS400 se conecte al servidor En Gestioacuten deconexiones encontraraacute informacioacuten acerca de coacutemo se gestionan las conexiones

CharacterDataArea

La clase CharacterDataArea representa un aacuterea de datos existente en el servidor que contiene datos detipo caraacutecter Las aacutereas de datos de tipo caraacutecter no disponen de un servicio que permita identificar losdatos con el debido CCSID por lo tanto el objeto aacuterea de datos presupone que el CCSID de los datos esel del usuario En la escritura el objeto aacuterea de datos se convierte de un tipo serie (Unicode) al CCSIDdel usuario antes de que los datos se escriban en el servidor En la lectura el objeto aacuterea de datospresupone que el CCSID de los datos es el del usuario y la conversioacuten se realiza desde dicho CCSID aUnicode antes de devolver la serie al programa Cuando se leen datos del aacuterea de datos la cantidad dedatos leiacutedos viene expresada en el nuacutemero de caracteres no en el nuacutemero de bytes

Mediante la clase CharacterDataArea se pueden realizar estas tareasv Borrar el aacuterea de datos para que solo contenga blancosv Crear en el sistema un aacuterea de datos de tipo caraacutecter utilizando los valores predeterminados de las

propiedadesv Crear un aacuterea de datos de tipo caraacutecter con los atributos especificadosv Suprimir el aacuterea de datos del sistema en el que existev Devolver el nombre de viacutea de acceso de IFS del objeto representado por el aacuterea de datosv Leer la totalidad de los datos contenidos en el aacuterea de datosv Leer una cantidad especificada de datos del aacuterea de datos a partir del desplazamiento 0 o del

desplazamiento que se haya especificadov Establecer el nombre totalmente calificado de la viacutea de acceso del sistema de archivos integrado del

aacuterea de datosv Escribir datos al principio del aacuterea de datosv Escribir una cantidad especificada de datos en el aacuterea de datos a partir del desplazamiento 0 o del

desplazamiento que se haya especificado

DecimalDataArea

La clase DecimalDataArea representa un aacuterea de datos existente en el servidor que contiene datosdecimales

Mediante la clase DecimalDataArea se pueden realizar estas tareasv Borrar el aacuterea de datos para que contenga 00

32 IBM Toolbox para Java IBM Toolbox para Java

v Crear en el sistema un aacuterea de datos decimales utilizando los valores predeterminados de laspropiedades

v Crear un aacuterea de datos decimales con los atributos especificadosv Suprimir el aacuterea de datos del servidor en el que existev Devolver el nuacutemero de diacutegitos que hay en el aacuterea de datos a la derecha de la coma decimalv Devolver el nombre de viacutea de acceso de IFS del objeto representado por el aacuterea de datosv Leer la totalidad de los datos contenidos en el aacuterea de datosv Establecer el nombre totalmente calificado de la viacutea de acceso del sistema de archivos integrado del

aacuterea de datosv Escribir datos al principio del aacuterea de datos

Ejemplo coacutemo se utiliza DecimalDataArea El siguiente ejemplo muestra coacutemo se crea un aacuterea de datosdecimales y coacutemo se escribe en ella

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Establezca una conexioacuten con el servidor MyServerAS400 system = new AS400(MyServer)

Cree un objeto DecimalDataAreaQSYSObjectPathName path = new QSYSObjectPathName(MYLIB MYDATA DTAARA)DecimalDataArea dataArea = new DecimalDataArea(system pathgetPath())

Cree en el servidor el aacuterea de datos decimales utilizando los valores predeterminadosdataAreacreate()

Borre el aacuterea de datosdataAreaclear()

Escriba en el aacuterea de datosdataAreawrite(new BigDecimal(12))

Lea el aacuterea de datosBigDecimal data = dataArearead()

Suprima el aacuterea de datos del servidordataAreadelete()

LocalDataArea

La clase LocalDataArea representa un aacuterea de datos local existente en el servidor En el servidor existe unaacuterea de datos local como aacuterea de datos de tipo caraacutecter pero el aacuterea de datos local tiene algunasrestricciones que deben tenerse en cuenta

El aacuterea de datos local estaacute asociada a un trabajo servidor y no es posible acceder a ella desde otro trabajoPor lo tanto esta aacuterea de datos local no se puede crear ni suprimir Cuando el trabajo servidor finaliza elaacuterea de datos local asociada a dicho trabajo se suprime automaacuteticamente y el objeto LocalDataArea quehace referencia al trabajo deja de ser vaacutelido Tambieacuten es preciso tener presente que las aacutereas de datoslocales tienen un tamantildeo fijo de 1024 caracteres en el servidor

Mediante la clase LocalDataArea se pueden realizar estas tareasv Borrar el aacuterea de datos para que solo contenga blancosv Leer la totalidad de los datos contenidos en el aacuterea de datosv Leer una cantidad especificada de datos del aacuterea de datos a partir del desplazamiento que se haya

especificadov Escribir datos al principio del aacuterea de datosv Escribir una cantidad especificada de datos en el aacuterea de datos escribieacutendose el primer caraacutecter en el

desplazamiento

IBM Toolbox para Java 33

LogicalDataArea

La clase LogicalDataArea representa un aacuterea de datos existente en el servidor que contiene datos loacutegicos

Mediante la clase LogicalDataArea puede realizar estas tareasv Borrar el aacuterea de datos para que contenga falsev Crear un aacuterea de datos de tipo caraacutecter en el servidor utilizando los valores predeterminados de las

propiedadesv Crear un aacuterea de datos de tipo caraacutecter con los atributos especificadosv Suprimir el aacuterea de datos del servidor en el que existev Devolver el nombre de viacutea de acceso de IFS del objeto representado por el aacuterea de datosv Leer la totalidad de los datos contenidos en el aacuterea de datosv Establecer el nombre totalmente calificado de la viacutea de acceso del sistema de archivos integrado del

aacuterea de datosv Escribir datos al principio del aacuterea de datos

DataAreaEvent

La clase DataAreaEvent representa un evento de aacuterea de datos

La clase DataAreaEvent se puede usar con cualquiera de las clases DataArea Mediante la claseDataAreaEvent puede realizar esta tareav Obtener el identificador del evento

DataAreaListener

La clase DataAreaListener proporciona una interfaz que permite recibir eventos de aacuterea de datos

La clase DataAreaListener se puede usar con cualquiera de las clases DataArea Es posible invocar laclase DataAreaListener cuando se lleva a cabo cualquiera de estas accionesv Borrarv Crearv Suprimirv Leerv Escribir

Javadoc DataAreaJavadoc CharacterDataAreaJavadoc DecimalDataAreaJavadoc LocalDataAreaJavadoc LogicalDataAreaJavadoc DataAreaEventJavadoc DataAreaListener

Conversioacuten y descripcioacuten de datosLas clases de conversioacuten de datos proporcionan la posibilidad de convertir datos de tipo caraacutecter ynumeacuterico entre los formatos de IBM i y Java La conversioacuten puede ser necesaria cuando se accede a datosde IBM i desde un programa Java Las clases de conversioacuten de datos soportan la conversioacuten de diversosformatos numeacutericos y entre diversas paacuteginas de coacutedigos EBCDIC y Unicode

Las clases de descripcioacuten de datos se construyen sobre las clases de conversioacuten de datos para convertirtodos los campos de un registro con una sola llamada de meacutetodo La clase RecordFormat permite al

34 IBM Toolbox para Java IBM Toolbox para Java

programa describir los datos que constituyen un objeto DataQueueEntry un paraacutemetro ProgramCall unregistro de un archivo de base de datos al que se accede mediante clases de acceso a nivel de registro ocualquier almacenamiento intermedio de datos del sistema La clase Record permite al programaconvertir el contenido del registro y acceder a los datos por nombre de campo o por iacutendice

Las clases conversoras permiten realizar la conversioacuten entre Java y el sistema BinaryConverter realiza laconversioacuten entre las matrices de bytes Java y los tipos de datos simples Java CharConverter realiza laconversioacuten entre los objetos de tipo serie Java y las paacuteginas de coacutedigos de IBM i Para obtener maacutesinformacioacuten consulte el tema Conversores

Tipos de datos

AS400DataType es una interfaz que define los meacutetodos necesarios para la conversioacuten de datos Unprograma Java utiliza los tipos de datos cuando es necesario convertir fragmentos de datos individualesExisten clases de conversioacuten para los siguientes tipos de datosv Numeacutericov Texto (tipo caraacutecter)v Compuesto (numeacuterico y texto)

Ejemplo coacutemo se utilizan las clases AS400DataType

El ejemplo siguiente muestra coacutemo utilizar las clases AS400DataType con ProgramCall tanto paraproporcionar datos para los paraacutemetros de programa como para interpretar los datos devueltos en losparaacutemetros de programa

Ejemplo coacutemo se utilizan las clases AS400DataType con ProgramCall

Conversioacuten que especifica un formato de registro

IBM Toolbox para Java proporciona clases sobre las que construir las clases de tipos de datos quepermiten que los datos se conviertan de registro en registro en vez de convertirse de campo en campoPor ejemplo supongamos que un programa Java lee datos de salida de una cola de datos El objeto colade datos devuelve una matriz de bytes de datos de IBM i al programa Java Esta matriz puede enpotencia contener muchos tipos de datos de IBM i La aplicacioacuten puede convertir de uno en uno loscampos de la matriz de bytes utilizando las clases de tipos de datos o bien el programa puede crear unformato de registro que describa los campos en la matriz de bytes Luego ese registro realiza laconversioacuten

La conversioacuten de formato de registro puede ser de utilidad cuando se estaacute trabajando con datos de lallamada a programa de la cola de datos y de las clases de acceso a nivel de registro La entrada y lasalida de estas clases son matrices de bytes que pueden contener muchos campos de diversos tipos Losconversores de formato de registro pueden facilitar la conversioacuten de estos datos entre el formato de IBM iy el formato Java

La conversioacuten mediante el formato de registro emplea tres clasesv Las clases FieldDescription identifican un campo o paraacutemetro con un tipo de datos y un nombrev Una clase RecordFormat describe un grupo de camposv Una clase Record une la descripcioacuten de un registro (en la clase RecordFormat) con los datos realesv Una clase LineDataRecordWriter escribe un registro en un objeto OutputStream en formato de datos de

liacutenea

Ejemplos coacutemo se utilizan las clases de conversioacuten de formato de registro

IBM Toolbox para Java 35

Los ejemplos siguientes ilustran coacutemo se utilizan las clases de conversioacuten de formato de registro con lascolas de datos

Coacutemo se utilizan las clases Record y RecordFormat para poner datos en una cola

Coacutemo se utilizan las clases FieldDescription RecordFormat y RecordJavadoc AS400DataType

Clases de conversioacuten para datos numeacutericos

Las clases de conversioacuten para datos numeacutericos convierten los datos numeacutericos del formato utilizado enIBM i (denominado formato del sistema en la tabla siguiente) al formato Java

En la tabla siguiente se muestran los tipos de datos soportados

Tipo numeacuterico Descripcioacuten

AS400Bin2 La conversioacuten se realiza entre un nuacutemero de dos bytescon signo con el formato del sistema y un objeto ShortJava

AS400Bin4 La conversioacuten se realiza entre un nuacutemero de cuatro bytescon signo con el formato del sistema y un objeto IntegerJava

AS400ByteArray La conversioacuten se realiza entre dos matrices de bytes Esde utilidad porque el conversor rellena con ceroscorrectamente y rellena con datos el almacenamientointermedio destino

AS400Float4 La conversioacuten se realiza entre un nuacutemero de comaflotante de cuatro bytes con signo con el formato delsistema y un objeto Float Java

AS400Float8 La conversioacuten se realiza entre un nuacutemero de comaflotante de ocho bytes con signo con el formato delsistema y un objeto Double Java

AS400PackedDecimal La conversioacuten se realiza entre un nuacutemero decimalempaquetado con el formato del sistema y un objetoBigDecimal Java

AS400UnsignedBin2 La conversioacuten se realiza entre un nuacutemero de dos bytessin signo con el formato del sistema y un objeto IntegerJava

AS400UnsignedBin4 La conversioacuten se realiza entre un nuacutemero de cuatro bytessin signo con el formato del sistema y un objeto LongJava

AS400ZonedDecimal La conversioacuten se realiza entre un nuacutemero decimal conzona con el formato del sistema y un objeto BigDecimalJava

Ejemplos

En los ejemplos que siguen se muestran conversiones de datos de tipo numeacuterico con el formato delsistema a un objeto int Java

Ejemplo realizar una conversioacuten del formato del sistema a un objeto int Java Cree un almacenamiento intermedio que contenga el tipo de datos del sistema Supongamos que el almacenamiento intermedio se rellena con datos numeacutericos con el formato del sistema procedentes de colas de datos llamadas a programa etc

36 IBM Toolbox para Java IBM Toolbox para Java

byte[] data = new byte[100]

Cree un conversor para este tipo de datos del sistemaAS400Bin4 bin4Converter = new AS400Bin4()

Realice la conversioacuten del tipo del sistema al objeto Java El nuacutemero empieza al principio del almacenamiento intermedioInteger intObject = (Integer) bin4ConvertertoObject(data0)

Extraiga el tipo Java simple del objeto Javaint i = intObjectintValue()

Ejemplo realizar la conversioacuten de un objeto int Java al formato del sistema Cree un objeto Java que contenga el valor que se ha de convertirInteger intObject = new Integer(22)

Cree un conversor para el tipo de datos del sistemaAS400Bin4 bin4Converter = new AS400Bin4()

Realice la conversioacuten del objeto Java al tipo de datos del sistemabyte[] data = bin4ConvertertoBytes(intObject)

Averiguumle cuaacutentos bytes del almacenamiento intermedio se rellenaron con el valor del sistemaint length = bin4ConvertergetByteLength()

Conversioacuten de texto

Los datos de tipo caraacutecter se convierten mediante la clase AS400Text de IBM Toolbox para Java Esta clasehace que los datos de tipo caraacutecter que tienen la paacutegina de coacutedigos y el juego de caracteres (CCSID)EBCDIC se conviertan a Unicode

Al construir el objeto AS400Text el programa Java especifica la longitud de la serie que se debe convertirasiacute como el CCSID o la codificacioacuten del servidor Se supone que el CCSID del programa Java es Unicode13488 El meacutetodo toBytes() hace que el formato Java se convierta en una matriz de bytes en formato deIBM i El meacutetodo toObject() hace que una matriz de bytes en formato IBM i se convierta al formato Java

La clase AS400BidiTransform proporciona transformaciones de disentildeo que hacen posible la conversioacuten detexto bidireccional en formato de IBM i (tras convertirlo primero a Unicode) a texto bidireccional enformato Java o de formato Java a formato de IBM i La conversioacuten predeterminada se basa en el CCSIDdel trabajo Para modificar la direccioacuten y el formato del texto especifique BidiStringType Tenga encuenta que cuando los objetos IBM Toolbox para Java llevan a cabo la conversioacuten internamente como enla clase DataArea los objetos tienen un meacutetodo para cambiar el tipo de serie Por ejemplo la claseDataArea tiene el meacutetodo addVetoableChangeListener() que se puede especificar para escuchar cambiosde veto a determinadas propiedades entre ellas el tipo de serie

Ejemplo convertir datos de texto

En el ejemplo siguiente se supone que un objeto DataQueueEntry devuelve un texto en EBCDIC Elejemplo convierte los datos EBCDIC a Unicode para que el programa Java pueda utilizarlos

Supongamos que ya se ha realizado el trabajo de configuracioacuten de la cola de datos para recuperar el texto del sistema y los datos se han colocado en el siguiente almacenamiento intermedioint textLength = 100byte[] data = new byte[textLength]

Cree un conversor para el tipo de datos del sistema Observe que se construye un conversor predeterminado Este conversor supone que la paacutegina de coacutedigos

EBCDIC de IBM i coincide con el entorno nacional del cliente Si ello no corresponde a la realidad el programa Java puede especificar expliacutecitamente el CCSID de

IBM Toolbox para Java 37

EBCDIC que se debe utilizar Sin embargo se recomienda especificar un CCSID cuando sea posible (consulte las notas siguientes)AS400Text textConverter = new AS400Text(textLength)

Nota si lo desea puede crear un conversor para un CCSID especiacutefico Utilice un objeto AS400 por si el programa se ejecuta como un cliente proxy de IBM Toolbox para Javaint ccsid = 37AS400 system = Objeto AS400AS400Text textConverter = new AS400Text(textLength ccsid system)

Nota tambieacuten puede crear un conversor solo con el objeto AS400 Este conversor supone que la paacutegina de coacutedigos de IBM i coincide con el CCSID devuelto por el objeto AS400AS400Text textConverter = new AS400Text(textLength system)

Convierta los datos de EBCDIC a Unicode Si la longitud del objeto AS400Text es superior al nuacutemero de caracteres convertidos la serie (String) resultante se rellenaraacute con blancos hasta la longitud especificadaString javaText = (String) textConvertertoObject(data)

Informacioacuten relacionadaJavadoc AS400TextJavadoc AS400BidiTransformJavadoc BidiStringType

Clases de conversioacuten para tipos compuestos

Este tema describe las clases de conversioacuten de IBM Toolbox para Java para tipos compuestosv AS400Array - Permite al programa Java trabajar con una matriz de tipos de datosv AS400Structure - Permite al programa Java trabajar con una estructura cuyos elementos son tipos de

datos

Ejemplo convertir tipos de datos compuestos

En el ejemplo que sigue se muestra la conversioacuten desde una estructura Java a una matriz de bytes ycoacutemo se realiza la conversioacuten inversa El ejemplo presupone que se emplea el mismo formato de datostanto para el enviacuteo como para la recepcioacuten de los datos

Cree una estructura de tipos de datos que se corresponda con una estructura que contiene - un nuacutemero de cuatro bytes - cuatro bytes de relleno - un nuacutemero de ocho bytes - 40 caracteresAS400DataType[] myStruct =

new AS400Bin4()new AS400ByteArray(4)new AS400Float8()new AS400Text(40)

Cree un objeto conversioacuten que utilice la estructuraAS400Structure myConverter = new AS400Structure(myStruct)

Cree el objeto Java que contiene los datos que deben enviarse al servidorObject[] myData =

new Integer(88) el nuacutemero de cuatro bytesnew byte[0] el relleno (permite rellenar con 0 el objeto conversioacuten)new Double(2345) el nuacutemero de coma flotante de ocho bytesEsa es mi estructura la serie de caracteres

38 IBM Toolbox para Java IBM Toolbox para Java

Haga que el objeto Java se convierta en matriz de bytesbyte[] myAS400Data = myConvertertoBytes(myData)

Enviacutee la matriz de bytes al servidor Obtenga los datos nuevamente del servidor Los datos devueltos seraacuten asimismo una matriz de bytes

Convierta los datos devueltos desde IBM i al formato JavaObject[] myRoundTripData = (Object[])myConvertertoObject(myAS400Data0)

Saque el tercer objeto de la estructura Es el objeto doubleDouble doubleObject = (Double) myRoundTripData[2]

Extraiga el tipo Java simple del objeto Javadouble d = doubleObjectdoubleValue()

Javadoc AS400ArrayJavadoc AS400Structure

Clases de descripcioacuten de campo

Las clases de descripciones de campo permiten al programa Java describir el contenido de un campo oun paraacutemetro con un tipo de datos y una serie que contenga el nombre del campo El programa si estaacutetrabajando con datos de acceso a nivel de registro puede asimismo especificar cualquier palabra clave deespecificacioacuten de definicioacuten de datos (DDS) IBM i que describa el campo con maacutes detalle

Clases de Descripcioacuten de campo

Las clases de descripcioacuten de campo son las siguientesv BinaryFieldDescriptionv CharacterFieldDescriptionv DateFieldDescriptionv DBCSEitherFieldDescriptionv DBCSGraphicFieldDescriptionv DBCSOnlyFieldDescriptionv DBCSOpenFieldDescriptionv FloatFieldDescriptionv HexFieldDescriptionv PackedDecimalFieldDescriptionv TimeFieldDescriptionv TimestampFieldDescriptionv ZonedDecimalFieldDescription

Ejemplo crear descripciones de campo

En el ejemplo siguiente se supone que las entradas existentes en una cola de datos tienen el mismoformato Cada entrada tiene un nuacutemero de mensaje (AS400Bin4) una indicacioacuten de la hora (8 caracteres)y un texto de mensaje (50 caracteres) que puede describir con descripciones de campo

Cree una descripcioacuten de campo para los datos numeacutericos Observe que utiliza el tipo de datos AS400Bin4 Tambieacuten denomina el campo para que sea posible acceder a eacutel por el nombre en la clase de registroBinaryFieldDescription bfd = new BinaryFieldDescription(new AS400Bin4() msgNumber)

Cree una descripcioacuten de campo para los datos de tipo caraacutecter Observe que utiliza el tipo de datos AS400Text Tambieacuten denomina el campo para que sea posible

IBM Toolbox para Java 39

acceder a eacutel por el nombre en la clase de registroCharacterFieldDescription cfd1 = new CharacterFieldDescription(new AS400Text(8) msgTime)

Cree una descripcioacuten de campo para los datos de tipo caraacutecter Observe que utiliza el tipo de datos AS400Text Tambieacuten denomina el campo para que sea posible acceder a eacutel por el nombre en la clase de registroCharacterFieldDescription cfd2 = new CharacterFieldDescription(new AS400Text(50) msgText)

Ahora puede agrupar las descripciones de campo en una instancia de la clase RecordFormat Para vercoacutemo antildeadir las descripciones de campo a un objeto RecordFormat vea el ejemplo de la paacutegina siguiente

ldquoClase RecordFormatrdquo

Clase RecordFormat

La clase RecordFormat de IBM Toolbox para Java permite al programa Java describir un grupo decampos o paraacutemetros Un objeto Record contiene los datos descritos por un objeto RecordFormat Si elprograma utiliza clases de acceso a nivel de registro la clase RecordFormat tambieacuten permite al programaespecificar descripciones para campos clave

Un objeto RecordFormat contiene un conjunto de descripciones de campo El acceso a la descripcioacuten decampo se puede realizar por iacutendice o por nombre En la clase RecordFormat hay meacutetodos que permitenrealizar estas tareasv Antildeadir descripciones de campo al formato de registrov Antildeadir descripciones de campo de clave al formato de registrov Recuperar descripciones de campo del formato de registro por iacutendice o por nombrev Recuperar descripciones de campo de clave del formato de registro por iacutendice o por nombrev Recuperar los nombres de los campos que constituyen el formato de registrov Recuperar los nombres de los campos de clave que constituyen el formato de registrov Recuperar el nuacutemero de campos existentes en el formato de registrov Recuperar el nuacutemero de campos de clave existentes en el formato de registrov Crear un objeto Record basado en este formato de registro

Ejemplo antildeadir descripciones de campo a un formato de registro

En el ejemplo siguiente se antildeade a un formato de registro las descripciones de campo creadas en elejemplo de descripcioacuten de campo

Cree un objeto formato de registro despueacutes relleacutenelo con descripciones de campoRecordFormat rf = new RecordFormat()rfaddFieldDescription(bfd)rfaddFieldDescription(cfd1)rfaddFieldDescription(cfd2)

Para ver coacutemo crear un registro a partir del formato de registro vea el ejemplo de la paacutegina siguiente

ldquoClase RecordrdquoJavadoc RecordFormat

Clase Record

La clase de registro de IBM Toolbox para Java permite al programa Java procesar los datos descritos porla clase de formato de registro

La conversioacuten de datos se realiza entre matrices de bytes que contienen datos del servidor y objetos JavaEn la clase registro hay meacutetodos que permiten realizar estas tareas

40 IBM Toolbox para Java IBM Toolbox para Java

v Recuperar el contenido de un campo por iacutendice o por nombre como objeto Javav Recuperar el nuacutemero de campos del registrov Establecer el contenido de un campo por iacutendice o por nombre con un objeto Javav Recuperar el contenido del registro como datos del servidor en una matriz de bytes o en una corriente

de datos de salidav Establecer el contenido del registro desde una matriz de bytes o una corriente de datos de entradav Convertir el contenido del registro en una serie (String)

Ejemplo leer un registro

En el ejemplo siguiente se utiliza el formato de registro creado en el ejemplo de formato de registro Supongamos que ya se ha realizado el trabajo de configuracioacuten de la cola de datos Ahora debe leerse un registro de la cola de datosDataQueueEntry dqe = dqread()

Los datos de la cola de datos estaacuten ahora en una entrada de cola de datos Obtenga los datos de la entrada de cola de datos y poacutengalos en el registro Obtenemos un registro predeterminado del objeto de formato de registro y lo inicializamos con los datos de la entrada de cola de datosRecord dqRecord = rfgetNewRecord(dqegetData())

Ahora que los datos estaacuten en el registro saque los datos de un campo a razoacuten de un campo cada vez convirtiendo los datos a medida que se vayan eliminando El resultado son los datos de un objeto Java que ahora el programa puede procesarInteger msgNumber = (Integer) dqRecordgetField(msgNumber)String msgTime = (String) dqRecordgetField(msgTime)String msgText = (String) dqRecordgetField(msgText)

Informacioacuten relacionadaJavadoc Record

Recuperacioacuten del contenido de un campo

Para recuperar el contenido de un objeto Record puede hacer que el programa Java obtenga los camposde uno en uno o que obtenga todos los campos a la vez

El meacutetodo getField() de la clase Record permite recuperar un campo individual por nombre o por iacutendiceEl meacutetodo getFields() permite recuperar la totalidad de los campos como Object[]

El programa Java debe hacer que el objeto Object (o un elemento de Object[]) devuelto se conviertatemporalmente al objeto Java adecuado para el campo recuperado La tabla que figura a continuacioacutenmuestra el objeto Java adecuado al que se ha de convertir temporalmente en funcioacuten del tipo de campo

Tipo de campo (DDS) Tipo de campo (FieldDescription) Objeto Java

BINARIO (B) longitud lt= 4 BinaryFieldDescription Short

BINARIO (B) longitud gt= 5 BinaryFieldDescription Integer

CARAacuteCTER (A) CharacterFieldDescription String

Cualquier DBCS (E) DBCSEitherFieldDescription String

DBCS graacutefico (G) DBCSGraphicFieldDescription String

Solo DBCS (J) DBCSOnlyFieldDescription String

DBCS abierto (O) DBCSOpenFieldDescription String

FECHA (L) DateFieldDescription String

FLOTANTE (F) precisioacuten simple FloatFieldDescription Float

FLOTANTE (F) precisioacuten doble FloatFieldDescription Double

IBM Toolbox para Java 41

Tipo de campo (DDS) Tipo de campo (FieldDescription) Objeto Java

HEXADECIMAL (H) HexFieldDescription byte[]

DECIMAL EMPAQUETADO (P) PackedDecimalFieldDescription BigDecimal

HORA (T) TimeDecimalFieldDescription String

INDICACIOacuteN DE LA HORA (Z) TimestampDecimalFieldDescription String

DECIMAL CON ZONA (P) ZonedDecimalFieldDescription BigDecimal

Informacioacuten relacionadaJavadoc Record

Establecimiento del contenido de un campo

Para establecer el contenido de un objeto Record utilice el meacutetodo setField() en el programa Java

El programa Java debe especificar el objeto Java adecuado para el campo que se va a establecer La tablaque figura a continuacioacuten muestra el objeto Java adecuado para cada tipo de campo posible

Tipo de campo (DDS) Tipo de campo (FieldDescription) Objeto Java

BINARIO (B) longitud lt= 4 BinaryFieldDescription Short

BINARIO (B) longitud gt= 5 BinaryFieldDescription Integer

CARAacuteCTER (A) CharacterFieldDescription String

Cualquier DBCS (E) DBCSEitherFieldDescription String

DBCS graacutefico (G) DBCSGraphicFieldDescription String

Solo DBCS (J) DBCSOnlyFieldDescription String

DBCS abierto (O) DBCSOpenFieldDescription String

FECHA (L) DateFieldDescription String

FLOTANTE (F) precisioacuten simple FloatFieldDescription Float

FLOTANTE (F) precisioacuten doble FloatFieldDescription Double

HEXADECIMAL (H) HexFieldDescription byte[]

DECIMAL EMPAQUETADO (P) PackedDecimalFieldDescription BigDecimal

HORA (T) TimeDecimalFieldDescription String

INDICACIOacuteN DE LA HORA (Z) TimestampDecimalFieldDescription String

DECIMAL CON ZONA (P) ZonedDecimalFieldDescription BigDecimal

Informacioacuten relacionadaJavadoc Record

Clase LineDataRecordWriter

La clase LineDataRecordWriter escribe los datos de registro en formato de datos de liacutenea en un objetoOutputStream La clase convierte los datos en bytes utilizando el CCSID especificado El formato deregistro asociado al registro determina el formato de los datos

LineDataRecordWriter

La utilizacioacuten de LineDataRecordWriter requiere que se hayan establecido los siguientes atributos deformato de registrov ID de formato de registro

42 IBM Toolbox para Java IBM Toolbox para Java

v Tipo de formato de registro

Junto con las clases Record o RecordFormat la clase LineDataRecordWriter toma un registro comoentrada para el meacutetodo writeRecord() (El registro toma RecordFormat como entrada cuando se crea unainstancia del mismo)

La clase LineDataRecordWriter proporciona meacutetodos que permiten llevar a cabo estas accionesv Obtener el CCSIDv Obtener el nombre de la codificacioacutenv Escribir los datos de registro en formato de datos de liacutenea en un objeto OutputStream

Ejemplo coacutemo se utiliza la clase LineDataRecordWriter

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

En el ejemplo siguiente se muestra un modo de emplear la clase LineDataRecordWriter para escribir unregistro

Ejemplo de coacutemo se utiliza la clase LineDataRecordWritertry

Cree un CCSIDccsid_ = system_getCcsid()

Cree una cola de salida e indique que los datos del archivo en spool sean LINEOutputQueue outQ = new OutputQueue(system_ QSYSLIBRLPLIBLIBLDRWOUTQ)PrintParameterList parms = new PrintParameterList()parmssetParameter(PrintObjectATTR_PRTDEVTYPE LINE)

Inicialice el formato de registro para escribir datosRecordFormat recfmt = initializeRecordFormat()

Cree un registro y asigne datos para imprimirRecord record = new Record(recfmt)createRecord(record)

SpooledFileOutputStream os = nulltry

Cree el archivo en spool de salida para contener los datos de registroos = new SpooledFileOutputStream(system_ parms null outQ)

catch (Exception e) Systemoutprintln(Se ha producido un error al crear el archivo en spool)eprintStackTrace()

Cree el transcriptor de registro de datos de liacuteneaLineDataRecordWriter ldwldw = new LineDataRecordWriter(os ccsid_ system_)

Escriba el registro de datosldwwriteRecord(record)

Cierre el objeto OutputStreamosclose()

catch(Exception e)

failed(e Se ha producido una excepcioacuten)

Javadoc LineDataRecordWriter

IBM Toolbox para Java 43

Javadoc RecordJavadoc RecordFormat

Colas de datosLas clases DataQueue permiten al programa Java interactuar con las colas de datos del servidor

Las colas de datos de IBM i tienen las caracteriacutesticas siguientesv La cola de datos permite agilizar las comunicaciones entre trabajos Por lo tanto es un excelente

procedimiento para sincronizar los trabajos y pasar datos entre ellosv Muchos trabajos pueden acceder simultaacuteneamente a las colas de datosv Los mensajes pueden tener un formato libre en una cola de datos Los campos no son obligatorios

como en los archivos de base de datosv La cola de datos puede utilizarse tanto para procesos siacutencronos como asiacutencronosv En una cola de datos los mensajes pueden ordenarse de varias maneras

ndash Uacuteltimo en entrar primero en salir (LIFO) El uacuteltimo mensaje (el maacutes reciente) colocado en la cola dedatos es el primer mensaje que se saca de ella

ndash Primero en entrar primero en salir (FIFO) El primer mensaje (el maacutes antiguo) colocado en la cola dedatos es el primer mensaje que se saca de ella

ndash Por clave Cada mensaje de la cola de datos tiene una clave asociada a eacutel Para poder sacar unmensaje de la cola de datos es preciso especificar la clave asociada al mismo

Las clases de cola de datos proporcionan un conjunto completo de interfaces que permiten acceder a lascolas de datos del servidor desde el programa Java Es un excelente meacutetodo de comunicacioacuten entre losprogramas Java y los programas del servidor escritos en cualquier lenguaje de programacioacuten

Cada objeto de cola de datos tiene como paraacutemetro obligatorio el objeto AS400 que representa el servidorque tiene la cola de datos o donde se debe crear la cola de datos

La utilizacioacuten de las clases de cola de datos hace que el objeto AS400 se conecte al servidor En Gestioacutende conexiones encontraraacute informacioacuten acerca de coacutemo se gestionan las conexiones

Cada objeto cola de datos requiere el nombre de viacutea de acceso del sistema de archivos integrado de lacola de datos El tipo correspondiente a la cola de datos es DTAQ En Nombres de viacutea de acceso delsistema de archivos integrado puede encontrar maacutes informacioacuten

Colas de datos secuenciales y por clave

Las clases de cola de datos dan soporte a colas de datos secuenciales y por claves

Los meacutetodos comunes a los dos tipos de colas estaacuten en la clase BaseDataQueue La clase DataQueueampliacutea la clase BaseDataQueue para completar la implementacioacuten de las colas de datos secuenciales Laclase KeyedDataQueue ampliacutea la clase BaseDataQueue para completar la implementacioacuten de las colas dedatos por clave

Cuando se leen de una cola de datos los datos se colocan en un objeto DataQueueEntry Este objetocontiene los datos de los dos tipos de colas de datos las que son por clave y las secuenciales Los datosadicionales disponibles cuando se leen de una cola de datos por clave se colocan en un objetoKeyedDataQueueEntry que ampliacutea la clase DataQueueEntry

Las clases de cola de datos no alteran los datos que se escriben en la cola de datos del servidor o se leende ella El programa Java debe dar el formato correcto a los datos Las clases de conversioacuten de datosproporcionan meacutetodos para convertir los datos

44 IBM Toolbox para Java IBM Toolbox para Java

Ejemplo coacutemo se utiliza DataQueue y DataQueueEntry

En el ejemplo que sigue se crea un objeto DataQueue se leen datos del objeto DataQueueEntry y luego selleva a cabo la desconexioacuten del sistema

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree el objeto DataQueueDataQueue dq = new DataQueue(sys QSYSLIBMYLIBLIBMYQUEUEDTAQ)

Lea datos de la colaDataQueueEntry dqData = dqread()

Obtenga datos del objeto DataQueueEntrybyte[] data = dqDatagetData()

Procese los datos

Desconecte puesto que ya ha terminado de utilizar las colas de datossysdisconnectService(AS400DATAQUEUE)

Informacioacuten relacionadaJavadoc BaseDataQueueJavadoc DataQueueJavadoc KeyedDataQueueJavadoc DataQueueEntryJavadoc KeyedDataQueueEntry

Colas de datos secuenciales

Las entradas existentes en una cola de datos secuencial del servidor se eliminan por orden FIFO (primeroen entrar primero en salir) o LIFO (uacuteltimo en entrar primero en salir)

Las clases BaseDataQueue y DataQueue proporcionan los siguientes meacutetodos para trabajar con las colasde datos secuencialesv El meacutetodo create que permite crear una cola de datos en el servidor El programa Java debe especificar

el tamantildeo maacuteximo de una entrada en la cola de datos El programa Java puede especificaropcionalmente paraacutemetros de cola de datos (FIFO frente a LIFO guardar informacioacuten de remitenteespecificar informacioacuten de autorizacioacuten forzar en disco y proporcionar una descripcioacuten de cola)cuando se crea la cola

v El meacutetodo peek que permite echar una mirada raacutepida a una entrada en la cola de datos sin eliminardicha entrada de la cola El programa Java puede esperar o devolver inmediatamente si en estemomento no hay ninguna entrada en la cola

v El meacutetodo read que permite leer una entrada quitaacutendola de la cola El programa Java puede esperar odevolver inmediatamente si no hay ninguna entrada disponible en la cola

v El meacutetodo write que permite escribir una entrada en la colav El meacutetodo clear que permite borrar todas las entradas de la colav El meacutetodo delete que permite suprimir la cola

La clase BaseDataQueue proporciona meacutetodos adicionales para recuperar los atributos de la cola dedatos

IBM Toolbox para Java 45

Ejemplos trabajar con colas de datos secuenciales

En los siguientes ejemplos de cola de datos secuencial el productor pone elementos en una cola de datosy el consumidor saca los elementos de la cola y los procesa

ldquoEjemplo coacutemo se utilizan las clases DataQueue para poner datos en una colardquo en la paacutegina 403

ldquoEjemplo coacutemo se utilizan las clases DataQueue para leer entradas en una cola de datosrdquo en lapaacutegina 406

Javadoc BaseDataQueueJavadoc DataQueue

Colas de datos por clave

Las clases BaseDataQueue y KeyedDataQueue proporcionan meacutetodos para trabajar con colas de datos porclavev El meacutetodo create que permite crear una cola de datos por clave en el sistema El programa Java debe

especificar la longitud de la clave y el tamantildeo maacuteximo de una entrada en la cola El programa Javapuede especificar opcionalmente informacioacuten de autorizacioacuten guardar informacioacuten de remitente forzaren disco y proporcionar una descripcioacuten de cola

v El meacutetodo peek que permite echar una mirada raacutepida a una entrada en funcioacuten de la claveespecificada sin eliminar la entrada de la cola El programa Java puede esperar o devolverinmediatamente si en la cola no hay actualmente ninguna entrada que coincida con los criterios de laclave

v El meacutetodo read que permite leer una entrada en funcioacuten de la clave especificada quitaacutendola de la colaEl programa Java puede esperar o devolver inmediatamente si en la cola no hay ninguna entradadisponible que coincida con los criterios de la clave

v El meacutetodo write que permite escribir una entrada por clave en la colav El meacutetodo clear que permite borrar todas las entradas o solo las que coincidan con una clave

especificadav El meacutetodo delete que permite suprimir la cola

Las clases BaseDataQueue y KeyedDataQueue proporcionan asimismo meacutetodos adicionales que permitenrecuperar los atributos de la cola de datos

Ejemplos trabajar con colas de datos por clave

En los siguientes ejemplos de cola de datos por clave el productor pone elementos en una cola de datosy el consumidor saca los elementos de la cola y los procesa

ldquoEjemplo coacutemo se utiliza KeyedDataQueuerdquo en la paacutegina 412

ldquoEjemplo coacutemo se utilizan las clases KeyedDataQueue para leer entradas de una cola de datosrdquo enla paacutegina 415

Javadoc BaseDataQueueJavadoc KeyedDataQueue

Certificados digitalesLos certificados digitales son sentencias con firma digital utilizadas para las transacciones protegidas enInternet

Para establecer una conexioacuten segura utilizando SSL (capa de sockets segura) se requiere un certificadodigital

46 IBM Toolbox para Java IBM Toolbox para Java

Los certificados digitales constan de estos elementosv La clave puacuteblica de cifrado del usuariov El nombre y la direccioacuten del usuariov La firma digital de una autoridad certificadora (CA) de terceros La firma de la autoridad garantiza

que el usuario es una entidad de confianzav La fecha de emisioacuten del certificadov La fecha de caducidad del certificado

Como administrador de un servidor protegido puede antildeadir al servidor una clave de raiacutez de confianzade una autoridad certificadora Esto quiere decir que el servidor se fiaraacute de cualquier persona quedisponga de un certificado procedente de esa determinada autoridad certificadora

Los certificados digitales ofrecen tambieacuten el cifrado garantizando una transferencia segura de los datosmediante una clave privada de cifrado

Es posible crear certificados digitales con la herramienta javakey (Encontraraacute maacutes informacioacuten sobre

javakey y la seguridad Java en la paacutegina sobre seguridad Java de Sun Microsystems Inc ) IBMToolbox para Java tiene clases que administran certificados digitales en el sistema

Las clases AS400Certificate proporcionan meacutetodos para gestionar certificados X509 ASN1 codificados Seproporcionan clases para realizar estas tareasv Obtener y establecer datos de certificadosv Listar certificados por lista de validacioacuten o perfil de usuariov Gestionar certificados por ejemplo antildeadir un certificado a un perfil de usuario o suprimir un

certificado de una lista de validacioacuten

La utilizacioacuten de una clase de certificado hace que el objeto AS400 se conecte al servidor En Gestioacuten deconexiones encontraraacute informacioacuten acerca de coacutemo se gestionan las conexiones

En el servidor los certificados pertenecen a una lista de validacioacuten o a un perfil de usuariov La clase AS400CertificateUserProfileUtil tiene meacutetodos para gestionar certificados en un perfil de

usuariov La clase AS400CertificateVldlUtil tiene meacutetodos para gestionar los certificados de una lista de

validacioacuten

Para utilizar AS400CertificateUserProfileUtil y AS400CertificateVldlUtil es necesario instalar la opcioacuten 34del sistema operativo base (Gestor de Certificados Digitales) Estas dos clases ampliacutean la claseAS400CertificateUtil que es una clase base abstracta que define meacutetodos que son comunes a las dossubclases

La clase AS400Certificate proporciona meacutetodos para leer y escribir datos de certificado El acceso a losdatos se realiza en forma de matriz de bytes El paquete JavaSecurity de la maacutequina virtual Java 12proporciona clases que permiten obtener y establecer campos individuales del certificado

Lista de certificados

Para obtener una lista de certificados el programa Java debe llevar a cabo estas tareas1 Crear un objeto AS4002 Construir el objeto certificado correcto Los objetos que se utilizan para listar certificados en un perfil

de usuario (AS400CertificateUserProfileUtil) son distintos de los utilizados para listar certificados enuna lista de validacioacuten (AS400CertificateVldlUtil)

IBM Toolbox para Java 47

3 Crear criterios de seleccioacuten basados en los atributos de certificado La clase AS400CertificateAttributecontiene atributos que se utilizan como criterios de seleccioacutenUno o varios objetos atributo definen loscriterios que deben satisfacerse para poder antildeadir un certificado a la lista Por ejemplo una listapodriacutea contener uacutenicamente certificados para un determinado usuario u organizacioacuten

4 Crear un espacio de usuario en el servidor y poner el certificado en el espacio de usuario Unaoperacioacuten de listar puede generar una gran cantidad de datos Para que un programa Java puedarecuperar los datos primero es necesario colocarlos en un espacio de usuario Utilice el meacutetodolistCertificates() para colocar los certificados en el espacio de usuario

5 Utilice el meacutetodo getCertificates() de AS400CertificateUtil para recuperar certificados del espacio deusuario

Ejemplo listar certificados digitales

El ejemplo que figura a continuacioacuten lista certificados de una lista de validacioacuten Solo lista los certificadospertenecientes a una determinada persona

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree un objeto AS400 Los certificados estaacuten en este sistemaAS400 sys = new AS400(mySystemmyCompanycom)

Cree el objeto certificadoAS400CertificateVldlUtil certificateList =

new AS400CertificateVldlUtil(sys QSYSLIBMYLIBLIBCERTLISTVLDL)

Cree la lista de atributos de certificado Solo queremos certificados correspondientes a una uacutenica persona por lo que la lista consta de un solo elementoAS400CertificateAttribute[] attributeList = new AS400CertificateAttribute[1]attributeList[0] =

new AS400CertificateAttribute(AS400CertificateAttributeSUBJECT_COMMON_NAME Jane Doe)

Recupere la lista que coincide con los criterios Se utilizaraacute el espacio de usuario myspace de la biblioteca mylib para almacenar los certificados El espacio de usuario debe existir antes de llamar a esta APIint count = certificateListlistCertificates(attributeList QSYSLIBMYLIBLIBMYSPACEUSRSPC)

Recupere los certificados del espacio de usuarioAS400Certificates[] certificates =

certificateListgetCertificates(QSYSLIBMYLIBLIBMYSPACEUSRSPC 0 8)

Procese los certificados

Javadoc AS400CertificateUserProfileUtilJavadoc AS400CertificateVldUtilJavadoc AS400CertificateAttribute

Clase EnvironmentVariableLa clase EnvironmentVariable y la clase EnvironmentVariableList de IBM Toolbox para Java permitenacceder a variables de entorno a nivel de sistema de IBM i y establecerlas

Cada una de las variables tiene identificadores exclusivos el nombre de sistema y el nombre de variablede entorno Cada variable de entorno tiene asociado un CCSID (que de forma predeterminada es elCCSID del trabajo actual) que describe doacutende estaacute almacenado el contenido de la variable

Nota las variables de entorno son distintas de los valores del sistema aunque a menudo se utilizan conel mismo fin Encontraraacute maacutes informacioacuten acerca de coacutemo acceder a los valores del sistema en Valores delsistema

48 IBM Toolbox para Java IBM Toolbox para Java

Utilice un objeto EnvironmentVariable para llevar a cabo las acciones siguientes en una variable deentornov Obtener y establecer el nombrev Obtener y establecer el sistemav Obtener y establecer el valor (lo que permite cambiar el CCSID)v Renovar el valor

Ejemplo crear establecer y obtener variables de entorno

El ejemplo que sigue crea dos variables de entorno (EnvironmentVariable) y posteriormente establece yobtiene sus valores

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree el objeto de sistemaAS400 system = new AS400(mySystem)

Cree la variable de entorno de color de primer plano y estableacutezcala en rojo (red)EnvironmentVariable fg = new EnvironmentVariable(system FOREGROUND)fgsetValue(RED)

Cree la variable de entorno de color de fondo y obtenga su valorEnvironmentVariable bg = new EnvironmentVariable(system BACKGROUND)String background = bggetValue()

Javadoc EnvironmentVariableJavadoc EnvironmentVariableList

ExcepcionesLas clases de acceso de IBM Toolbox para Java lanzan excepciones cuando se producen errores dedispositivo limitaciones fiacutesicas errores de programacioacuten o errores de entrada de usuario Las clases deexcepcioacuten se basan en el tipo de error que se produce en vez de basarse en la ubicacioacuten origen del error

La mayor parte de las excepciones contiene la informacioacuten siguientev Tipo de error El objeto de excepcioacuten lanzado indica queacute tipo de error se ha producido Los errores del

mismo tipo se agrupan en una clase de excepcioacutenv Detalles del error La excepcioacuten contiene un coacutedigo de retorno para identificar con maacutes precisioacuten la

causa del error producido Los valores del coacutedigo de retorno son constantes dentro de la clase deexcepcioacuten

v Texto del error La excepcioacuten contiene una serie de caracteres descriptiva del error que se haproducido La serie se traduce al idioma del entorno local de la maacutequina virtual Java del cliente

Ejemplo capturar una excepcioacuten lanzada

El siguiente ejemplo muestra coacutemo capturar una excepcioacuten lanzada recuperar el coacutedigo de retorno yvisualizar el texto de la excepcioacuten

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Todo el trabajo de configuracioacuten para suprimir un archivo en el servidor mediante la clase IFSFile ya se ha terminado Ahora intente suprimir el archivotry

aFiledelete()

IBM Toolbox para Java 49

La supresioacuten ha falladocatch (ExtendedIOException e)

Visualice la serie traducida que indica la razoacuten por la que ha fallado la supresioacutenSystemoutprintln(e)

Obtenga el coacutedigo de retorno de la excepcioacuten y visualice informacioacuten adicional basada en el coacutedigo de retornoint rc = egetReturnCode()

switch (rc)

case ExtendedIOExceptionFILE_IN_USESystemoutprintln(Supresioacuten anoacutemala archivo en uso )break

case ExtendedIOExceptionPATH_NOT_FOUNDSystemoutprintln(Supresioacuten anoacutemala viacutea no encontrada )break

Para cada error especiacutefico del que desea efectuar un seguimiento

defaultSystemoutprintln(Supresioacuten anoacutemala rc = )Systemoutprintln(rc)

Clase FileAttributesLa clase FileAttributes de IBM Toolbox para Java representa el conjunto de atributos de archivo quepueden recuperarse y establecerse mediante las API Obtener atributos (Qp0lGetAttr) y Estableceratributos (Qp0lSetAttr)

Para obtener los atributos de un objeto eacuteste debe existir y el llamador debe tener autorizacioacuten sobre eacutelSoacutelo los atributos soportados por el sistema de archivos especiacutefico el tipo de objeto y el release delsistema operativo pueden recuperarse o establecerse

Puede encontrar una lista completa de los atributos disponibles en el Javadoc FileAttributesInformacioacuten relacionadaJavadoc FileAttributesAPI Obtener atributos (Qp0lGetAttr)API Establecer atributos (Qp0lSetAttr)

Clase FTPLa clase FTP de IBM Toolbox para Java proporciona una interfaz programable con las funciones FTP

Ya no es necesario que utilice javaruntimeexec() ni que indique a los usuarios que ejecuten los mandatosFTP en una aplicacioacuten aparte Es decir puede programar las funciones FTP directamente en la aplicacioacutenAsiacute desde dentro de su programa puede hacer estas tareasv Conectarse a un servidor FTPv Enviar mandatos al servidorv Listar los archivos de un directoriov Obtener los archivos del servidor y colocar archivos en el servidor

Ejemplo coacutemo se utiliza FTP para copiar archivos de un servidor

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

50 IBM Toolbox para Java IBM Toolbox para Java

Por ejemplo con la clase FTP puede copiar en un servidor un conjunto de archivos de un directorioFTP client = new FTP(myServer myUID myPWD)clientcd(myDir)clientsetDataTransferType(FTPBINARY)String [] entries = clientls()

for (int i = 0 i lt entrieslength i++)

Systemoutprintln(Copiando + entries[i])try

clientget(entries[i] cftptest + entries[i])catch (Exception e)

Systemoutprintln( la operacioacuten de copia ha fallado probablemente sea un directorio)

clientdisconnect()

FTP es una interfaz geneacuterica que funciona con numerosos y variados servidores FTP Por lo tanto esresponsabilidad del programador el adoptar la semaacutentica del servidor

Subclase AS400FTP

Mientras que la clase FTP es una interfaz FTP geneacuterica la subclase AS400FTP estaacute escrita especiacuteficamentepara el servidor FTP del servidor Es decir esta subclase entiende la semaacutentica del servidor FTP en elservidor IBM i Por ejemplo esta clase entiende los diversos pasos que se necesitan para transferir alservidor un archivo de salvar y los lleva a cabo automaacuteticamente AS400FTP tambieacuten encaja bien en losrecursos de seguridad de IBM Toolbox para Java Al igual que con las otras clases de IBM Toolbox paraJava AS400FTP depende del objeto AS400 para obtener el nombre del sistema el ID de usuario y lacontrasentildea

Ejemplo coacutemo se utiliza AS400FTP para guardar un archivo en el servidor

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente pone un archivo de salvar en el servidor Fiacutejese en coacutemo la aplicacioacuten no establece eltipo de transferencia de datos en binario ni utiliza CommandCall para crear el archivo de salvar Debidoa que la extensioacuten es savf la clase AS400FTP detecta que el archivo que se ha de poner es un archivo desalvar y realiza esos pasos automaacuteticamente

AS400 system = new AS400()AS400FTP ftp = new AS400FTP(system)ftpput(myDatasavf QSYSLIBMYLIBLIBMYDATASAVF)

Javadoc FTPJavadoc AS400FTP

Clases del sistema de archivos integradoLas clases del sistema de archivos integrado permiten a un programa Java acceder a los archivos delsistema de archivos integrado de IBM i como una corriente de bytes o una corriente de caracteres Lasclases del sistema de archivos integrado se crearon debido a que el paquete javaio no proporciona lafuncioacuten de redireccioacuten de archivos ni otras funciones delIBM i

Las funciones proporcionadas por las clases IFSFile forman un superconjunto de las funcionesproporcionadas por las clases de entradasalida (IO) de archivo existentes en el paquete javaio Todos losmeacutetodos de javaio FileInputStream FileOutputStream y RandomAccessFile estaacuten en las clases del sistemade archivos integrado

IBM Toolbox para Java 51

Ademaacutes las clases contienen meacutetodos para llevar a cabo las tareas siguientesv Especificar una modalidad de compartimiento de archivos para denegar el acceso a un archivo que se

esteacute utilizandov Especificar una modalidad de creacioacuten de archivo para abrir crear o sustituir el archivov Bloquear una seccioacuten del archivo y denegar el acceso a dicha parte del archivo mientras se esteacute

utilizandov Listar el contenido de un directorio de manera maacutes eficazv Almacenar en la memoria cacheacute el contenido de un directorio para mejorar el rendimiento al limitar las

llamadas al servidorv Determinar el nuacutemero de bytes que estaacuten disponibles en el sistema de archivos del servidorv Permitir a un applet Java acceder a los archivos del sistema de archivos del servidorv Leer y escribir datos como texto en vez de como datos binariosv Determinar el tipo de objeto de archivo (loacutegico fiacutesico de salvar etc) cuando el objeto estaacute en el

sistema de archivos QSYSLIB

Mediante las clases del sistema de archivos integrado el programa Java puede acceder directamente a losarchivos continuos existentes en el sistema El programa Java puede seguir utilizando el paquete javaiopero en ese caso el sistema operativo del cliente debe proporcionar un meacutetodo de redireccioacuten Porejemplo si el programa Java se estaacute ejecutando en un sistema operativo Windows 95 o Windows NT serequiere la funcioacuten Unidades de red de IBM i Access para Windows a fin de redirigir las llamadas javaioal sistema Con las clases del sistema de archivos integrado no se necesita IBM i Access para Windows

Las clases del sistema de archivos integrado tienen como paraacutemetro obligatorio el objeto AS400 querepresenta el sistema que contiene el archivo El hecho de utilizar las clases de sistema de archivosintegrado hace que el objeto AS400 se conecte al sistema En Gestioacuten de conexiones encontraraacuteinformacioacuten acerca de coacutemo se gestionan las conexiones

Las clases del sistema de archivos integrado requieren el nombre jeraacuterquico que el objeto tiene en elsistema de archivos integrado Como caraacutecter separador de las viacuteas de acceso utilice la barra inclinadahacia delante El ejemplo que figura a continuacioacuten muestra coacutemo se accede a FILE1 en la viacutea dedirectorio DIR1DIR2

DIR1DIR2FILE1

Ejemplos coacutemo se utilizan las clases del sistema de archivos integrado

En ldquoEjemplo coacutemo se utilizan las clases del sistema de archivos integrado (IFS) para copiar un archivo deun directorio en otrordquo en la paacutegina 423 se muestra coacutemo se utilizan las clases del sistema de archivosintegrado para copiar un archivo de un directorio en otro en el sistema

En ldquoEjemplo coacutemo se utilizan las clases del sistema de archivos integrado (IFS) para listar el contenidode un directoriordquo en la paacutegina 425 se muestra coacutemo se utilizan las clases del sistema de archivosintegrado para listar el contenido de un directorio en el sistema

Clase IFSFile

La clase IFSFile de IBM Toolbox para Java representa un objeto del sistema de archivos integrado de IBMi

Los meacutetodos que hay en IFSFile representan operaciones realizadas en el objeto como un todo Se puedeutilizar IFSFileInputStream IFSFileOutputStream y IFSRandomAccessFile para leer y escribir en elarchivo La clase IFSFile permite al programa Java llevar a cabo estas tareasv Determinar si el objeto existe y es un directorio o un archivov Determinar si el programa Java puede leer o escribir en un archivo

52 IBM Toolbox para Java IBM Toolbox para Java

v Determinar la longitud de un archivov Determinar los permisos de un objeto y establecer los permisos de un objetov Crear un directoriov Suprimir un archivo o un directoriov Redenominar un archivo o un directoriov Obtener o establecer la fecha de la uacuteltima modificacioacuten de un archivov Listar el contenido de un directoriov Listar el contenido de un directorio y guardar la informacioacuten de atributos en una memoria cacheacute localv Determinar la cantidad de espacio disponible en el sistemav Determinar el tipo de objeto de archivo cuando estaacute en el sistema de archivos QSYSLIB

Puede obtener la lista de archivos de un directorio con el meacutetodo list() o el meacutetodo listFiles()v El meacutetodo listFiles() almacena en la memoria cacheacute informacioacuten de cada uno de los archivos de la

llamada inicial Tras efectuar la llamada a listFiles() la utilizacioacuten de otros meacutetodos para consultardetalles de archivo permite obtener un mejor rendimiento ya que la informacioacuten se recupera de lamemoria cacheacute Por ejemplo realizar una llamada a isDirectory() en un objeto IFSFile devuelto porlistFiles() no requiere efectuar una llamada al servidor

v El meacutetodo list() recupera informacioacuten sobre cada uno de los archivos en una peticioacuten independienterealizada al servidor lo que hace que sea maacutes lento y que utilice maacutes recursos del servidor

Nota la utilizacioacuten de listFiles() significa que la informacioacuten de la memoria cacheacute puede quedarobsoleta por lo que puede que deba renovar los datos volviendo a efectuar una llamada a listFiles()

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase IFSFilev ldquoEjemplo crear un directoriordquo en la paacutegina 418v ldquoEjemplo coacutemo se utilizan las excepciones de IFSFile para hacer seguimiento de erroresrdquo en la paacutegina

419v ldquoEjemplo listar archivos con la extensioacuten txtrdquo en la paacutegina 419v ldquoEjemplo coacutemo se utiliza el meacutetodo de IFSFile listFiles() para listar el contenido de un directoriordquo en la

paacutegina 420Informacioacuten relacionadaJavadoc IFSFile

Clase IFSJavaFile

Esta clase de IBM Toolbox para Java representa un archivo del sistema de archivos integrado de IBM i yampliacutea la clase javaioFile IFSJavaFile permite escribir archivos para la interfaz javaioFile que accede alos sistemas de archivos integrados

IFSJavaFile crea interfaces portables que son compatibles con javaioFile y uacutenicamente utiliza los erroresy las excepciones que utiliza la clase javaioFile IFSJavaFile emplea las caracteriacutesticas del gestor deseguridad de javaioFile pero a diferencia de javaioFile IFSJavaFile emplea las caracteriacutesticas deseguridad de forma continua

La clase IFSJavaFile se utiliza junto con IFSFileInputStream y IFSFileOutputStream No da soporte a lasclases javaioFileInputStream y javaioFileOutputStream

IFSJavaFile estaacute basada en IFSFile sin embargo la interfaz de IFSJavaFile se parece maacutes a javaioFile quea IFSFile IFSFile es una alternativa de la clase IFSJavaFile

IBM Toolbox para Java 53

Puede obtener la lista de archivos de un directorio con el meacutetodo list() o el meacutetodo listFiles()v El meacutetodo listFiles() permite obtener un mejor rendimiento ya que recupera y almacena en la memoria

cacheacute la informacioacuten de cada uno de los archivos de la llamada inicial Posteriormente la informacioacutende cada uno de los archivos se recupera de la memoria cacheacute

v El meacutetodo list() recupera informacioacuten sobre cada uno de los archivos en una peticioacuten independiente loque hace que sea maacutes lento y que utilice maacutes recursos del servidor

Nota la utilizacioacuten de listFiles() significa que la informacioacuten de la memoria cacheacute puede quedarobsoleta por lo que puede que deba renovar los datos

Ejemplo coacutemo se utiliza IFSJavaFile

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El siguiente ejemplo muestra coacutemo se utiliza la clase IFSJavaFile Trabaje con DirFiletxt en la memoria flash del sistemaAS400 as400 = new AS400(flash)IFSJavaFile file = new IFSJavaFile(as400 DirFiletxt)

Determine el directorio padre del archivoString directory = filegetParent()

Determine el nombre del archivoString name = filegetName()

Determine el tamantildeo del archivolong length = filelength()

Determine cuaacutendo se modificoacute el archivo por uacuteltima vezDate date = new Date(filelastModified())

Suprima el archivoif (filedelete() == false)

Visualice el coacutedigo de errorSystemerrprintln(No se ha podido suprimir el archivo)

try

IFSFileOutputStream os =new IFSFileOutputStream(filegetSystem() file IFSFileOutputStreamSHARE_ALL false)

byte[] data = new byte[256]int i = 0for ( i lt datalength i++)

data[i] = (byte) ioswrite(data[i])

osclose()

catch (Exception e)

Systemerrprintln (Excepcioacuten + egetMessage())

Informacioacuten relacionadaJavadoc IFSJavaFile

54 IBM Toolbox para Java IBM Toolbox para Java

IFSFileInputStream

La clase IFSFileInputStream de IBM Toolbox para Java representa una corriente de entrada para leer datosde un archivo en el servidor

Al igual que en la clase IFSFile en IFSFileInputStream hay meacutetodos que duplican los meacutetodos deFileInputStream del paquete javaio Ademaacutes de estos meacutetodos IFSFileInputStream dispone de meacutetodosadicionales especiacuteficos para la plataforma IBM i La clase IFSFileInputStream permite a un programa Javahacer lo siguientev Abrir un archivo para lectura El archivo debe existir debido a que esta clase no crea archivos en el

servidor Puede utilizar un constructor que le permita especificar la modalidad de compartimiento dearchivo

v Determinar el nuacutemero de bytes de la corrientev Leer bytes de la corrientev Saltarse bytes de la corrientev Bloquear o desbloquear bytes de la corrientev Cerrar el archivo

Al igual que FileInputStream de javaio esta clase permite a un programa Java leer una corriente de bytesdel archivo El programa Java lee los bytes de modo secuencial con la uacutenica opcioacuten adicional de saltarsebytes de la corriente

Ademaacutes de los meacutetodos de FileInputStream IFSFileInputStream proporciona al programa Java lasopciones siguientesv Bloquear y desbloquear bytes de la corriente En IFSKey encontraraacute maacutes informacioacutenv Especificar una modalidad de compartimiento al abrir el archivo En Modalidades de compartimiento

encontraraacute maacutes informacioacuten

Ejemplo coacutemo se utiliza IFSFileInputStream

El ejemplo que sigue muestra coacutemo se utiliza la clase IFSFileInputStream Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Abra un objeto de archivo que represente el archivoIFSFileInputStream aFile = new IFSFileInputStream(sysmydir1mydir2myfile)

Determine el nuacutemero de bytes en el archivoint available = aFileavailable()

Asigne un almacenamiento intermedio que contenga los datosbyte[] data = new byte[10240]

Lea todo el archivo de 10 en 10 Kfor (int i = 0 i lt available i += 10240)

aFileread(data)

Cierre el archivoaFileclose()

Informacioacuten relacionadaJavadoc IFSFileInputStream

Clase IFSTextFileInputStream

IFSTextFileInputStream ha quedado en desuso y la sustituye la clase IFSFileReader

IBM Toolbox para Java 55

La clase IFSTextFileInputStream representa una corriente de datos de tipo caraacutecter leiacutedos en un archivoLos datos leiacutedos del objeto IFSTextFileInputStream se proporcionan al programa Java en un objeto StringJava por lo que siempre es Unicode Al abrir el archivo el objeto IFSTextFileInputStream determina elCCSID de los datos del archivo Si los datos estaacuten almacenados en una codificacioacuten distinta de Unicodeel objeto IFSTextFileInputStream convierte los datos de la codificacioacuten del archivo a Unicode antes dedaacuterselos al programa Java Si no es posible convertir los datos se lanza una excepcioacutenUnsupportedEncodingException

El ejemplo que sigue muestra coacutemo se utiliza la clase IFSTextFileInputStream Trabaje con File en

el mySystem del sistemaAS400 as400 = new AS400(mySystem)IFSTextFileInputStream file = new IFSTextFileInputStream(as400 File)

Lea los primeros cuatro caracteres del archivoString s = fileread(4)

Visualice los caracteres leiacutedos Lea los primeros cuatro caracteres del archivo De ser necesario el objeto IFSTextFileInputStream convierte los datos a UnicodeSystemoutprintln(s)

Cierre el archivofileclose()

Referencia relacionadaldquoIFSFileReaderrdquoUtilice esta clase para leer archivos de caracteres del sistema de archivos integrado

IFSFileReader

Utilice esta clase para leer archivos de caracteres del sistema de archivos integrado

IFSFileReader estaacute disentildeado para leer corrientes de caracteres IFSFileReader sustituye aIFSTextFileOutputStream

Ejemplo coacutemo se utiliza IFSFileReader

El ejemplo siguiente muestra coacutemo se utiliza IFSFileReaderimport javaioBufferedReader

Trabaje con File1 en el eniac del sistemaAS400 system = new AS400(eniac)IFSFile file = new IFSFile(system File1)BufferedReader reader = new BufferedReader(new IFSFileReader(file))

Lea la primera liacutenea del archivo convirtiendo caracteresString line1 = readerreadLine()

Visualice la serie leiacutedaSystemoutprintln(line1)

Cierre el lectorreaderclose()

Informacioacuten relacionadaJavadoc IFSFileReader

56 IBM Toolbox para Java IBM Toolbox para Java

Clase IFSFileOutputStream

La clase IFSFileOutputStream representa una corriente de salida para escribir datos en un archivo en elservidor

Al igual que en la clase IFSFile en IFSFileOutputStream hay meacutetodos que duplican los meacutetodos deFileOutputStream del paquete javaio IFSFileOutputStream dispone asimismo de meacutetodos adicionalesespeciacuteficos para el servidor La clase IFSFileOutputStream permite a un programa Java hacer lo siguientev Abrir un archivo para escritura El archivo si ya existe se sustituye Existen constructores que

permiten especificar la modalidad de compartimiento de archivo y si se ha antildeadido el contenido de unarchivo existente

v Escribir bytes en la corrientev Comprometer en el disco los bytes que se escriben en la corrientev Bloquear o desbloquear bytes de la corrientev Cerrar el archivo

Al igual que FileOutputStream de javaio esta clase permite a un programa Java escribir secuencialmenteuna corriente de bytes en el archivo

Ademaacutes de los meacutetodos de FileOutputStream IFSFileOutputStream proporciona al programa Java lasopciones siguientesv Bloquear y desbloquear bytes de la corriente En IFSKey encontraraacute maacutes informacioacutenv Especificar una modalidad de compartimiento al abrir el archivo En Modalidades de compartimiento

encontraraacute maacutes informacioacuten

Ejemplo coacutemo se utiliza IFSFileOutputStream

El siguiente ejemplo muestra coacutemo se utiliza la clase IFSFileOutputStream Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Abra un objeto de archivo que represente el archivoIFSFileOutputStream aFile =

new IFSFileOutputStream(sysmydir1mydir2myfile)

Escriba en el archivobyte i = 123aFilewrite(i)

Cierre el archivoaFileclose()

Javadoc IFSFileOutputStream

Clase IFSTextFileOutputStream

IFSTextFileOutputStream ha quedado en desuso y la sustituye la clase IFSFileWriter

La clase IFSTextFileOutputStream representa una corriente de datos de tipo caraacutecter que se estaacutenescribiendo en un archivo Los datos proporcionados al objeto IFSTextFileOutputStream estaacuten en unobjeto String Java por lo que la entrada siempre es Unicode Sin embargo el objetoIFSTextFileOutputStream puede convertir los datos a otro CCSID a medida que se escriben en el archivoEl comportamiento predeterminado es escribir caracteres Unicode en el archivo pero el programa Javapuede establecer el CCSID destino antes de que se abra el archivo En este caso el objetoIFSTextFileOutputStream convierte los caracteres de Unicode al CCSID especificado antes de escribirlosen el archivo Si no es posible convertir los datos se lanza una excepcioacutenUnsupportedEncodingException

IBM Toolbox para Java 57

Ejemplo coacutemo se utiliza IFSTextFileOutputStream

El ejemplo que sigue muestra coacutemo se utiliza la clase IFSTextFileOutputStream Trabaje con File en el mySystem del

sistemaAS400 as400 = new AS400(mySystem)IFSTextFileOutputStream file =

new IFSTextFileOutputStream(as400 File)

Escriba una serie (String) en el archivo Como no se ha especificado ninguacuten CCSID antes de escribir en el archivo los caracteres Unicode se escribiraacuten en el archivo En el archivo se etiquetaraacute indicando que tiene datos Unicodefilewrite(Hola a todos)

Cierre el archivofileclose()

Referencia relacionadaldquoIFSFileWriterrdquoUtilice IFSFileWriter para escribir en archivos de caracteres del sistema de archivos integradoIFSFileWriter estaacute disentildeado para escribir corrientes de caracteres

IFSFileWriter

Utilice IFSFileWriter para escribir en archivos de caracteres del sistema de archivos integradoIFSFileWriter estaacute disentildeado para escribir corrientes de caracteres

IFSFileWriter es el sustituto de IFSTextFileOutputStream

Ejemplo coacutemo se utiliza IFSFileWriter

El ejemplo siguiente muestra coacutemo se utiliza IFSFileWriterimport javaioPrintWriterimport javaioBufferedWriter

Trabaje con File1 en el mysystem del sistemaAS400 as400 = new AS400(mysystem)IFSFile file = new IFSFile(system File1)

PrintWriter writer =new PrintWriter(new BufferedWriter(new IFSFileWriter(file)))

Escriba una liacutenea de texto en el archivo convirtiendo caractereswriterprintln(text)

Cierre el archivowriterclose()

Informacioacuten relacionadaJavadoc IFSFileWriter

IFSRandomAccessFile

La clase IFSRandomAccessFile de IBM Toolbox para Java representa un archivo existente en el servidorpara la lectura y la escritura de datos

El programa Java puede leer y escribir datos de forma secuencial o aleatoria Al igual que en la claseIFSFile en IFSRandomAccessFile hay meacutetodos que duplican los meacutetodos de RandomAccessFile delpaquete javaio Ademaacutes de estos meacutetodos IFSRandomAccessFile dispone de meacutetodos adicionalesespeciacuteficos para IBM i Mediante IFSRandomAccessFile un programa Java puede llevar a cabo estastareas

58 IBM Toolbox para Java IBM Toolbox para Java

v Abrir un archivo para acceso de lectura escritura o lecturaescritura El programa Java puedeespecificar opcionalmente la modalidad de compartimiento de archivo y la opcioacuten de existencia

v Leer datos en el desplazamiento actual del archivov Escribir datos en el desplazamiento actual del archivov Obtener o establecer el desplazamiento actual del archivov Cerrar el archivo

Ademaacutes de los meacutetodos de la clase RandomAccessFile de javaio IFSRandomAccessFile proporciona alprograma Java las opciones siguientesv Comprometer en disco los bytes escritosv Bloquear y desbloquear bytes del archivov Bloquear y desbloquear bytes de la corriente En IFSKey encontraraacute maacutes informacioacutenv Especificar una modalidad de compartimiento al abrir el archivo En Modalidades de compartimiento

encontraraacute maacutes informacioacutenv Especificar la opcioacuten de existencia al abrir un archivo El programa Java puede elegir una de estas

posibilidadesndash Si el archivo existe abrirlo si el archivo no existe crearlondash Si el archivo existe sustituirlo si el archivo no existe crearlondash Si el archivo existe no realizar la apertura si el archivo no existe crearlondash Si el archivo existe abrirlo si el archivo no existe no realizar la aperturandash Si el archivo existe sustituirlo si el archivo no existe no realizar la apertura

Ejemplo coacutemo se utiliza IFSRandomAccessFile

El ejemplo que sigue muestra coacutemo se utiliza la clase IFSRandomAccessFile para escribir cuatro bytes aintervalos de 1 K en un archivo

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Abra un objeto de archivo que represente el archivoIFSRandomAccessFile aFile =

new IFSRandomAccessFile(sysmydir1myfile rw)

Establezca los datos que han de escribirsebyte i = 123

Escriba en el archivo 10 veces a intervalos de 1 Kfor (int j=0 jlt10 j++)

Mueva el desplazamiento actualaFileseek(j 1024)

Escriba en el archivo El desplazamiento actual avanza seguacuten el tamantildeo de la escrituraaFilewrite(i)

Cierre el archivoaFileclose()

Informacioacuten relacionadaJavadoc IFSRandomAccessFile

Clase IFSKey

Si el programa Java permite a otros programas acceder a un archivo simultaacuteneamente dicho programaJava puede bloquear bytes en el archivo por un tiempo Durante ese tiempo el programa tiene el uso

IBM Toolbox para Java 59

exclusivo de esa seccioacuten del archivo Cuando un bloqueo se realiza satisfactoriamente las clases delsistema de archivos integrado devuelven un objeto IFSKey

Este objeto se proporciona al meacutetodo unlock() para indicar cuaacuteles son los bytes que se han dedesbloquear Al cerrar el archivo el sistema desbloquea todos los bloqueos que auacuten quedan en el archivo(el sistema realiza un desbloqueo de todos los bloqueos que el programa no desbloqueoacute)

Ejemplo coacutemo se utiliza IFSKey

El ejemplo que sigue muestra coacutemo se utiliza la clase IFSKey Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Abra una corriente de entrada Este constructor se abre con share_all para que otros programas puedan abrir este archivoIFSFileInputStream aFile =

new IFSFileInputStream(sysmydir1mydir2myfile)

Bloquee el primer Kilobyte del archivo Ahora ninguna otra instancia puede leer estos bytesIFSKey key = aFilelock(1024)

Lea el primer Kilobyte del archivobyte data[] = new byte[1024]aFileread(data)

Desbloquee los bytes del archivoaFileunlock(key)

Cierre el archivoaFileclose()

Informacioacuten relacionadaJavadoc IFSKey

Modalidad de compartimiento de archivo

El programa Java puede especificar una modalidad de compartimiento al abrir un archivo Puede ser queel programa permita a los demaacutes programas abrir el archivo simultaacuteneamente o bien que tenga un accesoexclusivo al archivo

El ejemplo que sigue muestra coacutemo se especifica una modalidad de compartimiento de archivo Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Abra un objeto de archivo que represente el archivo Dado que este programa especifica share-none los demaacutes intentos abiertos fallaraacuten hasta que se cierre esta instanciaIFSFileOutputStream aFile =

new IFSFileOutputStream(sysmydir1mydir2myfileIFSFileOutputStreamSHARE_NONEfalse)

Lleve a cabo operaciones en el archivo

Cierre el archivo Ahora las demaacutes peticiones abiertas se ejecutaraacuten correctamenteaFileclose()

60 IBM Toolbox para Java IBM Toolbox para Java

IFSSystemView

IFSSystemView proporciona una pasarela para el sistema de archivos integrado de IBM i que se utiliza alconstruir objetos javaxswingJFileChooser

JFileChooser es un procedimiento Java estaacutendar para construir diaacutelogos a fin de recorrer y seleccionararchivos

Ejemplo coacutemo se utiliza IFSSystemView

El ejemplo siguiente muestra coacutemo se utiliza IFSSystemViewimport comibmas400accessAS400import comibmas400accessIFSJavaFileimport comibmas400accessIFSSystemViewimport javaxswingJFileChooserimport javaawtFrame

Trabaje con el directorio Dir en el sistema myAS400AS400 system = new AS400(myAS400)IFSJavaFile dir = new IFSJavaFile(system Dir)

JFileChooser chooser = new JFileChooser(dir new IFSSystemView(system))Frame parent = new Frame()int returnVal = choosershowOpenDialog(parent)if (returnVal == JFileChooserAPPROVE_OPTION)

IFSJavaFile chosenFile = (IFSJavaFile)(choosergetSelectedFile())Systemoutprintln(Ha seleccionado el archivo denominado +

chosenFilegetName())

Informacioacuten relacionadaJavadoc IFSSystemView

Clase ISeriesNetServerLa clase ISeriesNetServer representa el servicio NetServer en un servidor Esta clase permite al usuarioconsultar y modificar el estado y la configuracioacuten del NetServer

ISeriesNetServer sustituye a la clase NetServerInformacioacuten relacionadaJavadoc ISeriesNetServer

Clase JavaApplicationCallLa clase JavaApplicationCall proporciona la posibilidad de que el cliente utilice la JVM del servidor paraejecutar un programa Java que reside en el servidor

Despueacutes de establecer una conexioacuten con el servidor desde el cliente la clase JavaApplicationCall lepermite realizar estas tareas de configuracioacuten1 Establecer la variable de entorno CLASSPATH en el servidor con el meacutetodo setClassPath()2 Definir los paraacutemetros del programa con el meacutetodo setParameters()3 Ejecutar el programa con run()4 Enviar una entrada desde el cliente al programa Java El programa Java lee la entrada por medio de

una entrada estaacutendar que se establece con el meacutetodo sendStandardInString() La salida estaacutendar y lasalida de error estaacutendar se pueden redirigir desde el programa Java al cliente por medio degetStandardOutString() y getStandardErrorString()

JavaApplicationCall es una clase a la que se llama desde el programa Java Sin embargo IBM Toolboxpara Java tambieacuten proporciona programas de utilidad para llamar a programas Java que residen en el

IBM Toolbox para Java 61

servidor Estos programas de utilidad son programas Java completos que se pueden ejecutar desde laestacioacuten de trabajo Puede encontrar maacutes informacioacuten en la clase RunJavaApplication

Ejemplo

El ejemplo de la documentacioacuten de consulta de javadocs de JavaApplicationCall muestra coacutemo ejecutaren el servidor un programa (con la salida iexclHola a todos) desde el cliente

JavaApplicationCallInformacioacuten relacionadaJavadoc JavaApplicationCall

Clases JDBCJDBC es una interfaz de programas de aplicacioacuten (API) incluida en la plataforma Java que permite a losprogramas Java conectar con una gran variedad de bases de datos

Interfaces soportadas

La tabla siguiente muestra las interfaces JDBC soportadas y la API necesaria para utilizarlas

Interfaz JDBC soportada API necesaria

Blob proporciona acceso a los objetos binarios de grantamantildeo (BLOB)

Nuacutecleo de JDBC 21 soporte mejorado en JDBC 40

CallableStatement ejecuta procedimientos almacenadosde SQL

JDK 11 soporte mejorado en JDBC 40

Clob proporciona acceso a los objetos de tipo caraacutecter degran tamantildeo (CLOB)

Nuacutecleo de JDBC 21 soporte mejorado en JDBC 40

Connection representa una conexioacuten con una base dedatos especiacutefica

JDK 11 soporte mejorado en JDBC 40

ConnectionPool representa una agrupacioacuten de objetosConnection

Paquete opcional de JDBC 20

ConnectionPoolDataSource representa una faacutebrica deobjetos AS400JDBCPooledConnection reunidos en unaagrupacioacuten

Paquete opcional de JDBC 20

DatabaseMetaData proporciona informacioacuten acerca de labase de datos como conjunto

JDK 11 soporte mejorado en JDBC 40

DataSource representa una faacutebrica de conexiones de basede datos

Paquete opcional de JDBC 20 soporte mejorado en JDBC40

Driver crea la conexioacuten y devuelve informacioacuten acerca dela versioacuten del controlador

JDK 11

ParameterMetaData ofrece la posibilidad de obtenerinformacioacuten acerca de los tipos y las propiedades de losparaacutemetros de un objeto PreparedStatement

API de JDBC 30 soporte mejorado en JDBC 40

PooledConnection proporciona ganchos para la gestioacutende agrupaciones de conexiones

Paquete opcional de JDBC 20 soporte mejorado en JDBC40

PreparedStatement ejecuta sentencias SQL compiladas JDK 11 soporte mejorado en JDBC 40

ResultSet proporciona acceso a una tabla de datos que segenera mediante la ejecucioacuten de una consulta SQL o elmeacutetodo catalog de DatabaseMetaData

JDK 11 soporte mejorado en JDBC 40

ResultSetMetaData proporciona informacioacuten sobre unconjunto de resultados (ResultSet) especiacutefico

JDK 11 soporte mejorado en JDBC 40

RowId representa un valor ROWID de SQL JDBC 40

62 IBM Toolbox para Java IBM Toolbox para Java

Interfaz JDBC soportada API necesaria

RowSet es un conjunto de filas conectado que encapsulaun conjunto de resultados (ResultSet)

Paquete opcional de JDBC 20

Savepoint proporciona un control maacutes especiacutefico en lastransacciones

API JDBC 30

SQLXML representa un valor XML de SQL JDBC 40

Statement ejecuta sentencias SQL y obtiene losresultados

JDK 11 soporte mejorado en JDBC 40

StatementEvent se enviacutea a todos losStatementEventListeners que se han registrado en unaPooledConnection Eso se produce cuando el controladordetermina que una PreparedStatement que estaacute asociadacon la PooledConnection se ha cerrado o el controladordetermina que no es vaacutelida

StatementEventListener registra las notificaciones deeventos producidos en PreparedStatements que seencuentran en la agrupacioacuten Statement

JDBC 40

XAConnection es una conexioacuten de base de datos queparticipa en transacciones XA globales

Paquete opcional de JDBC 20

XAResource es un gestor de recursos destinado a su usoen las transacciones XA

Paquete opcional de JDBC 20

Referencia relacionadaldquoJDBCrdquo en la paacutegina 256JDBC es una interfaz de programas de aplicacioacuten (API) incluida en la plataforma Java que permite a losprogramas Java conectar con una gran variedad de bases de datosldquoEjemplo coacutemo se utiliza JDBCPopulate para crear y llenar con datos una tablardquo en la paacutegina 428Este programa utiliza el controlador JDBC de IBM Toolbox para Java para crear y llenar una tablaldquoEjemplo coacutemo se utiliza JDBCQuery para consultar una tablardquo en la paacutegina 439Este programa utiliza el controlador JDBC de IBM Toolbox para Java para consultar una tabla y enviar sucontenido a la salidaInformacioacuten relacionada

JTOpen La versioacuten de coacutedigo fuente abierto de IBM Toolbox para JavaJavadoc AS400JDBCConnectionPoolDataSourceJavadoc AS400JDBCPooledConnectionRowID

Clase AS400JDBCBlob

Puede utilizar un objeto AS400JDBCBlob para acceder a objetos binarios de gran tamantildeo (BLOB) comopor ejemplo los archivos de sonido (wav) o los archivos de imagen (gif)

La diferencia clave entre la clase AS400JDBCBlob y la clase AS400JDBCBlobLocator es el lugar dealmacenamiento del blob Con la clase AS400JDBCBlob el blob se almacena en la base de datos que inflael tamantildeo del archivo de base de datos La clase AS400JDBCBlobLocator almacena en el archivo de basede datos un localizador (es como si fuese un puntero) que sentildeala al lugar en el que se encuentra el blob

Con la clase AS400JDBCBlob puede utilizarse la propiedad de umbral de lob Esta propiedad especificael tamantildeo maacuteximo (en kilobytes) de LOB (objeto de gran tamantildeo) que puede recuperarse como parte deun conjunto de resultados Los LOB cuyo tamantildeo sobrepasa este umbral se recuperan en fragmentosutilizando una comunicacioacuten adicional con el servidor Los umbrales de LOB de mayor tamantildeo reducenla frecuencia de la comunicacioacuten con el servidor pero bajan maacutes datos de LOB aunque dichos datos no

IBM Toolbox para Java 63

se utilicen Los umbrales de LOB de menor tamantildeo pueden incrementar la frecuencia de la comunicacioacutencon el servidor pero uacutenicamente bajan los datos de LOB seguacuten se necesiten En Propiedades de JDBCencontraraacute informacioacuten sobre las propiedades adicionales que estaacuten disponibles

Mediante la clase AS400JDBCBlob se pueden realizar estas tareasv Devolver el blob entero como una corriente de bytes sin interpretarv Devolver parte del contenido del blobv Devolver la longitud del blobv Crear una corriente de datos binarios para escribir en el blobv Escribir una matriz de bytes en el blobv Escribir la totalidad o una parte de una matriz de bytes en el blobv Truncar el blob

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase AS400JDBCBlob para leerinformacioacuten de un blob y actualizar un blob

Ejemplo coacutemo se utiliza la clase AS400JDBCBlob para leer informacioacuten de un blobBlob blob = resultSetgetBlob (1)long length = bloblength ()byte[] bytes = blobgetBytes(1 (int) length)

Ejemplo coacutemo se utiliza la clase AS400JDBCBlob para actualizar un blobResultSet rs = statementexecuteQuery (SELECT BLOB FROM MYTABLE)rsabsolute(5)Blob blob = rsgetBlob(1)

Cambie los bytes del blob empezando por el byte nuacutemero 7 del blobblobsetBytes (7 new byte[] (byte) 57 (byte) 58 (byte) 98)

Actualice el blob en el conjunto de resultados cambiando el blob que empieza en el byte nuacutemero 7 del blob (empezando a contar a partir del 1) y truncando el blob al final de los bytes actualizados (ahora el blob tiene 9 bytes)rsupdateBlob(1 blob)

Actualice la base de datos con el cambio Asiacute se cambiaraacute el blob en la base de datos empezando en el byte nuacutemero 7 del blob y truncando el blob al final de los bytes actualizadosrsupdateRow()rsclose()

Clase AS400JDBCBlobLocator

Puede utilizar un objeto AS400JDBCBlobLocator para acceder a objetos binarios de gran tamantildeo

Mediante la clase AS400JDBCBlobLocator se pueden realizar estas tareasv Devolver el blob entero como una corriente de bytes sin interpretarv Devolver parte del contenido del blobv Devolver la longitud del blobv Crear una corriente de datos binarios para escribir en el blobv Escribir una matriz de bytes en el blobv Escribir la totalidad o una parte de una matriz de bytes en el blobv Truncar el blob

64 IBM Toolbox para Java IBM Toolbox para Java

Javadoc AS400JDBCBlobJavadoc AS400JDBCBlobLocator

Interfaz CallableStatement

Puede utilizar un objeto CallableStatement para ejecutar procedimientos almacenados de SQL Elprocedimiento almacenado al que se llama debe estar ya almacenado en la base de datos El objetoCallableStatement no contiene el procedimiento almacenado sino que uacutenicamente llama a dichoprocedimiento

Un procedimiento almacenado puede devolver uno o varios objetos ResultSet y utilizar paraacutemetros INOUT e INOUT Utilice ConnectionprepareCall() para crear objetos CallableStatement nuevos

El objeto CallableStatement permite someter a una base de datos varios mandatos SQL como si fuesen unsolo grupo mediante el uso del soporte de proceso por lotes Puede obtener un mejor rendimientoempleando el soporte de proceso por lotes ya que normalmente se tarda menos en procesar un grupo deoperaciones que en procesarlas una a una

CallableStatement permite obtener y establecer paraacutemetros y columnas por nombre aunque el uso deliacutendice de columna permite conseguir un mejor rendimiento

Ejemplo coacutemo se utiliza CallableStatement

El ejemplo que sigue muestra coacutemo se utiliza la interfaz CallableStatement Coneacutectese al servidorConnection c = DriverManagergetConnection(jdbcas400mySystem)

Cree el objeto CallableStatement Este objeto precompila la llamada especificada en un procedimiento almacenado Los signos de interrogacioacuten indican doacutende deben establecerse los paraacutemetros de entrada y doacutende pueden recuperarse los paraacutemetros de salida Los primeros dos paraacutemetros son paraacutemetros de entrada y el tercer paraacutemetro es un paraacutemetro de salidaCallableStatement cs = cprepareCall(CALL MYLIBRARYADD ( ))

Establezca paraacutemetros de entradacssetInt (1 123)cssetInt (2 234)

Registre el tipo del paraacutemetro de salidacsregisterOutParameter (3 TypesINTEGER)

Ejecute el procedimiento almacenadocsexecute ()

Obtenga el valor del paraacutemetro de salidaint sum = csgetInt (3)

Cierre CallableStatement y la conexioacutencsclose()cclose()

Javadoc AS400JDBCCallableStatement

Clase AS400JDBCClob

Puede utilizar un objeto AS400JDBCClob para acceder a los objetos de tipo caraacutecter de gran tamantildeo(CLOB) como por ejemplo los grandes documentos

La diferencia clave entre la clase AS400JDBCClob y la clase AS400JDBCClobLocator es el lugar dealmacenamiento del clob Con la clase AS400JDBCClob el clob se almacena en la base de datos que infla

IBM Toolbox para Java 65

el tamantildeo del archivo de base de datos La clase AS400JDBCClobLocator almacena en el archivo de basede datos un localizador (es como si fuese un puntero) que sentildeala al lugar en el que se encuentra el clob

Con la clase AS400JDBCClob puede utilizar la propiedad de umbral de lob Esta propiedad especifica eltamantildeo maacuteximo (en kilobytes) de LOB (objeto de gran tamantildeo) que puede recuperarse como parte de unconjunto de resultados Los LOB cuyo tamantildeo sobrepasa este umbral se recuperan en fragmentosutilizando una comunicacioacuten adicional con el servidor Los umbrales de LOB de mayor tamantildeo reducenla frecuencia de la comunicacioacuten con el servidor pero bajan maacutes datos de LOB aunque dichos datos nose utilicen Los umbrales de LOB de menor tamantildeo pueden incrementar la frecuencia de la comunicacioacutencon el servidor pero uacutenicamente bajan los datos de LOB seguacuten se necesiten En ldquoPropiedades JDBC deIBM Toolbox para Javardquo en la paacutegina 266 encontraraacute informacioacuten sobre las propiedades adicionales queestaacuten disponibles

Mediante la clase AS400JDBCClob se pueden realizar estas tareasv Devolver el clob entero como una corriente de caracteres ASCIIv Devolver el contenido del clob como una corriente de caracteresv Devolver una parte del contenido del clobv Devolver la longitud del clobv Crear una corriente de caracteres Unicode o una corriente de caracteres ASCII para escribir en el clobv Escribir una serie en el clobv Truncar el clob

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase AS400JDBCClob para leerinformacioacuten de un clob y actualizar un clob

Ejemplo coacutemo se utiliza la clase AS400JDBCClob para leer informacioacuten de un clobClob clob = rsgetClob(1)int length = cloblength()String s = clobgetSubString(1 (int) length)

Ejemplo coacutemo se utiliza la clase AS400JDBCClob para actualizar un clobResultSet rs = statementexecuteQuery (SELECT CLOB FROM MYTABLE)rsabsolute(4)Clob clob = rsgetClob(1)

Cambie los caracteres del clob empezando por el tercer caraacutecter del clobclobsetString (3 Small)

Actualice el clob en el conjunto de resultados empezando por el tercer caraacutecter del clob y truncando el clob al final de la serie de actualizacioacuten (el clob ahora tiene 7 caracteres)rsupdateClob(1 clob)

Actualice la base de datos con el clob actualizado Asiacute se cambiaraacute el clob en la base de datos empezando en el tercer caraacutecter del clob y truncando el clob al final de la serie de actualizacioacutenrsupdateRow()rsclose()

Clase AS400JDBCClobLocator

Puede utilizar un objeto AS400JDBCClobLocator para acceder a los objetos de tipo caraacutecter de grantamantildeo (CLOB)

66 IBM Toolbox para Java IBM Toolbox para Java

Mediante la clase AS400JDBCClobLocator se pueden realizar estas tareasv Devolver el clob entero como una corriente de caracteres ASCIIv Devolver el clob entero como una corriente de caracteresv Devolver una parte del contenido del clobv Devolver la longitud del clobv Crear una corriente de caracteres Unicode o una corriente de caracteres ASCII para escribir en el clobv Escribir una serie en el clobv Truncar el clob

Javadoc AS400JDBCClobJavadoc AS400JDBCClobLocator

Clase AS400JDBCConnection

La clase AS400JDBCConnection proporciona una conexioacuten JDBC con una base de datos DB2 para IBM iespeciacutefica

Utilice DriverManagergetConnection() para crear nuevos objetos AS400JDBCConnection Para obtenermaacutes informacioacuten consulte ldquoRegistro del controlador JDBCrdquo en la paacutegina 80

Hay muchos paraacutemetros opcionales que pueden especificarse al crearse la conexioacuten Las propiedadespueden especificarse como parte del URL o en un objeto javautilProperties En ldquoPropiedades JDBC deIBM Toolbox para Javardquo en la paacutegina 266 encontraraacute una lista completa de las propiedades soportadaspor AS400JDBCDriver

Nota una conexioacuten puede contener como maacuteximo 9999 sentencias abiertas

AS400JDBCConnection incluye soporte para los puntos de salvar y la posibilidad de retencioacuten a nivel delas sentencias asiacute como soporte limitado para la devolucioacuten de claves generadas automaacuteticamente

Para utilizar los tickets de kerberos establezca uacutenicamente el nombre de sistema (y no la contrasentildea) enel objeto URL JDBC La identidad del usuario se recupera mediante la infraestructura JGSS (Java GenericSecurity Services) por lo que tampoco necesita especificar un usuario en el URL JDBC Solo puedeestablecer un meacutetodo de autenticacioacuten en un objeto AS400JDBCConnection a la vez Al establecer lacontrasentildea se borran los tickets de kerberos o los siacutembolos de perfil Para obtener maacutes informacioacutenconsulte ldquoClase AS400rdquo en la paacutegina 21

Mediante la clase AS400JDBCConnection se pueden realizar estas tareasv Crear una sentencia (objetos Statement PreparedStatement o CallableStatement)v Crear una sentencia que tenga un tipo de conjunto de resultados y una concurrencia especiacuteficos

(objetos Statement PreparedStatement o CallableStatement)v Comprometer y retrotraer los cambios efectuados en la base de datos y liberar los bloqueos de base de

datos que estaacuten retenidos actualmentev Cerrar la conexioacuten y los recursos del servidor de inmediato en lugar de esperar a que se liberen

automaacuteticamentev Establecer la posibilidad de retencioacuten y obtener la posibilidad de retencioacuten de la conexioacutenv Establecer el aislamiento de transaccioacuten y obtener el aislamiento de transaccioacuten de la conexioacutenv Obtener los metadatos de la conexioacutenv Activar o desactivar el compromiso automaacuteticov Obtener el identificador de trabajo del trabajo servidor de host que corresponde a la conexioacuten

Si utiliza JDBC 30 y se conecta a un servidor que ejecuta IBM i 52 o posterior puede emplearAS400JDBCConnection para llevar a cabo las acciones siguientes

IBM Toolbox para Java 67

v Crear una sentencia con una posibilidad de retencioacuten de conjunto de resultados especiacutefica (objetoStatement PreparedStatement o CallableStatement)

v Crear una sentencia preparada que devuelva las claves generadas automaacuteticamente (cuando se llama agetGeneratedKeys() en el objeto Statement)

v Utilizar puntos de salvar que ofrecen un control maacutes especiacutefico de las transaccionesndash Establecer puntos de salvarndash Retrotraer puntos de salvarndash Liberar puntos de salvar

Javadoc AS400JDBCConnection

AS400JDBCConnectionPool

La clase AS400JDBCConnectionPool representa una agrupacioacuten de objetos AS400JDBCConnectiondisponibles para su uso por un programa Java como parte del soporte de IBM Toolbox para Java para laAPI JDBC 20 Optional Package

Puede emplear un objeto AS400JDBCConnectionPoolDataSource para especificar las propiedades de lasconexiones que se crean en la agrupacioacuten como se muestra en el ejemplo siguiente

No podraacute cambiar el origen de datos de la agrupacioacuten de conexiones una vez que haya solicitado unaconexioacuten y la agrupacioacuten esteacute en uso Para restablecer el origen de datos de la agrupacioacuten de conexionesprimero debe efectuar una llamada a close() en la agrupacioacuten

Para devolver conexiones a un objeto AS400JDBCConnectionPool utilice close() en el objetoAS400JDBCConnection

Nota si las conexiones no se devuelven a la agrupacioacuten el tamantildeo de la agrupacioacuten de conexionessigue creciendo y las conexiones no se reutilizan

Para establecer propiedades en la agrupacioacuten utilice los meacutetodos heredados de ConnectionPool Entre laspropiedades que puede establecer se encuentran las siguientesv Nuacutemero maacuteximo de conexiones permitidas en la agrupacioacutenv Tiempo maacuteximo de vida de una conexioacutenv Tiempo maacuteximo de inactividad de una conexioacuten

Tambieacuten puede registrar objetos AS400JDBCConnectionPoolDataSource mediante un proveedor deservicio JNDI (Java Naming and Directory Interface) Para obtener maacutes informacioacuten acerca de losproveedores de servicios JNDI consulte los enlaces de referencia de IBM Toolbox para Java

Ejemplo coacutemo se utiliza la agrupacioacuten de conexiones

El ejemplo siguiente obtiene de JNDI un origen de datos de agrupacioacuten de conexiones y lo emplea paracrear una agrupacioacuten de conexiones con 10 conexiones

Obtenga un objeto AS400JDBCConnectionPoolDataSource de JNDI (se supone que el entorno JNDI estaacute establecido)Context context = new InitialContext(environment)AS400JDBCConnectionPoolDataSource datasource =

(AS400JDBCConnectionPoolDataSource)contextlookup(jdbcmyDatabase)

Cree un objeto AS400JDBCConnectionPoolAS400JDBCConnectionPool pool = new AS400JDBCConnectionPool(datasource)

Antildeada 10 conexiones a la agrupacioacuten que la aplicacioacuten pueda utilizar (las conexiones fiacutesicas de base de datos se crean

68 IBM Toolbox para Java IBM Toolbox para Java

seguacuten el origen de datos)poolfill(10)

Obtenga un handle con una conexioacuten de base de datos de la agrupacioacutenConnection connection = poolgetConnection()

Realizar diversas consultasactualizaciones en la base de datos

Cierre el handle de la conexioacuten para devolverla a la agrupacioacutenconnectionclose()

La aplicacioacuten trabaja con varias aplicaciones maacutes de la agrupacioacuten

Cierre la agrupacioacuten para liberar todos los recursospoolclose()

Javadoc AS400JDBCConnectionPoolJavadoc AS400JDBCConnectionPoolJavadoc AS400JDBCConnectionPoolDataSource

Clase AS400JDBCManagedConnectionPoolDataSource

La agrupacioacuten de conexiones JDBC es una agrupacioacuten de conexiones gestionadas que permite reutilizarconexiones

La clase AS400JDBCManagedConnectionPoolDataSource simplifica el mantenimiento de agrupaciones deconexiones eliminando la necesidad de que las aplicaciones de usuario implementen su propio coacutedigo degestioacuten La agrupacioacuten de conexiones se utiliza en combinacioacuten con el mecanismo de la interfazDataSource de JDBC La clase AS400JDBCManagedConnectionPoolDataSource contiene unaimplementacioacuten de la interfaz javaxsqlDataSource Esta clase gestiona las funciones del mecanismo deagrupacioacuten de conexiones y permite acceder a eacutel igual que a un DataSource habitual La configuracioacuten yutilizacioacuten del gestor de agrupaciones de conexiones JDBC autogestionadas implica la utilizacioacuten de JNDI(Java Naming and Directory Interface) para enlazar el origen de datos gestionado de la agrupacioacuten deconexiones Para que la agrupacioacuten de conexiones JDBC autogestionada funcione es necesario JNDI

Estas propiedades permiten configurar los atributos de la agrupacioacuten de conexionesv InitialPoolSizev MinPoolSizev MaxPoolSizev MaxLifetimev MaxIdleTimev PropertyCyclev ReuseConnections

Para obtener maacutes informacioacuten consulte los Javadocs sobre los meacutetodos setX() siendo X la propiedad

Ejemplos coacutemo se utiliza la clase AS400JDBCManagedConnectionPoolDataSource

Estos ejemplos ilustran la utilizacioacuten de la clase AS400JDBCManagedConnectionPoolDataSource La claseAS400JDBCManagedConnectionPoolDataSource simplifica el mantenimiento de agrupaciones deconexiones eliminando la necesidad de que las aplicaciones de usuario implementen su propio coacutedigo degestioacuten

Nota al utilizar los ejemplos de coacutedigo acepta los teacuterminos del ldquoInformacioacuten sobre licencia de coacutedigo yexencioacuten de responsabilidadrdquo en la paacutegina 590

IBM Toolbox para Java 69

Ejemplo 1

Este breve ejemplo muestra la utilizacioacuten baacutesica de la claseAS400JDBCManagedConnectionPoolDataSourceimport javaxnamingContextimport javaxnamingInitialContextimport javaxsqlDataSource

import comibmas400accessAS400JDBCManagedConnectionPoolDataSourceimport comibmas400accessAS400JDBCManagedDataSource

public class TestJDBCConnPoolSnippet

void test()

AS400JDBCManagedConnectionPoolDataSource cpds0 = new AS400JDBCManagedConnectionPoolDataSource()

Establecer propiedades generales de origen de datos Tenga en cuenta que tanto el origen de datos de agrupacioacuten de conexiones (CPDS) como el origen de datos gestionado (MDS) tienen estas propiedades y pueden tener valores diferentescpds0setServerName(host)cpds0setDatabaseName(host)iasp puede especificarse aquiacutecpds0setUser(userid)cpds0setPassword(password)

cpds0setSavePasswordWhenSerialized(true)

Establecer propiedades especiacuteficas de agrupacioacuten de conexionescpds0setInitialPoolSize(initialPoolSize_)cpds0setMinPoolSize(minPoolSize_)cpds0setMaxPoolSize(maxPoolSize_)cpds0setMaxLifetime((int)(maxLifetime_1000)) convertir a segundoscpds0setMaxIdleTime((int)(maxIdleTime_1000)) convertir a segundoscpds0setPropertyCycle((int)(propertyCycle_1000)) convertir a segundoscpds0setReuseConnections(false) no reutilizar conexiones

Establecer la faacutebrica de contexto inicial que debe utilizarseSystemsetProperty(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory)

Obtener el contexto inicial JNDIContext ctx = new InitialContext()

Nota a continuacioacuten figura un procedimiento alternativo para establecer las propiedades de contexto localmente Properties env = new Properties() envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory) Contexto ctx = new InitialContext(env)

ctxrebind(mydatasource cpds0) Ahora pueden realizarse buacutesquedas en cpds por el nombre mydatasource

Crear un objeto DataSource estaacutendar que haga referencia a eacutel

AS400JDBCManagedDataSource mds0 = new AS400JDBCManagedDataSource()mds0setDescription(DataSource que da soporte a la agrupacioacuten de conexiones)mds0setDataSourceName(mydatasource)ctxrebind(ConnectionPoolingDataSource mds0)

DataSource dataSource_ = (DataSource)ctxlookup(ConnectionPoolingDataSource)

AS400JDBCManagedDataSource mds_ = (AS400JDBCManagedDataSource)dataSource_

boolean isHealthy = mds_checkPoolHealth(false) comprobar el estado de la agrupacioacuten

Connection c = dataSource_getConnection()

Ejemplo 2

Este ejemplo muestra maacutes detalles acerca de la utilizacioacuten de la claseAS400JDBCManagedConnectionPoolDataSource

70 IBM Toolbox para Java IBM Toolbox para Java

import javaawtTextAreaimport javaioBufferedReaderimport javaioFileimport javaioFileReaderimport javaioFileInputStreamimport javaioFileOutputStreamimport javaioOutputStreamimport javaioPrintStreamimport javautilVectorimport javautilProperties

import javasqlConnectionimport javaxsqlDataSourceimport javasqlResultSetimport javasqlStatementimport javaxnamingimport javautilDateimport javautilArrayListimport javautilRandomimport comibmas400accessAS400import comibmas400accessAS400JDBCManagedConnectionPoolDataSourceimport comibmas400accessAS400JDBCManagedDataSourceimport comibmas400accessTrace

public class TestJDBCConnPool

private static final boolean DEBUG = false

Si activa este indicador aseguacuterese de activar tambieacuten el indicador siguiente AS400JDBCConnectionTESTING_THREAD_SAFETYprivate static final boolean TESTING_THREAD_SAFETY = false

private static String useridprivate static String passwordprivate static String host

Nota a efectos de coherencia todos los valores de tiempo se almacenan en unidades de milisegundosprivate int initialPoolSize_ inicial de conexiones en la agrupacioacutenprivate int minPoolSize_ miacuten de conexiones en la agrupacioacutenprivate int maxPoolSize_ maacutex de conexiones en la agrupacioacutenprivate long maxLifetime_ maacutex de tiempo de vida (msegs) de conexiones en la agrupacioacutenprivate long maxIdleTime_ maacutex de tiempo de desocupacioacuten (msegs) de conexiones disponibles en la agrupacioacutenprivate long propertyCycle_ frecuencia de mantenimiento de agrupacioacuten (msegs)

private int numDaemons_ de daemons de peticionario que deben crearseprivate static long timeToRunDaemons_ duracioacuten total (msegs) de ejecucioacuten de los daemonsprivate long daemonMaxSleepTime_ tiempo maacutex (msegs) para latencia de daemons de peticionario en cada cicloprivate long daemonMinSleepTime_ tiempo miacuten (msegs) para latencia de daemons de peticionario en cada cicloprivate long poolHealthCheckCycle_ de msegs entre llamadas a checkPoolHealth()

private boolean keepDaemonsAlive_ = true Si es false los daemons se cierran

private DataSource dataSource_private AS400JDBCManagedDataSource mds_

private final Object daemonSleepLock_ = new Object()

private Random random_ = new Random()

static

try ClassforName(comibmas400accessAS400JDBCDriver)

catch ( Exception e)

Systemoutprintln(Imposible registrar el controlador JDBC)Systemexit (0)

public static void main(String[] args)

host = args[0]userid = args[1]password = args[2]timeToRunDaemons_ = (new Integer(args[3]))intValue() 1000 milisegundosargs[3]=tiempo de ejecucioacuten en segundos

IBM Toolbox para Java 71

TestJDBCConnPool cptest = new TestJDBCConnPool()

cptestsetup()cptestrunTest()

public void setup()

try

if (DEBUG)Systemoutprintln(iquestel distintivo TESTING_THREAD_SAFETY

+ (es TESTING_THREAD_SAFETY true false))

if (TESTING_THREAD_SAFETY)

Ajustar los valores para realizar pruebas de utilizacioacuten intensiva de hebras NOTA se presupone que la clase AS400JDBCConnection tambieacuten se ha modificado para

no establecer conexiones reales con un servidorreal

Para ello edite AS400JDBCConnectionjava cambiando su indicador TESTING_THREAD_SAFETY a rsquofalsersquo y vuelva a compilar

minPoolSize_ = 100maxPoolSize_ = 190initialPoolSize_ = 150 este valor debe restablecerse en maxPoolSize_numDaemons_ = 75if (timeToRunDaemons_ == 0)

timeToRunDaemons_ = 1801000 180 segundos == 3 minutos

else Establecer valores maacutes conservadores ya que van a establecerse conexiones reales con un

servidor real y no deseamos monopolizar el servidorminPoolSize_ = 5maxPoolSize_ = 15initialPoolSize_ = 9numDaemons_ = 4if (timeToRunDaemons_ == 0)

timeToRunDaemons_ = 151000 15 segundos

maxLifetime_ = (int)timeToRunDaemons_ 3maxIdleTime_ = (int)timeToRunDaemons_ 4propertyCycle_ = timeToRunDaemons_ 4poolHealthCheckCycle_ = Mathmin(timeToRunDaemons_ 4 20601000) como miacutenimo una vez cada 20 minutos (maacutes frecuentemente si el tiempo de ejecucioacuten es maacutes corto)daemonMaxSleepTime_ = Mathmin(timeToRunDaemons_ 3 101000) como maacuteximo 10 segundos (menos si el tiempo de ejecucioacuten es maacutes corto)daemonMinSleepTime_ = 20 milisegundos

if (DEBUG)Systemoutprintln(setup Construyendo

+ AS400JDBCManagedConnectionPoolDataSource (cpds0))AS400JDBCManagedConnectionPoolDataSource cpds0 =

new AS400JDBCManagedConnectionPoolDataSource()

Establecer propiedades de origen de datos Tenga en cuenta que tanto CPDS como MDS tienen estas propiedades y pueden tener valores diferentescpds0setServerName(host)cpds0setDatabaseName(host)iasp puede especificarse aquiacutecpds0setUser(userid)cpds0setPassword(password)

cpds0setSavePasswordWhenSerialized(true)

Establecer propiedades especiacuteficas de agrupacioacuten de conexionescpds0setInitialPoolSize(initialPoolSize_)cpds0setMinPoolSize(minPoolSize_)cpds0setMaxPoolSize(maxPoolSize_)cpds0setMaxLifetime((int)(maxLifetime_1000)) convertir a segundoscpds0setMaxIdleTime((int)(maxIdleTime_1000)) convertir a segundoscpds0setPropertyCycle((int)(propertyCycle_1000)) convertir a segundoscpds0setReuseConnections(false) no reutilizar conexiones

Establecer la faacutebrica de contexto inicial que debe utilizarseSystemsetProperty(ContextINITIAL_CONTEXT_FACTORY

comsunjndifscontextRefFSContextFactory)

Obtener el contexto inicial JNDI

72 IBM Toolbox para Java IBM Toolbox para Java

Context ctx = new InitialContext()

Nota a continuacioacuten figura un procedimiento alternativo para establecer las propiedades de contexto localmente Properties env = new Properties() envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory) Contexto ctx = new InitialContext(env)

ctxrebind(mydatasource cpds0) Ahora pueden realizarse buacutesquedas en cpds por el

nombre mydatasource

if (DEBUG)Systemoutprintln(setup lookup(mydatasource + ))

AS400JDBCManagedConnectionPoolDataSource cpds1 = (AS400JDBCManagedConnectionPoolDataSource)ctxlookup(mydatasource) if (DEBUG) Systemoutprintln(setup cpds1getUser() == | + cpds1getUser() + |)

Crear un objeto DataSource estaacutendar que haga referencia a eacutel

if (DEBUG)Systemoutprintln(setup Constructing AS400JDBCManagedDataSource (mds0))

AS400JDBCManagedDataSource mds0 = new AS400JDBCManagedDataSource()mds0setDescription(DataSource que da soporte a la agrupacioacuten de conexiones)mds0setDataSourceName(mydatasource)ctxrebind(ConnectionPoolingDataSource mds0)

if (DEBUG)Systemoutprintln(setup lookup(ConnectionPoolingDataSource + ))

dataSource_ = (DataSource)ctxlookup(ConnectionPoolingDataSource)dataSource_setLogWriter(output_)if (DEBUG)Systemoutprintln(setup dataSource_getUser() == | +

((AS400JDBCManagedDataSource)dataSource_)getUser() + |)

mds_ = (AS400JDBCManagedDataSource)dataSource_catch (Exception e)

eprintStackTrace()Systemoutprintln(Error de configuracioacuten durante la creacioacuten del archivo de rastreo)

void displayConnectionType(Connection conn boolean specifiedDefaultId)

if (conn instanceof comibmas400accessAS400JDBCConnectionHandle)Systemoutprint((+ (specifiedDefaultId + -) + P))

elseSystemoutprint((+ (specifiedDefaultId + -) + NP))

Obtiene y devuelve conexiones desde y hacia una agrupacioacuten de conexiones durante un tiempopublic void runTest()

boolean ok = truetry

Systemoutprintln(Pruebe iniciada ejecutada en + new Date())

if (DEBUG)Systemoutprintln(Comprobacioacuten de estado justo despueacutes de la

creacioacuten del origen de datos+ (se espera que la agrupacioacuten auacuten no exista) )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten existe antes del primer getConnection())

Comprobar algunos meacutetodos getset para propiedades JDBCSystemoutprintln(Comprobando meacutetodos getset )

mds_setAccess(soacutelo lectura)if (mds_getAccess()equals(soacutelo lectura))

ok = falseSystemoutprintln(nERROR getAccess() ha devuelto un valor inesperado

IBM Toolbox para Java 73

+ | + mds_getAccess()+|)

boolean oldBool = mds_isBigDecimal()boolean newBool = (oldBool false true)mds_setBigDecimal(newBool)if (mds_isBigDecimal() = newBool)

ok = falseSystemoutprintln(nERROR isBigDecimal() ha devuelto un valor

inesperado + |+mds_isBigDecimal()+|)

mds_setBigDecimal(oldBool)

int oldInt = mds_getBlockCriteria()int newInt = (oldInt == 2 1 2)mds_setBlockCriteria(newInt)if (mds_getBlockCriteria() = newInt)

ok = falseSystemoutprintln(nERROR getBlockCriteria() ha devuelto un valor

inesperado + |+mds_getBlockCriteria()+|)

mds_setBlockCriteria(oldInt)

Comprobar algunos meacutetodos getset para propiedades de socket

oldBool = mds_isKeepAlive()newBool = (oldBool false true)mds_setKeepAlive(newBool)if (mds_isKeepAlive() = newBool)

ok = falseSystemoutprintln(nERROR isKeepAlive() ha devuelto un valor

inesperado + |+mds_isKeepAlive()+|)

mds_setKeepAlive(oldBool)

oldInt = mds_getReceiveBufferSize()newInt = (oldInt == 256 512 256)mds_setReceiveBufferSize(newInt)if (mds_getReceiveBufferSize() = newInt)

ok = falseSystemoutprintln(nERROR getReceiveBufferSize() ha devuelto un valor

inesperado + |+mds_getReceiveBufferSize()+|)

mds_setReceiveBufferSize(oldInt)

Systemoutprintln(CONNECTION 1)Object o = dataSource_getConnection()Systemoutprintln(ogetClass())Systemoutprintln(LOOK ABOVE)Connection c1 = dataSource_getConnection()

if (DEBUG)displayConnectionType(c1 true)

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes del primer getConnection() )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del primer getConnection())

if (TESTING_THREAD_SAFETY)

try

c1setAutoCommit(false)if (DEBUG)Systemoutprintln(SELECT FROM QIWSQCUSTCDT)

Statement s = c1createStatement()ResultSet rs = sexecuteQuery(SELECT FROM QIWSQCUSTCDT)while (rsnext ())

if (DEBUG)Systemoutprintln(rsgetString(2))

74 IBM Toolbox para Java IBM Toolbox para Java

rsclose()sclose()

catch (Exception e)

eprintStackTrace()if (DEBUG)Systemoutprintln(Comprobacioacuten de estado despueacutes de un

error de conexioacuten muy grave )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado

despueacutes del error muy + grave)

Systemoutprintln(CONNECTION 2)Connection c2 = dataSource_getConnection(userid password)if (DEBUG)displayConnectionType(c2 false)

Systemoutprintln(CONNECTION 3)Connection c3 = dataSource_getConnection()if (DEBUG)displayConnectionType(c3 true)

c1close()

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes del primer close())

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del primer close())

Systemoutprintln(CONNECTION 4)Connection c4 = dataSource_getConnection()if (DEBUG) displayConnectionType(c4 true)

c1close() cerrar de nuevoc2close()c3close()c4close()

if (DEBUG) Systemoutprintln(Comprobando estado despueacutes del uacuteltimo close())if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del uacuteltimo close())

Iniciar los daemons de pruebaSystemoutprintln(Iniciando daemons de prueba)startThreads()

Ejecutar los daemons de prueba durante un tiempo comprobar el estado de la agrupacioacuten perioacutedicamente

long startTime = SystemcurrentTimeMillis()long endTime = startTime + timeToRunDaemons_while (SystemcurrentTimeMillis() lt endTime)

Systemoutprint(h) Permitir que los daemons se ejecuten durante un tiempo y luego comprobar el estado de la agrupacioacutentry

Threadsleep(poolHealthCheckCycle_)catch (InterruptedException ie) if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de iniciar los daemons de prueba)

Detener los daemons de pruebaSystemoutprintln(Deteniendo daemons de prueba)stopThreads()

if (DEBUG)Systemoutprintln(Comprobacioacuten de estado despueacutes de ejecutar

daemons connectionGetter)

IBM Toolbox para Java 75

if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de detener los daemons de prueba)

if (TESTING_THREAD_SAFETY)

Systemoutprintln(CONNECTION 5)Connection c = dataSource_getConnection()if (DEBUG) displayConnectionType(c true)csetAutoCommit(false)if (DEBUG) Systemoutprintln(SELECT FROM QIWSQCUSTCDT)Statement s = ccreateStatement()ResultSet rs = sexecuteQuery(SELECT FROM QIWSQCUSTCDT)while (rsnext ())

if (DEBUG) Systemoutprintln(rsgetString(2))rsclose()sclose()cclose()

Systemoutprintln(nCerrando la agrupacioacuten)mds_closePool()

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes de cerrar la agrupacioacuten)

TracesetTraceJDBCOn(true) aseguacuterese de que se imprima el estado finalTracesetTraceOn(true)if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de cerrar la agrupacioacuten)

Systemoutprintln()if(ok==true)

Systemoutprintln(prueba ejecutada satisfactoriamente)else

Systemoutprintln(prueba anoacutemala)catch (Exception e)

Systemoutprintln(e)eprintStackTrace()

finally

Systemoutprintln(Prueba finalizada en + new Date())

void startThreads()

Crear un grupo de hebras que llaman a getConnection()Thread[] threads = new Thread[numDaemons_]for (int i=0 iltnumDaemons_ i++)

ConnectionGetter getter Elegir aleatoriamente si este daemon especificaraacute el uid predeterminado o un uid exclusivoif (random_nextBoolean())

getter = new ConnectionGetter(useridpassword)if (TESTING_THREAD_SAFETY) puede utilizarse un userid ficticio

getter = new ConnectionGetter(Thread+i Pwd+i)else debe utilizarse un userid real

getter = new ConnectionGetter(useridpassword)

else

getter = new ConnectionGetter(null null)

threads[i] = new Thread(getter [+i+])threads[i]setDaemon(true)

Iniciar las hebrasfor (int i=0 iltnumDaemons_ i++)

76 IBM Toolbox para Java IBM Toolbox para Java

threads[i]start()

void stopThreads()

Indicar a las hebras que se detengankeepDaemonsAlive_ = falsesynchronized (daemonSleepLock_)

daemonSleepLock_notifyAll()

Esperar a que los daemons se detengantry

Threadsleep(3000)catch (InterruptedException ie)

ConnectionGetter --------------------------------------------------------------------

Clase de ayuda Este daemon se activa a intervalos aleatorios y obtieneotra conexioacuten de la agrupacioacuten de conexiones o devuelve una conexioacuten obtenidaanteriormente a la agrupacioacuten

private final class ConnectionGetter implements Runnable

private String uid_private String pwd_private boolean useDefaultUid_private long maxSleepTime_private String threadName_private boolean firstConnection_ = trueArrayList connections_ = new ArrayList() lista de conexiones que actualmente son rsquopropiedadrsquo de este meacutetodo de obtencioacuten

ConnectionGetter(String uid String pwd) uid_ = uidpwd_ = pwdif (uid_ == null) useDefaultUid_ = trueelse useDefaultUid_ = falsemaxSleepTime_ = daemonMaxSleepTime_ copia propia que puede ajustarse

public void run()

threadName_ = ThreadcurrentThread()getName()if (DEBUG) Systemoutprintln(ConnectionGetter(+threadName_+) Starting up)

try

while (keepDaemonsAlive_)

try

Elegir un tiempo de latencia aleatorio entre los valores miacutenimo y maacuteximolong sleepTime = Mathmax((long)(maxSleepTime_ random_nextFloat())

daemonMinSleepTime_) Nota nunca debe llamarse a wait(0) porque esperariacutea indefinidamentesynchronized (daemonSleepLock_)

try daemonSleepLock_wait(sleepTime)Systemoutprint()

catch (InterruptedException ie)

if (keepDaemonsAlive_) break

Decidir aleatoriamente si debe solicitarse otra conexioacuten o devolver una conexioacuten obtenida anteriormenteConnection connif (random_nextBoolean()) Dejar la decisioacuten a la suerte Solicitar otra conexioacuten

if (useDefaultUid_)

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) - get())

IBM Toolbox para Java 77

conn = dataSource_getConnection()else

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) -

+ get(+uid_+))conn = dataSource_getConnection(uid_ pwd_)

if (conn == null) Systemoutprintln(ConnectionGetter(+threadName_+) ERROR

+ getConnection() ha devuelto null)else

Ocasionalmente olvidar que somos propietarios de una conexioacuten y olvidar cerrarla Las conexiones hueacuterfanas deben en uacuteltimo teacutermino sobrepasar su tiempo de vida maacuteximo y el gestor de conexiones las repetiraacutefloat val = random_nextFloat()if (firstConnection_ || val lt 01)

convierta en rsquohueacuterfanasrsquo algunas de las conexiones obtenidasfirstConnection_ = false

else

connections_add(conn)if (DEBUG) displayConnectionType(conn useDefaultUid_)if (conn instanceof comibmas400accessAS400JDBCConnectionHandle) Hemos colocado una conexioacuten en una agrupacioacuten Intente aumentar el tiempo de ciclo

if (maxSleepTime_ gt 100)maxSleepTime_--

elsemaxSleepTime_ = 100

else No hemos colocado una conexioacuten en una agrupacioacuten Eso significa que la agrupacioacuten

debe estar al maacuteximo de capacidad Reduzca un poco el tiempo de ciclomaxSleepTime_ = maxSleepTime_ + 50

else Cerrar una conexioacuten de la que actualmente somos propietarios

if (connections_size() = 0) conn = (Connection)connections_remove(0)connclose()

inner trycatch (Exception e)

eprintStackTrace()

outer while outer tryfinally

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) Stopping)

Devolver todas las conexiones que todaviacutea estaacuten en la listafor (int i=0 iltconnections_size() i++)

Connection conn = (Connection)connections_remove(0)try connclose() catch (Exception e) eprintStackTrace()

clase interna rsquoConnectionGetterrsquo

Interfaz DatabaseMetaData

Puede utilizar un objeto DatabaseMetaData para obtener informacioacuten acerca de la base de datos comoconjunto y obtener asimismo informacioacuten de cataacutelogo

78 IBM Toolbox para Java IBM Toolbox para Java

El siguiente ejemplo muestra coacutemo se obtiene una lista de tablas que es una funcioacuten de cataacutelogo Coneacutectese al servidorConnection c = DriverManagergetConnection(jdbcas400mySystem)

Obtenga los metadatos de base de datos de la conexioacutenDatabaseMetaData dbMeta = cgetMetaData()

Obtenga una lista de tablas que coincidan con los criterios siguientesString catalog = myCatalogString schema = mySchemaString table = myTable indica el patroacuten de buacutesquedaString types[] = TABLE VIEW SYSTEM TABLEResultSet rs = dbMetagetTables(catalog schema table types)

Itere por ResultSet para obtener los valores

Cierre el objeto Connectioncclose()

Informacioacuten relacionadaJavadoc AS400JDBCDatabaseMetaData

Clase AS400JDBCDataSource

La clase AS400JDBCDataSource representa una faacutebrica de conexiones de base de datos de IBM i La claseAS400JDBCConnectionPoolDataSource representa una faacutebrica de objetos AS400JDBCPooledConnection

Puede registrar cualquier tipo de objeto de origen de datos mediante un proveedor de servicios JNDI(Java Naming and Directory Interface) Para obtener maacutes informacioacuten sobre proveedores de serviciosJNDI consulte la seccioacuten ldquoInformacioacuten relacionada para IBM Toolbox para Javardquo en la paacutegina 588

Ejemplos

Los ejemplos siguientes muestran formas de crear y utilizar objetos AS400JDBCDataSource Los dosuacuteltimos ejemplos muestran coacutemo registrar un objeto AS400JDBCDataSource en JNDI y a continuacioacutenemplear el objeto devuelto de JNDI para obtener una conexioacuten de base de datos Observe que incluso alusar distintos proveedores de servicio JNDI el coacutedigo es muy parecido

Ejemplo crear un objeto AS400JDBCDataSource

A continuacioacuten figura un ejemplo en el que se crea un objeto AS400JDBCDataSource y se conecta este conuna base de datos

Cree un origen de datos para efectuar la conexioacutenAS400JDBCDataSource datasource = new AS400JDBCDataSource(myAS400)datasourcesetUser(myUser)datasourcesetPassword(MYPWD)

Cree una conexioacuten de base de datos con el servidorConnection connection = datasourcegetConnection()

Ejemplo crear un objeto AS400JDBCConnectionPoolDataSource que pueda utilizarse para almacenaren la memoria cacheacute conexiones JDBC

El ejemplo siguiente muestra coacutemo utilizar un objeto AS400JDBCConnectionPoolDataSource paraalmacenar en la memoria cacheacute conexiones JDBC

Cree un origen de datos para efectuar la conexioacutenAS400JDBCConnectionPoolDataSource dataSource =

new AS400JDBCConnectionPoolDataSource(myAS400)datasourcesetUser(myUser)datasourcesetPassword(MYPWD)

IBM Toolbox para Java 79

Obtenga PooledConnectionPooledConnection pooledConnection = datasourcegetPooledConnection()

Ejemplo coacutemo se utilizan las clases de proveedor de servicio JNDI para almacenar un objetoAS400JDBCDataSource

El ejemplo siguiente muestra coacutemo utilizar las clases de proveedor de servicio JNDI para almacenar unobjeto DataSource directamente en el sistema de archivos integrado del servidor

Cree un origen de datos para la base de datos de IBM iAS400JDBCDataSource dataSource = new AS400JDBCDataSource()dataSourcesetServerName(myAS400)dataSourcesetDatabaseName(myAS400 Database)

Registre el origen de datos en JNDI (Java Naming and Directory Interface)Hashtable env = new Hashtable()envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory)Context context = new InitialContext(env)contextbind(jdbccustomer dataSource)

Devuelva un objeto AS400JDBCDataSource de JNDI y obtenga una conexioacutenAS400JDBCDataSource datasource = (AS400JDBCDataSource) contextlookup(jdbccustomer)Connection connection = datasourcegetConnection(myUser MYPWD)

Ejemplo coacutemo se utilizan los objetos AS400JDBCDataSource y las clases de IBM SecureWay Directorycon un servidor de directorios LDAP (Lightweight Directory Access Protocol)

Los ejemplos siguientes muestra coacutemo utilizar las clases de IBM SecureWay Directory para almacenar unobjeto en un servidor de directorios LDAP (Lightweight Directory Access Protocol)

Cree un origen de datos para la base de datos de IBM iAS400JDBCDataSource dataSource = new AS400JDBCDataSource()dataSourcesetServerName(myAS400)dataSourcesetDatabaseName(myAS400 Database)

Registre el origen de datos en JNDI (Java Naming and Directory Interface)Hashtable env = new Hashtable()envput(ContextINITIAL_CONTEXT_FACTORY comibmjndiLDAPCtxFactory)Context context = new InitialContext(env)contextbind(cn=myDatasource cn=myUsers ou=myLocationo=myCompanyc=myCountryRegion

dataSource)

Devuelva un objeto AS400JDBCDataSource de JNDI y obtenga una conexioacutenAS400JDBCDataSource datasource = (AS400JDBCDataSource) contextlookup(

cn=myDatasource cn=myUsers ou=myLocationo=myCompanyc=myCountryRegion)Connection connection = datasourcegetConnection(myUser MYPWD)

Javadoc AS400JDBCDataSourceJavadoc AS400JDBCConnectionPoolDataSourceJavadoc AS400JDBCPooledConnection

Registro del controlador JDBC

Antes de utilizar JDBC para acceder a los datos de un archivo de base de datos del servidor es necesarioregistrar el controlador JDBC de IBM Toolbox para Java con DriverManager

El controlador se puede registrar ya sea utilizando una propiedad de sistema Java o haciendo que elprograma Java registre el controladorv Registrar mediante una propiedad del sistema

Cada maacutequina virtual tiene su propio meacutetodo para establecer las propiedades del sistema Por ejemploel mandato Java de JDK utiliza la opcioacuten -D para establecer las propiedades del sistema Paraestablecer el controlador mediante las propiedades del sistema especifique

80 IBM Toolbox para Java IBM Toolbox para Java

-Djdbcdrivers=comibmas400accessAS400JDBCDriver

v Registrar mediante el programa JavaPara cargar el controlador JDBC de IBM Toolbox para Java antes de la primera llamada a JDBC antildeadaal programa Java la liacutenea siguiente

ClassforName(comibmas400accessAS400JDBCDriver)

El controlador JDBC de IBM Toolbox para Java se registra cuando se carga siendo este es el meacutetodopreferido de registrar el controlador Tambieacuten puede registrar expliacutecitamente el controlador JDBC deIBM Toolbox para Java con lo siguiente

javasqlDriverManagerregisterDriver (new comibmas400accessAS400JDBCDriver ())

Si invoca DriverManagerregisterDriver() el controlador JDBC de IBM Toolbox para Java se registra dosveces Una vez cuando la JVM carga AS400JDBCDriver y otra en la llamada expliacutecita al meacutetodoregisterDriver() Esto se debe a la implementacioacuten de DriverManager sobre la que IBM Toolbox paraJava no tiene control Tener un controlador que aparece dos veces en la lista del registro deDriverManager normalmente no supone ninguacuten problema Aunque puede haber casos en los que seutilicen los dos controladores registrados Por ejemplo cuando se intenta obtener una conexioacuten con unacontrasentildea incorrecta DriverManager no podraacute obtener una conexioacuten con el primer controladorregistrado y por lo tanto lo intentaraacute con el segundo controlador registrado

El controlador JDBC de IBM Toolbox para Java no requiere un objeto AS400 como paraacutemetro de entradacomo lo requieren las demaacutes clases de IBM Toolbox para Java que obtienen datos de un servidor Sinembargo internamente siacute que se utiliza un objeto AS400 para gestionar el usuario predeterminado y lacolocacioacuten de contrasentildeas en memoria cacheacute Cuando se establece una conexioacuten con el servidor porprimera vez puede solicitarse al usuario que escriba el ID de usuario y la contrasentildea El usuario puedeoptar por guardar el ID de usuario como ID de usuario predeterminado y antildeadir la contrasentildea a lamemoria cacheacute de contrasentildeas Al igual que en las demaacutes funciones de IBM Toolbox para Java si es elprograma Java el que proporciona el ID de usuario y la contrasentildea el usuario predeterminado no seestablece y la contrasentildea no se pone en la memoria cacheacute En ldquoGestionar conexiones en programas Javardquoen la paacutegina 361 encontraraacute informacioacuten acerca de coacutemo se gestionan las conexiones

Utilizacioacuten del controlador JDBC para conectarse a una base de datos del servidor

El meacutetodo DriverManagergetConnection() le permite conectarse a la base de datos del servidorDriverManagergetConnection() toma como argumento una serie de URL (localizador uniforme derecursos) El gestor de controladores JDBC intenta localizar un controlador que pueda conectarse a la basede datos representada por el URL Cuando utilice el controlador de IBM Toolbox para Java utilice lasiguiente sintaxis para el URL

jdbcas400systemNamedefaultSchemalistOfProperties

Nota en el URL se puede omitir systemName o defaultSchema

Para utilizar los tickets de kerberos establezca uacutenicamente el nombre de sistema (y no la contrasentildea) enel objeto URL JDBC La identidad del usuario se recupera mediante la infraestructura JGSS (Java GenericSecurity Services) por lo que tampoco necesita especificar un usuario en el URL JDBC Solo puedeestablecer un meacutetodo de autenticacioacuten en un objeto AS400JDBCConnection a la vez Al establecer lacontrasentildea se borran los tickets de kerberos o los siacutembolos de perfil Para obtener maacutes informacioacutenconsulte ldquoClase AS400rdquo en la paacutegina 21

Ejemplos utilizacioacuten del controlador JDBC para conectarse a un servidor

Ejemplo utilizar un URL en el que no se especifica un nombre de sistema

Este ejemplo hace que se solicite al usuario que escriba el nombre del sistema al que desea conectarse Coneacutectese al sistema sin nombre Se solicita al usuario que escriba el nombre del sistemaConnection c = DriverManagergetConnection(jdbcas400)

IBM Toolbox para Java 81

Ejemplo conectarse a la base de datos del servidor no se especifica ninguacuten esquema SQLpredeterminado ni ninguna propiedad

Coneacutectese al sistema rsquomySystemrsquo No se especifica ninguacuten esquema SQL predeterminado ni ninguna propiedadConnection c = DriverManagergetConnection(jdbcas400mySystem)

Ejemplo conectarse a la base de datos del servidor se especifica un esquema SQL predeterminado Coneacutectese al sistema rsquomySys2rsquo Se especifica el esquema SQL predeterminado rsquomyschemarsquoConnection c2 = DriverManagergetConnection(jdbcas400mySys2mySchema)

Ejemplo conectarse a la base de datos del servidor y utilizar javautilProperties para especificar laspropiedades

El programa Java puede especificar un conjunto de propiedades de JDBC ya sea utilizando la interfazjavautilProperties o especificando dichas propiedades como parte del URL En ldquoPropiedades JDBC deIBM Toolbox para Javardquo en la paacutegina 266 encontraraacute una lista de las propiedades soportadas

Por ejemplo para especificar las propiedades mediante la interfaz Properties podriacutea utilizar el siguientecoacutedigo

Cree un objeto propiedadesProperties p = new Properties()

Establezca las propiedades para la conexioacutenpput(naming sql)pput(errors full)

Coneacutectese utilizando el objeto de propiedadesConnection c = DriverManagergetConnection(jdbcas400mySystemp)

Ejemplo conectarse a la base de datos del servidor y utilizar un URL (localizador uniforme derecursos) para especificar las propiedades

Coneacutectese utilizando las propiedades Se propiedades se establecen en el URL en lugar de mediante un objeto propiedadesConnection c = DriverManagergetConnection(

jdbcas400mySystemnaming=sqlerrors=full)

Ejemplo conectarse a la base de datos del servidor y especificar el ID de usuario y la contrasentildea Coneacutectese utilizando las propiedades indicadas en el URL y especificando un ID de usuario y una contrasentildeaConnection c = DriverManagergetConnection(

jdbcas400mySystemnaming=sqlerrors=fullauserapassword)

Ejemplo desconectarse de la base de datos

Para desconectarse del servidor utilice el meacutetodo close() en el objeto Connecting Utilice la sentenciasiguiente para cerrar la conexioacuten creada en el ejemplo anterior

cclose()

Javadoc AS400JDBCDriver

Clase AS400JDBCParameterMetaData

La clase AS400JDBCParameterMetaData permite a los programas recuperar informacioacuten sobre laspropiedades de paraacutemetros de los objetos PreparedStatement y CallableStatement

82 IBM Toolbox para Java IBM Toolbox para Java

AS400JDBCParameterMetaData ofrece meacutetodos que permiten llevar a cabo las acciones siguientesv Obtener el nombre de clase del paraacutemetrov Obtener el nuacutemero de paraacutemetros de PreparedStatementv Obtener el tipo SQL del paraacutemetrov gtObtener el nombre de tipo especiacutefico de la base de datos del paraacutemetrov Obtener la precisioacuten o la escala del paraacutemetro

Ejemplo coacutemo se utiliza AS400JDBCParameterMetaData

En el ejemplo siguiente se muestra coacutemo se utiliza AS400JDBCParameterMetaData para recuperarparaacutemetros de un objeto PreparedStatement generado dinaacutemicamente

Obtenga una conexioacuten desde el controladorClassforName(comibmas400accessAS400JDBCDriver)Connection connection =

DriverManagergetConnection(jdbcas400myAS400 myUserId myPassword)

Cree un objeto sentencia preparadaPreparedStatement ps =

connectionprepareStatement(SELECT STUDENTS FROM STUDENTTABLE WHERE STUDENT_ID= )

Establezca un ID de alumno en el paraacutemetro 1pssetInt(1 123456)

Recupere los metadatos de paraacutemetro de la sentencia preparadaParameterMetaData pMetaData = psgetParameterMetaData()

Recupere el nuacutemero de paraacutemetros de la sentencia preparada Devuelve 1int parameterCount = pMetaDatagetParameterCount()

Averiguumle el nombre de tipo de paraacutemetro del paraacutemetro 1 Devuelve INTEGERString getParameterTypeName = pMetaDatagetParameterTypeName(1)

Informacioacuten relacionadaJavadoc AS400JDBCParameterMetaData

Interfaz PreparedStatement

Puede utilizar un objeto PreparedStatement cuando vea que una sentencia SQL se va a ejecutar muchasveces Una sentencia preparada es una sentencia SQL que se ha precompilado

Esta solucioacuten es maacutes eficaz que la de ejecutar muchas veces la misma sentencia utilizando un objetoStatement pues de esta uacuteltima forma la sentencia se compila cada vez que se ejecuta Ademaacutes lasentencia SQL contenida en un objeto PreparedStatement puede tener uno o varios paraacutemetros IN UtiliceConnectionprepareStatement() para crear objetos PreparedStatement

El objeto PreparedStatement permite someter a una base de datos varios mandatos SQL como si fuesenun solo grupo mediante el uso del soporte de proceso por lotes Puede mejorar el rendimiento empleandoel soporte de proceso por lotes ya que normalmente se tarda menos en procesar un grupo de operacionesque en procesarlas una a una

Ejemplo coacutemo se utiliza PreparedStatement

El ejemplo que sigue muestra coacutemo se utiliza la interfaz PreparedStatement Coneacutectese al servidorConnection c = DriverManagergetConnection(jdbcas400mySystem)

Cree el objeto PreparedStatement Este objeto precompila la

IBM Toolbox para Java 83

sentencia SQL especificada Los signos de interrogacioacuten indican doacutende deben establecerse los paraacutemetros antes de ejecutar la sentenciaPreparedStatement ps =

cprepareStatement(INSERT INTO MYLIBRARYMYTABLE (NAME ID) VALUES ( ))

Establezca paraacutemetros y ejecute la sentenciapssetString(1 JOSH)pssetInt(2 789)psexecuteUpdate()

Establezca paraacutemetros y ejecute la sentencia otra vezpssetString(1 DAVE)pssetInt(2 456)psexecuteUpdate()

Cierre PreparedStatement y la conexioacutenpsclose()cclose()

Informacioacuten relacionadaJavadoc AS400JDBCPreparedStatement

Clase ResultSet

Puede utilizar un objeto ResultSet para acceder a una tabla de datos generada ejecutando una consultaLas filas de la tabla se recuperan en secuencia Dentro de una fila es posible acceder a los valores de lascolumnas en cualquier orden

Los datos almacenados en ResultSet se recuperan mediante los diversos meacutetodos get en funcioacuten del tipode datos que se vayan a recuperar El meacutetodo next() permite desplazarse a la fila siguiente

ResultSet permite obtener y actualizar columnas por nombre aunque el uso del iacutendice de columnamejora el rendimiento

Movimiento de cursor

Un cursor que es un puntero interno utilizado por un conjunto de resultados sentildeala a la filaperteneciente a dicho conjunto y a la que estaacute accediendo el programa Java

Se ha mejorado el rendimiento del meacutetodo getRow() Antes de la versioacuten V5R2 al utilizar ResultSetlast()ResultSetafterLast() y ResultSetabsolute() con un valor negativo el nuacutemero de fila actual no estabadisponible Las restricciones anteriores se han eliminado con lo que el meacutetodo getRow() es ahoratotalmente funcional

JDBC 20 y las especificaciones de JDBC posteriores proporcionan meacutetodos adicionales para acceder aposiciones especiacuteficas dentro de una base de datos

Posiciones de cursor desplazables

absoluteafterLastbeforeFirstfirstgetRowisAfterLastisBeforeFirst

isFirstisLastlastmoveToCurrentRowmoveToInsertRowpreviousrelative

84 IBM Toolbox para Java IBM Toolbox para Java

Posibilidades de desplazamiento

Si un conjunto de resultados se crea mediante la ejecucioacuten de una sentencia es posible moverse(desplazarse) por las filas de una tabla en sentido hacia atraacutes (de la uacuteltima a la primera) o hacia delante(de la primera a la uacuteltima)

Un conjunto de resultados que deacute soporte a este movimiento se llama desplazable Los conjuntos deresultados desplazables admiten tambieacuten el posicionamiento absoluto El posicionamiento absoluto lepermite moverse directamente a una fila especificando la posicioacuten que dicha fila tiene en el conjunto deresultados

Con JDBC 20 y las especificaciones de JDBC posteriores se dispone de dos posibilidades dedesplazamiento adicionales al trabajar con la clase ResultSet conjuntos de resultados no sensibles aldesplazamiento y sensibles al desplazamiento

Un conjunto de resultados no sensible al desplazamiento suele no ser sensible a los cambios realizadosmientras estaacute abierto mientras que el conjunto de resultados sensible al desplazamiento es sensible a loscambios

Nota IBM i uacutenicamente admite el acceso solo de lectura para los cursores insensibles desplazables IBMToolbox para Java da soporte a un cursor insensible al desplazamiento si la concurrencia del conjunto deresultados es solo de lectura Si el tipo de conjunto de resultados se especifica como insensible y laconcurrencia se especifica como actualizable el tipo de conjunto de resultados cambia a sensible y seenviacutea un aviso al usuario

Conjuntos de resultados actualizables

En la aplicacioacuten puede utilizar conjuntos de resultados que emplean ya sea una concurrencia solo delectura (no pueden realizarse actualizaciones en los datos) ya sea una concurrencia actualizable (permiterealizar actualizaciones en los datos y utiliza bloqueos de escritura de base de datos para controlar elacceso a un mismo elemento de datos por parte de las distintas transacciones) En un conjunto deresultados actualizable las filas se pueden actualizar insertar y suprimir Puede disponer de numerososmeacutetodos de actualizacioacuten para usarlos en el programa por ejemplo puedev Actualizar una corriente de datos ASCIIv Actualizar Big Decimalv Actualizar una corriente binaria

En el Resumen de meacutetodos encontraraacute una lista completa de los meacutetodos de actualizacioacuten que estaacutendisponibles a traveacutes de la interfaz ResultSet

Ejemplo conjuntos de resultados actualizables

El ejemplo que figura a continuacioacuten muestra coacutemo se utiliza un conjunto de resultados que permiterealizar actualizaciones en los datos (concurrencia de actualizacioacuten) y realizar cambios en el conjunto deresultados mientras permanece abierto (sensible al desplazamiento)

Coneacutectese al servidorConnection c = DriverManagergetConnection(jdbcas400mySystem)

Cree un objeto Statement Establezca la concurrencia del conjunto de resultados en actualizableStatement s = ccreateStatement(ResultSetTYPE_SCROLL_SENSITIVE

ResultSetCONCUR_UPDATABLE)

Ejecute una consulta El resultado se coloca en un objeto ResultSetResultSet rs = sexecuteQuery (SELECT NAMEID FROM MYLIBRARYMYTABLE FOR UPDATE)

Itere por las filas de ResultSet

IBM Toolbox para Java 85

A medida que leemos la fila la actualizaremos con un nuevo IDint newId = 0while (rsnext ())

Obtenga los valores a partir del ResultSet El primer valor es una serie y el segundo valor es un enteroString name = rsgetString(NAME)int id = rsgetInt(ID)

Systemoutprintln(Nombre = + name)Systemoutprintln(ID antiguo = + id)

Actualice el ID con un nuevo enterorsupdateInt(ID ++newId)

Enviacutee las actualizaciones al servidorrsupdateRow ()

Systemoutprintln(ID nuevo = + newId)

Cierre la sentencia y la conexioacutensclose()cclose()

ResultSetMetaData

La interfaz ResultSetMetaData determina los tipos y las propiedades de las columnas de un conjunto deresultados (ResultSet)

Al conectarse a un servidor que ejecuta IBM i 52 o posterior el uso de la propiedad de metadatosampliados permite aumentar la precisioacuten de los siguientes meacutetodos de ResultSetMetaDatav getColumnLabel(int)v isReadOnly(int)v isSearchable(int)v isWriteable(int)

Asimismo al establecer esta propiedad en true se habilita el soporte para el meacutetodoResultSetMetaDatagetSchemaName(int) Tenga en cuenta que al utilizar la propiedad de metadatosampliados puede empeorarse el rendimiento ya que es preciso recuperar maacutes informacioacuten del servidor

Javadoc AS400JDBCResultSetJavadoc AS400ResultSetMetaData

Clase AS400JDBCRowSet

La clase AS400JDBCRowSet representa un conjunto de filas conectado que encapsula un conjunto deresultados JDBC Los meacutetodos de AS400JDBCRowSet son muy similares a los de AS400JDBCResultSet Laconexioacuten con la base de datos se mantiene mientras se utiliza

Puede utilizar una instancia de AS400JDBCDataSource o AS400JDBCConnectionPoolDataSource paracrear la conexioacuten con la base de datos que desea utilizar para acceder a los datos de AS400JDBCRowSet

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo puede utilizar la clase AS400JDBCRowSet

Ejemplo crear poblar y actualizar un objeto AS400JDBCRowSet

86 IBM Toolbox para Java IBM Toolbox para Java

DriverManagerregisterDriver(new AS400JDBCDriver()) Establecer conexioacuten mediante un URLAS400JDBCRowSet rowset = new AS400JDBCRowSet(jdbcas400mySystemmyUser myPassword)

Establecer el mandato que sirve para poblar la listarowsetsetCommand(SELECT FROM MYLIBDATABASE)

Llenar con datos el conjunto de filasrowsetexecute()

Actualizar los saldos del clientewhile (rowsetnext())

double newBalance = rowsetgetDouble(BALANCE) +july_statementsgetPurchases(rowsetgetString(CUSTNUM))

rowsetupdateDouble(BALANCE newBalance)rowsetupdateRow()

Ejemplo crear y llenar de datos un objeto AS400JDBCRowSet mientras se obtiene el origen de datosde JNDI

Obtener el origen de datos registrado en JNDI (se supone que se ha establecido el entorno JNDI)Context context = new InitialContext()AS400JDBCDataSource dataSource = (AS400JDBCDataSource) contextlookup(jdbccustomer)

AS400JDBCRowSet rowset = new AS400JDBCRowSet() Establecer conexioacuten definiendo el nombre del origen de datosrowsetsetDataSourceName(jdbccustomer)rowsetsetUsername(myuser)rowsetsetPassword(myPasswd)

Establecer la sentencia preparada e inicializar los paraacutemetrosrowsetsetCommand(SELECT FROM MYLIBRARYMYTABLE WHERE STATE = AND BALANCE gt )rowsetsetString(1 MINNESOTA)rowsetsetDouble(2 MAXIMUM_LIMIT)

Llenar con datos el conjunto de filasrowsetexecute()

Javadoc AS400JDBCRowSetJavadoc AS400JDBCResultSet

Clase AS400JDBCSavepoint

La clase AS400JDBCSavepoint de IBM Toolbox para Java representa un punto de interrupcioacuten loacutegico enuna transaccioacuten El uso de los puntos de salvar permite controlar de modo maacutes preciso los cambios a losque afecta la retrotraccioacuten de una transaccioacuten

Figura 1 coacutemo se utilizan los puntos de salvar para controlar las retrotracciones en una transaccioacuten

IBM Toolbox para Java 87

Por ejemplo la figura 1 muestra una transaccioacuten que contiene dos puntos de salvar A y B Al retrotraerla transaccioacuten a cualquiera de los dos puntos de salvar uacutenicamente se deshacen los cambios desde elpunto en que se llama a una retrotraccioacuten hasta el punto de salvar De este modo se evita tener quedeshacer todos los cambios de toda la transaccioacuten Observe que una vez efectuada la retrotraccioacuten hastael punto de salvar A posteriormente no puede efectuar la retrotraccioacuten hasta el punto de salvar B Nopuede acceder al punto de salvar B despueacutes de haberse retrotraiacutedo el trabajo maacutes allaacute del mismo

Ejemplo coacutemo se utilizan los puntos de salvar

En este ejemplo supongamos que su aplicacioacuten actualiza los registros de alumnos Tras actualizar uncampo determinado de cada registro de alumno efectuacutea una operacioacuten de compromiso El coacutedigo detectaun error concreto asociado a la actualizacioacuten de este campo y retrotrae el trabajo realizado cuando seproduce este error Usted sabe que este error concreto afecta uacutenicamente al trabajo efectuado en elregistro actual

Por consiguiente establece un punto de salvar entre cada actualizacioacuten de los registros de alumnosAhora cuando se produce este error solo retrotrae la uacuteltima actualizacioacuten de la tabla de alumnos Enlugar de tener que retrotraer una gran cantidad de trabajo ahora puede retrotraer uacutenicamente unapequentildea cantidad de trabajo

El coacutedigo del ejemplo siguiente muestra coacutemo pueden utilizarse los puntos de salvar En el ejemplo sesupone que el ID de alumno de John es 123456 y el ID de alumno de Jane es 987654

Obtenga una conexioacuten desde el controladorClassforName(comibmas400accessAS400JDBCDriver)

Obtenga un objeto StatementStatement statement = connectioncreateStatement()

Actualice el registro de John con su nota rsquoBrsquo en gimnasiaint rows = statementexecuteUpdate(

UPDATE STUDENTTABLE SET GRADE_SECOND_PERIOD = rsquoBrsquo WHERE STUDENT_ID= rsquo123456rsquo)

Establezca un punto de salvar marcando un punto intermedio en la transaccioacutenSavepoint savepoint1 = connectionsetSavepoint(SAVEPOINT_1)

Actualice el registro de Jane con su nota rsquoCrsquo en bioquiacutemicaint rows = statementexecuteUpdate(

UPDATE STUDENTTABLE SET GRADE_SECOND_PERIOD = rsquoCrsquo WHERE STUDENT_ID= rsquo987654rsquo)

Se ha detectado un error por lo que debemos retrotraer el registro de Jane pero no el de John Retrotraiga la transaccioacuten hasta el punto de salvar 1 El cambio del registro de Jane se elimina mientras que el del registro de John se conserva

88 IBM Toolbox para Java IBM Toolbox para Java

connectionrollback(savepoint1)

Comprometa la transaccioacuten solo se compromete la nota rsquoBrsquo de John en la base de datosconnectioncommit()

Consideraciones y restricciones

Para utilizar los puntos de salvar deben tenerse presentes las consideraciones y restricciones siguientes

Consideraciones

IBM Toolbox para Java sigue las reglas de base de datos en relacioacuten con el modo en que lasretrotracciones afectan a los cursores y bloqueos retenidos Por ejemplo al establecer la opcioacuten deconexioacuten de modo que se mantengan abiertos los cursores tras una retrotraccioacuten tradicional los cursorestambieacuten permanecen abiertos tras una retrotraccioacuten hasta un punto de salvar Dicho de otro modocuando se produce una peticioacuten de retrotraccioacuten en la que intervienen puntos de salvar IBM Toolboxpara Java no mueve ni cierra el cursor si la base de datos subyacente no soporta esta funcioacuten

Al utilizar un punto de salvar para retrotraer una transaccioacuten solo se deshacen las acciones efectuadasdesde el punto de inicio de la retrotraccioacuten hasta el punto de salvar Las acciones efectuadas antes de esepunto de salvar se conservan Como se muestra en el ejemplo anterior tenga en cuenta que puedecomprometer una transaccioacuten que contenga trabajo efectuado antes de un punto de salvar determinadopero que no contenga trabajo efectuado tras el punto de salvar

Todos los puntos de salvar se liberan y dejan de ser vaacutelidos cuando se compromete la transaccioacuten ocuando se retrotrae toda la transaccioacuten Tambieacuten puede liberar puntos de salvar llamando aConnectionreleaseSavepoint()

Restricciones

Al utilizar puntos de salvar se aplican las restricciones siguientesv Los puntos de salvar con nombre deben ser exclusivosv No podraacute reutilizar un nombre de punto de salvar hasta que se libere comprometa o retrotraiga el

punto de salvarv El compromiso automaacutetico debe establecerse en OFF para que los puntos de salvar sean vaacutelidos

Puede establecer el compromiso automaacutetico en OFF mediante ConnectionsetAutoCommit(false) Si sehabilita el compromiso automaacutetico cuando se utilizan puntos de salvar se lanza una excepcioacuten

v Los puntos de salvar no son vaacutelidos en las conexiones XA Si se utiliza una conexioacuten XA con puntos desalvar se lanza una excepcioacuten

v El servidor debe ejecutar IBM i Versioacuten 5 Release 2 o posterior Si se utilizan puntos de salvar alconectarse (o estando ya conectado) a un servidor que ejecuta la versioacuten V5R1 o anterior de IBM i selanza una excepcioacutenJavadoc AS400JDBCSavePoint

Ejecucioacuten de sentencias SQL con objetos Statement

Utilice un objeto Statement para ejecutar una sentencia SQL y opcionalmente obtener el conjunto deresultados (ResultSet) generado por ella

PreparedStatement es heredera de Statement y CallableStatement es heredera de PreparedStatementUtilice los siguientes objetos Statement para ejecutar las distintas sentencias SQLv ldquoInterfaz Statementrdquo en la paacutegina 90 - Ejecuta una sentencia SQL simple que no tiene ninguacuten

paraacutemetrov ldquoInterfaz PreparedStatementrdquo en la paacutegina 83 - Ejecuta una sentencia SQL precompilada que puede

tener o no tener paraacutemetros IN

IBM Toolbox para Java 89

v ldquoInterfaz CallableStatementrdquo en la paacutegina 65 - Ejecuta una llamada a un procedimiento almacenado debase de datos El objeto CallableStatement puede tener o no tener paraacutemetros IN OUT e INOUT

El objeto Statement permite someter a una base de datos varios mandatos SQL como si fuesen un sologrupo mediante el uso del soporte de proceso por lotes Puede mejorar el rendimiento empleando elsoporte de proceso por lotes ya que normalmente se tarda menos en procesar un grupo de operacionesque en procesarlas una a una

Cuando utilice las actualizaciones por lotes normalmente deberaacute desactivar el compromiso automaacuteticoLa desactivacioacuten del compromiso automaacutetico permite al programa determinar si debe comprometer latransaccioacuten en el caso de que se produzca un error y no se hayan ejecutado todos los mandatos En JDBC20 y las especificaciones de JDBC posteriores un objeto Statement puede hacer un seguimiento de unalista de mandatos que pueden someterse satisfactoriamente y ejecutarse conjuntamente en un grupoCuando el meacutetodo executeBatch() ejecuta esta lista de mandatos por lotes la ejecucioacuten de los mandatos serealiza en el orden en que se antildeadieron a la lista

AS400JDBCStatement proporciona meacutetodos que permiten llevar a cabo muchas acciones entre ellas lassiguientesv Ejecutar distintos tipos de sentenciasv Recuperar los valores de distintos paraacutemetros del objeto Statement tales como

ndash La conexioacutenndash Las claves generadas automaacuteticamente que se han creado como consecuencia de la ejecucioacuten del

objeto Statementndash El tamantildeo de buacutesqueda y la direccioacuten de buacutesquedandash El tamantildeo maacuteximo de campo y el liacutemite maacuteximo de filandash El conjunto de resultados actual el conjunto de resultados siguiente el tipo de conjunto de

resultados la concurrencia del conjunto de resultados y la posibilidad de retencioacuten del cursor delconjunto de resultados

v Antildeadir una sentencia SQL al proceso por lotes actualv Ejecutar el proceso por lotes actual de sentencias SQL

Interfaz Statement

Utilice ConnectioncreateStatement() para crear objetos Statement nuevos

El ejemplo que sigue muestra coacutemo se utiliza un objeto Statement Coneacutectese al servidorConnection c = DriverManagergetConnection(jdbcas400mySystem)

Cree un objeto StatementStatement s = ccreateStatement()

Ejecute una sentencia SQL que cree una tabla en la base de datossexecuteUpdate(CREATE TABLE MYLIBRARYMYTABLE (NAME VARCHAR(20) ID INTEGER))

Ejecute una sentencia SQL que inserte un registro en la tablasexecuteUpdate(INSERT INTO MYLIBRARYMYTABLE (NAME ID) VALUES (rsquoDAVErsquo 123))

Ejecute una sentencia SQL que inserte un registro en la tablasexecuteUpdate(INSERT INTO MYLIBRARYMYTABLE (NAME ID) VALUES (rsquoCINDYrsquo 456))

Ejecute una consulta SQL en la tablaResultSet rs = sexecuteQuery(SELECT FROM MYLIBRARYMYTABLE)

Cierre la sentencia y la conexioacutensclose()cclose()

90 IBM Toolbox para Java IBM Toolbox para Java

Javadoc AS400JDBCStatement

Gestioacuten de transacciones distribuidas XA de JDBC

Las clases de gestioacuten de transacciones distribuidas XA de JDBC permiten utilizar el controlador JDBC deIBM Toolbox para Java dentro de una transaccioacuten distribuida La utilizacioacuten de las clases de XA parahabilitar el controlador JDBC de IBM Toolbox para Java permite a eacuteste participar en las transacciones queabarcan varios oriacutegenes de datos

Normalmente las clases de gestioacuten de transacciones distribuidas XA se utilizan y controlan directamentecon un gestor de transacciones independiente del controlador JDBC Las interfaces de gestioacuten detransacciones distribuidas se definen como parte de JDBC 20 Optional Package y Java Transaction API(JTA) Ambas estaacuten disponibles a traveacutes de Sun como archivos JAR Las interfaces de gestioacuten detransacciones distribuidas tambieacuten estaacuten soportadas en la API JDBC 30 que estaacute empaquetada con laplataforma Java 2 Standard Edition versioacuten 14

Encontraraacute maacutes informacioacuten en los sitios Web de Sun correspondientes a JDBC y JTA

Utilice los objetos siguientes para permitir que el controlador JDBC de IBM Toolbox para Java participeen las transacciones distribuidas XAv AS400JDBCXADataSource - Una faacutebrica de objetos AS400JDBCXAConnection Es una subclase de

AS400JDBCDataSourcev AS400JDBCXACConnection - Un objeto de conexioacuten de agrupacioacuten que proporciona ganchos para la

gestioacuten de agrupaciones de conexiones y la gestioacuten de recursos XAv AS400JDBCXAResource - Un gestor de recursos destinado al uso en la gestioacuten de transacciones XA

Nota antes de V5R3 el servidor de host de base de datos utilizaba API XA para bloqueos de aacutembito detrabajo (modelo XA) En V5R3 y releases siguientes el servidor de host de base de datos utiliza API XApara bloqueos de aacutembito de transaccioacuten (modelo NTS) para todas las funciones MTS Encontraraacute maacutesinformacioacuten sobre las diferencias entre estas API en API XA

Ejemplo coacutemo se utilizan las clases de XA

El ejemplo siguiente muestra un uso sencillo de las clases de XA Tenga en cuenta que los detalles seincluiriacutean con tareas que utilizaran otros oriacutegenes de datos Este tipo de coacutedigo habitualmente aparecedentro de un gestor de transacciones

Cree un origen de datos XA para establecer la conexioacuten XAAS400JDBCXADataSource xaDataSource = new AS400JDBCXADataSource(myAS400)xaDataSourcesetUser(myUser)xaDataSourcesetPassword(myPasswd)

Obtenga un objeto XAConnection y obtenga el objeto XAResource asociado Esto proporciona acceso al gestor de recursosXAConnection xaConnection = xaDataSourcegetXAConnection()XAResource xaResource = xaConnectiongetXAResource()

Genere un nuevo Xid (esta tarea corresponde al gestor de transacciones)Xid xid =

Inicie la transaccioacutenxaResourcestart(xid XAResourceTMNOFLAGS)

Lleve a cabo alguna tarea con la base de datos

Finalice la transaccioacutenxaResourceend(xid XAResourceTMSUCCESS)

Realice los preparativos para una operacioacuten de compromiso

IBM Toolbox para Java 91

xaResourceprepare(xid)

Comprometa la transaccioacutenxaResourcecommit(xid false)

Cierre la conexioacuten XA cuando haya finalizado Esto cierra el recurso XA impliacutecitamentexaConnectionclose()

Clases de trabajosLas clases Jobs de IBM Toolbox para Java que se encuentran en el paquete access permiten a unprograma Java recuperar y cambiar informacioacuten de trabajo

Utilice las clases de trabajos para trabajar con el siguiente tipo de informacioacuten de trabajov Informacioacuten de fecha y horav Cola de trabajosv Identificadores de idiomav Anotaciones de mensajesv Cola de salidav Informacioacuten de impresora

Ejemplos

Los ejemplos que figuran a continuacioacuten muestran algunas maneras de utilizar las clases Job JobList yJobLog El primer ejemplo muestra un modo de emplear una memoria cacheacute con la clase Job Justodespueacutes del coacutedigo de ejemplo encontraraacute enlaces con otros ejemplos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Ejemplo utilizar una memoria cacheacute al establecer un valor y al obtener un valortry

Crea un objeto AS400AS400 as400 = new AS400(systemName)

Construye un objeto Jobbyte[] internalJobID = xxxxxxxxxxxxxxxxgetBytes()Job job = new Job(as400 internalJobID)

Obtiene informacioacuten de trabajoSystemoutprintln(Usuario de este trabajo + jobgetUser())Systemoutprintln(CPU utilizada + jobgetCPUUsed())Systemoutprintln(Fecha del sistema de entrada del trabajo + jobgetJobEnterSystemDate())

Establece la modalidad de memoria cacheacutejobsetCacheChanges(true)

Los cambios se almacenaraacuten en la memoria cacheacutejobsetRunPriority(66)jobsetDateFormat(YMD)

Comprometer los cambios Ello cambiaraacute el valor en el sistemajobcommitChanges()

Establecer informacioacuten de trabajo en el sistema directamente (sin memoria cacheacute)jobsetCacheChanges(false)jobsetRunPriority(60)

92 IBM Toolbox para Java IBM Toolbox para Java

catch (Exception e)

Systemoutprintln(error + e)

Los ejemplos siguientes muestran coacutemo listar los trabajos pertenecientes a un usuario especiacutefico coacutemolistar los trabajos con la informacioacuten de estado del trabajo y coacutemo mostrar los mensajes de unasanotaciones de trabajo

ldquoEjemplo coacutemo se utiliza JobList para listar informacioacuten de identificacioacuten de trabajordquo en la paacutegina441

ldquoEjemplo coacutemo se utiliza JobList para obtener una lista de trabajosrdquo en la paacutegina 444

ldquoEjemplo coacutemo se utiliza JobLog para visualizar los mensajes de las anotaciones de trabajordquo en lapaacutegina 447

Javadoc del paquete Access

Clase Job

La clase Job (en el paquete access) permite a un programa Java recuperar y cambiar informacioacuten de lostrabajos del servidor

Con la clase Job se puede recuperar y cambiar el siguiente tipo de informacioacuten de trabajov Colas de trabajosv Colas de salidav Anotaciones de mensajesv Dispositivo de impresorav Identificador de paiacutes o regioacutenv Formato de fecha

La clase Job tambieacuten ofrece la posibilidad de cambiar un solo valor a la vez o de poner en memoria cacheacutevarios cambios utilizando el meacutetodo setCacheChanges(true) y comprometiendo los cambios con elmeacutetodo commitChanges() Si la puesta en memoria cacheacute no estaacute activada no es necesario realizar uncompromiso

Ejemplo

Puede ver un ejemplo de coacutedigo en la documentacioacuten de consulta de javadocs correspondiente a la claseJob El ejemplo siguiente muestra coacutemo se establecen valores en la memoria cacheacute y se obtienen valoresde ella para establecer la prioridad de ejecucioacuten con el meacutetodo setRunPriority() y coacutemo se establece elformato de fecha con el meacutetodo setDateFormat()

Javadoc Job

Clase JobList

Puede utilizar una clase JobList (en el paquete access) para listar trabajos de IBM i

Con la clase JobList es posible recuperarv Todos los trabajosv Trabajos por nombre nuacutemero de trabajo o usuario

Utilice el meacutetodo getJobs() para devolver una lista de trabajos o el meacutetodo getLength() para devolver elnuacutemero de trabajos recuperados con el uacuteltimo meacutetodo getJobs()

IBM Toolbox para Java 93

Ejemplo coacutemo se utiliza JobList

El siguiente ejemplo lista todos los trabajos activos del sistema Cree un objeto AS400 Liste los trabajos que hay en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree el objeto lista de trabajosJobList jobList = new JobList(sys)

Obtenga la lista de trabajos activosEnumeration list = jobListgetJobs()

Para cada trabajo activo del sistema imprima informacioacuten de trabajowhile (listhasMoreElements())

Job j = (Job) listnextElement()

Systemoutprintln(jgetName() + +jgetUser() + +jgetNumber())

Javadoc Job

Clase JobLog

La clase JobLog (en el paquete access) recupera los mensajes existentes en las anotaciones de trabajo deun trabajo del servidor efectuando una llamada a getMessages()

Ejemplo coacutemo se utiliza JobLog

El ejemplo siguiente imprime todos los mensajes de las anotaciones de trabajo correspondientes alusuario especificado

El trabajo de preparacioacuten para crear un objeto AS400 y un objeto JobList ya se ha realizado

Obtenga la lista de trabajos activos en el servidorEnumeration list = jobListgetJobs()

Busque en la lista para localizar un trabajo correspondiente al usuario especificadowhile (listhasMoreElements())

Job j = (Job) listnextElement()

if (jgetUser()trim()equalsIgnoreCase(userID))

Se ha encontrado un trabajo correspondiente al usuario actual Cree un objeto anotaciones de trabajo para este trabajoJobLog jlog = new JobLog(system jgetName() jgetUser() jgetNumber())

Enumere los mensajes de las anotaciones de trabajo y luego impriacutemalosEnumeration messageList = jloggetMessages()

while (messageListhasMoreElements())

AS400Message message = (AS400Message) messageListnextElement()Systemoutprintln(messagegetText())

94 IBM Toolbox para Java IBM Toolbox para Java

Javadoc Job

Clases de mensajesLa clase AS400Message de IBM Toolbox para Java y sus clases asociadas representan un mensaje devueltodesde el servidor

AS400Message

El objeto AS400Message permite al programa Java recuperar un mensaje de IBM i generado en unaoperacioacuten anterior (por ejemplo en una llamada a mandato) El programa Java puede recuperar de unobjeto mensaje los siguientes datosv La biblioteca IBM i y el archivo de mensajes que contienen el mensajev El ID de mensajev El tipo de mensajev La gravedad del mensajev El texto del mensajev El texto de ayuda del mensaje

En el ejemplo siguiente se muestra coacutemo utilizar el objeto AS400Message

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree un objeto de llamada a mandatoCommandCall cmd = new CommandCall(sys myCommand)

Ejecute el mandatocmdrun()

Obtenga la lista de mensajes que son el resultado del mandato que se acaban de ejecutarAS400Message[] messageList = cmdgetMessageList()

Itere por la lista que muestra los mensajesfor (int i = 0 i lt messageListlength i++)

Systemoutprintln(messageList[i]getText())

Ejemplos coacutemo se utilizan las listas de mensajes

Los ejemplos que hay a continuacioacuten muestran coacutemo pueden emplearse las listas de mensajes conCommandCall y ProgramCallv ldquoEjemplo coacutemo se utiliza CommandCallrdquo en la paacutegina 387v ldquoEjemplo coacutemo se utiliza ProgramCallrdquo en la paacutegina 459

QueuedMessage

La clase QueuedMessage ampliacutea la clase AS400Message

La clase QueuedMessage accede a informacioacuten sobre un mensaje de una cola de mensajes de IBM i Conesta clase un programa Java puede recuperar los datos siguientes

IBM Toolbox para Java 95

v Informacioacuten acerca de doacutende se originoacute un mensaje como por ejemplo el programa el nuacutemero detrabajo y el usuario

v La cola de mensajesv La clave del mensajev El estado de respuesta al mensaje

El ejemplo siguiente imprime todos los mensajes que hay en la cola de mensajes del usuario actual (elque ha iniciado la sesioacuten)

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

La cola de mensajes estaacute en este sistemaAS400 sys = new AS400(mySystemmyCompanycom)

Cree el objeto cola de mensajes Este objeto representaraacute la cola correspondiente al usuario actualMessageQueue queue = new MessageQueue(sys MessageQueueCURRENT)

Obtenga la lista de mensajes que hay actualmente en la cola del usuarioEnumeration e = queuegetMessages()

Imprima cada mensaje de la colawhile (ehasMoreElements())

QueuedMessage msg = egetNextElement()Systemoutprintln(msggetText())

MessageFile

La clase MessageFile permite recibir un mensaje de un archivo de mensajes de IBM i La claseMessageFile devuelve un objeto AS400Message que contiene el mensaje Mediante la clase MessageFilepuede realizar estas tareasv Devolver un objeto mensaje que contiene el mensajev Devolver un objeto mensaje que contiene texto de sustitucioacuten del mensaje

El ejemplo siguiente muestra coacutemo se recupera e imprime un mensaje

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

AS400 system = new AS400(mysystemmycompanycom)MessageFile messageFile = new MessageFile(system)messageFilesetPath(QSYSLIBQCPFMSGMSGF)AS400Message message = messageFilegetMessage(CPD0170)Systemoutprintln(messagegetText())

MessageQueue

La clase MessageQueue permite a un programa Java interactuar con una cola de mensajes de IBM i

La clase MessageQueue hace de contenedor para la clase QueuedMessage El meacutetodo getMessages()concretamente devuelve una lista de objetos QueuedMessage La clase MessageQueue puede realizarestas tareasv Establecer atributos de cola de mensajesv Obtener informacioacuten sobre una cola de mensajesv Recibir mensajes de una cola de mensajes

96 IBM Toolbox para Java IBM Toolbox para Java

v Enviar mensajes a una cola de mensajesv Responder a los mensajes

El ejemplo siguiente lista los mensajes que hay en la cola de mensajes para el usuario actual

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

La cola de mensajes estaacute en este sistemaAS400 sys = new AS400(mySystemmyCompanycom)

Cree el objeto cola de mensajes Este objeto representaraacute la cola correspondiente al usuario actualMessageQueue queue = new MessageQueue(sys MessageQueueCURRENT)

Obtenga la lista de mensajes que hay actualmente en la cola del usuarioEnumeration e = queuegetMessages()

Imprima cada mensaje de la colawhile (ehasMoreElements())

QueuedMessage msg = egetNextElement()Systemoutprintln(msggetText())

Javadoc AS400MessageJavadoc QueuedMessageResumen de paquetes de accesoJavadoc MessageFileJavadoc MessageQueue

Clase NetServerLa clase NetServer ha quedado en desuso y la sustituye la clase ISeriesNetServer

La clase NetServer representa el servicio NetServer en el servidor Los objetos NetServer permitenconsultar y modificar el estado y la configuracioacuten del servicio NetServer

Por ejemplo puede utilizar la clase NetServer para realizar las tareas siguientesv Iniciar o detener NetServerv Obtener una lista de todos los compartimientos de archivo y compartimientos de impresora actualesv Obtener una lista de todas las sesiones actualesv Consultar y cambiar valores de atributo (empleando meacutetodos heredados de ChangeableResource)

Nota para utilizar la clase NetServer necesita un perfil de usuario de servidor que tenga la autorizacioacutenIOSYSCFG

La clase NetServer es una extensioacuten de ChangeableResource y Resource de modo que proporciona unconjunto de atributos para representar los diversos valores de NetServer Puede consultar o cambiar losatributos para acceder a la configuracioacuten de NetServer o modificarla Entre los atributos de NetServer seencuentran los siguientesv NOMBREv NAME_PENDINGv DOMAINv ALLOW_SYSTEM_NAMEv AUTOSTARTv CCSID

IBM Toolbox para Java 97

v WINS_PRIMARY_ADDRESS

Atributos pendientes

Muchos de los atributos de NetServer son atributos pendientes (por ejemplo NAME_PENDING) Losatributos pendientes representan los valores de NetServer que entraraacuten en vigor la proacutexima vez que seinicie (o que se reinicie) NetServer en el servidor

Si tiene un par de atributos relacionados y uno es un atributo pendiente mientras que el otro es unatributo no pendientev El atributo pendiente es de lecturaescritura por lo que puede modificarlov El atributo no pendiente es solo de lectura por lo que puede consultarlo pero no modificarlo

Otras clases de NetServer

Varias clases de NetServer relacionadas permiten obtener y establecer informacioacuten detallada sobreconexiones sesiones compartimientos de archivo y compartimientos de impresora especiacuteficosv NetServerConnection representa una conexioacuten NetServerv NetServerFileShare representa un compartimiento de servidor de archivo NetServerv NetServerPrintShare representa un compartimiento de servidor de impresioacuten NetServerv NetServerSession representa una sesioacuten NetServerv NetServerShare representa un compartimiento NetServer

Ejemplo coacutemo se utiliza un objeto NetServer para cambiar el nombre del NetServer

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree un objeto sistema para representar el servidorAS400 system = new AS400(MYSYSTEM MYUSERID MYPASSWD)

Cree un objeto con el que consultar y modificar el NetServerNetServer nServer = new NetServer(system)

Establezca el atributo de nombre pendiente en NEWNAMEnServersetAttributeValue(NetServerNAME_PENDING NEWNAME)

Comprometa los cambios De este modo se enviacutean los cambios al servidornServercommitAttributeChanges()

El nombre de NetServer se estableceraacute en NEWNAME la proacutexima vez que se finalice y se inicie NetServer

Clase ObjectReferencesLa clase ObjectReferences de IBM Toolbox para Java representa el conjunto de informacioacuten relativa a lasreferencias del sistema de archivos integrado sobre un objeto que puede recuperarse mediante la APIRecuperar referencias de objeto (QP0LROR)

Una referencia es un tipo de acceso o bloqueo individual obtenido sobre el objeto al utilizar las interfacesdel sistema de archivos integrado Un objeto puede tener varias referencias simultaacuteneas suponiendo quelos tipos de referencias no entren en conflicto entre siacute Esta clase no devolveraacute informacioacuten acerca debloqueos de rango de bytes que pueden existir actualmente sobre un objeto

El usuario debe tener la autorizacioacuten de datos de ejecucioacuten (X) sobre cada directorio que preceda alobjeto cuyas referencias deben obtenerse El usuario debe tener la autorizacioacuten de datos de lectura (R)sobre el objeto cuyas referencias deben obtenerse

98 IBM Toolbox para Java IBM Toolbox para Java

Para obtener maacutes informacioacuten consulte el Javadoc ObjectReferencesInformacioacuten relacionadaJavadoc ObjectReferencesAPI Recuperar referencias de objeto (QP0LROR)

Clases de permisosLas clases de permisos de IBM Toolbox para Java permiten obtener y establecer informacioacuten deautorizacioacuten sobre objeto La informacioacuten de autorizacioacuten sobre objeto tambieacuten se llama permiso La clasePermission representa la autorizacioacuten que una coleccioacuten de varios usuarios posee sobre un objeto Laclase UserPermission representa la autorizacioacuten que un usuario individual posee sobre un objetoespeciacutefico

Clase Permission

La clase Permission permite recuperar y cambiar informacioacuten de autorizacioacuten sobre objeto Incluye unacoleccioacuten de diversos usuarios que tienen autorizacioacuten sobre el objeto El objeto Permission permite alprograma Java poner en memoria cacheacute los cambios realizados en la autorizacioacuten hasta que se llame almeacutetodo commit() Una vez llamado el meacutetodo commit() todos los cambios realizados hasta ese momentose enviacutean al servidor Algunas de las funciones proporcionadas por la clase Permission sonv addAuthorizedUser() antildeade un usuario autorizadov commit() compromete en el servidor los cambios realizados en el permisov getAuthorizationList() devuelve la lista de autorizaciones del objetov getAuthorizedUsers() devuelve una enumeracioacuten de los usuarios autorizadosv getOwner() devuelve el nombre del propietario del objetov getSensitivityLevel() devuelve el nivel de confidencialidad del objetov getType() devuelve el tipo de autorizacioacuten sobre objeto (QDLO QSYS o Raiacutez)v getUserPermission() devuelve el permiso que un determinado usuario tiene sobre el objetov getUserPermissions() devuelve una enumeracioacuten de los permisos que los usuarios tienen sobre el

objetov setAuthorizationList() establece la lista de autorizaciones del objetov setSensitivityLevel() establece el nivel de confidencialidad del objeto

Ejemplo coacutemo se utiliza Permission

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se crea un permiso y se antildeade un usuario para que tenga autorizacioacutensobre un objeto

Cree un objeto AS400AS400 as400 = new AS400()

Cree el objeto Permission pasando el AS400 y el objetoPermission myPermission = new Permission(as400 QSYSLIBmyLibLIB)

Antildeada un usuario para que tenga autorizacioacuten sobre el objetomyPermissionaddAuthorizedUser(User1)

Clase UserPermission

La clase UserPermission representa la autorizacioacuten de un determinado usuario individualUserPermission tiene tres subclases que manejan la autorizacioacuten basaacutendose en el tipo de objetov DLOPermission

IBM Toolbox para Java 99

v QSYSPermissionv RootPermission

La clase UserPermission le permite llevar a cabo estas tareasv Determinar si el perfil de usuario es un perfil de grupov Devolver el nombre del perfil de usuariov Indicar si el usuario tiene autorizacioacutenv Establecer la autorizacioacuten de la gestioacuten de lista de autorizaciones

Ejemplo coacutemo se utiliza UserPermission

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se recuperan los usuarios y los grupos que tienen permiso sobre unobjeto y coacutemo se imprimen de uno en uno

Cree un objeto sistemaAS400 sys = new AS400(MYAS400 USERID PASSWORD)

Represente los permisos sobre un objeto existente en el sistema como una bibliotecaPermission objectInQSYS = new Permission(sys QSYSLIBFREDLIB)

Recupere los diversos usuariosgrupos que tienen establecidos permisos en ese objetoEnumeration enum = objectInQSYSgetUserPermissions()while (enumhasMoreElements())

Imprima los nombres de perfil de usuariogrupo de uno en unoUserPermission userPerm = (UserPermission)enumnextElement()Systemoutprintln(userPermgetUserID())

Javadoc PermissionJavadoc UserPermission

Clase DLOPermission

La clase DLOPermission es una subclase de UserPermission DLOPermission permite visualizar yestablecer las autorizaciones (denominadas permisos) que un usuario tiene para un objeto de bibliotecade documentos (DLO) Los DLO se almacenan en QDLS

A cada usuario se le asigna uno de los siguientes valores de autorizacioacuten

Valor de autorizacioacuten Descripcioacuten

ALL El usuario puede llevar a cabo todas las operacionessalvo las que estaacuten controladas por la gestioacuten de lista deautorizaciones

AUTL Se utiliza la lista de autorizaciones para determinar laautorizacioacuten sobre el documento

CHANGE El usuario puede realizar cambios y efectuar funcionesbaacutesicas en el objeto

EXCLUDE El usuario no puede acceder al objeto

USE El usuario posee sobre el objeto autorizacioacuten operativade lectura y de ejecucioacuten

100 IBM Toolbox para Java IBM Toolbox para Java

Si desea realizar cambios o determinar cuaacutel es la autorizacioacuten de un usuario debe utilizar uno de estosmeacutetodosv getDataAuthority() permite visualizar el valor de la autorizacioacuten del usuariov setDataAuthority() permite establecer el valor de la autorizacioacuten del usuario

Tras establecer los permisos es importante que utilice el meacutetodo commit() de la clase Permissions paraenviar los cambios al servidor

Para obtener maacutes informacioacuten sobre los permisos y las autorizaciones consulte el tema Informacioacuten deconsulta sobre seguridad

Ejemplo coacutemo se utiliza DLOPermission

En el ejemplo siguiente se muestra coacutemo se recuperan e imprimen los permisos DLO incluidos losperfiles de usuario para cada permiso

Cree un objeto sistema

AS400 sys = new AS400(MYAS400 USERID PASSWORD) Represente los permisos sobre un objeto DLOPermission objectInQDLS = new Permission(sys QDLSMyFolder)

Imprima el nombre de viacutea del objeto y recupere los correspondientes permisosSystemoutprintln(Los permisos sobre + objectInQDLSgetObjectPath() + son)Enumeration enum = objectInQDLSgetUserPermissions()while (enumhasMoreElements())

Para cada uno de los permisos imprima el nombre del perfil de usuario y las autorizaciones que posee dicho usuario sobre el objetoDLOPermission dloPerm = (DLOPermission)enumnextElement()Systemoutprintln(dloPermgetUserID() + + dloPermgetDataAuthority())

Informacioacuten relacionadaJavadoc DLOPermission

QSYSPermission

QSYSPermission es una subclase de la clase UserPermission QSYSPermission permite visualizar yestablecer el permiso que un usuario posee sobre un objeto de la estructura tradicional de bibliotecas deIBM i de QSYSLIB Puede establecer la autorizacioacuten sobre un objeto almacenado en QSYSLIBestableciendo un valor de autorizacioacuten definido por el sistema o estableciendo las autorizacionesindividuales sobre objetos y sobre datos

La tabla siguiente lista y describe los valores de autorizacioacuten definidos por el sistema vaacutelidos

Valor de autorizacioacuten definido por el sistema Descripcioacuten

ALL El usuario puede llevar a cabo todas las operacionessalvo las que estaacuten controladas por la gestioacuten de lista deautorizaciones

AUTL Se utiliza la lista de autorizaciones para determinar laautorizacioacuten sobre el documento

CHANGE El usuario puede realizar cambios y efectuar funcionesbaacutesicas en el objeto

EXCLUDE El usuario no puede acceder al objeto

USE El usuario posee sobre el objeto autorizacioacuten operativade lectura y de ejecucioacuten

IBM Toolbox para Java 101

Cada valor de autorizacioacuten definido por el sistema representa en realidad una combinacioacuten de lasautorizaciones individuales sobre objetos y sobre datos La tabla siguiente muestra las relaciones de lasautorizaciones definidas por el sistema con las autorizaciones individuales sobre objetos y sobre datos

Tabla 1 S indica las autorizaciones que siacute pueden asignarse n indica las autorizaciones que no pueden asignarse

Autorizacioacutendefinidapor elsistema

Autorizacioacuten sobre objeto Autorizacioacuten sobre datos

Oper Gest Exist Alter Ref Lect Adic Actual Supr Ejec

Total S S S S S S S S S S

Cambio S n n n n S S S S S

Exclusioacuten n n n n n n n n n n

Uso S n n n n S n n n S

Lista deautoriz

Solo tiene validez con el usuario (PUBLIC) y una lista de autorizaciones especificada que determinelas autorizaciones individuales sobre objetos y sobre datos

Al especificar una autorizacioacuten definida por el sistema automaacuteticamente se asignan las autorizacionesindividuales correspondientes Del mismo modo al especificar distintas autorizaciones individuales secambian los valores de autorizacioacuten individuales correspondientes Cuando una combinacioacuten deautorizaciones individuales sobre objeto y autorizaciones sobre datos no se correlaciona con un valor deautorizacioacuten definido por el sistema uacutenico el valor uacutenico pasa a ser la autorizacioacuten Definida porusuario

Utilice el meacutetodo getObjectAuthority() para visualizar la autorizacioacuten definida por el sistema actualUtilice el meacutetodo setObjectAuthority() para establecer la autorizacioacuten definida por el sistema actualutilizando un solo valor

Utilice el meacutetodo set adecuado para habilitar o inhabilitar los valores individuales de autorizacioacuten sobreobjetov setAlter()v setExistence()v setManagement()v setOperational()v setReference()

Utilice el meacutetodo set adecuado para habilitar o inhabilitar los valores de autorizacioacuten sobre datosindividualesv setAdd()v setDelete()v setExecute()v setRead()v setUpdate()

Para obtener maacutes informacioacuten acercas de las diversas autorizaciones consulte el tema Informacioacuten deconsulta sobre seguridad Para obtener informacioacuten sobre coacutemo utilizar los mandatos CL para otorgar yeditar autorizaciones sobre objetos consulte los mandatos CL Otorgar autorizacioacuten sobre objeto(GRTOBJAUT) y Editar autorizacioacuten sobre objeto (EDTOBJAUT)

Ejemplo

Este ejemplo muestra coacutemo se recuperan e imprimen los permisos correspondientes a un objeto QSYS

102 IBM Toolbox para Java IBM Toolbox para Java

Cree un objeto sistemaAS400 sys = new AS400(MYAS400 USERID PASSWORD)

Represente los permisos sobre un objeto QSYSPermission objectInQSYS = new Permission(sys QSYSLIBFREDLIB)

Imprima el nombre de viacutea del objeto y recupere los correspondientes permisosSystemoutprintln(Los permisos sobre +objectInQSYSgetObjectPath()+ son)Enumeration enum = objectInQSYSgetUserPermissions()while (enumhasMoreElements())

Para cada uno de los permisos imprima el nombre del perfil de usuario y las autorizaciones que posee dicho usuario sobre el objetoQSYSPermission qsysPerm = (QSYSPermission)enumnextElement()Systemoutprintln(qsysPermgetUserID()+ +qsysPermgetObjectAuthority())

Javadoc QSYSPermissionldquoClase UserPermissionrdquo en la paacutegina 99

RootPermission

La clase RootPermission representa la autorizacioacuten de un usuario sobre los objetos contenidos en laestructura de directorio raiacutez Los objetos de RootPermissions son los que no estaacuten contenidos enQSYSLIB ni en QDLS

RootPermission es una subclase de la clase UserPermission La clase RootPermission permite visualizar yestablecer los permisos correspondientes a un usuario de un objeto contenido en la estructura deldirectorio raiacutez

Un objeto que esteacute en la estructura del directorio raiacutez puede establecer la autorizacioacuten sobre datos o laautorizacioacuten sobre objeto Puede establecer la autorizacioacuten sobre datos en los valores que se indican en latabla siguiente Utilice el meacutetodo getDataAuthority() para visualizar los valores actuales y el meacutetodosetDataAuthority() para establecer la autorizacioacuten sobre datos

La tabla siguiente lista y describe los valores de autorizacioacuten sobre datos vaacutelidos

Valor de autorizacioacutensobre datos Descripcioacuten

none El usuario no posee autorizacioacuten alguna sobre el objeto

RWX El usuario posee autorizacioacuten para leer antildeadir actualizar suprimir y ejecutar

RW El usuario posee autorizacioacuten para leer antildeadir y suprimir

RX El usuario posee autorizacioacuten para leer y ejecutar

WX El usuario posee autorizacioacuten para antildeadir actualizar suprimir y ejecutar

R El usuario posee autorizacioacuten para leer

W El usuario posee autorizacioacuten para antildeadir actualizar y suprimir

X El usuario posee autorizacioacuten para ejecutar

EXCLUDE El usuario no puede acceder al objeto

AUTL Las autorizaciones de uso puacuteblico sobre este objeto proceden de la lista deautorizaciones

La autorizacioacuten sobre objeto se puede establecer en uno o varios de estos valores alteracioacuten existenciagestioacuten o referencia Puede utilizar los meacutetodos setAlter() setExistence() setManagement() osetReference() para activar o desactivar los valores

IBM Toolbox para Java 103

Tras establecer la autorizacioacuten sobre datos o la autorizacioacuten sobre objeto de un objeto es importante queutilice el meacutetodo commit() de la clase Permissions para enviar los cambios al servidor

Para obtener maacutes informacioacuten acercas de las diversas autorizaciones consulte el tema Informacioacuten deconsulta sobre seguridad

Ejemplo

Este ejemplo muestra coacutemo se recuperan e imprimen los permisos correspondientes a un objeto raiacutez Cree un objeto sistemaAS400 sys = new AS400(MYAS400 USERID PASSWORD)

Represente los permisos sobre un objeto en el sistema de archivos raiacutezPermission objectInRoot = new Permission(sys fred)

Imprima el nombre de viacutea del objeto y recupere los correspondientes permisosSystemoutprintln(Los permisos sobre +objectInRootgetObjectPath()+ son)Enumeration enum = objectInRootgetUserPermissions()while (enumhasMoreElements())

Para cada uno de los permisos imprima el nombre del perfil de usuario y las autorizaciones que posee dicho usuario sobre el objetoRootPermission rootPerm = (RootPermission)enumnextElement()Systemoutprintln(rootPermgetUserID()+ +rootPermgetDataAuthority())

Informacioacuten relacionadaJavadoc RootPermission

Clases de impresioacutenLos objetos de impresioacuten son los archivos en spool las colas de salida las impresoras los archivos deimpresora los trabajos transcriptores y los recursos de las Funciones Avanzadas de Impresioacuten (AFP)incluidos los fonts las definiciones de formulario los preformatos las definiciones de paacutegina y lossegmentos de paacutegina

Las clases de IBM Toolbox para Java de los objetos de impresioacuten estaacuten organizadas en una clase basePrintObject y en una subclase para cada uno de los seis tipos de objetos de impresioacuten La clase basecontiene los meacutetodos y los atributos que son comunes a todos los objetos de impresioacuten del servidor Lassubclases contienen los meacutetodos y atributos que son especiacuteficos para cada subtipo

Ejemplosv Ejemplo crear archivos en spool muestra coacutemo se crea un archivo en spool en un servidor a partir de

una corriente de entradav Ejemplo crear archivos en spool SCS muestra coacutemo se genera una corriente de datos SCS utilizando la

clase SCS3812Writer y coacutemo se escribe la corriente en un archivo en spool en el servidorv Ejemplo leer archivos en spool muestra coacutemo se utiliza PrintObjectInputStream para leer un archivo en

spool existente en el servidorv Ejemplo leer y transformar archivos en spool muestra coacutemo se utiliza PrintObjectPageInputStream y

PrintObjectTransformedInputStream para obtener diferentes transformaciones al leer datos de archivosen spool

v Ejemplo copiar un archivo en spool muestra coacutemo copiar un archivo en spool en la misma cola quecontiene el archivo que se desea copiar

v Ejemplo listar archivos en spool asiacutencronamente (utilizando escuchas) muestra coacutemo se listan de modoasiacutencrono todos los archivos en spool de un sistema y coacutemo se utiliza la interfazPrintObjectListListener para obtener informacioacuten de retorno a medida que la lista se va construyendo

104 IBM Toolbox para Java IBM Toolbox para Java

v Ejemplo listar archivos en spool asiacutencronamente (sin utilizar escuchas) muestra coacutemo se listan demodo asiacutencrono todos los archivos en spool de un sistema sin utilizar la interfazPrintObjectListListener

v Ejemplo listar archivos en spool siacutencronamente muestra coacutemo se listan de modo siacutencrono todos losarchivos en spool que hay en un sistema

Informacioacuten relacionadaJavadoc PrintObject

Listar objetos de impresioacuten

Puede utilizar la clase PrintObjectList de IBM Toolbox para Java y sus subclases para trabajar con listasde objetos de impresioacuten Los objetos de impresioacuten son los archivos en spool las colas de salida lasimpresoras los recursos de las Funciones Avanzadas de Impresioacuten (AFP) los archivos de impresora y lostrabajos transcriptores

Cada subclase dispone de meacutetodos que permiten el filtrado de la lista basaacutendose en los elementos quetienen sentido para un determinado tipo de objeto de impresioacuten Por ejemplo SpooledFileList permitefiltrar una lista de archivos en spool basaacutendose en el usuario que creoacute los archivos en spool en la cola desalida en la que se encuentran los archivos en spool en el tipo de formulario o en los datos de usuario delos archivos en spool Uacutenicamente se listan los archivos en spool que coinciden con los criterios defiltrado De no establecerse ninguacuten filtro se utiliza un valor predeterminado para cada uno de los filtros

Para recuperar realmente la lista de objetos de impresioacuten del servidor se emplea el meacutetodoopenSynchronously() u openAsynchronously() El meacutetodo openSynchronously() no vuelve hasta que sehan recuperado del servidor todos los objetos de la lista El meacutetodo openAsynchronously() vuelveinmediatamente y el llamador puede realizar otras tareas en primer plano mientras espera a que seconstruya la lista La lista abierta asiacutencronamente permite asimismo al llamador empezar a mostrar losobjetos al usuario a medida que van llegando El usuario debido a que puede ver los objetos a medidaque van llegando tiene la impresioacuten de que el tiempo de respuesta es maacutes corto De hecho el tiempo derespuesta global puede ser maacutes largo a causa del proceso adicional que se lleva a cabo en cada objeto dela lista

Si la lista se abre asiacutencronamente el llamador puede obtener informacioacuten de retorno acerca de laconstruccioacuten de la lista Diversos meacutetodos como por ejemplo isCompleted() y size() indican si ya se haterminado de construir la lista o devuelven el tamantildeo actual de la lista Otros meacutetodos comowaitForListToComplete() y waitForItem() permiten al llamador esperar a que la lista se complete o a quese recupere un elemento determinado Ademaacutes de llamar a estos meacutetodos de PrintObjectList el llamadorpuede registrarse en la lista como escucha En tal caso el llamador recibe notificacioacuten de los eventos quese producen en la lista Para registrarse o desregistrarse de los eventos el llamador utilizaPrintObjectListListener() y a continuacioacuten llama a addPrintObjectListListener() para registrarse o aremovePrintObjectListListener() para desregistrarse En la siguiente tabla se muestran los eventos que unobjeto PrintObjectList puede comunicar

Evento de PrintObjectList Cuaacutendo se entrega el evento

listClosed Al cerrarse la lista

listCompleted Al completarse la lista

listErrorOccurred Cuando se lanza alguna excepcioacuten mientras se recupera la lista

listOpened Al abrirse la lista

listObjectAdded Cuando se antildeade un objeto a la lista

Tras haber abierto la lista y procesado los objetos que contiene cierre la lista utilizando el meacutetodo close()Asiacute se liberan los recursos que se hayan asignado al colector de basura durante la apertura Despueacutes decerrar una lista es posible modificar los filtros de la misma y la lista puede abrirse de nuevo

IBM Toolbox para Java 105

Cuando se listan objetos de impresioacuten los atributos acerca de cada objeto de impresioacuten listado se enviacuteandesde el servidor y se almacenan junto con el objeto de impresioacuten Estos atributos se pueden actualizarmediante el meacutetodo update() de la clase PrintObject Los atributos enviados desde el servidor variacutean enfuncioacuten del tipo de objeto de impresioacuten que se lista Hay una lista predeterminada de atributos para cadatipo de objeto de impresioacuten que se puede alterar temporalmente utilizando el meacutetodosetAttributesToRetrieve() de PrintObjectList En la seccioacuten Recuperar atributos de PrintObject encontraraacuteuna lista de los atributos soportados por cada tipo de objeto de impresioacuten

Ejemplos

En los ejemplos siguientes se muestran diversas formas de listar archivos en spool

ldquoEjemplo listar archivos en spool asiacutencronamente (utilizando escuchas)rdquo en la paacutegina 453 quemuestra coacutemo se listan de modo asiacutencrono todos los archivos en spool de un sistema y coacutemo seutiliza la interfaz PrintObjectListListener para obtener informacioacuten de retorno a medida que la listase va construyendo

ldquoEjemplo listar archivos en spool asiacutencronamente (sin utilizar escuchas)rdquo en la paacutegina 456 quemuestra coacutemo se listan de modo asiacutencrono todos los archivos en spool de un sistema sin utilizar lainterfaz PrintObjectListListener

ldquoEjemplo listar archivos en spool siacutencronamenterdquo en la paacutegina 458 que muestra coacutemo se listan demodo siacutencrono todos los archivos en spool que hay en un sistema

Javadoc PrintObjectListJavadoc SpooledFileListJavadoc AFPResource

Trabajar con objetos de impresioacuten

PrintObject es una clase abstracta Una clase abstracta no permite crear una instancia de la clase En vezde ello es preciso crear una instancia de una de sus subclases para trabajar con objetos de impresioacuten

Para crear objetos de las subclases puede seguir cualquiera de estos procedimientosv Si conoce el sistema y los atributos identificadores del objeto construya el objeto expliacutecitamente

llamando al constructor puacuteblico de dicho objetov Puede utilizar una subclase de PrintObjectList para construir una lista de los objetos y luego acceder a

los objetos individuales mediante la listav Un objeto puede crearse y serle devuelto como resultado de llamar a un meacutetodo o a un conjunto de

meacutetodos Por ejemplo el meacutetodo estaacutetico start() de la clase WriterJob devuelve un objeto WriterJob

Utilice la clase base PrintObject y sus subclases para trabajar con los objetos de impresioacuten del servidorv OutputQueuev Impresorav PrinterFilev SpooledFilev WriterJob

Javadoc PrintObjectJavadoc PrintObjectListJavadoc OutputQueueJavadoc PrinterJavadoc PrinterFileJavadoc SpooledFile

106 IBM Toolbox para Java IBM Toolbox para Java

Javadoc WriterJob

Recuperar atributos de PrintObject

Para recuperar atributos de un objeto de impresioacuten puede utilizar el ID de atributo y uno de los diversosmeacutetodos de la clase base PrintObject

Los meacutetodos que puede utilizar son los siguientesv Utilice getIntegerAttribute(int attributeID) para recuperar un atributo de tipo entero)v Utilice getFloatAttribute(int attributeID) para recuperar un atributo de tipo coma flotantev Utilice getStringAttribute(int attributeID) para recuperar un atributo de tipo serie

El paraacutemetro attributeID es un entero que identifica el atributo que se ha de recuperar Todos los ID sedefinen como constantes puacuteblicas en la clase base PrintObject El archivo PrintAttributes contiene unaentrada de cada ID de atributo La entrada incluye una descripcioacuten del atributo y de su tipo (enterocoma flotante o serie) Si desea obtener una lista de cuaacuteles son los atributos que pueden recuperarsemediante estos meacutetodos seleccione los enlaces siguientesv AFPResourceAttrs para recursos AFPv OutputQueueAttrs para colas de salidav PrinterAttrs para impresorasv PrinterFileAttrs para archivos de impresorav SpooledFileAttrs para archivos en spoolv WriterJobAttrs para trabajos transcriptores

Para lograr un rendimiento aceptable estos atributos se copian en el cliente La copia se realiza al listarselos objetos o bien cuando un objeto se necesite por primera vez en el caso de que dicho objeto se hayacreado impliacutecitamente Ello evita que el objeto tenga que ir al host cada vez que la aplicacioacuten necesiterecuperar un atributo Tambieacuten hace que sea posible que la instancia del objeto de impresioacuten Javacontenga informacioacuten desfasada acerca del objeto existente en el servidor El usuario del objeto puederenovar todos los atributos llamando al meacutetodo update() en el objeto Ademaacutes si la aplicacioacuten llama aalguacuten meacutetodo existente en el objeto que pueda provocar cambios en los atributos del objeto los atributosse actualizan automaacuteticamente Por ejemplo si una cola de salida tiene el atributo de estado RELEASED(getStringAttribute(ATTR_OUTQSTS) devuelve la serie RELEASED) y se llama al meacutetodo hold() en lacola de datos si despueacutes se obtiene el atributo de estado se devolveriacutea el valor HELD

Meacutetodo setAttributes

Puede utilizar el meacutetodo setAttributes para cambiar los atributos de los objetos de archivos en spool yarchivo de impresora Si desea obtener una lista de cuaacuteles son los atributos que se pueden establecerseleccione los enlaces siguientesv PrinterFileAttrs para archivos de impresorav SpooledFileAttrs para archivos en spool

El meacutetodo setAttributes toma un paraacutemetro PrintParameterList que es una clase utilizada para conteneruna coleccioacuten de identificadores de atributos y de sus valores La lista al principio estaacute vaciacutea y elllamador puede ir antildeadiendo atributos a la lista mediante los diversos meacutetodos setParameter()

Clase PrintParameterList

La clase PrintParameterList se puede utilizar para pasar un grupo de atributos a un meacutetodo que tomecomo paraacutemetros un nuacutemero determinado de atributos Por ejemplo para enviar un archivo en spoolmediante TCP (LPR) puede emplear el meacutetodo de SpooledFile sendTCP() El objeto PrintParameterListcontiene los paraacutemetros necesarios para el mandato de enviar (por ejemplo el sistema remoto y la cola)

IBM Toolbox para Java 107

maacutes los paraacutemetros opcionales que se deseen (por ejemplo si hay que suprimir el archivo en spooldespueacutes del enviacuteo) En estos casos la documentacioacuten del meacutetodo proporciona una lista de los atributosnecesarios y de los opcionales El meacutetodo setParameter() de PrintParameterList no comprueba queacuteatributos se establecen ni los valores que se les da El meacutetodo setParameter() de PrintParameterList tansolo contiene los valores que se han de pasar al meacutetodo En general los atributos adicionales dePrintParameterList no se tienen en cuenta y los valores no permitidos de los atributos utilizados sediagnostican en el servidor

Javadoc PrintObjectJavadoc SpooledFileJavadoc PrintParameterList

Atributos de recursos AFP

Este tema indica los atributos que pueden recuperarse y establecerse para un recurso AFP

Recuperar atributos

Pueden recuperarse los atributos siguientes para un recurso AFP utilizando el meacutetodogetIntegerAttribute() getStringAttribute() o getFloatAttribute() adecuadov ATTR_AFP_RESOURCE - Viacutea de acceso del sistema de archivos integrado de recursos AFPv ATTR_OBJEXTATTR - Atributo ampliado de objetov ATTR_DESCRIPTION - Texto descriptivov ATTR_DATE - Archivo de fecha abiertov ATTR_TIME - Archivo de hora abiertov ATTR_NUMBYTES - Nuacutemero de bytes de lecturaescritura

Establecer atributos

No estaacute permitido establecer atributos para un recurso AFP

Atributos de la cola de salida

Este tema indica los atributos disponibles para una cola de salida

Recuperar atributos

Pueden recuperarse los atributos siguientes para una cola de salida empleando el meacutetodogetIntegerAttribute() getStringAttribute() o getFloatAttribute() adecuadov ATTR_AUTHCHCK - Autorizacioacuten para comprobarv ATTR_DATA_QUEUE - Nombre del sistema de archivos integrado de la cola de datosv ATTR_DISPLAYANY - Visualizar cualquier archivov ATTR_JOBSEPRATR - Separadores de trabajov ATTR_NUMFILES - Nuacutemero de archivosv ATTR_NUMWRITERS - Nuacutemero de transcriptores iniciados para la colav ATTR_OPCNTRL - Operador controladov ATTR_ORDER - Orden de archivos en colav ATTR_OUTPUT_QUEUE - Nombre del sistema de archivos integrado de la cola de salidav ATTR_OUTQSTS - Estado de la cola de salidav ATTR_PRINTER - Impresorav ATTR_SEPPAGE - Paacutegina de separacioacutenv ATTR_DESCRIPTION - Descripcioacuten de texto

108 IBM Toolbox para Java IBM Toolbox para Java

v ATTR_USRDEFOPT - Opciones definidas por el usuariov ATTR_USER_DEFINED_OBJECT - Nombre del sistema de archivos integrado del objeto definido por

el usuariov ATTR_USER_TRANSFORM_PROG - Nombre del sistema de archivos integrado del programa de

transformacioacuten del usuariov ATTR_USER_DRIVER_PROG - Nombre del sistema de archivos integrado del programa controlador

del usuariov ATTR_WTRJOBNAME - Nombre de trabajo del transcriptorv ATTR_WTRJOBNUM - Nuacutemero de trabajo del transcriptorv ATTR_WTRJOBSTS - Estado del trabajo del transcriptorv ATTR_WTRJOBUSER - Nombre de usuario del trabajo del transcriptor

Establecer atributos

No estaacute permitido establecer atributos para una cola de salida

Atributos de impresora

Pueden recuperarse los atributos siguientes para una impresora empleando el meacutetodogetIntegerAttribute() getStringAttribute() o getFloatAttribute() adecuado

Recuperar atributos

v ATTR_AFP - Funciones avanzadas de impresioacutenv ATTR_ALIGNFORMS - Alinear formulariosv ATTR_ALWDRTPRT - Permitir impresioacuten directav ATTR_BTWNCPYSTS - Estado entre copiasv ATTR_BTWNFILESTS - Estado entre archivosv ATTR_CODEPAGE - Paacutegina de coacutedigosv ATTR_CHANGES - Cambiosv ATTR_DEVCLASS - Clase de dispositivov ATTR_DEVMODEL - Modelo de dispositivov ATTR_DEVTYPE - Tipo de dispositivov ATTR_DEVSTATUS - Estado de dispositivov ATTR_DRWRSEP - Bandeja de separadoresv ATTR_ENDPNDSTS - Estado pendiente de finalizacioacutenv ATTR_FILESEP - Separadores de archivov ATTR_FONTID - Identificador de fontv ATTR_FORM_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de formulariov ATTR_FORMTYPE - Tipo de formulariov ATTR_FORMTYPEMSG - Mensaje de tipo de formulariov ATTR_FORMFEED - Alimentacioacuten de papelv ATTR_CHAR_ID - Juego de caracteres graacuteficosv ATTR_HELDSTS - Estado de retenidov ATTR_HOLDPNDSTS - Estado pendiente de retencioacutenv ATTR_JOBUSER - Usuario de trabajov ATTR_MFGTYPE - Tipo y modelo de fabricantev ATTR_MESSAGE_QUEUE - Nombre del sistema de archivos integrado de la cola de mensajesv ATTR_ONJOBQSTS - Estado de en cola de trabajos

IBM Toolbox para Java 109

v ATTR_OUTPUT_QUEUE - Nombre del sistema de archivos integrado de la cola de salidav ATTR_OVERALLSTS - Estado globalv ATTR_POINTSIZE - Cuerpov ATTR_PRINTER - Impresorav ATTR_PRTDEVTYPE - Tipo de dispositivo de impresorav ATTR_PUBINF_COLOR_SUP - Color de informacioacuten de publicacioacuten soportadov ATTR_PUBINF_PPM_COLOR - Paacuteginas por minuto de informacioacuten de publicacioacuten (color)v ATTR_PUBINF_PPM - Paacuteginas por minuto de informacioacuten de publicacioacuten (monocromo)v ATTR_PUBINF_DUPLEX_SUP - Soporte duacuteplex de informacioacuten de publicacioacutenv ATTR_PUBINF_LOCATION - Ubicacioacuten de informacioacuten de publicacioacutenv ATTR_RMTLOCNAME - Nombre de ubicacioacuten remotav ATTR_SPOOLFILE - Nombre de archivo en spoolv ATTR_SPLFNUM - Nuacutemero de archivo en spoolv ATTR_STARTEDBY - Iniciado por usuariov ATTR_DESCRIPTION - Texto descriptivov ATTR_USERDATA - Datos de usuariov ATTR_USRDEFOPT - Opciones definidas por el usuariov ATTR_USER_DEFINED_OBJECT - Nombre del sistema de archivos integrado del objeto definido por

el usuariov ATTR_USER_TRANSFORM_PROG - Nombre del sistema de archivos integrado del programa de

transformacioacuten del usuariov ATTR_USER_DRIVER_PROG - Nombre del sistema de archivos integrado del programa controlador

del usuariov ATTR_SCS2ASCII - Transformar SCS en ASCIIv ATTR_WTNGDATASTS - Estado de en espera de datosv ATTR_WTNGDEVSTS - Estado de en espera de dispositivov ATTR_WTNGMSGSTS - Estado de en espera de mensajev ATTR_WTRAUTOEND - Cuaacutendo finalizar transcriptor automaacuteticamentev ATTR_WTRJOBNAME - Nombre de trabajo del transcriptorv ATTR_WTRJOBSTS - Estado del trabajo del transcriptorv ATTR_WTRSTRTD - Transcriptor iniciadov ATTR_WRTNGSTS - Estado de transcribiendo

Establecer atributos

No estaacute permitido establecer atributos para una impresora

Atributos de archivo de impresora

Este tema contiene una lista de los atributos de archivo de impresora que se utilizan con IBM Toolboxpara Java

Recuperar atributos

Pueden recuperarse los atributos siguientes para un archivo de impresora empleando el meacutetodogetIntegerAttribute() getStringAttribute() o getFloatAttribute() adecuadov ATTR_ALIGN - Alinear paacuteginav ATTR_BKMGN_ACR - Desplazamiento a traveacutes de margen reverso

110 IBM Toolbox para Java IBM Toolbox para Java

v ATTR_BKMGN_DWN - Desplazamiento abajo de margen reversov ATTR_BACK_OVERLAY - Nombre del sistema de archivos integrado del preformato reversov ATTR_BKOVL_DWN - Desplazamiento abajo de preformato reversov ATTR_BKOVL_ACR - Desplazamiento a traveacutes de preformato reversov ATTR_CPI - Caracteres por pulgadav ATTR_CODEDFNTLIB - Nombre de biblioteca de font codificadov ATTR_CODEPAGE - Paacutegina de coacutedigosv ATTR_CODEDFNT - Nombre de font codificadov ATTR_CONTROLCHAR - Caraacutecter de controlv ATTR_CONVERT_LINEDATA - Convertir datos de liacuteneav ATTR_COPIES - Copiasv ATTR_CORNER_STAPLE - Grapa en esquinav ATTR_DBCSDATA - Datos DBCS especificados por usuariov ATTR_DBCSEXTENSN - Caracteres de extensioacuten DBCSv ATTR_DBCSROTATE - Rotacioacuten de caracteres DBCSv ATTR_DBCSCPI - Caracteres DBCS por pulgadav ATTR_DBCSSISO - Espaciado DBCS SOSIv ATTR_DFR_WRITE - Diferir escriturav ATTR_PAGRTT - Grados de rotacioacuten de paacuteginav ATTR_EDGESTITCH_NUMSTAPLES - Nuacutemero de grapas de ligadura de bordesv ATTR_EDGESTITCH_REF - Referencia de ligadura de bordesv ATTR_EDGESTITCH_REFOFF - Desplazamiento de referencia de ligadura de bordesv ATTR_ENDPAGE - Paacutegina finalv ATTR_FILESEP - Separadores de archivov ATTR_FOLDREC - Acomodar registrosv ATTR_FONTID - Identificador de fontv ATTR_FORM_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de formulariov ATTR_FORMFEED - Alimentacioacuten de papelv ATTR_FORMTYPE - Tipo de formulariov ATTR_FTMGN_ACR - Desplazamiento a traveacutes de margen anversov ATTR_FTMGN_DWN - Desplazamiento abajo de margen anversov ATTR_FRONT_OVERLAY - Nombre del sistema de archivos integrado del preformato anversov ATTR_FTOVL_ACR - Desplazamiento a traveacutes de preformato anversov ATTR_FTOVL_DWN - Desplazamiento abajo de preformato anversov ATTR_CHAR_ID - Juego de caracteres graacuteficosv ATTR_JUSTIFY - Alineacioacuten de hardwarev ATTR_HOLD - Retener archivo en spoolv ATTR_LPI - Liacuteneas por pulgadav ATTR_MAXRCDS - Maacuteximo de registros de salida en spoolv ATTR_OUTPTY - Prioridad de salidav ATTR_OUTPUT_QUEUE - Nombre del sistema de archivos integrado de la cola de salidav ATTR_OVERFLOW - Nuacutemero de liacutenea de desbordamientov ATTR_PAGE_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de paacuteginav ATTR_PAGELEN - Longitud de paacuteginav ATTR_MEASMETHOD - Meacutetodo de medida

IBM Toolbox para Java 111

v ATTR_PAGEWIDTH - Anchura de paacuteginav ATTR_MULTIUP - Paacuteginas por carav ATTR_POINTSIZE - Cuerpov ATTR_FIDELITY - Fidelidad de impresioacutenv ATTR_DUPLEX - Imprimir en ambas carasv ATTR_PRTQUALITY - Calidad de impresioacutenv ATTR_PRTTEXT - Texto de impresioacutenv ATTR_PRINTER - Impresorav ATTR_PRTDEVTYPE - Tipo de dispositivo de impresorav ATTR_RPLUNPRT - Sustituir caracteres no imprimiblesv ATTR_RPLCHAR - Caraacutecter de sustitucioacutenv ATTR_SADDLESTITCH_NUMSTAPLES - Nuacutemero de grapas de cosido por el lomov ATTR_SADDLESTITCH_REF - Referencia de cosido por el lomov ATTR_SAVE - Guardar archivo en spoolv ATTR_SRCDRWR - Bandeja del papelv ATTR_SPOOL - Poner los datos en spoolv ATTR_SCHEDULE - Planificacioacuten de salida en spoolv ATTR_STARTPAGE - Paacutegina inicialv ATTR_DESCRIPTION - Texto descriptivov ATTR_UNITOFMEAS - Unidad de medidav ATTR_USERDATA - Datos de usuariov ATTR_USRDEFDATA - Datos definidos por usuariov ATTR_USRDEFOPT - Opciones definidas por el usuariov ATTR_USER_DEFINED_OBJECT - Nombre del sistema de archivos integrado del objeto definido por

el usuario

Establecer atributos

Pueden establecerse los atributos siguientes para un archivo de impresora empleando el meacutetodosetAttributes()v ATTR_ALIGN - Alinear paacuteginav ATTR_BKMGN_ACR - Desplazamiento a traveacutes de margen reversov ATTR_BKMGN_DWN - Desplazamiento abajo de margen reversov ATTR_BACK_OVERLAY - Nombre del sistema de archivos integrado del preformato reversov ATTR_BKOVL_DWN - Desplazamiento abajo de preformato reversov ATTR_BKOVL_ACR - Desplazamiento a traveacutes de preformato reversov ATTR_CPI - Caracteres por pulgadav ATTR_CODEDFNTLIB - Nombre de biblioteca de font codificadov ATTR_CODEPAGE - Paacutegina de coacutedigosv ATTR_CODEDFNT - Nombre de font codificadov ATTR_CONTROLCHAR - Caraacutecter de controlv ATTR_CONVERT_LINEDATA - Convertir datos de liacuteneav ATTR_COPIES - Copiasv ATTR_CORNER_STAPLE - Grapa en esquinav ATTR_DBCSDATA - Datos DBCS especificados por usuariov ATTR_DBCSEXTENSN - Caracteres de extensioacuten DBCS

112 IBM Toolbox para Java IBM Toolbox para Java

v ATTR_DBCSROTATE - Rotacioacuten de caracteres DBCSv ATTR_DBCSCPI - Caracteres DBCS por pulgadav ATTR_DBCSSISO - Espaciado DBCS SOSIv ATTR_DFR_WRITE - Diferir escriturav ATTR_PAGRTT - Grados de rotacioacuten de paacuteginav ATTR_EDGESTITCH_NUMSTAPLES - Nuacutemero de grapas de ligadura de bordesv ATTR_EDGESTITCH_REF - Referencia de ligadura de bordesv ATTR_EDGESTITCH_REFOFF - Desplazamiento de referencia de ligadura de bordesv ATTR_ENDPAGE - Paacutegina finalv ATTR_FILESEP - Separadores de archivov ATTR_FOLDREC - Acomodar registrosv ATTR_FONTID - Identificador de fontv ATTR_FORM_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de formulariov ATTR_FORMFEED - Alimentacioacuten de papelv ATTR_FORMTYPE - Tipo de formulariov ATTR_FTMGN_ACR - Desplazamiento a traveacutes de margen anversov ATTR_FTMGN_DWN - Desplazamiento abajo de margen anversov ATTR_FRONT_OVERLAY - Nombre del sistema de archivos integrado del preformato anversov ATTR_FTOVL_ACR - Desplazamiento a traveacutes de preformato anversov ATTR_FTOVL_DWN - Desplazamiento abajo de preformato anversov ATTR_CHAR_ID - Juego de caracteres graacuteficosv ATTR_JUSTIFY - Alineacioacuten de hardwarev ATTR_HOLD - Retener archivo en spoolv ATTR_LPI - Liacuteneas por pulgadav ATTR_MAXRCDS - Maacuteximo de registros de salida en spoolv ATTR_OUTPTY - Prioridad de salidav ATTR_OUTPUT_QUEUE - Nombre del sistema de archivos integrado de la cola de salidav ATTR_OVERFLOW - Nuacutemero de liacutenea de desbordamientov ATTR_PAGE_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de paacuteginav ATTR_PAGELEN - Longitud de paacuteginav ATTR_MEASMETHOD - Meacutetodo de medidav ATTR_PAGEWIDTH - Anchura de paacuteginav ATTR_MULTIUP - Paacuteginas por carav ATTR_POINTSIZE - Cuerpov ATTR_FIDELITY - Fidelidad de impresioacutenv ATTR_DUPLEX - Imprimir en ambas carasv ATTR_PRTQUALITY - Calidad de impresioacutenv ATTR_PRTTEXT - Texto de impresioacutenv ATTR_PRINTER - Impresorav ATTR_PRTDEVTYPE - Tipo de dispositivo de impresorav ATTR_RPLUNPRT - Sustituir caracteres no imprimiblesv ATTR_RPLCHAR - Caraacutecter de sustitucioacutenv ATTR_SADDLESTITCH_NUMSTAPLES - Nuacutemero de grapas de cosido por el lomov ATTR_SADDLESTITCH_REF - Referencia de cosido por el lomov ATTR_SAVE - Guardar archivo en spool

IBM Toolbox para Java 113

v ATTR_SRCDRWR - Bandeja del papelv ATTR_SPOOL - Poner los datos en spoolv ATTR_SCHEDULE - Planificacioacuten de salida en spoolv ATTR_STARTPAGE - Paacutegina inicialv ATTR_DESCRIPTION - Texto descriptivov ATTR_UNITOFMEAS - Unidad de medidav ATTR_USERDATA - Datos de usuariov ATTR_USRDEFDATA - Datos definidos por usuariov ATTR_USRDEFOPT - Opciones definidas por el usuariov ATTR_USER_DEFINED_OBJECT - Nombre del sistema de archivos integrado del objeto definido por

el usuario

Atributos de archivo en spool

Este tema indica los atributos que pueden recuperarse y establecerse para un archivo en spool

Recuperar atributos

Pueden recuperarse los atributos siguientes para un archivo en spool empleando el meacutetodogetIntegerAttribute() getStringAttribute() o getFloatAttribute() adecuadov ATTR_AFP - Funciones avanzadas de impresioacutenv ATTR_ALIGN - Alinear paacuteginav ATTR_BKMGN_ACR - Desplazamiento a traveacutes de preformato reversov ATTR_BKMGN_DWN - Desplazamiento abajo de preformato reversov ATTR_BACK_OVERLAY - Nombre del sistema de archivos integrado del preformato reversov ATTR_BKOVL_DWN - Desplazamiento abajo de preformato reversov ATTR_BKOVL_ACR - Desplazamiento a traveacutes de preformato reversov ATTR_CPI - Caracteres por pulgadav ATTR_CODEDFNTLIB - Nombre de biblioteca de font codificadov ATTR_CODEDFNT - Nombre de font codificadov ATTR_CODEPAGE - Paacutegina de coacutedigosv ATTR_CONTROLCHAR - Caraacutecter de controlv ATTR_COPIES - Copiasv ATTR_COPIESLEFT - Copias dejadas para producirv ATTR_CORNER_STAPLE - Grapa en esquinav ATTR_CURPAGE - Paacutegina actualv ATTR_DATE - Fecha de creacioacuten del objetov ATTR_DATE_WTR_BEGAN_FILE - Fecha en que el transcriptor empezoacute a procesar el archivo en spoolv ATTR_DATE_WTR_CMPL_FILE - Fecha en que el transcriptor terminoacute de procesar el archivo en spoolv ATTR_DBCSDATA - Datos DBCS especificados por usuariov ATTR_DBCSEXTENSN - Caracteres de extensioacuten DBCSv ATTR_DBCSROTATE - Rotacioacuten de caracteres DBCSv ATTR_DBCSCPI - Caracteres DBCS por pulgadav ATTR_DBCSSISO - Espaciado DBCS SOSIv ATTR_PAGRTT - Grados de rotacioacuten de paacuteginav ATTR_EDGESTITCH_NUMSTAPLES - Nuacutemero de grapas de ligadura de bordesv ATTR_EDGESTITCH_REF - Referencia de ligadura de bordes

114 IBM Toolbox para Java IBM Toolbox para Java

v ATTR_EDGESTITCH_REFOFF - Desplazamiento de referencia de ligadura de bordesv ATTR_ENDPAGE - Paacutegina finalv ATTR_FILESEP - Separadores de archivov ATTR_FOLDREC - Acomodar registrosv ATTR_FONTID - Identificador de fontv ATTR_FORM_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de formulariov ATTR_FORMFEED - Alimentacioacuten de papelv ATTR_FORMTYPE - Tipo de formulariov ATTR_FTMGN_ACR - Desplazamiento a traveacutes de margen anversov ATTR_FTMGN_DWN - Desplazamiento abajo de margen anversov ATTR_FRONTSIDE_OVERLAY - Nombre del sistema de archivos integrado del preformato anversov ATTR_FTOVL_ACR - Desplazamiento a traveacutes de preformato anversov ATTR_FTOVL_DWN - Desplazamiento abajo de preformato anversov ATTR_CHAR_ID - Juego de caracteres graacuteficosv ATTR_JUSTIFY - Alineacioacuten de hardwarev ATTR_HOLD - Retener archivo en spoolv ATTR_IPP_ATTR_CHARSET - Atributos IPP - juego de caracteresv ATTR_IPP_JOB_ID - ID de trabajo IPPv ATTR_IPP_JOB_NAME - Nombre de trabajo IPPv ATTR_IPP_JOB_NAME_NL - NL de nombre de trabajo IPPv ATTR_IPP_JOB_ORIGUSER - Nombre de usuario emisor de trabajo IPPv ATTR_IPP_JOB_ORIGUSER_NL - NL de nombre de usuario emisor de trabajo IPPv ATTR_IPP_PRINTER_NAME - Nombre de impresora IPPv ATTR_JOBNAME - Nombre de trabajov ATTR_JOBNUMBER - Nuacutemero de trabajov ATTR_JOBUSER - Usuario de trabajov ATTR_JOB_SYSTEM - Sistema de trabajov ATTR_LASTPAGE - Uacuteltima paacutegina impresav ATTR_LINESPACING - Interlineadov ATTR_LPI - Liacuteneas por pulgadav ATTR_MAXRCDS - Maacuteximo de registros de salida en spoolv ATTR_PAGELEN - Longitud de paacuteginav ATTR_PAGEWIDTH - Anchura de paacuteginav ATTR_MEASMETHOD - Meacutetodo de medidav ATTR_NETWORK - Identificador de redv ATTR_NUMBYTES - Nuacutemero de bytes de lecturaescriturav ATTR_OUTPUTBIN - Bandeja de salidav ATTR_OUTPTY - Prioridad de salidav ATTR_OUTPUT_QUEUE - Nombre del sistema de archivos integrado de la cola de salidav ATTR_OVERFLOW - Nuacutemero de liacutenea de desbordamientov ATTR_MULTIUP - Paacuteginas por carav ATTR_POINTSIZE - Cuerpov ATTR_FIDELITY - Fidelidad de impresioacutenv ATTR_DUPLEX - Imprimir en ambas carasv ATTR_PRTQUALITY - Calidad de impresioacuten

IBM Toolbox para Java 115

v ATTR_PRTTEXT - Texto de impresioacutenv ATTR_PRINTER - Impresorav ATTR_PRTASSIGNED - Impresora asignadav ATTR_PRTDEVTYPE - Tipo de dispositivo de impresorav ATTR_PRINTER_FILE - Nombre del sistema de archivos integrado del archivo de impresorav ATTR_RECLENGTH - Longitud de registrov ATTR_REDUCE - Reducir salidav ATTR_RPLUNPRT - Sustituir caracteres no imprimiblesv ATTR_RPLCHAR - Caraacutecter de sustitucioacutenv ATTR_RESTART - Reiniciar impresioacutenv ATTR_SADDLESTITCH_NUMSTAPLES - Nuacutemero de grapas de cosido por el lomov ATTR_SADDLESTITCH_REF - Referencia de cosido por el lomov ATTR_SAVE - Guardar archivo en spoolv ATTR_SRCDRWR - Bandeja del papelv ATTR_SPOOLFILE - Nombre de archivo en spoolv ATTR_SPLFNUM - Nuacutemero de archivo en spoolv ATTR_SPLFSTATUS - Estado de archivo en spoolv ATTR_SCHEDULE - Planificacioacuten de salida en spoolv ATTR_STARTPAGE - Paacutegina inicialv ATTR_SYSTEM - Sistema en el que se ha creadov ATTR_TIME - Hora de creacioacuten del objetov ATTR_TIME_WTR_BEGAN_FILE - Hora en que el transcriptor empezoacute a procesar el archivo en spoolv ATTR_TIME_WTR_CMPL_FILE - Hora en que el transcriptor terminoacute de procesar el archivo en spoolv ATTR_PAGES - Total de paacuteginasv ATTR_UNITOFMEAS - Unidad de medidav ATTR_USERCMT - Comentario de usuariov ATTR_USERDATA - Datos de usuariov ATTR_USRDEFDATA - Datos definidos por usuariov ATTR_USRDEFFILE - Archivo definido por usuariov ATTR_USRDEFOPT - Opciones definidas por el usuariov ATTR_USER_DEFINED_OBJECT - Nombre del sistema de archivos integrado del objeto definido por

el usuario

Establecer atributos

Pueden establecerse los atributos siguientes para un archivo en spool empleando el meacutetodosetAttributes()v ATTR_ALIGN - Alinear paacuteginav ATTR_BACK_OVERLAY - Nombre del sistema de archivos integrado del preformato reversov ATTR_BKOVL_DWN - Desplazamiento abajo de preformato reversov ATTR_BKOVL_ACR - Desplazamiento a traveacutes de preformato reversov ATTR_COPIES - Copiasv ATTR_ENDPAGE - Paacutegina finalv ATTR_FILESEP - Separadores de archivov ATTR_FORM_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de formulariov ATTR_FORMFEED - Alimentacioacuten de papel

116 IBM Toolbox para Java IBM Toolbox para Java

v ATTR_FORMTYPE - Tipo de formulariov ATTR_FRONTSIDE_OVERLAY - Nombre del sistema de archivos integrado del preformato anversov ATTR_FTOVL_ACR - Desplazamiento a traveacutes de preformato anversov ATTR_FTOVL_DWN - Desplazamiento abajo de preformato anversov ATTR_OUTPTY - Prioridad de salidav ATTR_OUTPUT_QUEUE - Nombre del sistema de archivos integrado de la cola de salidav ATTR_MULTIUP - Paacuteginas por carav ATTR_FIDELITY - Fidelidad de impresioacutenv ATTR_DUPLEX - Imprimir en ambas carasv ATTR_PRTQUALITY - Calidad de impresioacutenv ATTR_PRTSEQUENCE - Secuencia de impresioacutenv ATTR_PRINTER - Impresorav ATTR_RESTART - Reiniciar impresioacutenv ATTR_SAVE - Guardar archivo en spoolv ATTR_SCHEDULE - Planificacioacuten de salida en spoolv ATTR_STARTPAGE - Paacutegina inicialv ATTR_USERDATA - Datos de usuariov ATTR_USRDEFOPT - Opciones definidas por el usuariov ATTR_USER_DEFINED_OBJECT - Nombre del sistema de archivos integrado del objeto definido por

el usuario

Atributos de trabajo de transcriptor

Este tema indica los atributos para trabajos de transcriptor

Recuperar atributos

Pueden recuperarse los atributos siguientes para un trabajo de transcriptor empleando el meacutetodogetIntegerAttribute() getStringAttribute() o getFloatAttribute() adecuadov ATTR_WTRJOBNAME - Nombre de trabajo del transcriptorv ATTR_WTRJOBNUM - Nuacutemero de trabajo del transcriptorv ATTR_WTRJOBSTS - Estado del trabajo del transcriptorv ATTR_WTRJOBUSER - Nombre de usuario del trabajo del transcriptor

Establecer atributos

No estaacute permitido establecer atributos para un trabajo de transcriptor

Atributos de objeto de impresioacuten

Este tema indica los atributos disponibles para objetos de impresioacutenv Funciones avanzadas de impresioacutenv Recurso AFPv Alinear formulariosv Alinear paacuteginav Permitir impresioacuten directav Autorizacioacutenv Autorizacioacuten para comprobarv Finalizar transcriptor automaacuteticamente

IBM Toolbox para Java 117

v Almacenamiento auxiliarv Desplazamiento a traveacutes de margen reversov Desplazamiento abajo de margen reversov Preformato reversov Desplazamiento a traveacutes de preformato reversov Desplazamiento abajo de preformato reversov Estado entre copiasv Estado entre archivosv Cambiosv Caracteres por pulgadav Paacutegina de coacutedigosv Nombre de font codificadov Nombre de biblioteca de font codificadov Caraacutecter de controlv Convertir datos de liacuteneav Copiasv Copias dejadas para producirv Grapa en esquinav Paacutegina actualv Formato de datosv Cola de datosv Fecha de apertura de archivov Fecha de finalizacioacuten del trabajo de creacioacuten de archivo en spoolv Fecha en que el transcriptor empezoacute a procesar el archivo en spoolv Fecha en que el transcriptor terminoacute de procesar el archivo en spoolv Datos DBCS especificados por usuariov Caracteres de extensioacuten DBCSv Rotacioacuten de caracteres DBCSv Caracteres DBCS por pulgadav Espaciado DBCS SOSIv Diferir escriturav Grados de rotacioacuten de paacuteginav Suprimir archivo tras enviacuteov Opcioacuten de destinov Tipo de destinov Clase de dispositivov Modelo de dispositivov Estado de dispositivov Tipo de dispositivov Visualizar cualquier archivov Bandeja de separadoresv Nuacutemero de grapas de ligadura de bordesv Referencia de ligadura de bordesv Desplazamiento de referencia de ligadura de bordesv Estado pendiente de finalizacioacuten

118 IBM Toolbox para Java IBM Toolbox para Java

v Paacutegina finalv Origen de sobresv Separadores de archivov Acomodar registrosv Identificador de fontv Definicioacuten de formulariov Alimentacioacuten de papelv Tipo de formulariov Opcioacuten de mensaje de tipo de formulariov Desplazamiento a traveacutes de margen anversov Desplazamiento abajo de margen anversov Preformato anversov Desplazamiento a traveacutes de preformato anversov Desplazamiento abajo de preformato anversov Juego de caracteres graacuteficosv Alineacioacuten de hardwarev Estado de retenidov Retener archivo en spoolv Estado pendiente de retencioacutenv Configuracioacuten de la imagenv Inicializar el transcriptorv Direccioacuten Internetv Atributos IPP - juego de caracteresv ID de trabajo IPPv Nombre de trabajo IPPv NL de nombre de trabajo IPPv Nombre de usuario emisor de trabajo IPPv NL de nombre de usuario emisor de trabajo IPPv Nombre de impresora IPPv Nombre de trabajov Nuacutemero de trabajov Separadores de trabajov Sistema de trabajov Usuario de trabajov Uacuteltima paacutegina impresav Longitud de paacuteginav Nombre de bibliotecav Liacuteneas por pulgadav Interlineadov Tipo y modelo del fabricantev Maacuteximo de trabajos por lista de clientesv Maacuteximo de registros de salida en spoolv Meacutetodo de medidav Ayuda para mensajesv ID de mensaje

IBM Toolbox para Java 119

v Cola de mensajesv Respuesta a mensajev Texto de mensajev Tipo de mensajev Gravedad de mensajev Posibilidad de respuesta a varios elementosv Identificador de redv Atributos de objeto de servidor de impresioacuten de redv Nuacutemero de bytes del archivo en spoolv Nuacutemero de bytes de lecturaescriturav Nuacutemero de archivosv Nuacutemero de transcriptores iniciados para la colav Atributo de objeto ampliadov Estado de en cola de trabajosv Mandatos de tiempo de aperturav Controlado por el operadorv Orden de archivos en colav Bandeja de salidav Prioridad de salidav Cola de salidav Estado de la cola de salidav Estado globalv Nuacutemero de liacutenea de desbordamientov Una paacutegina cada vezv Nuacutemero de paacuteginas estimadov Definicioacuten de paacuteginav Nuacutemero de paacuteginav Paacuteginas por carav Cargador de papel 1v Cargador de papel 2v Densidad de pelv Cuerpov Fidelidad de impresioacutenv Imprimir en ambas carasv Calidad de impresioacutenv Secuencia de impresioacutenv Texto de impresioacutenv Impresorav Impresora asignadav Tipo de dispositivo de impresorav Archivo de impresorav Cola de impresorav Color de informacioacuten de publicacioacuten soportadov Paacuteginas por minuto de informacioacuten de publicacioacuten (color)v Paacuteginas por minuto de informacioacuten de publicacioacuten (monocromo)

120 IBM Toolbox para Java IBM Toolbox para Java

v Soporte duacuteplex de informacioacuten de publicacioacutenv Ubicacioacuten de informacioacuten de publicacioacutenv Nombre de ubicacioacuten remotav Longitud de registrov Reducir salidav Sistema remotov Sustituir caracteres no imprimiblesv Caraacutecter de sustitucioacutenv Reiniciar impresioacutenv Nuacutemero de grapas de cosido por el lomov Referencia de cosido por el lomov Guardar archivo en spoolv Desplazamiento de buacutesquedav Origen de buacutesquedav Prioridad de enviacuteov Paacutegina de separacioacutenv Bandeja del papelv SCS en spoolv Poner los datos en spoolv Meacutetodo de autenticacioacuten de creacioacuten de archivo en spoolv Meacutetodo de seguridad de creacioacuten de archivo en spoolv Nombre de archivo en spoolv Nuacutemero de archivo en spoolv Estado de archivo en spoolv Planificacioacuten de salida en spoolv Iniciado por usuariov Paacutegina inicialv Sistema en el que se ha creadov Texto descriptivov Hora de apertura de archivov Hora de finalizacioacuten del trabajo de creacioacuten de archivo en spoolv Hora en que el transcriptor empezoacute a procesar el archivo en spoolv Hora en que el transcriptor terminoacute de procesar el archivo en spoolv Total de paacuteginasv Transformar SCS en ASCIIv Unidad de medidav Comentario de usuariov Datos de usuariov Datos definidos por usuariov Archivo definido por usuariov Objeto definido por usuariov Opciones definidas por el usuariov Datos de programa controlador de usuariov Programa controlador de usuariov ID de usuario

IBM Toolbox para Java 121

v Direccioacuten de ID de usuariov Programa de transformacioacuten de usuariov Fidelidad de visualizacioacutenv Clase VMMVSv Estado de en espera de datosv Estado de en espera de dispositivov Estado de en espera de mensajev Cuaacutendo finalizar transcriptor automaacuteticamentev Cuaacutendo finalizar transcriptorv Cuaacutendo retener archivov Anchura de paacuteginav Objeto de personalizacioacuten de estacioacuten de trabajov Nombre de trabajo del transcriptorv Nuacutemero de trabajo del transcriptorv Estado del trabajo del transcriptorv Nombre de usuario del trabajo del transcriptorv Transcriptor iniciadov Paacutegina inicial de transcriptorv Estado de transcribiendov CCSID NPSv Nivel de NPS

Funciones avanzadas de impresioacuten

ID ATTR_AFP

Tipo String

DescripcioacutenIndica si este archivo en spool utiliza recursos de AFP externos al archivo en spool Los valoresvaacutelidos son YES y NO

Recurso AFP

ID ATTR_AFP_RESOURCE

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del recurso de AFP (funciones avanzadas deimpresioacuten) externo El formato de la viacutea de acceso del sistema de archivos integrado esQSYSLIBbibliotecaLIBrecursotipo donde biblioteca es la biblioteca que contiene el recursorecurso es el nombre del recurso y tipo es el tipo de recurso Los valores vaacutelidos de tipo sonFNTRSC FORMDF OVL PAGSEG y PAGDFN

Alinear formularios

ID ATTR_ALIGNFORMS

Tipo String

DescripcioacutenMomento en que se enviaraacute un mensaje de alineacioacuten de formularios Los valores vaacutelidos sonWTR FILE FIRST

122 IBM Toolbox para Java IBM Toolbox para Java

Alinear paacutegina

ID ATTR_ALIGN

Tipo String

DescripcioacutenIndica si se enviacutea un mensaje de alineacioacuten de formularios antes de imprimir este archivo enspool Los valores vaacutelidos son YES NO

Permitir impresioacuten directa

ID ATTR_ALWDRTPRT

Tipo String

DescripcioacutenIndica si el transcriptor de impresora permite que se asigne la impresora a un trabajo queimprime directamente en una impresora Los valores vaacutelidos son YES NO

Autorizacioacuten

ID ATTR_AUT

Tipo String

DescripcioacutenEspecifica la autorizacioacuten que se da a los usuarios que no tienen una autorizacioacuten especiacutefica parala cola de salida Los valores vaacutelidos son USE ALL CHANGE EXCLUDE LIBCRTAUT

Autorizacioacuten para comprobar

ID ATTR_AUTCHK

Tipo String

DescripcioacutenIndica queacute tipo de autorizaciones para la cola de salida permiten al usuario controlar todos losarchivos de la cola de salida Los valores vaacutelidos son OWNER DTAAUT

Finalizar transcriptor automaacuteticamente

ID ATTR_AUTOEND

Tipo String

DescripcioacutenEspecifica si el transcriptor debe finalizarse automaacuteticamente Los valores vaacutelidos son NO YES

Almacenamiento auxiliar

ID ATTR_AUX_POOL

Tipo Integer

DescripcioacutenEspecifica el nuacutemero de la agrupacioacuten de almacenamiento auxiliar (ASP) en la que se almacena elarchivo en spool Los valores posibles sonv 1 ASP del sistemav 2-32 Una de las ASP del usuario

Desplazamiento a traveacutes de margen reverso

ID ATTR_BACKMGN_ACR

IBM Toolbox para Java 123

Tipo Float

DescripcioacutenEspecifica la distancia respecto a la parte izquierda de la paacutegina donde se inicia la impresioacuten enel reverso de una hoja de papel El valor especial FRONTMGN se codificaraacute como -1

Desplazamiento abajo de margen reverso

ID ATTR_BACKMGN_DWN

Tipo Float

DescripcioacutenEspecifica la distancia respecto a la parte superior de la paacutegina donde se inicia la impresioacuten en elreverso de una hoja de papel El valor especial FRONTMGN se codificaraacute como -1

Preformato reverso

ID ATTR_BACK_OVERLAY

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del preformato reverso o un valor especial Si elvalor es una viacutea de acceso del sistema de archivos integrado tendraacute el formatoQSYSLIBbibliotecaLIBpreformatoOVL donde biblioteca es la biblioteca del recurso ypreformato es el nombre del preformato Los valores especiales vaacutelidos son FRONTOVL

Desplazamiento a traveacutes de preformato reverso

ID ATTR_BKOVL_ACR

Tipo Float

DescripcioacutenDesplazamiento horizontal desde el punto de origen en que se imprime el preformato

Desplazamiento abajo de preformato reverso

ID ATTR_BKOVL_DWN

Tipo Float

DescripcioacutenDesplazamiento vertical desde el punto de origen en que se imprime el preformato

Estado entre copias

ID ATTR_BTWNCPYSTS

Tipo String

DescripcioacutenIndica si el transcriptor se encuentra entre copias de un archivo en spool de varias copias Losvalores devueltos son YES o NO

Estado entre archivos

ID ATTR_BTWNFILESTS

Tipo String

DescripcioacutenIndica si el transcriptor se encuentra entre archivos Los valores devueltos son YES o NO

124 IBM Toolbox para Java IBM Toolbox para Java

Cambios

ID ATTR_CHANGES

Tipo String

DescripcioacutenMomento en que entran en vigor los cambios pendientes Los valores vaacutelidos son NORDYFFILEEND o un blanco para indicar que no hay cambios pendientes en el transcriptor

Caracteres por pulgada

ID ATTR_CPI

Tipo Float

DescripcioacutenNuacutemero de caracteres por pulgada horizontal

Paacutegina de coacutedigos

ID ATTR_CODEPAGE

Tipo String

DescripcioacutenCorrelacioacuten de caracteres graacuteficos con puntos de coacutedigo para este archivo en spool Si el campode juego de caracteres graacuteficos contiene un valor especial este campo puede contener un cero (0)

Nombre de font codificado

ID ATTR_CODEDFNT

Tipo String

DescripcioacutenNombre del font codificado Un font codificado es un recurso de AFP que estaacute formado por unjuego de caracteres y una paacutegina de coacutedigos Los valores especiales son FNTCHRSET

Nombre de biblioteca de font codificado

ID ATTR_CODEDFNTLIB

Tipo String

DescripcioacutenNombre de la biblioteca que contiene el font codificado Este campo puede contener blancos si elcampo de nombre de font codificado tiene un valor especial

Caraacutecter de control

ID ATTR_CONTROLCHAR

Tipo String

DescripcioacutenIndica si este archivo utiliza el caraacutecter de control de impresora Estaacutendar nacional americano Losvalores posibles son NONE para que no se pase ninguacuten caraacutecter de control de impresioacuten en losdatos que se imprimen o FCFC para que el primer caraacutecter de cada registro sea un caraacutecter decontrol de impresora Estaacutendar nacional americano

Convertir datos de liacutenea

ID ATTR_CONVERT_LINEDATA

Tipo String

IBM Toolbox para Java 125

DescripcioacutenIndica si los datos de liacutenea se convierten en AFPDS antes de escribirse en el spool Los valoresposibles son NO y YES

Copias

ID ATTR_COPIES

Tipo Integer

DescripcioacutenNuacutemero total de copias que se generaraacuten para este archivo en spool

Copias dejadas para producir

ID ATTR_COPIESLEFT

Tipo Integer

DescripcioacutenNuacutemero restante de copias que se generaraacuten para este archivo en spool

Grapa en esquina

ID ATTR_CORNER_STAPLE

Tipo String

DescripcioacutenEsquina de referencia que se utilizaraacute para grapar una esquina Las grapas se colocan en laesquina de referencia del medio Los valores vaacutelidos son NONE DEVD BOTRIGHTTOPRIGHT TOPLEFT y BOTLEFT

Paacutegina actual

ID ATTR_CURPAGE

Tipo Integer

DescripcioacutenPaacutegina actual que escribe el trabajo del transcriptor

Formato de datos

ID ATTR_DATAFORMAT

Tipo String

DescripcioacutenFormato de datos Los valores vaacutelidos son RCDDATA ALLDATA

Cola de datos

ID ATTR_DATA_QUEUE

Tipo String

DescripcioacutenEspecifica la viacutea de acceso del sistema de archivos integrado de la cola de datos que estaacute asociadaa la cola de salida o NONE si no hay ninguna cola de datos asociada a la cola de salida Elformato de la viacutea de acceso del sistema de archivos integrado es QSYSLIBbibliotecaLIBcoladatosDTAQ donde biblioteca es la biblioteca que contiene la cola de datos y coladatos es elnombre de la cola de datos

126 IBM Toolbox para Java IBM Toolbox para Java

Fecha de apertura de archivo

ID ATTR_DATE

Tipo String

DescripcioacutenEn el caso de los archivos en spool fecha en que se abrioacute el archivo en spool En el caso de losrecursos de AFP fecha de la uacuteltima modificacioacuten del objeto La fecha se codifica en una serie decaracteres con el formato siguiente S AA MM DD

Fecha de finalizacioacuten del trabajo de creacioacuten de archivo en spool

ID ATTR_DATE_END

Tipo String

DescripcioacutenFecha en la que ha finalizado el trabajo que ha creado el archivo en spool en el sistema Si elcampo de fecha de inicio de creacioacuten del archivo en spool estaacute establecido en ALL este campodebe establecerse en blancos Si se ha especificado una fecha para el campo de inicio de creacioacutendel archivo en spool este campo debe establecerse en una fecha vaacutelida La fecha debe tener elformato SAAMMDD o ser uno de los valores especiales siguientesv LAST deben devolverse todos los archivos en spool con una fecha y una hora de creacioacuten

igual o posterior a la fecha de inicio de creacioacuten de archivo en spoolv Fecha deben devolverse todos los archivos en spool con una fecha y una hora de creacioacuten

igual o posterior a la fecha y la hora de inicio de creacioacuten de archivo en spool e igual o inferiora la fecha y la hora de finalizacioacuten de creacioacuten de archivo en spool

El formato de fecha SAAMMDD se define del modo siguientev S es el siglo donde 0 indica los antildeos 19xx y 1 indica los antildeos 20xxv AA es el antildeov MM es el mesv DD es el diacutea

Fecha en que el transcriptor empezoacute a procesar el archivo en spool

ID ATTR_DATE_WTR_BEGAN_FILE

Tipo String

DescripcioacutenIndica la fecha en que el transcriptor empezoacute a procesar este archivo en spool La fecha secodifica en una serie de caracteres con el formato siguiente S AA MM DD

Fecha en que el transcriptor terminoacute de procesar el archivo en spool

ID ATTR_DATE_WTR_CMPL_FILE

Tipo String

DescripcioacutenIndica la fecha en que el transcriptor terminoacute de procesar este archivo en spool La fecha secodifica en una serie de caracteres con el formato siguiente S AA MM DD

Datos DBCS especificados por usuario

ID ATTR_DBCSDATA

Tipo String

IBM Toolbox para Java 127

DescripcioacutenIndica si el archivo en spool contiene datos DBCS (juego de caracteres de doble byte) Los valoresvaacutelidos son NO y YES

Caracteres de extensioacuten DBCS

ID ATTR_DBCSEXTENSN

Tipo String

DescripcioacutenIndica si el sistema debe procesar los caracteres de extensioacuten DBCS Los valores vaacutelidos son NOy YES

Rotacioacuten de caracteres DBCS

ID ATTR_DBCAROTATE

Tipo String

DescripcioacutenIndica si los caracteres DBCS se rotan 90 grados en el sentido contrario a las agujas del reloj antesde la impresioacuten Los valores vaacutelidos son NO y YES

Caracteres DBCS por pulgada

ID ATTR_DBCSCPI

Tipo Integer

DescripcioacutenNuacutemero de caracteres de doble byte que se imprimiraacuten por pulgada Los valores vaacutelidos son -1-2 5 6 y 10 El valor CPI se codifica como -1 El valor CONDENSED se codifica como -2

Espaciado DBCS SOSI

ID ATTR_DBCSSISO

Tipo String

DescripcioacutenDetermina la presentacioacuten de los caracteres de desplazamiento a teclado ideograacutefico y dedesplazamiento a teclado estaacutendar al imprimirse Los valores vaacutelidos son NO YES y RIGHT

Diferir escritura

ID ATTR_DFR_WRITE

Tipo String

DescripcioacutenIndica si los datos se retienen en los almacenamientos intermedios del sistema antes de escribirse

Grados de rotacioacuten de paacutegina

ID ATTR_PAGRTT

Tipo Integer

DescripcioacutenGrado de rotacioacuten del texto en la paacutegina en relacioacuten con la forma en que se carga el formularioen la impresora Los valores vaacutelidos son -1 -2 -3 0 90 180 270 El valor AUTO se codificacomo -1 el valor DEVD se codifica como -2 y el valor COR se codifica como -3

128 IBM Toolbox para Java IBM Toolbox para Java

Suprimir archivo tras enviacuteo

ID ATTR_DELETESPLF

Tipo String

DescripcioacutenIndica si debe suprimirse el archivo en spool despueacutes del enviacuteo Los valores vaacutelidos son NO yYES

Opcioacuten de destino

ID ATTR_DESTOPTION

Tipo String

DescripcioacutenOpcioacuten de destino Una serie de texto que permite al usuario pasar opciones al sistema receptor

Tipo de destino

ID ATTR_DESTINATION

Tipo String

DescripcioacutenTipo de destino Los valores vaacutelidos son OTHER AS400 PSF2

Clase de dispositivo

ID ATTR_DEVCLASS

Tipo String

DescripcioacutenClase de dispositivo

Modelo de dispositivo

ID ATTR_DEVMODEL

Tipo String

DescripcioacutenNuacutemero de modelo del dispositivo

Estado de dispositivo

ID ATTR_DEVSTATUS

Tipo Integer

DescripcioacutenEstado del dispositivo de impresora Los valores vaacutelidos son 0 (desactivado) 10 (pendiente dedesactivacioacuten) 20 (pendiente de activacioacuten) 30 (activado) 40 (pendiente de conexioacuten) 60 (activo)66 (transcriptor activo) 70 (retenido) 75 (apagado) 80 (pendiente de recuperacioacuten) 90(recuperacioacuten cancelada) 100 (anoacutemalo) 106 (transcriptor anoacutemalo) 110 (en servicio) 111(dantildeado) 112 (bloqueado) 113 (desconocido)

Tipo de dispositivo

ID ATTR_DEVTYPE

Tipo String

IBM Toolbox para Java 129

DescripcioacutenTipo de dispositivo

Visualizar cualquier archivo

ID ATTR_DISPLAYANY

Tipo String

DescripcioacutenIndica si los usuarios que tienen autorizacioacuten para leer esta cola de salida pueden visualizar losdatos de salida de cualquier archivo de salida de esta cola o uacutenicamente los datos de sus propiosarchivos Los valores vaacutelidos son YES NO OWNER

Bandeja de separadores

ID ATTR_DRWRSEP

Tipo Integer

DescripcioacutenIdentifica la bandeja de la que se tomaraacuten las paacuteginas de separacioacuten de trabajos y archivos Losvalores vaacutelidos son -1 -2 1 2 3 El valor FILE se codifica como -1 y el valor DEVD se codificacomo -2

Nuacutemero de grapas de ligadura de bordes

ID ATTR_EDGESTITCH_NUMSTAPLES

Tipo Integer

DescripcioacutenNuacutemero de grapas que van a colocarse a lo largo del borde de acabado

Referencia de ligadura de bordes

ID ATTR_EDGESTITCH_REF

Tipo String

DescripcioacutenLugar en que se colocaraacuten una o varias grapas en el medio a lo largo del borde de acabado Losvalores vaacutelidos son NONE DEVD BOTTOM RIGHT TOP y LEFT

Desplazamiento de referencia de ligadura de bordes

ID ATTR_EDGESTITCH_REFOFF

Tipo Float

DescripcioacutenDesplazamiento de la ligadura de bordes desde el borde de referencia hacia el centro del medio

Estado pendiente de finalizacioacuten

ID ATTR_ENDPNDSTS

Tipo String

DescripcioacutenIndica si se ha emitido un mandato Finalizar transcriptor (ENDWTR) para este transcriptor Losvalores posibles son NO (no se ha emitido ninguacuten mandato ENDWTR) IMMED (el transcriptorfinaliza tan pronto como sus almacenamientos intermedios de salida queden vaciacuteos) CTRLD (eltranscriptor finaliza una vez que se imprima la copia actual del archivo en spool) PAGEEND (eltranscriptor finaliza al final de la paacutegina)

130 IBM Toolbox para Java IBM Toolbox para Java

Paacutegina final

ID ATTR_ENDPAGE

Tipo Integer

DescripcioacutenNuacutemero de paacutegina en que finalizaraacute la impresioacuten del archivo en spool Los valores vaacutelidos son 0o el nuacutemero de paacutegina final El valor END se codifica como 0

Origen de sobres

ID ATTR_ENVLP_SOURCE

Tipo String

DescripcioacutenTamantildeo del sobre del origen de sobres Si no se especifica este campo o el valor no es vaacutelido seutilizaraacute el valor especial MFRTYPMDL Los valores vaacutelidos son NONE (no hay ninguacuten origende sobres) MFRTYPMDL (se utiliza el tamantildeo de sobre propuesto por el tipo y modelo delfabricante) MONARCH (3875 x 75 pulgadas) NUMBER9 (3875 x 8875 pulgadas)NUMBER10 (4125 x 95 pulgadas) B5 (176 mm x 250 mm) C5 (162 mm x 229 mm) DL (110mm x 220 mm)

Separadores de archivo

ID ATTR_FILESEP

Tipo Integer

DescripcioacutenNuacutemero de paacuteginas de separacioacuten de archivos que se colocan al principio de cada copia delarchivo en spool Los valores vaacutelidos son -1 o el nuacutemero de separadores El valor FILE secodifica como -1

Acomodar registros

ID ATTR_FOLDREC

Tipo String

DescripcioacutenIndica si los registros que superen la anchura de los formularios de impresora se acomodaraacuten a laliacutenea siguiente Los valores vaacutelidos son YES NO

Identificador de font

ID ATTR_FONTID

Tipo String

DescripcioacutenFont de impresora utilizado Los valores especiales vaacutelidos son CPI y DEVD

Definicioacuten de formulario

ID ATTR_FORM_DEFINITION

Tipo String

DescripcioacutenNombre de viacutea de acceso del sistema de archivos integrado de la definicioacuten de formulario o unvalor especial Si se especifica una viacutea de acceso del sistema de archivos integrado el formato es

IBM Toolbox para Java 131

QSYSLIBbibliotecaLIBdefformFORMDF donde biblioteca es la biblioteca de la definicioacuten deformulario y defform es el nombre de la definicioacuten de formulario Los valores especiales vaacutelidosson NONE INLINE INLINED y DEVD

Alimentacioacuten de papel

ID ATTR_FORMFEED

Tipo String

DescripcioacutenForma en que se produce la alimentacioacuten de papel en la impresora Los valores vaacutelidos sonCONT CUT AUTOCUT DEVD

Tipo de formulario

ID ATTR_FORMTYPE

Tipo String

DescripcioacutenTipo de formulario que se cargaraacute en la impresora para imprimir este archivo en spool

Opcioacuten de mensaje de tipo de formulario

ID ATTR_FORMTYPEMSG

Tipo String

DescripcioacutenOpcioacuten de mensaje para enviar un mensaje a la cola de mensajes del transcriptor cuando setermine el tipo de formulario actual Los valores vaacutelidos son MSG NOMSG INFOMSGINQMSG

Desplazamiento a traveacutes de margen anverso

ID ATTR_FTMGN_ACR

Tipo Float

DescripcioacutenEspecifica la distancia respecto a la parte izquierda de la paacutegina donde se inicia la impresioacuten enel anverso de una hoja de papel El valor especial DEVD se codifica como -2

Desplazamiento abajo de margen anverso

ID ATTR_FTMGN_DWN

Tipo Float

DescripcioacutenEspecifica la distancia respecto a la parte superior de la paacutegina donde se inicia la impresioacuten en elanverso de una hoja de papel El valor especial DEVD se codifica como -2

Preformato anverso

ID ATTR_FRONT_OVERLAY

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del preformato anverso El formato de la viacutea deacceso del sistema de archivos integrado es QSYSLIBbibliotecaLIBpreformatoOVL dondebiblioteca es la biblioteca del recurso y preformato es el nombre del preformato La serie NONEse utiliza para indicar que no se especifica ninguacuten preformato anverso

132 IBM Toolbox para Java IBM Toolbox para Java

Desplazamiento a traveacutes de preformato anverso

ID ATTR_FTOVL_ACR

Tipo Float

DescripcioacutenDesplazamiento horizontal desde el punto de origen en que se imprime el preformato

Desplazamiento abajo de preformato anverso

ID ATTR_FTOVL_DWN

Tipo Float

DescripcioacutenDesplazamiento vertical desde el punto de origen en que se imprime el preformato

Juego de caracteres graacuteficos

ID ATTR_CHAR_ID

Tipo String

DescripcioacutenJuego de caracteres graacuteficos que se utilizaraacute al imprimir este archivo Los valores especialesvaacutelidos son DEVD SYSVAL y JOBCCSID

Alineacioacuten de hardware

ID ATTR_JUSTIFY

Tipo Integer

DescripcioacutenPorcentaje de alineacioacuten a la derecha de la salida Los valores vaacutelidos son 0 50 100

Estado de retenido

ID ATTR_HELDSTS

Tipo String

DescripcioacutenIndica si el transcriptor estaacute retenido Los valores vaacutelidos son YES NO

Retener archivo en spool

ID ATTR_HOLD

Tipo String

DescripcioacutenIndica si se retiene el archivo en spool Los valores vaacutelidos son YES NO

Estado pendiente de retencioacuten

ID ATTR_HOLDPNDSTS

Tipo String

DescripcioacutenIndica si se ha emitido un mandato Retener transcriptor (HLDWTR) para este transcriptor Losvalores posibles son NO (no se ha emitido ninguacuten mandato HLDWTR) IMMED (el transcriptorqueda retenido cuando sus almacenamientos intermedios de salida queden vaciacuteos) CTRLD (el

IBM Toolbox para Java 133

transcriptor queda retenido una vez que se imprima la copia actual del archivo en spool)PAGEEND (el transcriptor queda retenido al final de la paacutegina)

Configuracioacuten de la imagen

ID ATTR_IMGCFG

Tipo String

DescripcioacutenServicios de transformacioacuten para diversos formatos de corriente de datos de impresioacuten e imagen

Inicializar el transcriptor

ID ATTR_WTRINIT

Tipo String

DescripcioacutenEl usuario puede especificar cuaacutendo debe inicializarse el dispositivo de impresora Los valoresvaacutelidos son WTR FIRST ALL

Direccioacuten Internet

ID ATTR_INTERNETADDR

Tipo String

DescripcioacutenDireccioacuten Internet del sistema receptor

Atributos IPP - juego de caracteres

ID ATTR_IPP_ATTR_CHARSET

Tipo String

DescripcioacutenIndica el juego de caracteres (juego de caracteres codificado y meacutetodo de codificacioacuten) de losatributos del archivo en spool especificados por IPP

ID de trabajo IPP

ID ATTR_IPP_JOB_ID

Tipo Integer

DescripcioacutenID de trabajo IPP relativo a la impresora IPP que ha creado el trabajo

Nombre de trabajo IPP

ID ATTR_IPP_ATR_CHARSET

Tipo String

DescripcioacutenNombre del trabajo faacutecilmente reconocible por el usuario

NL de nombre de trabajo IPP

ID ATTR_IPP_JOB_NAME_NL

Tipo String

134 IBM Toolbox para Java IBM Toolbox para Java

DescripcioacutenIdioma natural del nombre de trabajo

Nombre de usuario emisor de trabajo IPP

ID ATTR_IPP_JOB_ORIGUSER

Tipo String

DescripcioacutenIdentifica el usuario final que emitioacute este trabajo IPP

NL de nombre de usuario emisor de trabajo IPP

ID ATTR_IPP_JOB_ORIGUSER_NL

Tipo String

DescripcioacutenIdentifica el idioma natural del nombre de usuario que originoacute el trabajo

Nombre de impresora IPP

ID ATTR_IPP_PRINTER_NAME

Tipo String

DescripcioacutenIdentifica la impresora IPP que creoacute este trabajo

Nombre de trabajo

ID ATTR_JOBNAME

Tipo String

DescripcioacutenNombre del trabajo que creoacute el archivo en spool

Nuacutemero de trabajo

ID ATTR_JOBNUMBER

Tipo String

DescripcioacutenNuacutemero del trabajo que creoacute el archivo en spool

Separadores de trabajo

ID ATTR_JOBSEPRATR

Tipo Integer

DescripcioacutenNuacutemero de separadores de trabajo que se colocaraacuten al principio de la salida para cada trabajoque tenga archivos en spool en esta cola de salida Los valores vaacutelidos son -2 0-9 El valor MSGse codifica como -2 Los separadores de trabajo se especifican cuando se crea la cola de salida

Sistema de trabajo

ID ATTR_JOBSYSTEM

Tipo String

IBM Toolbox para Java 135

DescripcioacutenEl sistema en el que se ejecutaba el trabajo que ha creado el archivo en spool

Usuario de trabajo

ID ATTR_JOBUSER

Tipo String

DescripcioacutenNombre del usuario que creoacute el archivo en spool

Uacuteltima paacutegina impresa

ID ATTR_LASTPAGE

Tipo Integer

DescripcioacutenEl nuacutemero de la uacuteltima paacutegina impresa es el archivo si la impresioacuten finalizoacute antes de que seterminara de procesar el trabajo

Longitud de paacutegina

ID ATTR_PAGELEN

Tipo Float

DescripcioacutenLongitud de una paacutegina Las unidades de medida se especifican en el atributo de meacutetodo demedida

Nombre de biblioteca

ID ATTR_LIBRARY

Tipo String

DescripcioacutenNombre de la biblioteca

Liacuteneas por pulgada

ID ATTR_LPI

Tipo Float

DescripcioacutenNuacutemero de liacuteneas por pulgada vertical del archivo en spool

Interlineado

ID ATTR_LINESPACING

Tipo String

DescripcioacutenIndica coacutemo se espacian los registros de datos de liacutenea de un archivo al imprimirse Lainformacioacuten se devuelve uacutenicamente para los archivos de tipos de dispositivo de impresoraLINE y AFPDSLINE Los valores vaacutelidos son SINGLE DOUBLE TRIPLE o CTLCHAR

Tipo y modelo del fabricante

ID ATTR_MFGTYPE

Tipo String

136 IBM Toolbox para Java IBM Toolbox para Java

DescripcioacutenEspecifica el fabricante el tipo y el modelo al transformar los datos de impresioacuten de SCS enASCII

Maacuteximo de trabajos por lista de clientes

ID ATTR_MAX_JOBS_PER_CLIENT

Tipo Integer

DescripcioacutenEl cliente lo proporciona para indicar el tamantildeo maacuteximo de la cola de impresora

Maacuteximo de registros de salida en spool

ID ATTR_MAXRECORDS

Tipo Integer

DescripcioacutenNuacutemero maacuteximo de registros permitidos en este archivo en el momento de abrirse El valorNOMAX se codifica como 0

Meacutetodo de medida

ID ATTR_MEASMETHOD

Tipo String

DescripcioacutenMeacutetodo de medida utilizado para los atributos de longitud de paacutegina y anchura de paacutegina Losvalores vaacutelidos son ROWCOL UOM

Ayuda para mensajes

ID ATTR_MSGHELP

Tipo char()

DescripcioacutenLa ayuda para mensajes que a veces se denomina texto de segundo nivel puede devolversemediante una peticioacuten de recuperacioacuten de mensaje El sistema limita la longitud a 3000 caracteres(la versioacuten en ingleacutes debe ser un 30 inferior para dar cabida a la traduccioacuten)

ID de mensaje

ID ATTR_MESSAGEID

Tipo String

DescripcioacutenID de mensaje

Cola de mensajes

ID ATTR_MESSAGE_QUEUE

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado de la cola de mensajes que el transcriptor empleapara los mensajes operativos El formato de la viacutea de acceso del sistema de archivos integrado esQSYSLIBbibliotecaLIBcolamensajesMSGQ donde biblioteca es la biblioteca que contiene lacola de mensajes y colamensajes es el nombre de la cola de mensajes

IBM Toolbox para Java 137

Respuesta a mensaje

ID ATTR_MSGREPLY

Tipo String

DescripcioacutenRespuesta al mensaje Es una serie de texto que debe proporcionar el cliente que responde a unmensaje de tipo consulta En el caso de un mensaje recuperado el servidor devuelve el valor delatributo con la respuesta predeterminada que puede utilizar el cliente El sistema limita lalongitud a 132 caracteres Debe terminar en nulo debido a la longitud variable

Texto de mensaje

ID ATTR_MSGTEXT

Tipo String

DescripcioacutenEl texto del mensaje que a veces se denomina texto de primer nivel puede devolverse medianteuna peticioacuten de recuperacioacuten de mensaje El sistema limita la longitud a 132 caracteres

Tipo de mensaje

ID ATTR_MSGTYPE

Tipo String

DescripcioacutenEl tipo de mensaje es una codificacioacuten EBCDIC de 2 diacutegitos Dos tipos de mensajes indican si sepuede responder a un mensaje recuperado 04 Los mensajes informativos proporcionaninformacioacuten sin solicitar una respuesta (pueden requerir una accioacuten correctiva) 05 Los mensajesde consulta proporcionan informacioacuten y solicitan una respuesta

Gravedad de mensaje

ID ATTR_MSGSEV

Tipo Integer

DescripcioacutenGravedad del mensaje Los valores abarcan del 00 al 99 Cuanto mayor es el valor mayor es lagravedad o importancia de la condicioacuten

Posibilidad de respuesta a varios elementos

ID ATTR_MULTI_ITEM_REPLY

Tipo String

DescripcioacutenSi el cliente establece el valor de este atributo en YES el rendimiento de las operaciones de listade archivo en spool puede mejorar en gran medida El valor predeterminado es NO

Identificador de red

ID ATTR_NETWORK

Tipo String

DescripcioacutenIdentificador de red del sistema en que se creoacute el archivo

138 IBM Toolbox para Java IBM Toolbox para Java

Nuacutemero de bytes del archivo en spool

ID ATTR_NUMBYTES_SPLF

Tipo Integer

DescripcioacutenNuacutemero total de bytes disponibles en la corriente o en el archivo en spool El valor indica elnuacutemero de bytes ANTES de que tenga lugar cualquier transformacioacuten de los datos Para darcabida a los archivos con un tamantildeo superior a 231 - 1 bytes este valor se escala el usuariodebe multiplicar el valor por 10 K para obtener el nuacutemero real de bytes Este atributo no esvaacutelido para los archivos en spool que se visualizan en la modalidad de una paacutegina cada vez

Nuacutemero de bytes de lecturaescritura

ID ATTR_NUMBYTES

Tipo Integer

DescripcioacutenNuacutemero de bytes de una operacioacuten de lectura o de escritura La accioacuten del objeto determinacoacutemo interpretar este atributo

Nuacutemero de archivos

ID ATTR_NUMFILES

Tipo Integer

DescripcioacutenNuacutemero de archivos en spool que existen en la cola de salida

Nuacutemero de transcriptores iniciados para la cola

ID ATTR_NUMWRITERS

Tipo Integer

DescripcioacutenNuacutemero de trabajos de transcriptor iniciados para la cola de salida

Atributo de objeto ampliado

ID ATTR_OBJEXTATTR

Tipo String

DescripcioacutenAtributo ampliado utilizado por algunos objetos como los recursos de font Este valor sevisualiza mediante los mandatos WRKOBJ y DSPOBJD en el servidor El tiacutetulo de una pantalla deservidor puede indicar uacutenicamente Atributo En el caso de los tipos de objeto de recursos defont por ejemplo los valores comunes son CDEPAG CDEFNT y FNTCHRSET

Estado de en cola de trabajos

ID ATTR_ONJOBQSTS

Tipo String

DescripcioacutenIndica si el transcriptor estaacute en una cola de trabajos y por consiguiente no se encuentraactualmente en ejecucioacuten Los valores posibles son YES NO

IBM Toolbox para Java 139

Mandatos de tiempo de apertura

ID ATTR_OPENCMDS

Tipo String

DescripcioacutenIndica si el usuario desea que se inserten mandatos de tiempo de apertura de SCS en la corrientede datos antes de poner los datos de archivo en spool Los valores vaacutelidos son YES NO

Controlado por el operador

ID ATTR_OPCNTRL

Tipo String

DescripcioacutenIndica si los usuarios con autorizacioacuten de control de trabajos tienen permiso para gestionar ocontrolar los archivos en spool de esta cola Los valores vaacutelidos son YES NO

Orden de archivos en cola

ID ATTR_ORDER

Tipo String

DescripcioacutenOrden de los archivos en spool en esta cola de salida Los valores vaacutelidos son FIFO JOBNBR

Bandeja de salida

ID ATTR_OUTPUTBIN

Tipo Integer

DescripcioacutenBandeja de salida que utiliza la impresora para la salida impresa Los valores abarcan del 1 al65535 El valor DEVD se codifica como 0

Prioridad de salida

ID ATTR_OUTPTY

Tipo String

DescripcioacutenPrioridad del archivo en spool La prioridad abarca del 1 (superior) al 9 (inferior) Los valoresvaacutelidos son 0-9 donde 0 representa JOB

Cola de salida

ID ATTR_OUTPUT_QUEUE

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado de la cola de salida El formato de la viacutea deacceso del sistema de archivos integrado es QSYSLIBbibliotecaLIBcolaOUTQ dondebiblioteca es la biblioteca que contiene la cola de salida y cola es el nombre de la cola de salida

Estado de la cola de salida

ID ATTR_OUTQSTS

Tipo String

140 IBM Toolbox para Java IBM Toolbox para Java

DescripcioacutenEstado de la cola de salida Los valores vaacutelidos son RELEASED HELD

Estado global

ID ATTR_OVERALLSTS

Tipo Integer

DescripcioacutenEstado global de la impresora loacutegica El teacutermino impresora loacutegica hace referencia al dispositivode impresora la cola de salida y el trabajo de transcriptor Los valores vaacutelidos son 1 (nodisponible) 2 (apagada o todaviacutea no disponible) 3 (detenida) 4 (en espera de mensaje) 5(retenida) 6 (pendiente de detencioacuten ) 7 (pendiente de retencioacuten) 8 (en espera de impresora) 9(en espera de inicio) 10 (imprimiendo) 11 (en espera de cola de salida) 12 (pendiente deconexioacuten) 13 (apagada) 14 (inutilizable) 15 (en servicio) 999 (desconocida)

Nuacutemero de liacutenea de desbordamiento

ID ATTR_OVERFLOW

Tipo Integer

DescripcioacutenUacuteltima liacutenea que se imprimiraacute antes de que los datos que se imprimen se desborden a la paacuteginasiguiente

Una paacutegina cada vez

ID ATTR_PAGE_AT_A_TIME

Tipo String

DescripcioacutenEspecifica si el archivo en spool debe abrirse en la modalidad de una paacutegina cada vez Losvalores vaacutelidos son YES y NO

Nuacutemero de paacuteginas estimado

ID ATTR_PAGES_EST

Tipo String

DescripcioacutenEspecifica si el nuacutemero de paacuteginas es estimado en lugar de real Los valores vaacutelidos son YES yNO

Definicioacuten de paacutegina

ID ATTR_PAGE_DEFINITION

Tipo String

DescripcioacutenNombre de viacutea de acceso del sistema de archivos integrado de la definicioacuten de paacutegina o un valorespecial Si se especifica una viacutea de acceso del sistema de archivos integrado el formato esQSYSLIBbibliotecaLIBdefpaacutegPAGDFN donde biblioteca es la biblioteca de la definicioacuten depaacutegina y defpaacuteg es el nombre de la definicioacuten de paacutegina Los valores especiales vaacutelidos sonNONE

Nuacutemero de paacutegina

ID ATTR_PAGENUMBER

IBM Toolbox para Java 141

Tipo Integer

DescripcioacutenNuacutemero de la paacutegina que se leeraacute de un archivo en spool abierto en la modalidad de una paacuteginacada vez

Paacuteginas por cara

ID ATTR_MULTIUP

Tipo Integer

DescripcioacutenNuacutemero de paacuteginas loacutegicas que se imprimen en cada cara de cada paacutegina fiacutesica al imprimirse elarchivo Los valores vaacutelidos son 1 2 4

Cargador de papel 1

ID ATTR_PAPER_SOURCE_1

Tipo String

DescripcioacutenTamantildeo del papel del cargador de papel 1 Si no se especifica este campo o el valor no es vaacutelidose utilizaraacute el valor especial MFRTYPMDL Los valores vaacutelidos son NONE (no hay ninguacutencargador de papel 1 o el papel se alimenta de forma manual en la impresora) MFRTYPMDL (seutiliza el tamantildeo de papel propuesto por el tipo y modelo del fabricante) LETTER (85 x 110pulgadas) LEGAL (85 x 140 pulgadas) EXECUTIVE (725 x 105 pulgadas) LEDGER (170 x110 pulgadas) A3 (297 mm x 420 mm) A4 (210 mm x 297 mm) A5 (148 mm x 210 mm) B4(257 mm x 364 mm) B5 (182 mm x 257 mm) CONT80 (80 pulgadas de ancho con papelcontinuo) CONT132 (132 pulgadas de ancho con papel continuo)

Cargador de papel 2

ID ATTR_PAPER_SOURCE_2

Tipo String

DescripcioacutenTamantildeo del papel del cargador de papel 2 Si no se especifica este campo o el valor no es vaacutelidose utilizaraacute el valor especial MFRTYPMDL Los valores vaacutelidos son NONE (no hay ninguacutencargador de papel 2 o el papel se alimenta de forma manual en la impresora) MFRTYPMDL (seutiliza el tamantildeo de papel propuesto por el tipo y modelo del fabricante) LETTER (85 x 110pulgadas) LEGAL (85 x 140 pulgadas) EXECUTIVE (725 x 105 pulgadas) LEDGER (170 x110 pulgadas) A3 (297 mm x 420 mm) A4 (210 mm x 297 mm) A5 (148 mm x 210 mm) B4(257 mm x 364 mm) B5 (182 mm x 257 mm) CONT80 (80 pulgadas de ancho con papelcontinuo) CONT132 (132 pulgadas de ancho con papel continuo)

Densidad de pel

ID ATTR_PELDENSITY

Tipo String

DescripcioacutenPara los recursos de font uacutenicamente este valor es una codificacioacuten del nuacutemero de pels (1representa el tamantildeo de pel 240 2 representa el tamantildeo de pel 320) Pueden antildeadirse a estosotros valores significativos a medida que el servidor los defina

Cuerpo

ID ATTR_POINTSIZE

142 IBM Toolbox para Java IBM Toolbox para Java

Tipo Float

DescripcioacutenCuerpo en que se imprime el texto de este archivo en spool El valor especial NONE secodificaraacute como 0

Fidelidad de impresioacuten

ID ATTR_FIDELITY

Tipo String

DescripcioacutenTipo de manejo de errores que se lleva a cabo al imprimir Los valores vaacutelidos son ABSOLUTECONTENT

Imprimir en ambas caras

ID ATTR_DUPLEX

Tipo String

DescripcioacutenIndica coacutemo se imprime la informacioacuten Los valores vaacutelidos son FORMDF NO YESTUMBLE

Calidad de impresioacuten

ID ATTR_PRTQUALITY

Tipo String

DescripcioacutenCalidad de impresioacuten que se utiliza al imprimir este archivo en spool Los valores vaacutelidos sonSTD DRAFT NLQ FASTDRAFT

Secuencia de impresioacuten

ID ATTR_PRTSEQUENCE

Tipo String

DescripcioacutenSecuencia de impresioacuten Los valores vaacutelidos son NEXT

Texto de impresioacuten

ID ATTR_PRTTEXT

Tipo String

DescripcioacutenTexto que se imprime al final de cada paacutegina de la salida impresa y en las paacuteginas de separacioacutenLos valores especiales vaacutelidos son BLANK y JOB

Impresora

ID ATTR_PRINTER

Tipo String

DescripcioacutenNombre del dispositivo de impresora

IBM Toolbox para Java 143

Impresora asignada

ID ATTR_PRTASSIGNED

Tipo String

DescripcioacutenIndica si la impresora estaacute asignada Los valores vaacutelidos son 1 (asignada a una impresoraespeciacutefica) 2 (asignada a varias impresoras) 3 (no asignada)

Tipo de dispositivo de impresora

ID ATTR_PRTDEVTYPE

Tipo String

DescripcioacutenTipo de corriente de datos de la impresora Los valores vaacutelidos son SCS IPDS USERASCIIAFPDS LINE

Archivo de impresora

ID ATTR_PRINTER_FILE

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del archivo de impresora El formato de la viacutea deacceso del sistema de archivos integrado es QSYSLIBbibliotecaLIBarchivoimpresoraFILEdonde biblioteca es la biblioteca que contiene el archivo de impresora y archivoimpresora es elnombre del archivo de impresora

Cola de impresora

ID ATTR_RMTPRTQ

Tipo String

DescripcioacutenNombre de la cola de impresora destino al enviar archivos en spool mediante SNDTCPSPLF(LPR)

Color de informacioacuten de publicacioacuten soportado

ID ATTR_PUBINF_COLOR_SUP

Tipo String

DescripcioacutenIndica el color soportado para esta entrada de lista de publicacioacuten

Paacuteginas por minuto de informacioacuten de publicacioacuten (color)

ID ATTR_PUBINF_PPM_COLOR

Tipo Integer

DescripcioacutenLas paacuteginas por minuto soportadas en la modalidad de color para esta entrada de lista depublicacioacuten

Paacuteginas por minuto de informacioacuten de publicacioacuten (monocromo)

ID ATTR_PUBINF_PPM

Tipo Integer

144 IBM Toolbox para Java IBM Toolbox para Java

DescripcioacutenLas paacuteginas por minuto soportadas en monocromo para esta entrada de lista de publicacioacuten

Soporte duacuteplex de informacioacuten de publicacioacuten

ID ATTR_PUBINF_DUPLEX_SUP

Tipo String

DescripcioacutenIndicador de duacuteplex soportado para esta entrada de lista de publicacioacuten

Ubicacioacuten de informacioacuten de publicacioacuten

ID ATTR_PUBINF_LOCATION

Tipo String

DescripcioacutenDescripcioacuten de ubicacioacuten para esta entrada de lista de publicacioacuten

Nombre de ubicacioacuten remota

ID ATTR_RMTLOCNAME

Tipo String

DescripcioacutenNombre de ubicacioacuten del dispositivo de impresora

Longitud de registro

ID ATTR_RECLENGTH

Tipo Integer

DescripcioacutenLongitud de registro

Reducir salida

ID ATTR_REDUCE

Tipo String

DescripcioacutenForma en que se imprimen varias paacuteginas loacutegicas en cada cara de una paacutegina fiacutesica Los valoresvaacutelidos son TEXT o

Sistema remoto

ID ATTR_RMTSYSTEM

Tipo String

DescripcioacutenNombre de sistema remoto Los valores especiales vaacutelidos son INTNETADR

Sustituir caracteres no imprimibles

ID ATTR_RPLUNPRT

Tipo String

IBM Toolbox para Java 145

DescripcioacutenIndica si los caracteres que no pueden imprimirse deben sustituirse por otro caraacutecter Los valoresvaacutelidos son YES o NO

Caraacutecter de sustitucioacuten

ID ATTR_RPLCHAR

Tipo String

DescripcioacutenCaraacutecter que sustituye a los caracteres no imprimibles

Reiniciar impresioacuten

ID ATTR_RESTART

Tipo Integer

DescripcioacutenReiniciar impresioacuten Los valores vaacutelidos son -1 -2 -3 o el nuacutemero de paacutegina en que se reiniciaraacutela impresioacuten El valor STRPAGE se codifica como -1 el valor ENDPAGE se codifica como -2 y elvalor NEXT se codifica como -3

Nuacutemero de grapas de cosido por el lomo

ID ATTR_SADDLESTITCH_NUMSTAPLES

Tipo Integer

DescripcioacutenNuacutemero de grapas que van a colocarse a lo largo del borde de acabado

Referencia de cosido por el lomo

ID ATTR_SADDLESTITCH_REF

Tipo String

DescripcioacutenSe colocaraacuten una o varias grapas en el medio a lo largo del borde de acabado que se situacutea en elcentro del medio en paralelo al borde de referencia Los valores vaacutelidos son NONE DEVDTOP y LEFT

Guardar archivo en spool

ID ATTR_SAVESPLF

Tipo String

DescripcioacutenIndica si el archivo en spool debe guardarse despueacutes de escribirse Los valores vaacutelidos son YESNO

Desplazamiento de buacutesqueda

ID ATTR_SEEKOFF

Tipo Integer

DescripcioacutenDesplazamiento de buacutesqueda Admite valores tanto positivos como negativos en relacioacuten con elorigen de buacutesqueda

146 IBM Toolbox para Java IBM Toolbox para Java

Origen de buacutesqueda

ID ATTR_SEEKORG

Tipo Integer

DescripcioacutenLos valores vaacutelidos son 1 (principio o parte superior) 2 (actual) y 3 (final o parte inferior)

Prioridad de enviacuteo

ID ATTR_SENDPTY

Tipo String

DescripcioacutenPrioridad de enviacuteo Los valores vaacutelidos son NORMAL HIGH

Paacutegina de separacioacuten

ID ATTR_SEPPAGE

Tipo String

DescripcioacutenOfrece a un usuario la opcioacuten de imprimir una paacutegina de anuncio de cabecera Los valoresvaacutelidos son YES o NO

Bandeja del papel

ID ATTR_SRCDRWR

Tipo Integer

DescripcioacutenBandeja que se emplearaacute cuando se seleccione la opcioacuten de alimentacioacuten automaacutetica de hojassueltas Los valores vaacutelidos son -1 -2 1-255 El valor E1 se codifica como -1 y el valor FORMDFse codifica como -2

SCS en spool

ID ATTR_SPLSCS

Tipo Long

DescripcioacutenDetermina coacutemo se utilizan los datos SCS durante la creacioacuten del archivo en spool

Poner los datos en spool

ID ATTR_SPOOL

Tipo String

DescripcioacutenIndica si los datos de salida del dispositivo de impresora se ponen en spool Los valores vaacutelidosson YES NO

Meacutetodo de autenticacioacuten de creacioacuten de archivo en spool

ID ATTR_SPLF_AUTH_METHOD

Tipo Integer

IBM Toolbox para Java 147

DescripcioacutenIndica el meacutetodo de autenticacioacuten de cliente utilizado para crear este archivo en spool Losvalores vaacutelidos son x00(NONE) x01(REQUESTER) x02(BASIC) x03(CERTIFICATE) yx04(DIGEST)

Meacutetodo de seguridad de creacioacuten de archivo en spool

ID ATTR_SPLF_SECURITY_METHOD

Tipo String

DescripcioacutenIndica el meacutetodo de seguridad utilizado para crear este archivo en spool Los valores vaacutelidos sonx00(NONE) x01(SSL3) y x02(TLS)

Nombre de archivo en spool

ID ATTR_SPOOLFILE

Tipo String

DescripcioacutenNombre del archivo en spool

Nuacutemero de archivo en spool

ID ATTR_SPLFNUM

Tipo Integer

DescripcioacutenNuacutemero del archivo en spool Los valores especiales permitidos son -1 y 0 El valor LAST secodifica como -1 el valor ONLY se codifica como 0

Estado de archivo en spool

ID ATTR_SPLFSTATUS

Tipo String

DescripcioacutenEstado del archivo en spool Los valores vaacutelidos son CLOSED HELD MESSAGE OPENPENDING PRINTER READY SAVED WRITING

Planificacioacuten de salida en spool

ID ATTR_SCHEDULE

Tipo String

DescripcioacutenEspecifica uacutenicamente para los archivos en spool cuaacutendo estaacute disponible el archivo en spoolpara el transcriptor Los valores vaacutelidos son IMMED FILEEND JOBEND

Iniciado por usuario

ID ATTR_STARTEDBY

Tipo String

DescripcioacutenNombre del usuario que inicioacute el transcriptor

148 IBM Toolbox para Java IBM Toolbox para Java

Paacutegina inicial

ID ATTR_STARTPAGE

Tipo Integer

DescripcioacutenNuacutemero de paacutegina en que se iniciaraacute la impresioacuten del archivo en spool Los valores vaacutelidos son-1 0 1 o el nuacutemero de paacutegina El valor ENDPAGE se codifica como -1 Con el valor 0 laimpresioacuten se inicia en la paacutegina 1 Con el valor 1 se imprime todo el archivo

Sistema en el que se ha creado

ID ATTR_SYSTEM

Tipo String

DescripcioacutenNombre del sistema en el que se ha creado el archivo en spool Si no puede determinarse elnombre del sistema en el que se ha creado este archivo en spool se utiliza el nombre del sistemareceptor

Texto descriptivo

ID ATTR_DESCRIPTION

Tipo String

DescripcioacutenTexto para describir una instancia de un objeto AS400

Hora de apertura de archivo

ID ATTR_TIMEOPEN

Tipo String

DescripcioacutenEn el caso de los archivos en spool hora en que se abrioacute este archivo en spool En el caso de losrecursos de AFP hora de la uacuteltima modificacioacuten del objeto La hora se codifica en una serie decaracteres con el formato siguiente HH MM SS

Hora de finalizacioacuten del trabajo de creacioacuten de archivo en spool

ID ATTR_TIME_END

Tipo String

DescripcioacutenHora en la que ha finalizado el trabajo que ha creado el archivo en spool en el sistema Estecampo debe establecerse en blancos cuando se utiliza el valor especial ALL para el campo defecha de inicio de creacioacuten de archivo en spool o cuando se utiliza el valor especial LAST para elcampo de finalizacioacuten de creacioacuten de archivo en spool Este campo debe tener un valorestablecido si se especifica una fecha para el campo de fecha de finalizacioacuten de creacioacuten dearchivo en spool La hora debe tener el formato HHMMSS que se define como se indica acontinuacioacutenv HH - Horav MM - Minutosv SS - Segundos

Hora en que el transcriptor empezoacute a procesar el archivo en spool

ID ATTR_TIME_WTR_BEGAN_FILE

IBM Toolbox para Java 149

Tipo String

DescripcioacutenIndica la hora en que el transcriptor empezoacute a procesar el archivo en spool La hora se codifica enuna serie de caracteres con el formato siguiente HH MM SS

Hora en que el transcriptor terminoacute de procesar el archivo en spool

ID ATTR_TIME_WTR_CMPL_FILE

Tipo String

DescripcioacutenIndica la hora en que el transcriptor terminoacute de procesar el archivo en spool La hora se codificaen una serie de caracteres con el formato siguiente HH MM SS

Total de paacuteginas

ID ATTR_PAGES

Tipo Integer

DescripcioacutenNuacutemero de paacuteginas que contiene un archivo en spool

Transformar SCS en ASCII

ID ATTR_SCS2ASCII

Tipo String

DescripcioacutenIndica si los datos de impresioacuten se deben transformar de SCS en ASCII Los valores vaacutelidos sonYES NO

Unidad de medida

ID ATTR_UNITOFMEAS

Tipo String

DescripcioacutenUnidad de medida que se utilizaraacute para especificar distancias Los valores vaacutelidos son CMINCH

Comentario de usuario

ID ATTR_USERCMT

Tipo String

Descripcioacuten100 caracteres de comentario especificado por el usuario que describen el archivo en spool

Datos de usuario

ID ATTR_USERDATA

Tipo String

Descripcioacuten10 caracteres de datos especificados por el usuario que describen el archivo en spool Los valoresespeciales vaacutelidos son SOURCE

150 IBM Toolbox para Java IBM Toolbox para Java

Datos definidos por usuario

ID ATTR_USRDFNDTA

Tipo String

DescripcioacutenDatos definidos por el usuario que emplearaacuten las aplicaciones de usuario o los programasespecificados por el usuario que procesan archivos en spool Todos los caracteres son aceptablesEl tamantildeo maacuteximo es 255

Archivo definido por usuario

ID ATTR_USRDEFFILE

Tipo String

DescripcioacutenIndica si el archivo en spool se ha creado utilizando una API Los valores vaacutelidos son YES oNO

Objeto definido por usuario

ID ATTR_USER_DEFINED_OBJECT

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del objeto definido por el usuario que emplearaacutenlas aplicaciones de usuario que procesan archivos en spool Si se especifica una viacutea de acceso delsistema de archivos integrado el formato de la viacutea de acceso del sistema de archivos integrado esQSYSLIBbibliotecaLIBobjetotipo donde biblioteca es el nombre de la biblioteca que contieneel objeto o uno de los valores especiales LIBL o CURLIB objeto es el nombre del objeto ytipo es el tipo de objeto Los valores vaacutelidos de tipo son DTAARA DTAQ FILE PSFCFGUSRIDX USRQ y USRSPC La serie NONE se utiliza para indicar que no se utilizaraacuteninguacuten objeto definido por el usuario

Opciones definidas por el usuario

ID ATTR_USEDFNOPTS

Tipo String

DescripcioacutenOpciones definidas por el usuario que emplearaacuten las aplicaciones de usuario que procesanarchivos en spool Pueden especificarse hasta 4 opciones cada valor tiene la longitud char(10)Todos los caracteres son aceptables

Datos de programa controlador de usuario

ID ATTR_USRDRVPGMDTA

Tipo String

DescripcioacutenDatos de usuario que se emplearaacuten con el programa controlador de usuario Todos los caracteresson aceptables El tamantildeo maacuteximo es de 5000 caracteres

Programa controlador de usuario

ID ATTR_USER_DRIVER_PROG

Tipo String

IBM Toolbox para Java 151

DescripcioacutenViacutea de acceso del sistema de archivos integrado del programa controlador definido por el usuarioque procesa los archivos en spool El formato de la viacutea de acceso del sistema de archivosintegrado es QSYSLIBbibliotecaLIBprogramaPGM donde biblioteca es el nombre de labiblioteca que contiene el programa y programa es el nombre del programa El valor de bibliotecapuede ser uno de los valores especiales LIBL o CURLIB o un nombre de bibliotecaespeciacutefico La serie NONE se utiliza para indicar que no hay ninguacuten programa controladordefinido

ID de usuario

ID ATTR_TOUSERID

Tipo String

DescripcioacutenID de usuario al que se enviacutea el archivo en spool

Direccioacuten de ID de usuario

ID ATTR_TOADDRESS

Tipo String

DescripcioacutenDireccioacuten del usuario al que se enviacutea el archivo en spool

Programa de transformacioacuten de usuario

ID ATTR_USER_TRANSFORM_PROG

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del programa de transformacioacuten definido por elusuario que transforma los datos de archivo en spool antes de que los procese el programacontrolador El formato de la viacutea de acceso del sistema de archivos integrado esQSYSLIBbibliotecaLIBprogramaPGM donde biblioteca es el nombre de la biblioteca quecontiene el programa y programa es el nombre del programa El valor de biblioteca puede ser unode los valores especiales LIBL o CURLIB o un nombre de biblioteca especiacutefico La serieNONE se utiliza para indicar que no hay ninguacuten programa de transformacioacuten definido

Fidelidad de visualizacioacuten

ID ATTR_VIEWING_FIDELITY

Tipo String

DescripcioacutenProceso que tendraacute lugar al visualizar una paacutegina de datos de archivo en spool (en la modalidadde una paacutegina cada vez) Los valores vaacutelidos son ABSOLUTE y CONTENT (predeterminados)Para procesar todos los datos que no sean de barrido (mandatos) antes de la paacutegina actual seutiliza ABSOLUTE Con los archivos SCS se utiliza CONTENT para procesar uacutenicamente losmandatos de tiempo de apertura maacutes la paacutegina actual En el caso de los archivos AFPDS seutiliza CONTENT para procesar la primera paacutegina de datos maacutes la paacutegina actual

Clase VMMVS

ID ATTR_VMMVSCLASS

Tipo String

152 IBM Toolbox para Java IBM Toolbox para Java

DescripcioacutenClase VMMVS Los valores vaacutelidos son A-Z y 0-9

Estado de en espera de datos

ID ATTR_WTNGDATASTS

Tipo String

DescripcioacutenIndica si el transcriptor ha escrito todos los datos existentes en este momento en el archivo enspool y estaacute esperando maacutes datos Los valores posibles son NO (el transcriptor no estaacuteesperando maacutes datos) y YES (el transcriptor ha escrito todos los datos existentes en estemomento en el archivo en spool y estaacute esperando maacutes datos) Esta condicioacuten se produce cuandoel transcriptor produce un archivo en spool abierto con el valor SCHEDULE(IMMED)especificado

Estado de en espera de dispositivo

ID ATTR_WTNGDEVSTS

Tipo String

DescripcioacutenIndica si el transcriptor estaacute esperando a obtener el dispositivo de un trabajo que estaacuteimprimiendo directamente en la impresora Los valores posibles son NO (el transcriptor no estaacuteesperando el dispositivo) y YES (el transcriptor estaacute esperando el dispositivo)

Estado de en espera de mensaje

ID ATTR_WTNGMSGSTS

Tipo String

DescripcioacutenIndica si el transcriptor estaacute esperando una respuesta a un mensaje de consulta Los valoresposibles son NO y YES

Cuaacutendo finalizar transcriptor automaacuteticamente

ID ATTR_WTRAUTOEND

Tipo String

DescripcioacutenIndica cuaacutendo finalizar el transcriptor si debe finalizarse automaacuteticamente Los valores vaacutelidosson NORDYF FILEEND Finalizar transcriptor automaacuteticamente debe estar establecido en YES

Cuaacutendo finalizar transcriptor

ID ATTR_WTREND

Tipo String

DescripcioacutenIndica cuaacutendo finalizar el transcriptor Los valores vaacutelidos son CNTRLD IMMED y PAGEENDEs distinto de cuaacutendo finalizar el transcriptor automaacuteticamente

Cuaacutendo retener archivo

ID ATTR_HOLDTYPE

Tipo String

IBM Toolbox para Java 153

DescripcioacutenIndica cuaacutendo retener el archivo en spool Los valores vaacutelidos son IMMED y PAGEEND

Anchura de paacutegina

ID ATTR_PAGEWIDTH

Tipo Float

DescripcioacutenAnchura de una paacutegina Las unidades de medida se especifican en el atributo de meacutetodo demedida

Objeto de personalizacioacuten de estacioacuten de trabajo

ID ATTR_WORKSTATION_CUST_OBJECT

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del objeto de personalizacioacuten de estacioacuten detrabajo El formato de la viacutea de acceso del sistema de archivos integrado es QSYSLIBbibliotecaLIBobjpersWSCST donde biblioteca es la biblioteca que contiene el objeto depersonalizacioacuten y objpers es el nombre del objeto de personalizacioacuten de la estacioacuten de trabajo

Nombre de trabajo del transcriptor

ID ATTR_WRITER

Tipo String

DescripcioacutenNombre del trabajo del transcriptor

Nuacutemero de trabajo del transcriptor

ID ATTR_WTRJOBNUM

Tipo String

DescripcioacutenNuacutemero de trabajo del transcriptor

Estado del trabajo del transcriptor

ID ATTR_WTRJOBSTS

Tipo String

DescripcioacutenEstado del trabajo del transcriptor Los valores vaacutelidos son STR END JOBQ HLD MSGW

Nombre de usuario del trabajo del transcriptor

ID ATTR_WTRJOBUSER

Tipo String

DescripcioacutenNombre del usuario que inicioacute el trabajo del transcriptor

Transcriptor iniciado

ID ATTR_WTRSTRTD

Tipo String

154 IBM Toolbox para Java IBM Toolbox para Java

DescripcioacutenIndica si se ha iniciado un transcriptor para esta impresora Los valores posibles son 1 (se hainiciado un transcriptor) y 0 (no se ha iniciado ninguacuten transcriptor)

Paacutegina inicial de transcriptor

ID ATTR_WTRSTRPAGE

Tipo Integer

DescripcioacutenEspecifica el nuacutemero de paacutegina de la primera paacutegina que se imprimiraacute del primer archivo enspool cuando se inicie el trabajo del transcriptor Solo es vaacutelido si tambieacuten se especifica el nombredel archivo en spool cuando se inicia el transcriptor

Estado de transcribiendo

ID ATTR_WRTNGSTS

Tipo String

DescripcioacutenIndica si el transcriptor de impresioacuten estaacute en estado de transcribiendo Los valores posibles sonYES (el transcriptor estaacute en estado de transcribiendo) NO (el transcriptor no estaacute en estado detranscribiendo) y FILE (el transcriptor estaacute transcribiendo los separadores de archivo)

Atributos de objeto de servidor de impresioacuten de red

CCSID NPS

ID ATTR_NPSCCSID

Tipo Integer

DescripcioacutenCCSID en que el servidor de impresioacuten de red espera que esteacuten codificadas todas las series

Nivel de NPS

ID ATTR_NPSLEVEL

DescripcioacutenVersioacuten release y nivel de modificacioacuten del servidor de impresioacuten de red Este atributo es unaserie de caracteres codificada como VXRYMY (es decir V3R1M0) donde

X es un valor comprendido entre (09)Y es un valor comprendido entre (09AZ)

Copiar archivos en spool

Puede emplear el meacutetodo copy de la clase SpooledFile para crear una copia del archivo en spool querepresenta el objeto SpooledFile

Con el uso de SpooledFilecopy() se llevan a cabo las acciones siguientesv Se crea el archivo en spool nuevo en la misma cola de salida y en el mismo sistema que el archivo en

spool originalv Se devuelve una referencia al archivo en spool nuevo

SpooledFilecopy() es un meacutetodo nuevo que solo estaacute disponible si se baja JTOpen 32 o posterior o seaplica un arreglo de IBM i La solucioacuten oacuteptima que se recomienda es bajar y utilizar JTOpen Encontraraacutemaacutes informacioacuten en estos temas

IBM Toolbox para Java 155

v IBM Toolbox para Java and JTOpen Downloads

v IBM Toolbox para Java and JTOpen Service Packs

El meacutetodo copy utiliza la API Crear archivo en spool (QSPCRTSP) en el trabajo servidor de impresioacuten dered para crear una reacuteplica exacta del archivo en spool Uacutenicamente necesita una fecha y una hora decreacioacuten exclusivas para mantener la identidad de la copia del archivo en spool recieacuten creada

Al especificar una cola de salida como paraacutemetro del meacutetodo copy se crea la copia del archivo en spoolen la primera posicioacuten de la cola de salida especificada Tanto la cola de salida como el archivo en spooloriginal deben residir en el mismo sistema

Ejemplo copiar un archivo en spool con SpooledFilecopy()

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Este ejemplo muestra coacutemo se utiliza SpooledFilecopy() para copiar un archivo en spool en la mismacola que contiene el archivo que se desea copiar Si desea direccionar el archivo en spool que acaba decopiar a una cola de salida especiacutefica pase la cola de salida como paraacutemetro del meacutetodo copy

SpooledFile newSplf = new sourceSpooledFilecopy(ltnombre_cola_salidagt)

donde ltnombre_cola_salidagt es el objeto OutputQueuepublic static void main(String args[])

Cree el objeto sistemaAS400 as400 = new AS400(ltnombre_sistemagtltnombre_usuariogt ltcontrasentildeagt) Identifique la cola de salida que contiene el archivo en spool que desea copiarOutputQueue outputQueue =

new OutputQueue(as400 QSYSLIBQUSRSYSLIBltnombre_cola_salidagtOUTQ)

Cree una matriz que contenga todos los elementos necesarios para identificar de forma exclusiva un archivo en spool en el servidorString[][] splfTags =

ltnombre_archivo_spoolgtltnuacutem_archivo_spoolgtltnombre_trabajogtltnombre_usuariogtltnuacutemero_trabajogt Tenga en cuenta que ltnombre_sistemagt ltfechagt y lthoragt son opcionales Si no los incluye quite los correspondientes splfTags[i][j] donde j tiene el valor 5 6 o 7ltnombre_sistemagtltfechagtlthoragt

Imprima la informacioacuten que identifica el archivo en spool en Systemoutfor ( int i=0 iltsplfTagslength i++)

Systemoutprintln(Copiando -gt + splfTags[i][0] + + splfTags[i][1] + + splfTags[i][2] + + splfTags[i][3] + + splfTags[i][4] + + splfTags[i][5] + + splfTags[i][6] + + splfTags[i][7] )

Cree el objeto SpooledFile para el archivo en spool origenSpooledFile sourceSpooledFile =

new SpooledFile(as400splfTags[i][0]IntegerparseInt(splfTags[i][1])

156 IBM Toolbox para Java IBM Toolbox para Java

splfTags[i][2]splfTags[i][3]splfTags[i][5]splfTags[i][6]splfTags[i][7] )

Copie el archivo en spool con lo que se crea un nuevo objeto SpooledFile Para direccionar la copia del archivo en spool a una cola de salida especiacutefica utilice el coacutedigo siguiente SpooledFile newSplf = new sourceSpooledFilecopy(ltnombre_cola_salidagt) donde ltnombre_cola_salidagt es un objeto OutputQueue Especifique la cola de salida del siguiente modo OutputQueue outputQueue = new OutputQueue(as400 QSYSLIBQUSRSYSLIBltnombre_cola_salidagtOUTQ)try SpooledFile newSplf = new sourceSpooledFilecopy()

catch ( Exception e)

Javadoc SpooledFileAPI Crear archivo en spool (QSPCRTSP)

Crear archivos en spool nuevos

Puede utilizar la clase SpooledFileOutputStream para crear nuevos archivos en spool del servidor Laclase se deriva de la clase javaioOutputStream de JDK estaacutendar una vez construida puede emplearsedondequiera que se utilice una corriente de salida (OutputStream)

Al crear un objeto SpooledFileOutputStream nuevo el llamador puede especificar los elementossiguientesv El archivo de impresora que se ha de usarv La cola de salida en la que hay que poner el archivo en spoolv Un objeto PrintParameterList que puede contener paraacutemetros para alterar temporalmente los campos

del archivo de impresora

Todos estos paraacutemetros son opcionales (el llamador puede pasarlos todos o no pasar ninguno de ellos) Sino se especifica un archivo de impresora el servidor de impresioacuten de red utiliza el archivo QPNPSPRTFque es el archivo de impresora predeterminado para la impresioacuten de red Tambieacuten estaacute el paraacutemetro colade salida porque es praacutectico este paraacutemetro se puede especificar en PrintParameterList Si el paraacutemetrocola de salida se especifica en los dos lugares el campo de PrintParameterList altera temporalmente elparaacutemetro cola de salida En la documentacioacuten del constructor de SpooledFileOutputStream encontraraacuteuna lista completa de queacute atributos se pueden establecer en PrintParameterList para crear nuevosarchivos en spool

Utilice uno de los meacutetodos write() para escribir datos en el archivo en spool El objetoSpooledFileOutputStream pone los datos en el almacenamiento intermedio y los enviacutea cuando se cierra lacorriente de salida o al llenarse el almacenamiento intermedio La puesta en el almacenamientointermedio se realiza por dos razonesv Permite a la funcioacuten que determina automaacuteticamente el tipo de datos (consulte Tipos de corriente de

datos en archivos en spool) analizar un almacenamiento intermedio de datos lleno para determinar eltipo de datos

v Agiliza el funcionamiento de la corriente de salida ya que no todas las peticiones de escritura secomunican al servidor

Utilice el meacutetodo flush() para forzar que los datos se escriban en el servidor

IBM Toolbox para Java 157

Cuando el llamador ha terminado de escribir los datos en el nuevo archivo en spool se llama al meacutetodoclose() para cerrar el archivo en spool Una vez cerrado no se pueden escribir maacutes datos en eacutel Al llamaral meacutetodo getSpooledFile() una vez cerrado el archivo en spool el llamador puede obtener una referenciaa un objeto SpooledFile que representa el archivo en spool

Tipos de corriente de datos en archivos en spool

El atributo Tipo de datos de impresora del archivo en spool permite establecer el tipo de datos que seha de poner en el archivo en spool Si el llamador no especifica un tipo de datos de impresora el valorpredeterminado es utilizar la determinacioacuten automaacutetica de tipo de datos Este meacutetodo examina los milprimeros bytes de los datos de archivo en spool determina si se ajustan a las arquitecturas de corrientede datos Corriente de caracteres SNA (SCS) o corriente de datos de las Funciones Avanzadas deImpresioacuten (AFPDS) y luego establece el atributo de manera adecuada Si los bytes de los datos delarchivo en spool no coinciden con ninguna de estas arquitecturas los datos se marcan como de tipoUSERASCII La determinacioacuten automaacutetica de tipo de datos funciona la mayor parte del tiempo Engeneral el llamador utiliza esta funcioacuten a menos que se trate de un caso especiacutefico en el que no funcionela determinacioacuten automaacutetica de tipo de datos En tales casos el llamador puede hacer que el atributoTipo de datos de impresora se establezca en un valor especiacutefico (por ejemplo SCS) El llamador sidesea utilizar los datos de impresora que estaacuten en el archivo de impresora debe utilizar el valor especialPRTF El llamador si altera temporalmente el tipo de datos predeterminado al crear un archivo en spooldebe tener la precaucioacuten de asegurarse de que los datos que se ponen en el archivo en spool coincidencon el atributo de tipo de datos Poner datos no SCS en un archivo en spool marcado para recibir datosSCS hace que el host desencadene un mensaje de error y provoca la peacuterdida del archivo en spool

En general este atributo puede tener tres valoresv SCS - una corriente de datos de impresora basada en texto y EBCDICv AFPDS (corriente de datos de Funciones avanzadas de presentacioacuten) - otra corriente de datos

soportada en el servidor AFPDS puede contener texto imagen y graacuteficos y puede usar recursosexternos como preformatos de paacutegina e imaacutegenes externas en segmentos de paacutegina

v USERASCII - cualesquiera datos de impresora que no sean SCS ni AFPDS manejados por el servidormediante el paso a traveacutes Postscript y HP-PCL son ejemplos de corrientes de datos que se ponen enun archivo en spool de tipo USERASCIIJavadoc SpooledFileOutputStreamldquoEjemplo crear archivos en spoolrdquo en la paacutegina 448Este ejemplo muestra coacutemo se crea un archivo en spool en un servidor a partir de una corriente deentradaldquoEjemplo crear archivos en spool SCSrdquo en la paacutegina 449Este ejemplo utiliza la clase SCS3812Writer para generar una corriente de datos SCS y escribirla en unarchivo en spool del servidor

Generar una corriente de datos SCS

Para generar archivos en spool que se impriman en determinadas impresoras conectadas al servidor debecrearse una corriente de datos SCS (corriente de caracteres SNA) SCS es una corriente de datos EBCDICbasada en texto que puede imprimirse en impresoras SCS en impresoras IPDS o en impresoras de PCLa impresioacuten de SCS se puede realizar convirtiendo dicha corriente de datos mediante un emulador ocon la transformacioacuten de impresioacuten en host en el servidor

Puede utilizar las clases de transcriptor (writer) SCS para generar una corriente de datos SCS de este tipoLas clases de transcriptor SCS convierten los caracteres Unicode Java y las opciones de formato en unacorriente de datos SCS Hay cinco clases de transcriptor SCS que generan los diversos niveles decorrientes de datos SCS El llamador elige el transcriptor que corresponde al destino de impresora finalen el que va a imprimir el llamador o el usuario final

Para generar una corriente de datos de impresora SCS utilice las clases de transcriptor SCS siguientes

158 IBM Toolbox para Java IBM Toolbox para Java

Clase de transcriptor SCS Descripcioacuten

SCS5256Writer La clase de transcriptor SCS maacutes simple de todasSoporta texto retorno de carro salto de liacutenea nuevaliacutenea salto de paacutegina orientacioacuten horizontal y verticalabsoluta orientacioacuten horizontal y vertical relativa yestablecer formato vertical

SCS5224Writer Ampliacutea la clase de transcriptor 5256 y antildeade meacutetodospara establecer los caracteres por pulgada (CPI) y lasliacuteneas por pulgada (LPI)

SCS5219Writer Ampliacutea la clase de transcriptor 5224 y antildeade soportepara margen izquierdo subrayado tipo de papel (papelo sobre) tamantildeo de papel calidad de impresioacuten paacuteginade coacutedigos juego de caracteres nuacutemero de bandejaalimentadora y nuacutemero de bandeja destino

SCS5553Writer Ampliacutea la clase de transcriptor 5219 y antildeade soportepara rotacioacuten de caracteres liacuteneas de cuadriacutecula y ajustede fonts 5553 es una corriente de datos DBCS (juego decaracteres de doble byte)

SCS3812Writer Ampliacutea la clase de transcriptor 5219 y antildeade soportepara negrita duacuteplex orientacioacuten de texto y fonts

Para construir un transcriptor SCS el llamador necesita una corriente de salida y opcionalmente unacodificacioacuten La corriente de datos se escribe en la corriente de salida Para crear un archivo en spool SCSel llamador construye primero un objeto SpooledFileOutputStream y luego lo utiliza para construir unobjeto transcriptor SCS El paraacutemetro de codificacioacuten proporciona un identificador de juego de caracterescodificados (CCSID) EBCDIC al que se han de convertir los datos

Una vez construido el transcriptor los meacutetodos write() permiten enviar texto a la salida Los meacutetodoscarriageReturn() lineFeed() y newLine() permiten situar el cursor de escritura en la paacutegina El meacutetodoendPage() permite finalizar la paacutegina actual e iniciar una paacutegina nueva

Tras escribir todos los datos utilice el meacutetodo close() para finalizar la corriente de datos y cerrar lacorriente de salida

Ejemplo

ldquoEjemplo crear archivos en spool SCSrdquo en la paacutegina 449 muestra coacutemo se genera una corriente de datosSCS utilizando la clase SCS3812Writer y coacutemo se escribe la corriente en un archivo en spool en elservidor

Leer archivos en spool y recursos AFP

Puede utilizar la clase PrintObjectInputStream para leer el contenido sin procesar de un archivo en spoolo un recurso de Funciones Avanzadas de Impresioacuten (AFP) del servidor Esta clase ampliacutea la clasejavaioInputStream de JDK estaacutendar para que pueda emplearse dondequiera que se utilice una corrientede entrada (InputStream)

Puede obtener un objeto PrintObjectInputStream llamando al meacutetodo getInputStream() en una instanciade la clase SpooledFile o al meacutetodo getInputStream() en una instancia de la clase AFPResource

Utilice uno de los meacutetodos read() para leer en la corriente de entrada Todos estos meacutetodos devuelven elnuacutemero de bytes leiacutedos realmente o bien -1 en el caso de que no se haya leiacutedo ninguacuten byte y de que sehaya llegado al final del archivo

IBM Toolbox para Java 159

Utilice el meacutetodo available() de PrintObjectInputStream para devolver el nuacutemero total de bytes delarchivo en spool o del recurso AFP La clase PrintObjectInputStream da soporte a marcar la corriente deentrada por lo que PrintObjectInputStream siempre devuelve true desde el meacutetodo markSupported() Elllamador puede utilizar los meacutetodos mark() y reset() para hacer que la posicioacuten de lectura actualretroceda en la corriente de entrada Utilice el meacutetodo skip() para hacer que la posicioacuten de lectura avanceen la corriente de entrada sin leer los datos

Ejemplo

El ejemplo siguiente muestra coacutemo se utiliza PrintObjectInputStream para leer un archivo en spoolexistente en el servidor

Ejemplo leer archivos en spoolJavadoc PrintObjectInputStream

Leer archivos en spool mediante PrintObjectPageInputStream y PrintObjectTransformedInputStream

Puede utilizar la clase PrintObjectPageInputStream para leer los datos de un archivo en spool AFP y SCSdel servidor paacutegina a paacutegina

Puede obtener un objeto PrintObjectPageInputStream con el meacutetodo getPageInputStream()

Utilice uno de los meacutetodos read() para leer en la corriente de entrada Todos ellos devuelven el nuacutemerode bytes leiacutedos realmente o bien -1 en el caso de que no se haya leiacutedo ninguacuten byte y de que se hayallegado al final de la paacutegina

Utilice el meacutetodo available() de PrintObjectPageInputStream para devolver el nuacutemero total de bytes de lapaacutegina actual La clase PrintObjectPageInputStream da soporte a marcar la corriente de entrada por loque PrintObjectPageInputStream siempre devuelve true desde el meacutetodo markSupported() El llamadorpuede utilizar los meacutetodos mark() y reset() para hacer que la posicioacuten de lectura actual retroceda en lacorriente de entrada y asiacute lecturas posteriores vuelvan a leer los mismos bytes El llamador puede utilizarel meacutetodo skip() para hacer que la posicioacuten de lectura avance en la corriente de entrada sin leer los datos

Sin embargo si desea transformar toda una corriente de datos de archivo en spool utilice la clasePrintObjectTransformedInputStream

Ejemplo

El ejemplo siguiente muestra coacutemo se utiliza PrintObjectPageInputStream yPrintObjectTransformedInputStream para obtener diferentes transformaciones al leer datos de archivos enspool

ldquoEjemplo leer y transformar archivos en spoolrdquo en la paacutegina 452Informacioacuten relacionadaJavadoc PrintObjectPageInputStreamJavadoc PrintObjectTransformedInputStream

Clase ProductLicenseLa clase ProductLicense permite solicitar las licencias de productos instalados en el sistema Para que seacompatible con otros usuarios de licencias de IBM i la clase funciona mediante el soporte para licenciasde productos IBM i al solicitar o liberar una licencia

La clase no aplica la poliacutetica de licencias sino que devuelve suficiente informacioacuten para que la aplicacioacutenpueda implementarla Cuando se solicita una licencia la clase ProductLicense devuelve el estado de la

160 IBM Toolbox para Java IBM Toolbox para Java

peticioacuten (licencia concedida o denegada) Si se deniega la peticioacuten la aplicacioacuten debe inhabilitar elcomportamiento que requeriacutea la licencia ya que IBM Toolbox para Java no sabe queacute funcioacuten debeinhabilitar

Utilice la clase ProductLicense con el soporte para licencias de IBM i con objeto de implementar lalicencia de la aplicacioacutenv El lado servidor de la aplicacioacuten registra el producto y los teacuterminos de la licencia con el soporte para

licencias de IBM iv El lado cliente de la aplicacioacuten utiliza el objeto ProductLicense para solicitar y liberar licencias

Ejemplo caso praacutectico de ProductLicense

Imagine por ejemplo que un cliente ha adquirido 15 licencias de uso simultaacuteneas de su producto El usosimultaacuteneo significa que 15 usuarios pueden utilizar el producto a la vez pero no tienen que sernecesariamente 15 usuarios especiacuteficos Pueden ser 15 usuarios cualesquiera de la organizacioacuten Estainformacioacuten se registra con el soporte para licencias de IBM i A medida que los usuarios se conectan laaplicacioacuten utiliza la clase ProductLicense para solicitar una licenciav Si el nuacutemero de usuarios simultaacuteneos es inferior a 15 la peticioacuten es satisfactoria y se ejecuta la

aplicacioacutenv Cuando se conecta el usuario 16 la peticioacuten ProductLicense falla La aplicacioacuten visualiza un mensaje de

error y se termina

Cuando un usuario deja de ejecutar la aplicacioacuten la aplicacioacuten libera la licencia mediante la claseProductLicense En ese momento la licencia ya estaacute disponible para que otro usuario la utiliceInformacioacuten relacionadaJavadoc ProductLicense

Clase ProgramCallLa clase ProgramCall de IBM Toolbox para Java permite al programa Java llamar a un programa IBM iPuede utilizar la clase ProgramParameter para especificar paraacutemetros de entrada de salida y deentradasalida Si el programa se ejecuta los paraacutemetros de salida y de entradasalida contienen losdatos devueltos por el programa IBM i Si el programa de IBM i no puede ejecutarse satisfactoriamenteel programa Java puede recuperar los mensajes de IBM i que se produzcan en forma de una lista deobjetos AS400Message

Los paraacutemetros obligatorios sonv El programa y los paraacutemetros que han de ejecutarsev El objeto AS400 que representa el servidor que tiene el programa

El nombre de programa y la lista de paraacutemetros se pueden establecer en el constructor mediante elmeacutetodo setProgram() o se pueden establecer en el meacutetodo run() El meacutetodo run() llama al programa

La utilizacioacuten de la clase ProgramCall hace que el objeto AS400 se conecte al servidor En Gestioacuten deconexiones encontraraacute informacioacuten acerca de coacutemo se gestionan las conexiones

Ejemplo coacutemo se utiliza ProgramCall

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El siguiente ejemplo muestra coacutemo se utiliza la clase ProgramCall Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

IBM Toolbox para Java 161

Cree un objeto programa En este ejemplo se establece que el programa se ejecute maacutes adelanteProgramCall pgm = new ProgramCall(sys)

Establezca el nombre del programa Debido a que el programa no toma ninguacuten paraacutemetro pase null para el argumento de ProgramParameter[]pgmsetProgram(QSYSObjectPathNametoPath(MYLIB MYPROG PGM))

Ejecute el programa En este ejemplo el programa no tiene ninguacuten paraacutemetro Si no se ejecuta la anomaliacutea se devuelve como conjunto de mensajes en la lista de mensajesif (pgmrun() = true)

Si llega a este punto es que el programa no ha podido ejecutarse Obtenga la lista de mensajes para determinar por queacute el programa no se ejecutoacuteAS400Message[] messageList = pgmgetMessageList()

Procese la lista de mensajes

Desconecte puesto que ya ha terminado de ejecutar los programassysdisconnectService(AS400COMMAND)

El objeto ProgramCall requiere el nombre de viacutea de acceso del sistema de archivos integrado delprograma

El comportamiento predeterminado consiste en que los programas IBM i se ejecuten en un trabajoservidor aparte aunque el programa Java y el programa IBM i esteacuten en el mismo servidor Puede alterartemporalmente el comportamiento predeterminado y hacer que el programa IBM i se ejecute en el trabajoJava mediante el meacutetodo setThreadSafe()

Utilizacioacuten de los objetos ProgramParameter

Los objetos ProgramParameter permiten pasar datos de paraacutemetro entre el programa Java y el programaIBM i Establezca los datos de entrada con el meacutetodo setInputData() Tras la ejecucioacuten del programarecupere los datos de salida con el meacutetodo getOutputData() Cada paraacutemetro es una matriz de bytes Elprograma Java debe convertir la matriz de bytes entre el formato Java y el formato de IBM i Las clasesde conversioacuten de datos proporcionan meacutetodos para convertir los datos Los paraacutemetros se antildeaden alobjeto ProgramCall en forma de lista

Ejemplo coacutemo se utiliza ProgramParameter

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se utiliza el objeto ProgramParameter para pasar datos de paraacutemetro Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

En este ejemplo el programa tiene dos paraacutemetros Cree una lista para contener los paraacutemetrosProgramParameter[] parmList = new ProgramParameter[2]

El primero paraacutemetro es un paraacutemetro de entradabyte[] key = 1 2 3parmList[0] = new ProgramParameter(key)

162 IBM Toolbox para Java IBM Toolbox para Java

El segundo paraacutemetro es de salida Se devuelve un nuacutemero de cuatro bytesparmList[1] = new ProgramParameter(4)

Cree un objeto de programa que especifique el nombre del programa y la lista de paraacutemetrosProgramCall pgm = new ProgramCall(sys QSYSLIBMYLIBLIBMYPROGPGM parmList)

Ejecute el programaif (pgmrun() = true)

Si el sistema no puede ejecutar el programa vea la lista de mensajes para averiguar por queacute no se ha ejecutadoAS400Message[] messageList = pgmgetMessageList()

else

En caso contrario el programa se ha ejecutado Procese el segundo paraacutemetro que contiene los datos devueltos

Cree un conversor para este tipo de datosAS400Bin4 bin4Converter = new AS400Bin4()

Realice la conversioacuten desde el tipo del sistema al objeto Java El nuacutemero empieza al principio del almacenamiento intermediobyte[] data = parmList[1]getOutputData()int i = bin4ConvertertoInt(data)

Desconecte puesto que ya ha terminado de ejecutar los programassysdisconnectService(AS400COMMAND)

Javadoc ProgramCallJavadoc ProgramParameterJavadoc AS400MessageJavadoc AS400Javadoc CommandCallJavadoc ProgramParameter

Clase QSYSObjectPathNamePuede utilizar la clase QSYSObjectPathName para representar un objeto del sistema de archivosintegrado Esta clase permite construir un nombre de sistema de archivos integrado o analizar en suscomponentes un nombre de sistema de archivos integrado

Varias de las clases de IBM Toolbox para Java necesitan un nombre de viacutea de acceso del sistema dearchivos integrado para poderse utilizar El objeto QSYSObjectPathName permite construir el nombre

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase QSYSObjectPathName

Ejemplo 1 el objeto ProgramCall requiere el nombre de sistema de archivos integrado del programa delservidor al que se debe llamar Se utiliza un objeto QSYSObjectPathName para construir el nombre Parallamar al programa PRINT_IT de la biblioteca REPORTS utilizando un objeto QSYSObjectPathName

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de llamada a programa

IBM Toolbox para Java 163

ProgramCall pgm = new ProgramCall(sys)

Cree un objeto nombre de viacutea de acceso que represente el programa PRINT_IT de la biblioteca REPORTSQSYSObjectPathName pgmName =

new QSYSObjectPathName(REPORTSPRINT_ITPGM)

Utilice el objeto nombre de viacutea para establecer el nombre en el objeto de llamada a programapgmsetProgram(pgmNamegetPath())

Ejecute el programa procese los resultados

Ejemplo 2 si el nombre del objeto solo se utiliza una vez el programa Java puede emplear el meacutetodotoPath() para construir el nombre Utilizar este meacutetodo es maacutes eficaz que crear un objetoQSYSObjectPathName

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de llamada a programaProgramCall pgm = new ProgramCall(sys)

Utilice el meacutetodo toPath para crear el nombre que representa el programa PRINT_IT de la biblioteca REPORTSpgmsetProgram(QSYSObjectPathNametoPath(REPORTS

PRINT_ITPGM))

Ejecute el programa procese los resultados

Ejemplo 3 en este ejemplo se ha proporcionado a un programa Java una viacutea de acceso del sistema dearchivos integrado Puede utilizarse la clase QSYSObjectPathName para analizar este nombre en suscomponentes

Cree un objeto nombre de viacutea de acceso a partir del nombre totalmente calificado del sistema de archivos integradoQSYSObjectPathName ifsName = new QSYSObjectPathName(pathName)

Utilice el objeto nombre de viacutea para obtener la biblioteca el nombre y el tipo del objeto de servidorString library = ifsNamegetLibraryName()String name = ifsNamegetObjectName()String type = ifsNamegetObjectType()

Javadoc QSYSObjectPathName

Acceso a nivel de registroLas clases de acceso a nivel de registro crean leen actualizan y suprimen archivos y miembros de IBM iv Crear un archivo fiacutesico de IBM i especificando uno de estos elementos

ndash La longitud del registrondash Un archivo fuente DDS (especificaciones de descripcioacuten de datos)ndash Un objeto RecordFormat

v Recuperar el formato de registro de un archivo fiacutesico o loacutegico o los formatos de registro de un archivoloacutegico de formato muacuteltiple de IBM i

Nota el formato de registro del archivo no se recupera en su totalidad Los formatos de registrorecuperados estaacuten destinados a utilizarse cuando se establece el formato de registro para un objeto

164 IBM Toolbox para Java IBM Toolbox para Java

AS400File Solo se recupera la informacioacuten suficiente para describir el contenido de un registro delarchivo No se recupera informacioacuten de formato de registro tal como las cabeceras de columna y losalias

v Acceder a los registros de un archivo de IBM i secuencialmente por nuacutemero de registro o por clavev Escribir registros en un archivo del sistemav Actualizar registros en un archivo del sistema secuencialmente por nuacutemero de registro o por clavev Suprimir registros en un archivo del sistema secuencialmente por nuacutemero de registro o por clavev Bloquear un archivo para distintos tipos de accesov Utilizar el control de compromiso para permitir a un programa Java efectuar estas operaciones

ndash Iniciar el control de compromiso para la conexioacutenndash Especificar distintos niveles de bloqueo de control de compromiso para los distintos archivosndash Comprometer y retrotraer transacciones

v Suprimir archivos del sistemav Suprimir un miembro de un archivo del sistema

Nota las clases de acceso a nivel de registro no dan soporte a archivos loacutegicos de unioacuten ni a camposclave nulos

A continuacioacuten figuran algunas clases y las funciones que llevan a cabov AS400File es la clase base abstracta de las clases de acceso a nivel de registro Proporciona meacutetodos que

permiten acceder secuencialmente a los registros crear y suprimir archivos y miembros y realizar lasactividades de control de compromiso

v La clase KeyedFile representa un archivo del sistema que tiene acceso por clavev La clase SequentialFile representa un archivo del sistema que tiene acceso por nuacutemero de registrov La clase AS400FileRecordDescription proporciona los meacutetodos que permiten recuperar el formato de

registro de un archivo del sistema

Las clases de acceso a nivel de registro requieren un objeto AS400 que representa el sistema que tiene losarchivos de base de datos Al utilizar las clases de acceso a nivel de registro el objeto AS400 se conecta alsistema IBM i En Gestioacuten de conexiones encontraraacute informacioacuten acerca de coacutemo se gestionan lasconexiones

Las clases de acceso a nivel de registro requieren el nombre de viacutea de acceso del sistema de archivosintegrado del archivo de base de datos En Nombres de viacutea de acceso del sistema de archivos integradopuede encontrar maacutes informacioacuten

Las clases de acceso a nivel de registro utilizanv La clase RecordFormat para describir un registro del archivo de base de datosv La clase Record para proporcionar acceso a los registros del archivo de base de datosv La clase LineDataRecordWriter para escribir un registro en formato de datos de liacutenea

Estas clases se describen en la seccioacuten Conversioacuten de datos

Ejemplos

v El ejemplo de acceso secuencial muestra coacutemo se accede secuencialmente a un archivo del sistemav El ejemplo de leer un archivo muestra coacutemo se utilizan las clases de acceso a nivel de registro para leer

un archivo del sistemav El ejemplo de archivo por clave muestra coacutemo se utilizan las clases de acceso a nivel de registro para

leer registros por clave en un archivo del sistema

IBM Toolbox para Java 165

AS400File

La clase AS400File proporciona los meacutetodos que permiten realizar diversas accionesv Crear y suprimir archivos y miembros fiacutesicos del servidorv Leer y escribir registros en archivos del servidorv Bloquear archivos para distintos tipos de accesov Utilizar bloques de registros para aumentar el rendimientov Fijar la posicioacuten del cursor dentro de un archivo abierto del servidorv Gestionar las actividades de control de compromisoInformacioacuten relacionadaJavadoc AS400File

KeyedFile

La clase KeyedFile proporciona a un programa Java el acceso por clave a un archivo del servidor Accesopor clave quiere decir que el programa Java tan solo ha de especificar una clave para acceder a losregistros de un archivo Hay meacutetodos para situar el cursor leer actualizar y suprimir registros por clave

Para situar el cursor utilice estos meacutetodosv positionCursor(Object[]) - situacutea el cursor en el primer registro que tiene la clave especificadav positionCursorAfter(Object[]) - situacutea el cursor en el registro que hay despueacutes del primer registro que

tiene la clave especificadav positionCursorBefore(Object[]) - situacutea el cursor en el registro que hay antes del primer registro que

tiene la clave especificada

Para suprimir un registro utilice este meacutetodov deleteRecord(Object[]) - suprime el primer registro que tiene la clave especificada

Los meacutetodos de lectura sonv read(Object[]) - lee el primer registro que tiene la clave especificadav readAfter(Object[]) - lee el registro situado despueacutes del primer registro que tiene la clave especificadav readBefore(Object[]) - lee el registro situado antes del primer registro que tiene la clave especificadav readNextEqual() - lee el siguiente registro cuya clave coincide con la clave especificada La buacutesqueda

empieza a partir del registro situado despueacutes de la posicioacuten actual del cursorv readPreviousEqual() - lee el registro anterior cuya clave coincide con la especificada La buacutesqueda

empieza a partir del registro situado antes de la posicioacuten actual del cursor

Para actualizar un registro utilice este meacutetodov update(Object[]) - actualiza el registro que tiene la clave especificada

Tambieacuten se proporcionan meacutetodos para especificar criterios de buacutesqueda cuando se situacutea lee y actualizapor clave Los valores vaacutelidos de los criterios de buacutesqueda sonv Igual - se busca el primer registro cuya clave coincide con la especificadav Menor que - se busca el uacuteltimo registro cuya clave se encuentra antes de la especificada seguacuten el orden

de las claves del archivov Igual o menor que - se busca el primer registro cuya clave coincide con la especificada Si no se

encuentra ninguno se busca el uacuteltimo registro cuya clave se halla antes de la especificada seguacuten elorden de las claves del archivo

v Mayor que - se busca el primer registro cuya clave se encuentra despueacutes de la especificada seguacuten elorden de las claves del archivo

166 IBM Toolbox para Java IBM Toolbox para Java

v Igual o mayor que - se busca el primer registro cuya clave coincide con la especificada Si no seencuentra ninguno se busca el primer registro cuya clave se halla despueacutes de la especificada seguacuten elorden de las claves del archivo

KeyedFile es una subclase de AS400File todos los meacutetodos de AS400File estaacuten disponibles en KeyedFile

Especificar la clave

La clave de un objeto KeyedFile se representa mediante una matriz de objetos Java cuyos tipos y orden secorresponden con los tipos y el orden de los campos de clave tal como los especifica el objetoRecordFormat para el archivo

El ejemplo que sigue muestra coacutemo se especifica la clave para el objeto KeyedFile Especifique la clave para un archivo cuyos campos de clave puestos por orden son CUSTNAME CHAR(10) CUSTNUM BINARY(9) CUSTADDR CHAR(100)VARLEN() Observe que el uacuteltimo es un campo de longitud variableObject[] theKey = new Object[3]theKey[0] = John DoetheKey[1] = new Integer(445123)theKey[2] = 2227 John Doe Lane ANYTOWN NY 11199

Un objeto KeyedFile acepta claves parciales asiacute como claves completas No obstante los valores de loscampos clave se han de especificar por orden

Por ejemplo Especifique una clave parcial para un archivo cuyos campos de clave puestos por orden son CUSTNAME CHAR(10) CUSTNUM BINARY(9) CUSTADDR CHAR(100)VARLEN()Object[] partialKey = new Object[2]partialKey[0] = John DoepartialKey[1] = new Integer(445123)

Ejemplo de una clave parcial INVALIDObject[] INVALIDPartialKey = new Object[2]INVALIDPartialKey[0] = new Integer(445123)INVALIDPartialKey[1] = 2227 John Doe Lane ANYTOWN NY 11199

No se da soporte a las claves nulas ni a los campos de clave nulos

Los valores de campo de clave para un registro se pueden obtener del objeto Record correspondiente aun archivo mediante el meacutetodo getKeyFields()

El ejemplo siguiente muestra coacutemo se lee en un archivo por clave Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoKeyedFile myFile =new KeyedFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha compilado y estaacute disponible para que lo utilice el programa Java

IBM Toolbox para Java 167

RecordFormat recordFormat = new MYKEYEDFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivomyFileopen(AS400FileREAD_WRITE 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

El formato de registro del archivo contiene cuatro campos de clave CUSTNUM CUSTNAME PARTNUM y ORDNUM en este orden partialKey contendraacute 2 valores de campo de clave Debido a que los valores de campo de clave deben estar ordenados partialKey constaraacute de valores para CUSTNUM y CUSTNAMEObject[] partialKey = new Object[2]partialKey[0] = new Integer(1)partialKey[1] = John Doe

Lea el primer registro que coincida con partialKeyRecord keyedRecord = myFileread(partialKey)

De no encontrarse el registro se devuelve nullif (keyedRecord = null) Se ha encontrado el registro correspondiente a John Doe imprima la informacioacuten

Systemoutprintln(Informacioacuten de cliente + (String)partialKey[1] + )Systemoutprintln(keyedRecord)

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Informacioacuten relacionadaJavadoc KeyedFile

SequentialFile

La clase SequentialFile permite a un programa Java acceder a un archivo del servidor por nuacutemero deregistro Hay meacutetodos para situar el cursor leer actualizar y suprimir registros por nuacutemero de registro

Para situar el cursor utilice estos meacutetodosv positionCursor(int) - situacutea el cursor en el registro que tiene el nuacutemero de registro especificadov positionCursorAfter(int) - situacutea el cursor en el registro posterior al que tiene el nuacutemero de registro

especificadov positionCursorBefore(int) - situacutea el cursor en el registro anterior al que tiene el nuacutemero de registro

especificado

Para suprimir un registro utilice este meacutetodov deleteRecord(int) - suprime el registro que tiene el nuacutemero de registro especificado

Para leer un registro utilice estos meacutetodosv read(int) - lee el registro que tiene el nuacutemero de registro especificadov readAfter(int) - lee el registro posterior al que tiene el nuacutemero de registro especificadov readBefore(int) - lee el registro anterior al que tiene el nuacutemero de registro especificado

168 IBM Toolbox para Java IBM Toolbox para Java

Para actualizar un registro utilice este meacutetodov update(int) - actualiza el registro que tiene el nuacutemero de registro especificado

SequentialFile es una subclase de AS400File todos los meacutetodos de AS400File estaacuten disponibles enSequentialFile

El ejemplo siguiente muestra coacutemo se utiliza la clase SequentialFile Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha compilado y estaacute disponible para que lo utilice el programa JavaRecordFormat recordFormat = new MYFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivomyFileopen(AS400FileREAD_WRITE 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Suprima el registro nuacutemero 2myFiledelete(2)

Lea el registro nuacutemero 5 y actualiacuteceloRecord updateRec = myFileread(5)updateRecsetField(CUSTNAME newName)

Utilice el meacutetodo update() de la clase base puesto que ya estaacute situado en el registromyFileupdate(updateRec)

Actualice el registro nuacutemero 7updateRecsetField(CUSTNAME nextNewName)updateRecsetField(CUSTNUM new Integer(7))myFileupdate(7 updateRec)

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Informacioacuten relacionadaJavadoc SequentialFile

AS400FileRecordDescription

La clase AS400FileRecordDescription de IBM Toolbox para Java proporciona los meacutetodos que permitenrecuperar el formato de registro de un archivo del servidor

Esta clase proporciona meacutetodos para crear coacutedigo fuente Java para las subclases de RecordFormat ydevolver objetos RecordFormat que describen los formatos de registro de los archivos fiacutesicos o loacutegicos

IBM Toolbox para Java 169

del servidor especificados por el usuario La salida de estos meacutetodos puede utilizarse como entrada paraun objeto AS400File al establecer el formato de registro

Se recomienda utilizar siempre la clase AS400FileRecordDescription para generar el objeto RecordFormatcuando el archivo ya existe en el servidor

Nota la clase AS400FileRecordDescription no recupera la totalidad del formato de registro de unarchivo Solo se recupera la informacioacuten suficiente para describir el contenido de los registros quecomponen el archivo No se recupera informacioacuten como la de las cabeceras de columna los alias y loscampos de referencia Por lo tanto los formatos de registro recuperados no necesariamente crean unarchivo cuyo formato de registro sea ideacutentico al del archivo del que se recuperoacute

Crear coacutedigo fuente Java para subclases de RecordFormat para representar el formato de registro dearchivos del servidor

El meacutetodo createRecordFormatSource() crea archivos fuente Java para subclases de la clase RecordFormatLos archivos se pueden compilar y luego una aplicacioacuten o un applet los puede utilizar como entradapara el meacutetodo AS400FilesetRecordFormat()

El meacutetodo createRecordFormatSource() debe utilizarse como herramienta en tiempo de desarrollo pararecuperar los formatos de registro de archivos existentes en el servidor Con este meacutetodo el fuentecorrespondiente a la subclase de la clase RecordFormat puede crearse una vez modificarse si esnecesario compilarse y despueacutes lo pueden utilizar muchos programas Java que accedan a los mismosarchivos del servidor Uacutenicamente las aplicaciones Java pueden utilizar este meacutetodo porque crea losarchivos en el sistema local Sin embargo la salida (el coacutedigo fuente Java) se puede compilar y despueacutes lapueden utilizar tanto las aplicaciones como los applets Java

Nota este meacutetodo sobrescribe los archivos cuyo nombre sea ideacutentico al de los archivos fuente Java quese crean

Ejemplo 1 el ejemplo siguiente muestra coacutemo se utiliza el meacutetodo createRecordFormatSource() Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto AS400FileRecordDescription que represente el archivoAS400FileRecordDescription myFile = new AS400FileRecordDescription(sys

QSYSLIBMYLIBLIBMYFILEFILE) Cree el archivo fuente Java en el directorio de trabajo actual Especifique package commyCompanymyProduct para la sentencia package en el fuente ya que la clase se va a suministrar como parte de my productmyFilecreateRecordFormatSource(null commyCompanymyProduct)

Suponiendo que el nombre de formato del archivo MYFILE sea FILE1 el archivo FILE1Formatjava se crearaacute en el directorio de trabajo actual Va a sobrescribir cualquier archivo que tenga el mismo nombre El nombre de la clase seraacute FILE1Format La clase ampliaraacute RecordFormat

Ejemplo 2 compile el archivo creado maacutes arriba FILE1Formatjava y utiliacutecelo de la siguiente manera Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto AS400File que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILE)

Establezca el formato de registro Ello presupone que importcommyCompanymyProductFILE1Format ya se ha realizado

170 IBM Toolbox para Java IBM Toolbox para Java

myFilesetRecordFormat(new FILE1Format())

Abra el archivo y leacutealo

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Crear objetos RecordFormat para representar el formato de registro de archivos del servidor

El meacutetodo retrieveRecordFormat() devuelve una matriz de objetos RecordFormat que representan losformatos de registro de un archivo existente en el servidor Lo maacutes habitual es que en la matriz solo sedevuelva un objeto RecordFormat Cuando el archivo cuyo formato de registro se estaacute recuperando es unarchivo loacutegico de formato muacuteltiple se devuelve maacutes de un objeto RecordFormat Utilice este meacutetodo pararecuperar dinaacutemicamente en tiempo de ejecucioacuten el formato de registro de un archivo existente en elservidor El objeto RecordFormat puede usarse luego como entrada para el meacutetodoAS400FilesetRecordFormat()

El ejemplo siguiente muestra coacutemo se utiliza el meacutetodo retrieveRecordFormat() Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto AS400FileRecordDescription que represente el archivoAS400FileRecordDescription myFile = new AS400FileRecordDescription(sys

QSYSLIBMYLIBLIBMYFILEFILE) Recupere el formato de registro correspondiente al archivoRecordFormat[] format = myFileretrieveRecordFormat()

Cree un objeto AS400File que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILE)

Establezca el formato de registromyFilesetRecordFormat(format[0])

Abra el archivo y leacutealo

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Javadoc AS400FileRecordDescriptionJavadoc RecordFormatJavadoc AS400File

Crear y suprimir archivos y miembros

Los archivos fiacutesicos del servidor se crean especificando una longitud de registro un archivo fuente DDS(especificaciones de descripcioacuten de datos) existente en el servidor o un objeto RecordFormat

Al crear un archivo y especificar una longitud de registro puede crearse un archivo de datos o unarchivo fuente El meacutetodo establece el formato de registro correspondiente al objeto No llame al meacutetodosetRecordFormat() para el objeto

IBM Toolbox para Java 171

Un archivo de datos tiene un campo Este campo tiene el nombre del archivo es de tipo caraacutecter y sulongitud es la especificada en el meacutetodo create

Un archivo fuente consta de tres camposv El campo SRCSEQ que es DECIMAL CON ZONA (62)v El campo SRCDAT que es DECIMAL CON ZONA (60)v El campo SRCDTA que es un campo de tipo caraacutecter y cuya longitud es la especificada en el meacutetodo

create menos 12

Los ejemplos que hay a continuacioacuten muestran coacutemo se crean archivos y miembros

Ejemplo 1 para crear un archivo de datos con un registro de 128 bytes Cree un objeto AS400 el archivo se crearaacute en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile newFile =

new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Cree el archivonewFilecreate(128 DATA Archivo de datos con un registro de 128 bytes)

Abra el archivo solo para escritura Nota el formato de registro del archivo ya se ha establecido mediante create()newFileopen(AS400FileWRITE_ONLY 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Escriba un registro en el archivo Debido a que el formato de registro se establecioacute en create() se puede llamar a getRecordFormat() para obtener un registro debidamente formateado para este archivoRecord writeRec = newFilegetRecordFormat()getNewRecord()writeRecsetField(0 Registro uno)newFilewrite(writeRec)

Cierre el archivo porque ya ha terminado de usarlonewFileclose()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Ejemplo 2 cuando se crea un archivo especificando un archivo fuente DDS existente este se especifica enel meacutetodo create() Para poder abrir el archivo primero es preciso establecer su formato de registromediante el meacutetodo setRecordFormat() Por ejemplo

Cree un objeto AS400 el archivo se crearaacute en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree objetos QSYSObjectPathName para el archivo nuevo y para el archivo DDSQSYSObjectPathName file = new QSYSObjectPathName(MYLIB MYFILE FILE MBR)QSYSObjectPathName ddsFile = new QSYSObjectPathName(MYLIB DDSFILE FILE MBR)

Cree un objeto de archivo que represente el archivoSequentialFile newFile = new SequentialFile(sys file)

Cree el archivonewFilecreate(ddsFile Archivo creado utilizando la descripcioacuten DDSFile)

172 IBM Toolbox para Java IBM Toolbox para Java

Establezca el formato de registro del archivo recuperaacutendolo del servidornewFilesetRecordFormat(new AS400FileRecordDescription(sysnewFilegetPath())retrieveRecordFormat()[0])

Abra el archivo para escrituranewFileopen(AS400FileWRITE_ONLY 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Escriba un registro en el archivo El meacutetodo getRecordFormat() seguido del meacutetodo getNewRecord() serviraacute para obtener obtener un registro predeterminado para el archivoRecord writeRec = newFilegetRecordFormat()getNewRecord()newFilewrite(writeRec)

Cierre el archivo porque ya ha terminado de usarlonewFileclose()

Desconecte puesto que ya ha terminado de utilizar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Ejemplo 3 cuando se crea un archivo especificando un objeto RecordFormat este objeto se especifica enel meacutetodo create() El meacutetodo establece el formato de registro correspondiente al objeto No debe llamarseal meacutetodo setRecordFormat() para el objeto

Cree un objeto AS400 el archivo se crearaacute en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile newFile =

new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Recupere el formato de registro de un archivo existenteRecordFormat recordFormat = new AS400FileRecordDescription(sysQSYSLIBMYLIBLIBEXISTINGFILEMBR1MBR)retrieveRecordFormat()[0]

Cree el archivonewFilecreate(recordFormat Archivo creado usando un objeto formato de registro)

Abra el archivo solo para escritura Nota el formato de registro del archivo ya se ha establecido mediante create()newFileopen(AS400FileWRITE_ONLY 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Escriba un registro en el archivo El objeto recordFormat serviraacute para obtener un registro predeterminado debidamente formateado para el archivoRecord writeRec = recordFormatgetNewRecord()newFilewrite(writeRec)

Cierre el archivo porque ya ha terminado de usarlonewFileclose() Desconecte puesto que ya ha terminado de utilizar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Cuando suprima archivos y miembros utilice estos meacutetodosv Utilice el meacutetodo delete() para suprimir archivos del servidor y todos sus miembrosv Utilice el meacutetodo deleteMember() para suprimir tan solo un miembro de un archivo

IBM Toolbox para Java 173

Utilice el meacutetodo addPhysicalFileMember() para antildeadir miembros a un archivoInformacioacuten relacionadaJavadoc AS400File

Leer y escribir registros

Puede utilizar la clase AS400File para leer escribir actualizar y suprimir registros en los archivos delservidor

El acceso al registro se realiza mediante la clase Record que estaacute descrita por una clase RecordFormat Elformato de registro debe establecerse mediante el meacutetodo setRecordFormat() antes de abrir el archivo amenos que el archivo se haya acabado de crear (sin la intervencioacuten de close()) con uno de los meacutetodoscreate() pues estos meacutetodos establecen el formato de registro correspondiente al objeto

Utilice los meacutetodos read() para leer un registro del archivo Se proporcionan meacutetodos para realizar estastareasv read() - leer el registro situado en la posicioacuten actual del cursorv readFirst() - leer el primer registro del archivov readLast() - leer el uacuteltimo registro del archivov readNext() - leer el siguiente registro del archivov readPrevious() - leer el registro anterior del archivo

El ejemplo siguiente muestra coacutemo se utiliza el meacutetodo readNext() Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha se ha compilado y estaacute disponible para que lo utilice el programa JavaRecordFormat recordFormat = new MYFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivomyFileopen(AS400FileREAD_ONLY 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Lea cada registro del archivo escribiendo el campo CUSTNAME (nombre de cliente) en SystemoutSystemoutprintln( LISTA DE CLIENTES)Systemoutprintln(____________________________________________)

Record record = myFilereadNext()while(record = null)

Systemoutprintln(recordgetField(CUSTNAME))record = myFilereadNext()

Cierre el archivo porque ya ha terminado de usarlo

174 IBM Toolbox para Java IBM Toolbox para Java

myFileclose()

Desconecte puesto que ya ha terminado de utilizar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Utilice el meacutetodo update() para actualizar el registro situado en la posicioacuten del cursor

Por ejemplo Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha compilado y estaacute disponible para que lo utilice el programa JavaRecordFormat recordFormat = new MYFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivo para actualizacioacutenmyFileopen(AS400FileREAD_WRITE 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Actualice el primer registro del archivo Supongamos que newName es una serie que tiene el nombre nuevo para CUSTNAME (nombre de cliente)Record updateRec = myFilereadFirst()updateRecsetField(CUSTNAME newName)myFileupdate(updateRec)

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Utilice el meacutetodo write() para antildeadir registros al final de un archivo Al archivo se le puede antildeadir unregistro individual o una matriz de registros

Utilice el meacutetodo deleteCurrentRecord() para suprimir el registro situado en la posicioacuten del cursorInformacioacuten relacionadaJavadoc AS400File

Bloquear archivos

El programa Java puede bloquear un archivo para impedir que los demaacutes usuarios accedan a dichoarchivo mientras el primer programa Java lo esteacute utilizando

Los tipos de bloqueo son los siguientes Puede encontrar maacutes informacioacuten acerca de los tipos de bloqueoen el Javadoc de AS400Filev Bloqueo de lecturaexclusivo - El programa Java actual lee registros y ninguacuten otro programa puede

acceder al archivo

IBM Toolbox para Java 175

v Bloqueo de lecturapermitir lectura compartida - El programa Java actual lee registros y los demaacutesprogramas pueden leer registros del archivo

v Bloqueo de lecturapermitir escritura compartida - El programa Java actual lee registros y los demaacutesprogramas pueden cambiar el archivo

v Bloqueo de escrituraexclusivo - El programa Java actual cambia el archivo y los demaacutes programas nopueden acceder al archivo

v Bloqueo de escriturapermitir lectura compartida - El programa Java actual cambia el archivo y losdemaacutes programas pueden leer registros del archivo

v Bloqueo de escriturapermitir escritura compartida - El programa Java actual cambia el archivo y losdemaacutes programas pueden cambiar el archivo

Para liberar los bloqueos obtenidos mediante el meacutetodo lock() el programa Java inicia el meacutetodoreleaseExplicitLocks()Informacioacuten relacionadaJavadoc AS400File

Utilizar bloques de registros

La clase AS400File de IBM Toolbox para Java utiliza bloques de registros para aumentar el rendimientov Si el archivo se ha abierto para acceso de solo lectura se lee un bloque de registros cuando el

programa Java lee un registro La agrupacioacuten en bloques aumenta el rendimiento debido a que laspeticiones de lectura ulteriores se pueden manejar sin tener que acceder al servidor Es muy pequentildea ladiferencia de rendimiento que hay entre leer un registro individual y leer varios registros Elrendimiento aumenta de manera notable si el servicio de registros se puede obtener del bloque deregistros puesto en la memoria cacheacute del clienteEl nuacutemero de registros que deben leerse de cada bloque se puede establecer al abrir el archivo Porejemplo

Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha compilado y estaacute disponible para que lo utilice el programa JavaRecordFormat recordFormat = new MYFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivo Especifique 50 para el factor de bloquesint blockingFactor = 50myFileopen(AS400FileREAD_ONLY blockingFactor AS400FileCOMMIT_LOCK_LEVEL_NONE)

Lea el primer registro del archivo Debido a que se ha especificado el factor de bloques se recuperan 50 registros durante esta invocacioacuten de read()Record record = myFilereadFirst()for (int i = 1 i lt 50 ampamp record = null i++)

Los registros leiacutedos en este bucle se obtendraacuten del bloque de registros puestos en la memoria cacheacute del cliente

176 IBM Toolbox para Java IBM Toolbox para Java

record = myFilereadNext()

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de utilizar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

v Si el archivo se abre para acceso solo de escritura el factor de bloques indica cuaacutentos registros seescriben en el archivo de una sola vez cuando se invoca el meacutetodo write(Record[])Por ejemplo

Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha compilado y estaacute disponible para que lo utilice el programa JavaRecordFormat recordFormat = new MYFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivo Especifique 50 para el factor de bloquesint blockingFactor = 50myFileopen(AS400FileWRITE_ONLY blockingFactor AS400FileCOMMIT_LOCK_LEVEL_NONE)

Cree una matriz de registros que deban escribirse en el archivoRecord[] records = new Record[100]for (int i = 0 i lt 100 i++)

Supongamos que el archivo tiene dos campos CUSTNAME y CUSTNUM (nombre y nuacutemero de cliente)records[i] = recordFormatgetNewRecord()records[i]setField(CUSTNAME Cliente + StringvalueOf(i))records[i]setField(CUSTNUM new Integer(i))

Escriba los registros en el archivo Debido a que el factor de bloques es 50 solo se realizan dos viajes al servidor escribieacutendose 50 registros en cada viajemyFilewrite(records)

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de utilizar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

v Si el archivo se abre para acceso de lecturaescritura no se lleva a cabo la agrupacioacuten en bloques Deespecificarse un factor de bloques en el meacutetodo open() dicho valor no se tiene en cuentaJavadoc AS400File

IBM Toolbox para Java 177

Fijar la posicioacuten del cursor

Un archivo abierto dispone de un cursor El cursor sentildeala al registro que se ha de leer actualizar osuprimir Cuando se abre un archivo por primera vez el cursor sentildeala al principio del archivo Elprincipio del archivo se encuentra antes del primer registro

Utilice estos meacutetodos para fijar la posicioacuten del cursorv positionCursorAfterLast() - Situacutea el cursor despueacutes del uacuteltimo registro La existencia de este meacutetodo se

debe a que con eacutel los programas Java pueden utilizar el meacutetodo readPrevious() para acceder a losregistros del archivo

v positionCursorBeforeFirst() - Situacutea el cursor antes del primer registro La existencia de este meacutetodo sedebe a que con eacutel los programas Java pueden utilizar el meacutetodo readNext() para acceder a los registrosdel archivo

v positionCursorToFirst() - Situacutea el cursor en el primer registrov positionCursorToLast() - Situacutea el cursor en el uacuteltimo registrov positionCursorToNext() - Mueve el cursor al siguiente registrov positionCursorToPrevious() - Mueve el cursor al registro anterior

El ejemplo siguiente muestra coacutemo se utiliza el meacutetodo positionCursorToFirst() para situar el cursor Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha compilado y estaacute disponible para que lo utilice el programa JavaRecordFormat recordFormat = new MYFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivomyFileopen(AS400FileREAD_WRITE 1 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Suprima el primer registro del archivomyFilepositionCursorToFirst()myFiledeleteCurrentRecord()

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de utilizar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Informacioacuten relacionadaJavadoc AS400File

178 IBM Toolbox para Java IBM Toolbox para Java

Control de compromiso

Mediante el control de compromiso el programa Java dispone de otro nivel de control sobre larealizacioacuten de cambios en un archivo Si el control de compromiso estaacute activado las transaccionesefectuadas en un archivo quedan pendientes mientras no se comprometan o se retrotraigan Si secomprometen todos los cambios se ponen en el archivo Si se retrotraen todos los cambios quedandescartados La transaccioacuten puede consistir en cambiar un registro existente antildeadir un registro suprimirun registro o incluso leer un registro que dependa del nivel de bloqueo de control de compromisoespecificado en el meacutetodo open()

Los niveles de control de compromiso son los siguientes Para ver maacutes detalles acerca de cada nivelconsulte el Javadoc de AS400Filev Todos - Todos los registros del archivo a los que se accede quedan bloqueados hasta que la transaccioacuten

se comprometa o se retrotraigav Cambio - Los registros del archivo que se actualizan antildeaden y suprimen quedan bloqueados hasta que

la transaccioacuten se comprometa o se retrotraigav Estabilidad de cursor - Los registros del archivo que se actualizan antildeaden y suprimen quedan

bloqueados hasta que la transaccioacuten se comprometa o se retrotraiga Los registros a los que se accedesin que se realice cambios en ellos solo quedan bloqueados hasta que se acceda a otro registro

v Ninguno - No se realiza ninguacuten control de compromiso en el archivo Los cambios se poneninmediatamente en el archivo y no pueden retrotraerse

Puede utilizar el meacutetodo startCommitmentControl() para iniciar el control de compromiso Dicho controlse aplica a la conexioacuten de AS400 El control de compromiso una vez que se ha iniciado para unaconexioacuten se aplica a todos los archivos abiertos bajo esa conexioacuten a partir del momento en que se inicioacuteel control de compromiso Los archivos que se han abierto antes de iniciar el control de compromiso nose encuentran bajo dicho control El nivel de control de compromiso para archivos individuales seespecifica en el meacutetodo open() Especifique COMMIT_LOCK_LEVEL_DEFAULT para utilizar el mismonivel de control de compromiso que el especificado en el meacutetodo startCommitmentControl()

Por ejemplo Cree un objeto AS400 los archivos existen en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree tres objetos archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)SequentialFile yourFile = new SequentialFile(sys QSYSLIBYOURLIBLIBYOURFILEFILEFILEMBR)SequentialFile ourFile = new SequentialFile(sys QSYSLIBOURLIBLIBOURFILEFILEFILEMBR)

Abra el archivo yourFile antes de iniciar el control de compromiso A este archivo no se le aplica ninguacuten control de compromiso El paraacutemetro nivel de bloqueo de compromiso no se tiene en cuenta porque el control de compromiso no se ha iniciado para la conexioacutenyourFilesetRecordFormat(new YOURFILEFormat())yourFileopen(AS400FileREAD_WRITE 0 AS400FileCOMMIT_LOCK_LEVEL_DEFAULT)

Inicie el control de compromiso para la conexioacuten Nota se puede usar cualquiera de los tres archivos para esta llamada a startCommitmentControl()myFilestartCommitmentControl(AS400FileCOMMIT_LOCK_LEVEL_CHANGE)

Abra myFile y ourFilemyFilesetRecordFormat(new MYFILEFormat())

Use el mismo nivel de bloqueo de compromiso que el especificado al iniciar el control de compromisomyFileopen(AS400FileWRITE_ONLY 0 COMMIT_LOCK_LEVEL_DEFAULT)

IBM Toolbox para Java 179

ourFilesetRecordFormat(new OURFILEFormat()) Especifique un nivel de bloqueo de compromiso distinto del que habiacutea al iniciar el control de compromisoourFileopen(AS400FileREAD_WRITE 0 COMMIT_LOCK_LEVEL_CURSOR_STABILITY)

Escriba y actualice registros en los tres archivos

Comprometa los cambios para los archivos myFile y ourFile Observe que el compromiso compromete todos los cambios para la conexioacuten aunque solo se ha invocado en un objeto AS400FilemyFilecommit() Cierre los archivosmyFileclose()yourFileclose()ourFileclose()

Finalice el control de compromiso Ello finaliza el control de compromiso para la conexioacutenourFileendCommitmentControl()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

El meacutetodo commit() compromete todas las transacciones a partir del liacutemite del uacuteltimo compromiso parala conexioacuten El meacutetodo rollback() descarta todas las transacciones a partir del liacutemite del uacuteltimocompromiso para la conexioacuten El control de compromiso para una conexioacuten se finaliza mediante elmeacutetodo endCommitmentControl() Si se cierra un archivo antes de invocar el meacutetodo commit() orollback() se retrotraen todas las transacciones que no se hayan comprometido Todos los archivos que sehan abierto bajo control de compromiso deben cerrarse antes de llamar al meacutetodoendCommitmentControl()

Los ejemplos que figuran a continuacioacuten muestran coacutemo iniciar el control de compromiso utilizar lasfunciones de compromiso o retrotraccioacuten y luego finalizar el control de compromiso

Supongamos que el objeto AS400 y el archivo ya tienen creada una instancia

Inicie el control de compromiso para CHANGEaFilestartCommitmentControl(AS400FileCOMMIT_LOCK_LEVEL_CHANGE)

Abra el archivo y realice varios cambios Por ejemplo actualice antildeada o suprima registros

Basaacutendose en un distintivo guarde o descarte las transaccionesif (saveChanges)

aFilecommit()else

aFilerollback()

Cierre el archivoaFileclose()

Finalice el control de compromiso para la conexioacutenaFileendCommitmentControl()

Informacioacuten relacionadaJavadoc AS400File

Clase SaveFileLa clase SaveFile representa un archivo de guardar en un servidorInformacioacuten relacionadaJavadoc de SaveFile

180 IBM Toolbox para Java IBM Toolbox para Java

Clase ServiceProgramCallLa clase ServiceProgramCall de IBM Toolbox para Java permite al usuario llamar a un programa deservicio IBM i ServiceProgramCall es una subclase de la clase ProgramCall que se utiliza para llamar aprogramas de IBM i Si desea llamar a un programa de IBM i haacutegalo con la clase ProgramCall

La clase ServiceProgramCall hace que sea posible llamar a un programa de servicio de IBM i pasar datosa un programa de servicio mediante paraacutemetros de entrada y acceder a los datos devueltos por elprograma de servicio mediante paraacutemetros de salida Al utilizar la clase ServiceProgramCall el objetoAS400 se conecta al servidor En Gestioacuten de conexiones encontraraacute informacioacuten acerca de coacutemo segestionan las conexiones

El comportamiento predeterminado consiste en que los programas de servicio se ejecuten en un trabajoservidor aparte aun cuando el programa Java y el programa de servicio esteacuten en el mismo servidorPuede alterar temporalmente el comportamiento predeterminado y hacer que el programa de servicio seejecute en el trabajo Java mediante el meacutetodo setThreadSafe() heredado de ProgramCall

Utilizacioacuten de la clase ServiceProgramCall

Para poder utilizar la clase ServiceProgramCall debe asegurarse de que se cumplen estos requisitosv El programa de servicio debe estar en un servidorv No puede pasar maacutes de siete paraacutemetros al programa de serviciov El valor de retorno del programa de servicio es vaciacuteo (void) o de tipo numeacuterico

Trabajar con objetos ProgramParameter

La clase ProgramParameter funciona junto con la clase ServiceProgramCall para pasar datos deparaacutemetro a un programa de servicio de IBM i o desde eacutel Para pasar datos de entrada al programa deservicio utilice setInputData()

Para solicitar la cantidad de datos de salida que desea que se devuelva utilice setOutputDataLength()Para recuperar los datos de salida una vez que el programa de servicio ha terminado de ejecutarse utilicegetOutputData() La clase ServiceProgramCall ademaacutes de conocer los datos en siacute necesita conocer coacutemoha de pasar los datos de paraacutemetro al programa de servicio El meacutetodo setParameterType() deProgramParameter permite proporcionar esta informacioacuten El tipo indica si el paraacutemetro se pasa por valoro por referencia En los dos casos los datos se enviacutean desde el cliente al servidor Una vez que los datosesteacuten en el servidor eacuteste utiliza el tipo de paraacutemetro para llamar correctamente al programa de servicio

Todos los paraacutemetros tendraacuten el formato de una matriz de bytes Por lo tanto para realizar la conversioacutenentre los formatos de IBM i y Java se utilizan las clases de conversioacuten y descripcioacuten de datos

Javadoc ServiceProgramCallJavadoc ProgramCallJavadoc ProgramParameter

Clase SubsystemLa clase Subsystem representa un subsistema en el servidorInformacioacuten relacionadaJavadoc de Subsystem

Clases SystemStatusLas clases SystemStatus permiten recuperar informacioacuten sobre el estado del sistema asiacute como recuperar ycambiar informacioacuten de agrupacioacuten del sistema

El objeto SystemStatus le permite recuperar informacioacuten sobre el estado con los siguientes meacutetodos

IBM Toolbox para Java 181

v getUsersCurrentSignedOn() devuelve el nuacutemero de usuarios que tienen iniciada una sesioacuten en elsistema en este momento

v getUsersTemporarilySignedOff() devuelve el nuacutemero de trabajos interactivos desconectadosv getDateAndTimeStatusGathered() devuelve la fecha y la hora del momento en que se recopiloacute

informacioacuten sobre el estado del sistemav getJobsInSystem() devuelve el nuacutemero total de trabajos de usuario y del sistema que se estaacuten

ejecutando en este momentov getBatchJobsRunning() devuelve el nuacutemero de trabajos por lotes que se ejecutan actualmente en el

sistemav getBatchJobsEnding() devuelve el nuacutemero de trabajos por lotes que estaacuten en proceso de finalizacioacutenv getSystemPools() devuelve una enumeracioacuten que contiene un objeto SystemPool para cada una de las

agrupaciones del sistema

Ademaacutes de los meacutetodos que hay en la clase SystemStatus tambieacuten puede acceder a SystemPool medianteSystemStatus SystemPool le permite obtener informacioacuten acerca de las agrupaciones del sistema yrealizar cambios en dicha informacioacuten

Ejemplo

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Este ejemplo muestra coacutemo se utiliza la puesta en memoria cacheacute con la clase SystemStatusAS400 system = new AS400(MyAS400)SystemStatus status = new SystemStatus(system)

Active la puesta en memoria cacheacute De forma predeterminada estaacute desactivadastatussetCaching(true)

Esto recuperaraacute el valor a partir del sistema Cada llamada ulterior utilizaraacute el valor puesto en memoria cacheacute en vez de recuperarlo del sistemaint jobs = statusgetJobsInSystem()

Realice aquiacute otras operaciones

Asiacute se averigua si la puesta en memoria cacheacute todaviacutea estaacute habilitadaif (statusisCaching())

Esto recuperaraacute el valor a partir de la memoria cacheacutejobs = statusgetJobsInSystem()

Vaya al sistema la proacutexima vez aunque la puesta en memoria cacheacute esteacute habilitadastatusrefreshCache()

Esto recuperaraacute el valor a partir del sistemajobs = statusgetJobsInSystem()

Desactive la puesta en memoria cacheacute Todas las llamadas ulteriores iraacuten al sistemastatussetCaching(false)

Esto recuperaraacute el valor a partir del sistemajobs = statusgetJobsInSystem()

Javadoc SystemStatus

182 IBM Toolbox para Java IBM Toolbox para Java

Clase SystemPool

La clase SystemPool permite recuperar y cambiar informacioacuten de agrupacioacuten del sistema

La clase SystemPool incluye estos meacutetodosv El meacutetodo getPoolSize() que devuelve el tamantildeo de la agrupacioacuten y el meacutetodo setPoolSize() que lo

establecev El meacutetodo getPoolName() que recupera el nombre de la agrupacioacuten y el meacutetodo setPoolName() que

lo establecev El meacutetodo getReservedSize() que devuelve la cantidad de almacenamiento de la agrupacioacuten reservado

para uso del sistemav El meacutetodo getDescription() que devuelve la descripcioacuten de la agrupacioacuten del sistemav El meacutetodo getMaximumActiveThreads() que devuelve el nuacutemero maacuteximo de hebras que pueden estar

activas en la agrupacioacuten en cualquier momentov El meacutetodo setMaximumFaults() que establece la directriz de maacuteximo de faltas por segundo que se

utilizaraacute para esta agrupacioacuten del sistemav El meacutetodo setPriority() que establece la prioridad de esta agrupacioacuten del sistema en relacioacuten con las

demaacutes agrupaciones del sistema

Ejemplo

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree un objeto AS400AS400 as400 = new AS400(nombre del sistema)

Construya un objeto agrupacioacuten del sistemaSystemPool systemPool = new SystemPool(as400SPOOL)

Obtenga la opcioacuten de paginacioacuten de la agrupacioacuten del sistemaSystemoutprintln(Opcioacuten de paginacioacuten +systemPoolgetPagingOption())

Informacioacuten relacionadaJavadoc SystemPool

Valores del sistemaLas clases de valores del sistema permiten a un programa Java recuperar y cambiar valores del sistema yatributos de red Tambieacuten puede definir su propio grupo para contener los valores del sistema que desee

Un objeto SystemValue principalmente contiene la informacioacuten siguientev Nombrev Descripcioacutenv Releasev Valor

Mediante la clase SystemValue recupere un uacutenico valor del sistema con el meacutetodo getValue() y cambieun valor del sistema con el meacutetodo setValue()

Asimismo puede recuperar informacioacuten de grupo sobre un valor del sistema determinadov Para recuperar el grupo definido por el sistema al que pertenece un valor del sistema utilice el meacutetodo

getGroup()v Para recuperar el grupo definido por el usuario al que pertenece un objeto SystemValue (si existe)

utilice los meacutetodos getGroupName() y getGroupDescription()

IBM Toolbox para Java 183

El valor de un valor del sistema siempre que se recupera por primera vez se obtiene a partir delservidor y se almacena en la memoria cacheacute En las recuperaciones ulteriores el valor que se devuelve esel que estaacute en la memoria cacheacute Si en vez del valor almacenado en la memoria cacheacute se desea obtener elvalor actual se debe utilizar un meacutetodo clear() para borrar la memoria cacheacute actual

Lista de valores del sistema

SystemValueList representa una lista de valores del sistema del servidor especificado La lista sesubdivide en varios grupos definidos por el sistema que permiten al programa Java accedersimultaacuteneamente a parte de los valores del sistema

Grupo de valores del sistema

SystemValueGroup representa un conjunto definido por el usuario de valores del sistema y atributos dered No se trata de un contenedor sino de una faacutebrica para generar y mantener conjuntos exclusivos devalores del sistema

Puede crear un objeto SystemValueGroup especificando uno de los grupos definidos por el sistema (unade las constantes de la clase SystemValueList) o especificando una matriz de nombres de valores delsistema

Puede antildeadir de forma individual los nombres de valores del sistema para incluir en el grupo medianteel meacutetodo add() Asimismo puede eliminarlos mediante el meacutetodo remove()

Una vez que el objeto SystemValueGroup se haya llenado con los nombres de valores del sistemadeseados obtenga los objetos SystemValue reales del grupo llamando al meacutetodo getSystemValues() Deesta forma un objeto SystemValueGroup toma un conjunto de nombres de valores del sistema y generaun vector de objetos SystemValue todos ellos con el sistema el nombre de grupo y la descripcioacuten degrupo del objeto SystemValueGroup

Para renovar un vector de todos los objetos SystemValue a la vez utilice el meacutetodo refresh()

Ejemplos de coacutemo se utilizan las clases SystemValue y SystemValueList

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se crea y recupera un valor del sistemaCree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto valor del sistema que represente los segundos actuales en el sistemaSystemValue sysval = new SystemValue(sys QSECOND)

Recupere el valorString second = (String)sysvalgetValue()

En este momento QSECOND se pone en memoria cacheacute Borre la memoria cacheacute para recuperar elvalor maacutes actualizado del sistemasysvalclear()second = (String)sysvalgetValue()

Cree una lista de valores del sistemaSystemValueList list = new SystemValueList(sys)

Recupere la totalidad de los valores de fechahora del sistema

184 IBM Toolbox para Java IBM Toolbox para Java

Vector vec = listgetGroup(SystemValueListGROUP_DATTIM)

Desconeacutectese del sistemasysdisconnectAllServices()

Ejemplos de coacutemo se utiliza la clase SystemValueGroup

El ejemplo siguiente muestra coacutemo se construye un grupo de nombres de valores del sistema y coacutemodespueacutes se trabaja con ellosCree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un grupo de valores del sistema que inicialmente representa todos los atributos de red del sistemaString name = My GroupString description = Es uno de mis valores del sistemaSystemValueGroup svGroup = new SystemValueGroup(sys name description SystemValueListGROUP_NET)

Antildeada al grupo algunos nombres de valores del sistema maacutes y elimine algunos no deseadossvGroupadd(QDATE)svGroupadd(QTIME)svGroupremove(NETSERVER)svGroupremove(SYSNAME)

Obtenga los objetos SystemValue reales Se devuelven dentro de un vectorVector sysvals = svGroupgetSystemValues()

Observaraacute que es uno de los valores indicados como mis valores del sistemaSystemValue mySystemValue = (SystemValue)sysvalselementAt(0)Systemoutprintln(mySystemValuegetName()+ - +mySystemValuegetGroupDescription())

Podemos antildeadir al grupo otro objeto SystemValue de otro sistemaAS400 sys2 = new AS400(otherSystemmyCompanycom)SystemValue sv = new SystemValue(sys2 QDATE)sysvalsaddElement(sv)

Ahora renueve el grupo completo de todos los valores del sistema a la vezNo importa si algunos valores del sistema son de servidores System i distintosNo importa si algunos valores del sistema se han generado con SystemValueGroup y otros noSystemValueGrouprefresh(sysvals)

Desconeacutectese de los sistemassysdisconnectAllServices()sys2disconnectAllServices()

Javadoc SystemValueJavadoc SystemValueListJavadoc SystemValueGroup

Clase TraceLa clase Trace permite al programa Java anotar puntos de rastreo y mensajes de diagnoacutestico Estainformacioacuten ayuda a reproducir y a diagnosticar problemas

Nota tambieacuten puede establecer el rastreo mediante las propiedades de rastreo del sistema

La clase Trace anota las siguientes categoriacuteas de informacioacuten

Categoriacutea de informacioacuten Descripcioacuten

Conversioacuten Anota las conversiones de juego de caracteres entre laspaacuteginas de coacutedigos y Unicode Solo utilizan estacategoriacutea las clases de IBM Toolbox para Java

IBM Toolbox para Java 185

Categoriacutea de informacioacuten Descripcioacuten

Corriente de datos Anota los datos que fluyen entre el sistema y elprograma Java Solo utilizan esta categoriacutea las clases deIBM Toolbox para Java

Diagnoacutestico Anota informacioacuten sobre el estado

Error Anota errores adicionales que ocasionan una excepcioacuten

Informacioacuten Rastrea el flujo a traveacutes de un programa

PCML Esta categoriacutea se utiliza para determinar coacutemo interpretaPCML los datos que se enviacutean al servidor y que sereciben del mismo

Proxy Las clases de IBM Toolbox para Java utilizan estacategoriacutea para anotar el flujo de datos entre el cliente y elservidor proxy

Aviso Anota informacioacuten acerca de los errores de los que elprograma ha podido recuperarse

Total Esta categoriacutea permite habilitar o inhabilitar el rastreopara todas las categoriacuteas anteriores a la vez Lainformacioacuten de rastreo no se puede anotar directamenteen esta categoriacutea

Las clases de IBM Toolbox para Java tambieacuten utilizan las categoriacuteas de rastreo Cuando un programa Javahabilita las anotaciones la informacioacuten de IBM Toolbox para Java se incluye junto con la informacioacutenregistrada por la aplicacioacuten

El rastreo se puede habilitar para una sola categoriacutea o para un conjunto de categoriacuteas Una vezseleccionadas las categoriacuteas utilice el meacutetodo setTraceOn para activar y desactivar el rastreo Para escribirlos datos en las anotaciones se utiliza el meacutetodo log

Puede enviar los datos de rastreo de distintos componentes a anotaciones separadas Los datos derastreo de forma predeterminada se escriben en las anotaciones predeterminadas Utilice el rastreo decomponentes para escribir datos de rastreo especiacuteficos de la aplicacioacuten en unas anotaciones distintas o enla salida estaacutendar El rastreo de componentes permite separar faacutecilmente los datos de rastreo de unaaplicacioacuten especiacutefica de los demaacutes datos

Una cantidad excesiva de anotaciones puede afectar al rendimiento Utilice el meacutetodo isTraceOn paraconsultar el estado actual del rastreo El programa Java puede emplear este meacutetodo para determinar siconstruye el registro de rastreo antes de llamar al meacutetodo log Llamar al meacutetodo log cuando el rastreoestaacute desactivado no es un error pero se invierte maacutes tiempo

El valor predeterminado es escribir informacioacuten de anotaciones en la salida estaacutendar Para redirigir lasanotaciones a un archivo llame al meacutetodo setFileName() desde la aplicacioacuten Java En general esto solofunciona para las aplicaciones Java porque la mayoriacutea de los navegadores no dan acceso a los appletspara escribir en el sistema de archivos local

Las anotaciones estaacuten desactivadas de forma predeterminada Los programas Java proporcionan alusuario un procedimiento que le permite activar las anotaciones para que le resulte faacutecil habilitarlas Porejemplo la aplicacioacuten puede realizar un anaacutelisis para obtener un paraacutemetro de liacutenea de mandatos queindique queacute categoriacutea de datos se anota El usuario puede establecer este paraacutemetro cuando se necesiteinformacioacuten de anotaciones

186 IBM Toolbox para Java IBM Toolbox para Java

Ejemplos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase Trace

Ejemplo de coacutemo se utiliza setTraceOn() y de la escritura de datos en unas anotaciones mediante elmeacutetodo log

Habilite las anotaciones de diagnoacutestico informacioacuten y avisoTracesetTraceDiagnosticOn(true)TracesetTraceInformationOn(true)TracesetTraceWarningOn(true)

Active el rastreoTracesetTraceOn(true)

En este punto del programa Java escriba en las anotacionesTracelog(TraceINFORMATION Se acaba de entrar en la clase xxx meacutetodo xxx)

Desactive el rastreoTracesetTraceOn(false)

Ejemplo coacutemo se utiliza Trace

En el siguiente coacutedigo el meacutetodo 2 es la manera preferible de utilizar el rastreo Meacutetodo 1 - construya un registro de rastreo y luego llame al meacutetodo log y deje que la clase de rastreo determine si los datos deben anotarse Este meacutetodo funcionaraacute pero seraacute maacutes lento que el coacutedigo siguienteString traceData = new String(Se acaba de entrar en la clase xxx datos = )traceData = traceData + data + estado = + stateTracelog(TraceINFORMATION traceData)

Meacutetodo 2 - compruebe el estado de las anotaciones antes de incorporar la informacioacuten a las anotaciones Este meacutetodo es maacutes raacutepido cuando el rastreo no estaacute activoif (TraceisTraceOn() ampamp TraceisTraceInformationOn())

String traceData = new String(se acaba de entrar en la clase xxx datos = )traceData = traceData + data + estado = + stateTracelog(TraceINFORMATION traceData)

Ejemplo coacutemo se utiliza el rastreo de componentes Cree una serie de componente Es maacutes eficaz crear un objeto que muchos literales StringString myComponent1 = commyCompanyxyzComponentString myComponent2 = commyCompanyabcComponent

Enviacutee los datos de rastreo de IBM Toolbox para Java y los de componente a archivos distintos El rastreo contendraacute toda la informacioacuten de rastreo mientras que cada archivo de anotaciones de componente solo contendraacute la informacioacuten de rastreo especiacutefica de ese componente Si no se especifica un archivo de rastreo todos los datos de rastreo iraacuten a la salida estaacutendar con el componente especificado frente a cada uno de los mensajes de rastreo

TracesetFileName(cbitbucket) TracesetFileName(myComponent1 cComponent1log) TracesetFileName(myComponent2 cComponent2log)

TracesetTraceOn(true) Active el rastreoTracesetTraceInformationOn(true) Habilite los mensajes informativos

IBM Toolbox para Java 187

Anote los datos de rastreo especiacuteficos de componente o los generales de IBM Toolbox para Java

TracesetFileName(cbitbucket)TracesetFileName(myComponent1 cComponent1log)

Informacioacuten relacionadaJavadoc Trace

Clases de usuarios y gruposLas clases de usuarios y grupos de IBM Toolbox para Java permiten obtener una lista de los usuarios ygrupos de usuarios existentes en el servidor asiacute como informacioacuten acerca de cada usuario mediante unprograma Java

La informacioacuten de usuario que se puede recuperar comprende la fecha del inicio de sesioacuten anterior elestado la fecha del uacuteltimo cambio de contrasentildea la fecha de caducidad de la contrasentildea y la clase deusuario Cuando acceda al objeto User utilice el meacutetodo setSystem() para establecer el nombre delsistema y el meacutetodo setName() para establecer el nombre de usuario Tras estos pasos utilice el meacutetodoloadUserInformation() para obtener la informacioacuten del servidor

El objeto UserGroup representa un usuario especial cuyo perfil de usuario es un perfil de grupo Con elmeacutetodo getMembers() puede obtenerse una lista de los usuarios que son miembros del grupo

El programa Java puede iterar por la lista utilizando una enumeracioacuten Todos los elementos de laenumeracioacuten son objetos Usergt por ejemplo

Cree un objeto AS400AS400 system = new AS400 (mySystemmyCompanycom)

Cree el objeto UserListUserList userList = new UserList (system)

Obtenga la lista de todos los usuarios y gruposEnumeration enum = userListgetUsers ()

Itere por la listawhile (enumhasMoreElements ())

User u = (User) enumnextElement ()Systemoutprintln (u)

Recuperar informacioacuten acerca de los usuarios y grupos

Utilice un objeto UserList para obtener una lista dev Todos los usuarios y gruposv Solo gruposv Todos los usuarios que son miembros de alguacuten grupov Todos los usuarios que no son miembros de alguacuten grupo

La uacutenica propiedad del objeto UserList que debe establecerse es el objeto AS400 que representa el sistemadel que se debe recuperar la lista de usuarios

De forma predeterminada se devuelven todos los usuarios Utilice una combinacioacuten de los meacutetodos deUserList setUserInfo() y setGroupInfo() para especificar exactamente queacute usuarios se devuelven

Javadoc UserJavadoc UserGroupJavadoc UserList

188 IBM Toolbox para Java IBM Toolbox para Java

Javadoc AS400ldquoEjemplo coacutemo se utiliza UserList para listar todos los usuarios de un grupo determinadordquo en lapaacutegina 472Este coacutedigo fuente es un ejemplo de UserList de IBM Toolbox para Java Este programa lista todos losusuarios de un grupo determinado

Clase UserSpaceLa clase UserSpace representa un espacio de usuario en el servidor Los paraacutemetros obligatorios son elnombre del espacio de usuario y el objeto AS400 que representa el servidor al que pertenece el espacio deusuario

En la clase UserSpace hay meacutetodos que permiten realizar estas tareasv Crear un espacio de usuariov Suprimir un espacio de usuariov Leer en un espacio de usuariov Escribir en un espacio de usuariov Obtener los atributos de un espacio de usuario Un programa Java puede obtener los atributos de valor

inicial valor de longitud y ampliacioacuten automaacutetica de un espacio de usuariov Establecer los atributos de un espacio de usuario Un programa Java puede establecer los atributos de

valor inicial valor de longitud y ampliacioacuten automaacutetica de un espacio de usuario

El objeto UserSpace requiere el nombre de viacutea de acceso del sistema de archivos integrado del programaEn Nombres de viacutea de acceso del sistema de archivos integrado puede encontrar maacutes informacioacuten

Al utilizar la clase UserSpace el objeto AS400 se conecta al servidor En Gestioacuten de conexiones encontraraacuteinformacioacuten acerca de coacutemo se gestionan las conexiones

El siguiente ejemplo crea un espacio de usuario y luego escribe datos en eacutel

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto espacio de usuarioUserSpace US = new UserSpace(sys

QSYSLIBMYLIBLIBMYSPACEUSRSPC)

Use el meacutetodo create para crear el espacio de usuario en el servidorUScreate(10240 El tamantildeo inicial es 10 KB

true Sustituir si el espacio de usuario ya existe Ninguacuten atributo ampliado(byte) 0x00 El valor inicial es nullCreado por un programa Java Descripcioacuten del espacio de usuarioUSE) La autorizacioacuten de uso puacuteblico sobre el

espacio de usuario es USE

Use el meacutetodo write para escribir bytes en el espacio de usuarioUSwrite(Escribir esta serie en el espacio de usuario 0)

Javadoc UserSpaceJavadoc AS400

IBM Toolbox para Java 189

Clases commtraceLas clases commtrace de IBM Toolbox para Java permiten a los programas Java trabajar con los datos derastreo de comunicaciones de una descripcioacuten de liacutenea de LAN (Ethernet o Token Ring) especificada Elpaquete commtrace incluye una clase que se puede ejecutar como un programa de utilidad autoacutenomopara dar formato a los datos de rastreo de comunicaciones

Cuando se vuelca un rastreo de comunicaciones de un servidor en un archivo continuo la informacioacuten seguarda en un formato binario Las clases commtrace permiten trabajar con los diversos componentes delarchivo continuo

Nota los archivos de rastreo de comunicaciones pueden contener informacioacuten confidencial como porejemplo contrasentildeas sin cifrar Si el archivo de rastreo de comunicaciones se encuentra en el servidorsolo pueden acceder a los datos de rastreo los usuarios con la autorizacioacuten especial SERVICE Si mueveel archivo a un cliente aseguacuterese de proteger el archivo de forma adecuada Para obtener maacutesinformacioacuten sobre los rastreos de comunicaciones consulte los enlaces que encontraraacute al final de estapaacutegina

Utilice las clases commtrace para llevar a cabo las tareas siguientesv Dar formato a los datos de rastreo purosv Analizar los datos para extraer la informacioacuten deseada Puede analizar tanto los datos puros como los

datos con formato siempre que haya utilizado las clases commtrace para dar formato a los datos

Otras clases del paquete comibmas400commtrace que no aparecen aquiacute son especiacuteficas del tipo de datosde rastreo con el que se desea trabajar Para obtener maacutes informacioacuten sobre los rastreos decomunicaciones y todas las clases commtrace consulte la seccioacuten Rastreo de comunicaciones

Modelo de commtraceLa ilustracioacuten siguiente muestra coacutemo las clases commtrace se corresponden con un archivo de rastreo decomunicaciones El graacutefico tambieacuten indica los convenios de denominacioacuten que utilizan las clasescommtrace para los componentes de un rastreo de comunicaciones

Figura 1 modelo de commtrace

190 IBM Toolbox para Java IBM Toolbox para Java

Cada trama (Frame) del archivo de rastreo contiene dos secciones iniciales (que proporcionan informacioacutengeneral sobre el contenido de la trama) y el paquete que el servidor ha transmitido a otro punto de lared

La seccioacuten con los primeros 24 bytes de datos contiene informacioacuten general sobre el contenido de latrama como por ejemplo el nuacutemero de trama y la longitud de los datos Utilice la clase Frame paraprocesar esta informacioacuten

Clases Format y FormatPropertiesLa clase Format de IBM Toolbox para Java lee los datos puros y los datos con formato de un rastreo decomunicaciones FormatProperties establece las propiedades del objeto Format como las horas de inicio yfinalizacioacuten las direcciones IP y los puertos

La clase Format sirve de interfaz entre el programa llamador y las tramas del rastreo La claseFormatProperties permite establecer y recuperar propiedades que determinan coacutemo se comporta el objetoFormat cuando encuentra informacioacuten en las tramas del rastreo

Clase Format

Utilice la clase Format para leer tanto los datos de rastreo puros como los datos de rastreo a los que ya seha dado formato con las clases commtrace

Nota no puede emplear las clases commtrace para leer un rastreo de comunicaciones al que ha dadoformato mediante el control CL Imprimir rastreo de comunicaciones (PRTCMNTRC)

Utilice la clase Format para analizar y formatear la informacioacuten de un rastreo y a continuacioacuten enviaresa informacioacuten formateada a un archivo o dispositivo de impresioacuten Ademaacutes puede crear un

IBM Toolbox para Java 191

componente frontal graacutefico que visualice la informacioacuten en una aplicacioacuten autoacutenoma o en un navegadorSi desea seleccionar uacutenicamente datos especiacuteficos utilice la clase Format para proporcionar esainformacioacuten al programa Java Por ejemplo puede emplear la clase Format para leer direcciones IP de unrastreo y utilizar esos datos en su programa

Los constructores de Format aceptan argumentos que representan datos sin formato tales como un objetoIFSFileInputStream un archivo local o el archivo de rastreo binario Para visualizar un rastreo que ya haformateado utilice el constructor de Format predeterminado y despueacutes utilice FormatopenIFSFile() oFormatopenLclFile() para especificar el archivo formateado que desea mostrar

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo se puede visualizar un rastreo guardado oformatear un rastreo binario

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Ejemplo visualizar un rastreo guardadoFormat fmt = new Format()fmtopenLclFile(pathtofile)

Lea el proacutelogoSystemoutprintln(fmtgetRecFromFile()) El nuacutemero total de registros del rastreo TCP y no TCPSystemoutprintln(Total de registros + fmtgetIntFromFile())String rec Lea los registros hasta llegar al finalwhile((rec = fmtgetRecFromFile())=null) Systemoutprintln(rec)

Ejemplo formatear un rastreo binario Cree un objeto FormatProperties De forma predeterminada efectuacutee una visualizacioacuten completaFormatProperties fmtprop = new FormatProperties()

Format fmt = new Format(pathtofile) Establece las propiedades de filtrado para este formatofmtsetFilterProperties(fmtprop)fmtsetOutFile(pathtooutputfile) Formatee el proacutelogofmtformatProlog() Formatee el rastreo y enviacutee los datos al archivo especificadofmttoLclBinFile()

Ejecutar Format como un programa de utilidad autoacutenomo

tambieacuten puede ejecutar la clase Format como un programa de utilidad autoacutenomo Encontraraacute maacutesinformacioacuten en este tema

Ejecutar Format como un programa autoacutenomo

Clase FormatProperties

Utilice la clase FormatProperties para especificar y recuperar las propiedades del objeto Format Dicho deotro modo cuando utilice la clase Format para enviar la informacioacuten a un archivo utilice la claseFormatProperties para filtrar la informacioacuten que desea enviar

192 IBM Toolbox para Java IBM Toolbox para Java

Estas propiedades especifican coacutemo se desea que el objeto Format maneje la informacioacuten que encuentraen las tramas del rastreo de comunicaciones El comportamiento predeterminado establece que el objetoFormat omitiraacute las propiedades para las que no se haya especificado un valor concreto

La clase FormatProperties proporciona constantes que se utilizaraacuten para establecer las propiedades Elestablecimiento de propiedades permite al objeto Format verificar queacute filtros se desea utilizar Porejemplo el coacutedigo siguiente establece que un objeto Format visualice un diaacutelogo de progreso y novisualice las tramas de difusioacuten

FormatProperties prop = new FormatProperties()propsetProgress(FormatPropertiesTRUE)propsetBroadcast(FormatPropertiesNO)

La mayor parte de las propiedades estaacuten disponibles para el objeto Format como filtros que se establecenexpliacutecitamente para incluir datos especiacuteficos Una vez establecidos los filtros el objeto Format visualizauacutenicamente los datos que coinciden con esos filtros Por ejemplo el coacutedigo siguiente establece un filtroque visualiza las tramas producidas entre una hora de inicio y una hora de finalizacioacuten determinadas

FormatProperties prop = new FormatProperties() Establezca el filtro en las horas de inicio y finalizacioacuten 230 pm y 245 pm GMT del 22 de julio de 2002 La hora se expresa como una indicacioacuten de la hora Unix(TM) que se basa en el origen estaacutendar 000000 GMT del 01011970propsetStartTime(1027348200)propsetEndTime(1027349100)

Ejemplo

El ejemplo siguiente muestra coacutemo se pueden emplear muchas de las clases commtrace entre ellas lasclases Format y FormatProperties para visualizar informacioacuten de rastreo en el supervisor

ldquoEjemplo coacutemo se utilizan las clases commtracerdquo en la paacutegina 197Javadoc FormatJavadoc FormatProperties

Ejecutar Format como un programa autoacutenomo

Ademaacutes de utilizar la clase Format en los programas Java puede ejecutarlo como un programa deutilidad de liacutenea de mandatos autoacutenomo para dar formato a un rastreo de comunicaciones El programaconecta un objeto IFSFileOutputStream con el archivo de salida especificado y escribe los datos en elmismo

La ejecucioacuten de Format como un programa de utilidad autoacutenomo permite dar formato a archivos con lacapacidad de proceso y el espacio de almacenamiento del servidor

Ejecutar Format desde una liacutenea de mandatos

Para ejecutar el programa de utilidad Format desde una solicitud de liacutenea de mandatos utilice elmandato siguiente

java comibmas400commtraceFormat [opciones]

donde [opciones] es una o varias de las opciones disponibles Las opciones son las siguientesv El sistema al que desea conectarsev El ID de usuario y la contrasentildea del sistemav El rastreo de comunicaciones que desea analizarv El archivo en el que desea almacenar los resultados

IBM Toolbox para Java 193

Para obtener una lista completa de las opciones disponibles consulte la documentacioacuten de consulta deJavadocs correspondiente a la clase Format

Ejecutar Format de forma remota

Para ejecutar esta clase de forma remota utilice la clase JavaApplicationCall Construya un objeto JavaApplicationCalljaCall = new JavaApplicationCall(sys)

Establezca la aplicacioacuten Java que desea ejecutarjaCallsetJavaApplication(comibmas400utilcommtraceFormat)

Establezca la variable de entorno classpath que utiliza la JVM en el servidor para que pueda encontrar la clase que debe ejecutarjaCallsetClassPath(QIBMProdDataOS400JT400libJT400Nativejar)

String[] args2 = -c true -t pathtotrace -o pathtotraceextension

jaCallsetParameters(args2)

if (jaCallrun() = true) La llamada ha fallado

Informacioacuten relacionadaJavadoc Format

Clase PrologLa clase Prolog de IBM Toolbox para Java representa la seccioacuten de 256 bytes inicial de un rastreo decomunicaciones para una descripcioacuten de liacutenea de LAN Prolog contiene informacioacuten general sobre elrastreo como las horas de inicio y finalizacioacuten el nuacutemero de bytes recogidos etc Utilice la clase Prologpara recuperar informacioacuten de esta seccioacuten de rastreo que despueacutes puede imprimir visualizar filtrar oprocesar de alguacuten otro modo

La clase Prolog proporciona meacutetodos que permiten llevar a cabo diversas acciones tales como lassiguientesv Recuperar valores de los campos del proacutelogo como por ejemplo la descripcioacuten del rastreo el tipo

Ethernet el sentido de los datos la direccioacuten IP etcv Devolver una serie con formato que contiene todos los campos del proacutelogov Probar los campos del proacutelogo para ver si hay datos no vaacutelidos

Ejemplo

El ejemplo siguiente muestra coacutemo se pueden emplear muchas de las clases commtrace entre ellas laclase Prolog para visualizar informacioacuten de rastreo en el supervisor

ldquoEjemplo coacutemo se utilizan las clases commtracerdquo en la paacutegina 197Informacioacuten relacionadaJavadoc Prolog

Clase FrameLa clase Frame representa todos los datos de un registro o trama de un rastreo de comunicaciones parauna descripcioacuten de liacutenea de LAN

Cada trama contiene tres secciones de datos principales que aparecen en el orden siguiente1 Una seccioacuten de 24 bytes inicial que contiene informacioacuten general sobre la trama2 Informacioacuten general sobre la trama (que representa la clase LanHeader)

194 IBM Toolbox para Java IBM Toolbox para Java

3 Los datos del paquete (que representan las subclases de la clase abstracta IPacket)

Utilice la clase Frame para analizar y crear una representacioacuten imprimible de los datos de la trama Laclase Frame mantiene los datos del paquete en una estructura a modo de lista enlazada que utilizaformatos especiacuteficos Para obtener informacioacuten especiacutefica sobre los posibles formatos de los datos delpaquete de una trama y para obtener informacioacuten general sobre la estructura de una trama consulteldquoModelo de commtracerdquo en la paacutegina 190

La clase Frame proporciona meacutetodos que permiten llevar a cabo diversas acciones tales como lassiguientesv Recuperar el paquete de datosv Recuperar el nuacutemero el estado y el tipo de la tramav Devolver datos especiacuteficos de la trama como una serie con formato

Puede utilizar el proceso siguiente para acceder a los datos de un paquete1 Utilice FramegetPacket() para recuperar el paquete2 Acceda a los datos de la cabecera llamando a PacketgetHeader()3 Tras recuperar la cabecera llame a HeadergetType() para encontrar el tipo4 Utilice la subclase Header especiacutefica para acceder a los datos asociados con esa cabecera (la carga uacutetil)

y las cabeceras adicionales

Ejemplo

El ejemplo siguiente muestra coacutemo se pueden emplear muchas de las clases commtrace entre ellas lasclases Format y FormatProperties para visualizar informacioacuten de rastreo en el supervisor

ldquoEjemplo coacutemo se utilizan las clases commtracerdquo en la paacutegina 197

Clase LanHeaderLa clase LanHeader recupera informacioacuten de la seccioacuten de datos que se encuentra en una ocasioacuten cercadel principio de una trama en la seccioacuten inicial de 24 bytes Normalmente esta seccioacuten contieneinformacioacuten especiacutefica del hardware con datos sobre la trama tales como el nuacutemero de trama y lalongitud de los datos

Utilice la clase LanHeader para analizar e imprimir la informacioacuten de LanHeader LanHeader contiene eltipo de informacioacuten siguientev El byte que identifica el inicio de la primera cabecera de este paquetev Las direcciones de control de acceso al medio (MAC)v Las direcciones Token Ring y la informacioacuten de direccionamiento

LanHeader tambieacuten proporciona dos meacutetodos que permiten devolver una serie con formato con losiguientev Datos de direccionamiento Token Ringv Direcciones MAC de origen direcciones MAC de destino formato de la trama y tipo de tramaInformacioacuten relacionadaJavadoc LanHeader

Clase IPPacketLa clase IPPacket de IBM Toolbox para Java representa todos los paquetes de datos que la red hatransmitido para esta trama durante el rastreo de comunicaciones IPPacket es una clase abstracta por loque deberaacuten utilizarse las diversas subclases concretas para procesar las cabeceras y los datos de lospaquetes

IBM Toolbox para Java 195

Las subclases de IPPacket son las siguientesv ARPPacketv IP4Packetv IP6Packetv UnknownPacket

Las clases Packet permiten recuperar el tipo de paquete y acceder a los datos puros (la cabecera y lacarga uacutetil) que contiene el paquete Todas las subclases utilizan constructores parecidos e incluyen unmeacutetodo adicional que devuelve una versioacuten imprimible del contenido del paquete como una serie

Todos los constructores de las clases Packet toman como argumento una matriz de bytes de los datos delpaquete pero ARPPacket tambieacuten requiere un entero que especifique el tipo de trama Al crear unainstancia de una clase Packet automaacuteticamente se crea el objeto Header correspondiente

Las clases Packet proporcionan meacutetodos que permiten llevar a cabo diversas acciones tales como lassiguientesv Recuperar el nombre y el tipo del paquetev Establecer el tipo del paquetev Devolver el objeto Header de nivel superior asociado al paquetev Devolver todos los datos del paquete como una serie sin formatov Devolver datos especiacuteficos del paquete como una serie con formato

Javadoc IPPacketJavadoc ARPPacketJavadoc IP4PacketJavadoc IP6PacketJavadoc UnknownPacket

Clase HeaderLa clase Header es la superclase abstracta para crear clases que representan tipos de cabeceras depaquetes especiacuteficos Las cabeceras de paquetes incluyen los datos asociados (o carga uacutetil) que puedenser otras cabeceras y cargas uacutetiles

Las subclases de Header son las siguientesv ARPHeaderv ExtHeaderv ICMP4Headerv ICMP6Headerv IP4Headerv IP6Headerv TCPHeaderv UDPHeaderv UnknownHeader

Las clases Header permiten recuperar los datos de la cabecera y la carga uacutetil Una cabecera puedeencapsular otras cabeceras y sus cargas uacutetiles

Al crear una instancia de una clase Packet automaacuteticamente se crea el objeto Header correspondiente Lasclases Header proporcionan meacutetodos que permiten llevar a cabo diversas acciones tales como lassiguientesv Devolver la longitud el nombre y el tipo de la cabecera

196 IBM Toolbox para Java IBM Toolbox para Java

v Recuperar los datos de la cabecera como una matriz de bytesv Recuperar la siguiente cabecera del paquetev Recuperar la carga uacutetil como una matriz de bytes una serie ASCII y una serie hexadecimalv Devolver todos los datos de la cabecera como una serie sin formatov Devolver datos especiacuteficos de la cabecera como una serie con formato

Javadoc HeaderJavadoc ARPHeaderJavadoc ExtHeaderJavadoc ICMP4HeaderJavadoc ICMP6HeaderJavadoc IP4HeaderJavadoc IP6HeaderJavadoc TCPHeaderJavadoc UDPHeaderJavadoc UnknownHeader

Ejemplo coacutemo se utilizan las clases commtraceEste ejemplo utiliza las clases commtrace de IBM Toolbox para Java para imprimir datos de rastreo decomunicaciones en un supervisor mediante un archivo binario de rastreo de comunicaciones como origende los datos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de coacutemo se utilizan las clases commtrace para imprimir datos de rastreo de comunicaciones en un supervisor mediante un archivo binario de rastreo de comunicaciones como como origen de los datos Sintaxis del mandato java CommTraceExample

import comibmas400utilcommtrace

public class CommTraceExample

public CommTraceExample() Cree un objeto FormatProperties De forma predeterminada efectuacutee una visualizacioacuten completaFormatProperties fmtprop = new FormatProperties()

Format fmt = new Format(pathtofile) Establece las propiedades de filtrado para este formatofmtsetFilterProperties(fmtprop)fmtformatProlog() Deacute formato al proacutelogo

Prolog pro = fmtgetProlog()Systemoutprintln(protoString())

Si no es un rastreo vaacutelidoif (proinvalidData())

Frame rec

Obtenga los registroswhile ((rec = fmtgetNextRecord()) = null)

IBM Toolbox para Java 197

Imprima el nuacutemero de tramaSystemoutprint(Registro + recgetRecNum()) Imprima la horaSystemoutprintln( Hora + recgetTime()) Obtenga este paquete de registrosIPPacket p = recgetPacket() Obtenga la primera cabeceraHeader h = pgetHeader()

Si IPPacket IP6if (pgetType() == IPPacketIP6)

Si Header IP6if (hgetType() == HeaderIP6)

Realice la conversioacuten a IP6 para poder acceder a los meacutetodosIP6Header ip6 = (IP6Header) h

Systemoutprintln(hgetName() + src + ip6getSrcAddr() + dst + ip6getDstAddr()) Imprima la cabecera como hexadecimalSystemoutprintln(ip6printHexHeader()) Imprima una representacioacuten de tipo String de la cabeceraSystemoutprintln(Completo + hgetName() + n + ip6toString(fmtprop))

Obtenga el resto de las cabeceraswhile ((h = hgetNextHeader()) = null)

Si es una cabecera TCPif (hgetType() == HeaderTCP)

Realice la conversioacuten para poder acceder a los meacutetodosTCPHeader tcp = (TCPHeader) hSystemoutprintln(hgetName() + src + tcpgetSrcPort() + dst + tcpgetDstPort())Systemoutprintln(Completo + hgetName() + n + tcptoString(fmtprop))

Si es una cabecera UDP else if (hgetType() == HeaderUDP)

Realice la conversioacuten para poder acceder a los meacutetodosUDPHeader udp = (UDPHeader) hSystemoutprintln(hgetName() + src + udpgetSrcPort() + dst + udpgetDstPort())Systemoutprintln(Completo + hgetName() + n + udptoString(fmtprop))

public static void main(String[] args) CommTraceExample e = new CommTraceExample()

Clases HTMLLas clases HTML de IBM Toolbox para Java proporcionan representaciones para muchos de loe elementosde coacutedigo HTML habituales

Las clases HTML de IBM Toolbox para Java ayudan al usuario a llevar a cabo las acciones siguientesv Preparar formularios y tablas para paacuteginas HTMLv Alinear textov Trabajar con una gran variedad de coacutedigos HTMLv Crear datos fuente de objetos de formato (FO) XSL (Extensible Stylesheet Language)

198 IBM Toolbox para Java IBM Toolbox para Java

v Modificar el idioma y la direccioacuten del textov Crear listas ordenadas y sin ordenarv Crear listas de archivos y aacuterboles jeraacuterquicos HTML (y los elementos que contienen)v Antildeadir atributos de coacutedigo que no estaacuten definidos en las clases HTML (por ejemplo los atributos

bgcolor y style)

Las clases HTML implementan la interfaz HTMLTagElement Cada clase genera un coacutedigo HTML para untipo de elemento especiacutefico El coacutedigo se puede recuperar con el meacutetodo getTag() y luego se puedeincorporar a cualquier documento HTML Los coacutedigos que se generan con las clases HTML soncoherentes con la especificacioacuten de HTML 32

Las clases HTML pueden funcionar conjuntamente con las clases servlet para obtener datos del servidorSin embargo tambieacuten se pueden utilizar solas si se suministran los datos de la tabla o del formulario

Asimismo puede emplear la clase HTMLDocument para crear paacuteginas HTML o datos fuente FO XSL contoda facilidad Puede convertir los datos FO XSL en documentos PDF (Portable Document Format) Conel formato PDF los documentos conservan el mismo aspecto graacutefico cuando se imprimen que cuando sevisualizan electroacutenicamente

Nota el archivo jt400Servletjar incluye tanto las clases HTML como las clases Servlet Debe actualizar laCLASSPATH para que sentildeale al archivo jt400Servletjar si desea utilizar las clases del paquetecomibmas400utilhtmlInformacioacuten relacionadaJavadoc HTMLTagElementJavadoc DirFilter - Se utiliza para determinar si un objeto File es un directorioJavadoc HTMLFileFilter - Se utiliza para determinar si un objeto File es un archivoJavadoc URLEncoder - Codifica delimitadores que deben utilizarse en una serie de URLJavadoc URLParser - Permite analizar una serie de URL para examinar el identificador URI laspropiedades y la referencia

Clase BidiOrderingLa clase BidiOrdering de IBM Toolbox para Java representa un coacutedigo HTML que modifica el idioma y ladireccioacuten del texto Una serie HTML ltBDOgt requiere dos atributos uno para el idioma y otro para ladireccioacuten del texto

La clase BidiOrdering permite llevar a cabo estas accionesv Obtener y establecer el atributo de idiomav Obtener y establecer la direccioacuten del texto

Para obtener maacutes informacioacuten acerca de coacutemo se utiliza el coacutedigo HTML ltBDOgt consulte el sitio Web de

W3C

Ejemplo coacutemo se utiliza BidiOrdering

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteEn el ejemplo siguiente se crea un objeto BidiOrdering y se establece el idioma y la direccioacuten del mismo

Cree un objeto BidiOrdering y establezca el idioma y la direccioacutenBidiOrdering bdo = new BidiOrdering()bdosetDirection(HTMLConstantsRTL)bdosetLanguage(AR)

Cree un texto

IBM Toolbox para Java 199

HTMLText text = new HTMLText(Un texto en aacuterabe)textsetBold(true)

Antildeada el texto al objeto BidiOrdering y obtenga el coacutedigo HTMLbdoaddItem(text)bdogetTag()

La sentencia de imprimir genera el siguiente coacutedigo HTMLltbdo lang=AR dir=rtlgt

ltbgtTexto en aacuterabeltbgtltbdogt

Cuando se utiliza este coacutedigo en una paacutegina HTML los navegadores que entienden el coacutedigo ltBDOgtvisualizan el ejemplo de esta forma

ebaraacute ne otxet nU

Informacioacuten relacionadaJavadoc BidiOrdering

Clase HTMLAlignLa clase HTMLAlign de IBM Toolbox para Java permite alinear secciones del documento HTML en lugarde alinear elementos individuales tales como paacuterrafos o cabeceras

La clase HTMLAlign representa el coacutedigo ltDIVgt y el atributo de alineacioacuten asociado al mismo Puedeutilizar la alineacioacuten a la derecha a la izquierda o centrada

Puede emplear esta clase para llevar a cabo diversas acciones tales como las siguientesv Antildeadir o eliminar elementos de la lista de coacutedigos que desea alinearv Obtener y establecer la alineacioacutenv Obtener y establecer la direccioacuten de interpretacioacuten del textov Obtener y establecer el idioma del elemento de entradav Obtener una representacioacuten de tipo serie del objeto HTMLAlign

Ejemplo crear objetos HTMLAlign

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteEl ejemplo que sigue crea una lista sin ordenar y a continuacioacuten crea un objeto HTMLAlign para alineartoda la lista

Cree una lista sin ordenarUnorderedList uList = new UnorderedList()uListsetType(HTMLConstantsDISC)UnorderedListItem uListItem1 = new UnorderedListItem()uListItem1setItemData(new HTMLText(Lista sin ordenar centrada))uListaddListItem(uListItem1)UnorderedListItem uListItem2 = new UnorderedListItem()uListItem2setItemData(new HTMLText(Otro elemento))uListaddListItem(uListItem2)

Alinee la listaHTMLAlign align = new HTMLAlign(uList HTMLConstantsCENTER)Systemoutprintln(align)

El ejemplo anterior genera el coacutedigo siguiente

200 IBM Toolbox para Java IBM Toolbox para Java

ltdiv align=centergtltul type=discgt

ltligtLista desordenada centradaltligtltligtOtro elementoltligt

ltulgt

Este coacutedigo cuando se utiliza en una paacutegina HTML ofrece este aspectov Lista sin ordenar centradav Otro elementoInformacioacuten relacionadaJavadoc HTMLAlign

Clase HTMLDocumentLa clase HTMLDocument permite utilizar las clases HTML de IBM Toolbox para Java existentes paracrear paacuteginas HTML o documentos PDF (Portable Document Format)

Al crear un objeto HTMLDocument debe especificar si este contiene coacutedigos HTML o coacutedigos de objetosde formato (FO) XSL (Extensible Stylesheet Language)v Cuando desee crear paacuteginas HTML la clase HTMLDocument le ofrece un sencillo meacutetodo para

agrupar todos los coacutedigos HTML necesarios Sin embargo las paacuteginas HTML no siempre tienen elmismo aspecto cuando se imprimen que cuando se visualizan en un navegador Web

v Cuando desee crear documentos PDF la clase HTMLDocument le ofrece la posibilidad de crear fuenteFO XSL que contiene toda la informacioacuten necesaria para generar un documento PDF Los documentosPDF conservan el mismo aspecto graacutefico cuando se imprimen que cuando se visualizanelectroacutenicamente

Para emplear HTMLDocument debe incluir un analizador XML y un procesador XSLT en la variable deentorno CLASSPATH Encontraraacute maacutes informacioacuten en estas paacuteginasv ldquoArchivos JARrdquo en la paacutegina 8v ldquoAnalizador XML y procesador XSLTrdquo en la paacutegina 330

Puede procesar los datos fuente XSL o HTML resultantes como desee por ejemplo visualizando el coacutedigoHTML guardando el coacutedigo XSL en un archivo o empleando los datos pasados como corriente en otraparte del programa Java

Para obtener maacutes informacioacuten sobre coacutemo crear paacuteginas HTML y datos fuente FO XSL consulte laspaacuteginas siguientesv ldquoCoacutemo se utiliza HTMLDocument para crear datos HTMLrdquov ldquoCoacutemo se utiliza HTMLDocument para crear datos FO XSLrdquo en la paacutegina 202v ldquoEjemplos coacutemo se utiliza HTMLDocumentrdquo en la paacutegina 205

Javadoc HTMLDocument

Coacutemo se utiliza HTMLDocument para crear datos HTML

HTMLDocument funciona como un objeto que envuelve la informacioacuten necesaria para crear datos fuenteHTML o de objetos de formato (FO) XSL (Extensible Stylesheet Language) Cuando desee crear paacuteginasHTML la clase HTMLDocument le ofrece un sencillo meacutetodo para agrupar todos los coacutedigos HTMLnecesarios

Generar datos fuente HTML

Al crear fuente HTML HTMLDocument recupera los coacutedigos HTML de los objetos HTML que se hancreado Puede emplear HTMLDocumentgetTag() para pasar como una corriente todos los elementosdefinidos o getTag() para cada uno de los objetos HTML individuales

IBM Toolbox para Java 201

HTMLDocument genera datos HTML a medida que estos se definen en el programa Java por lo quepuede estar seguro de que el coacutedigo HTML resultante es completo y correcto

Al llamar a HTMLDocumentgetTag() el objeto HTMLDocument lleva a cabo las acciones siguientesv Genera el coacutedigo ltHTMLgt inicial Al final de los datos genera el coacutedigo ltHTMLgt finalv Convierte los objetos HTMLHead y HTMLMeta en coacutedigos HTMLv Genera el coacutedigo ltBODYgt inicial justo despueacutes del coacutedigo ltHEADgt Al final de los datos justo antes

del coacutedigo ltHTMLgt final genera el coacutedigo ltBODYgt final

Nota si no especifica ninguacuten coacutedigo ltHEADgt HTMLDocument genera el coacutedigo ltBODYgt tras elcoacutedigo ltHTMLgt

v Convierte los demaacutes objetos HTML en coacutedigos HTML seguacuten las indicaciones del programa

Nota HTMLDocument pasa como una corriente los coacutedigos HTML tal como se lo indica el programaJava por lo que debe asegurarse de que se llama a los coacutedigos en el orden correcto

Ejemplos coacutemo se utiliza HTMLDocument

El ejemplo siguiente muestra coacutemo se utiliza HTMLDocument para generar datos fuente HTML (y fuenteFO XSL)

ldquoEjemplo coacutemo se utiliza HTMLDocument para generar fuente HTML y FO XSLrdquo en la paacutegina 208

Documentacioacuten de consulta de javadocs

Para obtener maacutes informacioacuten sobre la clase HTMLDocument consulte la siguiente documentacioacuten deconsulta de javadocs

HTMLDocument

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Coacutemo se utiliza HTMLDocument para crear datos FO XSL

HTMLDocument funciona como un objeto que envuelve la informacioacuten necesaria para crear datos fuenteHTML o de objetos de formato (FO) XSL (Extensible Stylesheet Language)

El fuente FO XSL generado sigue el modelo de formato de FO XSL El modelo emplea elementosrectangulares denominados aacutereas para contener los elementos de contenido individuales que pueden serimaacutegenes texto otros FO XSL o nada En la lista siguiente se describen los cuatro tipos de aacuterea baacutesicos

202 IBM Toolbox para Java IBM Toolbox para Java

v Las regiones funcionan como el contenedor de nivel superiorv Las aacutereas de bloque representan elementos a nivel de bloque como por ejemplo paacuterrafos o elementos

de listav Las aacutereas de liacutenea representan una liacutenea de texto dentro de un bloquev Las aacutereas dentro de liacutenea representan partes de una liacutenea como por ejemplo un caraacutecter una nota a pie

de paacutegina o una ecuacioacuten matemaacutetica

Los coacutedigos FO XSL creados por IBM Toolbox para Java cumplen los estaacutendares XSL que se describen enla recomendacioacuten de W3C Para obtener maacutes informacioacuten sobre XSL los FO XSL y la recomendacioacuten deW3C consulte lo siguiente

Extensible Stylesheet Language (XSL) Version 10

Generar datos fuente FO XSL

Al crear fuente FO XSL las propiedades de HTMLDocument representan coacutedigos FO XSL que especificanel tamantildeo la orientacioacuten y los maacutergenes de la paacutegina Ademaacutes HTMLDocument recupera de muchasclases HTML los coacutedigos FO XSL correspondientes para ese elemento de contenido

Tras emplear HTMLDocument para generar el fuente FO XSL puede emplear un formateador XSL (porejemplo la clase XSLReportWriter) para colocar los elementos de contenido en las paacuteginas de undocumento

HTMLDocument genera datos fuente FO XSL en dos grandes seccionesv La primera seccioacuten contiene los coacutedigos FO XSL ltforootgt y ltfolayout-master-setgt que contienen

informacioacuten general sobre el disentildeo de la paacutegina en relacioacuten con la altura la anchura y los maacutergenesde la paacutegina Para especificar los valores de la informacioacuten de disentildeo utilice los meacutetodos set deHTMLDocument para establecer los valores de las propiedades asociadas

v La segunda seccioacuten contiene el coacutedigo FO XSL ltfopage-sequencegt que contiene los elementos decontenido individuales Para especificar elementos de contenido individuales que son instancias de lasclases HTML recupere el coacutedigo FO XSL correspondiente del objeto HTML Aseguacuterese de utilizaruacutenicamente clases HTML que tengan el meacutetodo getFoTag() para los elementos de contenido

Nota si intenta recuperar coacutedigos FO XSL de clases HTML que no tienen el meacutetodo getFoTag()obtendraacute un coacutedigo de comentario

Para obtener maacutes informacioacuten sobre las clases HTML que incluyen meacutetodos para trabajar con los coacutedigosFO XSL consulte la siguiente documentacioacuten de consulta de javadocs

ldquoClases habilitadas para FO XSLrdquo en la paacutegina 204

Tras crear una instancia de HTMLDocument y establecer las propiedades de disentildeo recupere los coacutedigosFO XSL de los objetos HTML mediante los meacutetodos setUseFO() getFoTag() y getTag()v Puede emplear setUseFO() tanto en HTMLDocument como en los objetos HTML individuales Al

utilizar setUseFO() puede recuperar coacutedigos FO XSL mediante HTMLDocumentgetTag()v Si lo prefiere tambieacuten puede emplear el meacutetodo getFoTag() tanto en HTMLDocument como en los

objetos HTML individuales Puede interesarle utilizar este otro meacutetodo cuando tenga que generarfuente HTML y FO XSL a partir de HTMLDocument o de los objetos HTML

IBM Toolbox para Java 203

Ejemplo coacutemo se utiliza HTMLDocument

Despueacutes de crear datos fuente FO XSL tendraacute que convertir esos datos FO XSL en un formato que losusuarios puedan visualizar e imprimir Los ejemplos siguientes muestran coacutemo generar datos fuente FOXSL (y fuente HTML) y convertir los datos fuente FO XSL en un documento PDF mediante las clasesXSLReportWriter y Context

ldquoEjemplo coacutemo se utiliza HTMLDocument para generar fuente HTML y FO XSLrdquo en la paacutegina 208

ldquoEjemplo convertir datos fuente FO XSL en un PDFrdquo en la paacutegina 205

Documentacioacuten de consulta de javadocs

Para obtener maacutes informacioacuten sobre la clase HTMLDocument consulte la siguiente documentacioacuten deconsulta de javadocs

HTMLDocument

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Clases habilitadas para FO XSL

Este tema describe las clases de IBM Toolbox para Java que son compatibles con la claseHTMLDocument

Muchas clases HTML de IBM Toolbox para Java ofrecen los meacutetodos siguientes que permiten a lasinstancias de estas clases trabajar con HTMLDocumentv getFoTag()v getTag()v setUseFO()

Para obtener maacutes informacioacuten sobre la clase HTMLDocument y sobre las clases HTML que incluyenmeacutetodos para trabajar con los objetos FO XSL consulte la siguiente documentacioacuten de consulta dejavadocsv HTMLDocumentv BidiOrderingv HTMLAlignv HTMLHeadv HTMLHeading

204 IBM Toolbox para Java IBM Toolbox para Java

v HTMLImagev HTMLListv HTMLListItemv HTMLTablev HTMLTableCaptionv HTMLTableCellv HTMLTableHeaderv HTMLTableRowv HTMLTagElementv OrderedListv UnorderedList

Ejemplos coacutemo se utiliza HTMLDocument

Los ejemplos siguientes muestran varios modos de emplear la clase HTMLDocument para generar datosfuente HTML y de objetos de formato (FO) XSL (Extensible Stylesheet Language)

Ejemplo coacutemo se utiliza HTMLDocument para generar fuente HTML y FO XSL

El ejemplo siguiente muestra coacutemo generar datos fuente HTML y FO XSL a la vez

ldquoEjemplo coacutemo se utiliza HTMLDocument para generar fuente HTML y FO XSLrdquo en la paacutegina 208

Ejemplo convertir datos fuente FO XSL en un PDF

Despueacutes de crear datos fuente FO XSL tendraacute que convertir esos datos FO XSL en un formato que losusuarios puedan visualizar e imprimir El ejemplo siguiente muestra coacutemo convertir un archivo quecontiene datos fuente FO XSL en un documento PDF mediante las clases XSLReportWriter y Context

ldquoEjemplo convertir datos fuente FO XSL en un PDFrdquo

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo convertir datos fuente FO XSL en un PDF

Este programa de ejemplo no debe utilizarse ya que la clase XSLReportProcessor ha dejado de estarsoportada

IBM Toolbox para Java 205

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo convertir fuente FO XSL en un PDF Este programa utiliza las clases ReportWriter de IBM Toolbox para Java para convertir datos fuente FO XSL (creados mediante HTMLDocument) en un PDF Es necesario que los siguientes archivos jar esteacuten en la classpath composerjar outputwritersjar reportwriterjar x4j400jar xslparserjar Estos archivos JAR forman parte de IBM ToolBox para Java y residen en el directorio QIBMProdDataHTTPPublicjt400lib del servidor Tambieacuten necesitaraacute la definicioacuten de clase para orgapachexercesdomNodeContainer que reside en el directorio QIBMProdDataOS400xmllib Sintaxis del mandato ProcessXslFo nombreArchivoFO nombreArchivoPDF

import javaioFileInputStreamimport javaioFileOutputStream

import javaawtprintPaperimport javaawtprintPageFormat

import orgw3cdomDocument

import comibmxslcomposerframeworkContext

import comibmas400utilreportwriterpdfwriterPDFContextimport comibmas400utilreportwriterprocessorXSLReportProcessor

public class ProcessXslFo

public static void main(String args[])

if (argslength = 2)

Systemoutprintln(Utilizacioacuten java ProcessXslFo ltnombre de archivo fogt ltnombre de archivo pdfgt)Systemexit (0)

try

String inName = args[0]String outName = args[1]

Entrada Archivo que contiene FO XML FileInputStream fin = null

Salida En este ejemplo seraacute un PDF FileOutputStream fout = null

try

206 IBM Toolbox para Java IBM Toolbox para Java

fin = new FileInputStream(inName)fout = new FileOutputStream(outName)

catch (Exception e)

eprintStackTrace()Systemexit (0)

Configure el formato de paacuteginaPaper paper = new Paper()papersetSize(612 792)papersetImageableArea(0 0 756 936)

PageFormat pageFormat = new PageFormat()pageFormatsetPaper(paper)

Cree un contexto de PDF Establezca el nombre de archivo de salidaPDFContext pdfContext = new PDFContext(fout pageFormat)

Cree la instancia de XSLReportProcessorXSLReportProcessor report = new XSLReportProcessor(pdfContext)

Abra el fuente FO XMLtry

reportsetXSLFOSource(fin)catch (Exception e)

eprintStackTrace()Systemexit (0)

Procese el informetry

reportprocessReport()catch (Exception e)

eprintStackTrace()Systemexit (0)

catch (Exception e)

eprintStackTrace()Systemexit (0)

Salida Systemexit (0)

IBM Toolbox para Java 207

Ejemplo coacutemo se utiliza HTMLDocument para generar fuente HTML y FO XSL

Este ejemplo utiliza la clase HTMLDocument para generar datos fuente HTML y FO XSL

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo coacutemo se utiliza la clase HTMLDocument de la Caja de Herramientas para generar datos fuente HTML y FO XSL Este programa utiliza la clase HTMLDocument para generar dos archivos uno con el fuente HTML y otro con el fuente FO XSL Sintaxis del mandato HTMLDocumentExample

import comibmas400utilhtmlimport javaimport javaioimport javalangimport javabeansPropertyVetoException

public class HTMLDocumentExample

public static void main (String[] args)

Cree el objeto HTMLDocument con las propiedades del documento necesariasHTMLDocument doc = new HTMLDocument()

Establezca las propiedades de la paacutegina y los maacutergenes Los nuacutemeros se dan en pulgadasdocsetPageWidth(85)docsetPageHeight(11)docsetMarginTop(1)docsetMarginBottom(1)docsetMarginLeft(1)docsetMarginRight(1)

Cree una cabecera para la paacuteginaHTMLHead head = new HTMLHead() Establezca el tiacutetulo de la cabeceraheadsetTitle(Esta es la cabecera de la paacutegina)

Cree varias cabecerasHTMLHeading h1 = new HTMLHeading(1 Cabecera 1)HTMLHeading h2 = new HTMLHeading(2 Cabecera 2)HTMLHeading h3 = new HTMLHeading(3 Cabecera 3)HTMLHeading h4 = new HTMLHeading(4 Cabecera 4)HTMLHeading h5 = new HTMLHeading(5 Cabecera 5)HTMLHeading h6 = new HTMLHeading(6 Cabecera 6)

Cree un texto que se imprimiraacute de derecha a izquierda Cree un objeto BidiOrdering y establezca la direccioacutenBidiOrdering bdo = new BidiOrdering()bdosetDirection(HTMLConstantsRTL)

Cree un textoHTMLText text = new HTMLText(Este es un texto en aacuterabe) Antildeada el texto al objeto BidiOrderingbdoaddItem(text)

Cree un objeto UnorderedList

208 IBM Toolbox para Java IBM Toolbox para Java

UnorderedList uList = new UnorderedList(HTMLConstantsSQUARE) Cree y establezca los datos de los objetos UnorderedListItemUnorderedListItem listItem1 = new UnorderedListItem()UnorderedListItem listItem2 = new UnorderedListItem()listItem1setItemData(new HTMLText(Primer elemento))listItem2setItemData(new HTMLText(Segundo elemento)) Antildeada los elementos de lista al objeto UnorderedListuListaddListItem(listItem1)uListaddListItem(listItem2)

Cree un objeto OrderedListOrderedList oList = new OrderedList(HTMLConstantsSMALL_ROMAN) Cree los objetos OrderedListItemOrderedListItem olistItem1 = new OrderedListItem()OrderedListItem olistItem2 = new OrderedListItem()OrderedListItem olistItem3 = new OrderedListItem() Establezca los datos de los objetos OrderedListItemolistItem1setItemData(new HTMLText(Primer elemento))olistItem2setItemData(new HTMLText(Segundo elemento))olistItem3setItemData(new HTMLText(Tercer elemento)) Antildeada los elementos de lista al objeto OrderedListoListaddListItem(olistItem1)oListaddListItem(olistItem2) Antildeada (anide) la lista sin ordenar a OrderedListItem2oListaddList(uList) Antildeada otro objeto OrderedListItem al objeto OrderedList despueacutes del objeto UnorderedList anidadooListaddListItem(olistItem3)

Cree un objeto HTMLTable predeterminadoHTMLTable table = new HTMLTable()try

Establezca los atributos de la tablatablesetAlignment(HTMLTableLEFT)tablesetBorderWidth(1)

Cree un objeto HTMLTableCaption predeterminado y establezca el texto del pie de tablaHTMLTableCaption caption = new HTMLTableCaption()

captionsetElement(Saldos de cuenta de cliente - 1 de enero de 2000)

Establezca el pie de tablatablesetCaption(caption)

Cree las cabeceras de la tabla y antildeaacutedalas a la mismaHTMLTableHeader account_header = new HTMLTableHeader(new HTMLText(CUENTA))HTMLTableHeader name_header = new HTMLTableHeader(new HTMLText(NOMBRE))HTMLTableHeader balance_header = new HTMLTableHeader(new HTMLText(SALDO))

tableaddColumnHeader(account_header)tableaddColumnHeader(name_header)tableaddColumnHeader(balance_header)

Antildeada filas a la tabla Cada registro de cliente corresponde a una fila de la tablaint numCols = 3for (int rowIndex=0 rowIndexlt 5 rowIndex++)

HTMLTableRow row = new HTMLTableRow()rowsetHorizontalAlignment(HTMLTableRowCENTER)

HTMLText account = new HTMLText(000 + rowIndex)HTMLText name = new HTMLText(Customer + rowIndex)HTMLText balance = new HTMLText( + (rowIndex + 1)200)

rowaddColumn(new HTMLTableCell(account))rowaddColumn(new HTMLTableCell(name))rowaddColumn(new HTMLTableCell(balance))

IBM Toolbox para Java 209

Antildeada la fila a la tablatableaddRow(row)

catch(Exception e)

Systemoutprintln(Problema durante la creacioacuten de la tabla)Systemexit (0)

Antildeada los elementos al objeto HTMLDocumentdocaddElement(head)docaddElement(h1)docaddElement(h2)docaddElement(h3)docaddElement(h4)docaddElement(h5)docaddElement(h6)docaddElement(oList)docaddElement(table)docaddElement(bdo)

Imprima los coacutedigos FO en un archivotry

FileOutputStream fout = new FileOutputStream(FOFILEfo)PrintStream pout = new PrintStream(fout)poutprintln(docgetFOTag())

catch (Exception e)

Systemoutprintln(No se han podido escribir los coacutedigos FO en FOFILEfo)

Imprima los coacutedigos HTML en un archivotry

FileOutputStream htmlout = new FileOutputStream(HTMLFILEhtml)PrintStream phtmlout = new PrintStream(htmlout)phtmloutprintln(docgetTag())

catch (Exception e)

Systemoutprintln(No se han podido escribir los coacutedigos HTML en HTMLFILEhtml)

Clases de formularios HTMLLa clase HTMLForm de IBM Toolbox para Java representa un formulario HTML Utilice estas clases paraque los formularios sean maacutes faacuteciles de crear que con los scripts CGI

Esta clase le permitev Antildeadir un elemento (por ejemplo un botoacuten un hiperenlace o una tabla HTML) a un formulariov Eliminar un elemento de un formulariov Establecer otros atributos de formulario por ejemplo queacute meacutetodo se ha de usar para enviar el

contenido del formulario al servidor la lista de paraacutemetros ocultos o la direccioacuten URL de la accioacuten

El constructor del objeto HTMLForm toma una direccioacuten de URL A esta direccioacuten la llamamos URL deaccioacuten Es la ubicacioacuten de la aplicacioacuten en el servidor que va a procesar la entrada del formulario El URL

210 IBM Toolbox para Java IBM Toolbox para Java

de accioacuten se puede especificar en el constructor tambieacuten se puede establecer la direccioacuten mediante elmeacutetodo setURL() Los atributos de formulario se establecen con los diversos meacutetodos set y se recuperancon los diversos meacutetodos get

Los elementos de coacutedigo HTML se pueden antildeadir a un objeto HTMLForm utilizando el meacutetodoaddElement() y se pueden eliminar utilizando el meacutetodo removeElement()

Obviamente puede antildeadir otros elementos de coacutedigo a un formulario tales como HTMLTextHTMLHyperlink y HTMLTable

Javadoc HTMLFormldquoClase HTMLTextrdquo en la paacutegina 228La clase HTMLText de IBM Toolbox para Java permite acceder a las propiedades del texto de lapaacutegina HTML Mediante la clase HTMLText puede obtener establecer y comprobar el estado denumerosos atributos del textoldquoClase HTMLHyperlinkrdquo en la paacutegina 220La clase HTMLHyperlink de IBM Toolbox para Java representa un coacutedigo de hiperenlace HTML Conla clase HTMLHyperlink puede crear un enlace dentro de la paacutegina HTMLldquoClases de tablas HTMLrdquo en la paacutegina 226La clase HTMLTable de IBM Toolbox para Java permite preparar de manera sencilla las tablas que sepueden utilizar en las paacuteginas HTMLldquoEjemplo coacutemo se utilizan las clases de formularios HTMLrdquo en la paacutegina 482El ejemplo siguiente de IBM Toolbox para Java muestra coacutemo se utilizan las clases de formularioHTMLldquoSalida de ejemplo de las clases HTMLrdquo en la paacutegina 492A continuacioacuten figuran algunas posibles salidas de ejemplo que se pueden obtener al ejecutar elejemplo de las clases HTML

Clases FormInput

La clase FormInput de IBM Toolbox para Java representa un elemento de entrada de un formularioHTML

La clase FormInput permite llevar a cabo estas accionesv Obtener y establecer el nombre de un elemento de entradav Obtener y establecer el tamantildeo de un elemento de entradav Obtener y establecer el valor inicial de un elemento de entrada

La clase FormInput se ampliacutea mediante las clases de la lista siguiente Estas clases permiten crear tiposespeciacuteficos de elementos de entrada de formulario y permiten obtener y establecer diversos atributos orecuperar el coacutedigo HTML del elemento de entradav ButtonFormInput representa un elemento que es un botoacuten de un formulario HTMLv FileFormInput representa un tipo de entrada de archivo de un formulario HTMLv HiddenFormInput representa un tipo de entrada oculta de un formulario HTMLv ImageFormInput representa un tipo de entrada de imagen de un formulario HTMLv ResetFormInput representa una entrada de botoacuten de restablecer de un formulario HTMLv SubmitFormInput representa una entrada de botoacuten de someter de un formulario HTMLv TextFormInput representa una entrada de texto de una sola liacutenea de un formulario HTML en la que se

define el nuacutemero maacuteximo de caracteres de una liacutenea Para un tipo de entrada de contrasentildea se utilizala clase PasswordFormInput que ampliacutea TextFormInput y representa un tipo de entrada de contrasentildeade un formulario HTML

IBM Toolbox para Java 211

v ToggleFormInput representa un tipo de entrada de conmutador de un formulario HTML El usuariopuede establecer u obtener la etiqueta de texto y especificar si el conmutador se debe marcar oseleccionar El tipo de entrada de conmutador puede ser uno de estos dosndash RadioFormInput representa un tipo de entrada de botoacuten de seleccioacuten de un formulario HTML Los

botones de seleccioacuten se pueden colocar en grupos con la clase RadioFormInputGroup esta clase creaun grupo de botones de seleccioacuten donde el usuario solo selecciona una de las opciones presentadas

ndash CheckboxFormInput representa un tipo de entrada de recuadro de seleccioacuten de un formularioHTML en que el usuario puede seleccionar maacutes de una de las opciones presentadas y en que elrecuadro de seleccioacuten se inicializa como marcado o no marcado

Javadoc FormInputJavadoc ToggleFormInputJavadoc RadioFormInputGroup

Clase ButtonFormInput

La clase ButtonFormInput representa un elemento de botoacuten de un formulario HTML

El ejemplo siguiente muestra coacutemo se crea un objeto ButtonFormInputButtonFormInput button = new ButtonFormInput(button1 Pulse aquiacute test())Systemoutprintln(buttongetTag())

Este ejemplo genera el siguiente coacutedigoltinput type=button name=button1 value=Pulse aquiacute onclick=test() gt

Informacioacuten relacionadaJavadoc ButtonFormInput

Clase FileFormInput

La clase FileFormInput de IBM Toolbox para Java representa un tipo de entrada de archivo de unformulario HTML

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto FileFormInput nuevoFileFormInput file = new FileFormInput(myFile)Systemoutprintln(filegetTag())

El coacutedigo anterior crea la siguiente salidaltinput type=file name=myFile gt

Informacioacuten relacionadaJavadoc FileFormInput

Clase HiddenFormInput

La clase HiddenFormInput de IBM Toolbox para Java representa un tipo de entrada oculto de unformulario HTML

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto HiddenFormInputHiddenFormInput hidden = new HiddenFormInput(account 123456)Systemoutprintln(hiddengetTag())

El coacutedigo anterior genera el coacutedigo siguienteltinput type=hidden name=account value=123456 gt

212 IBM Toolbox para Java IBM Toolbox para Java

En una paacutegina HTML el tipo de entrada oculta (HiddenInputType) no se visualiza Enviacutea la informacioacuten(en este caso el nuacutemero de cuenta) de regreso al servidorInformacioacuten relacionadaJavadoc HiddenFormInput

Clase ImageFormInput

La clase ImageFormInput representa un tipo de entrada de formulario HTML que es una imagen

Mediante los meacutetodos proporcionados se pueden recuperar y actualizar numerosos atributos de la claseImageFormInput por ejemplo puedev Obtener o establecer el coacutedigo fuentev Obtener o establecer la alineacioacutenv Obtener o establecer la alturav Obtener o establecer la anchura

Ejemplo crear un objeto ImageFormInput

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto ImageFormInputImageFormInput image = new ImageFormInput(myPicture myPicturegif)

imagesetAlignment(HTMLConstantsTOP)imagesetHeight(81)imagesetWidth(100)

El ejemplo de coacutedigo anterior genera el coacutedigo HTML siguienteltinput type=image name=MyPicture src=myPicturegif align=top height=81 width=100 gt

Informacioacuten relacionadaJavadoc ImageFormInput

Clase ResetFormInput

La clase ResetFormInput representa un tipo de entrada de un formulario HTML que es un botoacuten derestablecer

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto ResetFormInputResetFormInput reset = new ResetFormInput()resetsetValue(Restablecer)Systemoutprintln(resetgetTag())

El ejemplo de coacutedigo anterior genera el coacutedigo HTML siguienteltinput type=reset value=Reset gt

Informacioacuten relacionadaJavadoc ResetFormInput

Clase SubmitFormInput

La clase SubmitFormInput representa un tipo de entrada de un formulario HTML que es un botoacuten desometer

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto SubmitFormInputSubmitFormInput submit = new SubmitFormInput()submitsetValue(Someter)Systemoutprintln(submitgetTag())

IBM Toolbox para Java 213

El ejemplo de coacutedigo anterior genera la siguiente salidaltinput type=submit value=Send gt

Informacioacuten relacionadaJavadoc SubmitFormInput

Clase TextFormInput

La clase TextFormInput representa en un formulario HTML un tipo de entrada que es una sola liacutenea detexto La clase TextFormInput proporciona meacutetodos que permiten obtener y establecer el nuacutemero maacuteximode caracteres que un usuario puede entrar en el campo de texto

El ejemplo siguiente muestra coacutemo se crea un objeto TextFormInput nuevoTextFormInput text = new TextFormInput(userID)textsetSize(40)Systemoutprintln(textgetTag())

El ejemplo de coacutedigo anterior genera el siguiente coacutedigo HTMLltinput type=text name=userID size=40 gt

Informacioacuten relacionadaJavadoc TextFormInput

Clase PasswordFormInput

La clase PasswordFormInput representa un tipo de campo de entrada de contrasentildea de un formularioHTML

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto PasswordFormInput nuevoPasswordFormInput pwd = new PasswordFormInput(password)pwdsetSize(12)Systemoutprintln(pwdgetTag())

El ejemplo de coacutedigo anterior genera el siguiente coacutedigo HTMLltinput type=password name=password size=12 gt

Informacioacuten relacionadaJavadoc PasswordFormInput

Clase RadioFormInput

La clase RadioFormInput representa un tipo de entrada de formulario HTML que es un botoacuten deseleccioacuten Este en el momento de construirse se puede inicializar como seleccionado

Una serie de botones de seleccioacuten que tengan un mismo nombre de control forman un grupo de botonesde seleccioacuten La clase RadioFormInputGroup crea grupos de botones de seleccioacuten En un momento dadouacutenicamente puede seleccionarse un solo botoacuten del grupo Ademaacutes en el momento de construir el grupose puede inicializar como seleccionado un botoacuten concreto

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto RadioFormInput nuevoRadioFormInput radio = new RadioFormInput(age twentysomething Edad entre 20 y 29 true)Systemoutprintln(radiogetTag())

El ejemplo de coacutedigo anterior genera el coacutedigo HTML siguienteltinput type=radio name=age value=twentysomething checked=checked gt

Javadoc RadioFormInputJavadoc RadioFormInputGroup

214 IBM Toolbox para Java IBM Toolbox para Java

Clase CheckboxFormInput

La clase CheckboxFormInput de IBM Toolbox para Java representa un tipo de entrada de formularioHTML que corresponde a un recuadro de seleccioacuten El usuario puede seleccionar maacutes de una de laselecciones presentadas como recuadros de seleccioacuten dentro de un formulario

El ejemplo siguiente muestra coacutemo se crea un objeto CheckboxFormInput nuevoCheckboxFormInput checkbox = new CheckboxFormInput(uscitizen yes textLabel true)Systemoutprintln(checkboxgetTag())

El coacutedigo anterior genera la siguiente salidaltinput type=checkbox name=uscitizen value=yes checked=checked gt textLabel

Clase LayoutFormPanel

La clase LayoutFormPanel de IBM Toolbox para Java representa un disentildeo de los elementos de unformulario HTML Puede utilizar los meacutetodos proporcionados por LayoutFormPanel para antildeadir yeliminar elementos de un panel u obtener el nuacutemero de elementos del disentildeo

Puede optar por utilizar uno de estos dos disentildeosv GridLayoutFormPanel representa un disentildeo cuadriculado de los elementos de un formulario HTMLv LineLayoutFormPanel representa un disentildeo lineal de los elementos de un formulario HTML

Javadoc LayoutFormPanelldquoGridLayoutFormPanelrdquoLa clase GridLayoutFormPanel representa un disentildeo cuadriculado de los elementos de formularioEste disentildeo se utiliza en un formulario HTML en el que se especifica el nuacutemero de columnas de lacuadriacuteculaldquoClase LineLayoutFormPanelrdquo en la paacutegina 216La clase LineLayoutFormPanel representa un disentildeo lineal de los elementos de un formulario HTMLLos elementos del formulario se disponen en una sola fila dentro de un panel

GridLayoutFormPanel

La clase GridLayoutFormPanel representa un disentildeo cuadriculado de los elementos de formulario Estedisentildeo se utiliza en un formulario HTML en el que se especifica el nuacutemero de columnas de la cuadriacutecula

En el ejemplo que hay a continuacioacuten se crea un objeto GridLayoutFormPanel con dos columnas Cree un elemento de entrada de formulario de texto para el sistemaLabelFormElement sysPrompt = new LabelFormElement(Sistema)TextFormInput system = new TextFormInput(System)

Cree un elemento de entrada de formulario de texto para el ID de usuarioLabelFormElement userPrompt = new LabelFormElement(Usuario)TextFormInput user = new TextFormInput(User)

Cree un elemento de entrada de formulario de contrasentildea para la contrasentildeaLabelFormElement passwordPrompt = new LabelFormElement(Contrasentildea)PasswordFormInput password = new PasswordFormInput(Password)

Cree el objeto GridLayoutFormPanel con dos columnas y antildeada los elementos de formularioGridLayoutFormPanel panel = new GridLayoutFormPanel(2)paneladdElement(sysPrompt)paneladdElement(system)paneladdElement(userPrompt)paneladdElement(user)paneladdElement(passwordPrompt)paneladdElement(password)

IBM Toolbox para Java 215

Cree el botoacuten de someter para el formularioSubmitFormInput logonButton = new SubmitFormInput(logon Iniciar sesioacuten)

Cree el objeto HTMLForm y antildeaacutedale el panelHTMLForm form = new HTMLForm(servletURI)formaddElement(panel)formaddElement(logonButton)

Este ejemplo genera el siguiente coacutedigo HTMLltform action=servletURI method=getgtlttable border=0gtlttrgtlttdgtSystemlttdgtlttdgtltinput type=text name=System gtlttdgtlttrgtlttrgtlttdgtUserlttdgtlttdgtltinput type=text name=User gtlttdgtlttrgtlttrgtlttdgtPasswordlttdgtlttdgtltinput type=password name=Password gtlttdgtlttrgtlttablegtltinput type=submit name=logon value=Logon gtltformgt

Informacioacuten relacionadaJavadoc GridLayoutFormPanel

Clase LineLayoutFormPanel

La clase LineLayoutFormPanel representa un disentildeo lineal de los elementos de un formulario HTML Loselementos del formulario se disponen en una sola fila dentro de un panel

Ejemplo coacutemo se utiliza LineLayoutFormPanel

Este ejemplo crea un objeto LineLayoutFormPanel y antildeade dos elementos de formularioCheckboxFormInput privacyCheckbox =

new CheckboxFormInput(confidential yes Confidencial true)CheckboxFormInput mailCheckbox =

new CheckboxFormInput(mailingList yes Uacutenase a nuestra lista de correo false)LineLayoutFormPanel panel = new LineLayoutFormPanel()paneladdElement(privacyCheckbox)paneladdElement(mailCheckbox)String tag = panelgetTag()

El ejemplo de coacutedigo anterior genera el siguiente coacutedigo HTMLltinput type=checkbox name=confidential value=yes checked=checked gt Confidencialltinput type=checkbox name=mailingList value=yes gt Uacutenase a nuestra lista de correo ltbrgt

Informacioacuten relacionadaJavadoc LineLayoutFormPanel

Clase TextAreaFormElement

La clase TextAreaFormElement representa un elemento de formulario HTML que es un aacuterea de textoPara especificar el tamantildeo del aacuterea de texto debe establecer el nuacutemero de filas y columnas Paraaveriguar queacute tamantildeo se ha establecido para un aacuterea de texto puede utilizar los meacutetodos getRows() ygetColumns()

216 IBM Toolbox para Java IBM Toolbox para Java

Para establecer el texto inicial dentro del aacuterea de texto se utiliza el meacutetodo setText() Utilice el meacutetodogetText() para ver el texto inicial que se ha establecido

El ejemplo siguiente muestra coacutemo se crea un objeto TextAreaFormElementTextAreaFormElement textArea = new TextAreaFormElement(foo 3 40)textAreasetText(Aquiacute se especifica el valor predeterminado de TEXTAREA)Systemoutprintln(textAreagetTag())

El ejemplo de coacutedigo anterior genera el siguiente coacutedigo HTMLltformgtlttextarea name=foo rows=3 cols=40gtAquiacute se especifica el valor predeterminado de TEXTAREAlttextareagtltformgt

Javadoc TextAreaFormElement

Clase LabelFormElement

La clase LabelFormElement representa una etiqueta para un elemento de formulario HTML

La clase LabelFormElement permite etiquetar elementos de un formulario HTML como por ejemplo unaacuterea de texto o una entrada de formulario de contrasentildea La etiqueta es una liacutenea de texto que seestablece mediante el meacutetodo setLabel() Este texto no responde a la entrada de usuario y sirve para queal usuario le sea maacutes faacutecil comprender el formulario

Ejemplo coacutemo se utiliza LabelFormElement

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto LabelFormElementLabelFormElement label = new LabelFormElement(Saldo de cuenta)Systemoutprintln(labelgetTag())

Este ejemplo genera la siguiente salidaSaldo de cuenta

Informacioacuten relacionadaJavadoc LabelFormElement

Clase SelectFormElement

La clase SelectFormElement representa un tipo de entrada de seleccioacuten de un formulario HTML Puedeantildeadir y eliminar diversas opciones dentro del elemento de seleccioacuten

La clase SelectFormElement dispone de meacutetodos que le permiten ver y cambiar atributos del elemento deseleccioacutenv Utilice setMultiple() para establecer si el usuario puede o no seleccionar maacutes de una opcioacutenv Utilice getOptionCount() para averiguar cuaacutentos elementos hay en el disentildeo de la opcioacutenv Utilice setSize() para establecer el nuacutemero de opciones visibles dentro del elemento de seleccioacuten y el

meacutetodo getSize() para determinar el nuacutemero de opciones visibles

En el ejemplo siguiente se crea un objeto SelectFormElement que tiene tres opciones El objetoSelectFormElement que se llama list estaacute resaltado Las dos primeras opciones que se antildeaden especificanel texto de la opcioacuten que es el nombre y los atributos de seleccioacuten La tercera opcioacuten que se antildeade sedefine mediante un objeto SelectOption

IBM Toolbox para Java 217

SelectFormElement list = new SelectFormElement(list1)SelectOption option1 = listaddOption(Opcioacuten1 opt1)SelectOption option2 = listaddOption(Opcioacuten2 opt2 false)SelectOption option3 = new SelectOption(Opcioacuten3 opt3 true)listaddOption(option3)Systemoutprintln(listgetTag())

El ejemplo de coacutedigo anterior genera el coacutedigo HTML siguienteltselect name=list1gtltoption value=opt1gtOpcioacuten1ltoptiongtltoption value=opt2gtOpcioacuten2ltoptiongtltoption value=opt3 selected=selectedgtOpcioacuten3ltoptiongtltselectgt

Referencia relacionadaldquoClase SelectOptionrdquoLa clase SelectOption representa una opcioacuten en un objeto SelectFormElement de un formulario HTML Elelemento de formulario option se utiliza en un formulario de seleccioacutenInformacioacuten relacionadaJavadoc SelectFormElement

Clase SelectOption

La clase SelectOption representa una opcioacuten en un objeto SelectFormElement de un formulario HTML Elelemento de formulario option se utiliza en un formulario de seleccioacuten

Se proporcionan meacutetodos que permiten recuperar y establecer atributos dentro de una opcioacuten deseleccioacuten (SelectOption) Por ejemplo puede establecer si de forma predeterminada la opcioacuten debe estarseleccionada Tambieacuten puede establecer el valor de entrada que la opcioacuten utilizaraacute cuando se someta elformulario

El siguiente ejemplo crea tres objetos SelectOption dentro de un formulario de seleccioacuten Todos los objetosSelectOption que figuran maacutes abajo estaacuten resaltados Se llaman option1 option2 y option3 El objeto option3estaacute inicialmente seleccionado

SelectFormElement list = new SelectFormElement(list1)SelectOption option1 = listaddOption(Opcioacuten1 opt1)SelectOption option2 = listaddOption(Opcioacuten2 opt2 false)SelectOption option3 = new SelectOption(Opcioacuten3 opt3 true)listaddOption(option3)Systemoutprintln(listgetTag())

El ejemplo de coacutedigo anterior genera el coacutedigo HTML siguienteltselect name=list1gtltoption value=opt1gtOpcioacuten1ltoptiongtltoption value=opt2gtOpcioacuten2ltoptiongtltoption value=opt3 selected=selectedgtOpcioacuten3ltoptiongtltselectgt

Referencia relacionadaldquoClase SelectFormElementrdquo en la paacutegina 217La clase SelectFormElement representa un tipo de entrada de seleccioacuten de un formulario HTML Puedeantildeadir y eliminar diversas opciones dentro del elemento de seleccioacutenInformacioacuten relacionadaJavadoc SelectOption

Clase RadioFormInputGroup

La clase RadioFormInputGroup representa un grupo de objetos RadioFormInput Los usuarios solopueden seleccionar uno de los objetos RadioFormInput de un RadioFormInputGroup

218 IBM Toolbox para Java IBM Toolbox para Java

Los meacutetodos de la clase RadioFormInputGroup permiten trabajar con los diversos atributos de un grupode botones de seleccioacuten Con estos meacutetodos puede hacer las siguientes tareasv Antildeadir un botoacuten de seleccioacutenv Eliminar un botoacuten de seleccioacutenv Obtener o establecer el nombre del grupo de botones de seleccioacuten

En el ejemplo que hay a continuacioacuten se crea un grupo de botones de seleccioacuten Cree algunos botones de seleccioacutenRadioFormInput radio0 = new RadioFormInput(age kid 0-12 true)RadioFormInput radio1 = new RadioFormInput(age teen 13-19 false)RadioFormInput radio2 = new RadioFormInput(age twentysomething 20-29 false)RadioFormInput radio3 = new RadioFormInput(age thirtysomething 30-39 false) Cree un grupo de botones de seleccioacuten y antildeada los botones de seleccioacutenRadioFormInputGroup ageGroup = new RadioFormInputGroup(age)ageGroupadd(radio0)ageGroupadd(radio1)ageGroupadd(radio2)ageGroupadd(radio3)Systemoutprintln(ageGroupgetTag())

El ejemplo de coacutedigo anterior genera el siguiente coacutedigo HTMLltinput type=radio name=age value=kid checked=checked gt 0-12ltinput type=radio name=age value=teen gt 13-19ltinput type=radio name=age value=twentysomething gt 20-29ltinput type=radio name=age value=thirtysomething gt 30-39

Informacioacuten relacionadaJavadoc RadioFormInputGroupJavadoc RadioFormInput

Clase HTMLHeadLa clase HTMLHead de IBM Toolbox para Java representa un coacutedigo head HTML La seccioacuten head deuna paacutegina HTML contiene un coacutedigo head inicial y otro final que normalmente incluyen otros coacutedigosPor lo general el coacutedigo head contiene un coacutedigo de tiacutetulo y coacutedigos meta

Los constructores de HTMLHead permiten crear un coacutedigo head que estaacute vaciacuteo que contiene un coacutedigode tiacutetulo o que contiene un coacutedigo de tiacutetulo y un coacutedigo meta Faacutecilmente se pueden antildeadir coacutedigos detiacutetulo y meta al objeto HTMLHead vaciacuteo

Los meacutetodos de la clase HTMLHead permiten establecer y obtener los coacutedigos de tiacutetulo y meta de lapaacutegina Defina el contenido de los coacutedigos meta mediante la clase HTMLMeta

El coacutedigo siguiente muestra un modo de crear un coacutedigo HTMLHead Cree un objeto HTMLHead vaciacuteoHTMLHead head = new HTMLHead(Paacutegina principal)

Antildeada el tiacutetuloheadsetTitle(Paacutegina principal)

Defina la informacioacuten meta y antildeaacutedala al objeto HTMLHeadHTMLMeta meta = new HTMLMeta(Content-Type texthtml charset=iso-8859-1)headaddMetaInformation(meta)

Esta es la salida del coacutedigo HTMLHead de ejemploltheadgtltmeta http-equiv=Content-Type content=texthtml charset=iso-8859-1gtlttitlegtMi paacutegina principallttitlegtltheadgt

Referencia relacionada

IBM Toolbox para Java 219

ldquoClase HTMLMetardquo en la paacutegina 224La clase HTMLMeta de IBM Toolbox para Java representa informacioacuten de metadatos que se utiliza dentrode un coacutedigo HTMLHead Los atributos de los coacutedigos META se emplean al identificar indexar y definirinformacioacuten en el documento HTMLInformacioacuten relacionadaJavadoc HTMLHead

Clase HTMLHeadingLa clase HTMLHeading de IBM Toolbox para Java representa una cabecera HTML Cada una de lascabeceras puede tener su propia alineacioacuten y su propio nivel de 1 (font maacutes grande mayor importancia)a 6

Los meacutetodos de la clase HTMLHeading sonv Obtener y establecer el texto de la cabecerav Obtener y establecer el nivel de la cabecerav Obtener y establecer la alineacioacuten de la cabecerav Obtener y establecer la direccioacuten de interpretacioacuten del textov Obtener y establecer el idioma del elemento de entradav Obtener una representacioacuten de tipo String del objeto HTMLHeading

Ejemplo crear objetos HTMLHeading

El ejemplo que sigue crea tres objetos HTMLHeading Cree y visualice tres objetos HTMLHeadingHTMLHeading h1 = new HTMLHeading(1 Cabecera HTMLConstantsLEFT)HTMLHeading h2 = new HTMLHeading(2 Subcabecera HTMLConstantsCENTER)HTMLHeading h3 = new HTMLHeading(3 Elemento HTMLConstantsRIGHT)Systemoutprint(h1 + rn + h2 + rn + h3)

El ejemplo anterior genera los coacutedigos siguienteslth1 align=leftgtCabeceralth1gtlth2 align=centergtSubcabeceralth2gtlth3 align=rightgtElementolth3gt

Informacioacuten relacionadaJavadoc HTMLHeading

Clase HTMLHyperlinkLa clase HTMLHyperlink de IBM Toolbox para Java representa un coacutedigo de hiperenlace HTML Con laclase HTMLHyperlink puede crear un enlace dentro de la paacutegina HTML

Esta clase le permite obtener y establecer numerosos atributos de hiperenlaces como los que se indican acontinuacioacutenv Obtener y establecer el URI (identificador de recursos uniforme) del enlacev Obtener y establecer el tiacutetulo del enlacev Obtener 0 establecer el marco destino del enlace

La clase HTMLHyperlink puede imprimir el hiperenlace completo con las propiedades definidas parapoder utilizar la salida en la paacutegina HTML

A continuacioacuten figura un ejemplo de HTMLHyperlink Cree un hiperenlace HTML con la paacutegina de presentacioacuten de IBM Toolbox para JavaHTMLHyperlink toolbox =

new HTMLHyperlink(httpwwwibmcomas400toolboxPaacutegina de presentacioacuten de IBM Toolbox para Java)

220 IBM Toolbox para Java IBM Toolbox para Java

toolboxsetTarget(TARGET_BLANK)

Visualice el coacutedigo de enlace de la Caja de Herramientas (Toolbox)Systemoutprintln(toolboxtoString())

El coacutedigo anterior genera el coacutedigo HTML siguientelta href=httpwwwibmcomas400toolboxgtPaacutegina de presentacioacuten de IBM Toolbox para Javaltagt

Informacioacuten relacionadaJavadoc HTMLHyperlink

Clase HTMLImageLa clase HTMLImage permite crear coacutedigos de imagen para la paacutegina HTML

La clase HTMLImage proporciona meacutetodos que permiten obtener y establecer los atributos de imagentales comov Obtener o establecer la altura de la imagenv Obtener o establecer la anchura de la imagenv Obtener o establecer el nombre de la imagenv Obtener o establecer el texto alternativo de la imagenv Obtener o establecer el espacio horizontal alrededor de la imagenv Obtener o establecer el espacio vertical alrededor de la imagenv Obtener o establecer la referencia absoluta o relativa de la imagenv Recuperar una representacioacuten de tipo serie del objeto HTMLImage

El ejemplo siguiente muestra un modo de crear un objeto HTMLImage Cree un objeto HTMLImageHTMLImage image = new HTMLImage(httpmyWebSitepicturegif

Texto alternativo para este graacutefico)imagesetHeight(94)imagesetWidth(105)Systemoutprintln(image)

La sentencia de imprimir genera el siguiente coacutedigo en una sola liacutenea La acomodacioacuten de texto solo seproduce para la visualizacioacuten

ltimg src=httpmyWebSitepicturegifalt=Texto alternativo para este graacuteficoheight=94 width=105 gt

Informacioacuten relacionadaJavadoc HTMLImage

Clases HTMLListLas clases HTMLList de IBM Toolbox para Java permiten crear listas dentro de las paacuteginas HTML congran facilidad Estas clases proporcionan meacutetodos para obtener y establecer los diversos atributos de laslistas y los elementos que contienen

En concreto la clase padre HTMLList proporciona un meacutetodo para generar una lista compacta quevisualiza los elementos en vertical en el menor espacio posiblev Los meacutetodos de HTMLList permiten

ndash Compactar la listandash Antildeadir y eliminar elementos de la listandash Antildeadir y eliminar listas de la lista (posibilitando el anidamiento de listas)

v Los meacutetodos de HTMLListItem permitenndash Obtener y establecer el contenido del elemento

IBM Toolbox para Java 221

ndash Obtener y establecer la direccioacuten de interpretacioacuten del textondash Obtener y establecer el idioma del elemento de entrada

Las subclases de HTMLList y HTMLListItem permiten crear listas HTML propiasv OrderedList y OrderedListItemv UnorderedList y UnorderedListItem

Para la codificacioacuten de snippets consulte los ejemplos siguientesv Ejemplo crear listas ordenadasv Ejemplo crear listas sin ordenarv Ejemplo crear listas anidadas

OrderedList y OrderedListItem

Las clases OrderedList y OrderedListItem permiten crear listas ordenadas en las paacuteginas HTMLv Los meacutetodos de OrderedList permiten

ndash Obtener y establecer el nuacutemero inicial del primer elemento de la listandash Obtener y establecer el tipo (o estilo) de los nuacutemeros de elemento

v Los meacutetodos de OrderedListItem permitenndash Obtener y establecer el nuacutemero del elementondash Obtener y establecer el tipo (o estilo) del nuacutemero de elemento

Con los meacutetodos de OrderedListItem puede alterar temporalmente la numeracioacuten y el tipo de unelemento especiacutefico de la lista

Vea el ejemplo para crear listas ordenadas

UnorderedList y UnorderedListItem

Las clases UnorderedList y UnorderedListItem permiten crear listas sin ordenar en las paacuteginas HTMLv Los meacutetodos de UnorderedList permiten

ndash Obtener y establecer el tipo (o estilo) de los elementosv Los meacutetodos de UnorderedListItem permiten

ndash Obtener y establecer el tipo (o estilo) del elemento

Vea el ejemplo para crear listas sin ordenar

Ejemplos coacutemo se utilizan las clases HTMLList

Los ejemplos siguientes muestran coacutemo se utilizan las clases HTMLList para crear listas ordenadas listassin ordenar y listas anidadas

Ejemplo crear listas ordenadas

A continuacioacuten figura un ejemplo en el que se crea una lista ordenada Cree un objeto OrderedList

OrderedList oList = new OrderedList(HTMLConstantsSMALL_ROMAN) Cree los objetos OrderedListItem

OrderedListItem listItem1 = new OrderedListItem()OrderedListItem listItem2 = new OrderedListItem()

Establezca los datos de los objetos OrderedListItemlistItem1setItemData(new HTMLText(Primer elemento))listItem2setItemData(new HTMLText(Segundo elemento))

222 IBM Toolbox para Java IBM Toolbox para Java

Antildeada los elementos de lista al objeto OrderedListoListaddListItem(listItem1)oListaddListItem(listItem2)Systemoutprintln(oListgetTag())

El ejemplo anterior genera los coacutedigos siguientesltol type=igtltligtPrimer elementoltligtltligtSegundo elementoltligtltolgt

Ejemplo crear listas sin ordenar

A continuacioacuten figura un ejemplo en el que se crea una lista sin ordenar Cree un objeto UnorderedList

UnorderedList uList = new UnorderedList(HTMLConstantsSQUARE) Cree los objetos UnorderedListItem

UnorderedListItem listItem1 = new UnorderedListItem()UnorderedListItem listItem2 = new UnorderedListItem()

Establezca los datos de los objetos UnorderedListItemlistItem1setItemData(new HTMLText(Primer elemento))listItem2setItemData(new HTMLText(Segundo elemento))

Antildeada los elementos de lista al objeto UnorderedListuListaddListItem(listItem1)uListaddListItem(listItem2)Systemoutprintln(uListgetTag())

El ejemplo anterior genera los coacutedigos siguientesltul type=squaregtltligtPrimer elementoltligtltligtSegundo elementoltligtltulgt

Ejemplo crear listas anidadas

A continuacioacuten figura un ejemplo en el que se crea una lista anidada Cree un objeto UnorderedList

UnorderedList uList = new UnorderedList(HTMLConstantsSQUARE) Cree y establezca los datos de los objetos UnorderedListItem

UnorderedListItem listItem1 = new UnorderedListItem()UnorderedListItem listItem2 = new UnorderedListItem()listItem1setItemData(new HTMLText(Primer elemento))listItem2setItemData(new HTMLText(Segundo elemento))

Antildeada los elementos de lista al objeto UnorderedListuListaddListItem(listItem1)uListaddListItem(listItem2)

Cree un objeto OrderedListOrderedList oList = new OrderedList(HTMLConstantsSMALL_ROMAN)

Cree los objetos OrderedListItemOrderedListItem listItem1 = new OrderedListItem()OrderedListItem listItem2 = new OrderedListItem()OrderedListItem listItem3 = new OrderedListItem()

Establezca los datos de los objetos OrderedListItemlistItem1setItemData(new HTMLText(Primer elemento))listItem2setItemData(new HTMLText(Segundo elemento))listItem3setItemData(new HTMLText(Tercer elemento))

Antildeada los elementos de lista al objeto OrderedListoListaddListItem(listItem1)oListaddListItem(listItem2)

Antildeada (anide) la lista sin ordenar a OrderedListItem2oListaddList(uList)

IBM Toolbox para Java 223

Antildeada otro objeto OrderedListItem al objeto OrderedList despueacutes del objeto UnorderedList anidado

oListaddListItem(listItem3)Systemoutprintln(oListgetTag())

El ejemplo anterior genera los coacutedigos siguientesltol type=igtltligtPrimer elementoltligtltligtSegundo elementoltligtltul type=squaregtltligtPrimer elementoltligtltligtSegundo elementoltligtltulgtltligtTercer elementoltligtltolgt

Javadoc HTMLListJavadoc HTMLListItem

Clase HTMLMetaLa clase HTMLMeta de IBM Toolbox para Java representa informacioacuten de metadatos que se utiliza dentrode un coacutedigo HTMLHead Los atributos de los coacutedigos META se emplean al identificar indexar y definirinformacioacuten en el documento HTML

Los atributos del coacutedigo META sonv NAME - nombre asociado al contenido del coacutedigo METAv CONTENT - valores asociados al atributo NAMEv HTTP-EQUIV - informacioacuten recopilada por servidores HTTP para las cabeceras de los mensajes de

respuestav LANG - idiomav URL - se utiliza para redirigir a los usuarios de la paacutegina actual a otro URL

Por ejemplo para ayudar a los motores de buacutesqueda a determinar el contenido de una paacutegina podriacuteautilizar el coacutedigo META que se indica a continuacioacuten

ltMETA name=keywords lang=es-es content=games cards bridgegt

Tambieacuten puede emplear una clase HTMLMeta para redirigir a un usuario de una paacutegina a otra

Los meacutetodos de la clase HTMLMeta permitenv Obtener y establecer el atributo NAMEv Obtener y establecer el atributo CONTENTv Obtener y establecer el atributo HTTP-EQUIVv Obtener y establecer el atributo LANGv Obtener y establecer el atributo URL

Ejemplo crear coacutedigos META

En el ejemplo siguiente se crean dos coacutedigos META Cree un coacutedigo META para ayudar a los motores de buacutesqueda a determinar el contenido de la paacuteginaHTMLMeta meta1 = new HTMLMeta()meta1setName(keywords)meta1setLang(es-es)meta1setContent(games cards bridge) Cree un coacutedigo META para que las memorias cacheacute puedan determinar cuaacutendo renovar la paacuteginaHTMLMeta meta2 = new HTMLMeta(Expires Mon 01 Jun 2000 120000 GMT)Systemoutprint(meta1 + rn + meta2)

224 IBM Toolbox para Java IBM Toolbox para Java

El ejemplo anterior genera los coacutedigos siguientesltmeta name=keywords content=games cards bridgegtltmeta http-equiv=Expires content=Mon 01 Jun 2000 120000 GMTgt

Informacioacuten relacionadaJavadoc HTMLMeta

Clase HTMLParameterLa clase HTMLParameter representa los paraacutemetros que puede utilizar con la clase HTMLServlet Cadauno de los paraacutemetros tiene un nombre y un valor propios

Los meacutetodos de la clase HTMLParameter permitenv Obtener y establecer el nombre del paraacutemetrov Obtener y establecer el valor del paraacutemetro

Ejemplo crear coacutedigos HTMLParameter

En el ejemplo siguiente se crea un coacutedigo HTMLParameter Cree un objeto HTMLServletParameter

HTMLParameter parm = new HTMLParameter (age 21)Systemoutprintln(parm)

El ejemplo anterior genera el coacutedigo siguienteltparam name=age value=21gt

Informacioacuten relacionadaJavadoc HTMLParameter

Clase HTMLServletLa clase HTMLServlet representa un elemento include en el lado del servidor El objeto de servletespecifica el nombre del servlet y de forma opcional su ubicacioacuten Tambieacuten puede elegir emplear laubicacioacuten predeterminada en el sistema local

La clase HTMLServlet se utiliza con la clase HTMLParameter que especifica los paraacutemetros disponiblespara el servlet

Los meacutetodos de la clase HTMLServlet permitenv Antildeadir y eliminar HTMLParameters del coacutedigo del servletv Obtener y establecer la ubicacioacuten del servletv Obtener y establecer el nombre del servletv Obtener y establecer el texto alternativo del servlet

Ejemplo crear coacutedigos HTMLServlet

El ejemplo siguiente antildeade un coacutedigo HTMLServlet Cree un objeto HTMLServletHTMLServlet servlet = new HTMLServlet(myServlet httpserverportdir)

Cree un paraacutemetro y a continuacioacuten antildeaacutedalo al servletHTMLParameter param = new HTMLParameter(parm1 value1)servletaddParameter(param)

Cree y antildeada un segundo paraacutemetroHTMLParameter param2 = servletadd(parm2 value2)

IBM Toolbox para Java 225

Cree el texto alternativo si el servidor Web no soporta el coacutedigo de servletservletsetText(El servidor Web que proporciona esta paacutegina no da soporte al coacutedigo SERVLET)Systemoutprintln(servlet)

El ejemplo anterior genera los coacutedigos siguientesltservlet name=miServlet codebase=httpserverportdirgtltparam name=parm1 value=value1gtltparam name=parm2 value=value2gtEl servidor Web que proporciona esta paacutegina no da soporte al coacutedigo SERVLETltservletgt

Javadoc HTMLServletldquoClase HTMLParameterrdquo en la paacutegina 225La clase HTMLParameter representa los paraacutemetros que puede utilizar con la clase HTMLServletCada uno de los paraacutemetros tiene un nombre y un valor propios

Clases de tablas HTMLLa clase HTMLTable de IBM Toolbox para Java permite preparar de manera sencilla las tablas que sepueden utilizar en las paacuteginas HTML

Esta clase proporciona meacutetodos para obtener y establecer los diversos atributos de la tabla como seindica a continuacioacutenv Obtener y establecer la anchura del bordev Obtener el nuacutemero de filas de la tablav Antildeadir una columna o fila al final de la tablav Eliminar una columna o fila situada en una posicioacuten de columna o fila especificada

Ejemplo coacutemo se utilizan las clases HTMLTable

El ejemplo siguiente muestra coacutemo se utilizan las clases HTMLTable

ldquoEjemplo coacutemo se utilizan las clases HTMLTablerdquo en la paacutegina 502Informacioacuten relacionadaJavadoc HTMLTable

Clase HTMLTableCell

La clase HTMLTableCell toma como entrada cualquier objeto HTMLTagElement y crea el coacutedigo HTMLde casilla de tabla con el elemento especificado El elemento se puede establecer en el constructor omediante uno de los dos meacutetodos setElement()

Se pueden recuperar o actualizar muchos atributos de las casillas utilizando los meacutetodos proporcionadosen la clase HTMLTableCell Algunas de las acciones que se pueden realizar con estos meacutetodos sonv Obtener o establecer la distribucioacuten de filasv Obtener o establecer la altura de las casillasv Establecer si los datos de la casilla utilizaraacuten los convenios de desglose normal de liacutenea HTML

A continuacioacuten figura un ejemplo que crea un objeto HTMLTableCell y visualiza el coacutedigo HTMLCree un objeto HTMLHyperlinkHTMLHyperlink link = new HTMLHyperlink(httpwwwibmcom

Paacutegina de presentacioacuten de IBM)HTMLTableCell cell = new HTMLTableCell(link)cellsetHorizontalAlignment(HTMLConstantsCENTER)Systemoutprintln(cellgetTag())

226 IBM Toolbox para Java IBM Toolbox para Java

El meacutetodo getTag() anterior proporciona la salida del ejemplo

lttd align=centergtlta href=httpwwwibmcomgtPaacutegina de presentacioacuten de IBMltagtlttdgtJavadoc HTMLTableCellJavadoc HTMLTagElement

Clase HTMLTableRow

La clase HTMLTableRow crea una fila dentro de una tabla Esta clase proporciona diversos meacutetodos paraobtener y establecer los atributos de una fila

Los meacutetodos de la clase HTMLTableRow permiten llevar a cabo estas accionesv Antildeadir una columna a la fila o eliminar una columna de la filav Obtener datos de la columna que tiene el iacutendice especificadov Obtener el iacutendice de la columna que tiene la casilla especificadav Obtener el nuacutemero de columnas que hay en una filav Establecer la alineacioacuten horizontal y vertical

A continuacioacuten figura un ejemplo de HTMLTableRow Cree una fila y establezca la alineacioacutenHTMLTableRow row = new HTMLTableRow()rowsetHorizontalAlignment(HTMLTableRowCENTER)

Cree la informacioacuten de columna y antildeaacutedala a la filaHTMLText account = new HTMLText(customers_[rowIndex]getAccount())HTMLText name = new HTMLText(customers_[rowIndex]getName())HTMLText balance = new HTMLText(customers_[rowIndex]getBalance())

rowaddColumn(new HTMLTableCell(account))rowaddColumn(new HTMLTableCell(name))rowaddColumn(new HTMLTableCell(balance))

Antildeada la fila a un objeto HTMLTable (se presupone que ya existe la tabla)tableaddRow(row)

Informacioacuten relacionadaJavadoc HTMLTableRow

Clase HTMLTableHeader

La clase HTMLTableHeader es heredera de la clase HTMLTableCell Crea un tipo especiacutefico de casilla lacasilla de cabecera que proporciona una casilla de tipo ltthgt en vez de una casilla de tipo lttdgt Al igualque sucede con la clase HTMLTableCell se puede llamar a diversos meacutetodos con el fin de actualizar orecuperar los atributos de la casilla de cabecera

A continuacioacuten figura un ejemplo de HTMLTableHeader Cree las cabeceras de la tablaHTMLTableHeader account_header = new HTMLTableHeader(new HTMLText(CUENTA))HTMLTableHeader name_header = new HTMLTableHeader(new HTMLText(NOMBRE))HTMLTableHeader balance_header = new HTMLTableHeader()HTMLText balance = new HTMLText(SALDO)balance_headersetElement(balance)

Antildeada las cabeceras de tabla a un objeto HTMLTable (se presupone que ya existe la tabla)tableaddColumnHeader(account_header)tableaddColumnHeader(name_header)tableaddColumnHeader(balance_header)

Informacioacuten relacionada

IBM Toolbox para Java 227

Javadoc HTMLTableHeader

Clase HTMLTableCaption

La clase HTMLTableCaption crea un tiacutetulo para la tabla HTML Proporciona meacutetodos para actualizar yrecuperar los atributos del tiacutetulo Por ejemplo puede utilizar setAlignment() para especificar con queacutecomponente de la tabla se debe alinear el tiacutetulo

A continuacioacuten figura un ejemplo de HTMLTableCaption Cree unobjeto HTMLTableCaption predeterminado y establezca el texto del tiacutetulo

HTMLTableCaption caption = new HTMLTableCaption()captionsetElement(Saldos de cuenta de cliente - 1 de enero de 2000)

Antildeada el tiacutetulo de tabla a un objeto HTMLTable (se presupone que ya existe la tabla)tablesetCaption(caption)

Informacioacuten relacionadaJavadoc HTMLTableCaption

Clase HTMLTextLa clase HTMLText de IBM Toolbox para Java permite acceder a las propiedades del texto de la paacuteginaHTML Mediante la clase HTMLText puede obtener establecer y comprobar el estado de numerososatributos del texto

Estos atributos incluyen los siguientesv Obtener o establecer el tamantildeo del fontv Activar (true) o desactivar (false) el atributo de negrita o determinar si ya estaacute activadov Activar (true) o desactivar (false) el atributo de subrayado o determinar si ya estaacute activadov Obtener o establecer la alineacioacuten horizontal del texto

A continuacioacuten figura un ejemplo en el que se crea un objeto HTMLText se activa el atributo de negrita yse establece el tamantildeo del font en 5

HTMLText text = new HTMLText(IBM)textsetBold(true)textsetSize(5)Systemoutprintln(textgetTag())

La sentencia de imprimir genera el siguiente coacutedigo HTMLltfont size=5gtltbgtIBMltbgtltfontgt

Este coacutedigo cuando se utiliza en una paacutegina HTML ofrece este aspecto

IBM

Informacioacuten relacionadaJavadoc HTMLText

Clases HTMLTreeLa clase HTMLTree permite preparar de manera sencilla un aacuterbol jeraacuterquico de elementos HTML que sepuede utilizar en las paacuteginas HTML

Esta clase proporciona meacutetodos para obtener y establecer los diversos atributos del aacuterbol ademaacutes de losmeacutetodos que permiten llevar a cabo las acciones siguientesv Obtener y establecer la peticioacuten de servlet HTTPv Antildeadir un objeto HTMLTreeElement o FileTreeElement al aacuterbol

228 IBM Toolbox para Java IBM Toolbox para Java

v Eliminar un objeto HTMLTreeElement o FileTreeElement del aacuterbol

Ejemplos coacutemo se utilizan las clases HTMLTree

En los ejemplos siguientes se muestran diversas formas de utilizar las clases HTMLTreev ldquoEjemplo coacutemo se utilizan las clases HTMLTreerdquo en la paacutegina 493v ldquoEjemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrerrdquoInformacioacuten relacionadaJavadoc HTMLTree

Ejemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrer

El ejemplo siguiente consta de tres archivos que juntos muestran coacutemo crear un aacuterbol de sistema dearchivos integrado que se pueda recorrer El ejemplo utiliza marcos para visualizar un HTMLTree yFileListElement en un servletv FileTreeExamplejava - Este archivo genera los marcos HTML y arranca el servletv TreeNavjava - Este archivo construye y gestiona el aacuterbolv TreeListjava - Este archivo visualiza el contenido de las selecciones efectuadas en la clase TreeNavjava

Clase HTMLTreeElement

La clase HTMLTreeElement representa un elemento jeraacuterquico dentro de un objeto HTMLTree o de otrosobjetos HTMLTreeElement

Se pueden recuperar o actualizar muchos atributos de elementos de aacuterbol utilizando los meacutetodosproporcionados en la clase HTMLTreeElement Algunas de las acciones que se pueden realizar con estosmeacutetodos sonv Obtener o establecer el texto visible del elemento de aacuterbolv Obtener o establecer el URL del icono expandido y contraiacutedov Establecer si el elemento de aacuterbol se expandiraacute

A continuacioacuten figura un ejemplo que crea un objeto HTMLTreeElement y visualiza el coacutedigo HTML Cree un objeto HTMLTreeHTMLTree tree = new HTMLTree()

Cree el objeto HTMLTreeElement padreHTMLTreeElement parentElement = new HTMLTreeElement()parentElementsetTextUrl(new HTMLHyperlink(httpMiPaacuteginaWeb Mi paacutegina Web))

Cree el objeto HTMLTreeElement hijoHTMLTreeElement childElement = new HTMLTreeElement()childElementsetTextUrl(new HTMLHyperlink(httpOtraPaacuteginaWeb Otra paacutegina Web))parentElementaddElement(childElement)

Antildeada el elemento de aacuterbol al aacuterboltreeaddElement(parentElement)Systemoutprintln(treegetTag())

El meacutetodo getTag() del ejemplo anterior genera coacutedigos HTML como los siguienteslttable cellpadding=0 cellspacing=3gtlttrgtlttdgtltfont color=0000FFgtltugt-ltugtltfontgt lttdgtlttdgtltfont color=0000FFgtltugtMi paacutegina Webltugtltfontgtlttdgtlttrgt

lttrgt

IBM Toolbox para Java 229

lttdgt lttdgtlttdgtlttable cellpadding=0 cellspacing=3gtlttrgtlttdgtltfont color=0000FFgtltugt-ltugtltfontgt lttdgtlttdgtltfont color=0000FFgtltugtOtra paacutegina Webltugtltfontgt lttdgtlttrgtlttablegtlttdgtlttrgtlttablegt

Informacioacuten relacionadaJavadoc HTMLTreeElement

Clase FileTreeElement

La clase FileTreeElement de IBM Toolbox para Java representa el sistema de archivos integrado dentro deuna vista HTMLTree

Se pueden recuperar o actualizar muchos atributos de elementos de aacuterbol utilizando los meacutetodosproporcionados en la clase HTMLTreeElement Tambieacuten puede obtener y establecer el nombre y la viacutea deacceso de las unidades compartidas NetServer

Algunas de las acciones que estos meacutetodos permiten llevar a cabo sonv Obtener o establecer el URL del icono expandido y contraiacutedo (meacutetodo heredado)v Establecer si el elemento de aacuterbol se expandiraacute (meacutetodo heredado)v Obtener o establecer el nombre de la unidad compartida NetServerv Obtener o establecer la viacutea de acceso de la unidad compartida NetServer

Ejemplo coacutemo se utiliza FileTreeElement

A continuacioacuten figura un ejemplo que crea un objeto FileTreeElement y visualiza el coacutedigo HTML Cree un objeto HTMLTreeHTMLTree tree = new HTMLTree()

Cree un objeto URLParserURLParser urlParser = new URLParser(httpServletRequestgetRequestURI())

Cree un objeto AS400AS400 system = new AS400(mySystem myUserId myPassword)

Cree un objeto IFSJavaFileIFSJavaFile root = new IFSJavaFile(system QIBM)

Cree un objeto DirFilter y obtenga los directoriosDirFilter filter = new DirFilter()File[] dirList = rootlistFiles(filter)

for (int i=0 i lt dirListlength i++)

Cree un objeto FileTreeElementFileTreeElement node = new FileTreeElement(dirList[i])

Establezca el URL del iconoServletHyperlink sl = new ServletHyperlink(urlParsergetURI())slsetHttpServletResponse(resp)elementsetIconUrl(sl)

Antildeada el objeto FileTreeElement al aacuterbol

230 IBM Toolbox para Java IBM Toolbox para Java

treeaddElement(element)

Systemoutprintln(treegetTag())

El meacutetodo getTag() anterior proporciona la salida del ejemploInformacioacuten relacionadaJavadoc FileTreeElement

Clase FileListElement

La clase FileListElement de IBM Toolbox para Java permite crear un elemento de lista de archivos querepresenta el contenido de un directorio de sistema de archivos integrado

Puede utilizar el objeto FileListElement para representar el contenido de una unidad compartidaNetServer obteniendo y estableciendo el nombre y la viacutea de acceso de las unidades compartidasNetServer

La clase FileListElement proporciona meacutetodos que permiten llevar a cabo estas accionesv Listar y ordenar los elementos de la lista de archivosv Obtener y establecer la peticioacuten de servlet HTTPv Obtener y establecer FileListRendererv Obtener y establecer HTMLTable con el que se visualizaraacute la lista de archivosv Obtener y establecer el nombre de una unidad compartida NetServerv Obtener y establecer la viacutea de acceso de una unidad compartida NetServer

Puede utilizar la clase FileListElement con otras clases del paquete htmlv Con una clase FileListRenderer puede especificar coacutemo desea visualizar la lista de archivosv Con la clase FileTreeElement puede crear una lista que se pueda recorrer de archivos de sistema de

archivos integrado o archivos compartidos NetServer

Ejemplo Utilizar FileListElement para crear un aacuterbol de sistema de archivos integrado que se puedarecorrer

El ejemplo que sigue muestra coacutemo se puede utilizar la clase FileListElement con las clases HTMLTree(FileTreeElement y HTMLTreeElement) para crear un aacuterbol de sistema de archivos integrado que se puedarecorrer El ejemplo tambieacuten contiene coacutedigo para establecer la viacutea de acceso de una unidad compartidaNetServer

ldquoEjemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrerrdquo en la paacutegina 229Informacioacuten relacionadaJavadoc FileListElementJavadoc FileTreeElementJavadoc HTMLTreeElement

Clase FileListRenderer

La clase FileListRenderer de IBM Toolbox para Java representa cualquier campo de los objetos File(directorios y archivos) en un objeto FileListElement

La clase FileListRenderer ofrece meacutetodos que permiten llevar a cabo las acciones siguientesv Obtener el nombre del directoriov Obtener el nombre del archivo

IBM Toolbox para Java 231

v Obtener el nombre del directorio padrev Devolver la fila de datos que desea visualizar en el objeto FileListElement

En este ejemplo se crea un objeto FileListElement con un representador Cree un objeto FileListElementFileListElement fileList = new FileListElement(sys httpservletrequest)

Establezca el representador especiacutefico para este servlet que ampliacutea FileListRenderer y altera temporalmente los meacutetodos aplicablesfileListsetRenderer(new myFileListRenderer(request))

Si no desea utilizar el representador predeterminado puede ampliar FileListRenderer y alterartemporalmente los meacutetodos o crear otros nuevos Por ejemplo puede desear asegurarse de impedir quese pasen los nombres de directorios o archivos especiacuteficos con unas extensiones determinadas al objetoFileListElement Ampliando la clase y alterando temporalmente el meacutetodo correspondiente puededevolver un valor nulo para estos archivos y directorios con lo que se asegura de que no se visualicen

Para personalizar por completo las filas de un objeto FileListElement utilice el meacutetodo getRowData() Unejemplo de personalizacioacuten de datos de filas mediante getRowData() podriacutea ser antildeadir una columna a losdatos de fila o reorganizar las columnas Cuando el comportamiento predeterminado del objetoFileListRenderer sea satisfactorio no seraacute necesario que lleve a cabo ninguna programacioacuten adicional yaque la clase FileListElement crea un objeto FileListRenderer predeterminadoReferencia relacionadaldquoClase FileListElementrdquo en la paacutegina 231La clase FileListElement de IBM Toolbox para Java permite crear un elemento de lista de archivos querepresenta el contenido de un directorio de sistema de archivos integradoInformacioacuten relacionadaJavadoc FileListRenderer

Clases ReportWriterEl paquete comibmas400utilreportwriter proporciona clases que permiten acceder a datos de un archivofuente XML o datos generados por servlets o JavaServer Pages y darles formato con facilidad

El paquete reportwriter ofrece un modo coacutemodo de especificar tres paquetes distintos pero relacionadosv comibmas400utilreportwriterpclwriterv comibmas400utilreportwriterpdfwriterv comibmas400utilreportwriterprocessor

Estos paquetes contienen diversas clases que permiten dar formato a corrientes de datos XML y generarinformes en esos formatos Compruebe que tiene los archivos JAR necesarios en la CLASSPATH entre losque debe haber un analizador XML y un procesador XSLT Encontraraacute maacutes informacioacuten en estas paacuteginasv Archivos JAR

Las clases Context (de los paquetes pclwriter y pdfwriter) definen meacutetodos que las clases ReportProcessornecesitan para representar datos XML y JSP en el formato elegidov Utilice PCLContext junto con una clase ReportWriter para generar un informe en el formato PCL

(Printer Control Language) de Hewlett Packardv Utilice PDFContext junto con una clase ReportWriter para generar un informe en el formato PDF

(Portable Document Format) de Adobe

Las clases ReportProcessor (del paquete processor) permiten generar informes con formato a partir de lainformacioacuten que la aplicacioacuten recoge de los datos fuente XML servlets Java y JavaServer Pages (JSP)

232 IBM Toolbox para Java IBM Toolbox para Java

v Utilice la clase JSPReportProcessor para recuperar datos de servlets y paacuteginas JSP para generarinformes en los formatos disponibles (contextos)

Clases ContextLas clases Context de IBM Toolbox para Java soportan formatos de datos especiacuteficos que en combinacioacutencon las clases OutputQueue y SpooledFileOutputStream permiten a las clases ReportWriter generarinformes en ese formato y colocar esos informes en un archivo en spool

La aplicacioacuten solo tiene que crear una instancia de la clase Context que las clases ReportWriterposteriormente utilizan para generar los informes La aplicacioacuten nunca llama directamente a ninguno delos meacutetodos de ninguna clase Context Los meacutetodos PCLContext y PDFContext estaacuten pensados para eluso interno de las clases ReportWriter

Para construir una instancia de la clase Context se necesita un OutputStream (del paquete javaio) y unPageFormat (del paquete javaawtprint) El Ejemplo Utilizar JSPReportProcessor con PDFContextmuestra coacutemo se puede construir y utilizar las clases Context con otras clases ReportWriter para generarinformes

Javadoc OutputQueueJavadoc SpooledFileOutputStreamldquoClases ReportWriterrdquo en la paacutegina 232El paquete comibmas400utilreportwriter proporciona clases que permiten acceder a datos de unarchivo fuente XML o datos generados por servlets o JavaServer Pages y darles formato con facilidadldquoEjemplo coacutemo se utiliza XSLReportProcessor con PCLContextrdquo en la paacutegina 517Este ejemplo no debe utilizarse ya que la clase XSLReportProcessor ha dejado de estar soportadaldquoEjemplo coacutemo se utiliza JSPReportProcessor con PDFContextrdquo en la paacutegina 514Este ejemplo utiliza las clases JSPReportProcessor y PDFContext para obtener datos de un URLespecificado y convertir los datos a formato PDF Despueacutes los datos se convierten en un documentoPDF

Clase JSPReportProcessorLa clase JSPReportProcessor permite crear un documento o informe a partir del contenido de unaJavaServer Page (JSP) o un servlet Java

Utilice esta clase para obtener un servlet o JSP de un URL determinado y crear un documento a partir delcontenido El servlet o JSP debe proporcionar los datos del documento incluidos los objetos de formatoXSL El usuario debe especificar el contexto de salida y el origen de datos de entrada de JSP antes depoder generar las paacuteginas del documento A continuacioacuten puede convertir los datos del informe en unformato de corriente de datos de salida especiacutefico

La clase JSPReportProcessor permite llevar a cabo estas accionesv Procesar el informev Establecer un URL como plantilla

Los ejemplos que hay a continuacioacuten muestran coacutemo pueden utilizarse las clases JSPReportProcessor yPDFContext para generar un informe Los ejemplos contienen el coacutedigo Java y JSP que puede vermediante los enlaces siguientes Tambieacuten puede bajar un archivo zip que contiene los archivos fuente JSPXML y XSL de ejemplo para los ejemplos de JSPReportProcessorv ldquoEjemplo coacutemo se utiliza JSPReportProcessor con PDFContextrdquo en la paacutegina 514v ldquoEjemplo archivo JSP de ejemplo de JSPReportProcessorrdquo en la paacutegina 515

Tecnologiacutea Java Server Pages

Clase XSLReportProcessorLa clase XSLReportProcessor ya no estaacute soportada y no debe utilizarse

IBM Toolbox para Java 233

La clase XSLReportProcessor permite crear un documento o informe transformando los datos fuente XMLy daacutendoles formato con una hoja de estilo XSL Utilice esta clase para crear el informe empleando unahoja de estilo XSL que contenga los objetos de formato (FO) XSL que deben cumplir la especificacioacutenXSL A continuacioacuten utilice una clase Context para convertir los datos del informe en un formato decorriente de datos de salida especiacutefico

La clase XSLReportProcessor permite llevar a cabo estas accionesv Establecer la hoja de estilo XSLv Establecer el origen de datos XMLv Establecer el fuente FO XSLv Procesar un informe

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo pueden utilizarse las clases XSLReportProcessor yPCLContext para generar un informe Los ejemplos contienen el coacutedigo Java XML y XSL que puede vermediante los enlaces siguientes Tambieacuten puede bajar un archivo zip con los archivos fuente XML XSL yJSP de ejemplo para los ejemplos de XSLReportProcessor y JSPReportProcessorv Ejemplo coacutemo se utiliza XSLReportProcessor con PCLContextv Ejemplo archivo XML de ejemplo de XSLReportProcessorv Ejemplo archivo XSL de ejemplo de XSLReportProcessor

Para obtener maacutes informacioacuten sobre XML y XSL consulte el tema XML Toolkit que se encuentra enInformation Center

Clases de seguridadUtilice las clases de seguridad de IBM Toolbox para Java para proporcionar conexiones protegidas con unservidor verificar la identidad de un usuario y asociar un usuario a la hebra de sistema operativo cuandose esteacute ejecutando en el servidor local

Los servicios de seguridad incluidos sonv Una infraestructura de comunicaciones que utiliza Java Secure Socket Extension (JSSE) proporciona

conexiones seguras tanto mediante el cifrado de los datos intercambiados entre un cliente y una sesioacutende servidor como mediante la autenticacioacuten de servidor

v Los servicios de autenticacioacuten proporcionan la posibilidad dendash Autenticar una identidad de usuario y su contrasentildea en relacioacuten con el registro de usuarios de IBM

indash Capacidad de asignar una identidad a la hebra de IBM i actual

SSL (capa de sockets segura)SSL (capa de sockets segura) proporciona conexiones seguras mediante tanto mediante el cifrado de losdatos intercambiados entre un cliente y una sesioacuten de servidor como mediante la autenticacioacuten deservidor

La utilizacioacuten de SSL incide de forma negativa en el rendimiento ya que las conexiones SSL son maacuteslentas que las que no tienen cifrado Utilice conexiones SSL cuando la seguridad de los datos transferidossea maacutes importante que el rendimiento (por ejemplo al transferir informacioacuten de tarjetas de creacutedito o deestado de cuentas bancarias)

Poacutengase en contacto con el representante de IBM para obtener maacutes informacioacuten

Utilizacioacuten del cifrado entre las clases de IBM Toolbox para Java y los servidores IBM i

234 IBM Toolbox para Java IBM Toolbox para Java

Utilizacioacuten de SSL para cifrar datos entre IBM Toolbox para Java y los servidores IBM i

Puede utilizar SSL para cifrar los datos que se intercambian entre las clases de IBM Toolbox para Java ylos servidores IBM i

En el lado del cliente utilice JSSE para cifrar los datos En el lado del servidor debe utilizar el gestor decertificados digitales de IBM i a fin de configurar los servidores IBM i para intercambiar los datoscifrados

Configuracioacuten del cliente y del servidor para utilizar SSL

Para cifrar los datos que fluyen entre las clases de IBM Toolbox para Java y los servidores IBM i lleve acabo estas tareas1 Configure los servidores para intercambiar datos cifrados2 Utilice el objeto SecureAS400 para forzar a IBM Toolbox para Java a cifrar datos

Nota con la realizacioacuten de los dos primeros pasos anteriores solo se crea una viacutea de acceso seguraentre el cliente y el servidor La aplicacioacuten debe utilizar el objeto SecureAS400 para indicar a IBMToolbox para Java queacute datos debe cifrar Los datos que fluyen por el objeto SecureAS400 son losuacutenicos datos que se cifran Si emplea un objeto AS400 los datos no se cifraraacuten y se utilizaraacute la viacutea deacceso normal hasta el servidor

Configuracioacuten de IBM i para utilizar SSL

Para configurar el sistema para utilizar SSL con IBM Toolbox para Java siga estos pasos1 Obtenga y configure el certificado de servidor2 Aplique el certificado a los siguientes sistemas utilizados por IBM Toolbox para Java

v QIBM_OS400_QZBS_SVR_CENTRALv QIBM_OS400_QZBS_SVR_DATABASEv QIBM_OS400_QZBS_SVR_DTAQv QIBM_OS400_QZBS_SVR_NETPRTv QIBM_OS400_QZBS_SVR_RMTCMDv QIBM_OS400_QZBS_SVR_SIGNONv QIBM_OS400_QZBS_SVR_FILEv QIBM_OS400_QRW_SVR_DDM_DRDA

Obtener y configurar certificados de servidor

Antes de obtener y configurar el certificado de servidor debe instalar los productos siguientes

v Programa bajo licencia IBM HTTP Server (5770-DG1)v Opcioacuten 34 del sistema operativo base (Gestor de Certificados Digitales)

El proceso que siga para obtener y configurar el certificado de servidor depende del tipo de certificadoque utilicev Si obtiene un certificado de una autoridad de confianza (como por ejemplo VeriSign Inc o RSA Data

Security Inc) instale el certificado en el sistema y a continuacioacuten apliacutequelo a los servidores de hostv Si opta por no utilizar un certificado de una autoridad de confianza puede construir su propio

certificado para ser utilizado en el sistema Construya el certificado mediante el Gestor de CertificadosDigitales1 Cree la autoridad certificadora en el sistema Consulte el tema correspondiente de Information

Center Actuar como CA propia

IBM Toolbox para Java 235

2 Cree un certificado del sistema a partir de la autoridad certificadora que ha creado3 Asigne queacute servidores de host van a utilizar el certificado del sistema que ha creado

Servicios de autenticacioacutenIBM Toolbox para Java proporciona clases que interactuacutean con los servicios de seguridad proporcionadospor IBM i

Concretamente se proporciona soporte para autenticar una identidad de usuario al que a veces se hacereferencia como principal y una contrasentildea en relacioacuten con el registro de usuarios de IBM i Entonces sepuede establecer una credencial que represente al usuario autenticado La credencial permite alterar laidentidad de la hebra de IBM i actual para que trabaje bajo las autorizaciones y los permisos del usuarioautenticado En efecto este intercambio de identidad hace que la hebra actuacutee como si el usuarioautenticado hubiese realizado un inicio de sesioacuten

Visioacuten general del soporte proporcionado

El objeto AS400 proporciona autenticacioacuten para un determinado perfil de usuario y su contrasentildea enrelacioacuten con el servidor Tambieacuten se pueden recuperar para el sistema tickets de kerberos y siacutembolos deperfil que representen perfiles de usuario y contrasentildeas autenticados

Nota para utilizar los tickets de kerberos debe configurarse la interfaz de programacioacuten de aplicacionesJava General Security Services (JGSS) Para obtener maacutes informacioacuten sobre JGSS consulte la

Documentacioacuten de seguridad de Java

Para utilizar los tickets de kerberos establezca uacutenicamente el nombre de sistema (y no la contrasentildea) enel objeto AS400 La identidad de usuario se recupera mediante la infraestructura de JGSS Solo puedeestablecer un meacutetodo de autenticacioacuten en un objeto AS400 a la vez Al establecer la contrasentildea se borranlos tickets de kerberos o los siacutembolos de perfil

Para utilizar los siacutembolos de perfil utilice los meacutetodos getProfileToken() para recuperar instancias de laclase ProfileTokenCredential El siacutembolo de perfil puede describirse como la representacioacuten de un perfilde usuario y una contrasentildea autenticados para un servidor especiacutefico Los siacutembolos de perfil caducan conel tiempo (duran como maacuteximo una hora) pero en algunos casos se pueden renovar para que su tiempode vida sea maacutes largo

Nota si utiliza la clase ProfileTokenCredential no olvide consultar la informacioacuten situada al final de estapaacutegina sobre los meacutetodos para establecer siacutembolos

El ejemplo siguiente crea un objeto sistema y utiliza ese objeto para generar un siacutembolo de perfil Acontinuacioacuten el ejemplo utiliza el siacutembolo de perfil para crear otro objeto sistema y emplea el segundoobjeto sistema para conectar con el servicio de mandatos

AS400 system = new AS400(mySystemName MYUSERID MYPASSWORD)ProfileTokenCredential myPT = systemgetProfileToken()AS400 system2 = new AS400(mySystemName myPT)system2connectService(AS400COMMAND)

Establecer identidades de hebra

Una credencial se puede establecer ya sea en un contexto remoto o en un contexto local Una vez creadase puede serializar o distribuir seguacuten lo requiera la aplicacioacuten llamadora Se puede utilizar unacredencial cuando se pasa a un proceso en ejecucioacuten en el servidor asociado para modificar ointercambiar (swap) la identidad de la hebra de IBM i y llevar a cabo tareas en nombre del usuariopreviamente autenticado

Una aplicacioacuten praacutectica de este soporte seriacutea en una aplicacioacuten de dos niveles en el primer nivel (porejemplo un PC) una interfaz graacutefica de usuario realizariacutea la autenticacioacuten de un perfil de usuario y una

236 IBM Toolbox para Java IBM Toolbox para Java

contrasentildea y en el segundo nivel (el servidor) se llevariacutea a cabo el trabajo de ese usuario Al utilizarcredenciales de siacutembolo de perfil (clases ProfileTokenCredential) la aplicacioacuten puede evitar el tener quepasar directamente los ID de usuario y las contrasentildeas a traveacutes de la red Entonces el siacutembolo de perfilse puede distribuir al programa del segundo nivel que puede realizar el intercambio swap() y operar bajolas autorizaciones y los permisos de IBM i asignados al usuario

Nota los siacutembolos de perfil son inherentemente maacutes seguros que pasar un perfil de usuario y unacontrasentildea debido a su tiempo de vida limitado sin embargo la aplicacioacuten auacuten los debe considerar comoinformacioacuten delicada y manejarlos como tal Debido a que el siacutembolo representa a un usuario autenticadoy su contrasentildea una aplicacioacuten hostil podriacutea aprovecharse de eacutel para trabajar en nombre de ese usuarioLa aplicacioacuten es en uacuteltima instancia la que debe encargarse de que el acceso a las credenciales se realicede manera segura

Meacutetodos para establecer siacutembolos de ProfileTokenCredential

Si desea emplear los meacutetodos para establecer siacutembolos de la clase ProfileTokenCredential debe distinguirentre los diferentes modos de especificar contrasentildeasv Como un valor especial como por ejemplo NOPWD o NOPWDCHK utilizando un entero de valor

especial definidov Como la contrasentildea del perfil de usuario utilizando una serie que representa la contrasentildea

Nota en la V5R3 IBM Toolbox para Java establece como obsoletos los meacutetodos setToken que no precisanla distincioacuten del modo de especificar la contrasentildea

Asimismo los meacutetodos setToken permiten a los usuarios remotos especificar valores especiales decontrasentildea y admiten contrasentildeas de perfil de usuario maacutes largas de hasta 128 caracteres

Para especificar un entero de valor especial de contrasentildea como por ejemplo NOPWD o NOPWDCHKutilice uno de los meacutetodos siguientesv setToken(AS400Principal principal int passwordSpecialValue)v setToken(String name int passwordSpecialValue)

La clase ProfileTokenCredential incluye las siguientes constantes estaacuteticas para los enteros de valorespecial de contrasentildeav ProfileTokenCredentialPW_NOPWD indica NOPWDv ProfileTokenCredentialPW_NOPWDCHK indica NOPWDCHK

Para especificar una contrasentildea de perfil de usuario como una serie emplee uno de los meacutetodossiguientesv setTokenExtended(AS400Principal principal String password)v setTokenExtended(String name String password)

Los meacutetodos setTokenExended no permiten pasar series de valor especial de contrasentildea como paraacutemetrode contrasentildea Por ejemplo estos meacutetodos no admiten la serie de contrasentildea NOPWD

Encontraraacute maacutes detalles en la informacioacuten de consulta del Javadoc ProfileTokenCredential

Ejemplo

En este coacutedigo encontraraacute un ejemplo de coacutemo se utiliza una credencial de siacutembolo de perfil paraintercambiar la identidad de la hebra de IBM i y llevar a cabo tareas en nombre de un determinadousuario

Javadoc AS400

IBM Toolbox para Java 237

Javadoc ProfileTokenCredential

Clases de servletsLas clases de servlets que se proporcionan con IBM Toolbox para Java funcionan con las clases de accesoque se encuentran en el servidor Web para ofrecerle acceso a la informacioacuten ubicada en el servidorUsted es quien decide de queacute manera va a utilizar las clases de servlets como ayuda para sus propiosproyectos de servlets

En el siguiente diagrama se ve coacutemo las clases de servlets funcionan entre el navegador el servidor Weby los datos de IBM i Un navegador se conecta al servidor Web que estaacute ejecutando el servlet Losarchivos jt400Servletjar y jt400jar residen en el servidor Web porque las clases de servlets utilizanalgunas de las clases de acceso para recuperar los datos y las clases HTML para presentar los datos Elservidor Web se conecta al servidor en el que estaacuten los datos

Figura 1 coacutemo funcionan los servlets

ldquoDescripcioacutenexhaustiva de la figura 1 coacutemo funcionan los servlets (rzahh585gif)rdquo

Nota el archivo jt400Servletjar incluye tanto las clases HTML como las clases de servlets Debe actualizarla CLASSPATH para que sentildeale a los dos archivos (jt400Servletjar y jt400jar) si desea utilizar las clasesde los paquetes comibmas400utilhtml y comibmas400utilservlet

Encontraraacute maacutes informacioacuten sobre los servlets en general en la seccioacuten Consulta o referencia

Descripcioacuten exhaustiva de la figura 1 coacutemo funcionan los servlets (rzahh585gif)que se encuentra en IBM Toolbox para Java clases de servlet

Esta figura muestra de forma general coacutemo funcionan los servlets

Descripcioacuten

La figura consta de los elementos siguientesv Una imagen situada a la izquierda de un PC con la etiqueta Navegador que representa una instancia

de un navegador que se ejecuta en un PCv Una imagen de un servidor IBM i a la derecha con la etiqueta Datos de IBM i que representa la

ubicacioacuten de los datos a los que desea que acceda el servletv Una imagen de un servidor IBM i en el medio (entre las otras dos imaacutegenes) con la etiqueta Servidor

Web que representa el servidor Web Varios elementos con etiqueta situados en la imagen del servidorWeb indican archivos o funciones que residen en el servidor Webndash Un oacutevalo verde (Servlet) que representa la ubicacioacuten del coacutedigo del servletndash Un ciacuterculo de color canela (jt400Servlet) que indica la ubicacioacuten del archivo jt400Servletjarndash Un ciacuterculo de color canela (jt400) que indica la ubicacioacuten del archivo jt400jar

238 IBM Toolbox para Java IBM Toolbox para Java

Nota el servidor Web no tiene que estar en un servidor IBM i pero puede estarlo e incluso puede serel mismo servidor que el indicado por la imagen Datos de IBM i

v Diversas liacuteneas que conectan las imaacutegenes entre siacute

Una liacutenea etiquetada con HTML conecta el navegador (la imagen de la izquierda) con un servlet (el oacutevaloverde) en el servidor Web (la imagen del medio) La liacutenea tiene la etiqueta HTML ya que habitualmentelos servlets utilizan HTML para servir datos al navegador

El servidor Web ejecuta dos archivos JAR de IBM Toolbox para Java (los ciacuterculos de color canela)jt400Servletjar y jt400jar Las clases de jt400Servletjar junto con las clases de jt400jar permiten alservidor Web ejecutar un servlet que conecta faacutecilmente con servidores que contienen datos de IBM i (laimagen de la derecha) La liacutenea con puntas de flecha en ambos extremos que conecta las dos imaacutegenesindica esta conexioacuten

Clases de autenticacioacutenDos clases del paquete de servlets llevan a cabo la autenticacioacuten de servlets AuthenticationServlet yAS400Servlet

Clase AuthenticationServlet

AuthenticationServlet es una implementacioacuten de HttpServlet que lleva a cabo la autenticacioacuten baacutesica deservlets Las subclases de AuthenticationServlet alteraraacuten temporalmente uno o varios de los meacutetodossiguientesv Altere temporalmente el meacutetodo validateAuthority() para realizar la autenticacioacuten (obligatorio)v Altere temporalmente el meacutetodo bypassAuthentication() para que la subclase autentique uacutenicamente

determinadas peticionesv Altere temporalmente el meacutetodo postValidation() para permitir el proceso adicional de la peticioacuten tras

la autenticacioacuten

La clase AuthenticationServlet proporciona meacutetodos que permiten llevar a cabo estas accionesv Inicializar el servletv Obtener el ID de usuario autenticadov Establecer un ID de usuario tras eludir la autenticacioacutenv Anotar excepciones y mensajes

Clase AS400Servlet

La clase AS400Servlet es una subclase abstracta de AuthenticationServlet que representa un servletHTML Puede utilizar una agrupacioacuten de conexiones para compartir conexiones y gestionar el nuacutemero deconexiones que un usuario de servlet puede tener con el servidor

La clase AS400Servlet proporciona meacutetodos que permiten llevar a cabo estas accionesv Validar la autoridad de usuario (alterando temporalmente el meacutetodo validateAuthority() de la clase

AuthenticationServlet)v Conectarse a un sistemav Obtener objetos de agrupacioacuten de conexiones de la agrupacioacuten y devolver objetos de agrupacioacuten de

conexiones a la agrupacioacutenv Cerrar una agrupacioacuten de conexionesv Obtener y establecer los coacutedigos head de documentos HTMLv Obtener y establecer los coacutedigos end de documentos HTML

Encontraraacute maacutes informacioacuten sobre los servlets en general en la seccioacuten Consulta o referencia

IBM Toolbox para Java 239

Javadoc AuthenticationServletJavadoc AS400Servlet

Clase RowDataLa clase RowData es una clase abstracta que proporciona una manera de describir una lista de datos yacceder a ella

Las clases RowData le permiten realizar estas tareasv Obtener y establecer la posicioacuten actualv Obtener los datos de fila situados en una columna dada utilizando el meacutetodo getObject()v Obtener los metadatos de la filav Obtener o establecer las propiedades de un objeto situado en una columna dadav Obtener el nuacutemero de filas de la lista mediante el meacutetodo length()

Posicioacuten de RowData

Hay varios meacutetodos que permiten obtener y establecer la posicioacuten actual dentro de una lista La tablasiguiente indica los meacutetodos para establecer y obtener correspondientes a las clases RowData

Meacutetodos para establecer Meacutetodos para obtener

absolute() next() getCurrentPosition()

afterLast() previous() isAfterLast()

beforeFirst() relative() isBeforeFirst()

first() isFirst()

last() isLast()

Informacioacuten relacionadaJavadoc RowData

Clase ListRowData

La clase ListRowData de IBM Toolbox para Java representa una lista de datos en formato de tabla En latabla cada fila contiene un nuacutemero finito de columnas determinado por el objeto ListMetaData y cadacolumna dentro de una fila contiene un elemento de datos individual Los datos pueden corresponder aun directorio del sistema de archivos integrado a una lista de trabajos a una lista de impresoras o a otrosdiversos datos

La clase ListRowData le permite llevar a cabo estas tareasv Antildeadir y eliminar filas de la lista de resultadosv Obtener y establecer la filav Obtener informacioacuten sobre las columnas de la lista con el meacutetodo getMetaData()v Establecer informacioacuten de columna con el meacutetodo setMetaData()

La clase ListRowData representa una lista de datos Mediante las clases de acceso de IBM Toolbox paraJava la clase ListRowData puede representar numerosos tipos de informacioacuten entre ellos los siguientesv Un directorio del sistema de archivos integradov Una lista de trabajosv Una lista de mensajes de una cola de mensajesv Una lista de usuariosv Una lista de impresoras

240 IBM Toolbox para Java IBM Toolbox para Java

Ejemplo

El ejemplo siguiente muestra coacutemo funcionan las clases ListRowData y HTMLTableConverter El ejemplomuestra el coacutedigo Java el coacutedigo HTML y el aspecto HTML

ldquoEjemplo coacutemo se utiliza ListRowDatardquo en la paacutegina 533Javadoc ListRowData

Clase RecordListRowData

La clase RecordListRowData de IBM Toolbox para Java permite realizar las siguientes accionesv Antildeadir y eliminar filas de la lista de registrosv Obtener y establecer la filav Establecer el formato de registro con el meacutetodo setRecordFormatv Obtener el formato de registro

La clase RecordListRowData representa una lista de registros Los registros se pueden obtener delservidor con distintos formatos tales comov Un registro que deba leerse de un archivo del servidor o escribirse en eacutelv Una entrada de una cola de datosv Los datos de paraacutemetro de una llamada a programav Los datos que se devuelvan y necesiten convertirse entre el formato del servidor y el formato Java

Este ejemplo muestra coacutemo funcionan las clases RecordListRowData y HTMLTableConverter Muestra elcoacutedigo Java el coacutedigo HTML y el aspecto HTMLInformacioacuten relacionadaJavadoc RecordListRowData

Clase ResourceListRowData

La clase ResourceListRowData de IBM Toolbox para Java representa una lista de recursos de datosUtilice objetos ResourceListRowData para representar cualquier implementacioacuten de la interfazResourceList

A las listas de recursos se les da el formato de una serie de filas y cada una de las filas contiene unnuacutemero finito de columnas que viene determinado por la cantidad de ID de atributo de columna Cadacolumna de una fila contiene un elemento de datos individual

La clase ResourceListRowData proporciona meacutetodos que permiten llevar a cabo las acciones siguientesv Obtener y establecer los ID de atributo de columnav Obtener y establecer la lista de recursosv Recuperar el nuacutemero de filas de la listav Obtener los datos de columna de la fila actualv Obtener la lista de propiedades del objeto de datosv gtObtener los metadatos de la lista

Ejemplo visualizar una lista de recursos en un servlet

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

IBM Toolbox para Java 241

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Informacioacuten relacionadaJavadoc ResourceListRowData

Clase QLResultSetRowData

La clase SQLResultSetRowData representa un conjunto de resultados de SQL en forma de lista de datosEstos datos los genera una sentencia SQL mediante JDBC Con los meacutetodos proporcionados puedeobtener y establecer los metadatos del conjunto de resultados

Este ejemplo muestra coacutemo funcionan las clases ListRowData y HTMLTableConverter Muestra el coacutedigoJava el coacutedigo HTML y el aspecto HTMLReferencia relacionadaldquoClases JDBCrdquo en la paacutegina 62JDBC es una interfaz de programas de aplicacioacuten (API) incluida en la plataforma Java que permite a losprogramas Java conectar con una gran variedad de bases de datosInformacioacuten relacionadaJavadoc SQLResultSetRowData

Clases RowMetaDataLa clase RowMetaData define una interfaz que se utiliza para obtener informacioacuten acerca de las columnasde un objeto RowData

Con las clases RowMetaData puede hacer estas tareasv Obtener el nuacutemero de columnasv Obtener el nombre tipo o tamantildeo de la columnav Obtener o establecer la etiqueta de columnav Obtener la precisioacuten o la escala de los datos de columnav Determinar si los datos de una columna son datos de textoInformacioacuten relacionadaJavadoc RowMetaData

Clase ListMetaData

La clase ListMetaData de IBM Toolbox para Java permite obtener informacioacuten acerca de las columnas deuna clase ListRowData y cambiar sus valores Utiliza el meacutetodo setColumns() para establecer el nuacutemerode columnas borrando la informacioacuten de columna que pudiera haber antes Alternativamente tambieacutenpuede usted pasar el nuacutemero de columnas cuando establezca los paraacutemetros del constructor

Ejemplo

El ejemplo siguiente muestra coacutemo funcionan las clases ListMetaData ListRowData yHTMLTableConverter Muestra el coacutedigo Java el coacutedigo HTML y el aspecto HTML

242 IBM Toolbox para Java IBM Toolbox para Java

ldquoEjemplo coacutemo se utiliza ListRowDatardquo en la paacutegina 533Javadoc ListMetaDataldquoClase ListRowDatardquo en la paacutegina 240La clase ListRowData de IBM Toolbox para Java representa una lista de datos en formato de tabla Enla tabla cada fila contiene un nuacutemero finito de columnas determinado por el objeto ListMetaData ycada columna dentro de una fila contiene un elemento de datos individual Los datos puedencorresponder a un directorio del sistema de archivos integrado a una lista de trabajos a una lista deimpresoras o a otros diversos datos

Clase RecordFormatMetaData

La clase RecordFormatMetaData utiliza la clase RecordFormat de IBM Toolbox para Java Le permiteproporcionar el formato de registro cuando establezca los paraacutemetros del constructor o bien utilizar losmeacutetodos get y set para acceder al formato de registro

El ejemplo siguiente muestra coacutemo se crea un objeto RecordFormatMetaData Cree un objeto RecordFormatMetaData a partir de un formato de registro de un archivo secuencialRecordFormat recordFormat = sequentialFilegetRecordFormat()RecordFormatMetaData metadata = new RecordFormatMetaData(recordFormat)

Visualice los nombres de las columnas del archivoint numberOfColumns = metadatagetColumnCount()for (int column=0 column lt numberOfColumns column++)

Systemoutprintln(metadatagetColumnName(column))

Informacioacuten relacionadaJavadoc RecordFormatMetaDataJavadoc RecordFormat

Clase SQLResultSetMetaData

La clase SQLResultSetMetaData devuelve informacioacuten acerca de las columnas de un objetoSQLResultSetRowData Puede proporcionar el conjunto de resultados cuando establezca los paraacutemetrosdel constructor o bien utilizar los meacutetodos get y set para acceder a los metadatos del conjunto deresultados

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto SQLResultSetMetaData Cree un objeto SQLResultSetMetaData a partir de los metadatos del conjunto de resultadosSQLResultSetRowData rowdata = new SQLResultSetRowData(resultSet)SQLResultSetMetaData sqlMetadata = rowdatagetMetaData()

Visualice la precisioacuten de las columnas que no sean de textoString name = nullint numberOfColumns = sqlMetadatagetColumnCount()for (int column=0 column lt numberOfColumns column++)

name = sqlMetadatagetColumnName(column)if (sqlMetadataisTextData(column))

Systemoutprintln(La columna + name + contiene datos de texto)else

Systemoutprintln(La columna + name + tiene una precisioacuten igual a +sqlMetadatagetPrecision(column))

Javadoc SQLResultSetMetaData

IBM Toolbox para Java 243

ldquoClase QLResultSetRowDatardquo en la paacutegina 242La clase SQLResultSetRowData representa un conjunto de resultados de SQL en forma de lista dedatos Estos datos los genera una sentencia SQL mediante JDBC Con los meacutetodos proporcionadospuede obtener y establecer los metadatos del conjunto de resultados

Clases conversorasLas clases conversoras de IBM Toolbox para Java permiten convertir los datos de las filas en matrices detipo serie con formato

El resultado tiene formato HTML y estaacute preparado para presentarse en una paacutegina HTML Las clases quese encargan de convertir son las siguientes

Clase StringConverter

La clase StringConverter es una clase abstracta que representa un conversor de tipo serie de los datos deuna fila Proporciona un meacutetodo convert() para convertir los datos de la fila Este meacutetodo devuelve unarepresentacioacuten en forma de matriz de series de los datos de esa filaInformacioacuten relacionadaJavadoc StringConverter

Clase HTMLFormConverter

Las clases HTMLFormConverter de IBM Toolbox para Java ampliacutean la clase StringConverterproporcionando un meacutetodo de conversioacuten adicional llamado convertToForms() Este meacutetodo convierte losdatos de las filas en una matriz de tablas HTML de una sola fila Estos coacutedigos de tabla le permitenvisualizar la informacioacuten formateada en un navegador

Para adaptar el aspecto del formulario HTML puede utilizar los diversos meacutetodos get y set a fin de ver ocambiar los atributos del formulario Por ejemplo entre los atributos que puede establecer se encuentranlos siguientesv Alineacioacutenv Espaciado de casillasv Hiperenlaces de cabecerav Anchura

Ejemplo coacutemo se utiliza HTMLFormConverter

El ejemplo siguiente muestra coacutemo se utiliza HTMLFormConverter (Puede compilar y ejecutar esteejemplo con un servidor Web en ejecucioacuten)

Coacutemo se utiliza HTMLFormConverterReferencia relacionadaldquoClase StringConverterrdquoLa clase StringConverter es una clase abstracta que representa un conversor de tipo serie de los datos deuna fila Proporciona un meacutetodo convert() para convertir los datos de la fila Este meacutetodo devuelve unarepresentacioacuten en forma de matriz de series de los datos de esa filaInformacioacuten relacionadaJavadoc HTMLFormConverter

Clase HTMLTableConverter

La clase HTMLTableConverter ampliacutea la clase StringConverter proporcionando un meacutetodoconvertToTables() Este meacutetodo convierte los datos de las filas en una matriz de tablas HTML que unservlet puede utilizar para visualizar la lista en un navegador

244 IBM Toolbox para Java IBM Toolbox para Java

Los meacutetodos getTable() y setTable() le permiten elegir una tabla predeterminada que se utilizaraacute durantela conversioacuten Puede establecer cabeceras de tabla dentro del objeto tabla HTML o puede utilizar losmetadatos para la informacioacuten de cabecera estableciendo para ello el valor true en el meacutetodosetUseMetaData()

El meacutetodo setMaximumTableSize() le permite limitar el nuacutemero de filas de una sola tabla Si todos losdatos de las filas no caben en el tamantildeo de tabla especificado el conversor generaraacute otro objeto tablaHTML en la matriz de salida Este proceso continuaraacute hasta que se hayan convertido los datos de todaslas filas

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase HTMLTableConverterv Ejemplo coacutemo se utiliza ListRowDatav Ejemplo coacutemo se utiliza RecordListRowDatav Ejemplo coacutemo se utiliza SQLResultSetRowDatav Ejemplo presentar un objeto ResourceList en un servlet

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Javadoc HTMLTableConverter

Clases de utilidadesLas clases de utilidades permiten realizar tareas administrativas por ejemplo utilizar la claseAS400JarMaker

IBM Toolbox para Java ofrece las siguientes utilidades

Clases de instalacioacuten y actualizacioacuten en clientePara la mayoriacutea de objetivos de instalacioacuten y actualizacioacuten se puede hacer referencia a las clases de IBMToolbox para Java en la ubicacioacuten que tienen en el sistema de archivos integrado en el servidor

Dado que se aplican arreglos temporales de programa (PTF) a esta ubicacioacuten los programas Java queacceden directamente a estas clases en el servidor reciben estas actualizaciones de modo automaacutetico Peroel acceso a las clases desde el servidor no siempre funciona en concreto en las situaciones siguientesv Si el enlace de comunicaciones que conecta el servidor y el cliente es de baja velocidad el rendimiento

que supone cargar las clases desde el servidor puede ser inaceptable

IBM Toolbox para Java 245

v Si las aplicaciones Java utilizan la variable de entorno CLASSPATH para acceder a las clases que hayen el sistema de archivos del cliente es necesario que IBM i Access para Windows redirija al servidorlas llamadas al sistema de archivos Tal vez no sea posible que IBM i Access para Windows resida en elcliente

En estos casos instalar las clases en el cliente es una solucioacuten mejor

AS400ToolboxJarMakerMientras que el formato de archivo JAR se disentildeoacute para agilizar la bajada de los archivos de programaJava AS400ToolboxJarMaker genera una carga auacuten maacutes raacutepida de un archivo JAR de IBM Toolbox paraJava mediante su capacidad de crear un archivo JAR maacutes pequentildeo a partir de uno maacutes grande

Ademaacutes la clase AS400ToolboxJarMaker puede descomprimir un archivo JAR para que asiacute sea posibleacceder a los archivos de contenido individuales para uso baacutesico

Flexibilidad de AS400ToolboxJarMaker

Todas las funciones de AS400ToolboxJarMaker se llevan a cabo con la clase JarMaker y la subclaseAS400ToolboxJarMakerv La herramienta JarMaker geneacuterica funciona en cualquier archivo JAR o Zip subdivide un archivo JAR

o reduce el tamantildeo de un archivo JAR eliminando las clases que no se usanv AS400ToolboxJarMaker personaliza y ampliacutea las funciones de JarMaker para facilitar su uso con los

archivos JAR de IBM Toolbox para Java

En funcioacuten de sus necesidades puede invocar los meacutetodos de AS400ToolboxJarMaker desde dentro delprograma Java o desde una liacutenea de mandatos Para efectuar una llamada a AS400ToolboxJarMaker desdela liacutenea de mandatos utilice la sintaxis que se indica a continuacioacuten

java utilitiesJarMaker [opciones]

dondev opciones = una o varias de las opciones disponibles

Si desea obtener un conjunto completo de las opciones disponibles para ejecutarse en una solicitud deliacutenea de mandatos consulte lo siguiente en el Javadocv Opciones para la clase base JarMakerv Opciones ampliadas para la subclase AS400ToolboxJarMaker

Utilizacioacuten de AS400ToolboxJarMaker

Puede emplear AS400ToolboxJarMaker para trabajar con los archivos JAR de varios modosv Descomprimir un archivo empaquetado dentro de un archivo JARv Subdividir un archivo JAR grande en varios archivos JAR maacutes pequentildeosv Excluir los archivos de IBM Toolbox para Java que la aplicacioacuten no necesita ejecutar

Descompresioacuten de un archivo JAR

Suponga que desea descomprimir un uacutenico archivo empaquetado dentro de un archivo JARAS400ToolboxJarMaker le permite expandir el archivo en uno de estos directoriosv Directorio actual extract(jarFile)v Otro directorio extract(jarFile outputDirectory)

Por ejemplo el coacutedigo siguiente hace que del archivo jt400jar se extraigan AS400class y todas sus clasesdependientes

246 IBM Toolbox para Java IBM Toolbox para Java

java utilitiesAS400ToolboxJarMaker -source jt400jar-extract outputDir-requiredFile comibmas400accessAS400class

Subdivisioacuten de un archivo JAR individual en varios archivos JAR maacutes pequentildeos

Suponga que desea subdividir un archivo JAR de gran tamantildeo en archivos JAR maacutes pequentildeos enfuncioacuten de su preferencia para el tamantildeo maacuteximo de archivo JAR AS400ToolboxJarMaker de acuerdocon ello le proporciona la funcioacuten split(jarFile splitSize)

En el coacutedigo que figura a continuacioacuten jt400jar se subdivide en una serie de archivos JAR maacutes pequentildeosninguno de los cuales tiene maacutes de 300 KB

java utilitiesAS400ToolboxJarMaker -split 300

Eliminacioacuten de archivos no utilizados de un archivo JAR

Con AS400ToolboxJarMaker puede excluir todos los archivos de IBM Toolbox para Java que su aplicacioacutenno necesite para ello basta con que seleccione uacutenicamente los componentes idiomas y CCSID de IBMToolbox para Java necesarios para que se ejecute la aplicacioacuten AS400ToolboxJarMaker tambieacuten leproporciona la opcioacuten de incluir o excluir los archivos de JavaBean asociados a los componentes que haelegido

Por ejemplo el mandato siguiente crea un archivo JAR que contiene uacutenicamente las clases de IBMToolbox para Java necesarias para que funcionen los componentes CommandCall y ProgramCall de IBMToolbox para Java

java utilitiesAS400ToolboxJarMaker -component CommandCallProgramCall

Ademaacutes si no es necesario hacer que las series de texto se conviertan entre Unicode y las tablas deconversioacuten del juego de caracteres de doble byte (DBCS) se puede crear un archivo JAR cuyo tamantildeotenga 400 KB menos tan solo con omitir las tablas de conversioacuten innecesarias con la opcioacuten -ccsid

java utilitiesAS400ToolboxJarMaker -component CommandCallProgramCall -ccsid 61952

Nota las clases conversoras no se incluyen junto con las clases de llamada a programa Al incluir lasclases de llamada a programa tambieacuten deberaacute incluir expliacutecitamente las clases conversoras utilizadas porel programa por medio de la opcioacuten -ccsid

Javadoc JarMakerJavadoc AS400ToolboxJarMaker

Componentes soportados en IBM Toolbox para Java

En la tabla siguiente figuran los ID de componente que puede especificar al invocar la herramientaAS400ToolboxJarMakerv La columna Componente muestra el nombre comuacuten del componentev La columna Palabra clave indica la palabra clave que debe especificar al utilizar el coacutedigo de opcioacuten

-componentv La columna Constante muestra el valor de Integer que debe especificar en setComponents() y

getComponents()

Componente Palabra clave Constante

Objeto de servidor AS400 AS400ToolboxJarMakerAS400

Llamada amandato

CommandCall AS400ToolboxJarMakerCOMMAND_CALL

Agrupacioacuten deconexiones

ConnectionPool AS400ToolboxJarMakerCONNECTION_POOL

IBM Toolbox para Java 247

Componente Palabra clave Constante

Aacutereas de datos DataArea AS400ToolboxJarMakerDATA_AREA

Conversioacuten ydescripcioacuten dedatos

DataDescription AS400ToolboxJarMakerDATA_DESCRIPTION

Colas de datos DataQueue AS400ToolboxJarMakerDATA_QUEUE

Certificadosdigitales

DigitalCertificate AS400ToolboxJarMakerDIGITAL_CERTIFICATE

FTP FTP AS400ToolboxJarMakerFTP

Sistema dearchivos integrado

IntegratedFileSystem AS400ToolboxJarMakerINTEGRATED_FILE_SYSTEM

JAAS JAAS AS400ToolboxJarMakerJAAS

Llamada aaplicacioacuten Java

JavaApplicationCall AS400ToolboxJarMakerJAVA_APPLICATION_CALL

JDBC JDBC AS400ToolboxJarMakerJDBC

Trabajos y colas detrabajos

Job AS400ToolboxJarMakerJOB

Mensajes y colasde mensajes

Message AS400ToolboxJarMakerMESSAGE

Tipos de datosnumeacutericos

NumericDataTypes AS400ToolboxJarMakerNUMERIC_DATA_TYPES

NetServer NetServer AS400ToolboxJarMakerNETSERVER

Impresioacuten de red Print AS400ToolboxJarMakerPRINT

Llamada aprograma

ProgramCall AS400ToolboxJarMakerPROGRAM_CALL

Acceso a nivel deregistro

RecordLevelAccess AS400ToolboxJarMakerRECORD_LEVEL_ACCESS

Servidor seguro SecureAS400 AS400ToolboxJarMakerSECURE_AS400

Llamada aprograma deservicio

ServiceProgramCall AS400ToolboxJarMakerSERVICE_PROGRAM_CALL

Estado del sistema SystemStatus AS400ToolboxJarMakerSYSTEM_STATUS

Valores del sistema SystemValue AS400ToolboxJarMakerSYSTEM_VALUE

Rastreo yanotaciones

Rastreo AS400ToolboxJarMakerTRACE

Usuarios y grupos User AS400ToolboxJarMakerUSER

Espacios deusuario

UserSpace AS400ToolboxJarMakerUSER_SPACE

Objeto de servidorvisual

AS400Visual AS400ToolboxJarMakerAS400_VISUAL

Llamada amandato visual

CommandCallVisual AS400ToolboxJarMakerCOMMAND_CALL_VISUAL

Colas de datosvisuales

DataQueueVisual AS400ToolboxJarMakerDATA_QUEUE_VISUAL

Sistema dearchivos integradovisual

IntegratedFileSystemVisual AS400ToolboxJarMakerINTEGRATED_FILE_SYSTEM_VISUAL

248 IBM Toolbox para Java IBM Toolbox para Java

Componente Palabra clave Constante

Llamada aaplicacioacuten Javavisual

JavaApplicationCallVisual AS400ToolboxJarMakerJAVA_APPLICATION_CALL_VISUAL

JDBC visual JDBCVisual AS400ToolboxJarMakerJDBC_VISUAL

Trabajos y colas detrabajos visuales

JobVisual AS400ToolboxJarMakerJOB_VISUAL

Mensajes y colasde mensajesvisuales

MessageVisual AS400ToolboxJarMakerMESSAGE_VISUAL

Impresioacuten de redvisual

PrintVisual AS400ToolboxJarMakerPRINT_VISUAL

Llamada aprograma visual

ProgramCallVisual AS400ToolboxJarMakerPROGRAM_CALL_VISUAL

Acceso a nivel deregistro visual

RecordLevelAccessVisual AS400ToolboxJarMakerRECORD_LEVEL_ACCESS_VISUAL

Usuarios y gruposvisuales

UserVisual AS400ToolboxJarMakerUSER_VISUAL

Valores de CCSID y codificacioacuten soportados por IBM Toolbox para Java

IBM Toolbox para Java se suministra con un conjunto de tablas de conversioacuten denominadas seguacuten elCCSID

Las clases de IBM Toolbox para Java (como por ejemplo CharConverter) utilizan internamente estas tablasal convertir los datos transferidos a o desde un sistema IBM i Por ejemplo la tabla de conversioacutencorrespondiente al CCSID 1027 estaacute en el archivo comibmas400accessConvTable1027class Las tablasde conversioacuten de los CCSID siguientes se incluyen en el archivo JAR de IBM Toolbox para Java con elJDK se da soporte a otras codificaciones El servidor central del servidor ya no se utiliza para bajar tablasen tiempo de ejecucioacuten Cualquier CCSID especificado para el que no se encuentre una tabla deconversioacuten o una codificacioacuten de JDK haraacute que se genere una excepcioacuten Algunas de estas tablas puedenser redundantes respecto a las tablas incluidas en JDK IBM Toolbox para Java da soporte actualmente alos 122 CCSID de IBM i siguientes

Encontraraacute maacutes informacioacuten acerca de los CCSID asiacute como una lista completa de los CCSID reconocidosen la plataforma IBM i en el tema Globalizacioacuten

CCSID soportados en IBM Toolbox para Java

CCSID Formato Descripcioacuten

37 EBCDIC de un solo byte Estados Unidos y otros

273 EBCDIC de un solo byte Austria Alemania

277 EBCDIC de un solo byte Dinamarca Noruega

278 EBCDIC de un solo byte Finlandia Suecia

280 EBCDIC de un solo byte Italia

284 EBCDIC de un solo byte Espantildea Latinoameacuterica

285 EBCDIC de un solo byte Reino Unido

290 EBCDIC de un solo byte Japoneacutes Katakana (uacutenicamente de unsolo byte)

297 EBCDIC de un solo byte Francia

IBM Toolbox para Java 249

CCSID Formato Descripcioacuten

300 EBCDIC de doble byte Japoneacutes graacutefico (subconjunto de16684)

367 ASCIIISOWindows ASCII (estaacutendar ANSI X34)

420 EBCDIC de un solo byte(bidireccional)

Aacuterabe EBCDIC ST4

423 EBCDIC de un solo byte Griego (para compatibilidad veacutease875)

424 EBCDIC de un solo byte(bidireccional)

Hebreo EBCDIC ST4

437 ASCIIISOWindows ASCII (Datos de PC EEUU)

500 EBCDIC de un solo byte Latino 1 (MNCS)

720 ASCIIISOWindows Aacuterabe (MS-DOS)

737 ASCIIISOWindows Griego (MS-DOS)

775 ASCIIISOWindows Baacuteltico (MS-DOS)

813 ASCIIISOWindows ISO 8859-7 (Grecolatino)

819 ASCIIISOWindows ISO 8859-1 (Latino 1)

833 EBCDIC de un solo byte Coreano (uacutenicamente de un solobyte)

834 EBCDIC de doble byte Coreano graacutefico (subconjunto de4930)

835 EBCDIC de doble byte Chino tradicional graacutefico

836 EBCDIC de un solo byte Chino simplificado (uacutenicamente deun solo byte)

837 EBCDIC de doble byte Chino simplificado graacutefico

838 EBCDIC de un solo byte Tailandeacutes

850 ASCIIISOWindows Latino 1

851 ASCIIISOWindows Griego

852 ASCIIISOWindows Latino 2

855 ASCIIISOWindows Ciriacutelico

857 ASCIIISOWindows Turco

860 ASCIIISOWindows Portugueacutes

861 ASCIIISOWindows Islandeacutes

862 ASCIIISOWindows (bidireccional) Hebreo ASCII ST4

863 ASCIIISOWindows Canadaacute

864 ASCIIISOWindows (bidireccional) Aacuterabe ASCII ST5

865 ASCIIISOWindows DinamarcaNoruega

866 ASCIIISOWindows CiriacutelicoRuso

869 ASCIIISOWindows Griego

870 EBCDIC de un solo byte Latino 2

871 EBCDIC de un solo byte Islandeacutes

874 ASCIIISOWindows Tailandeacutes (subconjunto de 9066)

875 EBCDIC de un solo byte Griego

878 ASCIIISOWindows Ruso

250 IBM Toolbox para Java IBM Toolbox para Java

CCSID Formato Descripcioacuten

880 EBCDIC de un solo byte Ciriacutelico multilinguumle (paracompatibilidad veacutease 1025)

912 ASCIIISOWindows ISO 8859-2 (Latino 2)

914 ASCIIISOWindows ISO 8859-4 (Latino 4)

915 ASCIIISOWindows ISO 8859-5 (ciriacutelico de 8 bits)

916 ASCIIISOWindows (bidireccional) ISO 8859-8 (hebreo) ST5

920 ASCIIISOWindows ISO 8859-9 (Latino 5)

921 ASCIIISOWindows ISO 8859-13 (baacuteltico de 8 bits)

922 ASCIIISOWindows Estonia ISO-8

923 ASCIIISOWindows ISO 8859-15 (Latino 9)

930 EBCDIC de byte mixto Japoneacutes (subconjunto de 5026)

933 EBCDIC de byte mixto Coreano (subconjunto de 1364)

935 EBCDIC de byte mixto Chino simplificado (subconjunto de1388)

937 EBCDIC de byte mixto Chino tradicional

939 EBCDIC de byte mixto Japoneacutes (subconjunto de 5035)

1025 EBCDIC de un solo byte Ciriacutelico

1026 EBCDIC de un solo byte Turco

1027 EBCDIC de un solo byte Japoneacutes latino (uacutenicamente de unsolo byte)

1046 ASCIIISOWindows (bidireccional) Windows Aacuterabe ST5

1089 ASCIIISOWindows (bidireccional) ISO 8859-6 (Aacuterabe) ST5

1112 EBCDIC de un solo byte Baacuteltico multilinguumle

1122 EBCDIC de un solo byte Estonio

1123 EBCDIC de un solo byte Ucrania

1125 ASCIIISOWindows Ucrania

1129 ASCIIISOWindows Vietnamita

1130 EBCDIC de un solo byte Vietnamita

1131 ASCIIISOWindows Bielorrusia

1132 EBCDIC de un solo byte Lao

1140 EBCDIC de un solo byte Estados Unidos y otros (con soportepara Euro)

1141 EBCDIC de un solo byte Austria Alemania (con soporte paraEuro)

1142 EBCDIC de un solo byte Dinamarca Noruega (con soportepara Euro)

1143 EBCDIC de un solo byte Finlandia Suecia (con soporte paraEuro)

1144 EBCDIC de un solo byte Italia (con soporte para Euro)

1145 EBCDIC de un solo byte Espantildea Latinoameacuterica (con soportepara Euro)

1146 EBCDIC de un solo byte Reino Unido (con soporte para Euro)

1147 EBCDIC de un solo byte Francia (con soporte para Euro)

IBM Toolbox para Java 251

CCSID Formato Descripcioacuten

1148 EBCDIC de un solo byte Latino 1 (MNCS) (soporte para Euro)

1149 EBCDIC de un solo byte Islandia (con soporte para Euro)

1200 Unicode Unicode UCS-2 (little-endian)

1250 ASCIIISOWindows Windows Latin-2

1251 ASCIIISOWindows Windows Ciriacutelico

1252 ASCIIISOWindows Windows Latin-1

1253 ASCIIISOWindows Windows Griego

1254 ASCIIISOWindows Windows Turquiacutea

1255 ASCIIISOWindows (bidireccional) Windows Hebreo ST5

1256 ASCIIISOWindows (bidireccional) Windows Aacuterabe ST5

1257 ASCIIISOWindows Windows Baacuteltico

1258 ASCIIISOWindows Windows Vietnam

1364 EBCDIC de byte mixto Japoneacutes

1388 EBCDIC de byte mixto Chino simplificado

1399 EBCDIC de byte mixto Japoneacutes (en V4R5 y superior)

4396 EBCDIC de doble byte Japoneacutes (subconjunto de 300)

4930 EBCDIC de doble byte Coreano

4931 EBCDIC de doble byte Chino tradicional (subconjunto de835)

4933 EBCDIC de doble byte Chino simplificado GBK graacutefico

4948 ASCIIISOWindows Latino 2 (subconjunto de 852)

4951 ASCIIISOWindows Ciriacutelico (subconjunto de 855)

5026 EBCDIC de byte mixto Japoneacutes

5035 EBCDIC de byte mixto Japoneacutes

5123 EBCDIC de un solo byte Japoneacutes (uacutenicamente de un solo bytecon soporte para Euro)

5351 ASCIIISOWindows (bidireccional) Windows Hebreo (soporte para Euro)ST5

8492 EBCDIC de doble byte Japoneacutes (subconjunto de 300)

8612 EBCDIC de un solo byte Aacuterabe EBCDIC ST5

9026 EBCDIC de doble byte Coreano (subconjunto de 834)

9029 EBCDIC de doble byte Chino simplificado (subconjunto de4933)

9066 ASCIIISOWindows Tailandeacutes (SBCS ampliado)

12588 EBCDIC de doble byte Japoneacutes (subconjunto de 300)

13122 EBCDIC de doble byte Coreano (subconjunto de 834)

16684 EBCDIC de doble byte Japoneacutes (disponible en V4R5)

17218 EBCDIC de doble byte Coreano (subconjunto de 834)

12708 EBCDIC de un solo byte Aacuterabe EBCDIC ST7

13488 Unicode Unicode UCS-2 (big-endian)

28709 EBCDIC de un solo byte Chino tradicional (uacutenicamente de unsolo byte)

252 IBM Toolbox para Java IBM Toolbox para Java

CCSID Formato Descripcioacuten

61952 Unicode IBM i Unicode (utilizadoprincipalmente en el sistema dearchivos integrado)

62211 EBCDIC de un solo byte Hebreo EBCDIC ST5

62224 EBCDIC de un solo byte Aacuterabe EBCDIC ST6

62235 EBCDIC de un solo byte Hebreo EBCDIC ST6

62245 EBCDIC de un solo byte Hebreo EBCDIC ST10

Clase CommandHelpRetrieverLa clase CommandHelpRetriever recupera texto de ayuda para los mandatos CL (Control Language) deIBM i y genera ese texto en formato HTML o UIM (User Interface Manager) Puede ejecutarCommandHelpRetriever desde una liacutenea de mandatos o incorporar la funcioacuten al programa Java

Para utilizar CommandHelpRetriever el servidor debe tener un analizador XML y un procesador XSL enla variable de entorno CLASSPATH Para obtener maacutes informacioacuten consulte ldquoAnalizador XML yprocesador XSLTrdquo en la paacutegina 330

Asimismo el mandato CL Generar documentacioacuten de mandato (GENCMDDOC) utiliza la claseCommandHelpRetriever Asiacute puede emplear el mandato GENCMDDOC simplemente para aprovecharlas posibilidades que proporciona la clase CommandHelpRetriever Para obtener maacutes informacioacutenconsulte la seccioacuten Generar documentacioacuten de mandato (GENCMDDOC) del tema de consulta sobre CL

Ejecutar CommandHelpRetriever desde una liacutenea de mandatos

Puede ejecutar la clase CommandHelpRetriever como un programa de liacutenea de mandatos autoacutenomo Paraejecutar CommandHelpRetriever desde una liacutenea de mandatos debe pasar los siguientes paraacutemetrosmiacutenimosv La biblioteca del servidor que contiene el mandato CL Los mandatos del sistema se encuentran en la

biblioteca QSYSv El mandato CL

Tambieacuten puede pasar paraacutemetros opcionales para CommandHelpRetriever tales como el servidor el IDde usuario la contrasentildea y la ubicacioacuten del archivo generado

Para obtener maacutes informacioacuten consulte la documentacioacuten de consulta de javadocs acerca deCommandHelpRetriever

Ejemplo coacutemo se utiliza CommandHelpRetriever desde una liacutenea de mandatos

El ejemplo siguiente genera un archivo HTML denominado CRTLIBhtml en el directorio actual

Nota el mandato de ejemplo aparece en dos liacuteneas solo con fines de visualizacioacuten Escriba el mandato enuna sola liacutenea

java comibmas400utilCommandHelpRetriever -library QSYS -command CRTLIB-system MySystem -userid MyUserID -password MyPassword

Incorporar la clase CommandHelpRetriever en el programa

Tambieacuten puede utilizar la clase CommandHelpRetriever en la aplicacioacuten Java para ver la documentacioacutende ayuda referida a una serie de mandatos CL especificados Tras crear un objetoCommandHelpRetriever puede utilizar los meacutetodos generateHTML y generateUIM para generardocumentacioacuten de ayuda en ambos formatos

IBM Toolbox para Java 253

Cuando utilice generateHTML() podraacute ver el documento HTML generado en el grupo de paneles delmandato o podraacute especificar otro grupo de paneles

El ejemplo siguiente crea un objeto CommandHelpRetriever y genera objetos String que representan ladocumentacioacuten HTML y UIM correspondiente al mandato CRTLIB

CommandHelpRetriever helpGenerator = new CommandHelpRetriever()AS400 system = new AS400(MySystem MyUserID MyPassword)Command crtlibCommand = new Command(system QSYSLIBCRTLIBCMD)String html = helpGeneratorgenerateHTML(crtlibCommand)String uim = helpGeneratorgenerateUIM(crtlibCommand)

Informacioacuten relacionadaJavadoc CommandHelpRetriever

Clase CommandPrompterLa clase CommandPrompter de IBM Toolbox para Java solicita el paraacutemetro en un mandato determinado

La clase CommandPrompter ofrece funciones parecidas a la solicitud de mandatos CL de (pulsando F4)

Para utilizar CommandPrompter es necesario tener los siguientes archivos JAR en la CLASSPATHv jt400jarv jui400jarv util400jarv jhalljar

Tambieacuten debe tener un analizador XML en la CLASSPATH Para obtener maacutes informacioacuten sobre el uso deun analizador XML adecuado consulte la paacutegina siguiente

ldquoAnalizador XML y procesador XSLTrdquo en la paacutegina 330

Todos los archivos JAR excepto jhalljar se incluyen en IBM Toolbox para Java Para obtener maacutesinformacioacuten acerca de los archivos JAR de IBM Toolbox para Java consulte la seccioacuten Archivos Jar Para

obtener maacutes informacioacuten sobre coacutemo bajar jhalljar consulte el sitio Web de Sun JavaHelp

Para construir un objeto CommandPrompter se le pasan paraacutemetros para el marco padre que inicia elprograma de solicitud el objeto AS400 en el que se solicitaraacute el mandato y la serie del mandato La seriedel mandato puede ser un nombre de mandato una serie de mandato completa o un nombre de mandatoparcial como por ejemplo crt

La visualizacioacuten de CommandPrompter es un diaacutelogo modal que el usuario debe cerrar antes de volveral marco padre CommandPrompter maneja los errores encontrados durante la solicitud En la paacuteginasiguiente encontraraacute un ejemplo de programacioacuten que muestra un modo de utilizar CommandPrompter

ldquoEjemplo coacutemo se utiliza CommandPrompterrdquo en la paacutegina 576

RunJavaApplicationLas clases RunJavaApplication y VRunJavaApplication son programas de utilidad que permiten ejecutarprogramas Java en la JVM de IBM i

A diferencia de las clases JavaApplicationCall y VJavaApplicationCall a las que se llama desde elprograma Java las clases RunJavaApplication y VRunJavaApplication son programas completos

La clase RunJavaApplication es un programa de utilidad de liacutenea de mandatos Permite establecer elentorno (por ejemplo la variable CLASSPATH y las propiedades) del programa Java Primero seespecifica el nombre del programa Java y sus paraacutemetros y despueacutes se inicia el programa Una vez

254 IBM Toolbox para Java IBM Toolbox para Java

iniciado se puede enviar una entrada al programa Java que la recibe por medio de la entrada estaacutendarEl programa Java escribe la salida en la salida estaacutendar y en la salida de errores estaacutendar

El programa de utilidad VRunJavaApplication tiene las mismas posibilidades La diferencia es queVJavaApplicationCall utiliza una interfaz graacutefica de usuario mientras que JavaApplicationCall es unainterfaz de liacutenea de mandatos

Javadoc RunJavaApplicationJavadoc VRunJavaApplicationldquoClase JavaApplicationCallrdquo en la paacutegina 61La clase JavaApplicationCall proporciona la posibilidad de que el cliente utilice la JVM del servidorpara ejecutar un programa Java que reside en el servidor

JPingLa clase JPing es un programa de utilidad de la liacutenea de mandatos que permite consultar los servidorespara ver queacute servicios estaacuten en ejecucioacuten y queacute puertos estaacuten en servicio Para consultar los servidoresdesde dentro de una aplicacioacuten Java utilice la clase AS400JPing

En el Javadoc de JPing encontraraacute maacutes informacioacuten acerca de coacutemo se utiliza JPing desde dentro de unaaplicacioacuten Java

Para efectuar una llamada a JPing desde la liacutenea de mandatos utilice la sintaxis que se indica acontinuacioacuten

java utilitiesJPing Sistema [opciones]

dondev System = el sistema que desea consultarv [opciones] = una o varias de las opciones disponibles

Opciones

Puede utilizar una o varias de las opciones siguientes En el caso de las opciones que tienen abreviaturasla abreviatura se indica entre pareacutentesis

-help (-h o -)Visualiza el texto de ayuda

-service i_Service (-s i_Service)Especifica un servicio especiacutefico para realizar un ping La accioacuten predeterminada consiste enrealizar un ping de todos los servicios Puede utilizar esta opcioacuten para especificar uno de losservicios siguientes as-file as-netprt as-rmtcmd as-dtaq as-database as-ddm as-central yas-signon

-ssl Especifica si se realizaraacute un ping de los puertos ssl o no La accioacuten predeterminada consiste en norealizar un ping de los puertos ssl

-timeout (-t)Especifica el tiempo de espera en milisegundos El valor predeterminado es 20000 (o 20segundos)

Ejemplo coacutemo se utiliza JPing desde la liacutenea de mandatos

Por ejemplo utilice el mandato siguiente para realizar un ping del servicio as-dtaq incluyendo lospuertos ssl y con un tiempo de espera de 5 segundos

java utilitiesJPing myServer -s as-dtaq -ssl -t 5000

Informacioacuten relacionadaJavadoc JPing

IBM Toolbox para Java 255

Javadoc AS400JPing

Beans de IBM Toolbox para JavaLos JavaBeans son componentes de software reutilizables que estaacuten escritos en Java El componente es unfragmento de coacutedigo de programa que proporciona una unidad funcional bien definida puede ser tanpequentildeo como una etiqueta para un botoacuten de una ventana o tan grande como toda una aplicacioacuten

Los JavaBeans pueden ser componentes visuales o no visuales Aun asiacute los JavaBeans no visualesdisponen de una representacioacuten visual (por ejemplo un icono o un nombre) que permite unamanipulacioacuten visual

Muchas clases puacuteblicas de IBM Toolbox para Java tambieacuten son JavaBeans Estas clases se construyeronseguacuten los estaacutendares JavaBean de Javasoft funcionan como componentes reutilizables Las propiedades ylos meacutetodos correspondientes a un bean de IBM Toolbox para Java son iguales a las propiedades y losmeacutetodos de la clase

Los JavaBeans pueden emplearse dentro de un programa de aplicacioacuten o pueden manipularsevisualmente en las herramientas constructoras como el producto IBM VisualAge para Java

Ejemplos

Los ejemplos siguientes muestran coacutemo utilizar JavaBeans en el programa y coacutemo crear un programa apartir de JavaBeans mediante un constructor visual de beans

ldquoEjemplo coacutedigo de bean de IBM Toolbox para Javardquo en la paacutegina 473

ldquoEjemplo crear beans con un constructor visual de beansrdquo en la paacutegina 475

JDBCJDBC es una interfaz de programas de aplicacioacuten (API) incluida en la plataforma Java que permite a losprogramas Java conectar con una gran variedad de bases de datos

El controlador JDBC de IBM Toolbox para Java permite utilizar interfaces API JDBC para emitirsentencias SQL (Structured Query Language) a las bases de datos del servidor y procesar los resultadosprocedentes de las bases de datos del servidor Tambieacuten puede emplear el controlador JDBC de IBMDeveloper Kit para Java denominado controlador JDBC nativov Utilice el controlador JDBC de IBM Toolbox cuando el programa Java esteacute en un sistema y los archivos

de base de datos se encuentren en otro sistema como en un entorno de clienteservidorv Utilice el controlador JDBC nativo cuando tanto el programa Java como los archivos de base de datos

esteacuten en el mismo servidor

Diferentes versiones de JDBC

Existen distintas versiones de la API JDBC el controlador JDBC de IBM Toolbox para Java da soporte alas versiones siguientesv La API JDBC 30 (los paquetes javasql y javaxsql) se incluye en J2SE Versioacuten 14 y 50v La API JDBC 40 API se incluye en Java SE Versioacuten 6v La API JDBC 41 API se incluye en Java SE Versioacuten 7

Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Javapara IBM i 72En IBM i 72 se han realizado numerosas adiciones al soporte de JDBC

256 IBM Toolbox para Java IBM Toolbox para Java

|

|

|

|

Las mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java se detallan en las seccionessiguientesv ldquoAumentar el soporte de indicacioacuten de fecha y hora de precisioacutenrdquov ldquoPropiedad de conexioacuten JDBC QueryTimeoutMechanism nuevardquo

Aumentar el soporte de indicacioacuten de fecha y hora de precisioacuten

En IBM i 72 la precisioacuten maacutexima de una indicacioacuten de fecha y hora aumenta de 6 a 12 El controladorJDBC de Toolbox se ha mejorado para recuperar estos valores de indicacioacuten de fecha y hora maacutes grandesComo la clase javasqlTimestamp solo soporta 9 diacutegitos de precisioacuten se a creado la claseAS400JDBCTimestamp para manejar aquellos casos en los que los datos del servidor incluyan maacutes de 9diacutegitos de precisioacuten

Propiedad de conexioacuten JDBC QueryTimeoutMechanism nueva

El controlador JDBC de Toolbox implementaba originalmente la caracteriacutestica queryTimeout mediante lacaracteriacutestica QQRYTIMLMT del motor de base de datos Sin embargo este mecanismo no permitefinalizar correctamente las operaciones de larga ejecucioacuten

La propiedad de conexioacuten QueryTimeoutMechanism permite implementar queryTimeout mediante unCANCEL de base de datos Los valores posibles son qqrytimlmt y cancel Si se especifica qqrytimlmt lacaracteriacutestica QQRYTIMLMT del motor de base de datos se utilizaraacute para limitar la ejecucioacuten de lasconsultas Si se especifica cancel la sentencia SQL en ejecucioacuten se cancelaraacute una vez transcurra el tiempode espera especificado

Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Javapara IBM i 71En IBM i 71 se han realizado numerosas adiciones al soporte de JDBC

Las mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java se detallan en las seccionessiguientesv ldquoSoporte de tipo de datos XMLrdquov ldquoActualizaciones de metadatos de base de datosrdquo en la paacutegina 258v ldquoSoporte comprometido actualmenterdquo en la paacutegina 259v ldquoSoporte de tipo de matrizrdquo en la paacutegina 259v ldquoSoporte de nombre de esquema largordquo en la paacutegina 260

Soporte de tipo de datos XML

La especificacioacuten de interfaz de JDBC 40 antildeade nuevos meacutetodos y clases para el soporte de tipo de datosXML IBM Toolbox para Java implementa el soporte XML en su controlador JDBC 40 Esto permite a losclientes JDBC acceder faacutecilmente al soporte XML de IBM i 71

Puede establecer los datos en el objeto JDBC SQLXML pasando varios tipos de datos como por ejemplouna serie Java Como ocurre con los demaacutes tipos de datos de columna de texto IBM Toolbox para Java oel Sistema de gestioacuten de bases de datos (DBMS) realiza las conversiones necesarias de datos XML paraque coincidan con el CCSID de la columna XML

DBMS lee y graba los datos XML utilizando ubicadores SQL

Los datos XML que se enviacutean como entrada al DBMS deben manejarse con algunas reglas especiales parapoder corregir la conversioacuten de CCSID Los datos XML de entrada que tienen una declaracioacuten XML conuna codificacioacuten especificada deben codificar correctamente los datos XML con la codificacioacuten

IBM Toolbox para Java 257

||

|

|

|

|||||

|

|||

|||||

especificada Por ejemplo los datos XML codificados en UTF-16 (serie Java) que tienen especificadoUTF-8 en la codificacioacuten de la declaracioacuten XML son incorrectos Si los datos XML de entrada no tienenninguna declaracioacuten el DBMS espera que la corriente de datos se enviacutee en UTF-8 En este caso IBMToolbox para Java convierte primero los datos XML a UTF-8 antes de enviarlos al DBMS para su proceso

Nota las columnas XML en la base de datos se almacenan sin la declaracioacuten XML Cuando se recuperanlos datos XML la declaracioacuten XML se genera dinaacutemicamente lo que puede hacer que los datos XML nosea ideacutenticos a los datos XML enviados como entrada

El DBMS puede optimizar los datos XML cuando sea necesario Por ejemplo un coacutedigo vaciacuteolttaggtlttaggt se convierte en lttaggt Generalmente si los datos XML de entrada no estaacuten en UTF-16 ytienen una declaracioacuten XML con una codificacioacuten especificada no se pasaraacuten a JDBC a traveacutes dePreparedStatementsetString Esto se debe a que los datos en la serie estaacuten en UTF-16 y no coinciden conla codificacioacuten especificada

Existen algunas reglas que determinan coacutemo se devuelven las declaraciones XML desde una consultaJDBC maneja la visibilidad de la declaracioacuten dependiendo de queacute meacutetodo de obtencioacuten de tipo ResultSetse invoque Los meacutetodos que devuelven caracteres como por ejemplo getString() y getClob() nodevuelven la declaracioacuten XML con los datos Los meacutetodos que devuelven datos binarios como porejemplo getBytes() y getBlob() devolveraacuten la declaracioacuten XML Esto se debe a la diferencia en lacodificacioacuten de la declaracioacuten XML y al CCSID de la columna XML real en la tabla Tenga en cuenta quesi se invoca getString() se devolveraacute una serie Unicode que seraacute distinta del CCSID especificado en lacodificacioacuten de la declaracioacuten XML Debido a esta anomaliacutea la declaracioacuten se descarta a menos que seacceda con meacutetodos de obtencioacuten binarios La recuperacioacuten de coacutedigos XML con meacutetodos como getStringpermitiraacute concatenar faacutecilmente los datos XML con otros datos XML porque ya tendraacuten la declaracioacuteneliminada

El soporte JDBC de XML se implementa en los siguientes meacutetodos JDBC de IBM Toolbox para Javav AS400JDBCConnectioncreateSQLXML()v AS400JDBCSQLXML - todos los meacutetodos en esta nueva clasev AS400JDBCPreparedStatementsetSQLXML(int parameterIndex SQLXML xmlObject)v AS400JDBCCallableStatementsetSQLXML(String parameterName SQLXML xmlObject)v AS400JDBCCallableStatementgetSQLXML(int parameterIndex)v AS400JDBCCallableStatementgetSQLXML(String parameterName)v AS400JDBCResultSetgetSQLXML(int columnIndex)v AS400JDBCResultSetgetSQLXML(String columnLabel)v AS400JDBCResultSetupdateSQLXML(int columnIndex SQLXML xmlObject)v AS400JDBCResultSetupdateSQLXML(String columnLabel SQLXML xmlObject)v AS400JDBCRowSetsetSQLXML(int parameterIndex SQLXML xmlObject)v AS400JDBCRowSetsetSQLXML(String parameterName SQLXML xmlObject)

Actualizaciones de metadatos de base de datos

Los metadatos de base de datos se obtienen invocando los distintos meacutetodos de la claseAS400JDBCDatabaseMetaData A partir de IBM i 71 el comportamiento predeterminado de JDBC de IBMToolbox para Java es obtener estos metadatos a partir de un conjunto de procedimientos almacenadosestaacutendar del sistema Esto alinea IBM Toolbox para Java con el soporte JDBC nativo de IBM i ademaacutes decon los controladores JDBC en otras plataformas Anteriormente a IBM i 71 IBM Toolbox para Javaobteniacutea los metadatos del servidor de datos ROI de los servidores de host Este enfoque ha funcionadocorrectamente y tambieacuten ha mantenido IBM Toolbox para Java alineado con ODBC net y otros clientesde IBM i No obstante el problema con este enfoque es que en IBM todos los controladores JDBC de DB2deben funcionar de la misma forma Para ello se utiliza un conjunto de procedimientos almacenados del

258 IBM Toolbox para Java IBM Toolbox para Java

sistema que son comunes en todas las plataformas DB2 Estos procedimientos almacenados del sistema seinvocan para obtener metadatos de base de datos del sistema

Para proporcionar la compatibilidad con versiones anteriores de la funcionalidad de los metadatos puedeutilizarse una nueva propiedad de conexioacuten metadata source para obligar a JDBC de IBM Toolboxpara Java a utilizar el meacutetodo anterior de recuperacioacuten de metadatos de base de datos

Soporte comprometido actualmente

Pueden producirse puntos muertos y tiempos de espera de bloqueo con los niveles de aislamiento queejecutan el bloqueo a nivel de fila especialmente en las aplicaciones que no estaacuten disentildeadas para evitareste tipo de problemas Algunas aplicaciones de base de datos de alto rendimiento no toleran la espera delos bloqueos que se emiten durante el proceso de transaccioacuten y algunas aplicaciones no toleran elproceso de datos no comprometidos pero continuacutean necesitando un comportamiento de no bloqueo paralas transacciones de lectura

Con la nueva semaacutentica de comprometido actualmente si se habilita el soporte comprometido actualmentesoacutelo se devuelven los datos comprometidos como ocurriacutea anteriormente pero ahora los lectores notienen que esperar a que los grabadores liberen los bloqueos de fila En su lugar los datos devueltos a loslectores se basan en la versioacuten comprometida actualmente es decir los datos anteriores al inicio de laoperacioacuten de grabacioacuten

Esta caracteriacutestica tambieacuten implementa una forma de indicar al gestor de base de datos que debe esperarel resultado cuando encuentre datos en proceso de actualizacioacuten

JDBC de IBM Toolbox para Java ha antildeadido el soporte para la semaacutentica de comprometido actualmenteen los oriacutegenes de datos y las conexiones Este soporte se ha antildeadido con las siguientes actualizaciones declasesv AS400JDBCDataSourceCONCURRENTACCESS_NOT_SETv AS400JDBCDataSourceCONCURRENTACCESS_USE_CURRENTLY_COMMITTEDv AS400JDBCDataSourceCONCURRENTACCESS_WAIT_FOR_OUTCOMEv AS400JDBCDataSourceCONCURRENTACCESS_SKIP_LOCKSv AS400JDBCDataSourcesetConcurrentAccessResolution (int)v AS400JDBCDataSourcegetConcurrentAccessResolution ()v AS400JDBCConnectionsetConcurrentAccessResolution (int)v AS400JDBCConnectiongetConcurrentAccessResolution ()

Nota el establecimiento de la resolucioacuten de acceso simultaacuteneo en la conexioacuten soacutelo afecta a las nuevassentencias creadas en las conexiones posteriores al cambio Las sentencias existentes continuacutean utilizandoel valor que se aplicaba al crear la sentencia Tambieacuten dispone de una propiedad de conexioacuten concurrentaccess resolution para establecer esta informacioacuten

Soporte de tipo de matriz

IBM Toolbox para Java da soporte al tipo de datos de matriz SQL de IBM i 71 en los paraacutemetros deprocedimiento almacenado Las matrices de todos los tipos de DB2 estaacuten soportadas excepto los datosque se devuelven en un ubicador

JDBC de IBM Toolbox para Java antildeade soporte para las matrices como paraacutemetros IN OUT e INOUT enlos procedimientos almacenados No obstante los ResultSets devueltos de los procedimientosalmacenados u otras consultas que contengan matrices no estaacuten soportados

JDBC da soporte a la invocacioacuten de procedimientos almacenados en la clase javasqlCallableStatementque IBM Toolbox para Java implementa en AS400JDBCCallableStatement

IBM Toolbox para Java 259

La especificacioacuten JDBC de Sun establece que los controladores JDBC dan soporte a las matricesimplementando la interfaz javasqlArray La implementacioacuten de IBM Toolbox para Java existe en la clasecomibmas400accessAS400JDBCArray A continuacioacuten se proporcionan las nuevas interfaces y losnuevos meacutetodos que IBM Toolbox para Java ha implementado para dar soporte a las matricesv AS400JDBCPreparedStatementsetArray (int parameterIndex Array x)v AS400JDBCCallableStatementgetArray()v AS400JDBCArraygetResultSet()v AS400JDBCArraygetBaseType()v AS400JDBCArraygetBaseTypeName()v AS400JDBCArrayResultSet - todos los meacutetodos en esta nueva clasev AS400JDBConnectioncreateArrayOf(String typeName Object[] elements)

Nota un AS400JDBCArrayResultSet es una copia local de los datos de matriz de un objeto de interfaz deResultSet

Soporte de nombre de esquema largo

DBMS de IBM i 71 ha antildeadido soporte para los nombres de esquema de 128 bytes JDBC de IBM Toolboxpara Java tambieacuten ha antildeadido soporte para los nombres de esquema largos

IBM Toolbox para Java convierte los esquemas de series Java en CCSID del sistema antes de enviar losdatos al DBMS del host IBM Toolbox para Java permite un nombre de esquema largo como esquemapredeterminado No obstante los nombres de esquema largos en la lista de bibliotecas no estaacutensoportados Si se especifica un nombre de esquema largo en la propiedad libraries se emitiraacute un avisodel host y el rastreo indicando que no se ha antildeadido la biblioteca Si se especifica un nombre de esquemalargo como nombre propio en la propiedad libraries IBM Toolbox para Java continuaraacute estableciendo elnombre como esquema predeterminado pero no se antildeadiraacute a la lista de bibliotecas Los clientes quenecesiten utilizar nombres de esquema largos en la lista de bibliotecas deberaacute utilizar el mandato SETPATH de DB2

Los metadatos de base de datos tambieacuten dan soporte a nombres de esquema largos para los paraacutemetros ylos ResultSets devueltos

Los siguientes meacutetodos de metadatos dan soporte a los nombres de esquema largosv AS400JDBCDatabaseMetadatagetMaxSchemaNameLength()v AS400JDBCDatabaseMetadatagetProcedures(String catalog String schemaPattern String

procedureNamePattern)v AS400JDBCDatabaseMetadatagetProcedureColumns(String catalog String schemaPattern String

procedureNamePattern String columnNamePattern)v AS400JDBCDatabaseMetadatagetTables(String catalog String schemaPattern String tableNamePattern

String types[])v AS400JDBCDatabaseMetadatagetSchemas()v AS400JDBCDatabaseMetadatagetColumns(String catalog String schemaPattern String

tableNamePattern String columnNamePattern)v AS400JDBCDatabaseMetadatagetColumnPrivileges(String catalog String schema String table String

columnNamePattern)v AS400JDBCDatabaseMetadatagetTablePrivileges(String catalog String schemaPattern String

tableNamePattern)v AS400JDBCDatabaseMetadatagetBestRowIdentifier(String catalog String schema String table int

scope boolean nullable)v AS400JDBCDatabaseMetadatagetVersionColumns(String catalog String schema String table)

260 IBM Toolbox para Java IBM Toolbox para Java

v AS400JDBCDatabaseMetadatagetPrimaryKeys(String catalog String schema String table)v AS400JDBCDatabaseMetadatagetImportedKeys(String catalog String schema String table)v AS400JDBCDatabaseMetadatagetCrossReference( String parentCatalog String parentSchema String

parentTable String foreignCatalog String foreignSchema String foreignTable)v AS400JDBCDatabaseMetadatagetIndexInfo(String catalog String schema String table boolean unique

boolean approximate)v AS400JDBCDatabaseMetadatagetUDTs(String catalog String schemaPattern String typeNamePattern

int[] types)v AS400JDBCDatabaseMetadatagetSuperTypes(String catalog String schemaPattern String

typeNamePattern)v AS400JDBCDatabaseMetadatagetSuperTables(String catalog String schemaPattern String

tableNamePattern)v AS400JDBCDatabaseMetadatagetAttributes(String catalog String schemaPattern String

typeNamePattern String attributeNamePattern)v AS400JDBCDatabaseMetadatagetSchemas(String catalog String schemaPattern)v AS400JDBCDatabaseMetadatagetFunctions(String catalog String schemaPattern String

functionNamePattern)v AS400JDBCDatabaseMetadatagetFunctionColumns(String catalog String schemaPattern String

functionNamePattern String columnNamePattern)

Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Javapara IBM i 61En IBM i 61 se han realizado numerosas adiciones al soporte de JDBC

Las mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java se detallan en las seccionessiguientesv ldquoSoporte para JDBC 40rdquov ldquoLiacutemite de almacenamiento de consultardquov ldquoTipo de datos flotante decimal (DECFLOAT)rdquo en la paacutegina 262v ldquoPasar el tipo de cliente y el nombre de la aplicacioacuten al servidorrdquo en la paacutegina 263v ldquoLongitud maacutexima de nombres de cursor ampliadardquo en la paacutegina 264v ldquoSoporte de claves generadasrdquo en la paacutegina 264v ldquoSoporte de valores predeterminados mejoradordquo en la paacutegina 264v ldquoMaacuteximo aumentado en la claacuteusula GROUP BYrdquo en la paacutegina 264v ldquoSoporte de actualizacioacuten por lotesrdquo en la paacutegina 264

Soporte para JDBC 40

El soporte para la API JDBC 40 con Java SE Versioacuten 6 estaacute disponible utilizando uno de los siguientesarchivos JARv QIBMProdDataHTTPPublicjt400libjava6jt400jar

v QIBMProdDataOS400jt400libjava6jt400Nativejar

Liacutemite de almacenamiento de consulta

Puede utilizar la propiedad de liacutemite de almacenamiento de consulta para limitar el almacenamientoutilizado por una consulta Esta propiedad compara el liacutemite de almacenamiento especificado con laestimacioacuten de utilizacioacuten de almacenamiento de la consulta Si la estimacioacuten de utilizacioacuten dealmacenamiento sobrepasa el liacutemite de almacenamiento especificado la consulta no puede ejecutarse

IBM Toolbox para Java 261

A partir de V6R1 el controlador JDBC de IBM Toolbox para Java antildeadiraacute los meacutetodos siguientes a laclase AS400JDBCDataSource

setQueryStorageLimit()public void setQueryStorageLimit(int limit)

Especifica el valor de liacutemite de almacenamiento de consulta que debe utilizarse al ejecutar sentencias enuna conexioacuten Los valores vaacutelidos van de -1 a 2 147 352 578 El valor predeterminado es -1 que indica unvalor especial NOMAX

getQueryStorageLimit()public int getQueryStorageLimit()

Devuelve el valor de liacutemite de almacenamiento de consulta utilizado al ejecutar sentencias en unaconexioacuten El valor predeterminado es -1 que indica un valor especial NOMAX

Los sistemas que ejecutan releases de IBM i anteriores a V6R1 ignoraraacuten la propiedadgetQueryStorageLimit

Tipo de datos flotante decimal (DECFLOAT)

DECFLOAT (flotante decimal) hereda propiedades favorables de los tipos de datos float y decimal Losvalores de datos de DECFLOAT se almacenan de forma que los ceros finales sean significativos porejemplo 20 y 200 son representaciones binarias diferentes Sin embargo en comparaciones SQL losvalores se tratan como iguales

El controlador JDBC de IBM Toolbox para Java ha antildeadido los meacutetodos siguientes a la claseAS400JDBCDataSource

setDecfloatRoundingMode()public void setDecfloatRoundingMode(int String mode)

Especifica la modalidad de redondeo que debe utilizarse para nuacutemeros DECFLOAT

getDecfloatRoundingMode()public intString getDecfloatRoundingMode()

Devuelve la modalidad de redondeo utilizada para nuacutemeros DECFLOAT

Los valores vaacutelidos para estos meacutetodos son los siguientes

half even (valor predeterminado)Se redondea en el diacutegito maacutes cercano Si es equidistante entre dos diacutegitos se redondea en eldiacutegito par maacutes cercano El valor numeacuterico de esta constante es 0

half upSe redondea en el diacutegito maacutes cercano Si es equidistante entre dos diacutegitos se redondea haciaarriba El valor numeacuterico de esta constante es 1

down Se redondea en el diacutegito inferior maacutes cercano El valor numeacuterico de esta constante es 2

ceilingSe redondea hacia infinito positivo El valor numeacuterico de esta constante es 3

floor Se redondea hacia infinito negativo El valor numeacuterico de esta constante es 4

half downSe redondea en el diacutegito maacutes cercano Si es equidistante entre dos diacutegitos se redondea haciaabajo El valor numeacuterico de esta constante es 5

262 IBM Toolbox para Java IBM Toolbox para Java

up Se redondea en el diacutegito superior maacutes cercano El valor numeacuterico de esta constante es 6

Pasar el tipo de cliente y el nombre de la aplicacioacuten al servidor

Las aplicaciones Web necesitan un modo de pasar informacioacuten de cliente usuario final al servidor debases de datos a fin de que pueda anotarse informacioacuten maacutes detallada El controlador JDBC de IBMToolbox para Java JDBC permite a una aplicacioacuten alterar temporalmente esta informacioacuten llamando a lossiguientes meacutetodos javasqlConnectionsetClientInfo()

void AS400JDBCConnectionsetClientInfo(javalangString namejavalangString value)

Este meacutetodo establece el valor de la propiedad de informacioacuten de cliente especificada por name en elvalor especificado por value Consulte la descripcioacuten del meacutetodoDatabaseMetadatagetClientInfoProperties para conocer las propiedades de informacioacuten de clientesoportadas por el controlador JDBC de IBM Toolbox para Java

void AS400JDBCConnectionsetClientInfo(javautilProperties properties)

Este meacutetodo establece el valor de las propiedades de informacioacuten de cliente de la conexioacuten El objetoProperties contiene los nombres y valores de las propiedades de informacioacuten de cliente que debenestablecerse El conjunto de propiedades de informacioacuten de cliente contenidas en la lista de propiedadessustituye al conjunto actual de propiedades de informacioacuten de cliente de la conexioacuten Si una propiedadestablecida actualmente en la conexioacuten no estaacute presente en la lista de propiedades dicha propiedad seelimina Si se especifica una lista de propiedades vaciacutea se eliminaraacuten todas las propiedades de laconexioacuten

String AS400JDBCConnectiongetClientInfo(javalangString name)

Este meacutetodo devuelve el valor de la propiedad de informacioacuten de cliente especificada por name Estemeacutetodo puede devolver null si la propiedad de informacioacuten de cliente especificada no se ha establecidoy no tiene un valor predeterminado

Properties AS400JDBCConnectiongetClientInfo()

Este meacutetodo devuelve una lista que contiene el nombre y el valor actual de cada propiedad deinformacioacuten de cliente soportada por el controlador El valor de una propiedad de informacioacuten de clientepuede ser null si la propiedad no se ha establecido y no tiene un valor predeterminado

ResultSet AS400JDBCDatabaseMetaDatagetClientInfoProperties()

Este meacutetodo recupera una lista de las propiedades de informacioacuten de cliente soportadas por elcontrolador El controlador JDBC de IBM Toolbox para Java devuelve un conjunto de resultados con lainformacioacuten siguiente

Tabla 2 Conjunto de resultados para getClientInfoProperties

Nombre Longitud maacutexima valor predeterminado Descripcioacuten

ApplicationName 255 Nombre de la aplicacioacutenque utiliza actualmente laconexioacuten

ClientAccounting 255 Informacioacuten de cuentas

ClientHostname 255 Nombre de host del sistemaen el que se ejecuta laaplicacioacuten que utiliza laconexioacuten

IBM Toolbox para Java 263

Tabla 2 Conjunto de resultados para getClientInfoProperties (continuacioacuten)

Nombre Longitud maacutexima valor predeterminado Descripcioacuten

ClientProgramID 255 Identificacioacuten del programacliente

ClientUser 255 Nombre del usuario para elque trabaja la aplicacioacutenque utiliza la conexioacuten Puede no ser el mismousuario que el utilizado alestablecer la conexioacuten

Longitud maacutexima de nombres de cursor ampliada

A partir de V6R1 la longitud maacutexima de los cursores seraacute de 128 caracteres La longitud maacutexima anteriorera de 8 caracteres Una aplicacioacuten puede establecer el nombre de un cursor llamando al meacutetodojavasqlStatementsetCursorName()

Soporte de claves generadas

En releases anteriores soacutelo podiacutea devolverse una fila de informacioacuten desde una operacioacuten de insercioacuten devarias filas A partir de V6R1 podraacute acceder a maacutes informacioacuten relativa a una operacioacuten de insercioacuten devarias filas Esto permitiraacute recuperar informacioacuten de columnas generada como por ejemplo ROWIDcolumna de identidad secuencia o expresiones generadas El soporte de claves generadas seimplementaraacute en los siguientes meacutetodos JDBC de IBM Toolbox para Javav AS400JDBCStatementgetGeneratedKeys()v AS400JDBCStatementexecute(String sql int autoGeneratedKeys)v AS400JDBCStatementexecute (String sql int[] columnIndexes)v AS400JDBCStatementexecute (String sql String[] columnNames)v AS400JDBCStatementexecuteUpdate(String sql int[] autoGeneratedKeys)v AS400JDBCStatementexecuteUpdate (String sql int[] columnIndexes)v AS400JDBCStatementexecuteUpdate (String sql String[] columnNames)v AS400JDBCConnectionprepareStatement(String sql int autoGeneratedKeys)v AS400JDBCConnectionprepareStatement(String sql int[] columnIndexes)v AS400JDBCConnectionprepareStatement(String sql String[] columnNames)

Soporte de valores predeterminados mejorado

A partir de V6R1 el controlador JDBC de IBM Toolbox para Java devolveraacute un valor predeterminado decolumna en forma de serie por medio del meacutetodo DatabaseMetaDatagetColumns() Si el valorpredeterminado es nulo se devolveraacute una serie con el valor NULL

Maacuteximo aumentado en la claacuteusula GROUP BY

El valor nuevo para DatabaseMetaData getMaxColumnsInGroupBy( ) es 8000

Soporte de actualizacioacuten por lotes

El soporte de actualizacioacuten por lotes mejorado de V6R1 suministraraacute mejor informacioacuten al usuario alejecutar una sentencia de insercioacuten por lotes de varias filas habraacute un campo en el aacuterea de diagnoacutestico ySQLCA que contendraacute el nuacutemero de sentencias satisfactorias para que el usuario pueda determinar mejorla ubicacioacuten de los errores

264 IBM Toolbox para Java IBM Toolbox para Java

El controlador JDBC de IBM Toolbox para Java utilizaraacute esta informacioacuten al crear unajavasqlBatchUpdateException AS400JDBCStatement y AS400JDBCPreparedStatement tambieacuten utilizaraacutenesta informacioacuten para devolver la informacioacuten correcta desde el meacutetodo executeBatch()

Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Javapara IBM i 54Se han mejorado varias funciones de JDBC para IBM i 54

Las mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java se detallan en las seccionessiguientesv ldquoTamantildeo de sentencia de 2 MBrdquov ldquoSoporte de nombre de columna de 128 bytesrdquov ldquoSoporte de rastreo de servidor de host de base de datosrdquov ldquoSoporte de correlacionador eWLMrdquo

Tamantildeo de sentencia de 2 MB

Antes de V5R4 el liacutemite del tamantildeo de sentencias SQL era de 65 535 bytes Esto corresponde a 65 535caracteres cuando el texto de sentencia se representa utilizando un CCSID de un solo byte y 32 767caracteres cuando el texto de sentencia se representa utilizando un CCSID de doble byte Algunos clienteespecialmente aquellos que utilizan aplicaciones que generan sentencias SQL automaacuteticamente resultanafectados por este liacutemite

En V5R4 se ha aumentado el liacutemite de tamantildeo de sentencia IBM i a dos megabytes o 2 097 152 bytes Elcontrolador JDBC de IBM Toolbox para Java siempre enviacutea el texto de sentencias en Unicode de dosbytes Por lo tanto la longitud de sentencia maacutexima en caracteres seraacute de un megabyte o 1 048 576caracteres

Soporte de nombre de columna de 128 bytes

A partir de V5R4 la base de datos daraacute soporte a nombres de columna de hasta 128 bytes para tablasSQL Antes de V5R4 estaban soportados los nombres de columna hasta 30 bytes El controlador JDBC deIBM Toolbox para Java proporcionaraacute estos nombres maacutes largos a los usuarios

Existe una excepcioacuten por la que no se devolveraacuten los nombres de columna de 128 bytes Cuando seutiliza la puesta en memoria cacheacute de paquetes locales y los nombres de columna sobrepasan los 30caracteres el servidor devolveraacute los nombres de columna como el nombre de columna del sistema

Soporte de rastreo de servidor de host de base de datos

Se ha antildeadido una nueva opcioacuten al controlador JDBC de Toolbox para Java para activar el rastreo deservidor de host de base de datos Para dar soporte a esta caracteriacutestica se ha antildeadido la opcioacuten 64 a lapropiedad de conexioacuten rastreo de servidor Para obtener maacutes detalles consulte ldquoPropiedades JDBC deIBM Toolbox para Javardquo en la paacutegina 266

Soporte de correlacionador eWLM

IBM Toolbox para Java aceptaraacute un correlacionador IBM Enterprise Workload Manager (eWLM) y lopasaraacute al host como un correlacionador de atributo de conexioacuten para utilizarlo con las API de Medicioacutende respuestas de aplicacioacuten (ARM) Este correlacionador puede enviarse al host en cualquier momentotras realizarse una conexioacuten utilizando el siguiente meacutetodo en la clase AS400JDBCConnection

setDB2eWLMCorrelator

IBM Toolbox para Java 265

public void setDB2eWLMCorrelator(byte[] bytes)throws SQLException

Establece el correlacionador eWLM Se supone que se utiliza un valor de correlacionador vaacutelido Si elvalor es nulo se desactivaraacute toda la implementacioacuten de ARMeWLM Los correlacionadores eWLMrequieren servidores i5OS V5R3 o posteriores Esta peticioacuten se ignora al ejecutar en servidores V5R2 oanteriores

Paraacutemetrosv bytes El valor del correlacionador eWLM

v SQLException Consulte el Javadoc Clase SQLException

Propiedades JDBC de IBM Toolbox para JavaPueden especificarse muchas propiedades al conectar con una base de datos de servidor utilizando JDBCTodas las propiedades son opcionales y pueden especificarse como parte del URL o en un objetojavautilProperties Si se establece una propiedad tanto en el URL como en un objeto Properties seemplearaacute el valor del URL

Nota la lista siguiente no incluye las propiedades de origen de datos

Las tablas siguientes muestran las distintas propiedades de conexioacuten que este controlador reconoceAlgunas de estas propiedades afectan al rendimiento y otras son atributos de trabajo servidor Las tablasorganizan las propiedades en las categoriacuteas siguientesv ldquoPropiedades generalesrdquov ldquoPropiedades de servidorrdquo en la paacutegina 267v ldquoPropiedades de formatordquo en la paacutegina 271v ldquoPropiedades de rendimientordquo en la paacutegina 272v ldquoPropiedades de ordenacioacutenrdquo en la paacutegina 276v ldquoOtras propiedadesrdquo en la paacutegina 277

Propiedades generales

Las propiedades generales son atributos del sistema que especifican el usuario la contrasentildea y si senecesita una solicitud para conectarse al servidor

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

password Especifica la contrasentildea para conectarse al servidorSi no se especifica ninguna se le solicitaraacute al usuariosalvo que se haya establecido la propiedad prompten false en cuyo caso el intento de conexioacuten fallaraacute

no contrasentildea delsistema

(se solicitaraacute alusuario)

prompt Especifica si debe presentarse al usuario una solicituden el caso de que sea necesario un nombre deusuario o una contrasentildea para conectarse al servidorSi no puede establecerse una conexioacuten sin solicitar alusuario y esta propiedad se establece en false elintento de conexioacuten fallaraacute

no true

false

true

user Especifica el nombre de usuario para conectarse alservidor Si no se especifica ninguno se le solicitaraacuteal usuario salvo que se haya establecido lapropiedad prompt en false en cuyo caso elintento de conexioacuten fallaraacute

no usuario delservidor

(se solicitaraacute alusuario)

266 IBM Toolbox para Java IBM Toolbox para Java

Propiedades de servidor

Las propiedades de servidor especifican atributos que rigen las transacciones las bibliotecas y las basesde datos

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

auto commit Especifica si la modalidad de compromisoautomaacutetico es la modalidad de conexioacutenpredeterminada para las nuevas conexionesSi invocaAS400JDBCConnectionsetAutoCommit()alteraraacute temporalmente esta propiedad paracada conexioacutenNota para poder utilizar niveles deaislamiento de transaccioacuten distintos aNONE cuando se utiliza la modalidad decompromiso automaacutetico la propiedad trueautocommit debe establecerse en true

no true

false

true

concurrentaccess resolution

Especifica si se utiliza el acceso currentlycommitted en la conexioacuten Un valor 1indica que se utilizaraacute currentlycommitted Un valor 2 indica que seutilizaraacute wait for outcome Un valor 3indica que se utilizaraacute skip locks

no 1

2

3

(valorpredeterminado delsistema)

cursor hold Especifica si se debe retener el cursor entretransacciones Si esta propiedad se estableceen true los cursores no se cierran cuandose compromete o retrotrae una transaccioacutenTodos los recursos obtenidos durante launidad de trabajo se retienen pero losbloqueos sobre filas y objetos especiacuteficosobtenidos impliacutecitamente durante la unidadde trabajo se liberan

no true

false

true

cursorsensitivity

Especifica la sensibilidad de cursor que sesolicita desde la base de datos Elcomportamiento depende del resultSetType

v ResultSetTYPE_FORWARD_ONLY oResultSetTYPE_SCROLL_SENSITIVEindican que el valor de esta propiedadcontrola la sensibilidad de cursor que elprograma Java solicita desde la base dedatos

v ResultSetTYPE_SCROLL_INSENSITIVEhace que se ignore esta propiedad

no asensitive

sensitive

insensitive

asensitive

IBM Toolbox para Java 267

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

database name Especifica la base de datos que debeutilizarse para la conexioacuten con unaagrupacioacuten de almacenamiento auxiliar(ASP) independiente Esta propiedad soloes vaacutelida cuando se conecta con un servidorIBM i Cuando especifique un nombre debase de datos el nombre debe existir en eldirectorio de bases de datos relacionales delservidor y debe corresponder a una ASPindependiente o a la base de datospredeterminada del sistema Los criteriossiguientes determinan a queacute base de datosse accede

v Cuando se utiliza esta propiedad paraespecificar una base de datoscorrespondiente a una ASPindependiente la conexioacuten se realiza conla ASP independiente Si la base de datosno existe la conexioacuten falla

v Cuando se utiliza esta propiedad paraespecificar SYSBAS como nombre debase de datos se utiliza la base de datospredeterminada del sistema

v Cuando se omite esta propiedad seutiliza el grupo de ASP inicialespecificado en la descripcioacuten de trabajodel perfil de usuario Cuando ladescripcioacuten de trabajo no especifica ungrupo de ASP inicial se utiliza la base dedatos predeterminada del sistema

no Nombre de basede datosSYSBAS

Se utiliza elnombre de base dedatos especificadoen la descripcioacutende trabajo delperfil de usuarioCuando ladescripcioacuten detrabajo noespecifica ninguacutennombre de base dedatos se utiliza labase de datospredeterminada delsistema

decfloatrounding mode

Especifica la modalidad de redondeo quedebe utilizarse al trabajar con el tipo dedatos decfloat Esta propiedad se ignora enlas conexiones con sistemas que ejecutanIBM i 54 y anteriores

no half even

half up

down

ceiling

floor

half down

up

half even

268 IBM Toolbox para Java IBM Toolbox para Java

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

libraries Especifica una o varias bibliotecas quedesea antildeadir o sustituir por la lista debibliotecas del trabajo servidor y puedeestablecer el esquema SQL predet(biblioteca predet) Tenga en cuenta que lasbibliotecas no pueden tener maacutes de 10caracteres Debe utilizar la sentencia SETPATH SQL si tiene bibliotecas con maacutes de10 caracteres

Lista de bibliotecas El servidor utiliza lasbibliotecas especificadas para resolver losnombres de procedimientos almacenados nocalificados y los procedimientosalmacenados las utilizan para resolvernombres no calificados Para especificarvarias bibliotecas utilice comas o espaciospara separar las distintas entradas Puedeutilizar LIBL para indicar la lista debibliotecas actual del trabajo del servidorv Cuando la primera entrada es LIBL las

bibliotecas especificadas se antildeaden a lalista de bib actual del trabajo servidor

v Si no indica LIBL las bibliotecasespecificadas sustituyen a la lista debibliotecas actual del trabajo del servidor

Para obtener maacutes informacioacuten sobre laspropiedades de lista de bibliotecas consultela propiedad LibraryList de JDBC

Esquema SQL predeterminado El servidorutiliza el esquema SQL predet pararesolver los nombres no calificados ensentencias SQL Por ejemplo en la sentenciaSELECT FROM MITABLA el servidorsolo buscaraacute MITABLA en el esquema SQLpredet Puede especificar el esquema SQLpredet en el URL de conexioacuten Si noespecifica el esquema SQL predet en elURL de conexioacuten son aplicables lassiguientes condiciones dependiendo delconvenio de denominacioacuten SQL que seutilicev Al utilizar Denominaciones SQL

ndash La primera entrada (si no es LIBL)pasa a ser esquema SQLpredeterminado

ndash Si la primera entrada es LIBL lasegunda pasa a esquema SQL predet

ndash Si no establece esta propiedad o si solocontiene LIBL el perfil usuario pasa aesquema SQL predet

v Al utilizar Denominaciones del sistemandash No se establece ninguacuten esquema SQL

predet y el servidor utiliza lasbibliotecas especificadas para labuacutesqueda de los nombres nocalificados

ndash Si no establece esta propiedad o sisolamente contiene LIBL el servidorutiliza la lista de bibliotecas actual deltrabajo del servidor para buscar enellas los nombres no calificados

no Lista de bibliotecasdel servidorseparadas porcomas o espacios

LIBL

IBM Toolbox para Java 269

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

maximumprecision

Especifica la precisioacuten decimal maacutexima quepuede emplear la base de datos

no 31

63

31

maximum scale Especifica la escala maacutexima que puedeemplear la base de datos

no 0-63 31

minimum dividescale

Especifica el valor de escala miacutenimo para elresultado de la divisioacuten decimal

no 0

1

2

3

4

5

6

7

8

9

0

package ccsid Especifica la codificacioacuten de caracteres quese utilizaraacute para el paquete SQL y lassentencias que se enviacuteen al servidor

no 1200 (UCS-2)

13488(UTF-16)

13488

transactionisolation

Especifica el aislamiento de transaccioacutenpredeterminado

no none

readuncommitted

read committed

repeatableread

serializable

readuncommitted

translate hex Especifica coacutemo se interpretan los literaleshexadecimales

no character(Interpretarliteraleshexadecimalescomo datos detipo caraacutecter)

binary(Interpretarliteraleshexadecimaldecimalescomo datosbinarios)

character

trueautocommit

Especifica si la conexioacuten debe utilizar elsoporte de compromiso automaacuteticoverdadero El compromiso automaacuteticoverdadero significa que el compromisoautomaacutetico estaacute activo y ejecutaacutendose en unnivel de aislamiento distinto de NONE Deforma predeterminada el controladormaneja el compromiso automaacuteticoejecutando en el nivel de aislamientoNONE

no true (Utilizarcompromisoautomaacuteticoverdadero)

false (Noutilizarcompromisoautomaacuteticoverdadero)

false

270 IBM Toolbox para Java IBM Toolbox para Java

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

xa looselycoupled support

Especifica si estaacute permitido elcompartimiento de bloqueo para ramas detransaccioacuten no muy emparejadasNota este valor se ignora al ejecutarse enIBM i 53 o anteriores

no 0 = Nopuedencompartirsebloqueos

1 = Puedencompartirsebloqueos

0

Propiedades de formato

Las propiedades de formato especifican los formatos de fecha y hora los separadores de fecha ydecimales y los convenios de denominacioacuten de tablas empleados en las sentencias SQL

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

date format Especifica el formato de fecha utilizadoen los literales de fecha dentro de lassentencias SQL

no mdy

dmy

ymd

usa

iso

eur

jis

julian

(trabajo servidor)

date separator Especifica el separador de fechautilizado en los literales de fechadentro de las sentencias SQL Estapropiedad no surte ninguacuten efecto salvoque la propiedad date format se hayaestablecido en julian mdy dmy oymd

no (barrainclinada)

- (guioacuten)

(punto)

(coma)

b (espacio)

(trabajo servidor)

decimalseparator

Especifica el separador decimalutilizado en los literales numeacutericosdentro de las sentencias SQL

no (punto)

(coma)

(trabajo servidor)

naming Especifica el convenio de denominacioacutenutilizado al hacer referencia a lastablas

no sql (como enesquematabla)system (como enesquematabla)

sql

time format Especifica el formato de hora utilizadoen los literales de hora dentro de lassentencias SQL

no hms

usa

iso

eur

jis

(trabajo servidor)

time separator Especifica el separador de horautilizado en los literales de hora dentrode las sentencias SQL Esta propiedadno surte ninguacuten efecto salvo que lapropiedad time format se hayaestablecido en hms

no (dos puntos)

(punto)

(coma)

b (espacio)

(trabajo servidor)

IBM Toolbox para Java 271

Propiedades de rendimiento

Las propiedades de rendimiento son atributos que incluyen el almacenamiento en memoria cacheacute laconversioacuten de datos la compresioacuten de datos y la prebuacutesqueda que afectan al rendimiento

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

big decimal Especifica si se utiliza un objetojavamathBigDecimal intermedio paraconversiones de decimal empaquetado ycon zona Si esta propiedad se estableceen true se utiliza un objetojavamathBigDecimal intermedio paraconversiones de decimal empaquetado ycon zona tal como describe laespecificacioacuten de JDBC Si estapropiedad se establece en false no seutiliza ninguacuten objeto intermedio paraconversiones de decimal empaquetado ycon zona En su lugar estos valores seconvierten directamente desde y avalores dobles Java Estas conversionesseraacuten maacutes raacutepidas pero puede que nosigan todas las reglas de conversioacuten ytruncamiento de datos documentadas enla especificacioacuten de JDBC

no true

false

true

block criteria Especifica los criterios para recuperardatos del servidor en bloques deregistros Si se especifica un valordistinto de cero para esta propiedad sereduciraacute la frecuencia de comunicacioacutencon el servidor lo que mejoraraacute elrendimiento

Compruebe que la funcioacuten de bloquesde registros esteacute desactivada si se va autilizar el cursor para posterioresoperaciones de actualizacioacuten (UPDATE)de lo contrario la fila que se actualiceno seraacute necesariamente la fila actual

no 0 (sinbloques deregistros)

1 (conbloques si seespecificaFOR FETCHONLY)

2 (conbloques salvoque seespecifiqueFORUPDATE)

2

block size Especifica el tamantildeo de bloque (enkilobytes) que debe recuperarse delservidor y colocarse en la memoriacacheacute del cliente Esta propiedad nosurte ninguacuten efecto salvo que lapropiedad block criteria se hayaestablecido en un valor distinto de ceroSi se especifican grandes tamantildeos debloque se reduciraacute la frecuencia decomunicacioacuten con el servidor lo quemejoraraacute el rendimiento

no 0

8

16

32

64

128

256

512

32

272 IBM Toolbox para Java IBM Toolbox para Java

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

data compression Especifica si los datos del conjunto deresultados se comprimen Si estapropiedad se establece en true losdatos del conjunto de resultados secomprimen Si esta propiedad seestablece en false los datos delconjunto de resultados no secomprimen La compresioacuten de datospuede mejorar el rendimiento alrecuperar conjuntos de resultados degran tamantildeo

no true

false

true

extended dynamic Especifica si debe utilizarse soportedinaacutemico ampliado El soporte dinaacutemicoampliado proporciona un mecanismopara poner en memoria cacheacute en elservidor las sentencias SQL dinaacutemicasLa primera vez que se prepara unasentencia SQL concreta se almacena enun paquete SQL en el servidor Si elpaquete no existe se creaautomaacuteticamente En posteriorespreparaciones de la misma sentenciaSQL el servidor puede saltarse unaparte notable del proceso utilizando lainformacioacuten almacenada en el paqueteSQL Si esta propiedad se establece entrue debe establecerse un nombre depaquete con la propiedad package

no true

false

false

lazy close Especifica si hay que diferir el cierre delos cursores hasta las peticionesulteriores Esto mejoraraacute el rendimientoglobal al reducir el nuacutemero total depeticiones

no true

false

false

lob threshold Especifica el tamantildeo maacuteximo de LOB(objeto de gran tamantildeo) en bytes quepuede recuperarse como parte de unconjunto de resultados Los LOB cuyotamantildeo sobrepase este umbral serecuperaraacuten en fragmentos utilizandouna comunicacioacuten adicional con elservidor Los umbrales de LOB demayor tamantildeo reduciraacuten la frecuenciade la comunicacioacuten con el servidor perobajaraacuten maacutes datos de LOB aunquedichos datos no se utilicen Losumbrales de LOB de menor tamantildeopueden incrementar la frecuencia de lacomunicacioacuten con el servidor perouacutenicamente bajaraacuten los datos de LOBseguacuten se necesiten

no 0 - 16777216 32768

IBM Toolbox para Java 273

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

package Especifica el nombre base del paqueteSQL Observe que solo se utilizan losseis primeros caracteres para generar elnombre del paquete SQL en el servidorEsta propiedad no surte ninguacuten efectosalvo que la propiedad extendeddynamic se haya establecido entrueAdemaacutes esta propiedad debeestablecerse si se ha establecido lapropiedad extended dynamic entrue

no Paquete SQL

package add Especifica si deben antildeadirse las nuevassentencias preparadas al paquete SQLespecificado en la propiedad packageEsta propiedad no surte ninguacuten efectosalvo que la propiedad extendeddynamic se haya establecido en true

no true

false

true

package cache Especifica si debe almacenarse enmemoria cacheacute un subconjunto de lainformacioacuten del paquete SQL en lamemoria del cliente Al almacenarpaquetes SQL en la memoria cacheacutelocal se reduce la cantidad decomunicacioacuten con el servidor para laspreparaciones y descripciones Estapropiedad no surte ninguacuten efecto salvoque la propiedad extended dynamic sehaya establecido en true

no true

false

false

package criteria Especifica el tipo de sentencias SQL quedeben almacenarse en el paquete SQLEsto puede resultar de utilidad paramejorar el rendimiento de lascondiciones de unioacuten complejas Estapropiedad no surte ninguacuten efecto salvoque la propiedad extended dynamic sehaya establecido en true

no default(almacenaruacutenicamentelas sentenciasSQL conmarcadoresde paraacutemetrosen el paquete)

select(almacenartodas lassentenciasSQL SELECTen el paquete)

default

package error Especifica la accioacuten que debe efectuarsecuando se producen errores de paqueteSQL Cuando se produce un error depaquete SQL el controlador puedelanzar una SQLException o enviar unaviso al objeto Connection seguacuten elvalor de esta propiedad Esta propiedadno surte ninguacuten efecto salvo que lapropiedad extended dynamic se hayaestablecido en true

no exception

warning

none

warning

package library Especifica la biblioteca para el paqueteSQL Esta propiedad no surte ninguacutenefecto salvo que la propiedad extendeddynamic se haya establecido en true

no Biblioteca para elpaquete SQL

QGPL

274 IBM Toolbox para Java IBM Toolbox para Java

|

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

prefetch Especifica si deben prebuscarse datos alejecutar una sentencia SELECT Estomejoraraacute el rendimiento al acceder a lasfilas iniciales del conjunto de resultados(ResultSet)

no true

false

true

qaqqinilib Especifica un nombre de bibliotecaQAQQINI Permite especificar labiblioteca que contiene el archivoqaqqini que se utilizaraacute Un archivoqaqqini contiene todos los atributos quepueden afectar al rendimiento del motorde base de datos DB2 para i

no Nombre debibliotecaQAQQINI

(valorpredeterminadodel servidor)

query optimize goal Especifica el objetivo que el servidordeberaacute utilizar con la optimizacioacuten deconsultas Este valor corresponde a laopcioacuten QAQQINI del servidordenominada OPTIMIZATION_GOALNota esta propiedad se ignora en lasconexiones con sistemas que se ejecutanen IBM i 53 y anteriores

no 0 =Optimizar laconsulta parael primerbloque dedatos(FIRSTIO)cuando seutilizanpaquetesdinaacutemicosampliadosOptimizar laconsulta paratodo elconjunto deresultados(ALLIO)cuando no seutilizanpaquetes

1 =Optimizar laconsulta parael primerbloque dedatos(FIRSTIO)

2 =Optimizar laconsulta paratodo elconjunto deresultados(ALLIO)

0

query storage limit Limita el almacenamiento utilizado poruna consulta Esta propiedad comparael liacutemite de almacenamientoespecificado con la estimacioacuten deutilizacioacuten de almacenamiento de laconsulta Si la estimacioacuten de utilizacioacutende almacenamiento sobrepasa el liacutemitede almacenamiento especificado laconsulta no puede ejecutarse

no -1 (NOMAX)hasta 2 147 352578

-1 que indicael valorespecialNOMAX

IBM Toolbox para Java 275

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

query timeoutmechanism

Especifica el mecanismo paraimplementar la caracteriacutesticaqueryTimeout

no qqrytimlmt= LacaracteriacutesticaqueryTimeoututiliza lacaracteriacutesticaQQRYTIMLMTdel motor debase de datos

cancel = LacaracteriacutesticaqueryTimeoututiliza unasolicitudCANCEL paracancelar unasentencia SQLen ejecucioacutenuna vezsobrepasadoel tiempo deespera

qqrytimlmt

receive buffer size Especifica el tamantildeo delalmacenamiento intermedio utilizadopara recibir datos a traveacutes de laconexioacuten de socket entre el controladorfrontal y el sistemaNota no especifica el tamantildeo real delalmacenamiento intermedio derecepcioacuten Soacutelo se utiliza comoorientacioacuten para el coacutedigo de socketsubyacente

no 1 - tamantildeomaacuteximo

(dependientede laplataforma)

send buffer size Especifica el tamantildeo delalmacenamiento intermedio utilizadopara enviar datos a traveacutes de laconexioacuten de socket entre el controladorfrontal y el sistemaNota no especifica el tamantildeo real delalmacenamiento intermedio de enviacuteoSoacutelo se utiliza como orientacioacuten para elcoacutedigo de socket subyacente

no 1 - tamantildeomaacuteximo

(dependientede laplataforma)

variable fieldcompression

Especifica si los campos de longitudvariable deben comprimirse

no true

false

true

Propiedades de ordenacioacuten

Las propiedades de ordenacioacuten especifican coacutemo lleva a cabo el servidor las operaciones de almacenar yordenar

276 IBM Toolbox para Java IBM Toolbox para Java

|||||

||||||||||

|||||||||||||

|

Propiedad deordenacioacuten Descripcioacuten Obligatoria Opciones

Valorpredet

sort Especifica coacutemo ordena el servidor losregistros antes de enviarlos al cliente

no hex (basar elorden en valoreshexadeci-males)

language (basar elorden en el idiomaestablecido en lapropiedad sortlanguage)

table (basar elorden en la tabla desecuencia deordenacioacutenestablecida en lapropiedad sorttable)

hex

sort language Especifica un ID de idioma de trescaracteres que debe utilizarse para laseleccioacuten de una secuencia de ordenacioacutenEsta propiedad no surte ninguacuten efectosalvo que la propiedad sort se hayaestablecido en language

no ID de idioma ENU

sort table Especifica la biblioteca y el nombre dearchivo de una tabla de secuencia deordenacioacuten almacenada en el servidorEsta propiedad no surte ninguacuten efectosalvo que la propiedad sort se hayaestablecido en table

no Nombre calificado detabla de ordenacioacuten

sort weight Especifica coacutemo trata el servidor lasmayuacutesculasminuacutesculas al ordenarregistros Esta propiedad no surte ninguacutenefecto salvo que la propiedad sort sehaya establecido en language

no shared (loscaracteres enmayuacutesculas y enminuacutesculas seordenan como elmismo caraacutecter)

unique (loscaracteres enmayuacutesculas y enminuacutesculas seordenan comocaracteres distintos)

shared

Otras propiedades

Otras propiedades son las que no pueden incluirse faacutecilmente en categoriacuteas Estas propiedadesdeterminan queacute controlador JDBC se utiliza y especifican opciones relacionadas con el nivel de acceso ala base de datos el tipo de serie bidireccional el truncamiento de datos etc

IBM Toolbox para Java 277

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

access Especifica el nivel de acceso a base de datospara la conexioacuten

no all (permitidastodas las sentenciasSQL)

read call(permitidassentencias SELECTy CALL)

read only (soacutelosentencias SELECT)

all

autocommitexception

Especifica si debe lanzarse una excepcioacuten detipo SQLException cuando se llama aConnectioncommit() o Connectionrollback() siel compromiso automaacutetico estaacute habilitado

no true

false

false

bidi stringtype

Especifica el tipo de serie de salida de los datosbidireccionales En BidiStringType encontraraacutemaacutes informacioacuten

no (utilizar el CCSIDpara determinar eltipo de seriebidireccional)

0 (el tipo de seriepredeterminadopara datos nobidireccionales(LTR))

4

5

6

7

8

9

10

11

bidiimplicitreordering

Especifica si debe utilizarse la reordenacioacutenLTR-RTL bidi impliacutecita

no true

false

true

bidinumericordering

Especifica si debe utilizarse la caracteriacutesticacircular de ordenacioacuten numeacuterica

no true

false

false

278 IBM Toolbox para Java IBM Toolbox para Java

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

datatruncation

Especifica si el truncamiento de datos de tipocaraacutecter genera avisos y excepciones Cuandoesta propiedad es true se aplican las reglassiguientes

v Al escribir datos de tipo caraacutecter truncadosen la base de datos se lanza una excepcioacuten

v Al utilizar datos de tipo caraacutecter truncadosen una consulta se enviacutea un aviso

Cuando esta propiedad es false al escribirdatos truncados en la base de datos o utilizaresos datos en una consulta no se generan niexcepciones ni avisos

El valor predeterminado es true

Esta propiedad no afecta a los datosnumeacutericos Al escribir datos numeacutericostruncados en la base de datos siempre se lanzaun error y al utilizar datos numeacutericostruncados en una consulta siempre se enviacutea unaviso

no true

false

true

driver Especifica la implementacioacuten del controladorJDBC El controlador JDBC de IBM Toolboxpara Java puede utilizar distintasimplementaciones del controlador JDBC enfuncioacuten del entorno Si el entorno es una JVMde IBM i situada en el mismo servidor que labase de datos a la que se conecta el programapuede utilizarse el controlador JDBC de IBMDeveloper Kit para Java nativo En cualquierotro entorno se utiliza el controlador JDBC deIBM Toolbox para Java Esta propiedad nosurte ninguacuten efecto si se ha establecido lapropiedad secondary URL

no toolbox (utilizarsoacutelo el controladorJDBC de IBMToolbox para Java)

native (se utilizaraacuteel controlador JDBCde IBM DeveloperKit para Java si seejecuta en elservidor de locontrario seutilizaraacute elcontrolador JDBC deIBM Toolbox paraJava)

toolbox

errors Especifica la cantidad de detalle que debedevolverse en el mensaje para los errores quese producen en el servidor

no basic

full

basic

IBM Toolbox para Java 279

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

extendedmetadata

Especifica si el controlador solicita metadatosampliados procedentes del servidor Alestablecer esta propiedad en true se aumenta laprecisioacuten de la informacioacuten devuelta por lossiguientes meacutetodos de ResultSetMetaData

v getColumnLabel(int)

v isReadOnly(int)

v isSearchable(int)

v isWriteable(int)

Asimismo al establecer esta propiedad en truese habilita el soporte para los meacutetodosResultSetMetaDatagetSchemaName(int) yResultSetMetaDataisAutoIncrement(int)Nota al establecer esta propiedad en true elrendimiento puede empeorar ya que es precisorecuperar maacutes informacioacuten del servidor Deje lapropiedad establecida en el valorpredeterminado (false) salvo que necesiteinformacioacuten maacutes especiacutefica de los meacutetodoslistados Por ejemplo cuando esta propiedadestaacute inactiva (false)ResultSetMetaDataisSearchable(int) siempredevuelve true ya que el controlador no tienesuficiente informacioacuten procedente del servidorpara hacer un juicio Al activar esta propiedad(true) se fuerza al controlador a obtener losdatos correctos del servidor

no true

false

false

full open Especifica si el servidor abre por completo unarchivo para cada consulta De formapredeterminada el servidor optimiza laspeticiones abiertas Esta optimizacioacuten mejora elrendimiento pero puede fallar si hay unsupervisor de base de datos activo cuando seejecuta una consulta maacutes de una vezEstablezca la propiedad en true uacutenicamente sise emiten consultas ideacutenticas cuando haysupervisores activos

no true

false

false

hold inputlocators

Especifica si los ubicadores de entrada debenasignarse como ubicadores de tipo hold o nohold Si los ubicadores son de tipo hold no seliberaraacuten cuando se realice un compromiso

no true (type hold)

false

true

holdstatements

Especifica si las sentencias deben permanecerabiertas hasta un liacutemite de transaccioacuten cuandocuando el compromiso automaacutetico esteacutedesactivado y esteacuten asociadas a un ubicadorLOB De forma predeterminada todos losrecursos asociados a una sentencia se liberancuando se cierra la sentencia Establezca estapropiedad en true solo cuando sea necesarioacceder a un ubicador LOB despueacutes de cerraruna sentencia

no true

false

false

280 IBM Toolbox para Java IBM Toolbox para Java

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

ignorewarnings

Especifica una lista de estados SQL para losque el controlador no debe crear objetos deaviso De forma predeterminada el controladorJDBC de IBM Toolbox para Java crearaacuteinternamente un objeto javasqlSQLWarningpara cada aviso devuelto por la base de datosPor ejemplo se crea un aviso con SQLSTATE0100C cada vez que se devuelve un conjuntode resultados de un procedimiento almacenadoEste aviso puede ignorarse de forma segurapara mejorar el rendimiento de las aplicacionesque llaman a procedimientos almacenados

no Una lista separada porcomas de los estadosSQL que debenomitirse

keep alive Especifica si debe comprobarse perioacutedicamenteel estado operativo de la conexioacuten de socket

no true

false

(dependientede laplataforma)

key ringname

Especifica el nombre de la clase de archivo declaves utilizada para las conexiones SSL con elservidor Esta propiedad no surte ninguacuten efectosalvo que secure se haya establecido en truey que se haya establecido una contrasentildea dearchivo de claves mediante la propiedad keyring password

no key ring name

key ringpassword

Especifica la contrasentildea para la clase de archivode claves utilizada para las comunicaciones SSLcon el servidor Esta propiedad no surte ninguacutenefecto salvo que secure se haya establecido entrue y que se haya establecido un nombre dearchivo de claves mediante la propiedad keyring name

no key ring password

metadatasource

Especifica coacutemo se recupera DatabaseMetaDataSi se establece en 0 los metadatos de base dedatos se recuperaraacuten mediante el flujo de datosde ROI (Recuperar informacioacuten de objeto)

Si se establece en 1 los metadatos de base dedatos se recuperaraacuten llamando aprocedimientos almacenados del sistema

no 0 (acceso ROI)

1 (procedimientosalmacenados SQL)

0 paraIBM i 61 yreleasesanteriores1 para losdemaacutesreleases

proxyserver

Especifica el nombre de host y el nuacutemero depuerto de la maacutequina de nuacutemero medio deniveles en la que se estaacute ejecutando el servidorproxy El formato esnombre_sistema_principal[puerto] siendo elpuerto opcional Si no se establece estapropiedad el nombre de host y el nuacutemero depuerto se recuperan de la propiedadcomibmas400accessAS400proxyServer El puertopredeterminado es 3470 (si la conexioacuten utilizaSSL el puerto predeterminado es 3471) Elservidor proxy debe estar en ejecucioacuten en lamaacutequina de nuacutemero medio de niveles

El nombre de la maacutequina de nuacutemero medio deniveles se omite en un entorno de dos niveles

no Nombre de host ynuacutemero de puerto deservidor proxy

(el valor delapropiedadproxyServero none sino estaacuteestablecida)

IBM Toolbox para Java 281

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

remarks Especifica el origen del texto para las columnasREMARKS de los objetos ResultSet devueltospor los meacutetodos de DatabaseMetaData Estapropiedad solo se utiliza si la propiedadmetadata source se establece en 0

no sql (comentario deobjeto SQL)

system(descripcioacuten deobjeto IBM i)

system

secondaryURL

Especifica el URL que se utilizaraacute para unaconexioacuten en el objeto DriverManager denuacutemero medio de niveles en un entorno devarios niveles si es distinto del que ya se haespecificado Esta propiedad permite utilizareste controlador para conectarse con otras basesde datos Emplee una barra inclinada invertidacomo caraacutecter de escape antes de los caracteresde barra inclinada invertida y punto y coma enel URL

no URL JDBC (URL JDBCactual)

secure Especifica si para comunicarse con el servidorse utiliza una conexioacuten SSL (capa de socketssegura)

no true (cifrar todaslas comunicacionesclienteservidor)

false (cifrarsolamente lacontrasentildea)

false

282 IBM Toolbox para Java IBM Toolbox para Java

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

servertrace

Especifica el nivel de rastreo del trabajoservidor JDBC Cuando el rastreo estaacutehabilitado el rastreo empieza al conectarse elcliente al servidor y finaliza al desconectarse laconexioacuten Debe iniciar el rastreo antes deconectarse al servidor ya que el cliente habilitael rastreo del servidor uacutenicamente en elmomento de la conexioacuten

no 0 (el rastreo noestaacute activo)

2 (iniciar elsupervisor de basede datos en eltrabajo de servidorJDBC)

4 (iniciardepuracioacuten en eltrabajo de servidorJDBC)

8 (guardar lasanotaciones detrabajo cuandofinalice el trabajo delservidor JDBC)

16 (iniciar rastreode trabajo en eltrabajo de servidorJDBC)

32 (guardarinformacioacuten de SQL)

64 (soporta laactivacioacuten delrastreo de servidorde host de base dedatos)

Pueden iniciarse variosrastreos agrupandoestos valores Porejemplo 6 inicia elsupervisor de base dedatos e inicia ladepuracioacuten

0

threadused

Especifica si se usan hebras en unacomunicacioacuten con los servidores de host

no true

false

true

IBM Toolbox para Java 283

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

toolboxtrace

Especifica queacute categoriacutea de un rastreo de IBMToolbox para Java debe anotarse Los mensajesde rastreo son uacutetiles para depurar programasque efectuacutean llamadas a JDBC Sin embargo laanotacioacuten de mensajes de rastreo trae aparejadoun deterioro del rendimiento por lo que estapropiedad uacutenicamente se establece para llevar acabo la depuracioacuten Los mensajes de rastreo seanotan en Systemout

no

none

datastream (seanota el flujo dedatos entre el hostlocal y el sistemaremoto)

diagnostic (seanota la informacioacutende estado de losobjetos)

error (se anotanlos errores quegeneran unaexcepcioacuten)

information (seutiliza para hacer unseguimiento delflujo de control atraveacutes del coacutedigo)

warning (seanotan los erroresrecuperables)

conversion (seanotan lasconversiones dejuego de caracteresentre las paacuteginas decoacutedigos nativas yUnicode)

proxy (se anota elflujo de datos entreel cliente y elservidor proxy)

pcml (se utilizapara determinarcoacutemo interpretaPCML los datos quese enviacutean al servidory que se reciben delmismo)

jdbc (se anota lainformacioacuten deJDBC)

all (se anotantodas las categoriacuteas)

thread (se anota lainformacioacuten dehebra)

284 IBM Toolbox para Java IBM Toolbox para Java

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

trace Especifica si se anotan los mensajes de rastreoLos mensajes de rastreo son uacutetiles para depurarprogramas que efectuacutean llamadas a JDBC Sinembargo la anotacioacuten de mensajes de rastreotrae aparejado un deterioro del rendimientopor lo que esta propiedad uacutenicamente se debeestablecer en true para llevar a cabo ladepuracioacuten Los mensajes de rastreo se anotanen Systemout

no true

false

false

translatebinary

Especifica si se convierten los datos binarios Siesta propiedad se establece en true loscampos BINARY y VARBINARY se tratan comocampos CHAR y VARCHAR

no true

false

false

translateboolean

Especifica coacutemo se interpretan los objetosbooleanos (Boolean) al establecer el valor de uncampoparaacutemetro de tipo caraacutecter mediante losmeacutetodos PreparedStatementsetObject()CallableStatementsetObject() oResultSetupdateObject() Si la propiedad seestablece en true el objeto booleano sealmacenaraacute en el campo de tipo caraacutecter comotrue o false Si la propiedad se establece enfalse el objeto booleano se almacenaraacute en elcampo de tipo caraacutecter como 1 o 0

no true

false

true

Referencia relacionadaldquoRegistro del controlador JDBCrdquo en la paacutegina 80Antes de utilizar JDBC para acceder a los datos de un archivo de base de datos del servidor es necesarioregistrar el controlador JDBC de IBM Toolbox para Java con DriverManager

Propiedad LibraryList de JDBCLa propiedad LibraryList de JDBC especifica una o varias bibliotecas que desea antildeadir a la lista debibliotecas del trabajo del servidor (o con las que desea sustituir esta lista) y opcionalmente establece labiblioteca predeterminada (esquema SQL predeterminado)

En los ejemplos de la tabla siguiente se dan por supuestas las condiciones siguientesv Una biblioteca denominada MYLIBDAW contiene MYFILE_DAWv Se ejecuta esta sentencia SQL

SELECT FROM MYFILE_DAW

IBM Toolbox para Java 285

Caso praacutectico Denominaciones SQL Denominaciones del sistema

Reglas baacutesicas Solo se busca en una biblioteca

v Si se especifica un esquema SQLpredeterminado en el URL se utiliza Estepasa a ser la biblioteca predeterminada

v Si no se especifica ninguacuten esquema SQLpredeterminado en el URL se utiliza laprimera biblioteca de la propiedad librariesEsta pasa a ser la biblioteca predeterminada

v Si no se especifica ninguacuten esquema SQLpredeterminado en el URL ni ningunapropiedad libraries se utiliza la bibliotecacon el mismo nombre que el perfil de usuarioque ha iniciado la sesioacuten

La lista de bibliotecas del trabajo se actualizacon las bibliotecas de la propiedad libraries Estevalor puede afectar al funcionamiento dealgunos desencadenantes y procedimientosalmacenados No afecta a los nombres nocalificados de las sentencias

La lista de bibliotecas del trabajo seactualiza con las bibliotecas de lapropiedad libraries Si se especifica unesquema SQL predeterminado en elURL esta pasa a ser la bibliotecapredeterminada

1 No se especificaninguacuten esquema SQLpredeterminado en elURL y no se especificala propiedad libraries

El esquema SQL predeterminado es el nombrede perfil de usuario

No hay ninguacuten esquema SQLpredeterminado Se busca en la lista debibliotecas del trabajo

2 Se especifica elesquema SQLpredeterminado en elURL y no se especificala propiedad libraries

El esquema SQL predeterminado es lo que seespecifica en el URL

El esquema SQL predeterminado es loque se especifica en el URL No sebusca en la lista de bibliotecas pararesolver un nombre no calificado en lassentencias SQL

3 No se especificaninguacuten esquema SQLpredeterminado en elURL y se especifica lapropiedad libraries

El esquema SQL predeterminado es la primerabiblioteca especificada en la propiedad

No hay ninguacuten esquema SQLpredeterminado Se busca en todas lasbibliotecas especificadas en lapropiedad

4 Se especifica elesquema SQLpredeterminado en elURL y se especifica lapropiedad libraries

El esquema SQL predeterminado es lo que seespecifica en el URL La propiedad se omite

El esquema SQL predeterminado es loque se especifica en el URL No sebusca en la lista de bibliotecas pararesolver un nombre no calificado en lassentencias SQL

5 No se especificaninguacuten esquema SQLpredeterminado en elURL se especifica lapropiedad libraries yuna biblioteca en la listano es vaacutelida

El esquema SQL predeterminado es la primerabiblioteca especificada en la propiedad

No hay ninguacuten esquema SQLpredeterminado La lista de bibliotecasno se puede modificar ya que no seencuentra una de las bibliotecas de lalista por lo que se utiliza la lista debibliotecas del trabajo

6 No se especificaninguacuten esquema SQLpredeterminado en elURL se especifica lapropiedad libraries yse ha encontrado unarchivo en la segundabiblioteca de la lista

El esquema SQL predeterminado es la primerabiblioteca especificada en la propiedad lasdemaacutes bibliotecas se omiten

Si todas las bibliotecas existen no hayninguacuten esquema SQL predeterminadose busca en todas las bibliotecas de lalista la lista sustituye a la lista debibliotecas del trabajo

Si una de las bibliotecas de la lista noexiste no se modifica la lista debibliotecas del trabajo

286 IBM Toolbox para Java IBM Toolbox para Java

Caso praacutectico Denominaciones SQL Denominaciones del sistema

7 No se especificaninguacuten esquema SQLpredeterminado en elURL se especifica lapropiedad libraries yla lista empieza con unacoma

El esquema SQL predeterminado es el perfil deusuario

No hay ninguacuten esquema SQLpredeterminado se busca en todas lasbibliotecas de la lista la lista sustituye ala lista de bibliotecas del trabajo

8 No se especificaninguacuten esquema SQLpredeterminado en elURL se especifica lapropiedad libraries yla lista empieza conLIBL

El esquema SQL predeterminado es el perfil deusuario

No hay ninguacuten esquema SQLpredeterminado se busca en todas lasbibliotecas de la lista las bibliotecasespecificadas se antildeaden al final de lalista

9 No se especificaninguacuten esquema SQLpredeterminado en elURL se especifica lapropiedad libraries yla lista termina conLIBL

El esquema SQL predeterminado es la primerabiblioteca especificada en la propiedad lasdemaacutes bibliotecas se omiten

No hay ninguacuten esquema SQLpredeterminado se busca en todas lasbibliotecas de la lista las bibliotecasespecificadas se antildeaden al principio dela lista de bibliotecas del trabajo

10 El esquema SQLpredeterminadoespecificado en el URLno es vaacutelido

No hay ninguacuten esquema SQL predeterminadose utiliza el perfil de usuario

No hay ninguacuten esquema SQLpredeterminado se utiliza la lista debibliotecas del trabajo

Nota cuando se especifica un esquema SQL predeterminado en el URL y no se utiliza la propiedadlibraries el esquema SQL predeterminado se antildeade antes de la lista de bibliotecas actual

Tipos SQL JDBCNo todos los tipos SQL descritos por la especificacioacuten de JDBC estaacuten soportados por DB2 para IBM i

Tipos SQL no soportados

En los casos en que un tipo SQL no estaacute soportado el controlador JDBC lo sustituye por un tipo SQLsimilar

La tabla siguiente muestra los tipos SQL que no estaacuten soportados y el tipo SQL por el que el controladorJDBC los sustituye en cada caso

Tipo SQL no soportado Tipo SQL de sustitucioacuten

BIT SMALLINT

TINYINT SMALLINT

LONGVARCHAR VARCHAR

LONGVARBINARY VARBINARY

Soporte de proxyIBM Toolbox para Java soporte de proxy para algunas clases El soporte de proxy es el proceso que IBMToolbox para Java necesita realizar para llevar a cabo una tarea en una maacutequina virtual Java (JVM)cuando la aplicacioacuten se encuentra en una JVM distinta

IBM Toolbox para Java 287

Las clases de proxy residen en jt400Proxyjar que se suministra con el resto de IBM Toolbox para JavaLas clases de proxy como las demaacutes clases de IBM Toolbox para Java estaacuten formadas por un conjunto declases Java independientes de la plataforma que pueden ejecutarse en cualquier sistema con una maacutequinavirtual Java Las clases de proxy despachan todas las llamadas a meacutetodo a una aplicacioacuten de servidor o aun servidor proxy Las clases del producto IBM Toolbox para Java completo estaacuten en el servidor proxyCuando un cliente utiliza una clase de proxy la peticioacuten se transfiere al servidor proxy que crea yadministra los objetos reales de IBM Toolbox para Java

La figura 1 muestra coacutemo se conectan al servidor el cliente estaacutendar y el cliente proxy El servidor proxypuede ser el servidor IBM i que contiene los datos

Figura 1 coacutemo se conectan a un servidor un cliente estaacutendar y un cliente proxy

Una aplicacioacuten que utiliza el soporte de proxy se ejecuta con mayor lentitud que al utilizar las clases deIBM Toolbox para Java estaacutendar debido a la comunicacioacuten adicional necesaria para dar soporte a lasclases de proxy maacutes pequentildeas Las aplicaciones que realizan menos llamadas a meacutetodo sufren un menordeterioro del rendimiento

Antes del soporte de proxy las clases que conteniacutean la interfaz puacuteblica todas las clases necesarias paraprocesar una peticioacuten y la propia aplicacioacuten se ejecutaban en la misma maacutequina virtual Java Al utilizar elsoporte de proxy la interfaz puacuteblica debe estar con la aplicacioacuten pero las clases para procesar laspeticiones pueden ejecutarse en una maacutequina virtual Java distinta El soporte de proxy no cambia lainterfaz puacuteblica Un mismo programa puede ejecutarse con la versioacuten de proxy de IBM Toolbox para Javao con la versioacuten estaacutendar

Coacutemo utilizar el archivo jt400Proxyjar

El objetivo del escenario proxy multinivel es conseguir que el archivo JAR de interfaz puacuteblica sea lo maacutespequentildeo posible para que el proceso de bajar este archivo de un applet dure menos tiempo Cuando seutilizan las clases de proxy no es necesario instalar en el cliente todo el producto IBM Toolbox para JavaEn su lugar utilice AS400JarMaker en el archivo jt400Proxyjar para incluir uacutenicamente los componentesnecesarios lo que hace que el archivo JAR sea lo maacutes pequentildeo posible

La figura 2 compara el tamantildeo de los archivos JAR de proxy con el de los archivos JAR estaacutendar

Figura 2 comparacioacuten del tamantildeo de los archivos JAR de proxy y los archivos JAR estaacutendar

288 IBM Toolbox para Java IBM Toolbox para Java

Una ventaja adicional es que el soporte de proxy requiere tener menos puertos abiertos a traveacutes de uncortafuegos Con IBM Toolbox para Java estaacutendar debe tener varios puertos abiertos Ello se debe a quecada servicio de IBM Toolbox para Java utiliza un puerto distinto para comunicarse con el servidor Porejemplo la llamada a mandato emplea un puerto distinto del que emplea JDBC que a su vez utiliza unpuerto distinto del que emplea la impresioacuten etc Cada uno de estos puertos debe estar permitido a traveacutesdel cortafuegos Sin embargo al utilizar el soporte de proxy todos los datos fluyen por el mismo puerto

Proxy estaacutendar y tuacuteneles HTTP

Hay disponibles dos opciones para llevar a cabo la ejecucioacuten mediante un proxy que son proxy estaacutendary tuacuteneles HTTPv La comunicacioacuten de proxy estaacutendar es aquella en que el cliente proxy y el servidor proxy se comunican

utilizando un socket en un puerto El puerto predeterminado es 3470 Para cambiar el puertopredeterminado puede elegir entre utilizar el meacutetodo setPort() en la clase ProxyServer o emplear laopcioacuten -port al iniciar el servidor proxy Por ejemplo

java comibmas400accessProxyServer -port 1234

v La comunicacioacuten de tuacuteneles HTTP es aquella en que el cliente proxy y el servidor proxy se comunicanmediante el servidor HTTP IBM Toolbox para Java proporciona un servlet que maneja la peticioacuten deproxy El cliente proxy llama al servlet mediante el servidor HTTP La ventaja de utilizar los tuacuteneles esque no es necesario abrir un puerto adicional a traveacutes de los cortafuegos ya que la comunicacioacuten seefectuacutea mediante el puerto HTTP La desventaja de la comunicacioacuten por tuacuteneles es que es maacutes lentaque la opcioacuten de proxy estaacutendar

IBM Toolbox para Java 289

IBM Toolbox para Java utiliza el nombre de servidor proxy para determinar si se utiliza la opcioacuten deproxy estaacutendar o proxy por tuacutenelesv En el caso de proxy estaacutendar utilice uacutenicamente el nombre del servidor Por ejemplo

comibmas400accessAS400proxyServer=myServer

v En el caso de proxy por tuacuteneles utilice un URL para forzar al cliente proxy a utilizar los tuacuteneles Porejemplo

comibmas400accessAS400proxyServer=httpmyServer

Cuando se ejecuta proxy estaacutendar existe una conexioacuten por socket entre el cliente y el servidor Si esaconexioacuten falla el servidor elimina los recursos asociados a ese cliente

Cuando se utilizan los tuacuteneles HTTP al utilizar el protocolo HTTP el proxy no tiene conexioacuten Estosignifica que se establece una conexioacuten nueva para cada flujo de datos Dado que el protocolo es sinconexioacuten el servidor no sabe si la aplicacioacuten de cliente ya no estaacute activa Por consiguiente el servidor nosabe cuaacutendo eliminar los recursos El servidor de comunicacioacuten por tuacuteneles resuelve este problemausando una hebra para eliminar los recursos en un intervalo predeterminado (que se basa en un valor detiempo de espera)

Una vez transcurrido el intervalo predeterminado se ejecuta la hebra que elimina los recursos que no sehan utilizado uacuteltimamente Dos propiedades del sistema rigen la hebrav comibmas400accessTunnelProxyServer clientCleanupInterval indica con queacute frecuencia en segundos

se ejecuta la hebra de limpieza El valor predeterminado es cada dos horasv comibmas400accessTunnelProxyServer clientLifetime indica cuaacutento tiempo en segundos puede estar

desocupado un recurso antes de que se elimine El valor predeterminado es 30 minutos

Coacutemo se utiliza el servidor proxy

Para utilizar la implementacioacuten de servidor proxy de las clases de IBM Toolbox para Java siga estospasos1 Ejecute AS400ToolboxJarMaker en jt400Proxyjar para descartar las clases que no necesite Este paso es

opcional pero recomendado2 Entregue jt400Proxyjar al cliente En el caso de los applets Java puede bajar el archivo JAR del

servidor HTML3 Determine queacute servidor va a utilizar para que haga de servidor proxy

v En el caso de las aplicaciones Java el servidor proxy puede ser cualquier equipov En el caso de los applets Java el servidor proxy debe ejecutarse en el mismo equipo que el servidor

HTTP4 Compruebe que haya colocado jt400jar en la variable CLASSPATH del servidor5 Inicie el servidor proxy o utilice el servlet de proxy

v Para proxy estaacutendar inicie el servidor proxy con el mandato siguientejava comibmas400accessProxyServer

v Para proxy por tuacuteneles configure el servidor HTTP para utilizar el servlet de proxy El nombre declase de servlet es comibmas400accessTunnelProxyServer y se incluye en jt400jar

6 En el cliente establezca una propiedad del sistema para identificar el servidor proxy IBM Toolboxpara Java utiliza esta propiedad del sistema para determinar si se utiliza la opcioacuten de proxy estaacutendaro proxy por tuacutenelesv Para proxy estaacutendar el valor de la propiedad es el nombre de la maacutequina que ejecuta el servidor

proxy Por ejemplocomibmas400accessAS400proxyServer=myServer

v En el caso de proxy por tuacuteneles utilice un URL para forzar al cliente proxy a utilizar los tuacutenelesPor ejemplo

290 IBM Toolbox para Java IBM Toolbox para Java

comibmas400accessAS400proxyServer=httpmyServer

7 Ejecute el programa cliente

Si desea trabajar tanto con las clases de proxy como con las clases que no estaacuten en el archivojt400Proxyjar puede hacer referencia al archivo jt400jar en vez de al archivo jt400Proxyjar El archivojt400Proxyjar es un subconjunto del archivo jt400jar y por eso todas las clases de proxy estaacuten contenidasen el archivo jt400jar

Ejemplos coacutemo se utilizan los servidores proxy

A continuacioacuten figuran tres ejemplos especiacuteficos de coacutemo se utiliza un servidor proxy siguiendo los pasosindicados anteriormentev Ejecutar una aplicacioacuten Java utilizando el soporte de proxyv Ejecutar un applet Java utilizando el soporte de proxyv Ejecutar una aplicacioacuten Java utilizando el soporte de proxy por tuacuteneles

Clases habilitadas para trabajar con el servidor proxy

Algunas de las clases de IBM Toolbox para Java estaacuten habilitadas para trabajar con la aplicacioacuten deservidor proxy Son las siguientesv JDBCv Acceso a nivel de registrov Sistema de archivos integradov Imprimirv Colas de datosv Llamada a mandatov Llamada a programav Llamada a programa de serviciov Espacio de usuariov Aacuterea de datosv Clase AS400v Clase SecureAS400

Por ahora las demaacutes clases no estaacuten soportadas por jt400Proxy Ademaacutes los permisos del sistema dearchivos integrado no funcionan uacutenicamente con el archivo JAR de proxy Sin embargo puede utilizar laclase JarMaker para incluir estas clases a partir del archivo jt400jar

Ejemplo ejecutar una aplicacioacuten Java utilizando el soporte de proxyEl ejemplo que figura a continuacioacuten muestra los pasos que se han de seguir para ejecutar una aplicacioacutenJava utilizando el soporte de proxy1 Elija una maacutequina que haga de servidor proxy El entorno Java y la variable CLASSPATH de la

maacutequina de servidor proxy incluyen el archivo jt400jar Esta maacutequina debe tener capacidad paraconectarse al sistema

2 Inicie el servidor proxy en esta maacutequina escribiendo lo siguiente javacomibmas400accessProxyServer -verbose El hecho de especificar la modalidad verbosa lepermitiraacute supervisar cuaacutendo el cliente se conecta y se desconecta

3 Elija una maacutequina que haga de cliente El entorno Java y la variable CLASSPATH de la maacutequinacliente incluyen el archivo jt400Proxyjar y las clases de la aplicacioacuten Esta maacutequina debe tenercapacidad para conectarse al servidor proxy pero no necesita una conexioacuten con el sistema

4 Establezca que el valor de la propiedad comibmas400accessAS400proxyServer del sistema sea elnombre del servidor proxy y ejecute la aplicacioacuten Para ello lo maacutes sencillo es utilizar la opcioacuten -D en

IBM Toolbox para Java 291

la mayoriacutea de las invocaciones a la maacutequina virtual Java java-Dcomibmas400accessAS400proxyServer=nombreMaacutequinaSp SuAplicacioacuten

5 A medida que se ejecuta la aplicacioacuten si especificoacute la modalidad verbosa en el paso 2 veraacute que laaplicacioacuten establece al menos una conexioacuten con el servidor proxy

Ejemplo ejecutar un applet Java utilizando el soporte de proxyEl ejemplo que figura a continuacioacuten muestra los pasos que hay que seguir para ejecutar un applet Javautilizando el soporte de proxy1 Elija una maacutequina que haga de servidor proxy Los applets solo pueden iniciar conexiones de red en

la maacutequina desde la que se bajaron originalmente por lo tanto esto funciona mejor cuando elservidor proxy se ejecuta en la misma maacutequina que el servidor HTTP El entorno Java y la variableCLASSPATH de la maacutequina de servidor proxy incluyen el archivo jt400jar

2 Inicie el servidor proxy en esta maacutequina escribiendo lo siguiente javacomibmas400accessProxyServer -verbose El hecho de especificar la modalidad verbosa lepermitiraacute supervisar cuaacutendo el cliente se conecta y se desconecta

3 Para poder ejecutar el applet primero es preciso bajar su coacutedigo por lo tanto conviene reducir almaacuteximo el tamantildeo del coacutedigo La clase AS400ToolboxJarMaker puede reducir notablemente el archivojt400Proxyjar al incluir solo el coacutedigo de los componentes utilizados por el applet Por ejemplo si unapplet solo utiliza JDBC y desea que el archivo jt400Proxyjar incluya la miacutenima cantidad de coacutedigopara reducir su tamantildeo ejecute el mandato siguiente

java utilitiesAS400ToolboxJarMaker -source jt400Proxyjar -destination jt400ProxySmalljar-component JDBC

4 El applet debe establecer que el valor de la propiedad del sistemacomibmas400accessAS400proxyServer sea el nombre del servidor proxy Una manera praacutectica dehacerlo en los applets es utilizar una clase Properties compilada (Ejemplo) Compile esta clase ycoloque el archivo Propertiesclass generado en el directorio comibmas400access (la misma viacutea dela que procede el archivo html) Por ejemplo si el archivo html es mystuffHelloWorldhtml elarchivo Propertiesclass estaacute en mystuffcomibmas400access

5 Ponga el archivo jt400ProxySmalljar en el mismo directorio que el archivo html (mystuff en el paso4)

6 Para hacer referencia al applet en el archivo HTML se escribiriacutealtAPPLET archive=jt400Proxyjar Propertiesclass code=SuAppletclass

width=300 height=100gt ltAPPLETgt

Ejemplo ejecutar una aplicacioacuten Java utilizando el soporte de proxypor tuacutenelesEl ejemplo que figura a continuacioacuten muestra los pasos que se han de seguir para ejecutar una aplicacioacutenJava utilizando el soporte de proxy por tuacuteneles1 Elija el servidor HTTP que desee para ejecutar el servidor proxy y a continuacioacuten configuacuterelo para

ejecutar el servlet comibmas400accessTunnelProxyServer (en jt400jar) Nota compruebe que elservidor HTTP tenga una conexioacuten con el sistema que contiene los datos o el recurso que la aplicacioacutenutiliza ya que el servlet se conecta a ese sistema para llevar a cabo las peticiones

2 Elija una maacutequina para actuar como cliente y compruebe que la variable CLASSPATH de la maacutequinacliente incluya el archivo jt400Proxyjar y las clases de la aplicacioacuten El cliente debe tener capacidadpara conectarse al servidor HTTP pero no necesita una conexioacuten con el sistema

3 Establezca que el valor de la propiedad comibmas400accessAS400proxyServer sea el nombre delservidor HTTP en formato de URL

4 Ejecute la aplicacioacuten estableciendo que el valor de la propiedadcomibmas400accessAS400proxyServer sea el nombre del servidor HTTP en formato de URL Paraello lo maacutes sencillo es utilizar la opcioacuten -D que estaacute disponible en la mayoriacutea de las maacutequinasvirtuales Java

java -Dcomibmas400accessAS400proxyServer=httppsMachineName YourApplication

292 IBM Toolbox para Java IBM Toolbox para Java

Nota el coacutedigo de cliente proxy crea el URL de servlet correcto concatenando servlet y el nombrede servlet al nombre de servidor En este ejemplo convierte httppsMachineName enhttppsMachineNameservletTunnelProxyServer

Capa de Sockets Segura y Extensioacuten de sockets seguros JavaIBM Toolbox para Java soporta el uso de Extensioacuten de sockets seguros Java (JSSE) para las conexiones deCapa de Sockets Segura (SSL) Java JSSE estaacute integrado en J2SE versioacuten 14 y versiones posteriores

Para obtener maacutes informacioacuten sobre JSSE consulte el sitio Web de JSSE de Sun

JSSE ofrece la posibilidad de llevar a cabo la autenticacioacuten de servidor permitir las comunicacionesseguras y cifrar datos Con JSSE puede hacer posible un intercambio de datos seguro entre los clientes yservidores que ejecutan cualquier protocolo de aplicaciones (por ejemplo HTTP y FTP) a traveacutes deTCPIP

Si ya ha utilizado sslight anteriormente deberaacute migrar a JSSE A partir de IBM i 54 JSSE es el uacutenicopaquete soportado y ya no se suministra sslight

Componentes XML (Extensible Markup Language)IBM Toolbox para Java consta de diversos componentes XML (Extensible Markup Language) entre ellosun analizador XML

Los componentes XML facilitan la realizacioacuten de muacuteltiples tareasv Crear interfaces de usuario graacuteficasv Llamar a programas del sistema y recuperar los resultadosv Especificar formatos de datos en el sistema

PCML (Program Call Markup Language)PCML (Program Call Markup Language) es un lenguaje de coacutedigos que permite llamar a programas delservidor escribiendo menos coacutedigo Java

El lenguaje PCML se basa en el lenguaje XML (Extensible Markup Language) una sintaxis de coacutedigosque se utiliza para describir los paraacutemetros de entrada y salida para los programas del servidor PCML lepermite definir coacutedigos que describen de forma completa los programas del servidor llamados por laaplicacioacuten Java

Nota si le interesa utilizar PCML o ya lo utiliza piense en la posibilidad de emplear XPCML (ExtensibleProgram Call Markup Language) XPCML mejora las funciones y la capacidad de utilizacioacuten de PCML alofrecer soporte para los esquemas XML Para obtener maacutes informacioacuten acerca de los componentes XMLde IBM Toolbox para Java entre ellos XPCML consulte Componentes XML (Extensible MarkupLanguage)

Una de las enormes ventajas de PCML es que no se tiene que escribir tanto coacutedigo Normalmente senecesita coacutedigo adicional para conectar recuperar y convertir datos entre un servidor y los objetos deIBM Toolbox para Java No obstante con el lenguaje PCML las llamadas al servidor con las clases deIBM Toolbox para Java se manejan de forma automaacutetica Los objetos de las clases PCML se generan apartir de los coacutedigos PCML y ayudan a minimizar la cantidad de coacutedigo que se necesita escribir parallamar a los programas del servidor desde una aplicacioacuten

IBM Toolbox para Java 293

Si bien el lenguaje PCML se ha disentildeado para dar soporte a las llamadas a programa distribuidas que serealizan a objetos de programas del servidor desde una plataforma Java de cliente tambieacuten se puedeutilizar el lenguaje PCML para efectuar llamadas a un programa del servidor desde dentro del entornodel servidor

Requisitos para utilizar PCMLEl componente PCML tiene los mismos requisitos de maacutequina virtual Java de la estacioacuten de trabajo que elresto de IBM Toolbox para Java

Ademaacutes para analizar PCML en tiempo de ejecucioacuten la CLASSPATH de la aplicacioacuten debe incluir unanalizador XML El analizador XML debe ampliar la clase orgapachexercesparsersSAXParser

Nota si preserializa el archivo PCML no es necesario que incluya un analizador XML en la CLASSPATHde la aplicacioacuten para ejecutar la aplicacioacutenReferencia relacionadaldquoRequisitos de estacioacuten de trabajo para IBM Toolbox para Javardquo en la paacutegina 6Aseguacuterese de que la estacioacuten de trabajo cumple con los siguientes requisitosldquoAnalizador XML y procesador XSLTrdquo en la paacutegina 330Algunos paquetes o funciones de IBM Toolbox para Java requieren que en tiempo de ejecucioacuten haya unanalizador XML (Extensible Markup Language) o un procesador XSLT (Extensible Stylesheet LanguageTransformations) en la variable de entorno CLASSPATH

Construir llamadas a programa IBM i con PCMLPara construir llamadas a programa IBM i con PCML debe empezar por crear una aplicacioacuten Java y unarchivo fuente PCML

En funcioacuten del proceso de su disentildeo debe escribir uno o varios archivos fuente PCML en los quedescriba las interfaces para los programas IBM i a los que va a llamar su aplicacioacuten Java Si deseaconsultar una descripcioacuten detallada de este lenguaje vaya a Sintaxis de PCML

A continuacioacuten la aplicacioacuten Java interactuacutea con las clases PCML (en este caso la claseProgramCallDocument) La clase ProgramCallDocument utiliza el archivo fuente PCML para pasarinformacioacuten entre la aplicacioacuten Java y los programas IBM i La figura 1 muestra coacutemo interactuacutean lasaplicaciones Java con las clases PCML

Figura 1 Realizacioacuten de llamadas a programa en el servidor mediante PCML

294 IBM Toolbox para Java IBM Toolbox para Java

Cuando la aplicacioacuten construye el objeto ProgramCallDocument el analizador XML lee y analiza elarchivo fuente PCML Para obtener maacutes informacioacuten sobre el uso de un analizador XML con IBM Toolboxpara Java consulte Analizador XML y procesador XSLT

Una vez creada la clase ProgramCallDocument el programa de aplicacioacuten utiliza los meacutetodos de la claseProgramCallDocument para recuperar la informacioacuten necesaria del servidor mediante el servidor DPC(llamadas a programa distribuidas) de IBM i

Para mejorar el rendimiento en tiempo de ejecucioacuten puede serializarse la clase ProgramCallDocumentdurante el tiempo de construccioacuten del producto Luego el documento de llamada a programa(ProgramCallDocument) se construye mediante el archivo serializado En este caso no se utiliza elanalizador XML en tiempo de ejecucioacuten Consulte el apartado Utilizacioacuten de archivos PCML serializados

Utilizacioacuten de los archivos fuente PCML

La aplicacioacuten Java utiliza el lenguaje PCML construyendo un objeto ProgramCallDocument con unareferencia al archivo fuente PCML El objeto ProgramCallDocument trata el archivo fuente PCML como sifuese un recurso Java La aplicacioacuten Java localiza el archivo fuente PCML mediante la CLASSPATH Java

El coacutedigo Java siguiente construye un objeto ProgramCallDocumentAS400 as400 = new AS400()ProgramCallDocument pcmlDoc = new ProgramCallDocument(as400 myPcmlDoc)

El objeto ProgramCallDocument buscaraacute el fuente PCML en un archivo llamado myPcmlDocpcmlObserve que no se especifica la extensioacuten pcml en el constructor

Si va a desarrollar una aplicacioacuten Java en un paquete Java puede calificar por paquete el nombre delrecurso PCML

IBM Toolbox para Java 295

AS400 as400 = new AS400()ProgramCallDocument pcmlDoc = new ProgramCallDocument(as400 comcompanypackagemyPcmlDoc)

Utilizacioacuten de los archivos PCML serializados

Para mejorar el rendimiento en tiempo de ejecucioacuten puede utilizar un archivo PCML serializado Unarchivo PCML serializado contiene objetos Java serializados que representan el PCML Los objetosserializados son los mismos objetos que se crean al construir el objeto ProgramCallDocument a partir deun archivo fuente tal como se ha descrito antes

La utilizacioacuten de archivos PCML serializados supone una mejora en el rendimiento porque no se necesitael analizador XML en tiempo de ejecucioacuten para procesar los coacutedigos PCML

El PCML se puede serializar mediante uno de estos procedimientosv Desde la liacutenea de mandatos

java comibmas400dataProgramCallDocument -serialize mypcml

Este procedimiento resulta de gran utilidad para construir la aplicacioacuten mediante procesos por lotesv Desde un programa Java

ProgramCallDocument pcmlDoc Inicializado en alguacuten otro lugarpcmlDocserialize()

Si el coacutedigo PCML se encuentra en un archivo fuente denominado myDocpcml el resultado de laserializacioacuten es un archivo denominado myDocpcmlser

Los archivos fuente PCML frente a los archivos PCML serializados

Tome en consideracioacuten el siguiente coacutedigo para construir un objeto ProgramCallDocumentAS400 as400 = new AS400()ProgramCallDocument pcmlDoc = new ProgramCallDocument(as400 commycompanymypackagemyPcmlDoc)

El constructor de ProgramCallDocument intentaraacute en primer lugar encontrar un archivo PCMLserializado cuyo nombre sea myPcmlDocpcmlser en el paquete commycompanymypackage de laCLASSPATH Java Si no existe un archivo PCML serializado el constructor intentaraacute encontrar un archivofuente PCML denominado myPcmlDocpcml en el paquete commycompanymypackage de laCLASSPATH Java Si tampoco existe ese archivo fuente PCML se lanzaraacute una excepcioacuten

Nombres calificados

La aplicacioacuten Java utiliza ProgramCallDocumentsetValue() para establecer los valores de entrada para elprograma de IBM i al que se llama Del mismo modo la aplicacioacuten utilizaProgramCallDocumentgetValue() para recuperar los valores de salida del programa IBM i

Cuando acceda a los valores desde la clase ProgramCallDocument debe especificar el nombre totalmentecalificado del elemento documento o del coacutedigo ltdatagt El nombre calificado es una concatenacioacuten de losnombres de todos los coacutedigos continentes en la que los nombres se separan mediante un punto

Por ejemplo si suponemos el siguiente fuente PCML el nombre calificado del elemento nbrPolygonsseriacutea polytestparm1nbrPolygons El nombre calificado para acceder al valor x de uno de los puntosde uno de los poliacutegonos seriacutea polytestparm1polygonpointx

Si alguno de los elementos necesarios para formar el nombre calificado no tiene nombre losdescendientes de ese elemento no tendriacutean un nombre calificado Desde el programa Java no puedeaccederse a ninguacuten elemento que no tenga un nombre calificado

296 IBM Toolbox para Java IBM Toolbox para Java

ltpcml version=10gtltprogram name=polytest path=QSYSlibMYLIBlibPOLYTESTpgmgt

lt-- El paraacutemetro 1 contiene una cuenta de poliacutegonos junto con una matriz de poliacutegonos --gtltstruct name=parm1 usage=inputoutputgt

ltdata name=nbrPolygons type=int length=4 init=5 gtlt-- Cada poliacutegono contiene una cuenta del nuacutemero de puntos junto con una matriz de puntos --gtltstruct name=polygon count=nbrPolygonsgt

ltdata name=nbrPoints type=int length=4 init=3 gtltstruct name=point count=nbrPoints gt

ltdata name=x type=int length=4 init=100 gtltdata name=y type=int length=4 init=200 gt

ltstructgtltstructgt

ltstructgtltprogramgt

ltpcmlgt

Acceso a los datos de las matrices

Cualquier elemento ltdatagt o ltstructgt se puede definir como una matriz mediante el atributo count Obien un elemento ltdatagt o ltstructgt puede estar contenido dentro de otro elemento ltstructgt que esteacutedefinido como una matriz

Ademaacutes un elemento ltdatagt o ltstructgt puede estar en una matriz multidimensional si maacutes de unelemento continente tiene especificado un atributo count

Para que su aplicacioacuten establezca u obtenga valores definidos como una matriz o definidos dentro de unamatriz debe especificar el iacutendice de matriz para cada una de las dimensiones de la matriz Los iacutendices dematriz se pasan en forma de una matriz de valores int Siguiendo con el fuente anterior de la matriz depoliacutegonos puede utilizarse el siguiente coacutedigo Java para recuperar la informacioacuten sobre los poliacutegonos

ProgramCallDocument polytest Inicializado en alguacuten otro lugarInteger nbrPolygons nbrPoints pointX pointYnbrPolygons = (Integer) polytestgetValue(polytestparm1nbrPolygons)Systemoutprintln(Nuacutemero de poliacutegonos + nbrPolygons)indices = new int[2]for (int polygon = 0 polygon lt nbrPolygonsintValue() polygon++)

indices[0] = polygonnbrPoints = (Integer) polytestgetValue(polytestparm1polygonnbrPoints indices )Systemoutprintln( Nuacutemero de puntos + nbrPoints)

for (int point = 0 point lt nbrPointsintValue() point++)

indices[1] = pointpointX = (Integer) polytestgetValue(polytestparm1polygonpointx indices )pointY = (Integer) polytestgetValue(polytestparm1polygonpointy indices )Systemoutprintln( X + pointX + Y + pointY)

Depuracioacuten

Al utilizar el lenguaje PCML para llamar a programas que tengan estructuras de datos complejas es faacutecilque el PCML contenga errores que provoquen excepciones de la clase ProgramCallDocument Si loserrores estaacuten relacionados con una descripcioacuten incorrecta de los desplazamientos y longitudes de losdatos la depuracioacuten de las excepciones puede resultar complicada

Utilice el meacutetodo siguiente de la clase Trace para activar el rastreo PCMLTracesetTraceOn(true) Active la funcioacuten de rastreoTracesetTracePCMLOn(true) Active el rastreo PCML

IBM Toolbox para Java 297

Nota todos los meacutetodos puacuteblicos de la clase PcmlMessageLog incluido el de rastreo quedaronobsoletos en la versioacuten V5R2

El meacutetodo setFileName() de Trace permite enviar los siguientes tipos de informacioacuten a archivos deanotaciones especiacuteficos o de forma predeterminada a Systemoutv Un vuelco de los datos hexadecimales que se esteacuten transfiriendo entre la aplicacioacuten Java y el programa

IBM i Este tipo de informacioacuten muestra los paraacutemetros de entrada del programa despueacutes de que losdatos de tipo caraacutecter se hayan convertido a EBCDIC y de que los enteros se hayan convertido abig-endian Tambieacuten muestra los paraacutemetros de salida antes de que se hayan convertido al entornoJavaLos datos aparecen en un formato tiacutepico de vuelco hexadecimal con los diacutegitos hexadecimales a laizquierda y una interpretacioacuten de tipo caraacutecter a la derecha A continuacioacuten figura un ejemplo de esteformato de vuelco (El ejemplo siguiente se ha modificado para adaptarlo a las restricciones deanchura)qgyolobj[6]Offset 0 4 8 C 0 4 8 C

048C048C0 5CE4E2D9 D7D9C640 4040

USRPRF

En el ejemplo anterior el vuelco indica que el seacuteptimo paraacutemetro tiene 10 bytes de datos establecidosen USRPRF

v En el caso de los paraacutemetros de salida a continuacioacuten del vuelco hexadecimal hay una descripcioacuten decoacutemo se han interpretado los datos para el documento (El ejemplo siguiente se ha modificado paraadaptarlo a las restricciones de anchura)

QSYSlibQGYlibQGYOLOBJpgm[2]Offset 0 4 8 C 0 4 8 C

048C048C0 0000000A 0000000A 00000001 00000068 D7F0F9F9 F0F1F1F5 F1F4F2F6 F2F5F400

P0990115142625420 00000410 00000001 00000000 00000000 00000000 00000000 00000000 00000000

40 00000000 00000000 00000000 00000000

Reading data -- Offset 0 Length 4 Name qgyolobjlistInfototalRcdsByte data 0000000A

Reading data -- Offset 4 Length 4 Name qgyolobjlistInforcdsReturnedByte data 0000000A

Reading data -- Offset 8 Length 4 Name qgyolobjlistInforqsHandleByte data 00000001

Reading data -- Offset c Length 4 Name qgyolobjlistInforcdLengthByte data 00000068

Reading data -- Offset 10 Length 1 Name qgyolobjlistInfoinfoCompleteByte data D7

Reading data -- Offset 11 Length 7 Name qgyolobjlistInfodateCreatedByte data F0F9F9F0F1F1F5

Reading data -- Offset 18 Length 6 Name qgyolobjlistInfotimeCreatedByte data F1F4F2F6F2F5

Reading data -- Offset 1e Length 1 Name qgyolobjlistInfolistStatusByte data F4

Reading data -- Offset 1f Length 1 Name qgyolobjlistInfo[8]Byte data 00

Reading data -- Offset 20 Length 4 Name qgyolobjlistInfolengthOfInfoByte data 00000410

Reading data -- Offset 24 Length 4 Name qgyolobjlistInfofirstRecordByte data 00000001

Reading data -- Offset 28 Length 40 Name qgyolobjlistInfo[11]Byte data 00000000000000000000000000000000000000000000000000000000000000000000000000000000

Los mensajes anteriores pueden resultar de gran utilidad para diagnosticar los casos en que los datos desalida procedentes del programa IBM i no coinciden con el fuente PCML Estos errores pueden

298 IBM Toolbox para Java IBM Toolbox para Java

producirse faacutecilmente cuando se utilizan longitudes y desplazamientos dinaacutemicos

Sintaxis de PCMLEl lenguaje PCML consta de los coacutedigos siguientes cada uno de ellos con sus propios coacutedigos deatributosv El coacutedigo program sentildeala el principio y el final del coacutedigo que describe un programav El coacutedigo struct define una estructura con nombre que puede especificarse como argumento en un

programa o como campo dentro de otra estructura con nombre Un coacutedigo de estructura contiene uncoacutedigo de datos o de estructura para cada uno de los campos de la estructura

v El coacutedigo data define un campo dentro de un programa o de una estructura

En el ejemplo siguiente la sintaxis de PCML describe un programa con una categoriacutea de datos y algunosdatos aisladosltprogramgt

ltstructgtltdatagt ltdatagt

ltstructgt

ltdatagt ltdatagt

ltprogramgt

Coacutedigo PCML program

El coacutedigo PCML program puede ampliarse con los elementos siguientesltprogram name=nombre

[ entrypoint=nombre-punto-entrada ][ epccsid=ccsid ][ path=nombre-viacutea ][ parseorder=lista-nombres ][ returnvalue= void | integer ][ threadsafe= true | false ]gt

ltprogramgt

En la siguiente tabla figuran los atributos del coacutedigo program Cada entrada contiene el nombre deatributo los valores vaacutelidos posibles y una descripcioacuten del atributo

Atributo Valor Descripcioacuten

entrypoint= nombre-punto-entrada Especifica el nombre del punto deentrada dentro de un objeto deprograma de servicio que es eldestino de esta llamada a programa

epccsid= ccsid Especifica el CCSID del punto deentrada dentro de un programa deservicio Para obtener maacutesinformacioacuten consulte las notas de lasentradas de programa de servicio enel javadoc de ServiceProgramCall

name= nombre Especifica el nombre del programa

IBM Toolbox para Java 299

Atributo Valor Descripcioacuten

path= nombre-viacutea Especifica la viacutea de acceso al objetoprograma El valor predeterminadoes presuponer que el programa estaacuteen la biblioteca QSYS

La viacutea debe ser un nombre vaacutelido deviacutea de acceso del sistema de archivosintegrado a un objeto PGM oSRVPGM Si se llama a un objetoSRVPGM se debe especificar elatributo de punto de entrada(entrypoint) para indicar el nombredel punto de entrada al que se ha dellamar

Si no se especifica el atributoentrypoint el valor predeterminadode este atributo consiste enpresuponer que se trata de un objetoPGM de la biblioteca QSYS Si seespecifica el atributo entrypoint elvalor predeterminado de este atributoconsiste en presuponer que se tratade un objeto SRVPGM de labiblioteca QSYS

El nombre de la viacutea se debeespecificar con todos los caracteres enmayuacutesculas

No utilice el atributo path cuando laaplicacioacuten tenga que establecer la viacuteade acceso en tiempo de ejecucioacutencomo por ejemplo cuando un usuarioespecifica queacute biblioteca se utilizapara la instalacioacuten En este casoutilice el meacutetodoProgramCallDocumentsetPath()

300 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

parseorder= lista-nombres Especifica el orden en que seprocesaraacuten los paraacutemetros de salidaEl valor especificado es una lista denombres de paraacutemetros separadosmediante espacios en blanco yescritos en el orden en que se han deprocesar Los nombres de la listadeben ser ideacutenticos a losespecificados en el atributo name delos coacutedigos que pertenecen al coacutedigoltprogramgt El valor predeterminadoconsiste en procesar los paraacutemetrosde salida en el orden en que aparecenlos coacutedigos en el documento

Algunos programas devuelveninformacioacuten en un paraacutemetro quedescribe informacioacuten de unparaacutemetro anterior Por ejemploimagine que un programa devuelveuna matriz de estructuras en elprimer paraacutemetro y el nuacutemero deentradas de la matriz en el segundoparaacutemetro En este caso es precisoprocesar primero el segundoparaacutemetro para queProgramCallDocument puedaaveriguar cuaacutentas estructuras se hande procesar en el primer paraacutemetro

returnvalue= void El programa no devuelve ninguacutenvalor

integer El programa devuelve unentero de 4 bytes con signo

Especifica el tipo de valor que sedevuelve (si es que se devuelvealguacuten valor) desde una llamada aprograma de servicio Este atributono estaacute permitido para llamadas aobjetos PGM

threadsafe= true El programa se considera seguroen ejecucioacuten multihebra

false El programa no es seguro enejecucioacuten multihebra

Si llama a un programa Java y a unprograma de IBM i que se encuentranen el mismo servidor utilice estapropiedad para especificar si deseallamar al programa IBM i en elmismo trabajo y en la misma hebraque utiliza el programa Java Si sabeque el programa es seguro enejecucioacuten multihebra al establecer lapropiedad en true obtendraacute un mejorrendimiento

Para mantener la seguridad delentorno de forma predeterminada sellama a los programas en trabajosservidores aparte El valorpredeterminado es false

Coacutedigo PCML struct

El coacutedigo PCML struct puede ampliarse con los elementos siguientes

IBM Toolbox para Java 301

ltstruct name=nombre[ count= nuacutemero | nombre-datos ][ maxvrm=serie-versioacuten ][ minvrm=serie-versioacuten ][ offset= nuacutemero | nombre-datos ][ offsetfrom= nuacutemero | nombre-datos | nombre-estructura ][ outputsize= nuacutemero | nombre-datos ][ usage= inherit | input | output | inputoutput ]gt

ltstructgt

En la siguiente tabla figuran los atributos del coacutedigo struct Cada entrada contiene el nombre de atributolos valores vaacutelidos posibles y una descripcioacuten del atributo

Atributo Valor Descripcioacuten

name= nombre Especifica el nombre del elementoltstructgt

count= nuacutemero donde nuacutemero define unamatriz dimensionada fija

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten el nuacutemero de elementos dela matriz El nombre-datos especificadopuede ser un nombre totalmentecalificado o un nombre relativo alelemento actual En los dos casos elnombre debe hacer referencia a unelemento ltdatagt que se hayadefinido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica que el elemento es unamatriz e identifica el nuacutemero deentradas de la matriz

Si se omite este atributo el elementono estaacute definido como una matrizaunque puede encontrarse dentro deotro elemento que esteacute definido comomatriz

maxvrm= serie-versioacuten Especifica la versioacuten de IBM i maacutesactual en la que existe el elemento Sila versioacuten de IBM i es superior a laespecificada en el atributo elelemento y sus hijos si es queexisten no se procesaraacuten duranteuna llamada a un programa Elelemento maxvrm resulta de utilidadpara definir interfaces de programaque difieren entre releases de IBM i

La sintaxis de la serie de versioacutendebe ser VvRrMm donde lasmayuacutesculas V R y M soncaracteres literales y las minuacutesculasv r y m son uno o variosdiacutegitos que representan la versioacuten elrelease y el nivel de modificacioacuten Elvalor de v debe estar comprendidoentre 1 y 255 ambos inclusive Elvalor de r y m debe estarcomprendido entre 0 y 255 ambosinclusive

302 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

minvrm= serie-versioacuten Especifica la versioacuten de IBM i maacutesantigua en la que existe esteelemento Si la versioacuten de IBM i esinferior a la especificada en esteatributo este elemento y sus hijos sies que existen no se procesaraacutendurante una llamada a un programaEste atributo resulta de utilidad paradefinir interfaces de programa quedifieren entre releases de IBM i

La sintaxis de la serie de versioacutendebe ser VvRrMm donde lasmayuacutesculas V R y M soncaracteres literales y las minuacutesculasv r y m son uno o variosdiacutegitos que representan la versioacuten elrelease y el nivel de modificacioacuten Elvalor de v debe estar comprendidoentre 1 y 255 ambos inclusive Elvalor de r y m debe estarcomprendido entre 0 y 255 ambosinclusive

IBM Toolbox para Java 303

Atributo Valor Descripcioacuten

offset= nuacutemero donde nuacutemero define undesplazamiento fijo

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten el desplazamiento para elelemento El nombre-datosespecificado puede ser un nombretotalmente calificado o un nombrerelativo al elemento actual En los doscasos el nombre debe hacerreferencia a un elemento ltdatagt quese haya definido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica el desplazamiento para elelemento ltstructgt dentro de unparaacutemetro de salida

Algunos programas devuelveninformacioacuten con una estructura fijaseguida de uno o maacutes campos oestructuras de longitud variable Eneste caso la ubicacioacuten de unelemento de longitud variable seespecifica normalmente comodesplazamiento o desplazamientoentre estructuras dentro delparaacutemetro El atributo offset seutiliza para describir eldesplazamiento para este elementoltstructgt

El atributo offset se utiliza junto conel atributo offsetfrom Si no seespecifica el atributo offsetfrom laubicacioacuten base para eldesplazamiento especificado en elatributo offset es el padre delelemento Si desea obtener maacutesinformacioacuten sobre coacutemo se utilizanlos atributos offset y offsetfromconsulte Especificacioacuten dedesplazamientos

Los atributos offset y offsetfrom solose utilizan para procesar los datos desalida de un programa Estosatributos no controlan eldesplazamiento ni el desplazamientoentre estructuras de los datos deentrada

Si se omite este atributo la ubicacioacutende los datos de este elemento siguede inmediato al elemento anterior delparaacutemetro si existe

304 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

offsetfrom= nuacutemero donde nuacutemero define unaubicacioacuten base fija El atributo nuacutemerose utiliza normalmente paraespecificar number=0 lo cualindica que se trata de undesplazamiento absoluto contado apartir del principio del paraacutemetro

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt que se utilizaraacute comoubicacioacuten base para eldesplazamiento El nombre deelemento especificado debe ser elpadre o un ancestro de este elementoEl valor del atributo offset seraacuterelativo a la ubicacioacuten del elementoque se especifica en este atributo Elnombre-datos especificado puede serun nombre totalmente calificado o unnombre relativo al elemento actualEn los dos casos el nombre debehacer referencia a un ancestro de esteelemento Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

nombre-estructura dondenombre-estructura define el nombre deun elemento ltstructgt que se utilizaraacutecomo ubicacioacuten base para eldesplazamiento El nombre deelemento especificado debe ser elpadre o un ancestro de este elementoEl valor del atributo offset seraacuterelativo a la ubicacioacuten del elementoque se especifica en este atributo Elnombre-estructura especificado puedeser un nombre totalmente calificado oun nombre relativo al elementoactual En los dos casos el nombredebe hacer referencia a un ancestrode este elemento Si desea maacutesinformacioacuten sobre coacutemo se resuelvenlos nombres relativos consulte elapartado Resolucioacuten de nombresrelativos

Especifica la ubicacioacuten base que elatributo offset toma como referencia

Si no se especifica el atributooffsetfrom la ubicacioacuten base deldesplazamiento especificado en elatributo offset es el padre de esteelemento Si desea obtener maacutesinformacioacuten sobre coacutemo se utilizanlos atributos offset y offsetfromconsulte Especificacioacuten dedesplazamientos

Los atributos offset y offsetfrom solose utilizan para procesar los datos desalida de un programa Estosatributos no controlan eldesplazamiento ni el desplazamientoentre estructuras de los datos deentrada

IBM Toolbox para Java 305

Atributo Valor Descripcioacuten

outputsize= nuacutemero donde nuacutemero define unnuacutemero fijo de bytes que se han dereservar

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten el nuacutemero de bytes que sehan de reservar para los datos desalida El nombre-datos especificadopuede ser un nombre totalmentecalificado o un nombre relativo alelemento actual En los dos casos elnombre debe hacer referencia a unelemento ltdatagt que se hayadefinido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica el nuacutemero de bytes que sehan de reservar para los datos desalida del elemento En el caso de losparaacutemetros de salida de longitudvariable se necesita el atributooutputsize para especificar cuaacutentosbytes deben reservarse para los datosque se han de devolver desde elprograma del servidor Puedeespecificarse un atributo outputsizeen todos los campos de longitudvariable y en todas las matrices detamantildeo variable o bien puedeespecificarse para un paraacutemetrocompleto que contenga uno o maacutescampos de longitud variable

El atributo outputsize no esnecesario y no debe especificarse enel caso de los paraacutemetros de salidade tamantildeo fijo

El valor especificado en este atributose utiliza como tamantildeo total delelemento incluidos todos sus hijosPor consiguiente el atributooutputsize no se tiene en cuenta enlos hijos ni en los descendientes delelemento

Si se omite este atributo el nuacutemerode bytes que se han de reservar paralos datos de salida se determina entiempo de ejecucioacuten sumando elnuacutemero de bytes que se han dereservar para todos los hijos delelemento ltstructgt

usage= inherit La utilizacioacuten se hereda del elementopadre Si la estructura no tiene padrese supone que la utilizacioacuten esinputoutput

input La estructura es un valor de entradadirigido al programa del host Si losdatos son de tipo caraacutecter onumeacuterico se efectuacutea la conversioacutenadecuada

output La estructura es un valor de salidaprocedente del programa del host Silos datos son de tipo caraacutecter onumeacuterico se efectuacutea la conversioacutenadecuada

inputoutput La estructura es tanto un valor deentrada como uno de salida

306 IBM Toolbox para Java IBM Toolbox para Java

Especificacioacuten de desplazamientos

Algunos programas devuelven informacioacuten con una estructura fija seguida de uno o maacutes campos oestructuras de longitud variable En este caso la ubicacioacuten de un elemento de longitud variable seespecifica normalmente como desplazamiento o desplazamiento entre estructuras dentro del paraacutemetro

Un desplazamiento es la distancia en bytes desde el principio de un paraacutemetro hasta el principio de uncampo o de una estructura Un desplazamiento entre estructuras es la distancia en bytes desde elprincipio de una estructura hasta el principio de otra estructura

En el caso de los primeros dado que la distancia se cuenta desde el principio del paraacutemetro especifiqueoffsetfrom=0 A continuacioacuten se muestra un ejemplo de desplazamiento desde el principio delparaacutemetroltpcml version=10gt

ltprogram name=myprog path=QSYSlibMYLIBlibMYPROGpgmgtlt-- la variable receiver contiene una viacutea de acceso --gtltstruct name=receiver usage=output outputsize=2048gt

ltdata name=pathType type=int length=4 gtltdata name=offsetToPathName type=int length=4 gtltdata name=lengthOfPathName type=int length=4 gtltdata name=pathName type=char length=lengthOfPathName

offset=offsetToPathName offsetfrom=0gtltstructgt

ltprogramgtltpcmlgt

En el caso de los desplazamientos entre estructuras puesto que la distancia se cuenta desde el principiode otra estructura se especifica el nombre de la estructura que es el punto de partida del desplazamientoA continuacioacuten se muestra un ejemplo de un desplazamiento entre estructuras desde el principio de unaestructura determinadaltpcml =10gt

ltprogram name=myprog path=QSYSlibMYLIBlibMYPROGpgmgtlt-- la variable receiver contiene un objeto --gtltstruct name=receiver usage=output gt

ltdata name=objectName type=char length=10 gtltdata name=libraryName type=char length=10 gtltdata name=objectType type=char length=10 gtltstruct name=pathInfo usage=output outputsize=2048 gt

ltdata name=pathType type=int length=4 gtltdata name=offsetToPathName type=int length=4 gtltdata name=lengthOfPathName type=int length=4 gtltdata name=pathName type=char length=lengthOfPathName

offset=offsetToPathName offsetfrom=pathInfogtltstructgt

ltstructgtltprogramgt

ltpcmlgt

Coacutedigo PCML data

El coacutedigo PCML data puede tener los atributos que se indican maacutes abajo

Los atributos delimitados por corchetes [] son opcionales Si especifica un atributo opcional no incluyalos corchetes en el fuente A continuacioacuten se facilita una lista con algunos valores de atributos delimitadospor llaves y las opciones posibles separadas por barras verticales | Cuando especifique uno de estosatributos no incluya las llaves en el fuente y especifique uacutenicamente una de las opciones que semuestranltdata type= char | int | packed | zoned | float | byte | struct

[ bidistringtype= ST4 | ST5 | ST6 | ST7 | ST8 | ST9 | ST10 | ST11 | DEFAULT ][ ccsid= nuacutemero | nombre-datos ][ chartype= onebyte | twobyte ]

IBM Toolbox para Java 307

[ count= nuacutemero | nombre-datos ][ init=serie ][ length= nuacutemero | nombre-datos ][ maxvrm=serie-versioacuten ][ minvrm=serie-versioacuten ][ name=nombre ][ offset= nuacutemero | nombre-datos ][ offsetfrom= nuacutemero | nombre-datos | nombre-estructura ][ outputsize= nuacutemero | nombre-datos | nombre-estructura ][ passby= reference | value ][ precision=nuacutemero ][ struct=nombre-estructura ][ trim= right | left | both | none ][ usage= inherit | input | output | inputoutput ]gt

ltdatagt

En la siguiente tabla figuran los atributos del coacutedigo data Cada entrada contiene el nombre de atributolos valores vaacutelidos posibles y una descripcioacuten del atributo

308 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

type= char donde char indica un valor detipo caraacutecter Un valor de datos detipo char se devuelve comojavalangString Para obtener maacutesinformacioacuten consulte los valores charpara la longitud

int donde int es un valor entero Unvalor de datos int se devuelve comojavalangLong Para obtener maacutesinformacioacuten consulte los valores intpara la longitud y la precisioacuten

packed donde packed es un valordecimal empaquetado Un valor dedatos packed se devuelve comojavamathBigDecimal Para obtenermaacutes informacioacuten consulte los valorespacked para la longitud y la precisioacuten

zoned donde zoned es un valordecimal con zona Un valor de datoszoned se devuelve comojavamathBigDecimal Para obtenermaacutes informacioacuten consulte los valoreszoned para la longitud y la precisioacuten

float donde float es un valor de comaflotante El atributo length especificael nuacutemero de bytes 4 u 8 Unentero de 4 bytes se devuelve comojavalangFloat Un entero de 8 bytesse devuelve como javalangDoublePara obtener maacutes informacioacutenconsulte los valores float para lalongitud

byte donde byte es un valor de tipobyte No se efectuacutea ningunaconversioacuten de los datos Un valor dedatos byte se devuelve como unamatriz de valores byte (byte[]) Paraobtener maacutes informacioacuten consulte losvalores byte para la longitud

struct donde struct especifica elnombre del elemento ltstructgt Unvalor struct permite definir unaestructura una vez y volver autilizarla varias veces dentro delmismo documento Cuandotype=struct es como si laestructura especificada apareciera enese lugar del documento Un valorstruct no permite un valor delongitud y no tiene ninguacuten valor parala precisioacuten

Indica el tipo de datos que se utiliza(caraacutecter entero empaquetado conzona coma flotante o estructura)

Los valores de los atributos delongitud y precisioacuten variacutean seguacuten losdiferentes tipos de datos Paraobtener maacutes informacioacuten consulte losvalores de longitud y precisioacuten

IBM Toolbox para Java 309

Atributo Valor Descripcioacuten

bidistringtype= DEFAULT donde DEFAULT es el tipode serie predeterminado para datosno bidireccionales (LTR)

ST4 donde ST4 es el tipo de serie 4

ST5 donde ST5 es el tipo de serie 5

ST6 donde ST6 es el tipo de serie 6

ST7 donde ST7 es el tipo de serie 7

ST8 donde ST8 es el tipo de serie 8

ST9 donde ST9 es el tipo de serie 9

ST10 donde ST10 es el tipo de serie10

ST11 donde ST11 es tipo de serie 11

Especifica el tipo de seriebidireccional para los elementosltdatagt que tengan type=char Si seomite este atributo el tipo de seriepara este elemento vienedeterminado por el CCSID(especificado expliacutecitamente o elCCSID predeterminado del entornode host)

Los tipos de serie estaacuten definidos enel javadoc correspondiente a la claseBidiStringType

ccsid= nuacutemero donde nuacutemero define unCCSID fijo que no cambia nunca

nombre-datos donde nombre-datosdefine el nombre que contendraacute entiempo de ejecucioacuten el CCSID de losdatos de tipo caraacutecter El nombre-datosespecificado puede ser un nombretotalmente calificado o un nombrerelativo al elemento actual En losdos casos el nombre debe hacerreferencia a un elemento ltdatagt quese haya definido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica el CCSID (ID de juego decaracteres codificados) de los datosde tipo caraacutecter para el elementoltdatagt El atributo ccsid solo sepuede especificar para los elementosltdatagt que tengan type=char

Si se omite este atributo sepresupone que los datos de tipocaraacutecter de este elemento tienen elCCSID predeterminado del entornode host

chartype= onebyte donde onebyte especifica eltamantildeo de cada caraacutecter

twobyte donde twobyte especifica eltamantildeo de cada caraacutecter

Cuando se utiliza chartype el atributolength=nuacutemero especifica elnuacutemero de caracteres no el nuacutemerode bytes

Especifica el tamantildeo de cada caraacutecter

310 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

count= nuacutemero donde nuacutemero define unnuacutemero fijo de elementos de unamatriz dimensionada

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten el nuacutemero de elementos dela matriz El nombre-datos especificadopuede ser un nombre totalmentecalificado o un nombre relativo alelemento actual En los dos casos elnombre debe hacer referencia a unelemento ltdatagt que se hayadefinido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica que el elemento es unamatriz e identifica el nuacutemero deentradas de la matriz

Si se omite el atributo count elelemento no estaacute definido comomatriz aunque puede encontrarsedentro de otro elemento que esteacutedefinido como matriz

init= serie Especifica un valor inicial para elelemento ltdatagt Se utiliza el valorinit si el programa de aplicacioacuten noestablece de forma expliacutecita ninguacutenvalor inicial al utilizar elementosltdatagt con la especificacioacutenusage=input o usage=inputoutput

El valor inicial especificado se utilizapara inicializar los valores escalaresSi el elemento estaacute definido comomatriz o se encuentra dentro de unaestructura definida como matriz elvalor inicial especificado se utilizacomo valor inicial para todas lasentradas de la matriz

IBM Toolbox para Java 311

Atributo Valor Descripcioacuten

length= nuacutemero donde nuacutemero define elnuacutemero de bytes que requieren losdatos Sin embargo al utilizar elatributo chartypenuacutemero especifica elnuacutemero de caracteres no el nuacutemerode bytes

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten la longitud Uacutenicamentepuede especificarse un nombre-datospara los elementos ltdatagt quetengan type=char o type=byte Elnombre-datos especificado puede serun nombre totalmente calificado o unnombre relativo al elemento actualEn los dos casos el nombre debehacer referencia a un elementoltdatagt que se haya definido con laespecificacioacuten type=int Si deseamaacutes informacioacuten sobre coacutemo seresuelven los nombres relativosconsulte el apartado Resolucioacuten denombres relativos

Especifica la longitud del elementode datos El uso de este atributo variacuteaen funcioacuten del tipo de datos Paraobtener maacutes informacioacuten consulte losvalores de longitud y precisioacuten

maxvrm= serie-versioacuten Especifica la versioacuten de IBM i maacutesactual en la que existe este elementoSi la versioacuten de IBM i es superior a laespecificada en este atributo esteelemento y sus hijos en caso de queexistan no se procesaraacuten durante unallamada a un programa Este atributoresulta de utilidad para definirinterfaces de programa que difierenentre releases de IBM i

La sintaxis de la serie de versioacutendebe ser VvRrMm donde lasmayuacutesculas V R y M soncaracteres literales y las minuacutesculasv r y m son uno o varios diacutegitosque representan la versioacuten el releasey el nivel de modificacioacuten El valorde v debe estar comprendido entre1 y 255 ambos inclusive El valor der y m debe estar comprendidoentre 0 y 255 ambos inclusive

312 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

minvrm= serie-versioacuten Especifica la versioacuten de IBM i maacutesantigua en la que existe esteelemento Si la versioacuten de IBM i esinferior a la especificada en esteatributo este elemento y sus hijos encaso de que existan no se procesaraacutendurante una llamada a un programaEste atributo resulta de utilidad paradefinir interfaces de programa quedifieren entre releases de IBM i

La sintaxis de la serie de versioacutendebe ser VvRrMm donde lasmayuacutesculas V R y M soncaracteres literales y las minuacutesculasv r y m son uno o varios diacutegitosque representan la versioacuten el releasey el nivel de modificacioacuten El valorde v debe estar comprendido entre1 y 255 ambos inclusive El valor der y m debe estar comprendidoentre 0 y 255 ambos inclusive

name= nombre Especifica el nombre del elementoltdatagt

IBM Toolbox para Java 313

Atributo Valor Descripcioacuten

offset= nuacutemero donde nuacutemero define undesplazamiento fijo

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten el desplazamiento paraeste elemento El nombre-datosespecificado puede ser un nombretotalmente calificado o un nombrerelativo al elemento actual En losdos casos el nombre debe hacerreferencia a un elemento ltdatagt quese haya definido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica el desplazamiento para elelemento ltdatagt dentro de unparaacutemetro de salida

Algunos programas devuelveninformacioacuten con una estructura fijaseguida de uno o maacutes campos oestructuras de longitud variable Eneste caso la ubicacioacuten de unelemento de longitud variable seespecifica normalmente comodesplazamiento o desplazamientoentre estructuras dentro delparaacutemetro

El atributo offset se utiliza junto conel atributo offsetfrom Si no seespecifica el atributo offsetfrom laubicacioacuten base del desplazamientoespecificado en el atributo offset es elpadre de este elemento Si deseaobtener maacutes informacioacuten sobre coacutemose utilizan los atributos offset yoffsetfrom consulte Especificacioacuten dedesplazamientos

Los atributos offset y offsetfrom solose utilizan para procesar los datos desalida de un programa Estosatributos no controlan eldesplazamiento ni el desplazamientoentre estructuras de los datos deentrada

Si se omite este atributo la ubicacioacutende los datos de este elemento siguede inmediato al elemento anterior enel paraacutemetro si existe

314 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

offsetfrom= nuacutemero donde nuacutemero define unaubicacioacuten base fija Nuacutemero se utilizanormalmente para especificarnumber=0 lo cual indica que setrata de un desplazamiento absolutocontado a partir del principio delparaacutemetro

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt que se utilizaraacute comoubicacioacuten base para eldesplazamiento El nombre deelemento especificado debe ser elpadre o un ancestro de este elementoEl valor del atributo offset seraacuterelativo a la ubicacioacuten del elementoque se especifica en este atributo Elnombre-datos especificado puede serun nombre totalmente calificado o unnombre relativo al elemento actualEn los dos casos el nombre debehacer referencia a un ancestro de esteelemento Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

nombre-estructura dondenombre-estructura define el nombre deun elemento ltstructgt que se utilizaraacutecomo ubicacioacuten base para eldesplazamiento El nombre deelemento especificado debe ser elpadre o un ancestro de este elementoEl valor del atributo offset seraacuterelativo a la ubicacioacuten del elementoque se especifica en este atributo Elnombre-estructura especificado puedeser un nombre totalmente calificado oun nombre relativo al elementoactual En los dos casos el nombredebe hacer referencia a un ancestrode este elemento Si desea maacutesinformacioacuten sobre coacutemo se resuelvenlos nombres relativos consulte elapartado Resolucioacuten de nombresrelativos

Especifica la ubicacioacuten base que elatributo offset toma como referencia

Si no se especifica el atributooffsetfrom la ubicacioacuten base deldesplazamiento especificado en elatributo offset es el padre de esteelemento Si desea obtener maacutesinformacioacuten sobre coacutemo se utilizanlos atributos offset y offsetfromconsulte Especificacioacuten dedesplazamientos

Los atributos offset y offsetfrom solose utilizan para procesar los datos desalida de un programa Estosatributos no controlan eldesplazamiento ni el desplazamientoentre estructuras de los datos deentrada

IBM Toolbox para Java 315

Atributo Valor Descripcioacuten

outputsize= nuacutemero donde nuacutemero define unnuacutemero fijo de bytes que se han dereservar

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten el nuacutemero de bytes que sehan de reservar para los datos desalida El nombre-datos especificadopuede ser un nombre totalmentecalificado o un nombre relativo alelemento actual En los dos casos elnombre debe hacer referencia a unelemento ltdatagt que se hayadefinido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica el nuacutemero de bytes que sehan de reservar para los datos desalida del elemento En el caso de losparaacutemetros de salida de longitudvariable se necesita el atributooutputsize para especificar cuaacutentosbytes deben reservarse para los datosque se han de devolver desde elprograma IBM i Puede especificarseun atributo outputsize en todos loscampos de longitud variable y entodas las matrices de dimensioacutenvariable o bien puede especificarsepara un paraacutemetro completo quecontenga uno o maacutes campos delongitud variable

El atributo outputsize no es necesarioy no debe especificarse en el caso delos paraacutemetros de salida de tamantildeofijo

El valor especificado en este atributose utiliza como tamantildeo total delelemento incluidos todos los hijosdel elemento Por consiguiente elatributo outputsize no se tiene encuenta en los hijos ni en losdescendientes del elemento

Si se omite outputsize el nuacutemero debytes que se han de reservar para losdatos de salida se determina entiempo de ejecucioacuten sumando elnuacutemero de bytes que se han dereservar para todos los hijos delelemento ltstructgt

passby= reference donde reference indica que elparaacutemetro se pasaraacute por referenciaCuando se llame al programa se lepasaraacute un puntero que sentildeale al valordel paraacutemetro

value donde value indica un valorentero Este valor solo estaacute permitidocuando se especifica type=int ylength=4

Especifica si el paraacutemetro se pasa porreferencia o por valor Este atributosolo estaacute permitido cuando esteelemento es hijo de un elementoltprogramgt que define una llamada aun programa de servicio

precision= nuacutemero Especifica el nuacutemero de bytes deprecisioacuten para algunos tipos de datosnumeacutericos Para obtener maacutesinformacioacuten consulte los valores delongitud y precisioacuten

struct= nombre Especifica el nombre de un elementoltstructgt para el elemento ltdatagt Unatributo struct solo se puedeespecificar para los elementos ltdatagtque tengan type=struct

316 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

trim= right donde right es el valorpredeterminado que significa que serecortaraacuten los espacios en blanco decola

left donde left significa que serecortaraacuten los espacios en blancoprecedentes

both donde both significa que serecortaraacuten los espacios en blancoprecedentes y de cola

none donde none significa que no serecortaraacuten los espacios en blanco

Especifica coacutemo se recortaraacute elespacio en blanco de los datos detipo caraacutecter

usage= inherit La utilizacioacuten se hereda del elementopadre Si la estructura no tiene padrese supone que la utilizacioacuten esinputoutput

input Define un valor de entrada para elprograma del host Si los datos sonde tipo caraacutecter o numeacuterico seefectuacutea la conversioacuten adecuada

output Define un valor de salida desde elprograma del host Si los datos sonde tipo caraacutecter o numeacuterico seefectuacutea la conversioacuten adecuada

inputoutput Define tanto un valor de entradacomo uno de salida

Especificacioacuten de desplazamientos

Algunos programas devuelven informacioacuten con una estructura fija seguida de uno o maacutes campos oestructuras de longitud variable En este caso la ubicacioacuten de un elemento de longitud variable seespecifica normalmente como desplazamiento o desplazamiento entre estructuras dentro del paraacutemetro

Un desplazamiento es la distancia en bytes desde el principio de un paraacutemetro hasta el principio de uncampo o de una estructura Un desplazamiento entre estructuras es la distancia en bytes desde elprincipio de una estructura hasta el principio de otra estructura

En el caso de los primeros dado que la distancia se cuenta desde el principio del paraacutemetro se debeespecificar offsetfrom=0 A continuacioacuten se muestra un ejemplo de desplazamiento desde el principiodel paraacutemetroltpcml version=10gt

ltprogram name=myprog path=QSYSlibMYLIBlibMYPROGpgmgtlt-- la variable receiver contiene una viacutea de acceso --gtltstruct name=receiver usage=output outputsize=2048gt

ltdata name=pathType type=int length=4 gtltdata name=offsetToPathName type=int length=4 gtltdata name=lengthOfPathName type=int length=4 gtltdata name=pathName type=char length=lengthOfPathName

offset=offsetToPathName offsetfrom=0gtltstructgt

ltprogramgtltpcmlgt

IBM Toolbox para Java 317

En el caso de los desplazamientos entre estructuras puesto que la distancia se cuenta desde el principiode otra estructura se especifica el nombre de la estructura que es el punto de partida del desplazamientoA continuacioacuten se muestra un ejemplo de un desplazamiento entre estructuras desde el principio de unaestructura determinadaltpcml version=10gt

ltprogram name=myprog path=QSYSlibMYLIBlibMYPROGpgmgtlt-- la variable receiver contiene un objeto --gtltstruct name=receiver usage=output gt

ltdata name=objectName type=char length=10 gtltdata name=libraryName type=char length=10 gtltdata name=objectType type=char length=10 gtltstruct name=pathInfo usage=output outputsize=2048 gt

ltdata name=pathType type=int length=4 gtltdata name=offsetToPathName type=int length=4 gtltdata name=lengthOfPathName type=int length=4 gtltdata name=pathName type=char length=lengthOfPathName

offset=offsetToPathName offsetfrom=pathInfogtltstructgt

ltstructgtltprogramgt

ltpcmlgt

Valores de longitud y precisioacuten

Los valores de los atributos de longitud y precisioacuten variacutean seguacuten los diferentes tipos de datos

En la tabla siguiente se indica cada tipo de datos con una descripcioacuten de los valores posibles de longitudy precisioacuten

Tipo de datos Longitud Precisioacuten

type=char Nuacutemero de bytes de datos de esteelemento que puede ser distinto delnuacutemero de caracteres Debeespecificar un nuacutemero literal o unnombre de datos

No vaacutelido

type=int Nuacutemero de bytes de datos de esteelemento 2 4 o 8 Debe especificarun nuacutemero literal

Indica el nuacutemero de bits de precisioacuteny si el entero es con signo o sinsigno

v Para length=2

ndash Utilice precision=15 para unentero de 2 bytes con signo Estees el valor predeterminado

ndash Utilice precision=16 para unentero de 2 bytes sin signo

v Para length=4

ndash Utilice precision=31 para unentero de 4 bytes con signo

ndash Utilice precision=32 para unentero de 4 bytes sin signo

v Para length=8 utiliceprecision=63 para un entero de8 bytes con signo

type=packed o zoned Nuacutemero de diacutegitos numeacutericos dedatos de este elemento Debeespecificar un nuacutemero literal

Nuacutemero de diacutegitos decimales delelemento Este nuacutemero debe sersuperior o igual a cero e inferior oigual al nuacutemero total de diacutegitosespecificado en el atributo length

318 IBM Toolbox para Java IBM Toolbox para Java

Tipo de datos Longitud Precisioacuten

type=float Nuacutemero de bytes 4 o 8 de datos deeste elemento Debe especificar unnuacutemero literal

No vaacutelido

type=byte Nuacutemero de bytes de datos de esteelemento Debe especificar un nuacutemeroliteral o un nombre de datos

No vaacutelido

type=struct No permitido No vaacutelido

Resolucioacuten de nombres relativos

Hay varios atributos que permiten especificar como valor de atributo el nombre de otro elemento ocoacutedigo dentro del documento El nombre especificado puede ser un nombre totalmente calificado o unnombre relativo al coacutedigo actual

Para resolver un nombre se mira si el nombre corresponde al nombre de un hijo o un descendiente delcoacutedigo que contiene el coacutedigo actual Si el nombre no puede resolverse a este nivel la buacutesqueda continuacuteaen el coacutedigo continente que le sigue en la jerarquiacutea Este proceso de resolucioacuten continuacutea hasta que sellega en uacuteltima instancia a una coincidencia con un coacutedigo que esteacute contenido en el coacutedigo ltpcmlgt o elcoacutedigo ltrfmlgt en cuyo caso el nombre se considera absoluto no relativo

A continuacioacuten se muestra un ejemplo de PCMLltpcml version=10gt

ltprogram name=polytest path=QSYSlibMYLIBlibPOLYTESTpgmgtlt-- El paraacutemetro 1 contiene una cuenta de poliacutegonos junto con una matriz de poliacutegonos --gtltstruct name=parm1 usage=inputoutputgt

ltdata name=nbrPolygons type=int length=4 init=5 gtlt-- Cada poliacutegono contiene una cuenta del nuacutemero de puntos junto con una matriz de puntos --gtltstruct name=polygon count=nbrPolygonsgt

ltdata name=nbrPoints type=int length=4 init=3 gtltstruct name=point count=nbrPoints gt

ltdata name=x type=int length=4 init=100 gtltdata name=y type=int length=4 init=200 gt

ltstructgtltstructgt

ltstructgtltprogramgt

ltpcmlgt

A continuacioacuten se muestra un ejemplo de RFMLltrfml version=40gt

ltstruct name=polygongtlt-- Cada poliacutegono contiene una cuenta del nuacutemero de puntos junto con una matriz de puntos --gtltdata name=nbrPoints type=int length=4 init=3 gtltdata name=point type=struct struct=point count=nbrPoints gt

ltstructgtltstruct name=point gt

ltdata name=x type=int length=4 init=100 gtltdata name=y type=int length=4 init=200 gt

ltstructgtltrecordformat name=polytestgt

lt-- Este formato contiene una cuenta de poliacutegonos junto con una matriz de poliacutegonos --gtltdata name=nbrPolygons type=int length=4 init=5 gtltdata name=polygon type=struct struct=polygon count=nbrPolygons gt

ltrecordformatgtltrfmlgt

IBM Toolbox para Java 319

Record Format Markup LanguageRFML (Record Format Markup Language) es una extensioacuten de XML para especificar formatos de registro

El componente RFML de IBM Toolbox para Java permite a las aplicaciones Java utilizar documentosRFML para especificar y manipular campos dentro de determinados tipos de registros

Los documentos RFML llamados archivos fuente RFML representan un subconjunto de los tipos dedatos de especificacioacuten de descripcioacuten de datos (DDS) de utilidad definidos para los archivos fiacutesicos yloacutegicos de IBM i Puede utilizar documentos RFML para gestionar la informacioacuten de los elementossiguientesv Registros de archivov Entradas de cola de datosv Espacios de usuariov Almacenamientos intermedios de datos arbitrarios

Nota para obtener maacutes informacioacuten sobre coacutemo se utiliza DDS para describir atributos de datosconsulte la referencia de DDS

RFML guarda un enorme parecido con Program Call Markup Language (PCML) otra extensioacuten de XMLsoportada por IBM Toolbox para Java RFML no es un subconjunto ni un superconjunto de PCML sinoun tipo de lenguaje similar que antildeade varios elementos y atributos nuevos y omite otros

PCML proporciona una alternativa orientada a XML al uso de las clases ProgramCall yProgramParameter Del mismo modo RFML ofrece una alternativa de faacutecil manejo y mantenimiento a lasclases Record RecordFormat y FieldDescriptionInformacioacuten relacionadaDDS (Especificaciones de descripcioacuten de datos)

Requisitos para utilizar RFMLEl componente RFML tiene los mismos requisitos de maacutequina virtual Java de la estacioacuten de trabajo que elresto de IBM Toolbox para Java

Ademaacutes para analizar RFML en tiempo de ejecucioacuten la CLASSPATH de la aplicacioacuten debe incluir unanalizador XML El analizador XML debe ampliar la clase orgapachexercesparsersSAXParser Paraobtener maacutes informacioacuten consulte ldquoAnalizador XML y procesador XSLTrdquo en la paacutegina 330

Nota RFML tiene los mismos requisitos de analizador que PCML Como sucede con PCML sipreserializa el archivo RFML no es necesario que incluya un analizador XML en la CLASSPATH de laaplicacioacuten para ejecutar la aplicacioacutenReferencia relacionadaldquoRequisitos de estacioacuten de trabajo para IBM Toolbox para Javardquo en la paacutegina 6Aseguacuterese de que la estacioacuten de trabajo cumple con los siguientes requisitos

Ejemplo coacutemo se utiliza RFML en comparacioacuten con el uso de las clases Recordde IBM Toolbox para JavaEste ejemplo muestra las diferencias entre el uso de RFML y el uso de las clases Record de IBM Toolboxpara Java

Al utilizar las clases Record tradicionales se intercalan las especificaciones de formato de datos con laloacutegica de empresa de la aplicacioacuten Antildeadir cambiar o suprimir un campo significa tener que editar yvolver a compilar el coacutedigo Java Sin embargo al utilizar RFML se aiacuteslan las especificaciones de formatode datos en los archivos fuente RFML que estaacuten completamente aparte de la loacutegica de empresaAcomodar un campo significa modificar el archivo RFML a menudo sin tener que cambiar ni volver acompilar la aplicacioacuten Java

320 IBM Toolbox para Java IBM Toolbox para Java

En el ejemplo se supone que la aplicacioacuten maneja registros de cliente que ha definido en un archivofuente RFML y que ha denominado qcustcdtrfml El archivo fuente representa los campos que componencada registro de cliente

El listado que figura a continuacioacuten muestra coacutemo una aplicacioacuten Java puede interpretar un registro decliente utilizando las clases Record RecordFormat y FieldDescription de IBM Toolbox para Java Almacenamiento intermedio que contiene la representacioacuten binaria de un registro de informacioacuten

byte[] bytes

Lea los datos del registro en el almacenamiento intermedio

Configure un objeto RecordFormat para representar un registro de clienteRecordFormat recFmt1 = new RecordFormat(cusrec)recFmt1addFieldDescription(new ZonedDecimalFieldDescription(new AS400ZonedDecimal(6 0) cusnum))recFmt1addFieldDescription(new CharacterFieldDescription(new AS400Text(8 37) lstnam))recFmt1addFieldDescription(new CharacterFieldDescription(new AS400Text(3 37) init))recFmt1addFieldDescription(new CharacterFieldDescription(new AS400Text(13 37) street))recFmt1addFieldDescription(new CharacterFieldDescription(new AS400Text(6 37) city))recFmt1addFieldDescription(new CharacterFieldDescription(new AS400Text(2 37) state))recFmt1addFieldDescription(new ZonedDecimalFieldDescription(new AS400ZonedDecimal(5 0) zipcod))recFmt1addFieldDescription(new ZonedDecimalFieldDescription(new AS400ZonedDecimal(4 0) cdtlmt))recFmt1addFieldDescription(new ZonedDecimalFieldDescription(new AS400ZonedDecimal(1 0) chgcod))recFmt1addFieldDescription(new ZonedDecimalFieldDescription(new AS400ZonedDecimal(6 2) baldue))recFmt1addFieldDescription(new ZonedDecimalFieldDescription(new AS400ZonedDecimal(6 2) cdtdue))

Lea el almacenamiento intermedio de bytes en el objeto RecordFormatDocumentRecord rec1 = new Record(recFmt1 bytes)

Obtenga los valores de los camposSystemoutprintln(cusnum + rec1getField(cusnum))Systemoutprintln(lstnam + rec1getField(lstnam))Systemoutprintln(init + rec1getField(init))Systemoutprintln(street + rec1getField(street))Systemoutprintln(city + rec1getField(city))Systemoutprintln(state + rec1getField(state))Systemoutprintln(zipcod + rec1getField(zipcod))Systemoutprintln(cdtlmt + rec1getField(cdtlmt))Systemoutprintln(chgcod + rec1getField(chgcod))Systemoutprintln(baldue + rec1getField(baldue))Systemoutprintln(cdtdue + rec1getField(cdtdue))

Por comparacioacuten aquiacute se muestra coacutemo se podriacutea interpretar el mismo registro utilizando RFML

El coacutedigo Java para interpretar el contenido del registro de datos de cliente utilizando RFML podriacutea tenerel siguiente aspecto

Almacenamiento intermedio que contiene la representacioacuten binaria de un registro de informacioacuten

byte[] bytes

Lea los datos del registro en el almacenamiento intermedio

Analice el archivo RFML en un objeto RecordFormatDocument El archivo fuente RFML se llama qcustcdtrfmlRecordFormatDocument rfml1 = new RecordFormatDocument(qcustcdt)

Lea el almacenamiento intermedio de bytes en el objeto RecordFormatDocumentrfml1setValues(cusrec bytes)

Obtenga los valores de los campos

IBM Toolbox para Java 321

Systemoutprintln(cusnum + rfml1getValue(cusreccusnum))Systemoutprintln(lstnam + rfml1getValue(cusreclstnam))Systemoutprintln(init + rfml1getValue(cusrecinit))Systemoutprintln(street + rfml1getValue(cusrecstreet))Systemoutprintln(city + rfml1getValue(cusreccity))Systemoutprintln(state + rfml1getValue(cusrecstate))Systemoutprintln(zipcod + rfml1getValue(cusreczipcod))Systemoutprintln(cdtlmt + rfml1getValue(cusreccdtlmt))Systemoutprintln(chgcod + rfml1getValue(cusrecchgcod))Systemoutprintln(baldue + rfml1getValue(cusrecbaldue))Systemoutprintln(cdtdue + rfml1getValue(cusreccdtdue))

Clase RecordFormatDocumentLa clase RecordFormatDocument permite a los programas Java efectuar la conversioacuten entrerepresentaciones de datos RFML y objetos Record y RecordFormat para su uso con otros componentes deIBM Toolbox para Java

Clase RecordFormatDocument

La clase RecordFormatDocument representa un archivo fuente RFML y proporciona meacutetodos quepermiten al programa Java llevar a cabo las acciones siguientesv Componer archivos fuente RFML a partir de objetos Record objetos RecordFormat y matrices de bytesv Generar objetos Record objetos RecordFormat y matrices de bytes que representan la informacioacuten que

contiene el objeto RecordFormatDocumentv Obtener y establecer los valores de distintos objetos y tipos de datosv Generar XML (RFML) que representa los datos que contiene el objeto RecordFormatDocumentv Serializar el archivo fuente RFML que representa el objeto RecordFormatDocument

Para obtener maacutes informacioacuten sobre los meacutetodos disponibles consulte el resumen de meacutetodos de Javadocde la clase RecordFormatDocument

Utilizacioacuten de la clase RecordFormatDocument con otras clases de IBM Toolbox para Java

Utilice la clase RecordFormatDocument con las siguientes clases de IBM Toolbox para Javav Las clases orientadas a registros que incluyen las clases de archivo de acceso a nivel de registro

(AS400File SequentialFile y KeyedFile) que leen manipulan y escriben objetos Record Esta categoriacuteatambieacuten incluye la clase LineDataRecordWriter

v Las clases orientadas a bytes que incluyen determinadas clases DataQueue UserSpace e IFSFile queleen y escriben una matriz de bytes de datos cada vez

No utilice la clase RecordFormatDocument con las siguientes clases de IBM Toolbox para Java que leen yescriben datos en formatos que RecordFormatDocument no manejav Las clases DataArea ya que los meacutetodos de lectura y escritura solo manejan los tipos de datos String

boolean y BigDecimalv IFSTextFileInputStream e IFSTextFileOutputStream ya que estos meacutetodos de lectura y escritura solo

manejan el tipo de datos Stringv Las clases JDBC ya que RFML se centra uacutenicamente en los datos descritos por la especificacioacuten de

descripcioacuten de datos (DDS) de IBM iInformacioacuten relacionadaJavadoc RecordFormatDocument

322 IBM Toolbox para Java IBM Toolbox para Java

Documentos RFML y sintaxis RFMLLos documentos RFML denominados archivos fuente RFML contienen coacutedigos que definen laespecificacioacuten de un formato de datos determinado

Como RFML se basa en PCML la sintaxis resulta conocida a los usuarios de PCML Como RFML es unaextensioacuten de XML los archivos fuente RFML son faacuteciles de leer y sencillos de crear Por ejemplo puedecrear un archivo fuente RFML mediante un simple editor de texto Ademaacutes los archivos fuente RFMLpresentan la estructura de los datos de un modo que resulta maacutes sencilla de entender que en un lenguajede programacioacuten como Java

El ejemplo de RFML Coacutemo se utiliza RFML en comparacioacuten con el uso de las clases Record de IBMToolbox para Java contiene un archivo fuente RFML de muestra

DTD RFML

La definicioacuten de tipo de documento (DTD) RFML define la sintaxis y los elementos RFML vaacutelidos Paraasegurarse de que un analizador XML pueda validar el archivo fuente RFML en el momento de laejecucioacuten declare la DTD RFML en el archivo fuenteltDOCTYPE rfml SYSTEM rfmldtdgt

La DTD RFML reside en el archivo jt400jar (comibmas400datarfmldtd)

Sintaxis de RFML

La DTD RFML define coacutedigos cada uno de ellos con sus propios coacutedigos de atributos Utilice los coacutedigosRFML para declarar y definir los elementos en los archivos RFML

En el ejemplo siguiente la sintaxis de RFML describe un formato de registro y una estructuraltrfmlgt

ltrecordformatgtltdatagt ltdatagt

ltrecordformatgt

ltstructgtltdatagt ltdatagt

ltstructgt

ltrfmlgt

Definicioacuten de tipo de documento RFML (DTD)

Esta es la DTD RFML Observe que la versioacuten es 40 La DTD RFML reside en el archivo jt400jar(comibmas400datarfmldtd)lt--Definicioacuten de tipo de documento RFML (Record Format Markup Language)

RFML es un lenguaje XML El uso habitual esltxml version=10gtltDOCTYPE rfml SYSTEM rfmldtdgtltrfml version=40gtltrfmlgt

(C) Copyright IBM Corporation 20012002Reservados todos los derechos Material con licencia propiedad de IBMDerechos restringidos de los usuarios del Gobierno de Estados UnidosEl uso la duplicacioacuten o la divulgacioacuten estaacuten restringidospor el GSA ADP Schedule Contract con IBM Corp

IBM Toolbox para Java 323

--gt

lt-- Entidades de conveniencia --gtltENTITY string CDATAgt lt-- una serie de longitud 0 o superior --gtltENTITY nonNegativeInteger CDATAgt lt-- un entero no negativo --gtltENTITY binary2 CDATAgt lt-- un entero del rango 0-65535 --gtltENTITY boolean (true|false)gtltENTITY datatype (char | int | packed | zoned | float | byte | struct)gtltENTITY biditype (ST4 | ST5 | ST6 | ST7 | ST8 | ST9 | ST10 | ST11 | DEFAULT)gt

lt-- El elemento raiacutez del documento --gtltELEMENT rfml (struct | recordformat)+gtltATTLIST rfml

version string FIXED 40ccsid binary2 IMPLIED

gtlt-- Nota el ccsid es el valor predeterminado que se utilizaraacute para --gt

lt-- los elementos ltdata type=chargt incluidos que no especifiquen un ccsid --gt

lt-- Nota RFML no soporta declaraciones struct anidadas --gtlt-- Todos los elementos struct son hijos directos del nodo raiacutez --gtltELEMENT struct (data)+gtltATTLIST struct

name ID REQUIREDgt

lt-- ltELEMENT recordformat (data | struct)gt --gtltELEMENT recordformat (data)gtltATTLIST recordformat

name ID REQUIREDdescription string IMPLIED

gtlt-- Nota en el servidor el campo text description de Record solo puede tener 50 bytes --gt

ltELEMENT data EMPTYgtltATTLIST data

name string REQUIRED

count nonNegativeInteger IMPLIED

type datatype REQUIREDlength nonNegativeInteger IMPLIEDprecision nonNegativeInteger IMPLIEDccsid binary2 IMPLIEDinit CDATA IMPLIEDstruct IDREF IMPLIED

bidistringtype biditype IMPLIEDgtlt-- Nota el atributo rsquonamersquo debe ser exclusivo dentro de un recordformat determinado --gtlt-- Nota en el servidor los nombres del campo Record solo pueden tener 10 bytes de longitud --gtlt-- Nota el atributo rsquolengthrsquo es obligatorio excepto si se especifica type=struct --gtlt-- Nota si type=struct el atributo rsquostructrsquo es obligatorio --gtlt-- Nota los atributos rsquoccsidrsquo y rsquobidistringtypersquo solo son vaacutelidos si se especifica type=char --gtlt-- Nota el atributo rsquoprecisionrsquo solo es vaacutelido para los tipos int packed y zoned --gt

lt-- Entidades de caracteres predefinidas estaacutendar --gtltENTITY quot amp34gt lt-- comillas --gtltENTITY amp amp3838gt lt-- signo de unioacuten --gtltENTITY apos amp39gt lt-- apoacutestrofo --gtltENTITY lt amp3860gt lt-- menor que --gtltENTITY gt amp62gt lt-- mayor que --gtltENTITY nbsp amp160gt lt-- espacio de no separacioacuten --gt

324 IBM Toolbox para Java IBM Toolbox para Java

ltENTITY shy amp173gt lt-- guioacuten virtual (guioacuten discrecional) --gtltENTITY mdash amp38x2014gtltENTITY ldquo amp38x201CgtltENTITY rdquo amp38x201Dgt

Coacutedigo RFML data

El coacutedigo RFML data define un campo dentro de un formato de registro o una estructura

A continuacioacuten se listan los atributos del coacutedigo data Los atributos delimitados por corchetes [] sonopcionales Si especifica un atributo opcional no incluya los corchetes en el fuente A continuacioacuten sefacilita una lista con algunos valores de atributos delimitados por llaves y las opciones posiblesseparadas por barras verticales | Cuando especifique uno de estos atributos no incluya las llaves en elfuente y especifique uacutenicamente una de las opciones que se muestranltdata type= char | int | packed | zoned | float | byte | struct ]

[ bidistringtype= ST4 | ST5 | ST6 | ST7 | ST8 | ST9 | ST10 | ST11 | DEFAULT ][ ccsid= nuacutemero | nombre-datos ][ count= nuacutemero | nombre-datos ][ init=serie ][ length= nuacutemero | nombre-datos ][ name=nombre ][ precision=nuacutemero ][ struct=nombre-estructura ]gt

ltdatagt

En la siguiente tabla figuran los atributos del coacutedigo data Cada entrada contiene el nombre de atributolos valores vaacutelidos posibles y una descripcioacuten del atributo

IBM Toolbox para Java 325

Atributo Valor Descripcioacuten

type= char Un valor de tipo caraacutecter Unvalor de datos de tipo char sedevuelve como javalangStringPara obtener maacutes informacioacutenconsulte los valores char para lalongitud

int Un valor entero Un valor dedatos int se devuelve comojavalangLong Para obtener maacutesinformacioacuten consulte los valoresint para la longitud y la precisioacuten

packed Un valor decimalempaquetado Un valor de datospacked se devuelve comojavamathBigDecimal Para obtenermaacutes informacioacuten consulte losvalores packed para la longitud y laprecisioacuten

zoned Un valor decimal con zonaUn valor de datos zoned sedevuelve comojavamathBigDecimal Para obtenermaacutes informacioacuten consulte losvalores zoned para la longitud y laprecisioacuten

float Un valor de coma flotante Elatributo length especifica elnuacutemero de bytes 4 u 8 Un enterode 4 bytes se devuelve comojavalangFloat Un entero de 8bytes se devuelve comojavalangDouble Para obtener maacutesinformacioacuten consulte los valoresfloat para la longitud

byte Un valor de tipo byte No seefectuacutea ninguna conversioacuten de losdatos Un valor de datos byte sedevuelve como una matriz devalores byte (byte[]) Para obtenermaacutes informacioacuten consulte losvalores byte para la longitud

struct El nombre del elementoltstructgt Un valor struct permitedefinir una estructura una vez yvolver a utilizarla varias vecesdentro del mismo documento Siutiliza type=struct es como sila estructura especificadaapareciera en ese lugar deldocumento Un valor struct nopermite un valor de longitud y notiene ninguacuten valor para laprecisioacuten

Indica el tipo de datos que se utiliza(caraacutecter entero empaquetado con zonacoma flotante o estructura)

Los valores de los atributos de longitud yprecisioacuten variacutean seguacuten los diferentes tiposde datos Para obtener maacutes informacioacutenconsulte los valores de longitud yprecisioacuten

326 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

bidistringtype= DEFAULT donde DEFAULT es eltipo de serie predeterminada paradatos no bidireccionales (LTR)

ST4 donde ST4 es el tipo de serie4

ST5 donde ST5 es el tipo de serie5

ST6 donde ST6 es el tipo de serie6gt

ST7 donde ST7 es el tipo de serie7

ST8 donde ST8 es el tipo de serie8

ST9 donde ST9 es el tipo de serie9

ST10 donde ST10 es el tipo deserie 10

ST11 donde ST11 es tipo de serie11

Especifica el tipo de serie bidireccionalpara los elementos ltdatagt que tengantype=char Si se omite este atributo eltipo de serie para este elemento vienedeterminado por el CCSID (especificadoexpliacutecitamente o el CCSID predeterminadodel entorno de host)

Los tipos de serie estaacuten definidos en elJavadoc correspondiente a la claseBidiStringType

ccsid= nuacutemero donde nuacutemero define unCCSID fijo que no cambia nunca

nombre-datos donde nombre-datosdefine el nombre que contendraacuteen tiempo de ejecucioacuten el CCSIDde los datos de tipo caraacutecter Elnombre-datos especificado puedeser un nombre totalmentecalificado o un nombre relativo alelemento actual En los dos casosel nombre debe hacer referencia aun elemento ltdatagt que se hayadefinido con la especificacioacutentype=int Si desea maacutesinformacioacuten sobre coacutemo seresuelven los nombres relativosconsulte el apartado Resolucioacuten denombres relativos

Especifica el CCSID (ID de juego decaracteres codificados) de los datos de tipocaraacutecter para el elemento ltdatagt Elatributo ccsid solo se puede especificarpara los elementos ltdatagt que tengantype=char

Si se omite este atributo se presupone quelos datos de tipo caraacutecter de este elementotienen el CCSID predeterminado delentorno de host

IBM Toolbox para Java 327

Atributo Valor Descripcioacuten

count= nuacutemero donde nuacutemero define unnuacutemero fijo de elementos de unamatriz dimensionada

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documentoRFML que contendraacute en tiempode ejecucioacuten el nuacutemero deelementos de la matriz Elnombre-datos especificado puedeser un nombre totalmentecalificado o un nombre relativo alelemento actual En los dos casosel nombre debe hacer referencia aun elemento ltdatagt que se hayadefinido con la especificacioacutentype=int Si desea maacutesinformacioacuten sobre coacutemo seresuelven los nombres relativosconsulte el apartado Resolucioacuten denombres relativos

Especifica que el elemento es una matriz eidentifica el nuacutemero de entradas de lamatriz

Si se omite el atributo count el elementono estaacute definido como matriz aunquepuede encontrarse dentro de otro elementoque esteacute definido como matriz

init= serie Especifica un valor inicial para el elementoltdatagt

El valor inicial especificado se utiliza parainicializar los valores escalares Si elelemento estaacute definido como matriz o seencuentra dentro de una estructuradefinida como matriz el valor inicialespecificado se utiliza como valor inicialpara todas las entradas de la matriz

length= nuacutemero donde nuacutemero define unalongitud fija

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documentoRFML que contendraacute en tiempode ejecucioacuten la longitudUacutenicamente puede especificarseun nombre-datos para los elementosltdatagt que tengan type=char otype=byte El nombre-datosespecificado puede ser un nombretotalmente calificado o un nombrerelativo al elemento actual En losdos casos el nombre debe hacerreferencia a un elemento ltdatagtque se haya definido con laespecificacioacuten type=int Si deseamaacutes informacioacuten sobre coacutemo seresuelven los nombres relativosconsulte el apartado Resolucioacuten denombres relativos

Especifica la longitud del elemento dedatos El uso de este atributo variacutea enfuncioacuten del tipo de datos Para obtener maacutesinformacioacuten consulte los valores delongitud y precisioacuten

name= nombre Especifica el nombre del elemento ltdatagt

328 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

precision= nuacutemero Especifica el nuacutemero de bytes de precisioacutenpara algunos tipos de datos numeacutericosPara obtener maacutes informacioacuten consulte losvalores de longitud y precisioacuten

struct= nombre Especifica el nombre de un elementoltstructgt para el elemento ltdatagt Unatributo struct solo se puede especificarpara los elementos ltdatagt que tengantype=struct

Informacioacuten relacionadaJavadoc BidiStringType

Coacutedigo RFML rfml

El coacutedigo rfml empieza y termina el archivo fuente RFML que describe el formato de datos

A continuacioacuten se listan los atributos del coacutedigo rfml Los atributos delimitados por corchetes [] sonopcionales Si especifica un atributo opcional no incluya los corchetes en el fuenteltrfml version=serie-versioacuten

[ ccsid=nuacutemero ]gtltrfmlgt

En la siguiente tabla figuran los atributos del coacutedigo rfml Cada entrada contiene el nombre de atributolos valores vaacutelidos posibles y una descripcioacuten del atributo

Atributo Valor Descripcioacuten

version= serie-versioacuten Una versioacuten fija de laDTD RFML Para la versioacuten V5R340 es el uacutenico valor vaacutelido

Especifica la versioacuten de la DTDRFML que puede emplear paraverificar el valor correcto

ccsid= nuacutemero Un CCSID (ID de juego decaracteres codificados) fijo einvariable

Especifica el CCSID de host que esvaacutelido para todas los elementosltdata type=chargt incluidos que noespecifiquen ninguacuten CCSID Paraobtener maacutes informacioacuten consulte elcoacutedigo ltdatagt RFML Si omite esteatributo se utilizaraacute el CCSIDpredeterminado del entorno del host

Coacutedigo RFML recordformat

El coacutedigo RFML recordformat define un formato de registro que contiene elementos de datos oreferencias a elementos de estructura

A continuacioacuten se listan los atributos del coacutedigo recordformat Los atributos delimitados por corchetes []son opcionales Si especifica un atributo opcional no incluya los corchetes en el fuenteltrecordformat name=nombre

[ description=descripcioacuten ]gtltrecordformatgt

En la siguiente tabla figuran los atributos del coacutedigo recordformat Cada entrada contiene el nombre deatributo los valores vaacutelidos posibles y una descripcioacuten del atributo

IBM Toolbox para Java 329

Atributo Valor Descripcioacuten

name= nombre Especifica el nombre del formato de registro

description= descripcioacuten Especifica la descripcioacuten del formato de registro

Coacutedigo RFML struct

El coacutedigo RFML struct define una estructura con nombre que puede reutilizar en el archivo fuente RFMLLa estructura contiene un coacutedigo de datos para cada uno de los campos de la estructura

A continuacioacuten se listan los atributos del coacutedigo struct Los atributos delimitados por corchetes [] sonopcionales Si especifica un atributo opcional no incluya los corchetes en el fuenteltstruct name=nombregtltstructgt

En la siguiente tabla figuran los atributos del coacutedigo struct Cada entrada contiene el nombre de atributolos valores vaacutelidos posibles y una descripcioacuten del atributo

Atributo Valor Descripcioacuten

name= nombre Especifica el nombre del elemento ltstructgt

Analizador XML y procesador XSLTAlgunos paquetes o funciones de IBM Toolbox para Java requieren que en tiempo de ejecucioacuten haya unanalizador XML (Extensible Markup Language) o un procesador XSLT (Extensible Stylesheet LanguageTransformations) en la variable de entorno CLASSPATH

Consulte la informacioacuten siguiente para determinar queacute analizador y procesador desea utilizar

Si desea informacioacuten sobre los paquetes y las funciones de IBM Toolbox para Java que precisan unanalizador XML o procesador XSLT vea la paacutegina siguiente

ldquoArchivos JARrdquo en la paacutegina 8

Analizador XML

Si el paquete o la funcioacuten requiere un analizador XML deberaacute incluir un analizador XML en laCLASSPATH en tiempo de ejecucioacuten El analizador XML debe cumplir los requisitos siguientesv Debe ser compatible con JAXPv Debe ampliar la clase orgapachexercesparsersSAXParserv Debe dar soporte a la plena validacioacuten de esquemas

Nota el analizador solo tiene que dar soporte a la plena validacioacuten de esquemas si se va a utilizarXPCML Si solo se utiliza PCML no es necesaria la plena validacioacuten de esquemas

Java 2 Software Developer Kit (J2SDK) versioacuten 14 incluye un analizador XML adecuado Si utiliza unaversioacuten anterior de J2SDK emplee cualquiera de los meacutetodos siguientes para acceder a un analizadorXML apropiadov Utilice x4j400jar (una versioacuten de IBM del analizador XML Xerces de Apache)

v Baje el analizador XML Xerces del sitio Web de Apachev Utilice cualquier analizador XML compatible del directorio QIBMProdDataOS400xmllib del sistema

330 IBM Toolbox para Java IBM Toolbox para Java

Nota planteacuteese la conveniencia de emplear las uacuteltimas versiones de los analizadores que se encuentranen QIBMProdDataOS400xmllib Por ejemplo xmlapis11jar y xerces411jar son analizadores de plenavalidacioacuten

Puede utilizar estos analizadores en el servidor o copiarlos en una estacioacuten de trabajo

Nota cualquier analizador XML que cumpla los requisitos para ejecutar XPCML podraacute ejecutar PCML yRFML Tenga en cuenta que XPCML no admite la serializacioacuten

Procesador XSLT

Si el paquete o la funcioacuten requiere un procesador XSLT deberaacute incluir un procesador XSLT en laCLASSPATH en tiempo de ejecucioacuten El procesador XSLT debe cumplir los requisitos siguientesv Debe ser compatible con JAXPv Debe contener la clase javaxxmltransformTransformer

Java 2 Software Developer Kit (J2SDK) versioacuten 14 incluye un procesador XSLT adecuado Si utiliza unaversioacuten anterior de J2SDK emplee cualquiera de los meacutetodos siguientes para acceder a un procesadorXSLT apropiadov Utilice xslparserjar (una versioacuten de IBM del procesador XSLT Xalan de Apache)

v Baje el procesador XSLT Xalan del sitio Web de Apachev Utilice cualquier procesador XSLT compatible del directorio QIBMProdDataOS400xmllib del sistema

Puede utilizar estos procesadores en el sistema o copiarlos en una estacioacuten de trabajo

XPCML (Extensible Program Call Markup Language)XPCML (Extensible Program Call Markup Language) mejora las funciones y la capacidad de utilizacioacutende PCML (Program Call Markup Language) al ofrecer soporte para los esquemas XML XPCML noadmite la serializacioacuten por lo que a diferencia de lo que sucede con PCML no podraacute serializar undocumento XPCML

Sin embargo XPCML ofrece valiosas mejoras en comparacioacuten con PCMLv Especificar y pasar valores de paraacutemetros de programasv Recuperar los resultados de una llamada de programa al servidor en XPCMLv Transformar un documento PCML existente en el documento XPCML equivalentev Ampliar y personalizar el esquema XPCML para definir nuevos elementos y atributos simples y

complejos

Encontraraacute maacutes informacioacuten sobre XPCML en estas paacuteginasReferencia relacionadaldquoComponentes XML (Extensible Markup Language)rdquo en la paacutegina 293IBM Toolbox para Java consta de diversos componentes XML (Extensible Markup Language) entre ellosun analizador XMLInformacioacuten relacionadaXML Toolkit

Dominio de arquitectura W3C esquema XML

Ventajas de XPCML respecto de PCMLXPCML (Extensible Program Call Markup Language) ofrece valiosas mejoras sobre PCMLv Especificar y pasar valores de paraacutemetros de programasv Recuperar los resultados de una llamada de programa al servidor IBM i en XPCML

IBM Toolbox para Java 331

v Transformar un documento PCML existente en el documento XPCML equivalentev Ampliar y personalizar el esquema XPCML para definir nuevos elementos y atributos simples y

complejos

Especificar y pasar valores de paraacutemetros de programas

XPCML utiliza un esquema XML para definir tipos de paraacutemetros de programas PCML utiliza unadefinicioacuten de tipos de datos (DTD) En el momento de realizar el anaacutelisis el analizador XML valida losvalores de datos especificados como paraacutemetros cotejaacutendolos con los paraacutemetros adecuados seguacuten sudefinicioacuten en el esquema Existen tipos de datos para paraacutemetros de muchos tipos series enteros largosetc La posibilidad de especificar y pasar valores de paraacutemetros de programas es una notable mejorarespecto de PCML En PCML solo se pueden verificar los valores de los paraacutemetros tras analizar eldocumento PCML Asimismo la verificacioacuten de los valores de paraacutemetros en PCML a menudo requierecodificar la aplicacioacuten para efectuar la validacioacuten

Recuperar los resultados de una llamada a programa en XPCML

XPCML tambieacuten ofrece la posibilidad de recuperar los resultados de una llamada a programa en formatoXPCML En PCML los resultados de una llamada a programa se obtienen llamando a uno de losmeacutetodos getValue de la clase ProgramCallDocument despueacutes de efectuar la llamada al programa EnXPCML se pueden emplear los meacutetodos getValue pero tambieacuten se puede hacer que XPCML llame a unmeacutetodo generateXPCML que devuelve los resultados de una llamada a programa en formato XPCML

Transformar documentos PCML existentes en XPCML

Un nuevo meacutetodo de la clase ProgramCallDocument transformPCMLToXPCML permite transformar losdocumentos PCML existentes en documentos XPCML equivalentes Asiacute se puede aprovechar la nuevafuncioacuten de XPCML sin escribir fuente XPCML para los documentos de llamada de programa de IBM iexistentes

Ampliar y personalizar el esquema XPCML

XPCML es ampliable lo que significa que se pueden definir nuevos tipos de paraacutemetros que ampliacuteen losespecificados por el esquema XPCML Al condensar XPCML se ampliacutea el esquema XPCML para crearnuevas definiciones de tipos de datos que simplifican y mejoran las posibilidades de lectura y uso de losdocumentos XPCML

Requisitos de uso de XPCMLXPCML (Extensible Program Call Markup Language) tiene los mismos requisitos de maacutequina virtual Javade la estacioacuten de trabajo que el resto de IBM Toolbox para Java

Encontraraacute maacutes informacioacuten en esta paacutegina

ldquoRequisitos de estacioacuten de trabajo para ejecutar aplicaciones de IBM Toolbox para Javardquo en la paacutegina6

Ademaacutes el uso de XPCML trae aparejados requisitos de archivo de esquema XML analizador XML yprocesador XSLT (Extensible Stylesheet Language Transformation)

Archivo de esquema XML

Los documentos XPCML deben conocer la ubicacioacuten del archivo que contiene el esquema El esquemapredeterminado de IBM Toolbox para Java es xpcmlxsd que se encuentra dentro del archivo jt400jar

332 IBM Toolbox para Java IBM Toolbox para Java

Para emplear el esquema predeterminado extraiga xpcmlxsd de jt400jar y coloque el archivo en unaubicacioacuten adecuada El procedimiento siguiente muestra un modo de extraer el archivo xsd en unaestacioacuten de trabajo

Extraer el archivo de esquema xpcmlxsd

v Inicie una sesioacuten de liacutenea de mandatos en el directorio que contiene jt400jarv Utilice el mandato siguiente para extraer el archivo xsd

jar xvf jt400jar comibmas400dataxpcmlxsd

Nota si no ejecuta el mandato anterior desde el directorio que contiene jt400jar puede especificar unaviacutea de acceso totalmente calificada para jt400jar

Puede colocar el archivo de esquema predeterminado (o cualquier archivo de esquema) en el directorioque desee El uacutenico requisito es que especifique la ubicacioacuten del archivo de esquema mediante el atributoxsinoNamespaceSchemaLocation en el coacutedigo ltxpcmlgt

Puede especificar la ubicacioacuten del esquema como una viacutea de acceso de archivo o como un URL

Nota aunque en los ejemplos siguientes se utiliza xpcmlxsd como el archivo de esquema puedeespecificar cualquier esquema que ampliacutee xpcmlxsdv Para especificar el mismo directorio que el del archivo XPCML utilice

xsinoNamespaceSchemaLocation=xpcmlxsdv Para especificar una viacutea de acceso totalmente calificada xsinoNamespaceSchemaLocation=cmyDir

xpcmlxsdv Para especificar un URL xsinoNamespaceSchemaLocation=httpmyServerxpcmlxsd

Para ver una versioacuten HTML del archivo xpcmlxsd consulte la paacutegina siguiente

ldquoArchivo xpcmlxsd de esquemardquo en la paacutegina 335

Analizador XML y procesador XSLT

En tiempo de ejecucioacuten debe incluir un analizador XML y un procesador XSLT en la variable de entornoCLASSPATH Encontraraacute maacutes informacioacuten en esta paacutegina

ldquoAnalizador XML y procesador XSLTrdquo en la paacutegina 330

Esquema y sintaxis XPCMLLos documentos XPCML denominados archivos fuente XPCML contienen coacutedigos y datos que describenpor completo las llamadas a programas del sistema

Como XPCML utiliza esquemas XML en lugar de una definicioacuten de tipo de documento (DTD) haymodos de emplear XPCML que no son posibles con PCMLv Pasar valores de paraacutemetros de entrada al programa como elementos XMLv Recibir valores de paraacutemetros de salida del programa como elementos XMLv Hacer que el analizador XML valide automaacuteticamente los valores pasados al programav Ampliar el esquema para definir nuevos elementos simples y complejos

Encontraraacute maacutes informacioacuten sobre el esquema XPCML y la sintaxis de este lenguaje en estas paacuteginas

Comparacioacuten del fuente XPCML con el fuente PCML

XPCML difiere de PCML en diversos aspectos pero una de las principales diferencias es que XPCMLpermite especificar los valores de los paraacutemetros de entrada dentro del archivo fuente XPCML

IBM Toolbox para Java 333

PCML permite utilizar el atributo init del coacutedigo ltdatagt para especificar el valor inicial de un elementode datos en el fuente PCML Sin embargo el uso de PCML para especificar valores estaacute sujeto a lasrestricciones siguientesv No se puede emplear el atributo init para establecer valores de matricesv La validacioacuten del valor de init solo se efectuacutea tras analizar el documento PCML

Para especificar valores de matrices en PCML primero es preciso leer y analizar el documento PCML y acontinuacioacuten efectuar una serie de llamadas a ProgramCallDocumentsetValue()

El uso de XPCML facilita la especificacioacuten de valores de elementos uacutenicos y matricesv Especificacioacuten de valores de elementos escalares y de matrices en el archivo fuente XPCMLv Validacioacuten de los valores de matrices especificados durante el anaacutelisis

Las sencillas comparaciones que figuran a continuacioacuten permiten observar varias diferencias entreXPCML y PCML Cada ejemplo define una llamada a programa para un programa de IBM i

Ejemplo llamar a un programa de IBM i

En los ejemplos siguientes se llama a un programa de IBM i denominado prog1

Coacutedigo fuente XPCMLltxml version=10 encoding=UTF-8gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=rsquoxpcmlxsdrsquo version=40gtltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgt

ltparameterListgtltstringParm name=parm1 passDirection=in length=10gtParm1ltstringParmgtltintParm name=parm2 passDirection=ingt5ltintParmgtltshortParm name=parm3 passDirection=ingt3ltshortParmgt

ltparameterListgtltprogramgt

ltxpcmlgt

Coacutedigo fuente PCMLltpcml version=40gt

ltprogram name=prog1 path=QSYSLIBMYLIBLIBPROG1PGMgtltdata name=parm1 type=char usage=input length=10 init=Parm1gtltdata name=parm2 type=int usage=input length=4 init=5gtltdata name=parm3 type=int usage=input length=2 precision=16 init=3gt

ltprogramgtltpcmlgt

Ejemplo llamar a un programa de IBM i utilizando una matriz de paraacutemetros de tipo serie

En los ejemplos siguientes se llama a un programa del IBM i denominado prog2 y se define parm1 comouna matriz de paraacutemetros de tipo serie Observe las caracteriacutesticas de XPCMLv Inicializa el valor de cada uno de los elementos de la matrizv Especifica los valores de entrada como contenido de elementos que un analizador XML de plena

validacioacuten puede verificar

Puede aprovechar estas funciones de XPCML sin tener que escribir ninguacuten coacutedigo Java

PCML no puede igualar las posibilidades que ofrece XPCML PCML no puede inicializar el valor de cadauno de los elementos de la matriz PCML no puede validar los valores iniciales durante el anaacutelisis Paraobtener las funciones de XPCML tendriacutea que leer y analizar el documento PCML y despueacutes codificar laaplicacioacuten Java para establecer el valor de cada uno de los elementos de la matriz Asimismo tendriacutea queescribir coacutedigo para validar los paraacutemetros

334 IBM Toolbox para Java IBM Toolbox para Java

Coacutedigo fuente XPCMLltxml version=10 encoding=UTF-8gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=xpcmlxsd version=40gt

ltprogram name=prog2 path=QSYSLIBW95LIBLIBPROG2PGMgtltparameterListgt

ltarrayOfStringParm name=parm1 passDirection=inlength=10 count=3gtltigtParm1-First valueltigtltigtParm1-Second valueltigtltigtParm1-Third valueltigt

ltarrayOfStringParmgtltlongParm name=parm2 passDirection=ingt5ltlongParmgtltzonedDecimalParm name=parm3 passDirection=in

totalDigits=5 fractionDigits=2gt3256ltzonedDecimalParmgtltparameterListgt

ltprogramgtltxpcmlgt

Coacutedigo fuente PCMLltpcml version=40gt

ltprogram name=prog2 path=QSYSLIBMYLIBLIBPROG2PGMgtltdata name=parm1 type=char usage=input length=20 count=3gtltdata name=parm2 type=int usage=input length=8 init=5gtltdata name=parm3 type=zoned usage=input length=5 precision=2 init=3256gt

ltprogramgtltpcmlgt

Archivo xpcmlxsd de esquema

Para facilitar la visualizacioacuten e impresioacuten algunas liacuteneas de esta versioacuten HTML de xpcmlxsd seacomodan en una segunda liacutenea Las mismas liacuteneas del archivo xsd fuente aparecen en una sola liacutenea

Para obtener maacutes informacioacuten acerca de coacutemo se utiliza el archivo xpcmlxsd consulte Requisitos de usode XPCML

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteltxml version=10 encoding=UTF-8gt

lt-- JTOpen (IBM Toolbox para Java - versioacuten de OSS) Nombre de archivo xpcmlxsd El coacutedigo fuente que aquiacute se proporciona estaacute sujeto a la Licencia puacuteblica de IBM Versioacuten 10 aprobada por Open Source Initiative Copyright (C) 1997-2008 International Business Machines Corporation y otros Reservados todos los derechos--gt

ltxsschema xmlnsxs=rsquohttpwwww3org2001XMLSchemarsquogt

ltxsannotationgtltxsdocumentationgtEsquema XPCML (Extended Program Call Markup Language)ltxsdocumentationgtltxsannotationgt

ltxselement name=xpcmlgt

IBM Toolbox para Java 335

ltxscomplexTypegtltxssequencegt

ltxselement ref=structOrProgram minOccurs=1 maxOccurs=unbounded gtltxssequencegtltxsattribute name=version use=requiredgtltxssimpleTypegt

ltxsrestriction base=xsstringgtltxsenumeration value=40gt

ltxsrestrictiongtltxssimpleTypegt

ltxsattributegtltxscomplexTypegt

lt-- Defina el enlace keykeyref entre el nombre de una estructura --gtlt-- y el atributo de estructura de un campo de paraacutemetro --gtltxskey name=StructKeygt

ltxsselector xpath=structgtltxsfield xpath=namegt

ltxskeygtltxskeyref name=spRef refer=StructKeygt

ltxsselector xpath=structParm gtltxsfield xpath=struct gt

ltxskeyrefgtltxselementgt

lt-- Coacutedigo program y atributos --gtltxselement name=program substitutionGroup=structOrProgramgt

ltxscomplexTypegtltxssequencegt

ltxselement ref=parameterList minOccurs=1 maxOccurs=1gtlt-- Se utiliza como un coacutedigo de envoltura de la lista de paraacutemetros del programa --gt

ltxssequencegtlt-- Nombre del programa al que se llamaraacute --gtltxsattribute name=name type=string50 use=required gtlt-- Viacutea de acceso del objeto programa De forma predeterminada se da por supuesta la biblioteca QSYS --gtltxsattribute name=path type=xsstringgtlt-- Especifica el orden en que deben analizarse los paraacutemetros --gtlt-- El valor es una lista de nombres de paraacutemetros separados por espacios --gtltxsattribute name=parseOrder type=xsstringgtlt-- El nombre del punto de entrada dentro de un programa de servicio --gtltxsattribute name=entryPoint type=xsstringgtlt-- El tipo de valor devuelto (si existe) de una llamada a programa de servicio --gtltxsattribute name=returnValue type=returnValueTypegtlt-- Al llamar a un programa Java si el programa System i --gtlt-- estaacute en el mismo servidor --gtlt-- y es seguro en ejecucioacuten multihebra establezca true para llamar allt-- programa System i en el mismo trabajo --gtlt-- y la misma hebra que el programa Java --gtltxsattribute name=threadSafe type=xsboolean gtlt-- El CCSID del nombre del punto de entrada dentro de un programa de servicio --gtltxsattribute name=epccsid type=ccsidTypegt

ltxscomplexTypegtltxselementgt

lt-- Una lista de paraacutemetros consta de uno o varios paraacutemetros --gtltxselement name=parameterListgt

ltxscomplexTypegtltxsgroup ref=programParameter minOccurs=1 maxOccurs=unboundedgt

ltxscomplexTypegtltxselementgt

lt-- Todos los tipos de paraacutemetros de programas que entendemos --gtltxsgroup name=programParametergt

ltxschoicegtltxselement ref=stringParmGroupgtltxselement ref=stringParmArrayGroupgtltxselement ref=intParmGroupgt

336 IBM Toolbox para Java IBM Toolbox para Java

ltxselement ref=intParmArrayGroupgtltxselement ref=unsignedIntParmGroupgtltxselement ref=unsignedIntParmArrayGroupgt

ltxselement ref=shortParmGroupgtltxselement ref=shortParmArrayGroupgtltxselement ref=unsignedShortParmGroupgtltxselement ref=unsignedShortParmArrayGroupgtltxselement ref=longParmGroupgtltxselement ref=longParmArrayGroupgtltxselement ref=zonedDecimalParmGroupgtltxselement ref=zonedDecimalParmArrayGroupgtltxselement ref=packedDecimalParmGroupgt

ltxselement ref=packedDecimalParmArrayGroupgtltxselement ref=floatParmGroupgtltxselement ref=floatParmArrayGroupgtltxselement ref=doubleParmGroupgtltxselement ref=doubleParmArrayGroupgtltxselement ref=hexBinaryParmGroupgtltxselement ref=hexBinaryParmArrayGroupgt

ltxselement ref=structParmGroupgtltxselement ref=structParmArrayGroupgtltxselement ref=structArrayGroupgtltxselement ref=structgt

ltxschoicegt

ltxsgroupgt

lt-- Tipo abstracto para todos los tipos de paraacutemetros de datos --gtltxselement name=stringParmGroup type=stringParmType abstract=true gtltxselement name=stringParmArrayGroup type=stringParmArrayType abstract=true gtltxselement name=intParmGroup type=intParmType abstract=true gtltxselement name=intParmArrayGroup type=intParmArrayType abstract=true gtltxselement name=unsignedIntParmGroup type=unsignedIntParmType abstract=true gtltxselement name=unsignedIntParmArrayGroup type=unsignedIntParmArrayType abstract=true gtltxselement name=shortParmGroup type=shortParmType abstract=true gtltxselement name=shortParmArrayGroup type=shortParmArrayType abstract=true gtltxselement name=unsignedShortParmGroup type=unsignedShortParmType abstract=true gtltxselement name=unsignedShortParmArrayGroup type=unsignedShortParmArrayType abstract=true gtltxselement name=longParmGroup type=longParmType abstract=true gtltxselement name=longParmArrayGroup type=longParmArrayType abstract=true gtltxselement name=zonedDecimalParmGroup type=zonedDecimalParmType abstract=true gtltxselement name=zonedDecimalParmArrayGroup type=zonedDecimalParmArrayType abstract=true gtltxselement name=packedDecimalParmGroup type=packedDecimalParmType abstract=true gtltxselement name=packedDecimalParmArrayGroup type=packedDecimalParmArrayType abstract=true gtltxselement name=floatParmGroup type=floatParmType abstract=true gtltxselement name=floatParmArrayGroup type=floatParmArrayType abstract=true gtltxselement name=doubleParmGroup type=doubleParmType abstract=true gtltxselement name=doubleParmArrayGroup type=doubleParmArrayType abstract=true gtltxselement name=hexBinaryParmGroup type=hexBinaryParmType abstract=true gtltxselement name=hexBinaryParmArrayGroup type=hexBinaryParmArrayType abstract=true gtltxselement name=structParmGroup type=structParmType abstract=true gtltxselement name=structParmArrayGroup type=structParmArrayType abstract=true gtltxselement name=structArrayGroup type=structArrayType abstract=true

substitutionGroup=structOrProgram gt

lt-- Paraacutemetro de tipo serie --gtltxselement name=stringParm type=stringParmType substitutionGroup=stringParmGroup

nillable=truegtltxscomplexType name=stringParmTypegt

ltxssimpleContentgtltxsextension base=stringFieldTypegt

ltxsattributeGroup ref=commonParmAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Matriz de paraacutemetros de tipo serie --gt

IBM Toolbox para Java 337

ltxselement name=arrayOfStringParm type=stringParmArrayTypesubstitutionGroup=stringParmArrayGroup nillable=true gt

ltxscomplexType name=stringParmArrayTypegtltxssequencegt

ltxselement name=i type=stringElementType minOccurs=0 maxOccurs=unboundedgtltxssequencegtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgtlt-- El nuacutemero de elementos de la matriz --gtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtlt-- El nuacutemero de caracteres de cada serie --gtltxsattribute name=length type=xsstringgtlt-- El CCSID de host de cada serie --gtltxsattribute name=ccsid type=xsstringgtlt-- Especifica coacutemo recortar los espacios en blanco (left right both none) --gtltxsattribute name=trim type=trimType gtlt-- El tamantildeo de cada caraacutecter (rsquochartypersquo en PCML) --gtltxsattribute name=bytesPerChar type=charType gtlt-- El tipo de serie bidireccional --gtltxsattribute name=bidiStringType type=bidiStringTypeType gt

ltxscomplexTypegt

ltxscomplexType name=stringElementTypegtltxssimpleContentgt

ltxsextension base=xsstringgtlt-- El iacutendice de la matriz --gtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgtltxscomplexTypegt

lt-- Paraacutemetro entero (4 bytes en el servidor) --gtltxselement name=intParm type=intParmType nillable=true substitutionGroup=intParmGroup gt

ltxscomplexType name=intParmType gtltxssimpleContentgt

ltxsextension base=intFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz intParm --gtltxselement name=arrayOfIntParm type=intParmArrayType substitutionGroup=intParmArrayGroup

nillable=true gtltxscomplexType name=intParmArrayTypegt

ltxssequencegtlt-- rsquoirsquo es el coacutedigo utilizado para elementos de matrices que no son de estructura --gtltxselement name=i type=intElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=intElementTypegtltxssimpleContentgt

ltxsextension base=xsintgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro entero sin signo (4 bytes en el servidor) --gt

338 IBM Toolbox para Java IBM Toolbox para Java

ltxselement name=unsignedIntParm type=unsignedIntParmType nillable=truesubstitutionGroup=unsignedIntParmGroup gt

ltxscomplexType name=unsignedIntParmTypegtltxssimpleContentgt

ltxsextension base=unsignedIntFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz intParm sin signo --gtltxselement name=arrayOfUnsignedIntParm type=unsignedIntParmArrayType

substitutionGroup=unsignedIntParmArrayGroup nillable=true gtltxscomplexType name=unsignedIntParmArrayTypegt

ltxssequencegtltxselement name=i type=unsignedIntElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=unsignedIntElementTypegtltxssimpleContentgt

ltxsextension base=xsunsignedIntgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro entero corto (2 bytes en el servidor) --gtltxselement name=shortParm type=shortParmType nillable=true substitutionGroup=shortParmGroupgt

ltxscomplexType name=shortParmTypegtltxssimpleContentgt

ltxsextension base=shortFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz shortParm --gtltxselement name=arrayOfShortParm type=shortParmArrayType substitutionGroup=shortParmArrayGroup

nillable=true gtltxscomplexType name=shortParmArrayTypegt

ltxssequencegtltxselement name=i type=shortElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=shortElementTypegtltxssimpleContentgt

ltxsextension base=xsshortgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro entero corto sin signo (2 bytes en el servidor) --gtltxselement name=unsignedShortParm type=unsignedShortParmType nillable=true

substitutionGroup=unsignedShortParmGroup gt

IBM Toolbox para Java 339

ltxscomplexType name=unsignedShortParmTypegtltxssimpleContentgt

ltxsextension base=unsignedShortFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz unsignedShortParm --gtltxselement name=arrayOfUnsignedShortParm type=unsignedShortParmArrayType

substitutionGroup=unsignedShortParmArrayGroup nillable=true gtltxscomplexType name=unsignedShortParmArrayTypegt

ltxssequencegtltxselement name=i type=unsignedShortElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=unsignedShortElementTypegtltxssimpleContentgt

ltxsextension base=xsunsignedShortgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro entero largo (8 bytes en el servidor) --gtltxselement name=longParm type=longParmType nillable=true substitutionGroup=longParmGroup gt

ltxscomplexType name=longParmTypegtltxssimpleContentgt

ltxsextension base=longFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz longParm --gtltxselement name=arrayOfLongParm type=longParmArrayType substitutionGroup=longParmArrayGroup

nillable=true gtltxscomplexType name=longParmArrayTypegt

ltxssequencegtltxselement name=i type=longElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=longElementTypegtltxssimpleContentgt

ltxsextension base=xslonggtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro ZonedDecimal --gtltxselement name=zonedDecimalParm type=zonedDecimalParmType nillable=true

substitutionGroup=zonedDecimalParmGroup gtltxscomplexType name=zonedDecimalParmTypegt

ltxssimpleContentgt

340 IBM Toolbox para Java IBM Toolbox para Java

ltxsextension base=zonedDecimalFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz zonedDecimalParm --gtltxselement name=arrayOfZonedDecimalParm type=zonedDecimalParmArrayType

substitutionGroup=zonedDecimalParmArrayGroup nillable=true gtltxscomplexType name=zonedDecimalParmArrayTypegt

ltxssequencegtltxselement name=i type=zonedDecimalElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtlt-- El nuacutemero total de diacutegitos del campo (rsquolengthrsquo en PCML) --gtltxsattribute name=totalDigits type=xspositiveIntegergtlt-- El nuacutemero de diacutegitos fraccionarios (rsquoprecisionrsquo en PCML) --gtltxsattribute name=fractionDigits type=xsnonNegativeIntegergt

ltxscomplexTypegt

ltxscomplexType name=zonedDecimalElementTypegtltxssimpleContentgt

ltxsextension base=xsdecimalgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro packedDecimal --gtltxselement name=packedDecimalParm type=packedDecimalParmType nillable=true

substitutionGroup=packedDecimalParmGroup gtltxscomplexType name=packedDecimalParmTypegt

ltxssimpleContentgtltxsextension base=packedDecimalFieldTypegt

ltxsattributeGroup ref=commonParmAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Tipo de matriz packedDecimalParm --gtltxselement name=arrayOfPackedDecimalParm type=packedDecimalParmArrayType

substitutionGroup=packedDecimalParmArrayGroup nillable=true gtltxscomplexType name=packedDecimalParmArrayTypegt

ltxssequencegtltxselement name=i type=packedDecimalElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattribute name=totalDigits type=xspositiveIntegergtltxsattribute name=fractionDigits type=xsnonNegativeIntegergt

ltxscomplexTypegt

ltxscomplexType name=packedDecimalElementTypegtltxssimpleContentgt

ltxsextension base=xsdecimalgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro Float (4 bytes en el servidor) --gtltxselement name=floatParm type=floatParmType nillable=true substitutionGroup=floatParmGroupgt

IBM Toolbox para Java 341

ltxscomplexType name=floatParmTypegtltxssimpleContentgt

ltxsextension base=floatFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz floatParm --gtltxselement name=arrayOfFloatParm type=floatParmArrayType substitutionGroup=floatParmArrayGroup

nillable=true gtltxscomplexType name=floatParmArrayTypegt

ltxssequencegtltxselement name=i type=floatElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=floatElementTypegtltxssimpleContentgt

ltxsextension base=xsfloatgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro Double (8 bytes en el servidor) --gtltxselement name=doubleParm type=doubleParmType nillable=true

substitutionGroup=doubleParmGroup gtltxscomplexType name=doubleParmTypegt

ltxssimpleContentgtltxsextension base=doubleFieldTypegt

ltxsattributeGroup ref=commonParmAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Tipo de matriz doubleParm --gtltxselement name=arrayOfDoubleParm type=doubleParmArrayType

substitutionGroup=doubleParmArrayGroup nillable=true gtltxscomplexType name=doubleParmArrayTypegt

ltxssequencegtltxselement name=i type=doubleElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=doubleElementTypegtltxssimpleContentgt

ltxsextension base=xsdoublegtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro binario hexadecimal (cualquier nuacutemero de bytes sin signo) --gtltxselement name=hexBinaryParm type=hexBinaryParmType substitutionGroup=hexBinaryParmGroup gt

ltxscomplexType name=hexBinaryParmTypegtltxssimpleContentgt

342 IBM Toolbox para Java IBM Toolbox para Java

ltxsextension base=hexBinaryFieldTypegtlt-- La longitud del campo en bytes (rsquolengthrsquo en PCML) --gtltxsattribute name=totalBytes type=xsstringgtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz hexBinaryParm --gtltxselement name=arrayOfHexBinaryParm type=hexBinaryParmArrayType

substitutionGroup=hexBinaryParmArrayGroup nillable=true gtltxscomplexType name=hexBinaryParmArrayTypegt

ltxssequencegtltxselement name=i type=hexBinaryElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtltxsattribute name=totalBytes type=xsstringgtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=hexBinaryElementTypegtltxssimpleContentgt

ltxsextension base=xshexBinarygtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de paraacutemetro de estructura --gtltxselement name=structParm type=structParmType substitutionGroup=structParmGroup gt

ltxscomplexType name=structParmTypegtltxscomplexContentgt

ltxsextension base=structureParmArraygtltxsattribute name=struct type=string50gtlt-- Especifica si el paraacutemetro se pasa por referencia o por valor (rsquopassbyrsquo en PCML) --gtlt-- El valor solo estaacute permitido para paraacutemetros de entero --gtltxsattribute name=passMode type=passModeTypegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstringgt

ltxsextensiongtltxscomplexContentgt

ltxscomplexTypegt

lt-- Tipo de matriz de paraacutemetro de estructura --gtltxselement name=arrayOfStructParm type=structParmArrayType

substitutionGroup=structParmArrayGroup nillable=true gtltxscomplexType name=structParmArrayTypegt

ltxssequencegtlt-- El coacutedigo struct_i representa elementos struct o de matriz de paraacutemetro de estructura --gtltxselement name=struct_i type=structElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgtltxsattribute name=struct type=string50gt

ltxscomplexTypegt

ltxscomplexType name=structElementTypegtltxscomplexContentgt

ltxsextension base=structureParmArraygtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxscomplexContentgt

ltxscomplexTypegt

IBM Toolbox para Java 343

lt-- Elemento Struct --gtltxselement name=struct type=structureParmArray substitutionGroup=structOrProgram gt

lt-- Tipo de matriz Struct --gtltxselement name=arrayOfStruct type=structArrayType substitutionGroup=structArrayGroup

nillable=true gtltxscomplexType name=structArrayTypegt

ltxssequencegtlt-- El coacutedigo struct_i representa elementos struct de una matriz --gtltxselement name=struct_i type=structElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- El nombre de la estructura --gtltxsattribute name=name type=string50gtlt-- El nuacutemero de elementos de la matriz --gtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtlt-- Especifica si es una estructura de entrada salida o entradasalida (rsquousagersquo en PCML) --gtltxsattribute name=passDirection type=passDirectionTypegtlt-- El desplazamiento de la estructura dentro de un paraacutemetro de salida --gtltxsattribute name=offset type=xsstring gtlt-- La ubicacioacuten base a la que hace referencia el atributo rsquooffsetrsquo --gtltxsattribute name=offsetFrom type=xsstring gtlt-- El nuacutemero de bytes que se han de reservar para los datos de salida del elemento --gtltxsattribute name=outputSize type=xsstring gtlt-- La versioacuten de IBM i inferior en la que existe este elemento --gtltxsattribute name=minvrm type=string10 gtlt-- La versioacuten de IBM i superior en la que existe este elemento --gtltxsattribute name=maxvrm type=string10 gt

ltxscomplexTypegt

lt-- Atributos comunes a todos los tipos de campos de datos --gtltxsattributeGroup name=commonParmAttrsgt

lt-- Especifica si es un paraacutemetro de entrada salida o entradasalida (rsquousagersquo en PCML) --gtlt-- El valor predeterminado si se ha especificado none es rsquoinheritrsquo --gtltxsattribute name=passDirection type=passDirectionTypegtlt-- Especifica si el paraacutemetro se pasa por referencia o valor (rsquopassbyrsquo en PCML) --gtlt-- El valor predeterminado si se ha especificado none es rsquoreferencersquo --gtltxsattribute name=passMode type=passModeType gtlt-- El desplazamiento del elemento dentro de un paraacutemetro de salida --gtlt-- The default value if none is specified is 0 --gtltxsattribute name=offset type=xsstring gtlt-- La ubicacioacuten base a la que hace referencia el atributo rsquooffsetrsquo --gtltxsattribute name=offsetFrom type=xsstring gtlt-- El nuacutemero de bytes que se han de reservar para los datos de salida del elemento --gtltxsattribute name=outputSize type=xsstring gtlt-- La versioacuten de IBM i inferior para la que este campo es vaacutelido --gtlt-- Si no se especifica se supone que este campo es vaacutelido para todas las versiones --gtltxsattribute name=minvrm type=string10 gtlt-- La versioacuten de IBM i superior para la que este campo es vaacutelido --gtlt-- Si no se especifica se supone que este campo es vaacutelido para todas las versiones --gtltxsattribute name=maxvrm type=string10 gt

ltxsattributeGroupgt

ltxssimpleType name=passDirectionTypegtltxsrestriction base=xsstringgt

ltxsenumeration value=ingtltxsenumeration value=inoutgtltxsenumeration value=outgtltxsenumeration value=inheritgt

ltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=passModeTypegtltxsrestriction base=xsstringgt

344 IBM Toolbox para Java IBM Toolbox para Java

ltxsenumeration value=valuegtltxsenumeration value=referencegt

ltxsrestrictiongtltxssimpleTypegt

lt-- Los tipos siguientes permiten mantener la compatibilidad con PCML --gtltxssimpleType name=bidiStringTypeTypegt

ltxsrestriction base=xsstringgtltxsenumeration value=ST4gtltxsenumeration value=ST5gtltxsenumeration value=ST6gtltxsenumeration value=ST7gtltxsenumeration value=ST8gtltxsenumeration value=ST9gtltxsenumeration value=ST10gtltxsenumeration value=ST11gtltxsenumeration value=DEFAULTgt

ltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=charTypegtltxsrestriction base=xsstringgt

ltxsenumeration value=onebytegtltxsenumeration value=twobytegt

ltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=trimTypegtltxsrestriction base=xsstringgt

ltxsenumeration value=nonegtltxsenumeration value=leftgtltxsenumeration value=rightgtltxsenumeration value=bothgt

ltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=returnValueTypegtltxsrestriction base=xsstringgt

ltxsenumeration value=voidgtltxsenumeration value=integergt

ltxsrestrictiongtltxssimpleTypegt

ltxscomplexType name=structureParmArraygtltxssequencegt

ltxsgroup ref=structureParm minOccurs=0 maxOccurs=unboundedgtltxssequencegtltxsattribute name=name type=string50gtltxsattribute name=passDirection type=passDirectionTypegtltxsattribute name=offset type=xsstring gtltxsattribute name=offsetFrom type=xsstring gtltxsattribute name=outputSize type=xsstring gtltxsattribute name=minvrm type=string10 gtltxsattribute name=maxvrm type=string10 gt

ltxscomplexTypegt

lt-- Un structureParm es exactamente uno de los siguientes stringParm intParmshortParm longParm zonedDecimalParm packedDecimalParm floatParmdoubleParm o hexBinaryParm --gtltxsgroup name=structureParmgt

ltxschoicegtltxselement ref=stringParmGroup gtltxselement ref=stringParmArrayGroup gtltxselement ref=intParmGroup gtltxselement ref=intParmArrayGroup gt

IBM Toolbox para Java 345

ltxselement ref=unsignedIntParmGroup gtltxselement ref=unsignedIntParmArrayGroup gtltxselement ref=shortParmGroup gtltxselement ref=shortParmArrayGroup gtltxselement ref=unsignedShortParmGroup gtltxselement ref=unsignedShortParmArrayGroup gtltxselement ref=longParmGroup gtltxselement ref=longParmArrayGroup gtltxselement ref=zonedDecimalParmGroup gtltxselement ref=zonedDecimalParmArrayGroup gtltxselement ref=packedDecimalParmGroup gtltxselement ref=packedDecimalParmArrayGroup gtltxselement ref=floatParmGroup gtltxselement ref=floatParmArrayGroup gtltxselement ref=doubleParmGroup gtltxselement ref=doubleParmArrayGroup gtltxselement ref=hexBinaryParmGroup gtltxselement ref=hexBinaryParmArrayGroup gtltxselement ref=structParmGroup gtltxselement ref=structParmArrayGroupgtltxselement ref=structArrayGroupgtltxselement ref=structgt

ltxschoicegtltxsgroupgt

lt-- Esquema de definicioacuten de campo --gt

lt-- Defina los tipos de datos nativos de IBM i baacutesicos --gt

ltxscomplexType name=zonedDecimalgtltxssimpleContentgt

ltxsextension base=xsdecimalgtltxsattribute name=totalDigits type=xspositiveInteger gtltxsattribute name=fractionDigits type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

ltxscomplexType name=packedDecimalgtltxssimpleContentgt

ltxsextension base=xsdecimalgtltxsattribute name=totalDigits type=xspositiveInteger gtltxsattribute name=fractionDigits type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

ltxscomplexType name=structureFieldArraygtltxssequencegt

ltxsgroup ref=structureField minOccurs=1 maxOccurs=unboundedgtltxssequencegtltxsattribute name=name type=string50gtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstringgt

ltxscomplexTypegt

lt-- Tipo abstracto para struct o program --gtltxselement name=structOrProgram abstract=true gt

lt-- Tipo abstracto para todos los tipos de campos de datos --gtltxselement name=stringFieldGroup type=stringFieldType abstract=true gt

346 IBM Toolbox para Java IBM Toolbox para Java

ltxselement name=intFieldGroup type=intFieldType abstract=true gtltxselement name=unsignedIntFieldGroup type=unsignedIntFieldType abstract=true gtltxselement name=shortFieldGroup type=shortFieldType abstract=true gtltxselement name=unsignedShortFieldGroup type=unsignedShortFieldType abstract=true gtltxselement name=longFieldGroup type=longFieldType abstract=true gtltxselement name=zonedDecimalFieldGroup type=zonedDecimalFieldType abstract=true gtltxselement name=packedDecimalFieldGroup type=packedDecimalFieldType abstract=true gtltxselement name=floatFieldGroup type=floatFieldType abstract=true gtltxselement name=doubleFieldGroup type=doubleFieldType abstract=true gtltxselement name=hexBinaryFieldGroup type=hexBinaryFieldType abstract=true gtltxselement name=structFieldGroup type=structFieldType abstract=true gt

lt-- Declare cada elemento de campo como un tipo de campo especiacutefico --gtltxselement name=stringField type=stringFieldType substitutionGroup=stringFieldGroup

nillable=truegtltxselement name=intField type=intFieldType nillable=true

substitutionGroup=intFieldGroup gtltxselement name=unsignedIntField type=unsignedIntFieldType

substitutionGroup=unsignedIntFieldGroup nillable=truegtltxselement name=shortField type=shortFieldType nillable=true

substitutionGroup=shortFieldGroup gtltxselement name=unsignedShortField type=unsignedShortFieldType nillable=true

substitutionGroup=unsignedShortFieldGroup gtltxselement name=longField type=longFieldType nillable=true

substitutionGroup=longFieldGroup gtltxselement name=hexBinaryField type=hexBinaryFieldType nillable=true

substitutionGroup=hexBinaryFieldGroup gtltxselement name=zonedDecimalField type=zonedDecimalFieldType nillable=true

substitutionGroup=zonedDecimalFieldGroup gtltxselement name=packedDecimalField type=packedDecimalFieldType nillable=true

substitutionGroup=packedDecimalFieldGroup gtltxselement name=doubleField type=doubleFieldType nillable=true

substitutionGroup=doubleFieldGroup gtltxselement name=floatField type=floatFieldType nillable=true

substitutionGroup=floatFieldGroup gt

ltxselement name=structField type=structFieldType nillable=truesubstitutionGroup=structFieldGroup gt

lt-- Un StructureField es exactamente uno de los siguientes stringField intFieldshortField longField zonedDecimalField packedDecimalField floatFielddoubleField o hexBinaryField --gtltxsgroup name=structureFieldgt

ltxschoicegtltxselement ref=stringFieldGroupgtltxselement ref=intFieldGroupgtltxselement ref=unsignedIntFieldGroupgtltxselement ref=shortFieldGroupgtltxselement ref=unsignedShortFieldGroupgtltxselement ref=longFieldGroupgtltxselement ref=zonedDecimalFieldGroupgtltxselement ref=packedDecimalFieldGroupgtltxselement ref=floatFieldGroupgtltxselement ref=doubleFieldGroupgtltxselement ref=hexBinaryFieldGroupgtltxselement ref=structParmGroupgtltxselement ref=structgt

ltxschoicegtltxsgroupgt

lt-- Campo de caraacutecter --gtlt-- Se correlaciona con AS400Text --gtltxscomplexType name=stringFieldTypegt

ltxssimpleContentgt

IBM Toolbox para Java 347

ltxsextension base=xsstringgtlt-- Nuacutemero de caracteres --gtltxsattribute name=length type=xsstringgtlt-- Indica la codificacioacuten del campo (CCSID) en el servidor --gtltxsattribute name=ccsid type=xsstringgtltxsattribute name=trim type=trimType gtltxsattribute name=bytesPerChar type=charType gtltxsattribute name=bidiStringType type=bidiStringTypeType gtltxsattributeGroup ref=commonFieldAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Campo hexBinary --gtlt-- Se correlaciona con AS400ByteArray --gtltxscomplexType name=hexBinaryFieldTypegt

ltxssimpleContentgtltxsextension base=xshexBinarygt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo Float --gtlt-- Se correlaciona con AS400Float4 --gtltxscomplexType name=floatFieldTypegt

ltxssimpleContentgtltxsextension base=xsfloatgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo zonedDecimal --gtlt-- Se correlaciona con AS400ZonedDecimal --gtltxscomplexType name=zonedDecimalFieldTypegt

ltxssimpleContentgtltxsextension base=zonedDecimalgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo packedDecimal --gtlt-- Se correlaciona con AS400PackedDecimal --gtltxscomplexType name=packedDecimalFieldTypegt

ltxssimpleContentgtlt-- En DDS los valores binarios tienen 1-18 diacutegitos si la longitud del campo es

superior a 9 el valor de posiciones decimales debe ser 0 --gtltxsextension base=packedDecimalgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo int --gtlt-- Se correlaciona con AS400Bin4 --gtltxscomplexType name=intFieldTypegt

ltxssimpleContentgtltxsextension base=xsintgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

348 IBM Toolbox para Java IBM Toolbox para Java

lt-- Campo int sin signo --gtlt-- Se correlaciona con AS400Bin4 --gtltxscomplexType name=unsignedIntFieldTypegt

ltxssimpleContentgtltxsextension base=xsunsignedIntgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo short --gtlt-- Se correlaciona con AS400Bin2 --gtltxscomplexType name=shortFieldTypegt

ltxssimpleContentgtltxsextension base=xsshortgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo short sin signo --gtlt-- Se correlaciona con AS400Bin2 --gtltxscomplexType name=unsignedShortFieldTypegt

ltxssimpleContentgtltxsextension base=xsunsignedShortgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo long --gtlt-- Se correlaciona con AS400Bin8 --gtltxscomplexType name=longFieldTypegt

ltxssimpleContentgtltxsextension base=xslonggt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo double --gtlt-- Se correlaciona con AS400Float8 --gtltxscomplexType name=doubleFieldTypegt

ltxssimpleContentgtltxsextension base=xsdoublegt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo struct --gtltxscomplexType name=structFieldTypegt

ltxssimpleContentgtltxsextension base=xsstringgt

ltxsattribute name=struct type=string50gtltxsattributeGroup ref=commonFieldAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Atributos comunes a todos los tipos de campos de datos --gtltxsattributeGroup name=commonFieldAttrsgt

ltxsattribute name=name type=string50gt

IBM Toolbox para Java 349

ltxsattribute name=columnHeading1 type=string20gtltxsattribute name=columnHeading2 type=string20gtltxsattribute name=columnHeading3 type=string20gtltxsattribute name=description type=string50gtltxsattribute name=defaultValue type=xsstringgtlt-- La longitud maacutexima de la serie es de 65535 caracteres --gtltxsattribute name=nullable type=xsbooleangtltxsattribute name=isEmptyString type=xsbooleangtlt-- Indica que se trata de una serie vaciacutea --gt

ltxsattributeGroupgt

lt-- Tipos de utilidades --gt

ltxssimpleType name=ccsidTypegtltxsrestriction base=xsnonNegativeIntegergtltxsmaxInclusive value=65535gtltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=string10gtltxsrestriction base=xsstringgtltxsmaxLength value=10gtltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=string20gtltxsrestriction base=xsstringgtltxsmaxLength value=20gtltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=string50gtltxsrestriction base=xsstringgtltxsmaxLength value=50gtltxsrestrictiongtltxssimpleTypegt

ltxsschemagt

Sintaxis de XPCML

El esquema XPCML define varios coacutedigos de elementos y cada coacutedigo de elemento contiene coacutedigos deatributos

La tabla siguiente contiene los distintos elementos que se pueden declarar y definir en los archivos fuenteXPCML Cada entrada de la primera columna enlaza con la seccioacuten adecuada del esquema XPCML

Coacutedigo XPCML Descripcioacuten Coacutedigo PCML equivalente

doubleParm Define un paraacutemetro doble data (type=float length=8)

arrayOfDoubleParm Define un paraacutemetro que es unamatriz de dobles

floatParm Define un paraacutemetro flotante data (type=float length=4)

arrayOfFloatParm Define un paraacutemetro que es unamatriz de datos flotantes

hexBinaryParm Define un paraacutemetro de byterepresentado de modo hexadecimal

byte (equivalente aproximado enrepresentacioacuten hexadecimal)

arrayOfHexBinaryParm Define un paraacutemetro que es unamatriz de datos hexBinary

intParm Define un paraacutemetro entero data (type=int length=4)

arrayOfIntParm Define un paraacutemetro que es unamatriz de enteros

longParm Define un paraacutemetro largo data (type=int length=8)

350 IBM Toolbox para Java IBM Toolbox para Java

Coacutedigo XPCML Descripcioacuten Coacutedigo PCML equivalente

arrayOfLongParm Define un paraacutemetro que es unamatriz de datos largos

packedDecimalParm Define un paraacutemetro decimalempaquetado

data (type=packed)

arrayOfPackedDecimalParm Define un paraacutemetro que es unamatriz de decimales empaquetados

parameterList Indica que el coacutedigo delimitadorrepresenta todas las definiciones deparaacutemetros del programa

program Inicia y finaliza el fuente XML quedescribe una llamada a programa

program

shortParm Define un paraacutemetro corto data (type int length 2)

arrayOfShortParm Define un paraacutemetro que es unamatriz de datos cortos

stringParm Define un paraacutemetro de tipo serie

arrayOfStringParm Define un paraacutemetro que es unamatriz de series

struct Define una estructura con nombreque puede especificarse como unargumento para un programa o comoun campo dentro de otra estructuracon nombre

struct

arrayOfStruct Define una matriz de estructuras

structParm Representa una referencia a uncoacutedigo struct situado en alguacuten otrolugar del documento XPCML que sedesea incluir en una ubicacioacutenespeciacutefica del documento

data (type=struct)

arrayOfStructParm Define un paraacutemetro que es unamatriz de paraacutemetros de estructura

unsignedIntParm Define un paraacutemetro entero sin signo data (type=int length=4precision=32)

arrayOfUnsignedIntParm Define un paraacutemetro que es unamatriz de enteros sin signo

unsignedShortParm Define un paraacutemetro corto sin signo data (type=int length=2precision=16)

arrayOfUnsignedShortParm Define un paraacutemetro que es unamatriz de datos cortos sin signo

xpcml Inicia y finaliza el archivo fuenteXPCML que describe el formato de lallamada a programa

zonedDecimalParm Define un paraacutemetro decimal conzona

data (type zoned)

arrayOfZonedDecimalParm Define un paraacutemetro que es unamatriz de decimales con zona

IBM Toolbox para Java 351

Atributos de coacutedigos XPCML

El esquema XPCML define varios coacutedigos de elementos y cada coacutedigo de elemento contiene coacutedigos deatributos La tabla siguiente lista y describe los distintos atributos de cada elemento

Para obtener informacioacuten maacutes especiacutefica sobre los coacutedigos XPCML y sus atributos consulte EsquemaXPCML

Coacutedigo XPCML Atributo Descripcioacuten

hexBinaryParm Rellenar las 2 uacuteltimas columnas condatos y decidir el formato

arrayOfHexBinaryParm

doubleParm Define un paraacutemetro doble float (length 8)

arrayOfDoubleParm Define un paraacutemetro que es unamatriz de dobles

floatParm Define un paraacutemetro flotante data (type float length 4)

arrayOfFloatParm Define un paraacutemetro que es unamatriz de datos flotantes

intParm Define un paraacutemetro entero data (type int length 4)

arrayOfIntParm Define un paraacutemetro que es unamatriz de enteros

longParm Define un paraacutemetro largo data (type int length 8)

arrayOfLongParm Define un paraacutemetro que es unamatriz de datos largos

packedDecimalParm Define un paraacutemetro decimalempaquetado

data (type packed)

arrayOfPackedDecimalParm Define un paraacutemetro que es unamatriz de decimales empaquetados

parameterList Indica que el coacutedigo delimitadorrepresenta todas las definiciones deparaacutemetros del programa

program Inicia y finaliza el fuente XML quedescribe una llamada a programa

shortParm Define un paraacutemetro corto data (type int length 2)

arrayOfShortParm Define un paraacutemetro que es unamatriz de datos cortos

stringParm Define un paraacutemetro de tipo serie

arrayOfStringParm Define un paraacutemetro que es unamatriz de series

struct Define una estructura con nombreque puede especificarse como unargumento para un programa o comoun campo dentro de otra estructuracon nombre

arrayOfStruct Define una matriz de estructuras

structParm Representa una referencia a uncoacutedigo struct situado en alguacuten otrolugar del documento XPCML que sedesea incluir en una ubicacioacutenespeciacutefica del documento

data (type struct)

352 IBM Toolbox para Java IBM Toolbox para Java

Coacutedigo XPCML Atributo Descripcioacuten

arrayOfStructParm Define un paraacutemetro que es unamatriz de paraacutemetros de estructura

unsignedIntParm Define un paraacutemetro entero sin signo data (type int length 4 precision 32)

arrayOfUnsignedIntParm Define un paraacutemetro que es unamatriz de enteros sin signo

unsignedShortParm Define un paraacutemetro corto sin signo data (type int length 2 precision 16)

arrayOfUnsignedShortParm Define un paraacutemetro que es unamatriz de datos cortos sin signo

xpcml Inicia y finaliza el archivo fuenteXPCML que describe el formato de lallamada a programa

zonedDecimalParm Define un paraacutemetro decimal conzona

data (type zoned)

arrayOfZonedDecimalParm Define un paraacutemetro que es unamatriz de decimales con zona

Utilizacioacuten de XPCMLLa utilizacioacuten de XPCML es parecida a la de PCML Los pasos siguientes enumeran con caraacutecter generallas acciones que se deben llevar a cabo para utilizar XPCML1 Utilice XPCML para describir la especificacioacuten de la llamada a programa2 Cree un objeto ProgramCallDocument3 Utilice ProgramCallDocumentcallProgram() para ejecutar el programa

Pese a las similitudes con el uso de PCML el uso de XPCML ofrece diversas funciones mejoradasv Permitir que el analizador valide automaacuteticamente los valores de paraacutemetrosv Especificar y pasar valores de paraacutemetros de programasv Recuperar los resultados de una llamada de programa al servidor en XPCMLv Transformar un documento PCML existente en el documento XPCML equivalentev Ampliar el esquema XPCML para definir nuevos elementos y atributos simples y complejos

Por ejemplo IBM Toolbox para Java permite ampliar el esquema XPCML para crear nuevos tipos deparaacutemetros y datos Se puede utilizar esta funcioacuten de XPCML para condensar los archivos fuenteXPCML lo que facilita la lectura de los archivos y el uso del coacutedigo

Encontraraacute maacutes informacioacuten sobre el uso de XPCML en estas paacuteginas

Convertir fuente PCML existente en XPCML

La clase ProgramCallDocument contiene el meacutetodo transformPCMLToXPCML que permite transformarlos documentos PCML existentes en documentos XPCML equivalentes

XPCML tiene definiciones comparables para todos los elementos y atributos que se pueden definir enPCML Al utilizar transformPCMLToXPCML() la representacioacuten PCML de los elementos y atributos seconvierte en la representacioacuten XPCML equivalente

Tenga en cuenta que en algunos casos los atributos XPCML equivalentes tienen un nombre distinto alempleado en PCML Por ejemplo el atributo usage de PCML se corresponde con el atributopassDirection de XPCML Para obtener maacutes informacioacuten sobre coacutemo utilizar el fuente XPCML encomparacioacuten con PCML consulte Esquema y sintaxis XPCML

IBM Toolbox para Java 353

El meacutetodo toma el documento PCML existente que se pasa como un objeto InputStream y genera elfuente XPCML equivalente como un objeto OutputStream Como transformPCMLToXPCML() es unmeacutetodo estaacutetico se puede efectuar una llamada al mismo sin tener que crear primero un objetoProgramCallDocument

Ejemplo convertir un documento PCML en un documento XPCML

El ejemplo siguiente muestra coacutemo se puede convertir un documento PCML (denominadomyPCMLpcml) en un documento XPCML (denominado myXPCMLxpcml)

Nota debe especificar xpcml como la extensioacuten de archivo de los archivos XPCML Con el uso de laextensioacuten de archivo xpcml se garantiza que la clase ProgramCallDocument reconoceraacute el archivo comoXPCML De no especificarse ninguna extensioacuten ProgramCallDocument supondraacute que el archivo esPCML

Documento PCML myPCMLpcmllt-- myPCMLpcml --gtltpcml version=40gt

ltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgtltdata type=char name=parm1 usage=in passby=reference

minvrm=V5R2M0 ccsid=37 length=10 init=Value 1gtltprogramgt

ltpcmlgt

Coacutedigo Java para convertir myPCMLpcml en myPCMLxpcmltry

InputStream pcmlStream = new FileInputStream(myPCMLpcml)OutputStream xpcmlStream = new FileOutputStream(myXPCMLxpcml)ProgramCallDocumenttransformPCMLToXPCML(pcmlStream xpcmlStream)

catch (Exception e)

Systemoutprintln(error - +egetMessage())eprintStackTrace()

Documento XPCML final myXPCMLxpcmlltxml version=10 encoding=UTF-8gt

lt-- myXPCMLxpcml --gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=xpcmlxsd version=40gtltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgt

ltparameterListgtltstringParm name=parm1 passDirection=in passMode=reference

minvrm=V5R2M0 ccsid=37 length=10gtValue 1ltstringParmgt

ltparameterListgtltprogramgt

ltxpcmlgt

Para obtener maacutes informacioacuten sobre transformPCMLToXPCML() y la clase ProgramCallDocumentconsulte la paacutegina siguiente

Informacioacuten de javadocs acerca de ProgramCallDocument

Utilizar XPCML para llamar a un programa del servidor

Tras crear el archivo XPCML debe crear un objeto ProgramCallDocument que pueda emplear lasespecificaciones XPCML y los valores de datos para llamar a un programa del servidor IBM i

354 IBM Toolbox para Java IBM Toolbox para Java

Cree un objeto ProgramCallDocument XPCML pasando el nombre del archivo XPCML en el constructorProgramCallDocument Al crear un objeto ProgramCallDocument XPCML de este modo primero seanaliza y valida el documento XPCML y despueacutes se crea el objeto ProgramCallDocument

Para analizar y validar el documento XPCML aseguacuterese de que la CLASSPATH contiene un analizadorXML de plena validacioacuten Encontraraacute maacutes informacioacuten sobre los requisitos para ejecutar XPCML en estapaacutegina

ldquoRequisitos de uso de XPCMLrdquo en la paacutegina 332

El ejemplo siguiente muestra coacutemo se crea un objeto ProgramCallDocument para el archivo XPCMLmyXPCMLxpcml

system = new AS400() Cree un objeto ProgramCallDocument en el que se analizaraacute el archivoProgramCallDocument xpcmlDoc =

new ProgramCallDocument(system myXPCMLxpcml)

La uacutenica diferencia entre crear un objeto ProgramCallDocument XPCML y un objetoProgramCallDocument PCML es que se pasa al constructor un documento XPCML en lugar de undocumento PCML

Nota debe especificar xpcml como la extensioacuten de archivo de los archivos XPCML Con el uso de laextensioacuten de archivo xpcml se garantiza que la clase ProgramCallDocument reconoceraacute el archivo comoXPCML De no especificarse ninguna extensioacuten ProgramCallDocument supondraacute que el archivo esPCML

Utilizar XPCML para llamar a un programa del servidor

Tras crear el objeto ProgramCallDocument utilice cualquiera de los meacutetodos de la claseProgramCallDocument para trabajar con el documento XPCML Por ejemplo llame a un programa deIBM i mediante ProgramCallDocumentcallProgram() o cambie el valor de un paraacutemetro de entradaXPCML antes de llamar al programa del servidor mediante el meacutetodo ProgramCallDocumentsetValuecorrespondiente

El ejemplo siguiente muestra coacutemo se crea un objeto ProgramCallDocument para un archivo XPCML(denominado myXPCMLxpcml) Tras crear el objeto ProgramCallDocument el ejemplo llama a unprograma (PROG1) especificado en el documento XPCML En este caso la uacutenica diferencia entre utilizarXPCML y PCML es que el ejemplo pasa un archivo XPCML al constructor ProgramCallDocument

Una vez que la aplicacioacuten lee y analiza un documento XPCML el documento XPCML funcionaexactamente igual que un documento PCML En este momento XPCML puede emplear cualquiera de losmeacutetodos existentes que utiliza PCML

system = new AS400()

Cree un objeto ProgramCallDocument en el que se analizaraacute el archivoProgramCallDocument xpcmlDoc = new ProgramCallDocument(system myXPCMLxpcml)

Llame a PROG1boolean rc = xpcmlDoccallProgram(PROG1)

Obtener los resultados de una llamada a programa en formato de XPCML

Tras llamar a un programa del servidor puede emplear los meacutetodos ProgramCallDocumentgetValue pararecuperar los objetos Java que representan los valores de paraacutemetros del programa

Asimismo los siguientes meacutetodos generateXPCML permiten a ProgramCallDocument devolver losresultados de una llamada a programa en formato de XPCML

IBM Toolbox para Java 355

v generateXPCML(String fileName) genera resultados en formato de XPCML para todo el archivo fuenteXPCML empleado para construir el objeto ProgramCallDocument Almacena el fuente XPCML en unarchivo con el nombre de archivo especificado

v generateXPCML(String pgmName String fileName) genera resultados en formato de XPCMLuacutenicamente para el programa especificado y sus paraacutemetros Almacena el fuente XPCML en un archivocon el nombre de archivo especificado

v generateXPCML(javaioOutputStream outputStream) genera resultados en formato de XPCML paratodo el archivo fuente XPCML Almacena el fuente XPCML en el objeto OutputStream especificado

v generateXPCML(String pgmName javaioOutputStream outputStream) genera resultados en formatode XPCML uacutenicamente para el programa especificado y sus paraacutemetros Almacena el fuente XPCML enel objeto OutputStream especificado

Para obtener maacutes informacioacuten sobre la clase ProgramCallDocument consulte la informacioacuten del JavadocProgramCallDocument

El ejemplo siguiente muestra coacutemo se puede construir un objeto ProgramCallDocument XPCML llamar aun programa de IBM i y recuperar los resultados de la llamada a programa en formato de XPCML

ldquoEjemplo recuperar los resultados de una llamada a programa en formato de XPCMLrdquo en la paacutegina577

Informacioacuten relacionadaJavadoc ProgramCallDocument

Pasar valores de paraacutemetros como XPCML

Puede establecer los valores de los paraacutemetros de programas en el archivo fuente XPCML y pasar losvalores de paraacutemetros como XPCML

Cuando el objeto ProgramCallDocument lee y analiza el documento XPCML automaacuteticamente llama almeacutetodo setValue adecuado para cada paraacutemetro especificado en el fuente XPCML

El uso de XPCML para pasar valores de paraacutemetros hace innecesario tener que escribir coacutedigo Java queestablezca los valores de complejas estructuras y matrices

En los ejemplos siguientes se muestran diversas formas de construir matrices y pasar valores deparaacutemetros como XPCML

ldquoEjemplo pasar valores de paraacutemetros como XPCMLrdquo en la paacutegina 580

ldquoEjemplos pasar matrices de valores de paraacutemetros como XPCMLrdquo en la paacutegina 581

Coacutemo se utiliza fuente XPCML condensado

Como XPCML es ampliable se pueden definir nuevos tipos de paraacutemetros que ampliacuteen los especificadospor el esquema XPCML Al condensar XPCML se ampliacutea el esquema XPCML para crear nuevasdefiniciones de tipos de datos que simplifican y mejoran las posibilidades de lectura y uso de losdocumentos XPCML

En la informacioacuten siguiente se supone que el lector entiende el esquema XPCML Encontraraacute maacutesinformacioacuten sobre el esquema XPCML en esta paacutegina

ldquoEsquema y sintaxis XPCMLrdquo en la paacutegina 333

Para condensar fuente XPCML ya existente debe utilizar el meacutetodoProgramCallDocumentcondenseXPCML que genera lo siguiente

356 IBM Toolbox para Java IBM Toolbox para Java

v Un esquema ampliado que contiene nuevas definiciones de tipo para cada uno de los paraacutemetros delfuente XPCML existente

v Nuevo fuente XPCML que utiliza las definiciones de tipo proporcionadas en el esquema ampliado

Encontraraacute maacutes informacioacuten sobre coacutemo condensar el fuente XPCML en estas paacuteginas

ldquoCondensar documentos XPCML existentesrdquo

ldquoEjemplo coacutemo se utiliza fuente XPCML condensado para crear un objeto ProgramCallDocumentrdquoen la paacutegina 586

ldquoEjemplo obtener los resultados de una llamada a programa en formato de XPCML condensadordquo enla paacutegina 586

Condensar documentos XPCML existentes

Al condensar documentos XPCML ya existentes se obtiene un fuente XPCML maacutes faacutecil de leer y utilizarPara crear fuente XPCML condensado utilice el meacutetodo ProgramCallDocumentcondenseXPCML

Para llamar a condenseXPCML() proporcione los siguientes paraacutemetros al meacutetodov Una corriente de entrada que representa el fuente XPCML existentev Una corriente de salida que representa el fuente XPCML condensadov Una corriente de salida que representa el nuevo esquema ampliadov Un nombre para el nuevo esquema en el formato adecuado (por ejemplo mySchemaxsd)

Para obtener maacutes informacioacuten sobre condenseXPCML() y la clase ProgramCallDocument consulte lainformacioacuten del Javadoc ProgramCallDocument

ProgramCallDocumentcondenseXPCML() es un meacutetodo estaacutetico lo que significa que no es necesariocrear una instancia de un objeto ProgramCallDocument para llamar al meacutetodo

Ejemplos

Los ejemplos siguientes muestran coacutemo se puede condensar un documento XPCML existente

El primer ejemplo es sencillo y contiene el fuente XPCML original el fuente XPCML condensadoobtenido y el esquema ampliado El segundo ejemplo es maacutes largo y complejo y contiene el coacutedigo Javaque llama a condenseXPCML() y a algunas de las nuevas definiciones de tipo generadas del esquemaampliado

ldquoEjemplo condensar un documento XPCML existenterdquo en la paacutegina 583

ldquoEjemplo condensar un documento XPCML existente con coacutedigo Java incluidordquo en la paacutegina 583Informacioacuten relacionadaJavadoc ProgramCallDocument

Identificar errores de anaacutelisis en XPCML

Al validar documentos de esquemas XPCML un analizador XML de plena validacioacuten puede generaravisos errores de anaacutelisis no graves y errores de anaacutelisis graves

Los avisos y errores de anaacutelisis no graves no impiden la ejecucioacuten del anaacutelisis Puede resultarle uacutetilexaminar los avisos y errores de anaacutelisis no graves para determinar los problemas existentes en el fuenteXPCML Los errores de anaacutelisis graves hacen que el anaacutelisis se interrumpa con una excepcioacuten

IBM Toolbox para Java 357

Para ver los avisos y errores del analizador no graves al analizar un documento XPCML active el rastreoen la aplicacioacuten y establezca la categoriacutea de rastreo en PCML

Ejemplo

Un analizador XML de plena validacioacuten genera un error para los tipos de paraacutemetros numeacutericos que notienen ninguacuten valor El ejemplo siguiente muestra un fuente XPCML de ejemplo y el error de anaacutelisis nograve obtenido

Fuente XPCMLltprogram name=prog1gt

ltparameterListgtltintParm name=parm1gt

ltparameterListgtltprogramgt

Error obtenidoTue Mar 25 152144 CST 2003 [Error] cvc-complex-type22 El elementorsquointParmrsquo no puede tener ninguacuten elemento [hijo] y el valor debe ser vaacutelido

Para evitar que se anote este tipo de error antildeada el atributo nil=true al elemento intParm El atributonil=true indica al analizador que el elemento se ha dejado vaciacuteo deliberadamente Vea el fuente XPCMLanterior una vez antildeadido el atributo nil=true

ltprogram name=prog1gtltparameterListgt

ltintParm xsinil=true name=parm1gtltparameterListgt

ltprogramgt

Preguntas habituales (FAQ)Las preguntas habituales (FAQ) de IBM Toolbox para Java dan respuesta a cuestiones relacionadas con laoptimizacioacuten del rendimiento de IBM Toolbox para Java la resolucioacuten de problemas la utilizacioacuten deJDBC y otros temas

v Preguntas frecuentes de IBM Toolbox para Java encuentre la respuesta a muchos tipos depreguntas entre ellas coacutemo mejorar el rendimiento utilizar IBM i solucionar los problemas etc

v Preguntas frecuentes de JDBC de IBM Toolbox para Java Encuentre respuestas relativas a lautilizacioacuten de JDBC con IBM Toolbox para Java

Consejos para la programacioacutenEn este apartado se ofrecen diversos consejos que pueden ayudarle a utilizar IBM Toolbox para Java

Coacutemo concluir el programa JavaPara asegurarse de que el programa concluye de manera adecuada emita Systemexit(0) como uacuteltimainstruccioacuten antes de que finalice el programa Java

Nota evite utilizar Systemexit(0) con servlets ya que ello concluye toda la maacutequina virtual Java

IBM Toolbox para Java se conecta al servidor con hebras de usuario Por ello de no emitirseSystemexit(0) puede que el programa Java no concluya debidamente

Utilizar Systemexit(0) no es un requisito imprescindible sino una precaucioacuten En ocasiones deberaacuteutilizar este mandato para salir de un programa Java y en cambio no es problemaacutetico utilizarSystemexit(0) cuando no es necesario

358 IBM Toolbox para Java IBM Toolbox para Java

Nombres de viacutea de acceso del sistema de archivos integrado paraobjetos de servidorEl programa Java debe utilizar nombres del sistema de archivos integrado para hacer referencia a objetosdel servidor como pueden ser programas bibliotecas mandatos o archivos en spool El nombre desistema de archivos integrado es el nombre de un objeto de servidor tal como se podriacutea acceder a eacutel en elsistema de archivos de biblioteca del sistema de archivos integrado en IBM i

El nombre de viacutea de acceso puede constar de los siguientes componentes

Componente del nombre de viacutea de acceso Descripcioacuten

biblioteca La biblioteca en la que reside el objeto La biblioteca esuna parte obligatoria de un nombre de viacutea de acceso delsistema de archivos integrado El nombre de la bibliotecadebe tener 10 caracteres como maacuteximo seguidos de lib

objeto El nombre del objeto representado por el nombre de laviacutea de acceso del sistema de archivos integrado El objetoes una parte obligatoria de un nombre de viacutea de accesodel sistema de archivos integrado El nombre del objetodebe tener 10 caracteres como maacuteximo seguidos de tiposiendo tipo el tipo del objeto Para encontrar los valoresposibles de tipo pulse la tecla Solicitud para elparaacutemetro OBJTYPE en los mandatos CL (lenguaje decontrol) como por ejemplo en el mandato Trabajar conobjetos (WRKOBJ)

tipo El tipo del objeto El tipo se ha de especificar a la vezque el objeto (Veacutease objeto maacutes arriba) El nombre deltipo debe tener 6 caracteres como maacuteximo

miembro El nombre del miembro representado por este nombre deviacutea de acceso del sistema de archivos integrado Elmiembro es una parte opcional de un nombre de viacutea deacceso del sistema de archivos integrado Uacutenicamentepuede especificarse cuando el tipo de objeto es FILE Elnombre del miembro debe tener 10 caracteres comomaacuteximo seguidos de mbr

Al determinar y especificar el nombre del sistema de archivos integrado tenga en cuenta estascondicionesv El caraacutecter separador de la viacutea de acceso es la barra inclinada hacia delante ()v El directorio de nivel raiacutez llamado QSYSLIB contiene la estructura de bibliotecas del servidorv Los objetos que residen en la biblioteca QSYS del servidor tienen este formato

QSYSLIBobjetotipo

v Los objetos que residen en otras bibliotecas tienen este formatoQSYSLIBbibliotecaLIBobjetotipo

v La extensioacuten del tipo de objeto es la abreviatura del servidor que se utiliza para ese tipo de objeto

Si desea ver una lista de estos tipos entre un mandato CL que tenga el paraacutemetro de tipo de objeto ypulse F4 (Solicitud) para obtener los valores de tipo Por ejemplo el mandato Trabajar con objetos(WRKOBJ) tiene un paraacutemetro de tipo de objeto

La tabla siguiente muestra una lista de los tipos de objeto maacutes utilizados y la abreviatura correspondientea cada tipo

IBM Toolbox para Java 359

Tipo de objeto Abreviatura

mandato CMD

cola de datos DTAQ

archivo FILE

recurso de fonts FNTRSC

definicioacuten de formulario FORMDF

biblioteca LIB

miembro MBR

preformato OVL

definicioacuten de paacutegina PAGDFN

segmento de paacutegina PAGSET

programa PGM

cola de salida OUTQ

archivo en spool SPLF

Las descripciones siguientes pueden ayudarle a determinar coacutemo se especifican los nombres de viacutea deacceso del sistema de archivos integrado

Nombre de sistema de archivos integrado Descripcioacuten

QSYSLIBMI_BIBLLIBMI_PROGPGM Programa MI_PROG de la biblioteca MI_BIBL delservidor

QSYSLIBMI_BIBLLIBMI_COLADTAQ Cola de datos MI_COLA de la biblioteca MI_BIBL delservidor

QSYSLIBANtildeO1998LIBMESFILEJULIOMBR Miembro JULIO del archivo MES de la bibliotecaANtildeO1998 del servidor

Valores especiales del sistema de archivos integrado

Diversas clases de IBM Toolbox para Java reconocen valores especiales en los nombres de viacutea de accesodel sistema de archivos integrado El formato tradicional de estos valores especiales (tal como se utilizanen una liacutenea de mandatos de IBM i) empieza con un asterisco (ALL) Sin embargo en un programa Javaque utiliza las clases de IBM Toolbox para Java el formato de estos valores especiales empieza y terminacon signos de porcentaje (ALL)

Nota en el sistema de archivos integrado un asterisco es un caraacutecter comodiacuten

La tabla siguiente muestra cuaacuteles de estos valores especiales reconocen las clases de IBM Toolbox paraJava para componentes especiacuteficos del nombre de viacutea de acceso Asimismo la tabla indica coacutemo variacutea elformato tradicional de estos valores especiales respecto del formato empleado en las clases de IBMToolbox para Java

360 IBM Toolbox para Java IBM Toolbox para Java

Componente del nombre de viacutea deacceso Formato tradicional Formato de IBM Toolbox para Java

Nombre de biblioteca ALL ALL

ALLUSR ALLUSR

CURLIB CURLIB

LIBL LIBL

USRLIBL USRLIBL

Nombre de objeto ALL ALL

Nombre de miembro ALL ALL

FILE FILE

FIRST FIRST

LAST LAST

En la clase QSYSObjectPathName encontraraacute informacioacuten sobre coacutemo se construyen y analizan losnombres del sistema de archivos integrado

Para obtener maacutes informacioacuten sobre los conceptos del sistema de archivos integrado consulte losconceptos del sistema de archivos integrado

Gestionar conexiones en programas JavaEs importante poder crear iniciar y finalizar conexiones con el servidor La informacioacuten siguiente describeconceptos fundamentales para la gestioacuten de las conexiones con el servidor y facilita tambieacuten algunosejemplos de coacutedigo

Para conectarse a un servidor IBM i el programa Java debe crear un objeto AS400 El objeto AS400contiene como maacuteximo una conexioacuten por socket para cada tipo de servidor IBM i Un serviciocorresponde a un trabajo del servidor y hace de interfaz con los datos del servidor

Nota cuando cree Enterprise JavaBeans (EJB) debe cumplir la especificacioacuten EJB que no permite hebrasdurante la conexioacuten Aunque al desactivar el soporte para hebras de IBM Toolbox para Java la aplicacioacutenpuede ir maacutes lenta es necesario cumplir la especificacioacuten EJB

Toda conexioacuten con cada uno de los servidores tiene su propio trabajo en el sistema Hay un servidordistinto para cada uno de estos elementosv JDBCv Llamada a programa y llamada a mandatov Sistema de archivos integradov Imprimirv Cola de datosv Acceso a nivel de registro

Nota

v Las clases de impresioacuten utilizan una conexioacuten por socket por objeto AS400 si la aplicacioacuten no intentarealizar dos tareas que requieran el servidor de impresioacuten de red a la vez

v Una clase de impresioacuten crea de ser necesario conexiones por socket adicionales con el servidor deimpresioacuten de red Las conversaciones adicionales se desconectan si no se utilizan durante 5 minutos

IBM Toolbox para Java 361

El programa Java puede controlar el nuacutemero de conexiones con el sistema Para optimizar el rendimientode las comunicaciones un programa Java puede crear varios objetos AS400 para el mismo servidor talcomo se muestra en la figura 1 De este modo se crean varias conexiones por socket con el sistema

Figura 1 programa Java que crea muacuteltiples objetos AS400 y conexiones por socket para el mismosistema

Para conservar los recursos del servidor cree uacutenicamente un objeto AS400 tal como se muestra en lafigura 2 Este procedimiento reduce el nuacutemero de conexiones lo que a su vez reduce la cantidad derecursos utilizados en el servidor

Figura 2 programa Java que crea un solo objeto AS400 y una uacutenica conexioacuten por socket para el mismosistema

362 IBM Toolbox para Java IBM Toolbox para Java

Nota aunque al crear maacutes conexiones aumenta la cantidad de recursos utilizados en el servidor elhecho de crear maacutes conexiones puede aportar una ventaja Al tener maacutes conexiones el programa Javapuede efectuar varios procesos en paralelo lo que permite conseguir una mejor productividad (nuacutemerode transacciones por segundo) y una mayor velocidad de la aplicacioacuten

Tambieacuten puede elegir utilizar una agrupacioacuten de conexiones para gestionar las conexiones como semuestra en la figura 3 Este enfoque reduce la cantidad de tiempo que se tarda en conectarse al reutilizaruna conexioacuten establecida anteriormente para el usuario

Figura 3 programa Java que obtiene una conexioacuten de un objeto AS400ConnectionPool a un servidor

IBM Toolbox para Java 363

Los ejemplos que hay a continuacioacuten muestran coacutemo se crean y utilizan los objetos AS400

Ejemplo 1 en este ejemplo se crean dos objetos CommandCall que enviacutean mandatos al mismo servidorComo los objetos CommandCall utilizan el mismo objeto AS400 solamente se crea una conexioacuten con elservidor

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree dos objetos llamada a mandato que utilicen el mismo objeto AS400CommandCall cmd1 = new CommandCall(sysmyCommand1)CommandCall cmd2 = new CommandCall(sysmyCommand2)

Ejecute los mandatos Se establece una conexioacuten cuando se ejecuta el primer mandato Como los dos mandatos emplean el mismo objeto AS400 el segundo objeto mandato emplearaacute la conexioacuten establecida por el primerocmd1run()cmd2run()

Ejemplo 2 en este ejemplo se crean dos objetos CommandCall que enviacutean mandatos al mismo sistemaComo los objetos CommandCall utilizan distintos objetos AS400 se crean dos conexiones con el servidor

Cree dos objetos AS400 para el mismo servidorAS400 sys1 = new AS400(mySystemmyCompanycom)AS400 sys2 = new AS400(mySystemmyCompanycom)

Cree dos objetos llamada a mandato Utilizan distintos objetos AS400CommandCall cmd1 = new CommandCall(sys1myCommand1)CommandCall cmd2 = new CommandCall(sys2myCommand2)

Ejecute los mandatos Se establece una conexioacuten cuando se ejecuta el primer mandato Como el segundo objeto mandato utiliza un objeto AS400 distinto se establece una segunda conexioacuten cuando se ejecuta el segundo mandatocmd1run()cmd2run()

364 IBM Toolbox para Java IBM Toolbox para Java

Ejemplo 3 en este ejemplo se crean un objeto CommandCall y un objeto IFSFileInputStream que utilizanun mismo objeto AS400 Dado que el objeto CommandCall y el objeto IFSFileInputStream empleandistintos servicios del servidor se crean dos conexiones

Cree un objeto AS400AS400 newConn1 = new AS400(mySystemmyCompanycom)

Cree un objeto de llamada a mandatoCommandCall cmd = new CommandCall(newConn1myCommand1)

Cree el objeto de archivo Por el hecho de crearlo el objeto AS400 se conecta al servicio de archivosIFSFileInputStream file = new IFSFileInputStream(newConn1myfile)

Ejecute el mandato Se establece una conexioacuten con el servicio de mandatos al ejecutarse el mandatocmdrun()

Ejemplo 4 en este ejemplo se utiliza un objeto AS400ConnectionPool para obtener una conexioacuten de IBMi Este ejemplo (como el ejemplo 3 anterior) no especifica ninguacuten servicio por lo que la conexioacuten con elservicio de mandatos se establece cuando se ejecuta el mandato

Cree una AS400ConnectionPoolAS400ConnectionPool testPool1 = new AS400ConnectionPool()

Cree una conexioacutenAS400 newConn1 = testPool1getConnection(myAS400 myUserID myPassword)

Cree un objeto de llamada a mandato que utilice el objeto AS400CommandCall cmd = new CommandCall(newConn1myCommand1)

Ejecute el mandato Se establece una conexioacuten con el servicio de mandatos al ejecutarse el mandatocmdrun()

Devuelva la conexioacuten a la agrupacioacutentestPool1returnConnectionToPool(newConn1)

Ejemplo 5en este ejemplo se utiliza AS400ConnectionPool para conectarse a un servicio concreto alsolicitar la conexioacuten de la agrupacioacuten Esto elimina el tiempo necesario para conectarse al servicio cuandose ejecuta el mandato (veacutease el ejemplo 4 anterior) Si la conexioacuten se devuelve a la agrupacioacuten lasiguiente llamada para obtener una conexioacuten puede devolver el mismo objeto de conexioacuten Esto significaque no es necesario ninguacuten tiempo de conexioacuten adicional ni de creacioacuten ni de uso

Cree una AS400ConnectionPoolAS400ConnectionPool testPool1 = new AS400ConnectionPool()

Cree una conexioacuten con el servicio AS400COMMAND (Emplee las constantes de nuacutemero de servicio definidas en la clase AS400 (FILE PRINT COMMAND DATAQUEUE etceacutetera))AS400 newConn1 = testPool1getConnection(myAS400 myUserID myPassword AS400COMMAND)

Cree un objeto de llamada a mandato que utilice el objeto AS400CommandCall cmd = new CommandCall(newConn1myCommand1)

Ejecute el mandato Ya se ha establecido una conexioacuten con el servicio de mandatoscmdrun()

Devuelva la conexioacuten a la agrupacioacutentestPool1returnConnectionToPool(newConn1)

Obtenga otra conexioacuten con el servicio de mandatos En este caso devolveraacute la misma conexioacuten que anteriormente con lo que se evita el tiempo de conexioacuten adicional tanto ahora como cuando se utiliza el servicio de mandatosAS400 newConn2 = testPool1getConnection(myAS400 myUserID myPassword AS400COMMAND)

IBM Toolbox para Java 365

Inicio y finalizacioacuten de las conexiones

El programa Java puede controlar cuaacutendo se inicia una conexioacuten y cuaacutendo se finaliza De formapredeterminada el inicio de una conexioacuten se lleva a cabo en el momento en que se necesita informacioacutendel servidor Para controlar exactamente cuaacutendo se establece la conexioacuten puede efectuar una llamada almeacutetodo connectService() en el objeto AS400 para preconectarse al servidor

Con un objeto AS400ConnectionPool puede crear una conexioacuten preconectada a un servicio sin efectuarninguna llamada al meacutetodo connectService() como se muestra en el Ejemplo 5 anterior

Los ejemplos que figuran a continuacioacuten muestran programas Java que se conectan al sistema y sedesconectan de eacutel

Ejemplo 1 este ejemplo muestra coacutemo se hace la preconexioacuten con el sistema Cree un objeto AS400AS400 system1 = new AS400(mySystemmyCompanycom)

Coneacutectese al servicio de mandatos Haacutegalo ahora en lugar de en el momento de enviar por primera vez los datos al servicio de mandatos Es una accioacuten opcional porque el objeto AS400 se conectaraacute cuando sea necesariosystem1connectService(AS400COMMAND)

Ejemplo 2 una vez iniciada una conexioacuten el programa Java es responsable de la desconexioacutenefectuaacutendola impliacutecitamente el objeto AS400 o expliacutecitamente el propio programa Java Un programaJava efectuacutea la desconexioacuten realizando una llamada al meacutetodo disconnectService() en el objeto AS400Para aumentar el rendimiento el programa Java deberaacute desconectarse uacutenicamente cuando hayaterminado de utilizar un servicio Si el programa Java se desconecta antes de haber terminado de utilizarun servicio el objeto AS400 se reconecta si es posible la reconexioacuten cuando se necesitan datos delservicio

La figura 4 muestra coacutemo la accioacuten de desconectar la conexioacuten correspondiente a la primera conexioacuten delobjeto de sistema de archivos integrado solo finaliza esa instancia individual de la conexioacuten del objetoAS400 no todas las conexiones de objeto de sistema de archivos integrado

Figura 4 se desconecta un objeto individual que utiliza su propio servicio de una instancia de unobjeto AS400

366 IBM Toolbox para Java IBM Toolbox para Java

Este ejemplo muestra coacutemo el programa Java desconecta una conexioacuten Cree un objeto AS400AS400 system1 = new AS400(mySystemmyCompanycom)

Utilice la llamada a mandato para enviar varios mandatos al servidor Debido a que no se ha llamado a connectService() el objeto AS400 se conecta automaacuteticamente al ejecutarse el primer mandato

Al terminar de enviar todos los mandatos desconecte la conexioacutensystem1disconnectService(AS400COMMAND)

Ejemplo 3 varios objetos que utilizan el mismo servicio y comparten el mismo objeto AS400 compartenuna conexioacuten La desconexioacuten finaliza la conexioacuten para todos los objetos que utilizan el mismo serviciode cada instancia de un objeto AS400 como se muestra en la figura 5

Figura 5 se desconectan todos los objetos que utilizan el mismo servicio de una instancia de un objetoAS400

IBM Toolbox para Java 367

Por ejemplo supongamos que dos objetos CommandCall utilizan el mismo objeto AS400 Cuando sellama a disconnectService() la conexioacuten finaliza para los dos objetos CommandCall Cuando se llama almeacutetodo run() para el segundo objeto CommandCall el objeto AS400 debe reconectarse al servicio

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree dos objetos llamada a mandatoCommandCall cmd1 = new CommandCall(sysmyCommand1)CommandCall cmd2 = new CommandCall(sysmyCommand2)

Ejecute el primer mandatocmd1run()

Desconeacutectese del servicio de mandatossysdisconnectService(AS400COMMAND)

Ejecute el segundo mandato El objeto AS400 debe volver a conectarse al servidorcmd2run()

Desconeacutectese del servicio de mandatos Este es el lugar correcto para desconectarsysdisconnectService(AS400COMMAND)

Ejemplo 4 no todas las clases de IBM Toolbox para Java se reconectan automaacuteticamente Algunasllamadas a meacutetodo en las clases del sistema de archivos integrado no se reconectan porque el archivopuede haber cambiado Mientras el archivo estaba desconectado alguacuten otro proceso puede habersuprimido el archivo o cambiado su contenido En este ejemplo hay dos objetos archivo que utilizan elmismo objeto AS400 Cuando se llama a disconnectService() la conexioacuten finaliza para los dos objetosarchivo El meacutetodo read() para el segundo objeto IFSFileInputStream falla porque ha dejado de tener unaconexioacuten con el servidor

368 IBM Toolbox para Java IBM Toolbox para Java

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree dos objetos archivo Se crea una conexioacuten con el servidor cuando se crea el primer objeto El segundo objeto utiliza la conexioacuten creada por el primer objetoIFSFileInputStream file1 = new IFSFileInputStream(sysfile1)IFSFileInputStream file2 = new IFSFileInputStream(sysfile2)

Lea en el primer archivo y despueacutes cieacuterreloint i1 = file1read()file1close()

Desconeacutectese del servicio de archivossysdisconnectService(AS400FILE)

Intente leer en el segundo archivo Este intento falla debido a que la conexioacuten con el servicio de archivos ha dejado de existir El programa deberiacutea haber desconectado maacutes tarde o hacer que el segundo archivo utilizase otro objeto AS400 (y asiacute el archivo tendriacutea su propia conexioacuten)int i2 = file2read()

Cierre el segundo archivofile2close()

Desconeacutectese del servicio de archivos Este es el lugar correcto para desconectarsysdisconnectService(AS400FILE)

Maacutequina virtual Java de IBM iLas clases de IBM Toolbox para Java se ejecutan en la maacutequina virtual Java (JVM) de IBM Developer Kitpara Java (IBM i)

En realidad las clases se ejecutan en cualquier plataforma que deacute soporte a las especificaciones Java 2Software Development Kit (J2SDK)

Para obtener maacutes informacioacuten acerca del soporte de IBM i para las distintas plataformas Java consulteSoporte para varios JDK

Comparacioacuten de la maacutequina virtual Java de IBM i y las clases de IBM Toolbox paraJavaSiempre dispone de al menos dos maneras de acceder a un recurso del servidor cuando el programa Javase ejecuta en IBM Developer Kit para Java maacutequina virtual Java (JVM) de IBM i)

Puede utilizar una de estas dos interfacesv Servicios integrados en Javav Una clase IBM Toolbox para Java

A la hora de decidir queacute interfaz debe utilizar tenga en cuenta estos factoresv Ubicacioacuten - El lugar de la ejecucioacuten del programa es el factor maacutes importante a la hora de decidir queacute

conjunto de interfaces se ha de utilizar El programandash iquestSolo se ejecuta en el clientendash iquestSolo se ejecuta en el servidorndash iquestSe ejecuta en el cliente y en el servidor pero el recurso es en los dos casos un recurso de IBM indash iquestSe ejecuta en una JVM de IBM i y accede a los recursos de otro servidor IBM indash iquestSe ejecuta en servidores de distinto tipo

IBM Toolbox para Java 369

Si el programa se ejecuta en el cliente y en el servidor (incluido el caso en que un servidor IBM i seacliente de un segundo servidor IBM i) y solo accede a recursos del IBM i puede ser mejor utilizar lasinterfaces de IBM Toolbox para JavaSi el programa debe acceder a datos existentes en servidores de muchos tipos puede ser mejor utilizarlas interfaces Java nativas

v Coherencia Portabilidad - La capacidad de ejecutar clases de IBM Toolbox para Java en el servidorIBM i significa que pueden utilizarse las mismas interfaces para los programas clientes y los programasservidores Cuando uacutenicamente se tiene que aprender coacutemo funciona una sola interfaz para losprogramas clientes y los programas servidores se puede ser maacutes productivoSin embargo escribir en interfaces de IBM Toolbox para Java hace que el programa sea menos portableentre servidoresSi el programa debe conectarse a un servidor IBM i ademaacutes de a otros servidores tal vez sea mejorutilizar los servicios integrados en Java

v Complejidad - La interfaz de IBM Toolbox para Java se ha construido especialmente para proporcionarun acceso faacutecil a un recurso de IBM i Con frecuencia el uso de la interfaz de IBM Toolbox para Javatiene como uacutenica alternativa la escritura de un programa que acceda al recurso y se comunique con eseprograma mediante la interfaz Java nativa (JNI)Debe decidir queacute es maacutes importante gozar de una mayor neutralidad Java y escribir un programa paraacceder al recurso o utilizar la interfaz de IBM Toolbox para Java que es menos portable

v Funciones - La interfaz de IBM Toolbox para Java suele proporcionar maacutes funciones que la interfaz deJava Por ejemplo la clase IFSFileOutputStream de IBM Toolbox para Java tiene maacutes funciones que laclase FileOutputStream de javaio No obstante la portabilidad entre servidores seraacute menor si se utilizala clase de IBM Toolbox para JavaDebe decidir si es maacutes importante la portabilidad o si prefiere beneficiarse de las funciones adicionales

v Recursos - Al ejecutarse en la JVM de IBM i muchas de las clases de IBM Toolbox para Java siguenefectuando peticiones mediante los servidores de host Por lo tanto hay un segundo trabajo (el trabajoservidor) que lleva a cabo la peticioacuten de acceder a un recursoEsta peticioacuten puede emplear maacutes recursos que una interfaz Java nativa que se ejecute bajo el trabajodel programa Java

v Servidor IBM i como cliente - Si el programa se ejecuta en un servidor IBM i y accede a los datosexistentes en un segundo servidor IBM i la mejor solucioacuten seriacutea utilizar las clases de IBM Toolbox paraJava Estas clases proporcionan un acceso faacutecil al recurso existente en el segundo servidor IBM iEjemplo de ello es el acceso a las colas de datos Las interfaces DataQueue de IBM Toolbox para Javaproporcionan un acceso faacutecil al recurso de cola de datos

Ejecutar las clases de IBM Toolbox para Java en la maacutequina virtual Java de IBM iA continuacioacuten figuran algunas consideraciones especiales que deben tenerse en cuenta al ejecutar lasclases de IBM Toolbox para Java en la maacutequina virtual Java (JVM) de IBM Developer Kit para Java (IBMi)

Llamada a mandato

Una llamada a un mandato se puede realizar de estas dos maneras comunesv La clase CommandCall de IBM Toolbox para Javav El meacutetodo javalangRuntimeexec

La clase CommandCall genera una lista de los mensajes que estaacuten disponibles para el programa Java unavez completado el mandato Mediante javalangRuntimeexec() la lista de mensajes no estaacute disponible

El meacutetodo javalangRuntimeexec es portable entre muchas plataformas de modo que si el programadebe acceder a archivos existentes en servidores de distintos tipos javalangRuntimeexec() es una mejorsolucioacuten

370 IBM Toolbox para Java IBM Toolbox para Java

Sistema de archivos integrado

Formas comunes de acceder a un archivo del sistema de archivos integrado de IBM iv Las clases IFSFile de IBM Toolbox para Javav Con las clases archivo que forman parte de javaio

Las clases del sistema de archivos integrado de IBM Toolbox para Java tienen la ventaja de queproporcionan maacutes funciones que las clases de javaio Las clases de IBM Toolbox para Java tambieacutenfuncionan en los applets y no necesitan un meacutetodo de redireccioacuten (como IBM i Access para Windows)para acceder al servidor desde una estacioacuten de trabajo

Las clases de javaio son portables entre muchas plataformas lo que es una ventaja Si el programa debeacceder a archivos existentes en servidores de distintos tipos javaio es una solucioacuten mejor

Si utiliza las clases de javaio en un cliente necesitaraacute un meacutetodo de redireccioacuten (como IBM i Access paraWindows) para acceder al sistema de archivos del servidor

JDBC

Estaacuten disponibles dos controladores JDBC suministrados por IBM para los programas que se ejecutan enla JVM de IBM iv El controlador JDBC de IBM Toolbox para Javav El controlador JDBC de IBM Developer Kit para Java

Es mejor utilizar el controlador JDBC de IBM Toolbox para Java cuando el programa se ejecuta en unentorno de clienteservidor

Es mejor utilizar el controlador JDBC de IBM Developer Kit para Java cuando el programa se ejecuta enel servidor

Si un mismo programa se ejecuta en la estacioacuten de trabajo y en el servidor debe cargar el controladorcorrecto mediante una propiedad del sistema en vez de codificar el nombre del controlador en elprograma

Llamada a programa

Una llamada a programa se puede realizar de estas dos maneras comunesv La clase ProgramCall de IBM Toolbox para Javav Mediante una llamada a JNI (Java Native Interface)

La clase ProgramCall de IBM Toolbox para Java tiene la ventaja de que puede efectuar llamadas acualquier programa del servidor

Mediante JNI tal vez no pueda efectuar una llamada al programa del servidor Una ventaja de JNI es queofrece maacutes portabilidad entre plataformas de servidor

Establecer el nombre del sistema el ID de usuario y la contrasentildea con un objetoAS400 en la maacutequina virtual Java de IBM iEl objeto AS400 admite valores especiales para el nombre del sistema el ID de usuario y la contrasentildeacuando el programa Java se ejecuta en la maacutequina virtual Java (JVM) de IBM Toolbox para Java (IBM i)

Cuando ejecute un programa en la JVM de IBM i tenga en cuenta algunos valores especiales y otrasconsideraciones

IBM Toolbox para Java 371

v La solicitud de ID de usuario y contrasentildea queda inhabilitada cuando el programa se ejecuta en elservidor Para obtener maacutes informacioacuten acerca de los valores de ID de usuario y contrasentildea en elentorno servidor veacutease Resumen de los valores de ID de usuario y contrasentildea en un objeto AS400

v Si no se ha establecido el nombre del sistema el ID de usuario o la contrasentildea en el objeto AS400 estese conecta al servidor actual mediante el ID de usuario y la contrasentildea del trabajo que inicioacute elprograma Java Al conectarse a una maacutequina cuyo release sea igual o posterior a v4r4 el objeto AS400puede extender la contrasentildea del usuario conectado al igual que el resto de los componentes de IBMToolbox para Java

v Como nombre del sistema se puede utilizar el valor especial localhost En este caso el objeto AS400 seconecta al servidor actual

v El valor especial current puede utilizarse como ID de usuario o contrasentildea en el objeto AS400 Eneste caso se utiliza el ID de usuario o la contrasentildea (o ambos) del trabajo que inicioacute el programa Java

v El valor especial current puede utilizarse como ID de usuario o contrasentildea en el objeto AS400cuando el programa Java se ejecuta en la JVM de IBM i de un servidor y el programa accede a losrecursos existentes en otro servidor IBM i En este caso al conectarse al sistema destino se utiliza el IDde usuario y la contrasentildea del trabajo que inicioacute el programa Java en el sistema origen

Ejemplos

Los ejemplos siguientes muestran coacutemo se utiliza el objeto AS400 con la JVM de IBM i

Ejemplo crear un objeto AS400 cuando la JVM de IBM i ejecuta un programa Java

Cuando un programa Java se ejecuta en la JVM de IBM i el programa no tiene que suministrar unnombre de sistema un ID de usuario o una contrasentildea

Nota es preciso suministrar una contrasentildea cuando se utiliza el acceso a nivel de registro

Si no se suministran estos valores el objeto AS400 se conecta al sistema local utilizando el ID de usuarioy la contrasentildea del trabajo que inicioacute el programa Java

Cuando el programa se ejecuta en la JVM de IBM i establecer el nombre del sistema en localhostequivale a no establecer el nombre del sistema El siguiente ejemplo muestra coacutemo conectarse al servidoractual

Cree dos objetos AS400 Si el programa Java se ejecuta en la JVM de IBM i el comportamiento de ambos objetos es el mismo Se conectaraacuten al servidor actual con el ID de usuario y la contrasentildea del trabajo que inicioacute el programa JavaAS400 sys = new AS400()AS400 sys2 = new AS400(localhost)

Ejemplo conectarse al servidor actual con un ID de usuario y una contrasentildea diferentes de los delprograma que ha iniciado el trabajo El programa Java puede establecer un ID de usuario y unacontrasentildea incluso cuando se ejecuta en la JVM de IBM i Estos valores alteran temporalmente el ID deusuario y la contrasentildea del trabajo que inicioacute el programa Java

En el siguiente ejemplo el programa Java se conecta al servidor actual pero utiliza un ID de usuario yuna contrasentildea distintos de los del trabajo que inicioacute el programa Java

Cree un objeto AS400 Coneacutectese al servidor actual pero no utilice el ID de usuario y la contrasentildea del trabajo que inicioacute el programa Se emplean los valores suministradosAS400 sys = new AS400(localhost USR2 PSWRD2)

Ejemplo conectarse a otro servidor con el ID de usuario y la contrasentildea del trabajo que ha iniciado elprograma Java

372 IBM Toolbox para Java IBM Toolbox para Java

Un programa Java que se ejecuta en un servidor puede conectarse a otros sistemas y utilizar sus recursos

Si se indica current para el ID de usuario y la contrasentildea cuando el programa Java se conecte alservidor destino se utilizaraacute el ID de usuario y la contrasentildea del trabajo que inicioacute el programa Java

En el ejemplo que figura a continuacioacuten el programa Java se ejecuta en un servidor pero utiliza losrecursos de otro servidor Cuando el programa se conecta al segundo servidor se utiliza el ID de usuarioy la contrasentildea del trabajo que inicioacute el programa Java

Cree un objeto AS400 Este programa se ejecutaraacute en un servidor pero se conectaraacute a un segundo servidor (que se llama target) Como se utiliza current para el ID de usuario y la contrasentildea se emplearaacuten el ID de usuario y la contrasentildea del trabajo que inicioacute el programa al conectarse al segundo servidorAS400 target = new AS400(target current current)

Resumen de los valores de ID de usuario y contrasentildea en un objeto AS400

La tabla siguiente muestra un resumen de coacutemo un programa Java que se ejecuta en un servidor manejalos valores de ID de usuario y contrasentildea en un objeto AS400 en comparacioacuten con coacutemo los maneja unprograma Java que se ejecuta en un cliente

Valores en el objeto AS400Programa Java que se ejecuta en unservidor

Programa Java que se ejecuta en uncliente

Nombre del sistema ID de usuario ycontrasentildea no establecidos

Coneacutectese al servidor actualutilizando el ID de usuario y lacontrasentildea del trabajo que inicioacute elprograma

Se solicita el nombre del sistema elID de usuario y la contrasentildea

Nombre del sistema = localhost

Coneacutectese al servidor actualutilizando el ID de usuario y lacontrasentildea del trabajo que inicioacute elprograma

Error localhost no es vaacutelido cuandoel programa Java se estaacute ejecutandoen un cliente

Nombre del sistema = localhost ID deusuario = current

Nombre del sistema = localhost ID deusuario = current ID de contrasentildea =current

Nombre del sistema = sys Coneacutectese al servidor sys utilizandoel ID de usuario y la contrasentildea deltrabajo que inicioacute el programa syspuede ser el servidor actual u otroservidor

Se solicita el ID de usuario y lacontrasentildea

Nombre del sistema = localhost ID deusuario = UID ID de contrasentildea =PWD

Coneacutectese al servidor actualutilizando el ID de usuario y lacontrasentildea especificados por elprograma Java en vez del ID deusuario y la contrasentildea del trabajoque inicioacute el programa

Error localhost no es vaacutelido cuandoel programa Java no se estaacuteejecutando en un cliente

Agrupacioacuten de almacenamiento auxiliar (ASP) independienteUna agrupacioacuten de almacenamiento auxiliar (ASP) independiente es un conjunto de unidades de discosque puede activar o desactivar con independencia del resto del almacenamiento de un sistema

Las ASP independientes pueden contener cualquiera de los elementos siguientesv Uno o varios sistemas de archivos definidos por el usuariov Una o varias bibliotecas externas

IBM Toolbox para Java 373

Cada ASP independiente contiene toda la informacioacuten del sistema necesaria asociada a los datos queposee De este modo mientras el sistema estaacute activo puede desactivar la ASP independiente activarla oconmutar entre sistemas

Para obtener maacutes informacioacuten consulte la informacioacuten acerca de las ASP independientes y las ASP deusuario

Puede emplear la propiedad JDBC database name o el meacutetodo setDatabaseName() de la claseAS400JDBCDataSource para especificar la ASP a la que desea conectarse

Todas las demaacutes clases de IBM Toolbox para Java (IFSFile Print DataQueues etc) utilizan la ASPindependiente especificada por la descripcioacuten de trabajo del perfil de usuario que se conecta al servidor

ExcepcionesLas clases de acceso de IBM Toolbox para Java lanzan excepciones cuando se producen errores dedispositivo limitaciones fiacutesicas errores de programacioacuten o errores de entrada de usuario Las clases deexcepcioacuten se basan en el tipo de error que se produce en vez de basarse en la ubicacioacuten origen del error

La mayor parte de las excepciones contiene la informacioacuten siguientev Tipo de error El objeto de excepcioacuten lanzado indica queacute tipo de error se ha producido Los errores del

mismo tipo se agrupan en una clase de excepcioacutenv Detalles del error La excepcioacuten contiene un coacutedigo de retorno para identificar con maacutes precisioacuten la

causa del error producido Los valores del coacutedigo de retorno son constantes dentro de la clase deexcepcioacuten

v Texto del error La excepcioacuten contiene una serie de caracteres descriptiva del error que se haproducido La serie se traduce al idioma del entorno local de la maacutequina virtual Java del cliente

Ejemplo capturar una excepcioacuten lanzada

El siguiente ejemplo muestra coacutemo capturar una excepcioacuten lanzada recuperar el coacutedigo de retorno yvisualizar el texto de la excepcioacuten

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Todo el trabajo de configuracioacuten para suprimir un archivo en el servidor mediante la clase IFSFile ya se ha terminado Ahora intente suprimir el archivotry

aFiledelete()

La supresioacuten ha falladocatch (ExtendedIOException e)

Visualice la serie traducida que indica la razoacuten por la que ha fallado la supresioacutenSystemoutprintln(e)

Obtenga el coacutedigo de retorno de la excepcioacuten y visualice informacioacuten adicional basada en el coacutedigo de retornoint rc = egetReturnCode()

switch (rc)

case ExtendedIOExceptionFILE_IN_USESystemoutprintln(Supresioacuten anoacutemala archivo en uso )break

374 IBM Toolbox para Java IBM Toolbox para Java

case ExtendedIOExceptionPATH_NOT_FOUNDSystemoutprintln(Supresioacuten anoacutemala viacutea no encontrada )break

Para cada error especiacutefico del que desea efectuar un seguimiento

defaultSystemoutprintln(Supresioacuten anoacutemala rc = )Systemoutprintln(rc)

Clase TraceLa clase Trace permite al programa Java anotar puntos de rastreo y mensajes de diagnoacutestico Estainformacioacuten ayuda a reproducir y a diagnosticar problemas

Nota tambieacuten puede establecer el rastreo mediante las propiedades de rastreo del sistema

La clase Trace anota las siguientes categoriacuteas de informacioacuten

Categoriacutea de informacioacuten Descripcioacuten

Conversioacuten Anota las conversiones de juego de caracteres entre laspaacuteginas de coacutedigos y Unicode Solo utilizan estacategoriacutea las clases de IBM Toolbox para Java

Corriente de datos Anota los datos que fluyen entre el sistema y elprograma Java Solo utilizan esta categoriacutea las clases deIBM Toolbox para Java

Diagnoacutestico Anota informacioacuten sobre el estado

Error Anota errores adicionales que ocasionan una excepcioacuten

Informacioacuten Rastrea el flujo a traveacutes de un programa

PCML Esta categoriacutea se utiliza para determinar coacutemo interpretaPCML los datos que se enviacutean al servidor y que sereciben del mismo

Proxy Las clases de IBM Toolbox para Java utilizan estacategoriacutea para anotar el flujo de datos entre el cliente y elservidor proxy

Aviso Anota informacioacuten acerca de los errores de los que elprograma ha podido recuperarse

Total Esta categoriacutea permite habilitar o inhabilitar el rastreopara todas las categoriacuteas anteriores a la vez Lainformacioacuten de rastreo no se puede anotar directamenteen esta categoriacutea

Las clases de IBM Toolbox para Java tambieacuten utilizan las categoriacuteas de rastreo Cuando un programa Javahabilita las anotaciones la informacioacuten de IBM Toolbox para Java se incluye junto con la informacioacutenregistrada por la aplicacioacuten

El rastreo se puede habilitar para una sola categoriacutea o para un conjunto de categoriacuteas Una vezseleccionadas las categoriacuteas utilice el meacutetodo setTraceOn para activar y desactivar el rastreo Para escribirlos datos en las anotaciones se utiliza el meacutetodo log

Puede enviar los datos de rastreo de distintos componentes a anotaciones separadas Los datos derastreo de forma predeterminada se escriben en las anotaciones predeterminadas Utilice el rastreo de

IBM Toolbox para Java 375

componentes para escribir datos de rastreo especiacuteficos de la aplicacioacuten en unas anotaciones distintas o enla salida estaacutendar El rastreo de componentes permite separar faacutecilmente los datos de rastreo de unaaplicacioacuten especiacutefica de los demaacutes datos

Una cantidad excesiva de anotaciones puede afectar al rendimiento Utilice el meacutetodo isTraceOn paraconsultar el estado actual del rastreo El programa Java puede emplear este meacutetodo para determinar siconstruye el registro de rastreo antes de llamar al meacutetodo log Llamar al meacutetodo log cuando el rastreoestaacute desactivado no es un error pero se invierte maacutes tiempo

El valor predeterminado es escribir informacioacuten de anotaciones en la salida estaacutendar Para redirigir lasanotaciones a un archivo llame al meacutetodo setFileName() desde la aplicacioacuten Java En general esto solofunciona para las aplicaciones Java porque la mayoriacutea de los navegadores no dan acceso a los appletspara escribir en el sistema de archivos local

Las anotaciones estaacuten desactivadas de forma predeterminada Los programas Java proporcionan alusuario un procedimiento que le permite activar las anotaciones para que le resulte faacutecil habilitarlas Porejemplo la aplicacioacuten puede realizar un anaacutelisis para obtener un paraacutemetro de liacutenea de mandatos queindique queacute categoriacutea de datos se anota El usuario puede establecer este paraacutemetro cuando se necesiteinformacioacuten de anotaciones

Ejemplos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase Trace

Ejemplo de coacutemo se utiliza setTraceOn() y de la escritura de datos en unas anotaciones mediante elmeacutetodo log

Habilite las anotaciones de diagnoacutestico informacioacuten y avisoTracesetTraceDiagnosticOn(true)TracesetTraceInformationOn(true)TracesetTraceWarningOn(true)

Active el rastreoTracesetTraceOn(true)

En este punto del programa Java escriba en las anotacionesTracelog(TraceINFORMATION Se acaba de entrar en la clase xxx meacutetodo xxx)

Desactive el rastreoTracesetTraceOn(false)

Ejemplo coacutemo se utiliza Trace

En el siguiente coacutedigo el meacutetodo 2 es la manera preferible de utilizar el rastreo Meacutetodo 1 - construya un registro de rastreo y luego llame al meacutetodo log y deje que la clase de rastreo determine si los datos deben anotarse Este meacutetodo funcionaraacute pero seraacute maacutes lento que el coacutedigo siguienteString traceData = new String(Se acaba de entrar en la clase xxx datos = )traceData = traceData + data + estado = + stateTracelog(TraceINFORMATION traceData)

Meacutetodo 2 - compruebe el estado de las anotaciones antes de incorporar la informacioacuten a las anotaciones Este meacutetodo es maacutes raacutepido cuando el rastreo no estaacute activoif (TraceisTraceOn() ampamp TraceisTraceInformationOn())

376 IBM Toolbox para Java IBM Toolbox para Java

String traceData = new String(se acaba de entrar en la clase xxx datos = )traceData = traceData + data + estado = + stateTracelog(TraceINFORMATION traceData)

Ejemplo coacutemo se utiliza el rastreo de componentes Cree una serie de componente Es maacutes eficaz crear un objeto que muchos literales StringString myComponent1 = commyCompanyxyzComponentString myComponent2 = commyCompanyabcComponent

Enviacutee los datos de rastreo de IBM Toolbox para Java y los de componente a archivos distintos El rastreo contendraacute toda la informacioacuten de rastreo mientras que cada archivo de anotaciones de componente solo contendraacute la informacioacuten de rastreo especiacutefica de ese componente Si no se especifica un archivo de rastreo todos los datos de rastreo iraacuten a la salida estaacutendar con el componente especificado frente a cada uno de los mensajes de rastreo

TracesetFileName(cbitbucket) TracesetFileName(myComponent1 cComponent1log) TracesetFileName(myComponent2 cComponent2log)

TracesetTraceOn(true) Active el rastreoTracesetTraceInformationOn(true) Habilite los mensajes informativos

Anote los datos de rastreo especiacuteficos de componente o los generales de IBM Toolbox para Java

TracesetFileName(cbitbucket)TracesetFileName(myComponent1 cComponent1log)

Informacioacuten relacionadaJavadoc Trace

Optimizacioacuten de IBM iExisten dos versiones del software de IBM Toolbox para Java una que se optimiza cuando se ejecuta enla JVM de IBM i y otra que se ejecuta de la misma informa independientemente de doacutende se ejecute IBMToolbox para Java

El comportamiento de inicio de sesioacuten y el rendimiento mejoran cuando se utiliza la versioacuten optimizadadel software de IBM Toolbox para Java se ejecuta en la JVM de IBM i y la conexioacuten se establece con elmismo servidor

Habilitar la optimizacioacuten

IBM Toolbox para Java se suministra como parte del programa bajo licencia 5770-SS1 (opcioacuten 3) en dosdirectoriosv QIBMProdDatahttppublicjt400lib contiene la versioacuten de IBM Toolbox para Java que no incluye

las optimizaciones de IBM i Utilice estos archivos si desea obtener un comportamiento coherente conla ejecucioacuten de IBM Toolbox para Java en un cliente

v QIBMProdDataOS400jt400lib contiene la versioacuten de IBM Toolbox para Java que incluye lasoptimizaciones de IBM i cuando se ejecuta en la JVM de IBM i

Nota a partir de IBM i 71 el directorio QIBMProdDatahttppublicjt400 es realmente un enlacesimboacutelico con QIBMProdDataOS400jt400 El enlace QIBMProdDatahttppublicjt400 se conservapara mantener la compatibilidad con las versiones anteriores de IBM i

Para obtener maacutes informacioacuten consulte la nota 1 en la informacioacuten acerca de los Archivos JAR

IBM Toolbox para Java 377

Consideraciones sobre el inicio de sesioacuten

La versioacuten de IBM Toolbox para Java que contiene optimizaciones antildeade opciones adicionales parasuministrar la informacioacuten de nombre del servidor (sistema) ID de usuario y contrasentildea a IBM Toolboxpara Java

Al acceder a un recurso de IBM i las clases de IBM Toolbox para Java deben tener un nombre delsistema un ID de usuario y una contrasentildeav Al ejecutarse en un cliente el programa Java es el que proporciona el nombre del sistema el ID de

usuario y la contrasentildea o bien IBM Toolbox para Java recupera estos valores del usuario mediante undiaacutelogo de inicio de sesioacuten

v Al ejecutarse en la maacutequina virtual Java de IBM i IBM Toolbox para Java tiene una opcioacuten adicionalPuede enviar peticiones al servidor actual (local) utilizando el ID de usuario y la contrasentildea del trabajoque inicioacute el programa Java

Con la versioacuten de IBM Toolbox para Java que contiene optimizaciones tambieacuten se puede utilizar el ID deusuario y la contrasentildea del trabajo actual cuando un programa Java que se ejecuta en un servidor IBM iaccede a los recursos existentes en otro servidor IBM i En este caso el programa Java establece el nombredel sistema y luego utiliza el valor especial current para el ID de usuario y la contrasentildea

El programa Java solo puede establecer la contrasentildea en current si se utiliza V4R4 o posterior para elacceso a nivel de registro En caso contrario cuando se utiliza el acceso a nivel de registro localhost esvaacutelido para el nombre del sistema y current es vaacutelido para el ID de usuario sin embargo el programaJava debe suministrar la contrasentildea

Un programa Java establece los valores de nombre del sistema ID de usuario y contrasentildea en el objetoAS400

Para utilizar el ID de usuario y la contrasentildea del trabajo el programa Java puede usar current como IDde usuario y contrasentildea o bien puede usar el constructor que no tiene los paraacutemetros de ID de usuario ycontrasentildea

Para utilizar el servidor actual el programa Java puede utilizar localhost como nombre del sistema obien emplear el constructor predeterminado Es decir

AS400 system = new AS400()

equivale aAS400 system = new AS400(localhost current current)

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo iniciar la sesioacuten en un servidor mediante las clasesoptimizadas

Ejemplo iniciar la sesioacuten cuando se utilizan distintos constructores de AS400

En el siguiente ejemplo se crean dos objetos AS400 El comportamiento de los dos objetos es ideacutentico losdos ejecutan un mandato en el servidor actual utilizando el ID de usuario y la contrasentildea del trabajoUno de los objetos emplea el valor especial para el ID de usuario y la contrasentildea mientras que el otroemplea el constructor predeterminado y no establece el ID de usuario ni la contrasentildea

Cree un objeto AS400 Debido a que se utiliza el constructor predeterminado y el nombre

del sistema el ID de usuario y la contrasentildea no se establecen en ninguacuten momento el objeto AS400 enviacutea peticiones al servidor local usando el ID de usuario y la contrasentildea del trabajo Si este programa se

378 IBM Toolbox para Java IBM Toolbox para Java

ejecutase en un cliente se pediriacutea al usuario el nombre del sistema el ID de usuario y la contrasentildeaAS400 sys1 = new AS400()

Cree un objeto AS400 Este objeto enviacutea peticiones al sistema local usando el ID de usuario y la contrasentildea del trabajo Este objeto no funcionaraacute en un

clienteAS400 sys2 = new AS400(localhost current current)

Cree dos objetos llamada a mandato que utilizan los objetos AS400CommandCall cmd1 = new CommandCall(sys1myCommand1)CommandCall cmd2 = new CommandCall(sys2myCommand2)

Ejecute los mandatoscmd1run()cmd2run()

Ejemplo iniciar la sesioacuten con el ID de usuario y la contrasentildea del trabajo actual

En el siguiente ejemplo se crea un objeto AS400 que representa un segundo servidor IBM i Dado que seutiliza el valor current en el segundo servidor (destino) se utiliza el ID de usuario y la contrasentildea deldel servidor que ejecuta el programa Java

Cree un objeto AS400 Este objeto enviacutea peticiones a un segundo sistema usando el ID de usuario y la contrasentildea del trabajo del servidor actual (current)AS400 sys = new AS400(mySystemmyCompanycom current current)

Cree un objeto de llamada a mandato que ejecute un mandato en el servidor destinoCommandCall cmd = new CommandCall(sysmyCommand1)

Ejecute el mandatocmdrun()

Mejoras en el rendimientoCon las clases adicionales proporcionadas por IBM i mejora el rendimiento de los programas Java que seejecutan en la maacutequina virtual Java de IBM i En algunos casos el rendimiento mejora porque se utilizanmenos funciones de comunicacioacuten y en otros casos porque se utiliza una API en vez de una llamada alprograma servidor

Tiempo de bajada maacutes corto

Para bajar el nuacutemero miacutenimo de archivos de clase de IBM Toolbox para Java utilice el servidor proxy conla herramienta AS400ToolboxJarMaker

Comunicacioacuten maacutes raacutepida

Para todas las funciones de IBM Toolbox para Java salvo para JDBC y para el acceso al sistema dearchivos integrado los programas Java que se ejecutan en la maacutequina virtual Java de IBM i tendraacuten unaejecucioacuten maacutes raacutepida Ello se debe a que se utiliza menos coacutedigo de comunicacioacuten cuando esta se efectuacuteaentre el programa Java y el programa servidor en el servidor que realiza la peticioacuten

JDBC y el acceso al sistema de archivos integrado no se han optimizado porque ya existen servicios queagilizan la ejecucioacuten de estas funciones En caso de ejecutarse en el servidor IBM i se puede utilizar elcontrolador JDBC de IBM i en vez del controlador JDBC que se suministra junto con IBM Toolbox paraJava Para acceder a los archivos existentes en el servidor puede utilizarse javaio en vez de las clases deacceso al sistema de archivos integrado que se suministran junto con IBM Toolbox para Java

IBM Toolbox para Java 379

Llamada directa a las API de IBM i

La mejora en el rendimiento de las siguientes clases de IBM Toolbox para Java se debe a que estas clasesllaman directamente a las API de IBM i en vez de llamar a un programa servidor para llevar a cabo lapeticioacutenv Clases AS400Certificatev CommandCallv DataQueuev ProgramCallv Clases de acceso a base de datos a nivel de registrov ServiceProgramCallv UserSpace

La llamada directa a las API solo se efectuacutea si el ID de usuario y la contrasentildea coinciden con el ID deusuario y la contrasentildea del trabajo que ejecuta el programa Java Para obtener una mejora en elrendimiento el ID de usuario y la contrasentildea deben coincidir con los del trabajo que inicia el programaJava Para obtener unos resultados oacuteptimos utilice localhost para el nombre del sistema current parael ID de usuario y current para la contrasentildea

Cambios en la correlacioacuten de puertos

Se han realizado cambios en el sistema de correlacioacuten de puertos de modo que se ha agilizado el accesoa un puerto Antes de estos cambios las peticiones de puerto se enviaban al correlacionador de puertosDesde este el servidor determinaba queacute puerto estaba disponible y devolviacutea dicho puerto al usuario paraque lo aceptase Ahora puede elegir entre indicar al servidor cuaacutel es el puerto que se ha de utilizar oespecificar que se tiene que usar el puerto predeterminado Esta opcioacuten evita que el servidor tenga queinvertir tiempo en averiguar queacute puerto se ha de emplear Utilice el mandato WRKSRVTBLE para ver ocambiar la lista de puertos del servidor

Para mejorar la correlacioacuten de puertos se han antildeadido varios meacutetodos a la clase AS400v getServicePortv setServicePortv setServicePortsToDefault

Cambios en las series especiacuteficas de idiomas

Ahora los archivos de series especiacuteficas de idiomas se suministran dentro del programa IBM Toolboxpara Java como archivos de clase en vez de como archivos de propiedades El servidor encuentra losmensajes maacutes deprisa en los archivos de clase que en los archivos de propiedades Ahora el meacutetodoResourceBundlegetString() se ejecuta maacutes raacutepidamente porque los archivos estaacuten almacenados en elprimer lugar en el que el sistema realiza la buacutesqueda Otra ventaja de cambiar a archivos de clase es queel servidor puede localizar con mayor rapidez la versioacuten traducida de una serie

Conversores

Dos clases permiten una conversioacuten maacutes raacutepida y eficaz entre Java y el sistemav Conversor binario realiza una conversioacuten entre las matrices de bytes Java y los tipos de datos simples

Javav Conversor de caracteres realiza una conversioacuten entre los objetos de tipo serie Java y las paacuteginas de

coacutedigos de IBM i

380 IBM Toolbox para Java IBM Toolbox para Java

Ademaacutes ahora IBM Toolbox para Java incorpora sus propias tablas de conversioacuten para maacutes de 100CCSID de uso habitual Anteriormente IBM Toolbox para Java remitiacutea a Java casi toda la conversioacuten detexto Si Java no teniacutea la tabla de conversioacuten correcta IBM Toolbox para Java bajaba la tabla deconversioacuten del servidor

IBM Toolbox para Java lleva a cabo toda la conversioacuten de texto para cualquier CCSID que conozcaCuando encuentra un CCSID desconocido intenta dejar que Java maneje la conversioacuten En ninguacutenmomento IBM Toolbox para Java intenta bajar una tabla de conversioacuten del servidor Este meacutetodo reducede forma notable el tiempo que tarda una aplicacioacuten de IBM Toolbox para Java en llevar a cabo laconversioacuten de texto No es necesaria ninguna accioacuten del usuario para utilizar esta nueva conversioacuten detexto todas las mejoras en el rendimiento se producen en las tablas conversoras subyacentesInformacioacuten relacionadaJavadoc AS400Javadoc BinaryConverterJavadoc CharacterConverter

Clases de instalacioacuten y actualizacioacuten en clientePara la mayoriacutea de objetivos de instalacioacuten y actualizacioacuten se puede hacer referencia a las clases de IBMToolbox para Java en la ubicacioacuten que tienen en el sistema de archivos integrado en el servidor

Dado que se aplican arreglos temporales de programa (PTF) a esta ubicacioacuten los programas Java queacceden directamente a estas clases en el servidor reciben estas actualizaciones de modo automaacutetico Peroel acceso a las clases desde el servidor no siempre funciona en concreto en las situaciones siguientesv Si el enlace de comunicaciones que conecta el servidor y el cliente es de baja velocidad el rendimiento

que supone cargar las clases desde el servidor puede ser inaceptablev Si las aplicaciones Java utilizan la variable de entorno CLASSPATH para acceder a las clases que hay

en el sistema de archivos del cliente es necesario que IBM i Access para Windows redirija al servidorlas llamadas al sistema de archivos Tal vez no sea posible que IBM i Access para Windows resida en elcliente

En estos casos instalar las clases en el cliente es una solucioacuten mejor

AS400ToolboxJarMakerMientras que el formato de archivo JAR se disentildeoacute para agilizar la bajada de los archivos de programaJava AS400ToolboxJarMaker genera una carga auacuten maacutes raacutepida de un archivo JAR de IBM Toolbox paraJava mediante su capacidad de crear un archivo JAR maacutes pequentildeo a partir de uno maacutes grande

Ademaacutes la clase AS400ToolboxJarMaker puede descomprimir un archivo JAR para que asiacute sea posibleacceder a los archivos de contenido individuales para uso baacutesico

Flexibilidad de AS400ToolboxJarMaker

Todas las funciones de AS400ToolboxJarMaker se llevan a cabo con la clase JarMaker y la subclaseAS400ToolboxJarMakerv La herramienta JarMaker geneacuterica funciona en cualquier archivo JAR o Zip subdivide un archivo JAR

o reduce el tamantildeo de un archivo JAR eliminando las clases que no se usanv AS400ToolboxJarMaker personaliza y ampliacutea las funciones de JarMaker para facilitar su uso con los

archivos JAR de IBM Toolbox para Java

En funcioacuten de sus necesidades puede invocar los meacutetodos de AS400ToolboxJarMaker desde dentro delprograma Java o desde una liacutenea de mandatos Para efectuar una llamada a AS400ToolboxJarMaker desdela liacutenea de mandatos utilice la sintaxis que se indica a continuacioacuten

java utilitiesJarMaker [opciones]

IBM Toolbox para Java 381

dondev opciones = una o varias de las opciones disponibles

Si desea obtener un conjunto completo de las opciones disponibles para ejecutarse en una solicitud deliacutenea de mandatos consulte lo siguiente en el Javadocv Opciones para la clase base JarMakerv Opciones ampliadas para la subclase AS400ToolboxJarMaker

Utilizacioacuten de AS400ToolboxJarMaker

Puede emplear AS400ToolboxJarMaker para trabajar con los archivos JAR de varios modosv Descomprimir un archivo empaquetado dentro de un archivo JARv Subdividir un archivo JAR grande en varios archivos JAR maacutes pequentildeosv Excluir los archivos de IBM Toolbox para Java que la aplicacioacuten no necesita ejecutar

Descompresioacuten de un archivo JAR

Suponga que desea descomprimir un uacutenico archivo empaquetado dentro de un archivo JARAS400ToolboxJarMaker le permite expandir el archivo en uno de estos directoriosv Directorio actual extract(jarFile)v Otro directorio extract(jarFile outputDirectory)

Por ejemplo el coacutedigo siguiente hace que del archivo jt400jar se extraigan AS400class y todas sus clasesdependientes

java utilitiesAS400ToolboxJarMaker -source jt400jar-extract outputDir-requiredFile comibmas400accessAS400class

Subdivisioacuten de un archivo JAR individual en varios archivos JAR maacutes pequentildeos

Suponga que desea subdividir un archivo JAR de gran tamantildeo en archivos JAR maacutes pequentildeos enfuncioacuten de su preferencia para el tamantildeo maacuteximo de archivo JAR AS400ToolboxJarMaker de acuerdocon ello le proporciona la funcioacuten split(jarFile splitSize)

En el coacutedigo que figura a continuacioacuten jt400jar se subdivide en una serie de archivos JAR maacutes pequentildeosninguno de los cuales tiene maacutes de 300 KB

java utilitiesAS400ToolboxJarMaker -split 300

Eliminacioacuten de archivos no utilizados de un archivo JAR

Con AS400ToolboxJarMaker puede excluir todos los archivos de IBM Toolbox para Java que su aplicacioacutenno necesite para ello basta con que seleccione uacutenicamente los componentes idiomas y CCSID de IBMToolbox para Java necesarios para que se ejecute la aplicacioacuten AS400ToolboxJarMaker tambieacuten leproporciona la opcioacuten de incluir o excluir los archivos de JavaBean asociados a los componentes que haelegido

Por ejemplo el mandato siguiente crea un archivo JAR que contiene uacutenicamente las clases de IBMToolbox para Java necesarias para que funcionen los componentes CommandCall y ProgramCall de IBMToolbox para Java

java utilitiesAS400ToolboxJarMaker -component CommandCallProgramCall

Ademaacutes si no es necesario hacer que las series de texto se conviertan entre Unicode y las tablas deconversioacuten del juego de caracteres de doble byte (DBCS) se puede crear un archivo JAR cuyo tamantildeotenga 400 KB menos tan solo con omitir las tablas de conversioacuten innecesarias con la opcioacuten -ccsid

382 IBM Toolbox para Java IBM Toolbox para Java

java utilitiesAS400ToolboxJarMaker -component CommandCallProgramCall -ccsid 61952

Nota las clases conversoras no se incluyen junto con las clases de llamada a programa Al incluir lasclases de llamada a programa tambieacuten deberaacute incluir expliacutecitamente las clases conversoras utilizadas porel programa por medio de la opcioacuten -ccsid

Javadoc JarMakerJavadoc AS400ToolboxJarMaker

Soporte de idiomas nacionales para JavaJava da soporte a un conjunto de idiomas nacionales pero es un subconjunto de los idiomas soportadospor el servidor

Cuando se produce una discrepancia entre los idiomas por ejemplo cuando se trabaja en una estacioacuten detrabajo local que utiliza un idioma no soportado por Java el programa bajo licencia IBM Toolbox paraJava puede emitir algunos mensajes de error en Ingleacutes

Servicio y soporte para IBM Toolbox para JavaPara obtener servicio y soporte puede utilizar los recursos siguientes

Informacioacuten acerca de la resolucioacuten de problemas relacionados IBM Toolbox para JavaUtilice esta informacioacuten a modo de ayuda para la resolucioacuten de los problemas que surjan al utilizarIBM Toolbox para Java

Foro de JTOpenIBM Toolbox para Java Uacutenase a la comunidad de programadores de Java queutilizan IBM Toolbox para Java Este foro es un meacutetodo eficaz de obtener ayuda y recomendacionesde otros programadores de Java y en ocasiones de los propios desarrolladores de IBM Toolbox paraJava

Soporte de servidor Utilice el sitio Web de soporte de servidor de IBM para obtenerinformacioacuten sobre las herramientas y los recursos que le ayudaraacuten a perfeccionar la planificacioacuten yel soporte teacutecnico del sistema

Soporte de software Utilice el sitio Web de servicios de soporte de software de IBM paraobtener informacioacuten sobre la amplia gama de servicios de soporte de software que ofrece IBM

Los servicios de soporte para IBM Toolbox para Java se proporcionan bajo los teacuterminos y condicioneshabituales en los productos de software Los servicios de soporte incluyen servicios de programa soportepor conversacioacuten y servicios de consulta Poacutengase en contacto con el representante local de IBM paraobtener maacutes informacioacuten

Los servicios de programa y el soporte por conversacioacuten permiten resolver defectos de programa de IBMToolbox para Java mientras que los servicios de consulta permiten resolver problemas de programacioacutende aplicaciones y de depuracioacuten

Los servicios de consulta admiten llamadas de interfaz de programas de aplicacioacuten (API) de IBM Toolboxpara Java a menos quev Se trate claramente de un defecto de la API de Java defecto que debe demostrarse mediante su

reproduccioacuten en un programa relativamente simplev Se trate de una consulta en que se solicitan aclaraciones de la documentacioacutenv Se trate de una consulta acerca de la ubicacioacuten de ejemplos o de documentacioacuten

IBM Toolbox para Java 383

Los servicios de consulta admiten toda clase de ayuda para la programacioacuten incluidos los ejemplos deprograma proporcionados en el programa bajo licencia IBM Toolbox para Java En Internet en la paacutegina

de presentacioacuten de IBM i puede encontrar ejemplos adicionales sin soporte

Junto con el producto de programa bajo licencia IBM Toolbox para Java se proporciona informacioacuten deresolucioacuten de problemas Si cree que hay un defecto potencial en la API de IBM Toolbox para Java senecesitaraacute un programa simple que demuestre el error

Ejemplos de coacutedigoEn la lista siguiente se proporcionan enlaces con los puntos de entrada de muchos de los ejemplosempleados en la informacioacuten de IBM Toolbox para Java

Clases de acceso Beans Clases commtraceClases HTML PCML Clases ReportWriterRFML Clases de seguridad Clases de servletsEjemplos simples Consejos para la

programacioacutenClases de utilidades

XPCML

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

SUJETO A LAS GARANTIacuteAS ESTATUTARIAS QUE NO PUEDAN EXCLUIRSE IBM LOSDESARROLLADORES Y LOS SUMINISTRADORES DE PROGRAMAS NO OFRECEN NINGUNAGARANTIacuteA NI CONDICIOacuteN YA SEA IMPLIacuteCITA O EXPLIacuteCITA INCLUIDAS PERO SIN LIMITARSE AELLAS LAS GARANTIacuteAS O CONDICIONES IMPLIacuteCITAS DE COMERCIALIZACIOacuteN ADECUACIOacuteNA UN PROPOacuteSITO DETERMINADO Y NO VULNERACIOacuteN CON RESPECTO AL PROGRAMA O ALSOPORTE TEacuteCNICO SI EXISTE

BAJO NINGUNA CIRCUNSTANCIA IBM LOS DESARROLLADORES O SUMINISTRADORES DEPROGRAMAS SE HACEN RESPONSABLES DE NINGUNA DE LAS SIGUIENTES SITUACIONES NISIQUIERA EN CASO DE HABER SIDO INFORMADOS DE TAL POSIBILIDAD1 PEacuteRDIDA O DANtildeO DE LOS DATOS2 DANtildeOS ESPECIALES ACCIDENTALES DIRECTOS O INDIRECTOS O DANtildeOS ECONOacuteMICOS

DERIVADOS3 PEacuteRDIDAS DE BENEFICIOS COMERCIALES DE INGRESOS CLIENTELA O AHORROS

ANTICIPADOS

ALGUNAS JURISDICCIONES NO PERMITEN LA EXCLUSIOacuteN O LA LIMITACIOacuteN DE LOS DANtildeOSDIRECTOS ACCIDENTALES O DERIVADOS POR LO QUE PARTE DE LAS LIMITACIONES OEXCLUSIONES ANTERIORES O TODAS ELLAS PUEDE NO SER PROCEDENTE EN SU CASO

Ejemplos clases de accesoEn esta seccioacuten figura una lista de los ejemplos de coacutedigo que se proporcionan en la documentacioacuten delas clases de acceso de IBM Toolbox para Java

AS400JPingv Ejemplo Utilizar AS400JPing dentro de un programa Java

BidiTransformv Ejemplo coacutemo se utiliza la clase AS400BidiTransform para transformar texto bidireccional

384 IBM Toolbox para Java IBM Toolbox para Java

CommandCallv Ejemplo coacutemo se utiliza CommandCall para ejecutar un mandato en el servidorv Ejemplo coacutemo se utiliza CommandCall para solicitar el nombre del servidor y el mandato que se ha

de ejecutar e imprimir el resultado

ConnectionPoolv Ejemplo coacutemo se utiliza AS400ConnectionPool para crear conexiones con el servidor

DataAreav Ejemplo crear y escribir en un aacuterea de datos decimales

Conversioacuten y descripcioacuten de datosv Ejemplos coacutemo se utilizan las clases FieldDescription RecordFormat y Recordv Ejemplo poner datos en una colav Ejemplo leer datos de una colav Ejemplo coacutemo se utilizan las clases AS400DataType con ProgramCall

DataQueuev Ejemplo crear un objeto DataQueue leer datos y desconectarv Ejemplo poner datos en una colav Ejemplo leer datos de una colav Ejemplo coacutemo se utiliza KeyedDataQueue para poner elementos en una colav Ejemplo coacutemo se utiliza KeyedDataQueue para sacar elementos de una cola

Certificado digitalv Ejemplo listar los certificados digitales pertenecientes a un usuario

EnvironmentVariablev Ejemplo crear establecer y obtener variables de entorno

Excepcionesv Ejemplo capturar una excepcioacuten lanzada recuperar el coacutedigo de retorno y visualizar el texto de la

excepcioacuten

FTPv Ejemplo coacutemo se utiliza la clase FTP para copiar un conjunto de archivos de un directorio del servidorv Ejemplo coacutemo se utiliza la clase AS400FTP para copiar un conjunto de archivos de un directorio

Sistema de archivos integradov Ejemplos coacutemo se utiliza IFSFilev Ejemplo coacutemo se utiliza el meacutetodo IFSFilelistFiles() para listar el contenido de un directoriov Ejemplo coacutemo se utilizan las clases IFSFile para copiar archivosv Ejemplo coacutemo se utilizan las clases IFSFile para listar el contenido de un directoriov Ejemplo coacutemo se utiliza IFSJavaFile en lugar de javaioFilev Ejemplo coacutemo se utilizan las clases IFSFile para listar el contenido de un directorio en el servidor

JavaApplicationCallv Ejemplo ejecutar en el servidor un programa desde el cliente cuya salida es iexclHola a todos

IBM Toolbox para Java 385

JDBCv Ejemplo coacutemo se utiliza el controlador JDBC para crear y llenar con datos una tablav Ejemplo coacutemo se utiliza el controlador JDBC para consultar una tabla y enviar su contenido a la salida

Trabajosv Ejemplo recuperar y cambiar la informacioacuten de trabajo utilizando la memoria cacheacutev Ejemplo listar todos los trabajos activosv Ejemplo imprimir todos los mensajes de las anotaciones de trabajo correspondientes a un usuario

especiacuteficov Ejemplo listar la informacioacuten de identificacioacuten de trabajo correspondiente a un usuario especiacuteficov Ejemplo obtener una lista de los trabajos existentes en el servidor y listar el estado del trabajo y el

identificador del mismov Ejemplo visualizar los mensajes de las anotaciones de trabajo correspondientes a un trabajo

perteneciente al usuario actual

Cola de mensajesv Ejemplo coacutemo se utiliza el objeto cola de mensajesv Ejemplo imprimir el contenido de la cola de mensajesv Ejemplo coacutemo recuperar e imprimir un mensajev Ejemplo listar el contenido de la cola de mensajesv Ejemplo coacutemo se utiliza AS400Message con CommandCallv Ejemplo coacutemo se utiliza AS400Message con ProgramCall

NetServerv Ejemplo Utilizar un objeto NetServer para cambiar el nombre de NetServer

Imprimirv Ejemplo listar asiacutencronamente todos los archivos en spool utilizando la interfaz PrintObjectListListenerv Ejemplo listar asiacutencronamente todos los archivos en spool sin utilizar la interfaz PrintObjectListListenerv Ejemplo copiar un archivo en spool con SpooledFilecopy()v Ejemplo crear un archivo en spool a partir de una corriente de entradav Ejemplo generar una corriente de datos SCS utilizando la clase SCS3812Writerv Ejemplo leer un archivo en spool existentev Ejemplo leer y transformar archivos en spoolv Ejemplo listar siacutencronamente todos los archivos en spool

Permisov Ejemplo establecer la autorizacioacuten de un objeto de AS400

Llamada a programav Ejemplo coacutemo se utiliza ProgramCallv Ejemplo coacutemo se utiliza ProgramCall para recuperar el estado del sistemav Ejemplo pasar datos de paraacutemetro con un objeto Programparameter

QSYSObjectPathNamev Ejemplo construir un nombre de sistema de archivos integradov Ejemplo coacutemo se utiliza QSYSObjectPathNametoPath() para construir un nombre de objeto AS400

386 IBM Toolbox para Java IBM Toolbox para Java

v Ejemplo coacutemo se utiliza QSYSObjectPathName para analizar el nombre de viacutea de acceso del sistemade archivos integrado

Acceso a nivel de registrov Ejemplo acceder secuencialmente a un archivov Ejemplo coacutemo se utilizan las clases de acceso a nivel de registro para leer un archivov Ejemplo coacutemo se utilizan las clases de acceso a nivel de registro para leer registros por clavev Ejemplo coacutemo se utiliza la clase LineDataRecordWriter

Llamada a programa de serviciov Ejemplo coacutemo se utiliza ServiceProgramCall para llamar a un procedimiento

SystemStatusv Ejemplo coacutemo se utiliza la puesta en memoria cacheacute con la clase SystemStatus

SystemPoolv Ejemplo establecer el tamantildeo maacuteximo de faltas para una agrupacioacuten del sistema

SystemValuev Ejemplo coacutemo se utiliza SystemValue y SystemValueList

Rastreov Ejemplo coacutemo se utiliza el meacutetodo TracesetTraceOn()v Ejemplo procedimiento preferido de uso del rastreov Ejemplo coacutemo se utiliza el rastreo de componentes

UserGroupv Ejemplo recuperar una lista de usuariosv Ejemplo listar todos los usuarios de un grupo

UserSpacev Ejemplo coacutemo se crea un espacio de usuario

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo coacutemo se utiliza CommandCallEste programa de ejemplo de IBM Toolbox para Java solicita al usuario el nombre del servidor y elmandato que debe ejecutarse y luego imprime el resultado del mandato

IBM Toolbox para Java 387

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de llamada a mandato Este programa solicita al usuario el nombre del servidor y el mandato que se debe ejecutar y a continuacioacuten imprime el resultado del mandato Este coacutedigo fuente es un ejemplo de CommandCall

import javaioimport javautilimport comibmas400access

public class CommandCallExample extends Object

public static void main(String[] parmeters)

Se ha creado un lector para obtener datos de entrada del usuarioBufferedReader inputStream = new BufferedReader(new InputStreamReader(Systemin)1)

Declare variables para contener el nombre del sistema y el mandato que se ejecutaraacuteString systemString = nullString commandString = null

Systemoutprintln( )

Obtenga el nombre del sistema y el mandato que se ejecutaraacute a partir del usuariotry

Systemoutprint(Nombre del sistema )systemString = inputStreamreadLine()

Systemoutprint(Mandato )commandString = inputStreamreadLine()

catch (Exception e)

Systemoutprintln( )

Cree un objeto AS400 Es el sistema al que se enviacutea el mandatoAS400 as400 = new AS400(systemString)

Cree un objeto de llamada a mandato especificando el servidor que recibiraacute el mandatoCommandCall command = new CommandCall( as400 )

try

Ejecute el mandatoif (commandrun(commandString))

388 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprint( Mandato satisfactorio )else

Systemoutprint( Mandato anoacutemalo )

Si se generan mensajes a partir del mandato impriacutemalosAS400Message[] messagelist = commandgetMessageList()

if (messagelistlength gt 0)

Systemoutprintln( mensajes del mandato )Systemoutprintln( )

for (int i=0 i lt messagelistlength i++)

Systemoutprint ( messagelist[i]getID() )Systemoutprint ( )Systemoutprintln( messagelist[i]getText() )

catch (Exception e)

Systemoutprintln( El mandato + commandgetCommand() + no se ha ejecutado )

Systemexit (0)

Ejemplo coacutemo se utiliza AS400ConnectionPoolEste programa de ejemplo de IBM Toolbox para Java utiliza una AS400ConnectionPool para crearconexiones con un sistema

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de AS400ConnectionPooling Este programa utiliza una AS400ConnectionPool para crear conexiones con un sistema IBM i Sintaxis del mandato AS400ConnectionPooling sistema miIdUsuario miContrasentildea Por ejemplo AS400ConnectionPooling MySystem MyUserId MyPassword

import comibmas400access

public class AS400ConnectionPooling

public static void main (String[] parameters)

Compruebe los paraacutemetros de entradaif (parameterslength = 3)

Systemoutprintln()Systemoutprintln(Utilizacioacuten)Systemoutprintln()Systemoutprintln( AS400ConnectionPooling system userId password)Systemoutprintln()Systemoutprintln()

IBM Toolbox para Java 389

Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln()Systemoutprintln( AS400ConnectionPooling MySystem MyUserId MyPassword)Systemoutprintln()return

String system = parameters[0]String userId = parameters[1]String password = parameters[2]

try

Cree una AS400ConnectionPoolAS400ConnectionPool testPool = new AS400ConnectionPool()

Establezca un maacuteximo de 128 conexiones para esta agrupacioacutentestPoolsetMaxConnections(128)

Establezca un tiempo maacuteximo de vida de 30 minutos para las conexionestestPoolsetMaxLifetime(10006030) 30 min de tiempo maacuteximo de vida desde que se creen

Preconectar 5 conexiones con el servicio AS400COMMANDtestPoolfill(system userId password AS400COMMAND 1)Systemoutprintln()Systemoutprintln(1 conexioacuten preconectada con el servicio AS400COMMAND)

Llame a getActiveConnectionCount y getAvailableConnectionCount para ver cuaacutentas conexiones estaacuten en uso y disponibles para un sistema concretoSystemoutprintln(Nuacutemero de conexiones activas

+ testPoolgetActiveConnectionCount(system userId))Systemoutprintln(Nuacutemero de conexiones disponibles para utilizar

+ testPoolgetAvailableConnectionCount(system userId))

Cree una conexioacuten con el servicio AS400COMMAND (Emplee las constantes de nuacutemero de servicio definidas en la clase AS400 (FILE PRINT COMMAND DATAQUEUE etceacutetera)) Dado que ya se han llenado las conexiones el tiempo que suele dedicarse a conectar con el servicio de mandatos se evitaAS400 newConn1 = testPoolgetConnection(system userId password AS400COMMAND)

Systemoutprintln()Systemoutprintln(getConnection proporciona una conexioacuten existente al usuario)Systemoutprintln(Nuacutemero de conexiones activas

+ testPoolgetActiveConnectionCount(system userId))Systemoutprintln(Nuacutemero de conexiones disponibles para utilizar

+ testPoolgetAvailableConnectionCount(system userId))

Cree un nuevo objeto de llamada a mandato y ejecute un mandatoCommandCall cmd1 = new CommandCall(newConn1)cmd1run(CRTLIB FRED)

Devuelva la conexioacuten a la agrupacioacutentestPoolreturnConnectionToPool(newConn1)

Systemoutprintln()Systemoutprintln(Se ha devuelto una conexioacuten a la agrupacioacuten)Systemoutprintln(Nuacutemero de conexiones activas

+ testPoolgetActiveConnectionCount(system userId))Systemoutprintln(Nuacutemero de conexiones disponibles para reutilizar

+ testPoolgetAvailableConnectionCount(system userId))

Cree una conexioacuten con el servicio AS400COMMAND Esto devolveraacute el mismo objeto que se ha indicado anteriormente para reutilizarAS400 newConn2 = testPoolgetConnection(system userId password AS400COMMAND)

Systemoutprintln()

390 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln(getConnection proporciona una conexioacuten existente al usuario)Systemoutprintln(Nuacutemero de conexiones activas

+ testPoolgetActiveConnectionCount(system userId))Systemoutprintln(Nuacutemero de conexiones disponibles para reutilizar

+ testPoolgetAvailableConnectionCount(system userId))

Cree una conexioacuten con el servicio AS400COMMAND Esto crearaacute una nueva conexioacuten ya que no hay ninguna conexioacuten en la agrupacioacuten para reutilizarAS400 newConn3 = testPoolgetConnection(system userId password AS400COMMAND)

Systemoutprintln()Systemoutprintln(getConnection crea una nueva conexioacuten ya que no hay

conexiones disponibles)Systemoutprintln(Nuacutemero de conexiones activas

+ testPoolgetActiveConnectionCount(system userId))Systemoutprintln(Nuacutemero de conexiones disponibles para reutilizar

+ testPoolgetAvailableConnectionCount(system userId))

Cierre la agrupacioacuten de pruebatestPoolclose()

catch (Exception e)

Si alguna de ha fallado indique que las operaciones de la agrupacioacuten han fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(Las operaciones de la agrupacioacuten han fallado)Systemoutprintln(e)eprintStackTrace()

Ejemplos coacutemo se utiliza la claseAS400JDBCManagedConnectionPoolDataSourceEstos ejemplos ilustran la utilizacioacuten de la clase AS400JDBCManagedConnectionPoolDataSource La claseAS400JDBCManagedConnectionPoolDataSource simplifica el mantenimiento de agrupaciones deconexiones eliminando la necesidad de que las aplicaciones de usuario implementen su propio coacutedigo degestioacuten

Nota al utilizar los ejemplos de coacutedigo acepta los teacuterminos del ldquoInformacioacuten sobre licencia de coacutedigo yexencioacuten de responsabilidadrdquo en la paacutegina 590

Ejemplo 1

Este breve ejemplo muestra la utilizacioacuten baacutesica de la claseAS400JDBCManagedConnectionPoolDataSourceimport javaxnamingContextimport javaxnamingInitialContextimport javaxsqlDataSource

import comibmas400accessAS400JDBCManagedConnectionPoolDataSourceimport comibmas400accessAS400JDBCManagedDataSource

public class TestJDBCConnPoolSnippet

void test()

AS400JDBCManagedConnectionPoolDataSource cpds0 = new AS400JDBCManagedConnectionPoolDataSource()

Establecer propiedades generales de origen de datos Tenga en cuenta que tanto el origen de datos de agrupacioacuten de conexiones (CPDS) como el origen de datos gestionado (MDS) tienen estas propiedades y pueden tener valores diferentescpds0setServerName(host)cpds0setDatabaseName(host)iasp puede especificarse aquiacutecpds0setUser(userid)

IBM Toolbox para Java 391

cpds0setPassword(password)

cpds0setSavePasswordWhenSerialized(true)

Establecer propiedades especiacuteficas de agrupacioacuten de conexionescpds0setInitialPoolSize(initialPoolSize_)cpds0setMinPoolSize(minPoolSize_)cpds0setMaxPoolSize(maxPoolSize_)cpds0setMaxLifetime((int)(maxLifetime_1000)) convertir a segundoscpds0setMaxIdleTime((int)(maxIdleTime_1000)) convertir a segundoscpds0setPropertyCycle((int)(propertyCycle_1000)) convertir a segundoscpds0setReuseConnections(false) no reutilizar conexiones

Establecer la faacutebrica de contexto inicial que debe utilizarseSystemsetProperty(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory)

Obtener el contexto inicial JNDIContext ctx = new InitialContext()

Nota a continuacioacuten figura un procedimiento alternativo para establecer las propiedades de contexto localmente Properties env = new Properties() envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory) Contexto ctx = new InitialContext(env)

ctxrebind(mydatasource cpds0) Ahora pueden realizarse buacutesquedas en cpds por el nombre mydatasource

Crear un objeto DataSource estaacutendar que haga referencia a eacutel

AS400JDBCManagedDataSource mds0 = new AS400JDBCManagedDataSource()mds0setDescription(DataSource que da soporte a la agrupacioacuten de conexiones)mds0setDataSourceName(mydatasource)ctxrebind(ConnectionPoolingDataSource mds0)

DataSource dataSource_ = (DataSource)ctxlookup(ConnectionPoolingDataSource)

AS400JDBCManagedDataSource mds_ = (AS400JDBCManagedDataSource)dataSource_

boolean isHealthy = mds_checkPoolHealth(false) comprobar el estado de la agrupacioacuten

Connection c = dataSource_getConnection()

Ejemplo 2

Este ejemplo muestra maacutes detalles acerca de la utilizacioacuten de la claseAS400JDBCManagedConnectionPoolDataSourceimport javaawtTextAreaimport javaioBufferedReaderimport javaioFileimport javaioFileReaderimport javaioFileInputStreamimport javaioFileOutputStreamimport javaioOutputStreamimport javaioPrintStreamimport javautilVectorimport javautilProperties

import javasqlConnectionimport javaxsqlDataSourceimport javasqlResultSetimport javasqlStatementimport javaxnamingimport javautilDateimport javautilArrayListimport javautilRandomimport comibmas400accessAS400import comibmas400accessAS400JDBCManagedConnectionPoolDataSourceimport comibmas400accessAS400JDBCManagedDataSourceimport comibmas400accessTrace

392 IBM Toolbox para Java IBM Toolbox para Java

public class TestJDBCConnPool

private static final boolean DEBUG = false

Si activa este indicador aseguacuterese de activar tambieacuten el indicador siguiente AS400JDBCConnectionTESTING_THREAD_SAFETYprivate static final boolean TESTING_THREAD_SAFETY = false

private static String useridprivate static String passwordprivate static String host

Nota a efectos de coherencia todos los valores de tiempo se almacenan en unidades de milisegundosprivate int initialPoolSize_ inicial de conexiones en la agrupacioacutenprivate int minPoolSize_ miacuten de conexiones en la agrupacioacutenprivate int maxPoolSize_ maacutex de conexiones en la agrupacioacutenprivate long maxLifetime_ maacutex de tiempo de vida (msegs) de conexiones en la agrupacioacutenprivate long maxIdleTime_ maacutex de tiempo de desocupacioacuten (msegs) de conexiones disponibles en la agrupacioacutenprivate long propertyCycle_ frecuencia de mantenimiento de agrupacioacuten (msegs)

private int numDaemons_ de daemons de peticionario que deben crearseprivate static long timeToRunDaemons_ duracioacuten total (msegs) de ejecucioacuten de los daemonsprivate long daemonMaxSleepTime_ tiempo maacutex (msegs) para latencia de daemons de peticionario en cada cicloprivate long daemonMinSleepTime_ tiempo miacuten (msegs) para latencia de daemons de peticionario en cada cicloprivate long poolHealthCheckCycle_ de msegs entre llamadas a checkPoolHealth()

private boolean keepDaemonsAlive_ = true Si es false los daemons se cierran

private DataSource dataSource_private AS400JDBCManagedDataSource mds_

private final Object daemonSleepLock_ = new Object()

private Random random_ = new Random()

static

try ClassforName(comibmas400accessAS400JDBCDriver)

catch ( Exception e)

Systemoutprintln(Imposible registrar el controlador JDBC)Systemexit (0)

public static void main(String[] args)

host = args[0]userid = args[1]password = args[2]timeToRunDaemons_ = (new Integer(args[3]))intValue() 1000 milisegundosargs[3]=tiempo de ejecucioacuten en segundosTestJDBCConnPool cptest = new TestJDBCConnPool()

cptestsetup()cptestrunTest()

public void setup()

try

if (DEBUG)Systemoutprintln(iquestel distintivo TESTING_THREAD_SAFETY

+ (es TESTING_THREAD_SAFETY true false))

if (TESTING_THREAD_SAFETY)

Ajustar los valores para realizar pruebas de utilizacioacuten intensiva de hebras NOTA se presupone que la clase AS400JDBCConnection tambieacuten se ha modificado para

no establecer conexiones reales con un servidorreal

Para ello edite AS400JDBCConnectionjava cambiando su indicador TESTING_THREAD_SAFETY a rsquofalsersquo y vuelva a compilar

minPoolSize_ = 100maxPoolSize_ = 190initialPoolSize_ = 150 este valor debe restablecerse en maxPoolSize_

IBM Toolbox para Java 393

numDaemons_ = 75if (timeToRunDaemons_ == 0)

timeToRunDaemons_ = 1801000 180 segundos == 3 minutos

else Establecer valores maacutes conservadores ya que van a establecerse conexiones reales con un

servidor real y no deseamos monopolizar el servidorminPoolSize_ = 5maxPoolSize_ = 15initialPoolSize_ = 9numDaemons_ = 4if (timeToRunDaemons_ == 0)

timeToRunDaemons_ = 151000 15 segundos

maxLifetime_ = (int)timeToRunDaemons_ 3maxIdleTime_ = (int)timeToRunDaemons_ 4propertyCycle_ = timeToRunDaemons_ 4poolHealthCheckCycle_ = Mathmin(timeToRunDaemons_ 4 20601000) como miacutenimo una vez cada 20 minutos (maacutes frecuentemente si el tiempo de ejecucioacuten es maacutes corto)daemonMaxSleepTime_ = Mathmin(timeToRunDaemons_ 3 101000) como maacuteximo 10 segundos (menos si el tiempo de ejecucioacuten es maacutes corto)daemonMinSleepTime_ = 20 milisegundos

if (DEBUG)Systemoutprintln(setup Construyendo

+ AS400JDBCManagedConnectionPoolDataSource (cpds0))AS400JDBCManagedConnectionPoolDataSource cpds0 =

new AS400JDBCManagedConnectionPoolDataSource()

Establecer propiedades de origen de datos Tenga en cuenta que tanto CPDS como MDS tienen estas propiedades y pueden tener valores diferentescpds0setServerName(host)cpds0setDatabaseName(host)iasp puede especificarse aquiacutecpds0setUser(userid)cpds0setPassword(password)

cpds0setSavePasswordWhenSerialized(true)

Establecer propiedades especiacuteficas de agrupacioacuten de conexionescpds0setInitialPoolSize(initialPoolSize_)cpds0setMinPoolSize(minPoolSize_)cpds0setMaxPoolSize(maxPoolSize_)cpds0setMaxLifetime((int)(maxLifetime_1000)) convertir a segundoscpds0setMaxIdleTime((int)(maxIdleTime_1000)) convertir a segundoscpds0setPropertyCycle((int)(propertyCycle_1000)) convertir a segundoscpds0setReuseConnections(false) no reutilizar conexiones

Establecer la faacutebrica de contexto inicial que debe utilizarseSystemsetProperty(ContextINITIAL_CONTEXT_FACTORY

comsunjndifscontextRefFSContextFactory)

Obtener el contexto inicial JNDIContext ctx = new InitialContext()

Nota a continuacioacuten figura un procedimiento alternativo para establecer las propiedades de contexto localmente Properties env = new Properties() envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory) Contexto ctx = new InitialContext(env)

ctxrebind(mydatasource cpds0) Ahora pueden realizarse buacutesquedas en cpds por el

nombre mydatasource

if (DEBUG)Systemoutprintln(setup lookup(mydatasource + ))

AS400JDBCManagedConnectionPoolDataSource cpds1 = (AS400JDBCManagedConnectionPoolDataSource)ctxlookup(mydatasource) if (DEBUG) Systemoutprintln(setup cpds1getUser() == | + cpds1getUser() + |)

Crear un objeto DataSource estaacutendar que haga referencia a eacutel

if (DEBUG)Systemoutprintln(setup Constructing AS400JDBCManagedDataSource (mds0))

AS400JDBCManagedDataSource mds0 = new AS400JDBCManagedDataSource()mds0setDescription(DataSource que da soporte a la agrupacioacuten de conexiones)mds0setDataSourceName(mydatasource)

394 IBM Toolbox para Java IBM Toolbox para Java

ctxrebind(ConnectionPoolingDataSource mds0)

if (DEBUG)Systemoutprintln(setup lookup(ConnectionPoolingDataSource + ))

dataSource_ = (DataSource)ctxlookup(ConnectionPoolingDataSource)dataSource_setLogWriter(output_)if (DEBUG)Systemoutprintln(setup dataSource_getUser() == | +

((AS400JDBCManagedDataSource)dataSource_)getUser() + |)

mds_ = (AS400JDBCManagedDataSource)dataSource_catch (Exception e)

eprintStackTrace()Systemoutprintln(Error de configuracioacuten durante la creacioacuten del archivo de rastreo)

void displayConnectionType(Connection conn boolean specifiedDefaultId)

if (conn instanceof comibmas400accessAS400JDBCConnectionHandle)Systemoutprint((+ (specifiedDefaultId + -) + P))

elseSystemoutprint((+ (specifiedDefaultId + -) + NP))

Obtiene y devuelve conexiones desde y hacia una agrupacioacuten de conexiones durante un tiempopublic void runTest()

boolean ok = truetry

Systemoutprintln(Pruebe iniciada ejecutada en + new Date())

if (DEBUG)Systemoutprintln(Comprobacioacuten de estado justo despueacutes de la

creacioacuten del origen de datos+ (se espera que la agrupacioacuten auacuten no exista) )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten existe antes del primer getConnection())

Comprobar algunos meacutetodos getset para propiedades JDBCSystemoutprintln(Comprobando meacutetodos getset )

mds_setAccess(soacutelo lectura)if (mds_getAccess()equals(soacutelo lectura))

ok = falseSystemoutprintln(nERROR getAccess() ha devuelto un valor inesperado

+ | + mds_getAccess()+|)

boolean oldBool = mds_isBigDecimal()boolean newBool = (oldBool false true)mds_setBigDecimal(newBool)if (mds_isBigDecimal() = newBool)

ok = falseSystemoutprintln(nERROR isBigDecimal() ha devuelto un valor

inesperado + |+mds_isBigDecimal()+|)

mds_setBigDecimal(oldBool)

int oldInt = mds_getBlockCriteria()int newInt = (oldInt == 2 1 2)mds_setBlockCriteria(newInt)if (mds_getBlockCriteria() = newInt)

ok = falseSystemoutprintln(nERROR getBlockCriteria() ha devuelto un valor

inesperado + |+mds_getBlockCriteria()+|)

mds_setBlockCriteria(oldInt)

IBM Toolbox para Java 395

Comprobar algunos meacutetodos getset para propiedades de socket

oldBool = mds_isKeepAlive()newBool = (oldBool false true)mds_setKeepAlive(newBool)if (mds_isKeepAlive() = newBool)

ok = falseSystemoutprintln(nERROR isKeepAlive() ha devuelto un valor

inesperado + |+mds_isKeepAlive()+|)

mds_setKeepAlive(oldBool)

oldInt = mds_getReceiveBufferSize()newInt = (oldInt == 256 512 256)mds_setReceiveBufferSize(newInt)if (mds_getReceiveBufferSize() = newInt)

ok = falseSystemoutprintln(nERROR getReceiveBufferSize() ha devuelto un valor

inesperado + |+mds_getReceiveBufferSize()+|)

mds_setReceiveBufferSize(oldInt)

Systemoutprintln(CONNECTION 1)Object o = dataSource_getConnection()Systemoutprintln(ogetClass())Systemoutprintln(LOOK ABOVE)Connection c1 = dataSource_getConnection()

if (DEBUG)displayConnectionType(c1 true)

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes del primer getConnection() )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del primer getConnection())

if (TESTING_THREAD_SAFETY)

try

c1setAutoCommit(false)if (DEBUG)Systemoutprintln(SELECT FROM QIWSQCUSTCDT)

Statement s = c1createStatement()ResultSet rs = sexecuteQuery(SELECT FROM QIWSQCUSTCDT)while (rsnext ())

if (DEBUG)Systemoutprintln(rsgetString(2))

rsclose()sclose()

catch (Exception e)

eprintStackTrace()if (DEBUG)Systemoutprintln(Comprobacioacuten de estado despueacutes de un

error de conexioacuten muy grave )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado

despueacutes del error muy + grave)

Systemoutprintln(CONNECTION 2)Connection c2 = dataSource_getConnection(userid password)if (DEBUG)displayConnectionType(c2 false)

Systemoutprintln(CONNECTION 3)Connection c3 = dataSource_getConnection()if (DEBUG)

396 IBM Toolbox para Java IBM Toolbox para Java

displayConnectionType(c3 true)c1close()

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes del primer close())

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del primer close())

Systemoutprintln(CONNECTION 4)Connection c4 = dataSource_getConnection()if (DEBUG) displayConnectionType(c4 true)

c1close() cerrar de nuevoc2close()c3close()c4close()

if (DEBUG) Systemoutprintln(Comprobando estado despueacutes del uacuteltimo close())if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del uacuteltimo close())

Iniciar los daemons de pruebaSystemoutprintln(Iniciando daemons de prueba)startThreads()

Ejecutar los daemons de prueba durante un tiempo comprobar el estado de la agrupacioacuten perioacutedicamente

long startTime = SystemcurrentTimeMillis()long endTime = startTime + timeToRunDaemons_while (SystemcurrentTimeMillis() lt endTime)

Systemoutprint(h) Permitir que los daemons se ejecuten durante un tiempo y luego comprobar el estado de la agrupacioacutentry

Threadsleep(poolHealthCheckCycle_)catch (InterruptedException ie) if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de iniciar los daemons de prueba)

Detener los daemons de pruebaSystemoutprintln(Deteniendo daemons de prueba)stopThreads()

if (DEBUG)Systemoutprintln(Comprobacioacuten de estado despueacutes de ejecutar

daemons connectionGetter)

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de detener los daemons de prueba)

if (TESTING_THREAD_SAFETY)

Systemoutprintln(CONNECTION 5)Connection c = dataSource_getConnection()if (DEBUG) displayConnectionType(c true)csetAutoCommit(false)if (DEBUG) Systemoutprintln(SELECT FROM QIWSQCUSTCDT)Statement s = ccreateStatement()ResultSet rs = sexecuteQuery(SELECT FROM QIWSQCUSTCDT)while (rsnext ())

if (DEBUG) Systemoutprintln(rsgetString(2))rsclose()sclose()cclose()

Systemoutprintln(nCerrando la agrupacioacuten)mds_closePool()

IBM Toolbox para Java 397

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes de cerrar la agrupacioacuten)

TracesetTraceJDBCOn(true) aseguacuterese de que se imprima el estado finalTracesetTraceOn(true)if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de cerrar la agrupacioacuten)

Systemoutprintln()if(ok==true)

Systemoutprintln(prueba ejecutada satisfactoriamente)else

Systemoutprintln(prueba anoacutemala)catch (Exception e)

Systemoutprintln(e)eprintStackTrace()

finally

Systemoutprintln(Prueba finalizada en + new Date())

void startThreads()

Crear un grupo de hebras que llaman a getConnection()Thread[] threads = new Thread[numDaemons_]for (int i=0 iltnumDaemons_ i++)

ConnectionGetter getter Elegir aleatoriamente si este daemon especificaraacute el uid predeterminado o un uid exclusivoif (random_nextBoolean())

getter = new ConnectionGetter(useridpassword)if (TESTING_THREAD_SAFETY) puede utilizarse un userid ficticio

getter = new ConnectionGetter(Thread+i Pwd+i)else debe utilizarse un userid real

getter = new ConnectionGetter(useridpassword)

else

getter = new ConnectionGetter(null null)

threads[i] = new Thread(getter [+i+])threads[i]setDaemon(true)

Iniciar las hebrasfor (int i=0 iltnumDaemons_ i++)

threads[i]start()

void stopThreads()

Indicar a las hebras que se detengankeepDaemonsAlive_ = falsesynchronized (daemonSleepLock_)

daemonSleepLock_notifyAll()

Esperar a que los daemons se detengantry

Threadsleep(3000)catch (InterruptedException ie)

ConnectionGetter --------------------------------------------------------------------

Clase de ayuda Este daemon se activa a intervalos aleatorios y obtieneotra conexioacuten de la agrupacioacuten de conexiones o devuelve una conexioacuten obtenida

398 IBM Toolbox para Java IBM Toolbox para Java

anteriormente a la agrupacioacutenprivate final class ConnectionGetter implements Runnable

private String uid_private String pwd_private boolean useDefaultUid_private long maxSleepTime_private String threadName_private boolean firstConnection_ = trueArrayList connections_ = new ArrayList() lista de conexiones que actualmente son rsquopropiedadrsquo de este meacutetodo de obtencioacuten

ConnectionGetter(String uid String pwd) uid_ = uidpwd_ = pwdif (uid_ == null) useDefaultUid_ = trueelse useDefaultUid_ = falsemaxSleepTime_ = daemonMaxSleepTime_ copia propia que puede ajustarse

public void run()

threadName_ = ThreadcurrentThread()getName()if (DEBUG) Systemoutprintln(ConnectionGetter(+threadName_+) Starting up)

try

while (keepDaemonsAlive_)

try

Elegir un tiempo de latencia aleatorio entre los valores miacutenimo y maacuteximolong sleepTime = Mathmax((long)(maxSleepTime_ random_nextFloat())

daemonMinSleepTime_) Nota nunca debe llamarse a wait(0) porque esperariacutea indefinidamentesynchronized (daemonSleepLock_)

try daemonSleepLock_wait(sleepTime)Systemoutprint()

catch (InterruptedException ie)

if (keepDaemonsAlive_) break

Decidir aleatoriamente si debe solicitarse otra conexioacuten o devolver una conexioacuten obtenida anteriormenteConnection connif (random_nextBoolean()) Dejar la decisioacuten a la suerte Solicitar otra conexioacuten

if (useDefaultUid_)

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) - get())

conn = dataSource_getConnection()else

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) -

+ get(+uid_+))conn = dataSource_getConnection(uid_ pwd_)

if (conn == null) Systemoutprintln(ConnectionGetter(+threadName_+) ERROR

+ getConnection() ha devuelto null)else

Ocasionalmente olvidar que somos propietarios de una conexioacuten y olvidar cerrarla Las conexiones hueacuterfanas deben en uacuteltimo teacutermino sobrepasar su tiempo de vida maacuteximo y el gestor de conexiones las repetiraacutefloat val = random_nextFloat()if (firstConnection_ || val lt 01)

convierta en rsquohueacuterfanasrsquo algunas de las conexiones obtenidasfirstConnection_ = false

IBM Toolbox para Java 399

else connections_add(conn)

if (DEBUG) displayConnectionType(conn useDefaultUid_)if (conn instanceof comibmas400accessAS400JDBCConnectionHandle) Hemos colocado una conexioacuten en una agrupacioacuten Intente aumentar el tiempo de ciclo

if (maxSleepTime_ gt 100)maxSleepTime_--

elsemaxSleepTime_ = 100

else No hemos colocado una conexioacuten en una agrupacioacuten Eso significa que la agrupacioacuten

debe estar al maacuteximo de capacidad Reduzca un poco el tiempo de ciclomaxSleepTime_ = maxSleepTime_ + 50

else Cerrar una conexioacuten de la que actualmente somos propietarios

if (connections_size() = 0) conn = (Connection)connections_remove(0)connclose()

inner trycatch (Exception e)

eprintStackTrace()

outer while outer tryfinally

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) Stopping)

Devolver todas las conexiones que todaviacutea estaacuten en la listafor (int i=0 iltconnections_size() i++)

Connection conn = (Connection)connections_remove(0)try connclose() catch (Exception e) eprintStackTrace()

clase interna rsquoConnectionGetterrsquo

Ejemplos coacutemo se utilizan las clases FieldDescription RecordFormat y RecordLos ejemplos que hay a continuacioacuten muestran coacutemo se utilizan las clases FieldDescription RecordFormaty Record de IBM Toolbox para Java con colas de datos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Ejemplo coacutemo se utilizan las clases FieldDescription

Puede utilizar las clases FieldDescription para describir los distintos tipos de datos que forman unaentrada de una cola de datos En estos ejemplos se presupone el siguiente formato para las entradas de lacola de datos

Nuacutemero mensaje Remitente Hora enviacuteo Texto mensaje Respuesta necesaria| | | | |

bin(4) char(50) char(8) char(1024) char(1)

Cree descripciones de campo para los datos de entradaBinaryFieldDescription msgNumber = new BinaryFieldDescription(new AS400Bin4()

msgnum)CharacterFieldDescription sender = new CharacterFieldDescription(new AS400Text(50)

sender)CharacterFieldDescription timeSent = new CharacterFieldDescription(new AS400Text(8)

timesent)

400 IBM Toolbox para Java IBM Toolbox para Java

CharacterFieldDescription msgText = new CharacterFieldDescription(new AS400Text(1024)msgtext)

CharacterFieldDescription replyRequired = new CharacterFieldDescription(new AS400Text(1)replyreq)

Utilizacioacuten de la clase RecordFormat

Puede utilizar la clase RecordFormat para describir los datos que forman la entrada de la cola de datos

Ejemplo definir un objeto RecordFormat y utilizarlo dinaacutemicamente

El ejemplo siguiente utiliza la clase RecordFormat para describir el formato de la entrada de la cola dedatos y a continuacioacuten utiliza este elemento para recuperar un registro

RecordFormat entryFormat = new RecordFormat() Describa los campos de una entrada de la cola de datosentryFormataddFieldDescription(msgNumber)entryFormataddFieldDescription(sender)entryFormataddFieldDescription(timeSent)entryFormataddFieldDescription(msgText)entryFormataddFieldDescription(replyRequired)

Obtenga un registro seguacuten el formato de las entradas de la cola de datosRecord rec = entryFormatgetNewRecord()

Ejemplo definir RecordFormat estaacuteticamente

El ejemplo siguiente define el formato de registro estaacuteticamente lo que permite a muchos programasutilizar el formato sin codificar el formato de registro varias veces

public class MessageEntryFormat extends RecordFormat

Las descripciones de campo se incluyen en la clasestatic BinaryFieldDescription msgNumber = new BinaryFieldDescription(new AS400Bin4()

msgnum)static CharacterFieldDescription sender = new CharacterFieldDescription(new AS400Text(50)

sender)static CharacterFieldDescription timeSent = new CharacterFieldDescription(new AS400Text(8)

timesent)static CharacterFieldDescription msgText = new CharacterFieldDescription(new AS400Text(1024)

msgtext)static CharacterFieldDescription replyRequired = new CharacterFieldDescription(new AS400Text(1)

replyreq)

public MessageEntryFormat()

Daremos un nombre a este formato para su uso posteriorsuper(MessageEntryFormat) Antildeada las descripciones de campoaddFieldDescription(msgNumber)addFieldDescription(sender)addFieldDescription(timeSent)addFieldDescription(msgText)addFieldDescription(replyRequired)

Ejemplo coacutemo se utiliza RecordFormat estaacuteticamente

El ejemplo siguiente muestra coacutemo un programa Java puede utilizar un objeto RecordFormat definidoestaacuteticamente

MessageEntryFormat entryFormat = new MessageEntryFormat() Obtenga un registro seguacuten el formato de las entradas de la cola de datosRecord rec = entryFormatgetNewRecord()

IBM Toolbox para Java 401

Utilizacioacuten de la clase Record

Puede utilizar la clase Record para acceder a campos individuales de entradas de la cola de datos

Ejemplo coacutemo se utiliza un objeto Record geneacuterico Cree una instancia del objeto cola de datosDataQueue dq = new DataQueue(new AS400() qsyslibmyliblibmyqdtaq)

Lea una entradaDataQueueEntry dqEntry = nulltry

dqEntry = dqread()catch(Exception e)

Maneje las excepciones

Obtenga un objeto registro del formato de registro inicializaacutendolo con los datos de la entrada que acabamos de leerRecord rec = entryFormatgetNewRecord(dqEntrygetData())

Enviacutee a la salida la entrada completa como serie El contenido del registro se convierte a objeto Java seguacuten el formato de registro de la entradaSystemoutprintln(rectoString()) Obtenga el contenido de los campos individuales de la entrada El contenido de cada campo se convierte a un objeto JavaInteger num = (Integer)recgetField(0) Recupere el contenido por iacutendiceString s = (String)recgetField(sender) Recupere el contenido por nombre de campoString text = (String)recgetField(3) Recupere el texto del mensaje Enviacutee los datos a la salidaSystemoutprintln(num + + s + + text)

Ejemplo coacutemo se utiliza un objeto Record especiacutefico

Tambieacuten puede definir estaacuteticamente y utilizar un objeto Record especiacutefico del formato de esta cola dedatos lo que le permite proporcionar meacutetodos get() y set() para los campos denominados de forma maacutessignificativa que getField() y setField() Ademaacutes al utilizar el objeto Record especiacutefico definidoestaacuteticamente puede devolver tipos Java baacutesicos en lugar de objetos y puede identificar el tipo deretorno para el usuario

Tenga en cuenta que este ejemplo debe convertir expliacutecitamente el objeto Java correctopublic class MessageEntryRecord extends Record

static private RecordFormat format = new MessageEntryFormat()

public MessageEntryRecord()

super(format)

public int getMessageNumber()

Devuelva el nuacutemero de mensaje como int Nota conocemos el formato de registro y por ello sabemos los nombres de los campos Es maacutes seguro obtener el campo por nombre por si se ha insertado un campo en el formato sin saberloreturn ((Integer)getField(msgnum))intValue()

public String getMessageText()

Devuelva el texto del mensaje

402 IBM Toolbox para Java IBM Toolbox para Java

return (String)getField(msgtext)

public String getSender()

Devuelva el remitente del mensajereturn (String)getField(sender)

public String getTimeSent()

Devuelva el remitente del mensajereturn (String)getField(timesent)

Aquiacute podriacuteamos antildeadir establecedores

Ejemplo devolver un nuevo objeto MessageEntryRecord

Necesitamos alterar temporalmente el meacutetodo getNewRecord() de la clase MessageEntryFormat (en elejemplo anterior) a fin de devolver un nuevo objeto MessageEntryRecord Para alterar temporalmente elmeacutetodo antildeada lo siguiente a la clase MessageEntryFormat

public Record getNewRecord(byte[] data)

Record r = new MessageEntryRecord()rsetContents(data)return r

Tras antildeadir el nuevo meacutetodo getNewRecord() puede utilizar el objeto MessageEntryRecord parainterpretar la entrada de la cola de datos

Obtenga un objeto registro del formato de registro inicializaacutendolo con los datos de la entrada que acabamos de leer Observe el uso del nuevo meacutetodo getNewRecord() alteradoMessageEntryRecord rec = (MessageEntryRecord)entryFormatgetNewRecord(dqEntrygetData())

Enviacutee a la salida la entrada completa como serie El contenido del registro se convierte a objeto Java seguacuten el formato de registro de la entradaSystemoutprintln(rectoString()) Obtenga el contenido de los campos individuales de la entrada El contenido de cada campo se convierte a un objeto Javaint num = recgetMessageNumber() Recupere el nuacutemero de mensaje como intString s = recgetSender() Recupere el remitenteString text = recgetMessageText() Recupere el texto del mensaje Enviacutee los datos a la salidaSystemoutprintln(num + + s + + text)

Ejemplo coacutemo se utilizan las clases DataQueue para poner datos en una colaEste ejemplo utiliza las clases de registro (Record) y de formato de registro (Record format) para colocardatos en la cola Los datos de tipo serie se convierten desde Unicode a EBCDIC y los nuacutemeros seconvierten de formato Java a formato del sistema Dado que los datos se convierten en la cola de datoslas entradas de cola de datos pueden ser leiacutedas por un programa servidor un programa IBM i u otroprograma Java

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de cola de datos Este programa utiliza la clase DataQueue para poner registros en una cola de datos Este ejemplo utiliza las clases de registro y de formato de registro para

IBM Toolbox para Java 403

poner datos en la cola Los datos de serie se convierten de Unicode a ebcdic y los nuacutemeros se convierten de formato Java a formato del servidor Dado que los datos se convierten las entradas pueden ser leiacutedas por un programa de servidor un programa de Access para Windows u otro programa Java Este es el lado del productor del ejemplo de productorconsumidor Coloca elementos de trabajo en la cola para que el consumidor los procese Sintaxis del mandato DQProducerExample sistema

import javaioimport javautilimport javanetimport comibmas400access

public class DQProducerExample extends Object

Cree un lector para obtener entrada del usuariostatic BufferedReader inputStream =

new BufferedReader(new InputStreamReader(Systemin)1)

public static void main(String[] parameters)

Systemoutprintln( )

Si no se ha especificado el nombre del sistema visualizar texto de ayuda y salirif (parameterslength gt= 1)

try

El primer paraacutemetro es el sistema que contiene la cola de datosString system = parameters[0]

Cree un objeto AS400 para el servidor que tiene la cola de datosAS400 as400 = new AS400(system)

Construya un formato de registro para el formato de la entrada de cola de datos Este formato coincide con el formato de la clase DQConsumer Un registro estaacute formado por los elementos siguientes - un nuacutemero de cuatro bytes -- el nuacutemero de cliente - un nuacutemero de cuatro bytes -- el nuacutemero de pieza - una serie de 20 caracteres -- la descripcioacuten de la pieza - un nuacutemero de cuatro bytes -- el nuacutemero de piezas de este pedido Primero cree los tipos de datos baseBinaryFieldDescription customerNumber =

new BinaryFieldDescription(new AS400Bin4() CUSTOMER_NUMBER)

BinaryFieldDescription partNumber =new BinaryFieldDescription(new AS400Bin4() PART_NUMBER)

CharacterFieldDescription partName =new CharacterFieldDescription(new AS400Text(20 as400) PART_NAME)

BinaryFieldDescription quantity =new BinaryFieldDescription(new AS400Bin4() QUANTITY)

Construya un formato de registro y lleacutenelo con los tipos de datos baseRecordFormat dataFormat = new RecordFormat()dataFormataddFieldDescription(customerNumber)dataFormataddFieldDescription(partNumber)dataFormataddFieldDescription(partName)dataFormataddFieldDescription(quantity)

404 IBM Toolbox para Java IBM Toolbox para Java

Cree la biblioteca que contiene la cola de datos con CommandCallCommandCall crtlib = new CommandCall(as400)crtlibrun(CRTLIB JAVADEMO)

Cree el objeto cola de datosDataQueue dq = new DataQueue(as400 QSYSLIBJAVADEMOLIBPRODCONSDTAQ)

Cree la cola de datos por si esta es la primera vez que este programa se ejecuta La excepcioacuten de La cola ya existe se captura y no se tiene en cuentatry

dqcreate(96)catch (Exception e)

Obtenga el primer campo de datos del usuarioSystemoutprint(Especifique el nuacutemero de cliente (o 0 para salir) )int customer = getInt()

Mientras haya datos para colocar en la colawhile (customer gt 0)

Obtenga los demaacutes datos de este pedido del usuarioSystemoutprint(Especifique el nuacutemero de pieza )int part = getInt()

Systemoutprint(Especifique la cantidad )int quantityToOrder = getInt()

String description = pieza + part

Cree un registro basado en el formato de registro El registro ahora estaacute vaciacuteo pero al final contendraacute los datosRecord data = new Record(dataFormat)

Establezca los valores recibidos del usuario en el registrodatasetField(CUSTOMER_NUMBER new Integer(customer))datasetField(PART_NUMBER new Integer(part))datasetField(QUANTITY new Integer(quantityToOrder))datasetField(PART_NAME description)

Convierta el registro a una matriz de bytes La matriz de bytes es lo que se coloca realmente en la cola de datosbyte [] byteData = datagetContents()

Systemoutprintln()Systemoutprintln(Escribiendo el registro en el servidor)Systemoutprintln()

Escriba el registro en la cola de datosdqwrite(byteData)

Obtenga el valor siguiente del usuarioSystemoutprint(Especifique el nuacutemero de cliente (o 0 para salir) )customer = getInt()

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de cola de datos ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(La operacioacuten de cola de datos ha fallado)Systemoutprintln(e)

IBM Toolbox para Java 405

Visualice texto de ayuda si los paraacutemetros son incorrectoselse

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( DQProducter sistema)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( sistema = Servidor que tiene la cola de datos)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( DQProducerExample miSistema)Systemoutprintln()Systemoutprintln()

Systemexit (0)

Esta es la subrutina que obtiene una serie de caracteres del usuario y la convierte a intstatic int getInt()

int i = 0boolean Continue = true

while (Continue)

try

String s = inputStreamreadLine()

i = (new Integer(s))intValue()Continue = false

catch (Exception e)

Systemoutprintln(e)Systemoutprint(Especifique un nuacutemero ==gt)

return i

Ejemplo coacutemo se utilizan las clases DataQueue para leer entradas en una cola dedatosEste programa utiliza las clases DataQueue para leer entradas de una cola de datos del servidor Lasentradas se habiacutean colocado en la cola con el programa de ejemplo DQProducer

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de cola de datos Este programa utiliza las clases de cola de datos para leer entradas de una cola de datos en el servidor Las entradas se colocaron en la cola con el programa de ejemplo DQProducer

406 IBM Toolbox para Java IBM Toolbox para Java

Este es el lado del consumidor del ejemplo de productorconsumidor Lee entradas de la cola y las procesa Sintaxis del mandato DQConsumerExample sistema

import javaioimport javautilimport javanetimport comibmas400access

public class DQConsumerExample extends Object

public static void main(String[] parameters)

Systemoutprintln( )

Si no se ha especificado un nombre de sistema visualizar texto de ayuda y salirif (parameterslength gt= 1)

try

El primer paraacutemetro es el sistema que contiene la cola de datosString system = parameters[0]

Cree un objeto AS400 para el servidor que tiene la cola de datosAS400 as400 = new AS400(system)

Construya un formato de registro para el formato de la entrada de cola de datos Este formato coincide con el formato de la clase DQProducer Un registro estaacute formado por los elementos siguientes - un nuacutemero de cuatro bytes -- el nuacutemero de cliente - un nuacutemero de cuatro bytes -- el nuacutemero de pieza - una serie de 20 caracteres -- la descripcioacuten de la pieza - un nuacutemero de cuatro bytes -- el nuacutemero de piezas de este pedido

Primero cree los tipos de datos baseBinaryFieldDescription customerNumber =

new BinaryFieldDescription(new AS400Bin4() CUSTOMER_NUMBER)

BinaryFieldDescription partNumber =new BinaryFieldDescription(new AS400Bin4() PART_NUMBER)

CharacterFieldDescription partName =new CharacterFieldDescription(new AS400Text(20 as400) PART_NAME

BinaryFieldDescription quantity =new BinaryFieldDescription(new AS400Bin4() QUANTITY

Construya un formato de registro y lleacutenelo con los tipos de datos baseRecordFormat dataFormat = new RecordFormat()

dataFormataddFieldDescription(customerNumber)dataFormataddFieldDescription(partNumber)dataFormataddFieldDescription(partName)dataFormataddFieldDescription(quantity)

Cree el objeto cola de datos que representa la cola de datos en el servidorDataQueue dq = new DataQueue(as400 QSYSLIBJAVADEMOLIBPRODCONSDTAQ)

IBM Toolbox para Java 407

boolean Continue = true

Lea la primera entrada de la cola El valor de tiempo de espera es -1 por lo que este programa esperaraacute indefinidamente a que llegue una entradaSystemoutprintln( Esperando una entrada para procesar )

DataQueueEntry DQData = dqread(-1)

while (Continue)

Se acaba de leer una entrada de la cola Ponga los datos en un objeto registro para que el programa pueda acceder a los campos de los datos por nombre El objeto registro tambieacuten convertiraacute los datos del formato del servidor al formato JavaRecord data = dataFormatgetNewRecord(DQDatagetData())

Obtenga dos valores del registro y visualiacutecelosInteger amountOrdered = (Integer) datagetField(QUANTITY)String partOrdered = (String) datagetField(PART_NAME)

Systemoutprintln(Se necesita + amountOrdered + de + partOrdered)

Systemoutprintln( )Systemoutprintln( Esperando una entrada para procesar )

Espere la entrada siguienteDQData = dqread(-1)

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de cola de datos ha fallado y enviacutee la excepcioacuten a la salidaSystemoutprintln(La operacioacuten de cola de datos ha fallado)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectoselse

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( DQConsumerExample sistema)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( sistema = Servidor que tiene la cola de datos)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( DQConsumerExample miSistema)Systemoutprintln()Systemoutprintln()

Systemexit (0)

408 IBM Toolbox para Java IBM Toolbox para Java

Utilizacioacuten de ejemplo de tipos de datosPuede emplear las clases AS400DataType de IBM Toolbox para Java con ProgramCall tanto paraproporcionar datos para los paraacutemetros de programa como para interpretar los datos devueltos en losparaacutemetros de programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Ejemplo coacutemo se utilizan las clases AS400DataType con ProgramCall

El ejemplo siguiente muestra coacutemo emplear las clases AS400DataType con ProgramCall para hacer unallamada a la API del sistema QUSRMBRD Recuperar descripcioacuten de miembro La API QUSRMBRDrecupera la descripcioacuten de un miembro especiacutefico en un archivo de base de datos Las tablas que figurana continuacioacuten del ejemplo contienen los paraacutemetros de QUSRMBRD necesarios y los tipos deinformacioacuten que recupera el ejemplo

Cree un objeto ProgramCall Estableceremos el nombre de programa y la lista de paraacutemetros maacutes adelanteProgramCall qusrmbrd = new ProgramCall(new AS400())

Cree una lista de paraacutemetros de programa vaciacuteaProgramParameter[] parms = new ProgramParameter[6]

Cree AS400DataTypes para convertir los paraacutemetros de entrada de tipos Java a datos del servidorAS400Bin4 bin4 = new AS400Bin4()

Necesitamos un objeto AS400Text aparte para cada paraacutemetro con una longitud distinta ya que la clase AS400Text requiere que la longitud esteacute especificadaAS400Text char8Converter = new AS400Text(8)AS400Text char20Converter = new AS400Text(20)AS400Text char10Converter = new AS400Text(10)AS400Text char1Converter = new AS400Text(1)

Rellene la lista de paraacutemetros utilizaremos los objetos AS400DataType para convertir los valores Java a matrices de bytes que contengan datos del servidor

Para el paraacutemetro de salida solo necesitamos especificar cuaacutentos bytes se devolveraacutenparms[0] = new ProgramParameter(135)parms[1] = new ProgramParameter(bin4toBytes(new Integer(135)))parms[2] = new ProgramParameter(char8ConvertertoBytes(MBRD0100))parms[3] = new ProgramParameter(char20ConvertertoBytes(MYFILE MYLIB ))parms[4] = new ProgramParameter(char10COnvertertoBytes(MYMEMBER ))parms[5] = new ProgramParameter(char1ConvertertoBytes(0))

Establezca el nombre de programa y la lista de paraacutemetrosqusrmbrdsetProgram(qsyslibqusrmbrdpgm parms)

Llame al programatry

qusrmbrdrun()catch(Exception e)

Maneje las excepciones

Obtenga la informacioacuten recuperada Observe que son datos de servidor en brutobyte[] receiverVar = parms[0]getOutputData()

Esto es necesario para convertir los datos de hora y fecha

IBM Toolbox para Java 409

AS400Text char13Converter = new AS400Text(13)

Esto es necesario para convertir los datos de texto descriptivoAS400Text char50Converter = new AS400Text(50)

Cree un objeto AS400Structure para manejar la informacioacuten devueltaAS400DataType[] dataTypeArray = new AS400DataType[11]dataTypeArray[0] = bin4dataTypeArray[1] = bin4dataTypeArray[2] = char10ConverterdataTypeArray[3] = char10ConverterdataTypeArray[4] = char10ConverterdataTypeArray[5] = char10ConverterdataTypeArray[6] = char10ConverterdataTypeArray[7] = char13ConverterdataTypeArray[8] = char13ConverterdataTypeArray[9] = char50ConverterdataTypeArray[10] = char1ConverterAS400Structure returnedDataConverter = new AS400Structure(dataTypeArray)

Convierta los datos devueltos a una matriz de objetos Java utilizando returnedDataConverterObject[] qusrmbrdInfo = dataConvertertoObject(receiverVar 0)

Obtenga el nuacutemero de bytes devueltosInteger bytesReturned = (Integer)qusrmbrdInfo[0]Integer bytesAvailable = (Integer)qusrmbrdInfo[1]if (bytesReturnedintValue() = 135)

Systemoutprintln(La cantidad de informacioacuten devuelta es incorrecta)Systemexit (0)

String fileName = (String)qusrmbrdInfo[2]String libName = (String)qusrmbrdInfo[3]String mbrName = (String)qusrmbrdInfo[4]String fileAttribute = (String)qusrmbrdInfo[5]String sourceType = (String)qusrmbrdInfo[6]String created = (String)qusrmbrdInfo[7]String lastChanged = (String)qusrmbrdInfo[8]String textDesc = (String)qusrmbrdInfo[9]String isSourceFile = (String)qusrmbrdInfo[10]

Enviaremos toda la informacioacuten a la pantallaSystemoutprintln(fileName + + libName + + mbrName + +

fileAttribute + sourceType + + created + +lastChanged + + textDesc + + isSourceFile)

En la tabla siguiente se indican los paraacutemetros necesarios para la API QUSRMBRD tal como se indica enel ejemplo anterior

Paraacutemetro de QUSRMBRD Entrada o salida Tipo Descripcioacuten

Variable receiver Salida Char() Almacenamientointermedio de caracteresque contendraacute lainformacioacuten recuperada

Longitud de la variablereceiver

Entrada Bin(4) Longitud delalmacenamiento intermediode caracteres proporcionadopara la variable receiver

410 IBM Toolbox para Java IBM Toolbox para Java

Paraacutemetro de QUSRMBRD Entrada o salida Tipo Descripcioacuten

Nombre de formato Entrada Char(8) Formato que especifica eltipo de informacioacuten que serecuperaraacute Debe ser unode los valores siguientes

v MBRD0100

v MBRD0200

v MBRD0300

El ejemplo siguienteespecifica MBRD0100

Nombre de archivo de basede datos calificado

Entrada Char(20) Nombre de archivocalificado Es el nombre dearchivo en blanco rellenadohasta 10 caracteres seguidosdel nombre de biblioteca enblanco rellenado hasta 10caracteres Se permiten losvalores especiales deCURLIB y LIBL para elnombre de biblioteca

Nombre de miembro debase de datos

Entrada Char(10) Nombre en blanco delmiembro rellenado hasta 10caracteres Se permiten losvalores especiales deFIRST y LAST

Proceso de alteracionestemporales

Entrada Char(1) Indica si las alteracionestemporales debenprocesarse 0 indica que lasalteraciones temporales nose procesaraacuten Este es elvalor que especificaremos

La tabla siguiente muestra el tipo de informacioacuten que recupera el ejemplo (seguacuten el formato MBRD0100tal como se indica en el ejemplo anterior)

Informacioacuten recuperada Tipo

Bytes devueltos Bin(4)

Bytes disponibles Bin(4)

Nombre de archivo de base de datos Char(10)

Nombre de biblioteca de archivo de base de datos Char(10)

Nombre de miembro Char(10)

Atributo de archivo (tipo de archivo PF LF DDMF) Char(10)

Tipo de fuente (tipo del miembro de archivo fuente si esun archivo fuente)

Char(10)

Fecha y hora de creacioacuten Char(13)

Fecha y hora de uacuteltimo cambio de fuente Char(13)

Descripcioacuten de texto del miembro Char(50)

Archivo fuente (si el archivo es un archivo fuente0=archivo de datos 1=archivo fuente)

Char(1)

IBM Toolbox para Java 411

Ejemplo coacutemo se utiliza KeyedDataQueueEste programa utiliza la clase KeyedDataQueue para colocar registros en una cola de datos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de cola de datos Este programa utiliza la clase KeyedDataQueue para poner registros en una cola de datos La clave es un nuacutemero y los datos son una serie Unicode Este programa muestra una forma de convertir un objeto int en una matriz de bytes y de convertir una serie Java en una matriz de bytes para que pueda escribirse en la cola Este es el lado del productor del ejemplo de productorconsumidor Coloca elementos de trabajo en la cola para que el consumidor los procese Sintaxis del mandato DQKeyedProducer sistema

import javaioimport javautilimport javanetimport comibmas400access

public class DQKeyedProducer extends Object

Cree un lector para obtener entrada del usuario

static BufferedReader inputStream =new BufferedReader(new InputStreamReader(Systemin)1)

public static void main(String[] parameters)

Systemoutprintln( )

Si no se ha especificado el nombre del sistema visualizar texto de ayuda y salir

if (parameterslength gt= 1)

El primer paraacutemetro es el sistema que contiene la cola de datos

String system = parameters[0]

Systemoutprintln(La prioridad es un valor numeacuterico Los rangos de valores son)Systemoutprintln( 0 - 49 = prioridad baja)Systemoutprintln( 50 - 100 = prioridad media)Systemoutprintln(100 + = prioridad alta)Systemoutprintln( )

try

Cree un objeto AS400 para el servidor que tiene la cola de datos

412 IBM Toolbox para Java IBM Toolbox para Java

AS400 as400 = new AS400(system)

Utilice CommandCall para crear la biblioteca que contiene la cola de datos

CommandCall crtlib = new CommandCall(as400)crtlibrun(CRTLIB JAVADEMO)

Cree el objeto cola de datos

QSYSObjectPathName name = new QSYSObjectPathName(JAVADEMO PRODCON2 DTAQ)

KeyedDataQueue dq = new KeyedDataQueue(as400 namegetPath())

Cree la cola de datos por si esta es la primera vez que este programa se ejecuta La excepcioacuten de La cola ya existe se captura y no se tiene en cuenta La longitud de la clave es de cuatro bytes la longitud de una entrada es de 96 bytes

try

dqcreate(4 96)catch (Exception e)

Obtenga los datos del usuario

Systemoutprint(Especifique el mensaje )String message = inputStreamreadLine()

Systemoutprint(Especifique la prioridad )int priority = getInt()

Mientras haya datos para colocar en la cola

while (priority gt 0)

Queremos escribir una serie Java como entrada en la cola La entrada de la cola de datos es una matriz de bytes por ello convierta la serie a una matriz de bytes

byte [] byteData = messagegetBytes(UnicodeBigUnmarked)

La clave es un nuacutemero La entrada de la cola de datos es una matriz de bytes por lo que debe convertir el objeto int a una matriz de bytes

byte [] byteKey = new byte[4]byteKey[0] = (byte) (priority gtgtgt 24)byteKey[1] = (byte) (priority gtgtgt 16)byteKey[2] = (byte) (priority gtgtgt 8)byteKey[3] = (byte) (priority)

Systemoutprintln()

IBM Toolbox para Java 413

Systemoutprintln(Escribiendo el registro en el servidor)Systemoutprintln()

Escriba el registro en la cola de datos

dqwrite(byteKey byteData)

Obtenga el valor siguiente del usuario

Systemoutprint(Especifique el mensaje )message = inputStreamreadLine()

Systemoutprint(Especifique la prioridad )priority = getInt()

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de cola de datos ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(La operacioacuten de cola de datos ha fallado)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectos

else

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( DQKeyedProducter sistema)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( sistema = servidor que tiene la cola de datos)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( DQKeyedProducer miSistema)Systemoutprintln()Systemoutprintln()

Systemexit (0)

Esta es la subrutina que obtiene una serie de caracteres del usuario y la convierte a int

static int getInt()

int i = 0boolean Continue = true

414 IBM Toolbox para Java IBM Toolbox para Java

while (Continue)

try

String s = inputStreamreadLine()

i = (new Integer(s))intValue()Continue = false

catch (Exception e)

Systemoutprintln(e)Systemoutprint(Especifique un nuacutemero ==gt)

return i

Ejemplo coacutemo se utilizan las clases KeyedDataQueue para leer entradas de unacola de datosEste programa utiliza las clases KeyedDataQueue para leer entradas de una cola de datos del servidorLas entradas se habiacutean colocado en la cola con el programa de ejemplo DQKeyedProducer

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de cola de datos por clave Este programa utiliza las clases KeyedDataQueue para leer entradas de una cola de datos en el servidor Las entradas se colocaron en la cola con el programa de ejemplo DQKeyedProducer La clave es un nuacutemero y los datos son una serie unicode Este programa muestra muestra una forma de convertir la matriz de bytes en un objeto int Java y leer una matriz de bytes y convertirla a una serie Java Este es el lado del consumidor del ejemplo de productorconsumidor Lee entradas de la cola y las procesa Sintaxis del mandato DQKeyedConsumer sistema

import javaioimport javautilimport javanetimport comibmas400access

public class DQKeyedConsumer extends Object

public static void main(String[] parameters)

Systemoutprintln( )

Si no se ha especificado un nombre de sistema visualizar texto de ayuda y salirif (parameterslength gt= 1)

El primer paraacutemetro es el sistema que contiene la cola de datosString system = parameters[0]

IBM Toolbox para Java 415

Cree matrices de bytes para los liacutemites de prioridad 100 + = prioridad alta 50 - 100 = prioridad media 0 - 49 = prioridad baja

byte [] key0 = new byte[4]key0[0] = 0key0[1] = 0key0[2] = 0key0[3] = 0

byte [] key50 = new byte[4]key50[0] = (byte) (50 gtgtgt 24)key50[1] = (byte) (50 gtgtgt 16)key50[2] = (byte) (50 gtgtgt 8)key50[3] = (byte) (50)

byte [] key100 = new byte[4]key100[0] = (byte) (100 gtgtgt 24)key100[1] = (byte) (100 gtgtgt 16)key100[2] = (byte) (100 gtgtgt 8)key100[3] = (byte) (100)

try

Cree un objeto AS400 para el servidor que tiene la cola de datosAS400 as400 = new AS400(system)

Cree el objeto cola de datos que representa la cola de datos en el servidor

QSYSObjectPathName name = new QSYSObjectPathName(JAVADEMOPRODCON2DTAQ)

KeyedDataQueue dq = new KeyedDataQueue(as400 namegetPath())KeyedDataQueueEntry DQData = null

try

boolean Continue = true

Seguir hasta que el usuario finalice la operacioacutenwhile (Continue)

Busque un elemento de prioridad alta en la cola Si encuentra uno proceacuteselo Observe que el meacutetodo peek no elimina el elemento si encuentra uno Observe tambieacuten que el tiempo de espera es 0 Si no encuentra ninguacuten elemento se recuperaraacute el control con una entrada de cola de datos nulaDQData = dqread(key100 0 GE)

if (DQData = null)

processEntry(DQData)

Si no se ha encontrado ninguacuten elemento de prioridad alta busque un valor medio para el elemento de prioridadelse

DQData = dqread(key50 0 GE)

if (DQData = null)

processEntry(DQData)

416 IBM Toolbox para Java IBM Toolbox para Java

Si no se ha encontrado ninguacuten elemento de prioridad media busque un valor bajo para el elemento de prioridadelse

DQData = dqread(key0 0 GE)

if (DQData = null)

processEntry(DQData)

else

Systemoutprintln(No hay nada para procesar se comprobaraacutede nuevo en 30 segundos)

Threadsleep(30000)

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de cola de datos ha fallado y enviacutee la excepcioacuten a la salidaSystemoutprintln(No es posible leer en la cola de datos)Systemoutprintln(e)

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de cola de datos ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(La operacioacuten de cola de datos ha fallado)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectoselse

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( DQKeyedConsumer sistema)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( sistema = Servidor que tiene la cola de datos)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln()Systemoutprintln( DQKeyedConsumer miSistema)Systemoutprintln()Systemoutprintln()

Systemexit (0)

static void processEntry(KeyedDataQueueEntry DQData)

IBM Toolbox para Java 417

try

Los datos son una serie Obtenga la serie de la entrada de cola de datos En la entrada de cola de datos los datos son una matriz de bytes por ello convierta la entrada de una matriz de bytes a una serieString message = new String(DQDatagetData() UnicodeBig)

La clave es una matriz de bytes Obtenga la clave de la entrada de cola de datos y convieacutertala a un nuacutemerobyte [] keyData = DQDatagetKey()

int keyValue = ((keyData[0] amp 0xFF) ltlt 24) +((keyData[1] amp 0xFF) ltlt 16) +((keyData[2] amp 0xFF) ltlt 8) +(keyData[3] amp 0xFF)

Enviacutee la entrada a la salidaSystemoutprintln(Prioridad + keyValue + mensaje + message)

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de cola de datos ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(No es posible leer en la cola de datos)Systemoutprintln(e)

Ejemplos coacutemo se utiliza IFSFileLos ejemplos que figuran a continuacioacuten muestran coacutemo se utiliza la clase IFSFile de IBM Toolbox paraJava

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importantev Ejemplo crear un directoriov Ejemplo coacutemo se utilizan las excepciones de IFSFile para hacer seguimiento de erroresv Ejemplo listar archivos con la extensioacuten txtv ldquoEjemplo coacutemo se utiliza el meacutetodo de IFSFile listFiles() para listar el contenido de un directoriordquo en la

paacutegina 420

Ejemplo crear un directorio Cree un objeto AS400 El

nuevo directorio se crearaacute en este sistemaAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el directorioIFSFile aDirectory = new IFSFile(sys mydir1mydir2newdir)

Cree el directorioif (aDirectorymkdir())

Systemoutprintln(Crear directorio ha sido satisfactorio)else

La creacioacuten del directorio ha fallado Si el objeto ya existe determine si es un directorio o un archivo y a continuacioacuten muestre un mensajeif (aDirectoryexists())

if (aDirectoryisDirectory())

418 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln(El directorio ya existe)else

Systemoutprintln(Ya existe un archivo con ese nombre)else

Systemoutprintln(Crear directorio ha fallado)

Desconecte puesto que ya ha terminado de acceder a los archivossysdisconnectService(AS400FILE)

Ejemplo coacutemo se utilizan las excepciones de IFSFile para hacer seguimiento de errores

Cuando se produce un error la clase IFSFile lanza la excepcioacuten ExtendedIOException Esta excepcioacutencontiene un coacutedigo de retorno que indica la causa de la anomaliacutea La clase IFSFile lanza la excepcioacutenincluso cuando no la lance la clase javaio que la clase IFSFile duplica Por ejemplo el meacutetodo delete(suprimir) de javaioFile devuelve un booleano para indicar que la operacioacuten ha sido satisfactoria o queha fallado El meacutetodo delete de IFSFile devuelve un booleano pero si la supresioacuten falla se lanza unaexcepcioacuten ExtendedIOException La excepcioacuten ExtendedIOException proporciona al programa Javainformacioacuten detallada acerca de por queacute ha fallado la supresioacuten

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoIFSFile aFile = new IFSFile(sys mydir1mydir2myfile)

Suprima el archivotry

aFiledelete()

Systemoutprintln(Supresioacuten satisfactoria )catch (ExtendedIOException e)

La supresioacuten ha fallado Obtenga el coacutedigo de retorno de la excepcioacuten y muestre por queacute ha fallado la supresioacutenint rc = egetReturnCode()

switch (rc)

case ExtendedIOExceptionFILE_IN_USESystemoutprintln(Supresioacuten anoacutemala archivo en uso )break

case ExtendedIOExceptionPATH_NOT_FOUNDSystemoutprintln(Supresioacuten anoacutemala viacutea no encontrada )break

para cada error especiacutefico que desee rastrear

defaultSystemoutprintln(Supresioacuten anoacutemala rc = )Systemoutprintln(rc)

Ejemplo listar archivos con la extensioacuten txt

El programa Java puede especificar opcionalmente criterios de coincidencia al listar los archivos deldirectorio Los criterios de coincidencia reducen el nuacutemero de archivos devueltos por el servidor al objetoIFSFile y asiacute el rendimiento aumenta El ejemplo que hay a continuacioacuten muestra coacutemo se listan losarchivos que tienen la extensioacuten txt

IBM Toolbox para Java 419

Cree el objeto AS400AS400 system = new AS400(mySystemmyCompanycom)

Cree el objeto de archivoIFSFile directory = new IFSFile(system )

Genere una lista de todos los archivos que tengan la extensioacuten txtString[] names = directorylist(txt)

Visualice los nombresif (names = null)

for (int i = 0 i lt nameslength i++)Systemoutprintln(names[i])

elseSystemoutprintln(No hay archivos txt)

Ejemplo coacutemo se utiliza el meacutetodo de IFSFile listFiles() para listar el contenido deun directorioEste programa de ejemplo utiliza las clases IFS de IBM Toolbox para Java para listar el contenido de undirectorio en el servidor

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de IFSListFiles Este programa utiliza las clases de IFS para listar el contenido de un directorio en el servidor Sintaxis del mandato IFSListFiles sistema directorio Por ejemplo IFSListFiles MySystem path1

import javaioimport javautilimport comibmas400access

public class IFSListFiles extends Object

public static void main(String[] parameters)

Systemoutprintln( )

String directoryName = String system =

Si no se han especificado ambos paraacutemetros visualizar texto de ayuda y salir

if (parameterslength gt= 2)

Supongamos que el primer paraacutemetro es el nombre de sistema y el segundo paraacutemetro es el nombre de directorio

system = parameters[0]directoryName = parameters[1]

try

Cree un objeto AS400 para el servidor que contiene los archivos

420 IBM Toolbox para Java IBM Toolbox para Java

AS400 as400 = new AS400(system)

Cree el objeto IFSFile para el directorio

IFSFile directory = new IFSFile(as400 directoryName)

Genere una lista de elementos IFSFile Pase al meacutetodo listFiles el objeto filtro de directorio y los criterios de coincidencia buacutesqueda Este meacutetodo almacena en la memoria cacheacute informacioacuten de atributos Por ejemplo cuando se llama a isDirectory() en un objeto IFSFile de la matriz de archivos devuelta en el coacutedigo siguiente no se necesita ninguna llamada al servidor Sin embargo con el uso del meacutetodo listFiles la informacioacuten de atributos no se renovaraacute automaacuteticamente desde el servidor Esto significa que la informacioacuten de atributos se puede volver incoherente con la informacioacuten relacionada con el servidor

IFSFile[] directoryFiles = directorylistFiles(new MyDirectoryFilter())

Si el directorio no existe o estaacute vaciacuteo informe de ello al usuario

if (directoryFiles == null)

Systemoutprintln(El directorio no existe)return

else if (directoryFileslength == 0)

Systemoutprintln(El directorio estaacute vaciacuteo)return

for (int i=0 ilt directoryFileslength i++)

Imprima informacioacuten acerca de la lista Imprima el nombre del archivo actual

Systemoutprint(directoryFiles[i]getName())

Rellene la salida para que las columnas queden alineadas

for (int j = directoryFiles[i]getName()length() j lt18 j++)Systemoutprint( )

Imprima la fecha en que el archivo se ha cambiado por uacuteltima vez

long changeDate = directoryFiles[i]lastModified()Date d = new Date(changeDate)Systemoutprint(d)Systemoutprint( )

Imprima si la entrada es un archivo o un directorio

Systemoutprint( )

if (directoryFiles[i]isDirectory())Systemoutprintln()

elseSystemoutprintln(directoryFiles[i]length())

IBM Toolbox para Java 421

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de listar ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(La operacioacuten de listar ha fallado)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectos

else

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( IFSListFiles as400 directorio)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( as400 = sistema que contiene los archivos)Systemoutprintln( directorio = directorio que se listaraacute)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( IFSListFiles miSistema dir1dir2)Systemoutprintln()Systemoutprintln()

Systemexit (0)

La clase de filtro de directorio imprime informacioacuten del objeto de archivo Otra forma de emplear el filtro es simplemente devolver true o false seguacuten la informacioacuten del objeto de archivo Esto permite que la funcioacuten principal decida queacute hacer con la lista de archivos que cumplen los criterios de buacutesqueda

class MyDirectoryFilter implements IFSFileFilter

public boolean accept(IFSFile file)

try

Conserve esta entrada El retorno de true indica al objeto IFSList que devuelva este archivo en la lista de entradas devueltas al meacutetodo list()

return true

422 IBM Toolbox para Java IBM Toolbox para Java

catch (Exception e)

return false

Ejemplo coacutemo se utilizan las clases del sistema de archivos integrado (IFS) paracopiar un archivo de un directorio en otroEste programa utiliza las clases del sistema de archivos instalable para copiar un archivo de un directorioen otro del servidor

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de IFSCopyFile Este programa utiliza las clases de IFS instalables para copiar un archivo de un directorio en otro del servidor Sintaxis del mandato IFSCopyFile sistema nombreOrigen nombreDestino Por ejemplo IFSCopyFile MySystem path1path2fileext path3path4path5fileext

import javaioimport javautilimport comibmas400access

public class IFSCopyFile extends Object

public static void main(String[] parameters)

Systemoutprintln( )

String sourceName = String targetName = String system = byte[] buffer = new byte[1024 64]

IFSFileInputStream source = nullIFSFileOutputStream target = null

Si no se han especificado los tres paraacutemetros visualizar texto de ayuda y salir

if (parameterslength gt 2)

Supongamos que el primer paraacutemetro es el nombre de sistema el segundo paraacutemetro es el nombre del origen y el tercer paraacutemetro es el nombre del destino

system = parameters[0]sourceName = parameters[1]targetName = parameters[2]

try

Cree un objeto AS400 para el servidor que contiene los archivos

IBM Toolbox para Java 423

AS400 as400 = new AS400(system)

Abra el archivo origen para acceso exclusivo

source = new IFSFileInputStream(as400 sourceName IFSFileInputStreamSHARE_NONE)

Systemoutprintln(El archivo origen se ha abierto correctamente)

Abra el archivo destino para acceso exclusivo

target = new IFSFileOutputStream(as400 targetName IFSFileOutputStreamSHARE_NONE false)

Systemoutprintln(El archivo destino se ha abierto correctamente)

Lea los primeros 64K bytes del archivo origen

int bytesRead = sourceread(buffer)

Mientras haya datos en el archivo origen copie los datos del archivo origen en el archivo destino

while (bytesRead gt 0)

targetwrite(buffer 0 bytesRead)bytesRead = sourceread(buffer)

Systemoutprintln(Los datos se han copiado correctamente)

Cierre los archivos origen y destino

sourceclose()targetclose()

Obtenga la fechahora de uacuteltimo cambio del archivo origen y estableacutezcala en el archivo destino

IFSFile src = new IFSFile(as400 sourceName)long dateTime = srclastModified()

IFSFile tgt = new IFSFile(as400 targetName)tgtsetLastModified(dateTime)

Systemoutprintln(La fechahora se ha establecido correctamente en el archivo destino)Systemoutprintln(La copia se ha efectuado correctamente)

catch (Exception e)

Si alguna de las operaciones anteriores ha fallado indique que la copia ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(La copia ha fallado)Systemoutprintln(e)

424 IBM Toolbox para Java IBM Toolbox para Java

Visualice texto de ayuda si los paraacutemetros son incorrectos

else

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( IFSCopyFile as400 origen destino)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( as400 = sistema que contiene los archivos)Systemoutprintln( origen = archivo origen con el formato viacuteaviacuteanombre)Systemoutprintln( destino = archivo destino con el formato viacuteaviacuteanombre)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( IFSCopyFile myAS400 dir1dir2atxt dir3btxt)Systemoutprintln()Systemoutprintln()

Systemexit (0)

Ejemplo coacutemo se utilizan las clases del sistema de archivos integrado (IFS) paralistar el contenido de un directorioEste programa utiliza las clases del sistema de archivos integrado para listar el contenido de un directorioen el servidor

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de IFSListFile Este programa utiliza las clases de IFS para listar el contenido de un directorio en el servidor Sintaxis del mandato IFSList sistema directorio Por ejemplo IFSList MySystem path1

import javaioimport javautilimport comibmas400access

public class IFSList extends Object

public static void main(String[] parameters)

Systemoutprintln( )

String directoryName = String system =

Si no se han especificado ambos paraacutemetros visualizar texto de ayuda y salir

IBM Toolbox para Java 425

if (parameterslength gt= 2)

Supongamos que el primer paraacutemetro es el nombre de sistema y el segundo paraacutemetro es el nombre de directorio

system = parameters[0]directoryName = parameters[1]

try

Cree un objeto AS400 para el servidor que contiene los archivos

AS400 as400 = new AS400(system)

Cree el objeto IFSFile para el directorio

IFSFile directory = new IFSFile(as400 directoryName)

Genere la lista de nombre Pase al meacutetodo list el objeto filtro de directorio y los criterios de coincidencia de buacutesqueda Nota este ejemplo procesa el objeto filtro Otra solucioacuten es procesar la lista despueacutes de volver de la llamada al meacutetodo list

String[] directoryNames = directorylist(new MyDirectoryFilter())

Si el directorio no existe o estaacute vaciacuteo informe de ello al usuario

if (directoryNames == null)Systemoutprintln(El directorio no existe)

else if (directoryNameslength == 0)Systemoutprintln(El directorio estaacute vaciacuteo)

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de listar ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(La operacioacuten de listar ha fallado)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectos

else

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( IFSList as400 directorio)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()

426 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln( as400 = sistema que contiene los archivos)Systemoutprintln( directorio = directorio que se listaraacute)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( IFSCopyFile miSistema dir1dir2)Systemoutprintln()Systemoutprintln()

Systemexit (0)

La clase de filtro de directorio imprime informacioacuten del objeto de archivo Otra forma de emplear el filtro es simplemente devolver true o false seguacuten la informacioacuten del objeto de archivo Esto permite que la funcioacuten principal decida queacute hacer con la lista de archivos que cumplen los criterios de buacutesqueda

class MyDirectoryFilter implements IFSFileFilter

public boolean accept(IFSFile file)

try

Imprima el nombre del archivo actual

Systemoutprint(filegetName())

Rellene la salida para que las columnas queden alineadas

for (int i = filegetName()length() i lt 18 i++)Systemoutprint( )

Imprima la fecha en que el archivo se ha cambiado por uacuteltima vez

long changeDate = filelastModified()Date d = new Date(changeDate)Systemoutprint(d)Systemoutprint( )

Imprima si la entrada es un archivo o un directorio

Systemoutprint( )

if (fileisDirectory())Systemoutprintln(ltDIRgt)

elseSystemoutprintln(filelength())

IBM Toolbox para Java 427

Conserve esta entrada El retorno de true indica al objeto IFSList que devuelva este archivo en la lista de entradas devueltas al meacutetodo list()

return true

catch (Exception e)

return false

Ejemplo coacutemo se utiliza JDBCPopulate para crear y llenar con datos una tablaEste programa utiliza el controlador JDBC de IBM Toolbox para Java para crear y llenar una tabla

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de JDBCPopulate Este programa utiliza el controlador JDBC de IBM Toolbox para Java para crear una tabla y llenarla con datos Sintaxis del mandato JDBCPopulate sistema nombreColeccioacuten nombreTabla Por ejemplo JDBCPopulate MySystem MyLibrary MyTable

import javasql

public class JDBCPopulate

Series que se antildeadiraacuten a la columna WORD de la tablaprivate static final String words[]

= Uno Dos Tres Cuatro CincoSeis Siete Ocho Nueve DiezOnce Doce Trece Catorce QuinceDieciseacuteis Diecisiete Dieciocho Diecinueve Veinte

public static void main (String[] parameters)

Compruebe los paraacutemetros de entradaif (parameterslength = 3)

Systemoutprintln()Systemoutprintln(Utilizacioacuten)Systemoutprintln()Systemoutprintln( JDBCPopulate system collectionName tableName)Systemoutprintln()Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln()Systemoutprintln( JDBCPopulate MySystem MyLibrary MyTable)Systemoutprintln()return

428 IBM Toolbox para Java IBM Toolbox para Java

String system = parameters[0]String collectionName = parameters[1]String tableName = parameters[2]

Connection connection = null

try

Cargue el controlador JDBC de IBM Toolbox para JavaDriverManagerregisterDriver(new comibmas400accessAS400JDBCDriver())

Obtenga una conexioacuten con la base de datos Debido a que no proporcionamos un ID de usuario ni una contrasentildea apareceraacute una solicitud Observe que aquiacute proporcionamos un esquema SQL predeterminado por lo que no es necesario calificar el nombre de tabla en las sentencias SQLconnection = DriverManagergetConnection (jdbcas400 + system + + collectionName)

Elimine la tabla si ya existetry

Statement dropTable = connectioncreateStatement ()dropTableexecuteUpdate (DROP TABLE + tableName)

catch (SQLException e)

Hacer caso omiso

Cree la tablaStatement createTable = connectioncreateStatement ()createTableexecuteUpdate (CREATE TABLE + tableName

+ (I INTEGER WORD VARCHAR(20) SQUARE INTEGER + SQUAREROOT DOUBLE))

Prepare una sentencia para insertar filas Dado que la ejecutamos varias veces es mejor emplear una PreparedStatement y marcadores de paraacutemetrosPreparedStatement insert = connectionprepareStatement (INSERT INTO

+ tableName + (I WORD SQUARE SQUAREROOT) + VALUES ( ))

Llene con datos la tablafor (int i = 1 i lt= wordslength ++i)

insertsetInt (1 i)insertsetString (2 words[i-1])insertsetInt (3 ii)insertsetDouble (4 Mathsqrt(i))insertexecuteUpdate ()

Enviacutee un mensaje de finalizacioacuten a la salidaSystemoutprintln (La tabla + collectionName + + tableName + se ha llenado

con datos)

catch (Exception e) Systemoutprintln ()Systemoutprintln (ERROR + egetMessage())

finally

Borretry

if (connection = null)connectionclose ()

IBM Toolbox para Java 429

catch (SQLException e) Hacer caso omiso

Systemexit (0)

Ejemplos coacutemo se utiliza la claseAS400JDBCManagedConnectionPoolDataSourceEstos ejemplos ilustran la utilizacioacuten de la clase AS400JDBCManagedConnectionPoolDataSource La claseAS400JDBCManagedConnectionPoolDataSource simplifica el mantenimiento de agrupaciones deconexiones eliminando la necesidad de que las aplicaciones de usuario implementen su propio coacutedigo degestioacuten

Nota al utilizar los ejemplos de coacutedigo acepta los teacuterminos del ldquoInformacioacuten sobre licencia de coacutedigo yexencioacuten de responsabilidadrdquo en la paacutegina 590

Ejemplo 1

Este breve ejemplo muestra la utilizacioacuten baacutesica de la claseAS400JDBCManagedConnectionPoolDataSourceimport javaxnamingContextimport javaxnamingInitialContextimport javaxsqlDataSource

import comibmas400accessAS400JDBCManagedConnectionPoolDataSourceimport comibmas400accessAS400JDBCManagedDataSource

public class TestJDBCConnPoolSnippet

void test()

AS400JDBCManagedConnectionPoolDataSource cpds0 = new AS400JDBCManagedConnectionPoolDataSource()

Establecer propiedades generales de origen de datos Tenga en cuenta que tanto el origen de datos de agrupacioacuten de conexiones (CPDS) como el origen de datos gestionado (MDS) tienen estas propiedades y pueden tener valores diferentescpds0setServerName(host)cpds0setDatabaseName(host)iasp puede especificarse aquiacutecpds0setUser(userid)cpds0setPassword(password)

cpds0setSavePasswordWhenSerialized(true)

Establecer propiedades especiacuteficas de agrupacioacuten de conexionescpds0setInitialPoolSize(initialPoolSize_)cpds0setMinPoolSize(minPoolSize_)cpds0setMaxPoolSize(maxPoolSize_)cpds0setMaxLifetime((int)(maxLifetime_1000)) convertir a segundoscpds0setMaxIdleTime((int)(maxIdleTime_1000)) convertir a segundoscpds0setPropertyCycle((int)(propertyCycle_1000)) convertir a segundoscpds0setReuseConnections(false) no reutilizar conexiones

Establecer la faacutebrica de contexto inicial que debe utilizarseSystemsetProperty(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory)

Obtener el contexto inicial JNDIContext ctx = new InitialContext()

Nota a continuacioacuten figura un procedimiento alternativo para establecer las propiedades de contexto localmente Properties env = new Properties() envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory)

430 IBM Toolbox para Java IBM Toolbox para Java

Contexto ctx = new InitialContext(env)

ctxrebind(mydatasource cpds0) Ahora pueden realizarse buacutesquedas en cpds por el nombre mydatasource

Crear un objeto DataSource estaacutendar que haga referencia a eacutel

AS400JDBCManagedDataSource mds0 = new AS400JDBCManagedDataSource()mds0setDescription(DataSource que da soporte a la agrupacioacuten de conexiones)mds0setDataSourceName(mydatasource)ctxrebind(ConnectionPoolingDataSource mds0)

DataSource dataSource_ = (DataSource)ctxlookup(ConnectionPoolingDataSource)

AS400JDBCManagedDataSource mds_ = (AS400JDBCManagedDataSource)dataSource_

boolean isHealthy = mds_checkPoolHealth(false) comprobar el estado de la agrupacioacuten

Connection c = dataSource_getConnection()

Ejemplo 2

Este ejemplo muestra maacutes detalles acerca de la utilizacioacuten de la claseAS400JDBCManagedConnectionPoolDataSourceimport javaawtTextAreaimport javaioBufferedReaderimport javaioFileimport javaioFileReaderimport javaioFileInputStreamimport javaioFileOutputStreamimport javaioOutputStreamimport javaioPrintStreamimport javautilVectorimport javautilProperties

import javasqlConnectionimport javaxsqlDataSourceimport javasqlResultSetimport javasqlStatementimport javaxnamingimport javautilDateimport javautilArrayListimport javautilRandomimport comibmas400accessAS400import comibmas400accessAS400JDBCManagedConnectionPoolDataSourceimport comibmas400accessAS400JDBCManagedDataSourceimport comibmas400accessTrace

public class TestJDBCConnPool

private static final boolean DEBUG = false

Si activa este indicador aseguacuterese de activar tambieacuten el indicador siguiente AS400JDBCConnectionTESTING_THREAD_SAFETYprivate static final boolean TESTING_THREAD_SAFETY = false

private static String useridprivate static String passwordprivate static String host

Nota a efectos de coherencia todos los valores de tiempo se almacenan en unidades de milisegundosprivate int initialPoolSize_ inicial de conexiones en la agrupacioacutenprivate int minPoolSize_ miacuten de conexiones en la agrupacioacutenprivate int maxPoolSize_ maacutex de conexiones en la agrupacioacutenprivate long maxLifetime_ maacutex de tiempo de vida (msegs) de conexiones en la agrupacioacutenprivate long maxIdleTime_ maacutex de tiempo de desocupacioacuten (msegs) de conexiones disponibles en la agrupacioacutenprivate long propertyCycle_ frecuencia de mantenimiento de agrupacioacuten (msegs)

private int numDaemons_ de daemons de peticionario que deben crearseprivate static long timeToRunDaemons_ duracioacuten total (msegs) de ejecucioacuten de los daemonsprivate long daemonMaxSleepTime_ tiempo maacutex (msegs) para latencia de daemons de peticionario en cada ciclo

IBM Toolbox para Java 431

private long daemonMinSleepTime_ tiempo miacuten (msegs) para latencia de daemons de peticionario en cada cicloprivate long poolHealthCheckCycle_ de msegs entre llamadas a checkPoolHealth()

private boolean keepDaemonsAlive_ = true Si es false los daemons se cierran

private DataSource dataSource_private AS400JDBCManagedDataSource mds_

private final Object daemonSleepLock_ = new Object()

private Random random_ = new Random()

static

try ClassforName(comibmas400accessAS400JDBCDriver)

catch ( Exception e)

Systemoutprintln(Imposible registrar el controlador JDBC)Systemexit (0)

public static void main(String[] args)

host = args[0]userid = args[1]password = args[2]timeToRunDaemons_ = (new Integer(args[3]))intValue() 1000 milisegundosargs[3]=tiempo de ejecucioacuten en segundosTestJDBCConnPool cptest = new TestJDBCConnPool()

cptestsetup()cptestrunTest()

public void setup()

try

if (DEBUG)Systemoutprintln(iquestel distintivo TESTING_THREAD_SAFETY

+ (es TESTING_THREAD_SAFETY true false))

if (TESTING_THREAD_SAFETY)

Ajustar los valores para realizar pruebas de utilizacioacuten intensiva de hebras NOTA se presupone que la clase AS400JDBCConnection tambieacuten se ha modificado para

no establecer conexiones reales con un servidorreal

Para ello edite AS400JDBCConnectionjava cambiando su indicador TESTING_THREAD_SAFETY a rsquofalsersquo y vuelva a compilar

minPoolSize_ = 100maxPoolSize_ = 190initialPoolSize_ = 150 este valor debe restablecerse en maxPoolSize_numDaemons_ = 75if (timeToRunDaemons_ == 0)

timeToRunDaemons_ = 1801000 180 segundos == 3 minutos

else Establecer valores maacutes conservadores ya que van a establecerse conexiones reales con un

servidor real y no deseamos monopolizar el servidorminPoolSize_ = 5maxPoolSize_ = 15initialPoolSize_ = 9numDaemons_ = 4if (timeToRunDaemons_ == 0)

timeToRunDaemons_ = 151000 15 segundos

maxLifetime_ = (int)timeToRunDaemons_ 3maxIdleTime_ = (int)timeToRunDaemons_ 4propertyCycle_ = timeToRunDaemons_ 4poolHealthCheckCycle_ = Mathmin(timeToRunDaemons_ 4 20601000) como miacutenimo una vez cada 20 minutos (maacutes frecuentemente si el tiempo de ejecucioacuten es maacutes corto)daemonMaxSleepTime_ = Mathmin(timeToRunDaemons_ 3 101000) como maacuteximo 10 segundos (menos si el tiempo de ejecucioacuten es maacutes corto)daemonMinSleepTime_ = 20 milisegundos

432 IBM Toolbox para Java IBM Toolbox para Java

if (DEBUG)Systemoutprintln(setup Construyendo

+ AS400JDBCManagedConnectionPoolDataSource (cpds0))AS400JDBCManagedConnectionPoolDataSource cpds0 =

new AS400JDBCManagedConnectionPoolDataSource()

Establecer propiedades de origen de datos Tenga en cuenta que tanto CPDS como MDS tienen estas propiedades y pueden tener valores diferentescpds0setServerName(host)cpds0setDatabaseName(host)iasp puede especificarse aquiacutecpds0setUser(userid)cpds0setPassword(password)

cpds0setSavePasswordWhenSerialized(true)

Establecer propiedades especiacuteficas de agrupacioacuten de conexionescpds0setInitialPoolSize(initialPoolSize_)cpds0setMinPoolSize(minPoolSize_)cpds0setMaxPoolSize(maxPoolSize_)cpds0setMaxLifetime((int)(maxLifetime_1000)) convertir a segundoscpds0setMaxIdleTime((int)(maxIdleTime_1000)) convertir a segundoscpds0setPropertyCycle((int)(propertyCycle_1000)) convertir a segundoscpds0setReuseConnections(false) no reutilizar conexiones

Establecer la faacutebrica de contexto inicial que debe utilizarseSystemsetProperty(ContextINITIAL_CONTEXT_FACTORY

comsunjndifscontextRefFSContextFactory)

Obtener el contexto inicial JNDIContext ctx = new InitialContext()

Nota a continuacioacuten figura un procedimiento alternativo para establecer las propiedades de contexto localmente Properties env = new Properties() envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory) Contexto ctx = new InitialContext(env)

ctxrebind(mydatasource cpds0) Ahora pueden realizarse buacutesquedas en cpds por el

nombre mydatasource

if (DEBUG)Systemoutprintln(setup lookup(mydatasource + ))

AS400JDBCManagedConnectionPoolDataSource cpds1 = (AS400JDBCManagedConnectionPoolDataSource)ctxlookup(mydatasource) if (DEBUG) Systemoutprintln(setup cpds1getUser() == | + cpds1getUser() + |)

Crear un objeto DataSource estaacutendar que haga referencia a eacutel

if (DEBUG)Systemoutprintln(setup Constructing AS400JDBCManagedDataSource (mds0))

AS400JDBCManagedDataSource mds0 = new AS400JDBCManagedDataSource()mds0setDescription(DataSource que da soporte a la agrupacioacuten de conexiones)mds0setDataSourceName(mydatasource)ctxrebind(ConnectionPoolingDataSource mds0)

if (DEBUG)Systemoutprintln(setup lookup(ConnectionPoolingDataSource + ))

dataSource_ = (DataSource)ctxlookup(ConnectionPoolingDataSource)dataSource_setLogWriter(output_)if (DEBUG)Systemoutprintln(setup dataSource_getUser() == | +

((AS400JDBCManagedDataSource)dataSource_)getUser() + |)

mds_ = (AS400JDBCManagedDataSource)dataSource_catch (Exception e)

eprintStackTrace()Systemoutprintln(Error de configuracioacuten durante la creacioacuten del archivo de rastreo)

void displayConnectionType(Connection conn boolean specifiedDefaultId)

if (conn instanceof comibmas400accessAS400JDBCConnectionHandle)Systemoutprint((+ (specifiedDefaultId + -) + P))

else

IBM Toolbox para Java 433

Systemoutprint((+ (specifiedDefaultId + -) + NP))

Obtiene y devuelve conexiones desde y hacia una agrupacioacuten de conexiones durante un tiempopublic void runTest()

boolean ok = truetry

Systemoutprintln(Pruebe iniciada ejecutada en + new Date())

if (DEBUG)Systemoutprintln(Comprobacioacuten de estado justo despueacutes de la

creacioacuten del origen de datos+ (se espera que la agrupacioacuten auacuten no exista) )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten existe antes del primer getConnection())

Comprobar algunos meacutetodos getset para propiedades JDBCSystemoutprintln(Comprobando meacutetodos getset )

mds_setAccess(soacutelo lectura)if (mds_getAccess()equals(soacutelo lectura))

ok = falseSystemoutprintln(nERROR getAccess() ha devuelto un valor inesperado

+ | + mds_getAccess()+|)

boolean oldBool = mds_isBigDecimal()boolean newBool = (oldBool false true)mds_setBigDecimal(newBool)if (mds_isBigDecimal() = newBool)

ok = falseSystemoutprintln(nERROR isBigDecimal() ha devuelto un valor

inesperado + |+mds_isBigDecimal()+|)

mds_setBigDecimal(oldBool)

int oldInt = mds_getBlockCriteria()int newInt = (oldInt == 2 1 2)mds_setBlockCriteria(newInt)if (mds_getBlockCriteria() = newInt)

ok = falseSystemoutprintln(nERROR getBlockCriteria() ha devuelto un valor

inesperado + |+mds_getBlockCriteria()+|)

mds_setBlockCriteria(oldInt)

Comprobar algunos meacutetodos getset para propiedades de socket

oldBool = mds_isKeepAlive()newBool = (oldBool false true)mds_setKeepAlive(newBool)if (mds_isKeepAlive() = newBool)

ok = falseSystemoutprintln(nERROR isKeepAlive() ha devuelto un valor

inesperado + |+mds_isKeepAlive()+|)

mds_setKeepAlive(oldBool)

oldInt = mds_getReceiveBufferSize()newInt = (oldInt == 256 512 256)mds_setReceiveBufferSize(newInt)if (mds_getReceiveBufferSize() = newInt)

ok = falseSystemoutprintln(nERROR getReceiveBufferSize() ha devuelto un valor

inesperado + |+mds_getReceiveBufferSize()+|)

mds_setReceiveBufferSize(oldInt)

434 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln(CONNECTION 1)Object o = dataSource_getConnection()Systemoutprintln(ogetClass())Systemoutprintln(LOOK ABOVE)Connection c1 = dataSource_getConnection()

if (DEBUG)displayConnectionType(c1 true)

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes del primer getConnection() )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del primer getConnection())

if (TESTING_THREAD_SAFETY)

try

c1setAutoCommit(false)if (DEBUG)Systemoutprintln(SELECT FROM QIWSQCUSTCDT)

Statement s = c1createStatement()ResultSet rs = sexecuteQuery(SELECT FROM QIWSQCUSTCDT)while (rsnext ())

if (DEBUG)Systemoutprintln(rsgetString(2))

rsclose()sclose()

catch (Exception e)

eprintStackTrace()if (DEBUG)Systemoutprintln(Comprobacioacuten de estado despueacutes de un

error de conexioacuten muy grave )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado

despueacutes del error muy + grave)

Systemoutprintln(CONNECTION 2)Connection c2 = dataSource_getConnection(userid password)if (DEBUG)displayConnectionType(c2 false)

Systemoutprintln(CONNECTION 3)Connection c3 = dataSource_getConnection()if (DEBUG)displayConnectionType(c3 true)

c1close()

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes del primer close())

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del primer close())

Systemoutprintln(CONNECTION 4)Connection c4 = dataSource_getConnection()if (DEBUG) displayConnectionType(c4 true)

c1close() cerrar de nuevoc2close()c3close()c4close()

if (DEBUG) Systemoutprintln(Comprobando estado despueacutes del uacuteltimo close())if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del uacuteltimo close())

IBM Toolbox para Java 435

Iniciar los daemons de pruebaSystemoutprintln(Iniciando daemons de prueba)startThreads()

Ejecutar los daemons de prueba durante un tiempo comprobar el estado de la agrupacioacuten perioacutedicamente

long startTime = SystemcurrentTimeMillis()long endTime = startTime + timeToRunDaemons_while (SystemcurrentTimeMillis() lt endTime)

Systemoutprint(h) Permitir que los daemons se ejecuten durante un tiempo y luego comprobar el estado de la agrupacioacutentry

Threadsleep(poolHealthCheckCycle_)catch (InterruptedException ie) if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de iniciar los daemons de prueba)

Detener los daemons de pruebaSystemoutprintln(Deteniendo daemons de prueba)stopThreads()

if (DEBUG)Systemoutprintln(Comprobacioacuten de estado despueacutes de ejecutar

daemons connectionGetter)

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de detener los daemons de prueba)

if (TESTING_THREAD_SAFETY)

Systemoutprintln(CONNECTION 5)Connection c = dataSource_getConnection()if (DEBUG) displayConnectionType(c true)csetAutoCommit(false)if (DEBUG) Systemoutprintln(SELECT FROM QIWSQCUSTCDT)Statement s = ccreateStatement()ResultSet rs = sexecuteQuery(SELECT FROM QIWSQCUSTCDT)while (rsnext ())

if (DEBUG) Systemoutprintln(rsgetString(2))rsclose()sclose()cclose()

Systemoutprintln(nCerrando la agrupacioacuten)mds_closePool()

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes de cerrar la agrupacioacuten)

TracesetTraceJDBCOn(true) aseguacuterese de que se imprima el estado finalTracesetTraceOn(true)if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de cerrar la agrupacioacuten)

Systemoutprintln()if(ok==true)

Systemoutprintln(prueba ejecutada satisfactoriamente)else

Systemoutprintln(prueba anoacutemala)catch (Exception e)

Systemoutprintln(e)eprintStackTrace()

finally

Systemoutprintln(Prueba finalizada en + new Date())

436 IBM Toolbox para Java IBM Toolbox para Java

void startThreads()

Crear un grupo de hebras que llaman a getConnection()Thread[] threads = new Thread[numDaemons_]for (int i=0 iltnumDaemons_ i++)

ConnectionGetter getter Elegir aleatoriamente si este daemon especificaraacute el uid predeterminado o un uid exclusivoif (random_nextBoolean())

getter = new ConnectionGetter(useridpassword)if (TESTING_THREAD_SAFETY) puede utilizarse un userid ficticio

getter = new ConnectionGetter(Thread+i Pwd+i)else debe utilizarse un userid real

getter = new ConnectionGetter(useridpassword)

else

getter = new ConnectionGetter(null null)

threads[i] = new Thread(getter [+i+])threads[i]setDaemon(true)

Iniciar las hebrasfor (int i=0 iltnumDaemons_ i++)

threads[i]start()

void stopThreads()

Indicar a las hebras que se detengankeepDaemonsAlive_ = falsesynchronized (daemonSleepLock_)

daemonSleepLock_notifyAll()

Esperar a que los daemons se detengantry

Threadsleep(3000)catch (InterruptedException ie)

ConnectionGetter --------------------------------------------------------------------

Clase de ayuda Este daemon se activa a intervalos aleatorios y obtieneotra conexioacuten de la agrupacioacuten de conexiones o devuelve una conexioacuten obtenidaanteriormente a la agrupacioacuten

private final class ConnectionGetter implements Runnable

private String uid_private String pwd_private boolean useDefaultUid_private long maxSleepTime_private String threadName_private boolean firstConnection_ = trueArrayList connections_ = new ArrayList() lista de conexiones que actualmente son rsquopropiedadrsquo de este meacutetodo de obtencioacuten

ConnectionGetter(String uid String pwd) uid_ = uidpwd_ = pwdif (uid_ == null) useDefaultUid_ = trueelse useDefaultUid_ = falsemaxSleepTime_ = daemonMaxSleepTime_ copia propia que puede ajustarse

public void run()

threadName_ = ThreadcurrentThread()getName()

IBM Toolbox para Java 437

if (DEBUG) Systemoutprintln(ConnectionGetter(+threadName_+) Starting up)

try

while (keepDaemonsAlive_)

try

Elegir un tiempo de latencia aleatorio entre los valores miacutenimo y maacuteximolong sleepTime = Mathmax((long)(maxSleepTime_ random_nextFloat())

daemonMinSleepTime_) Nota nunca debe llamarse a wait(0) porque esperariacutea indefinidamentesynchronized (daemonSleepLock_)

try daemonSleepLock_wait(sleepTime)Systemoutprint()

catch (InterruptedException ie)

if (keepDaemonsAlive_) break

Decidir aleatoriamente si debe solicitarse otra conexioacuten o devolver una conexioacuten obtenida anteriormenteConnection connif (random_nextBoolean()) Dejar la decisioacuten a la suerte Solicitar otra conexioacuten

if (useDefaultUid_)

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) - get())

conn = dataSource_getConnection()else

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) -

+ get(+uid_+))conn = dataSource_getConnection(uid_ pwd_)

if (conn == null) Systemoutprintln(ConnectionGetter(+threadName_+) ERROR

+ getConnection() ha devuelto null)else

Ocasionalmente olvidar que somos propietarios de una conexioacuten y olvidar cerrarla Las conexiones hueacuterfanas deben en uacuteltimo teacutermino sobrepasar su tiempo de vida maacuteximo y el gestor de conexiones las repetiraacutefloat val = random_nextFloat()if (firstConnection_ || val lt 01)

convierta en rsquohueacuterfanasrsquo algunas de las conexiones obtenidasfirstConnection_ = false

else

connections_add(conn)if (DEBUG) displayConnectionType(conn useDefaultUid_)if (conn instanceof comibmas400accessAS400JDBCConnectionHandle) Hemos colocado una conexioacuten en una agrupacioacuten Intente aumentar el tiempo de ciclo

if (maxSleepTime_ gt 100)maxSleepTime_--

elsemaxSleepTime_ = 100

else No hemos colocado una conexioacuten en una agrupacioacuten Eso significa que la agrupacioacuten

debe estar al maacuteximo de capacidad Reduzca un poco el tiempo de ciclomaxSleepTime_ = maxSleepTime_ + 50

else Cerrar una conexioacuten de la que actualmente somos propietarios

if (connections_size() = 0) conn = (Connection)connections_remove(0)connclose()

438 IBM Toolbox para Java IBM Toolbox para Java

inner trycatch (Exception e)

eprintStackTrace()

outer while outer tryfinally

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) Stopping)

Devolver todas las conexiones que todaviacutea estaacuten en la listafor (int i=0 iltconnections_size() i++)

Connection conn = (Connection)connections_remove(0)try connclose() catch (Exception e) eprintStackTrace()

clase interna rsquoConnectionGetterrsquo

Ejemplo coacutemo se utiliza JDBCQuery para consultar una tablaEste programa utiliza el controlador JDBC de IBM Toolbox para Java para consultar una tabla y enviar sucontenido a la salida

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de JDBCQuery Este programa utiliza el controlador JDBC de IBM Toolbox para Java para consultar una tabla y enviar su contenido a la salida Sintaxis del mandato JDBCQuery sistema nombreColeccioacuten nombreTabla Por ejemplo JDBCQuery MySystem qiws qcustcdt

import javasql

public class JDBCQuery

Deacute formato a una serie (String) para que tenga la anchura especificadaprivate static String format (String s int width)

String formattedString

La serie es maacutes corta que la anchura especificada por lo que tenemos que rellenarla con blancosif (slength() lt width)

StringBuffer buffer = new StringBuffer (s)for (int i = slength() i lt width ++i)

bufferappend ( )formattedString = buffertoString()

En caso contrario tendremos que truncar la serieelse

formattedString = ssubstring (0 width)

return formattedString

IBM Toolbox para Java 439

public static void main (String[] parameters)

Compruebe los paraacutemetros de entradaif (parameterslength = 3)

Systemoutprintln()Systemoutprintln(Utilizacioacuten)Systemoutprintln()Systemoutprintln( JDBCQuery system collectionName tableName)Systemoutprintln()Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln()Systemoutprintln( JDBCQuery mySystem qiws qcustcdt)Systemoutprintln()return

String system = parameters[0]String collectionName = parameters[1]String tableName = parameters[2]

Connection connection = null

try

Cargue el controlador JDBC de IBM Toolbox para JavaDriverManagerregisterDriver(new comibmas400accessAS400JDBCDriver())

Obtenga una conexioacuten con la base de datos Debido a que no proporcionamos un ID de usuario ni una contrasentildea apareceraacute una solicitudconnection = DriverManagergetConnection (jdbcas400 + system)DatabaseMetaData dmd = connectiongetMetaData ()

Ejecute la consultaStatement select = connectioncreateStatement ()ResultSet rs = selectexecuteQuery (

SELECT FROM + collectionName + dmdgetCatalogSeparator() + tableName)

Obtenga informacioacuten sobre el conjunto de resultados Establezca que la anchura de la columna sea la longitud mayor de las dos la longitud de la etiqueta o la longitud de los datosResultSetMetaData rsmd = rsgetMetaData ()int columnCount = rsmdgetColumnCount ()String[] columnLabels = new String[columnCount]int[] columnWidths = new int[columnCount]for (int i = 1 i lt= columnCount ++i)

columnLabels[i-1] = rsmdgetColumnLabel (i)columnWidths[i-1] = Mathmax (columnLabels[i-1]length() rsmdgetColumnDisplaySize (i))

Enviacutee las cabeceras de columna a la salidafor (int i = 1 i lt= columnCount ++i)

Systemoutprint (format (rsmdgetColumnLabel(i) columnWidths[i-1]))Systemoutprint ( )

Systemoutprintln ()

Enviacutee una liacutenea de guiones a la salidaStringBuffer dashedLinefor (int i = 1 i lt= columnCount ++i)

for (int j = 1 j lt= columnWidths[i-1] ++j)Systemoutprint (-)

Systemoutprint ( )

440 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln ()

Itere a traveacutes de las filas del conjunto de resultados y enviacutee las columnas que hay en cada fila a la salidawhile (rsnext ())

for (int i = 1 i lt= columnCount ++i) String value = rsgetString (i)if (rswasNull ())

value = ltnullgtSystemoutprint (format (value columnWidths[i-1]))Systemoutprint ( )

Systemoutprintln ()

catch (Exception e) Systemoutprintln ()Systemoutprintln (ERROR + egetMessage())

finally

Borretry

if (connection = null)connectionclose ()

catch (SQLException e)

Hacer caso omiso

Systemexit (0)

Ejemplo coacutemo se utiliza JobList para listar informacioacuten de identificacioacuten detrabajoEste programa es un ejemplo del soporte de trabajos de IBM Toolbox para Java Lista informacioacuten deidentificacioacuten de trabajo para un usuario especiacutefico del sistema

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este programa es un ejemplo del soporte de trabajos de IBM Toolbox para Java Lista informacioacuten de identificacioacuten de trabajo para un usuario especiacutefico del sistema Sintaxis del mandato listJobs2 sistema idUsuario contrasentildea

import javaioimport javalangimport javautilimport comibmas400access

IBM Toolbox para Java 441

public class listJobs2 extends Object

Cree un objeto por si queremos llamar a meacutetodos no estaacuteticos

public static void main(String[] parameters)

listJobs2 me = new listJobs2()meMain(parameters)

Systemexit (0)

void Main(String[] parameters)

Si no se ha especificado un sistema visualizar texto de ayuda y salirif (parameterslength == 0)

showHelp()return

Asigne los paraacutemetros a las variables El primer paraacutemetro se supone que es el nombre del sistema el segundo es un ID de usuario y el tercero es una contrasentildea

String systemName = parameters[0]String userID = nullString password = null

if (parameterslength gt 1)userID = parameters[1]toUpperCase()

if (parameterslength gt= 2)password = parameters[2]toUpperCase()

Systemoutprintln( )

try

Cree un objeto AS400 con el nombre de sistema especificado por el usuario Establezca el ID de usuario y la contrasentildea si el usuario los especifica

AS400 as400 = new AS400(parameters[0])

if (userID = null)as400setUserId(userID)

if (password = null)as400setPassword(password)

Systemoutprintln(recuperando lista )

Cree un objeto jobList Este objeto se emplea para recuperar la lista de trabajos activos en el servidor

JobList jobList = new JobList(as400)

442 IBM Toolbox para Java IBM Toolbox para Java

Obtenga la lista de trabajos activosEnumeration list = jobListgetJobs()

Para cada trabajo de la listawhile (listhasMoreElements())

Obtenga un trabajo de la lista Si hay un ID de usuario especificado imprima informacioacuten de identificacioacuten solo si el usuario del trabajo coincide con el ID de usuario Si no se ha especificado un ID de usuario imprima informacioacuten para todos los trabajos del sistema

Job j = (Job) listnextElement()

if (userID = null)

if (jgetUser()trim()equalsIgnoreCase(userID))

Systemoutprintln(jgetName()trim() + +jgetUser()trim() + +jgetNumber())

else

Systemoutprintln(jgetName()trim() + +jgetUser()trim() + +jgetNumber())

catch (Exception e)

Systemoutprintln(Error inesperado)eprintStackTrace()

Visualice texto de ayuda si los paraacutemetros son incorrectosvoid showHelp()

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( listJobs2 sistema idUsuario contrasentildea)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( sistema = servidor al que debe conectarse)Systemoutprintln( idUsuario = ID de usuario vaacutelido en ese sistema )Systemoutprintln( contrasentildea = contrasentildea para el ID de usuario (opcional))Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( listJobs2 MYAS400 JavaUser pwd1)Systemoutprintln()Systemoutprintln()

IBM Toolbox para Java 443

Ejemplo coacutemo se utiliza JobList para obtener una lista de trabajosEste ejemplo obtiene una lista de trabajos del servidor y genera como salida el estado del trabajo seguidodel identificador del trabajo mediante las clases Job de IBM Toolbox para Java

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este programa es un ejemplo de las clases de trabajo de IBM Toolbox para Java Obtiene una lista de trabajos existentes en el servidor y enviacutea a la salida el estado del trabajo seguido del identificador de trabajo Sintaxis del mandato listJobs sistema idUsuario contrasentildea (El ID de usuario y la contrasentildea son opcionales)

import javaioimport javautilimport comibmas400access

public class listJobs extends Object

public static void main(String[] parameters)

listJobs me = new listJobs()meMain(parameters)

Systemexit (0)

void Main(String[] parameters)

Si no se ha especificado un sistema visualizar texto de ayuda y salirif (parameterslength == 0)

showHelp()return

Configure los paraacutemetros de objeto AS400 El primero es el nombre del sistema y debe especificarlo el usuario El segundo y el tercero son opcionales Son el ID de usuario y la contrasentildea Convierta el ID de usuario y la contrasentildea a mayuacutesculas antes de establecerlos en el objeto AS400String userID = nullString password = null

if (parameterslength gt 1)userID = parameters[1]toUpperCase()

if (parameterslength gt= 2)password = parameters[2]toUpperCase()

Systemoutprintln( )

try

Cree un objeto AS400 con el nombre de sistema especificado por el usuario

444 IBM Toolbox para Java IBM Toolbox para Java

AS400 as400 = new AS400(parameters[0])

Si se ha especificado un ID de usuario yo una contrasentildea estableacutezcalos en el objeto AS400if (userID = null)

as400setUserId(userID)

if (password = null)as400setPassword(password)

Cree un objeto lista de trabajos El paraacutemetro de entrada es el AS400 del que queremos obtener informacioacuten de trabajoJobList jobList = new JobList(as400)

Obtenga una lista de los trabajos que se ejecutan en el servidorEnumeration listOfJobs = jobListgetJobs()

Para cada trabajo de la lista imprima informacioacuten sobre el trabajowhile (listOfJobshasMoreElements())

printJobInfo((Job) listOfJobsnextElement() as400)

catch (Exception e)

Systemoutprintln(Error inesperado)Systemoutprintln(e)

void printJobInfo(Job job AS400 as400)

Cree los diversos conversores necesariosAS400Bin4 bin4Converter = new AS400Bin4( )AS400Text text26Converter = new AS400Text(26 as400)AS400Text text16Converter = new AS400Text(16 as400)AS400Text text10Converter = new AS400Text(10 as400)AS400Text text8Converter = new AS400Text(8 as400)AS400Text text6Converter = new AS400Text(6 as400)AS400Text text4Converter = new AS400Text(4 as400)

Tenemos el nombrenuacutemeroetc del trabajo a partir de la peticioacuten de lista Ahora cree una llamada de API del servidor para obtener el estado del trabajotry

Cree un objeto de llamada a programaProgramCall pgm = new ProgramCall(as400)

El programa servidor al que llamamos tiene 5 paraacutemetrosProgramParameter[] parmlist = new ProgramParameter[5]

El primer paraacutemetro es una matriz de bytes que contiene los datos de salida Asignaremos 1 K de almacenamiento intermedio para los datos de salidaparmlist[0] = new ProgramParameter( 1024 )

El segundo es el tamantildeo del almacenamiento intermedio de datos de salida (1 K)Integer iStatusLength = new Integer( 1024 )byte[] statusLength = bin4ConvertertoBytes( iStatusLength )parmlist[1] = new ProgramParameter( statusLength )

El tercero es el nombre del formato de los datos Usaremos el formato JOBI0200 porque tiene el estado del trabajo

IBM Toolbox para Java 445

byte[] statusFormat = text8ConvertertoBytes(JOBI0200)parmlist[2] = new ProgramParameter( statusFormat )

El cuarto es el nombre de trabajo con el formato nombre usuario nuacutemero El nombre debe tener 10 caracteres el usuario debe tener 10 caracteres y el nuacutemero debe tener 6 caracteres Usaremos un conversor de texto para la conversioacuten y el rellenobyte[] jobName = text26ConvertertoBytes(jobgetName())

int i = text10ConvertertoBytes(jobgetUser()jobName10)

i = text6ConvertertoBytes(jobgetNumber()jobName20)

parmlist[3] = new ProgramParameter( jobName )

El uacuteltimo paraacutemetro es el identificador de trabajo Lo dejaremos en blancobyte[] jobID = text16ConvertertoBytes( )parmlist[4] = new ProgramParameter( jobID )

Ejecute el programaif (pgmrun( QSYSLIBQUSRJOBIPGM parmlist )==false)

Si el programa ha fallado visualice el mensaje de errorAS400Message[] msgList = pgmgetMessageList()Systemoutprintln(msgList[0]getText())

else

De lo contrario el programa ha funcionado Enviacutee a la salida el estado seguido de nombreTrabajoUsuarioidTrabajobyte[] as400Data = parmlist[0]getOutputData()Systemoutprint( + text4ConvertertoObject(as400Data 107) + )

Systemoutprintln(jobgetName()trim() + +jobgetUser()trim() + +jobgetNumber() + )

catch (Exception e)

Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectosvoid showHelp()

Systemoutprintln( )Systemoutprintln( )Systemoutprintln( )Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln( )Systemoutprintln( listJobs sistema idUsuario contrasentildea)Systemoutprintln( )Systemoutprintln(Donde)Systemoutprintln( )Systemoutprintln( sistema = servidor al que debe conectarse)Systemoutprintln( idUsuario = ID de usuario vaacutelido en ese sistema (opcional))

446 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln( contrasentildea = contrasentildea para el ID de usuario (opcional))Systemoutprintln( )Systemoutprintln(Por ejemplo)Systemoutprintln( )Systemoutprintln( listJobs MYAS400 JavaUser pwd1)Systemoutprintln( )Systemoutprintln( )

Ejemplo coacutemo se utiliza JobLog para visualizar los mensajes de las anotacionesde trabajoEste programa es un ejemplo de la funcioacuten de anotaciones de trabajo de IBM Toolbox para JavaVisualizaraacute los mensajes de las anotaciones de trabajo correspondientes a un trabajo perteneciente alusuario actual

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este programa es un ejemplo de la funcioacuten de anotaciones de trabajo de IBM Toolbox para Java Visualizaraacute los mensajes de las anotaciones de un trabajo que pertenezca al usuario actual Sintaxis del mandato jobLogExample sistema idUsuario contrasentildea (La contrasentildea es opcional)

import javalangimport javautilimport comibmas400access

public class jobLogExample

public static void main (String[] args)

Si no se ha especificado un sistema y un usuario visualizar texto de ayuda y salirif (argslength lt 2)

Systemoutprintln(Utilizacioacuten jobLogExample sistema idUsuario ltcontrasentildeagt)return

String userID = null

try

Cree un objeto AS400 El nombre del sistema se ha pasado como primer argumento de liacutenea de mandatos Si un ID de usuario y una contrasentildea se han pasado en la liacutenea de mandatos estableacutezcalos tambieacutenAS400 system = new AS400 (args[0])

if (argslength gt 1)

userID = args[1]systemsetUserId(userID)

if (argslength gt 2)

IBM Toolbox para Java 447

systemsetPassword(args[2])

Cree un objeto lista de trabajos Este objeto se usaraacute para obtener la lista de trabajos activos del sistema Una vez que la lista de trabajos se haya recuperado el programa localizaraacute un trabajo para el usuario actualJobList jobList = new JobList(system)

Obtenga la lista de trabajos activos en el AS400Enumeration list = jobListgetJobs()

boolean Continue = true

Busque en la lista para localizar un trabajo para el usuario actualwhile (listhasMoreElements() ampamp Continue)

Job j = (Job) listnextElement()

if (jgetUser()trim()equalsIgnoreCase(userID))

Se ha encontrado un trabajo correspondiente al usuario actual Cree un objeto anotaciones de trabajo para este trabajoJobLog jlog = new JobLog(system jgetName() jgetUser() jgetNumber())

Enumere los mensajes de las anotaciones de trabajo e impriacutemalosEnumeration messageList = jloggetMessages()

while (messageListhasMoreElements())

AS400Message message = (AS400Message) messageListnextElement()Systemoutprintln(messagegetText())

Se ha encontrado un trabajo correspondiente al usuario actual por lo tanto salgaContinue = false

catch (Exception e)

Systemoutprintln (Error + egetMessage ())

Systemexit (0)

Ejemplo crear archivos en spoolEste ejemplo muestra coacutemo se crea un archivo en spool en un servidor a partir de una corriente deentrada

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo que muestra coacutemo crear un archivo en spool en un servidor a partir de una corriente de entrada

import javaioimport javautil

import comibmas400access

448 IBM Toolbox para Java IBM Toolbox para Java

class NPExampleCreateSplf

Meacutetodo para crear el archivo en spool en el servidor especificado y en la cola de salida especificada a partir de la corriente de entrada dadapublic SpooledFile createSpooledFile(AS400 system OutputQueue outputQueue InputStream in)

SpooledFile spooledFile = nulltry

byte[] buf = new byte[2048]int bytesReadSpooledFileOutputStream outPrintParameterList parms = new PrintParameterList()

Cree un objeto PrintParameterList con los valores que deseamos modificar del archivo de impresora predeterminado Modificaremos la cola de salida y el valor de copiasparmssetParameter(PrintObjectATTR_COPIES 4)if (outputQueue = null)

parmssetParameter(PrintObjectATTR_OUTPUT_QUEUE outputQueuegetPath())out = new SpooledFileOutputStream(system

parmsnullnull)

Lea los datos de la corriente de entrada hasta el final de la corriente pasando todos los datos a la corriente de salida del archivo en spooldo

bytesRead = inread(buf)if (bytesRead = -1)

outwrite(buf 0 bytesRead)

while (bytesRead = -1)

outclose() Cierre el archivo en spool

spooledFile = outgetSpooledFile() Obtenga una referencia al nuevo archivo en spool

catch (Exception e)

Maneje la excepcioacutenreturn spooledFile

Ejemplo crear archivos en spool SCSEste ejemplo utiliza la clase SCS3812Writer para generar una corriente de datos SCS y escribirla en unarchivo en spool del servidor

Esta aplicacioacuten puede tomar los argumentos indicados maacutes abajo o utilizar los valores predeterminadosdefinidosv Nombre del servidor que recibiraacute el archivo en spoolv Nombre de la cola de salida del servidor que recibiraacute el archivo en spool

IBM Toolbox para Java 449

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este fuente es un ejemplo de SCS3812Writer de IBM Toolbox para Java

import comibmas400access

class NPExampleCreateSCSSplf

private static final String DEFAULT_SYSTEM = new String(RCHAS1)private static final String DEFAULT_OUTQ = new String(QSYSLIBQUSRSYSLIBPRT01OUTQ)

public static void main(String [] args)

try

AS400 systemSpooledFileOutputStream outPrintParameterList parms = new PrintParameterList()SCS3812Writer scsWtr

Procese los argumentosif (argslength gt= 1)

system = new AS400(args[0]) Cree un objeto AS400 else

system = new AS400(DEFAULT_SYSTEM)

if (argslength gt= 2) Establezca la cola de salida

parmssetParameter(PrintObjectATTR_OUTPUT_QUEUE args[1]) else

parmssetParameter(PrintObjectATTR_OUTPUT_QUEUE DEFAULT_OUTQ)

out = new SpooledFileOutputStream(system parms null null)

scsWtr = new SCS3812Writer(out 37)

Escriba el contenido del archivo en spoolscsWtrsetLeftMargin(10)scsWtrabsoluteVerticalPosition(6)scsWtrsetFont(scsWtrFONT_COURIER_BOLD_5)scsWtrwrite( Impresioacuten en Java)scsWtrnewLine()scsWtrnewLine()scsWtrsetCPI(10)scsWtrwrite(Este documento se ha creado con IBM Toolbox para Java)scsWtrnewLine()scsWtrwrite(El resto de este documento muestra algunas tareas que)scsWtrnewLine()scsWtrwrite(pueden realizarse con la clase SCS3812Writer)scsWtrnewLine()scsWtrnewLine()scsWtrsetUnderline(true) scsWtrwrite(Estableciendo fonts) scsWtrsetUnderline(false)scsWtrnewLine()scsWtrsetFont(scsWtrFONT_COURIER_10) scsWtrwrite(Font Courier )scsWtrsetFont(scsWtrFONT_COURIER_BOLD_10) scsWtrwrite( Font Courier negrita )scsWtrsetFont(scsWtrFONT_COURIER_ITALIC_10) scsWtrwrite( Font Courier cursiva )scsWtrnewLine()scsWtrsetBold(true) scsWtrwrite(Font Courier negrita cursiva )scsWtrsetBold(false)

450 IBM Toolbox para Java IBM Toolbox para Java

scsWtrsetCPI(10)scsWtrnewLine()scsWtrnewLine()scsWtrsetUnderline(true) scsWtrwrite(Liacuteneas por pulgada) scsWtrsetUnderline(false)scsWtrnewLine()scsWtrwrite(Las liacuteneas siguientes deben imprimirse a 8 liacuteneas por pulgada)scsWtrnewLine()scsWtrnewLine()scsWtrsetLPI(8)scsWtrwrite(Liacutenea uno) scsWtrnewLine()scsWtrwrite(Liacutenea dos) scsWtrnewLine()scsWtrwrite(Liacutenea tres) scsWtrnewLine()scsWtrwrite(Liacutenea cuatro) scsWtrnewLine()scsWtrwrite(Liacutenea cinco) scsWtrnewLine()scsWtrwrite(Liacutenea seis) scsWtrnewLine()scsWtrwrite(Liacutenea siete) scsWtrnewLine()scsWtrwrite(Liacutenea ocho) scsWtrnewLine()scsWtrendPage()scsWtrsetLPI(6)scsWtrsetSourceDrawer(1)scsWtrsetTextOrientation(0)scsWtrabsoluteVerticalPosition(6)scsWtrwrite(Esta paacutegina debe imprimirse con orientacioacuten vertical de la bandeja 1)scsWtrendPage()scsWtrsetSourceDrawer(2)scsWtrsetTextOrientation(90)scsWtrabsoluteVerticalPosition(6)scsWtrwrite(Esta paacutegina debe imprimirse con orientacioacuten horizontal de la bandeja 2)scsWtrendPage()scsWtrclose()Systemoutprintln(Se ha creado el archivo en spool de ejemplo)Systemexit (0)

catch (Exception e)

Maneje el errorSystemoutprintln(Se ha producido una excepcioacuten al crear el archivo en spool + e)Systemexit (0)

Ejemplo leer archivos en spoolEste ejemplo muestra la utilizacioacuten de la clase PrintObjectInputStream para leer un archivo en spoolexistente

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo que lee un archivo en spool existente en el servidor Este fuente es un ejemplo de PrintObjectInputStream de IBM Toolbox para Java

trybyte[] buf = new byte[2048]int bytesReadAS400 sys = new AS400()SpooledFile splf = new SpooledFile( sys AS400

MICR nombre de archivo en spool17 nuacutemero de archivo en spoolQPRTJOB nombre de trabajoQUSER usuario del trabajo020791 ) nuacutemero de trabajo

IBM Toolbox para Java 451

Abra el archivo en spool para lectura y obtenga la corriente de entrada para leer en ellaInputStream in = splfgetInputStream(null)

do

Lea hasta buflength bytes de datos de spool en bruto en el almacenamiento intermedio Se devolveraacuten los bytes reales leiacutedos Los datos seraacuten una corriente de datos binarios de impresora que son el contenido del archivo en spoolbytesRead = inread( buf )if( bytesRead = -1 )

Procese los datos del archivo en spoolSystemoutprintln( Se han leiacutedo + bytesRead + bytes )

while( bytesRead = -1 )

inclose()catch( Exception e )

Excepcioacuten

Ejemplo leer y transformar archivos en spoolLos ejemplos siguientes muestran coacutemo configurar un objeto PrintParameterList para obtener diferentestransformaciones al leer datos de archivo en spool En los segmentos de coacutedigo que figuran acontinuacioacuten se supone que ya existe un archivo en spool en un servidor y el meacutetodo createSpooledFile()crea una instancia de la clase SpooledFile que representa el archivo en spool

Ejemplo de PrintObjectPageInputStream

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se crea un objeto PrintObjectPageInputStream para leer paacuteginas dedatos con el formato de imaacutegenes GIF En este caso cada una de las paacuteginas del archivo en spool setransformaraacute en una imagen GIF Se emplea un objeto de personalizacioacuten de estacioacuten de trabajo GIF paraespecificar la transformacioacuten de datos Cree un archivo en spoolSpooledFile splF = createSpooledFile()

Configure una lista de paraacutemetrosPrintParameterList printParms = new PrintParameterList()printParmssetParameter(PrintObjectATTR_WORKSTATION_CUST_OBJECT QSYSLIBQWPGIFWSCST)printParmssetParameter(PrintObjectATTR_MFGTYPE WSCST) q

Cree una corriente de entrada de paacutegina a partir del archivo en spoolPrintObjectPageInputStream is = splFgetPageInputStream(printParms)

Ejemplo de PrintObjectTransformedInputStream

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se crea un objeto PrintObjectTransformedInputStream para leer datoscon el formato de imaacutegenes TIFF Se emplea un objeto de personalizacioacuten de estacioacuten de trabajo TIFF(compresioacuten G4) para especificar la transformacioacuten de datos

452 IBM Toolbox para Java IBM Toolbox para Java

Cree un archivo en spoolSpooledFile splF = createSpooledFile()

Configure una lista de paraacutemetrosPrintParameterList printParms = new PrintParameterList()printParmssetParameter(PrintObjectATTR_WORKSTATION_CUST_OBJECT QSYSLIBQWPTIFFG4WSCST)printParmssetParameter(PrintObjectATTR_MFGTYPE WSCST) q

Cree una corriente de entrada transformada a partir del archivo en spoolPrintObjectTransformedInputStream is = splFgetTransformedInputStream(printParms)

Ejemplo de PrintObjectTransformedInputStream con el tipo y modelo de fabricante

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se crea un objeto PrintObjectTransformedInputStream para leer datoscon el formato de salida a una impresora ASCII Se emplea el tipo y modelo de fabricante HP4 paraespecificar la transformacioacuten de datos Cree un archivo en spoolSpooledFile splF = createSpooledFile()

Configure una lista de paraacutemetrosPrintParameterList printParms = new PrintParameterList()printParmssetParameter(PrintObjectATTR_MFGTYPE HP4)

Cree una corriente de entrada transformada a partir del archivo en spoolPrintObjectTransformedInputStream is = splFgetTransformedInputStream(printParms)

Ejemplo listar archivos en spool asiacutencronamente (utilizando escuchas)Este ejemplo muestra coacutemo se listan de modo asiacutencrono todos los archivos en spool de un servidor ymediante la interfaz PrintObjectListListener para obtener informacioacuten de retorno a medida que la lista seva construyendo El listado asiacutencrono permite que el llamante inicie el proceso de los objetos de la listaantes de que se construya toda la lista para lograr un tiempo de respuesta maacutes raacutepido de cara al usuario

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo que muestra coacutemo listar todos los archivos en spool de un servidor asiacutencronamente usando la interfaz PrintObjectListListener para obtener informacioacuten de retorno a medida que se construye la lista Listar asiacutencronamente permite al llamador empezar a procesar los objetos de la lista antes de que se construya toda la lista para lograr un tiempo de respuesta maacutes raacutepido para el usuario

import comibmas400accessAS400import comibmas400accessSpooledFileListimport comibmas400accessSpooledFileimport comibmas400accessExtendedIllegalStateExceptionimport comibmas400accessPrintObjectListListenerimport comibmas400accessPrintObjectListEvent

public class NPExampleListSplfAsynch extends Object implements PrintObjectListListener

private AS400 system_private boolean fListErrorprivate boolean fListClosedprivate boolean fListCompletedprivate Exception listExceptionprivate int listObjectCount

IBM Toolbox para Java 453

public NPExampleListSplfAsynch(AS400 system)

system_ = system

Liste todos los archivos en spool del servidor asiacutencronamente usando un escuchapublic void listSpooledFiles()

fListError = falsefListClosed = falsefListCompleted = falselistException = nulllistObjectCount = 0

try

String strSpooledFileNameboolean fCompleted = falseint listed = 0 size

if( system_ == null )

system_ = new AS400()

Systemoutprintln( Se estaacuten recibiendo todos los archivos en spool asiacutencronamenteusando un escucha)

SpooledFileList splfList = new SpooledFileList(system_)

Establezca filtros todos los usuarios en todas las colassplfListsetUserFilter(ALL)splfListsetQueueFilter(QSYSLIBALLLIBALLOUTQ)

Antildeada el escuchasplfListaddPrintObjectListListener(this)

Abra la lista openAsynchronously vuelve de inmediatosplfListopenAsynchronously()

do

Espere a que la lista tenga al menos 25 objetos o a que se completewaitForWakeUp()

fCompleted = splfListisCompleted()size = splfListsize()

Enviacutee a la salida el nombre de todos los objetos antildeadidos a la lista desde la uacuteltima activacioacutenwhile (listed lt size)

if (fListError)

Systemoutprintln( Excepcioacuten en lista - + listException)break

if (fListClosed)

Systemoutprintln( La lista se ha cerrado antes de completarse)break

SpooledFile splf = (SpooledFile)splfListgetObject(listed++)if (splf = null)

454 IBM Toolbox para Java IBM Toolbox para Java

Enviacutee a la salida el nombre de este archivo en spoolstrSpooledFileName = splfgetStringAttribute(SpooledFileATTR_SPOOLFILE)Systemoutprintln( archivo en spool = + strSpooledFileName)

while (fCompleted)

Borre despueacutes de haber terminado con la listasplfListclose()splfListremovePrintObjectListListener(this)

catch( ExtendedIllegalStateException e )

Systemoutprintln( La lista se ha cerrado antes de completarse)

catch( Exception e )

Maneje las demaacutes excepciones que existaneprintStackTrace()

Aquiacute es donde la hebra de primer plano espera a que la hebra de fondo la active cuando la lista se actualice o finaliceprivate synchronized void waitForWakeUp() throws InterruptedException

No vuelva al estado en reposo si el escucha indica que se ha completado la listaif (fListCompleted)

wait()

Los meacutetodos siguientes implementan la interfaz PrintObjectListListener

Se invoca este meacutetodo cuando se cierra la listapublic void listClosed(PrintObjectListEvent event)

Systemoutprintln(La lista se ha cerrado)fListClosed = truesynchronized(this)

Establezca el distintivo para indicar que la lista se ha completado y active la hebra de primer planofListCompleted = truenotifyAll()

Se invoca este meacutetodo cuando se ha completado la listapublic void listCompleted(PrintObjectListEvent event)

Systemoutprintln(La lista se ha completado)synchronized (this)

Establezca el distintivo para indicar que la lista se ha completado y active la hebra de primer planofListCompleted = truenotifyAll()

Se invoca este meacutetodo cuando se produce un error al recuperar

IBM Toolbox para Java 455

la listapublic void listErrorOccurred(PrintObjectListEvent event)

Systemoutprintln(La lista contiene un error)fListError = truelistException = eventgetException()synchronized(this)

Establezca el distintivo para indicar que la lista se ha completado y active la hebra de primer planofListCompleted = truenotifyAll()

Se invoca este meacutetodo cuando se abre la listapublic void listOpened(PrintObjectListEvent event)

Systemoutprintln(Se ha abierto la lista)listObjectCount = 0

Se invoca este meacutetodo cuando se antildeade un objeto a la listapublic void listObjectAdded(PrintObjectListEvent event)

Cada 25 objetos activaremos la hebra de primer plano para obtener los objetos maacutes recientesif( (++listObjectCount 25) == 0 )

Systemoutprintln(Se han antildeadido 25 objetos maacutes a la lista)synchronized (this)

Active la hebra de primer planonotifyAll()

public static void main( String args[] )

NPExampleListSplfAsynch list = new NPExampleListSplfAsynch(new AS400())try

listlistSpooledFiles()catch( Exception e )

eprintStackTrace()Systemexit (0)

Ejemplo listar archivos en spool asiacutencronamente (sin utilizar escuchas)Este ejemplo muestra coacutemo listar de forma asiacutencrona todos los archivos en spool del sistema sin utilizarla interfaz PrintObjectListListener

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este ejemplo muestra coacutemo listar todos los archivos en spool de un sistema asiacutencronamente sin usar la interfaz PrintObjectListListener Tras abrir la lista el llamador puede realizar alguacuten trabajo adicional antes de esperar a que se complete la lista

456 IBM Toolbox para Java IBM Toolbox para Java

Este fuente es un ejemplo de PrintObjectList de IBM Toolbox para Java

import javautilEnumeration

import comibmas400accessAS400import comibmas400accessSpooledFileListimport comibmas400accessSpooledFile

public class NPExampleListSplfAsynch2 extends Object

private AS400 system_

public NPExampleListSplfAsynch2(AS400 system)

system_ = system

Liste todos los archivos en spool del sistema asiacutencronamentepublic void listSpooledFiles()

try

String strSpooledFileNameint listed size

if( system_ == null )

system_ = new AS400()

Systemoutprintln(Se estaacuten recibiendo todos los archivos en spool asiacutencronamente sin usar un escucha)

SpooledFileList splfList = new SpooledFileList(system_)

Establezca filtros todos los usuarios en todas las colassplfListsetUserFilter(ALL)splfListsetQueueFilter(QSYSLIBALLLIBALLOUTQ)

Abra la lista openAsynchronously() vuelve inmediatamente No hemos antildeadido ninguacuten escuchasplfListopenAsynchronously()

Systemoutprintln( Realice alguacuten proceso antes de esperar)

Realice alguacuten proceso aquiacute mientras se construye la lista

Systemoutprintln( Ahora espere a que se complete la lista)

Espere a que se complete la listasplfListwaitForListToComplete()

Enumeration enum = splfListgetObjects()

Enviacutee a la salida el nombre de todos los objetos de la listawhile( enumhasMoreElements() )

SpooledFile splf = (SpooledFile)enumnextElement()if (splf = null)

Enviacutee a la salida el nombre de este archivo en spoolstrSpooledFileName = splfgetStringAttribute(SpooledFileATTR_SPOOLFILE)Systemoutprintln( archivo en spool = + strSpooledFileName)

IBM Toolbox para Java 457

Borre despueacutes de haber terminado con la listasplfListclose()

catch( Exception e )

Maneje las excepcioneseprintStackTrace()

public static void main( String args[] )

NPExampleListSplfAsynch2 list = new NPExampleListSplfAsynch2(new AS400())try

listlistSpooledFiles()catch( Exception e )

eprintStackTrace()Systemexit (0)

Ejemplo listar archivos en spool siacutencronamenteEste ejemplo muestra coacutemo se listan todos los archivos en spool de un servidor siacutencronamente El listadosiacutencrono no vuelve al llamador hasta que se ha construido toda la lista El usuario obtiene un tiempo derespuesta maacutes lento en comparacioacuten con el listado asiacutencrono

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo que muestra coacutemo se listan todos los archivos en spool de un servidor siacutencronamente Listar siacutencronamente no vuelve al llamador hasta que se construye la lista completa El usuario obtiene un tiempo de respuesta maacutes lento que al listar asiacutencronamente Este fuente es un ejemplo de PrintObjectList de IBM Toolbox para Java

import javautilEnumeration

import comibmas400accessAS400import comibmas400accessSpooledFileListimport comibmas400accessSpooledFile

public class NPExampleListSplfSynch

private AS400 system_ = new AS400()

public NPExampleListSplfSynch(AS400 system)

system_ = system

public void listSpooledFiles()

tryString strSpooledFileName

458 IBM Toolbox para Java IBM Toolbox para Java

if( system_ == null )

system_ = new AS400()

Systemoutprintln( Se estaacuten recibiendo todos los archivos en spool siacutencronamente)

SpooledFileList splfList = new SpooledFileList( system_ )

Establezca filtros todos los usuarios en todas las colassplfListsetUserFilter(ALL)splfListsetQueueFilter(QSYSLIBALLLIBALLOUTQ)

Abra la lista openSynchronously() vuelve cuando se completa la listasplfListopenSynchronously()Enumeration enum = splfListgetObjects()

while( enumhasMoreElements() )

SpooledFile splf = (SpooledFile)enumnextElement()if ( splf = null )

Enviacutee a la salida el nombre de este archivo en spoolstrSpooledFileName = splfgetStringAttribute(SpooledFileATTR_SPOOLFILE)Systemoutprintln( archivo en spool = + strSpooledFileName)

Borre despueacutes de haber terminado con la listasplfListclose()

catch( Exception e )

Maneje las excepcioneseprintStackTrace()

public static void main( String args[] )

NPExampleListSplfSynch list = new NPExampleListSplfSynch(new AS400())try

listlistSpooledFiles()catch( Exception e )

eprintStackTrace()Systemexit (0)

Ejemplo coacutemo se utiliza ProgramCallEste programa llama al programa servidor QWCRSSTS para recuperar el estado del sistema

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de llamada a programa Este programa llama al programa QWCRSSTS del servidor para recuperar el estado del sistema Sintaxis del mandato PCSystemStatusExample sistema Este fuente es un ejemplo de ProgramCall de IBM Toolbox para Java

IBM Toolbox para Java 459

import javaioimport javautilimport javamathimport javalangThreadimport comibmas400access

public class PCSystemStatusExample extends Object

public static void main(String[] parameters)

Systemoutprintln( )

Si no se ha especificado un sistema visualizar texto de ayuda y salir

if (parameterslength gt= 1)

try

Cree un objeto AS400 para el servidor que contiene el programa Supongamos que el primer paraacutemetro es el nombre de sistema

AS400 as400 = new AS400(parameters[0])

Cree la viacutea de acceso al programa

QSYSObjectPathName programName = new QSYSObjectPathName(QSYS QWCRSSTS PGM)

Cree el objeto de llamada a programa Asocie el objeto al objeto AS400 que representa el servidor del que se obtiene el estado

ProgramCall getSystemStatus = new ProgramCall(as400)

Cree la lista de paraacutemetros del programa Este programa tiene cinco paraacutemetros que se antildeadiraacuten a esta lista

ProgramParameter[] parmlist = new ProgramParameter[5]

El programa del servidor devuelve datos en el paraacutemetro 1 Es un paraacutemetro de entradasalida Asigne 64 bytes para este paraacutemetro

parmlist[0] = new ProgramParameter( 64 )

El paraacutemetro 2 es el tamantildeo de almacenamiento intermedio del paraacutemetro 1 Es un paraacutemetro de entradasalida Establezca su valor en 64 convieacutertalo al formato del servidor y antildeada el paraacutemetro a la lista de paraacutemetros

AS400Bin4 bin4 = new AS400Bin4( )Integer iStatusLength = new Integer( 64 )

460 IBM Toolbox para Java IBM Toolbox para Java

byte[] statusLength = bin4toBytes( iStatusLength )parmlist[1] = new ProgramParameter( statusLength )

El paraacutemetro 3 es el paraacutemetro de formato de estado Es un paraacutemetro de entradasalida Establezca el valor de serie convieacutertalo al formato del servidor y antildeada el paraacutemetro a la lista de paraacutemetros

AS400Text text1 = new AS400Text(8 as400)byte[] statusFormat = text1toBytes(SSTS0200)parmlist[2] = new ProgramParameter( statusFormat )

El paraacutemetro 4 es el paraacutemetro de estadiacutesticas de restablecimiento Es un paraacutemetro de entradasalida Establezca el valor de serie convieacutertalo al formato del servidor y antildeada el paraacutemetro a la lista de paraacutemetros

AS400Text text3 = new AS400Text(10 as400)byte[] resetStats = text3toBytes(NO )parmlist[3] = new ProgramParameter( resetStats )

El paraacutemetro 5 es el paraacutemetro de informacioacuten de error Es un paraacutemetro de entradasalida Antildeaacutedalo a la lista de paraacutemetros

byte[] errorInfo = new byte[32]parmlist[4] = new ProgramParameter( errorInfo 0 )

Establezca el programa al que se llamaraacute y la lista de paraacutemetros para el objeto de llamada a programa

getSystemStatussetProgram(programNamegetPath() parmlist )

Ejecute el programa y estableacutezcalo en reposo Ejecutamos dos veces el programa porque el primer conjunto de resultados estaacute inflado Si descartamos el primer conjunto de resultados y volvemos a ejecutar el mandato cinco segundos despueacutes el nuacutemero seraacute maacutes preciso

getSystemStatusrun()Threadsleep(5000)

Ejecute el programa

if (getSystemStatusrun()=true)

Si no se ejecuta el programa obtenga la lista de mensajes de error del objeto programa y visualice los mensajes El error seriacutea similar a programa no encontrado o usuario no autorizado para el programa

AS400Message[] msgList = getSystemStatusgetMessageList()

Systemoutprintln(No se ha ejecutado el programa Mensajes del servidor)

for (int i=0 iltmsgListlength i++)

Systemoutprintln(msgList[i]getText())

IBM Toolbox para Java 461

De lo contrario el programa se ha ejecutado

else

Cree un conversor numeacuterico de servidor a Java Este conversor se usaraacute en la seccioacuten siguiente para convertir la salida numeacuterica del formato de servidor al formato Java

AS400Bin4 as400Int = new AS400Bin4( )

Obtenga los resultados del programa Los datos de salida estaacuten en una matriz de bytes en el primer paraacutemetro

byte[] as400Data = parmlist[0]getOutputData()

La utilizacioacuten de la CPU es un campo numeacuterico que empieza en el byte 32 del almacenamiento intermedio de salida Convierta este nuacutemero del formato de servidor al formato Java y enviacutee el nuacutemero a la salida

Integer cpuUtil = (Integer)as400InttoObject( as400Data 32 )cpuUtil = new Integer(cpuUtilintValue()10)Systemoutprint(Utilizacioacuten de CPU )Systemoutprint(cpuUtil)Systemoutprintln()

La utilizacioacuten de DASD es un campo numeacuterico que empieza en el byte 52 del almacenamiento intermedio de salida Convierta este nuacutemero del formato de servidor al formato Java y enviacutee el nuacutemero a la salida

Integer dasdUtil = (Integer)as400InttoObject( as400Data 52 )dasdUtil = new Integer(dasdUtilintValue()10000)Systemoutprint(Utilizacioacuten de DASD )Systemoutprint(dasdUtil)Systemoutprintln()

El nuacutemero de trabajos es un campo numeacuterico que empieza en el byte 36 del almacenamiento intermedio de salida Convierta este nuacutemero del formato de servidor al formato Java y enviacutee el nuacutemero a la salida

Integer nj = (Integer)as400InttoObject( as400Data 36 )Systemoutprint(Trabajos activos )Systemoutprintln(nj)

Este programa ha terminado de ejecutar el programa desconecte del servidor de mandatos en el servidor La llamada a programa y la llamada a mandato utilizan el mismo servidor en el servidor

as400disconnectService(AS400COMMAND)catch (Exception e)

Si alguna de las operaciones anteriores ha fallado indique que el programa ha fallado

462 IBM Toolbox para Java IBM Toolbox para Java

y enviacutee la excepcioacuten a la salida

Systemoutprintln(La llamada a programa ha fallado)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectos

else

Systemoutprintln( )Systemoutprintln( )Systemoutprintln( )Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln( )Systemoutprintln( PCSystemStatusExample myServer)Systemoutprintln( )Systemoutprintln(Donde)Systemoutprintln( )Systemoutprintln( myServer = obtener el estado de este servidor )Systemoutprintln( )Systemoutprintln(Por ejemplo)Systemoutprintln( )Systemoutprintln( PCSystemStatusExample mySystem)Systemoutprintln( )Systemoutprintln( )

Systemexit (0)

Ejemplo coacutemo se utilizan las clases de acceso a nivel de registroEste programa de ejemplo de IBM Toolbox para Java solicitaraacute al usuario el nombre del servidor y elarchivo que se debe visualizar El archivo debe existir y ha de contener registros Cada registro delarchivo se visualizaraacute en Systemout

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de acceso a nivel de registro Este programa solicitaraacute el nombre del servidor y el archivo que se debe visualizar El archivo debe existir y ha de contener registros Cada registro del archivo se visualizaraacute en la salida del sistema (Systemout) Sintaxis de la llamada java RLSequentialAccessExample Este fuente es un ejemplo de RecordLevelAccess de IBM Toolbox para Java

import javaioimport javautilimport comibmas400access

public class RLSequentialAccessExample

public static void main(String[] parameters)

Se ha creado un lector para obtener datos de entrada del usuarioBufferedReader inputStream = new BufferedReader(new InputStreamReader(Systemin)1)

IBM Toolbox para Java 463

Declare variables para los nombres de sistema biblioteca archivo y miembroString systemName = String library = String file = String member =

Obtenga el nombre del sistema y el archivo que se visualizaraacute del usuarioSystemoutprintln()try

Systemoutprint(Nombre del sistema )systemName = inputStreamreadLine()

Systemoutprint(Biblioteca en la que existe el archivo )library = inputStreamreadLine()

Systemoutprint(Nombre de archivo )file = inputStreamreadLine()

Systemoutprint(Nombre de miembro (pulse Intro para el primer miembro) )member = inputStreamreadLine()if (memberequals())

member = FIRST

Systemoutprintln()catch (Exception e)

Systemoutprintln(Error al obtener entrada de usuario)eprintStackTrace()Systemexit (0)

Cree un objeto AS400 y establezca conexioacuten para el servicio de acceso a nivel de registroAS400 system = new AS400(systemName)try

systemconnectService(AS400RECORDACCESS)catch(Exception e)

Systemoutprintln(No ha sido posible conectar para acceso a nivel de registro)Systemoutprintln(Vea si en el archivo readme hay instrucciones especiales relacionadas con el

acceso a nivel de registro)eprintStackTrace()Systemexit (0)

Cree un objeto QSYSObjectPathName para obtener el formato del nombre de viacutea del sistema de archivos integrado del archivo que se visualizaraacuteQSYSObjectPathName filePathName = new QSYSObjectPathName(library file member MBR)

Cree un objeto SequentialFile que represente el archivo que se visualizaraacuteSequentialFile theFile = new SequentialFile(system filePathNamegetPath())

Recupere el formato de registro correspondiente al archivoAS400FileRecordDescription recordDescription =

new AS400FileRecordDescription(system filePathNamegetPath())try

RecordFormat[] format = recordDescriptionretrieveRecordFormat()

Establezca el formato de registro del archivotheFilesetRecordFormat(format[0])

464 IBM Toolbox para Java IBM Toolbox para Java

Abra el archivo para lectura Lea 100 registros en una sola vez si es posibletheFileopen(AS400FileREAD_ONLY 100 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Visualice cada uno de los registros del archivoSystemoutprintln(Se va a visualizar el archivo + librarytoUpperCase() +

+ filetoUpperCase() + ( + theFilegetMemberName()trim() + ))

Record record = theFilereadNext()while (record = null)

Systemoutprintln(record)record = theFilereadNext()

Systemoutprintln()

Cierre el archivotheFileclose()

Desconecte del servicio de acceso a nivel de registrosystemdisconnectService(AS400RECORDACCESS)

catch (Exception e)

Systemoutprintln(Se produjo un error al intentar visualizar el archivo)eprintStackTrace()

try

Cierre el archivotheFileclose()

catch(Exception x)

Desconecte del servicio de acceso a nivel de registrosystemdisconnectService(AS400RECORDACCESS)Systemexit (0)

Aseguacuterese de que finaliza la aplicacioacuten en el readme encontraraacute detallesSystemexit (0)

Ejemplo coacutemo se utilizan las clases de acceso a nivel de registro para leerregistros de un archivoEste programa utiliza las clases de acceso a nivel de registro para leer registros de un archivo delservidor

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de acceso a nivel de registro Este programa utiliza las clases de acceso a nivel de registro para leer registros de un archivo del servidor Sintaxis del mandato java RLReadFile sistema Este programa lee los registros del archivo de base de datos de ejemplo de CA400 (QCUSTCDT en la biblioteca QIWS) Si cambia este ejemplo para actualizar registros debe hacer una copia de QCUSTCDT y actualizar la copia

IBM Toolbox para Java 465

Este fuente es un ejemplo de acceso a nivel de registro de IBM Toolbox para Java

import javaioimport javautilimport javamathimport comibmas400access

public class RLReadFile extends Object

public static void main(String[] parameters)

String system =

Continuacutee uacutenicamente si se ha especificado un nombre de sistema

if (parameterslength gt= 1)

try

Supongamos que el primer paraacutemetro es el nombre de sistema

system = parameters[0]

Cree un objeto AS400 para el servidor que tiene el archivo

AS400 as400 = new AS400(system)

Cree una descripcioacuten de registro para el archivo El archivo es QCUSTCDT de la biblioteca QIWS

ZonedDecimalFieldDescription customerNumber =new ZonedDecimalFieldDescription(new AS400ZonedDecimal(60)

NUacuteMCLI)CharacterFieldDescription lastName =

new CharacterFieldDescription(new AS400Text(8 as400) APELLIDO)

CharacterFieldDescription initials =new CharacterFieldDescription(new AS400Text(3 as400) INIC)

CharacterFieldDescription street =new CharacterFieldDescription(new AS400Text(13 as400) CALLE)

CharacterFieldDescription city =new CharacterFieldDescription(new AS400Text(6 as400) CIUDAD)

CharacterFieldDescription state =new CharacterFieldDescription(new AS400Text(2 as400) ESTADO)

ZonedDecimalFieldDescription zipCode =new ZonedDecimalFieldDescription(new AS400ZonedDecimal(50)

COacuteDPOST)ZonedDecimalFieldDescription creditLimit =

new ZonedDecimalFieldDescription(new AS400ZonedDecimal(40)LMTCDT)

ZonedDecimalFieldDescription chargeCode =new ZonedDecimalFieldDescription(new AS400ZonedDecimal(10)

COacuteDCARG)ZonedDecimalFieldDescription balanceDue =

new ZonedDecimalFieldDescription(new AS400ZonedDecimal(62)SALDO)

466 IBM Toolbox para Java IBM Toolbox para Java

ZonedDecimalFieldDescription creditDue =new ZonedDecimalFieldDescription(new AS400ZonedDecimal(62)

CDTVENC)

El nombre de formato de registro debe especificarse para un archivo DDM En el caso del archivo QCUSTCDT su formato de registro se llama CUSREC

RecordFormat qcustcdt = new RecordFormat(CUSREC)

qcustcdtaddFieldDescription(customerNumber)qcustcdtaddFieldDescription(lastName)qcustcdtaddFieldDescription(initials)qcustcdtaddFieldDescription(street)qcustcdtaddFieldDescription(city)qcustcdtaddFieldDescription(state)qcustcdtaddFieldDescription(zipCode)qcustcdtaddFieldDescription(creditLimit)qcustcdtaddFieldDescription(chargeCode)qcustcdtaddFieldDescription(balanceDue)qcustcdtaddFieldDescription(creditDue)

Cree el objeto de archivo secuencial que representa el archivo en el servidor Utilizaremos un objeto QSYSObjectPathName para obtener el nombre del archivo con el formato correcto

QSYSObjectPathName fileName = new QSYSObjectPathName(QIWSQCUSTCDTFILE)

SequentialFile file = new SequentialFile(as400 fileNamegetPath())

Permita que el objeto de archivo sepa el formato de los registros

filesetRecordFormat(qcustcdt)

Abra el archivo para acceso solo de lectura Especifique un factor de bloques igual a 10 (el objeto de archivo obtendraacute 10 registros cuando acceda al servidor para los datos) No utilice el control de compromiso

fileopen(SequentialFileREAD_ONLY10SequentialFileCOMMIT_LOCK_LEVEL_NONE)

Lea el primer registro del archivo

Record data = filereadNext()

Itere en bucle mientras haya registros en el archivo (mientras no se haya llegado al final del archivo)

while (data = null)

Visualice el registro uacutenicamente si el saldo es superior a cero En ese caso visualice el nombre del cliente y el saldo El coacutedigo siguiente obtiene campos del registro por nombre de campo Al recuperarse el campo del registro el campo se convierte del formato de servidor al formato Java

IBM Toolbox para Java 467

if (((BigDecimal)datagetField(BALDUE))floatValue() gt 00)

Systemoutprint((String) datagetField(INIC) + )Systemoutprint((String) datagetField(APELLIDO) + )Systemoutprintln((BigDecimal) datagetField(SALDO))

Lea el registro siguiente del archivo

data = filereadNext()

Cuando no haya maacutes registros para leer desconeacutectese del servidor

as400disconnectAllServices()

catch (Exception e)

Si alguna de las operaciones anteriores ha fallado imprima un mensaje de error y enviacutee la excepcioacuten a la salida

Systemoutprintln(No se ha podido leer el archivo)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectos

else

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( RLReadFile as400)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( as400 = sistema que contiene el archivo)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( RLReadFile miSistema)Systemoutprintln()Systemoutprintln()Systemoutprintln(Nota este programa lee el archivo de base de datos QIWSQCUSTCDT )Systemoutprintln()Systemoutprintln()

Systemexit (0)

Ejemplo coacutemo se utilizan las clases de acceso a nivel de registro para leerregistros por claveEste programa utiliza las clases de acceso a nivel de registro para leer registros por clave de un archivodel servidor Se pediraacute al usuario el nombre del servidor en el que se ejecutaraacute y la biblioteca en la que secrearaacute el archivo QCUSTCDTKY

468 IBM Toolbox para Java IBM Toolbox para Java

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de acceso a nivel de registro Este programa utiliza las clases de acceso a nivel de registro para leer registros por clave de un archivo del servidor Se pediraacute al usuario el nombre del servidor para el que se haraacute la ejecucioacuten y la biblioteca en que se crearaacute el archivo QCUSTCDTKY Sintaxis del mandato java RLKeyedFileExample Este programa copiaraacute los registros del archivo de base de datos de ejemplo de IBM i Access para Windows (QCUSTCDT en la biblioteca QIWS) en el archivo QCUSTCDTKY con el mismo formato que QIWSQCUSTCDT pero que tiene establecido el campo NUacuteMCLI como clave del archivo Este fuente es un ejemplo de acceso a nivel de registro de IBM Toolbox para Java

import javaioimport javautilimport javamathimport comibmas400access

public class RLKeyedFileExample

public static void main(String[] parameters)

Se ha creado un lector para obtener entrada del usuarioBufferedReader inputStream = new BufferedReader(new InputStreamReader(Systemin)1)

Declare variables para los nombres de sistema biblioteca archivo y miembroString systemName = String library =

Obtenga el nombre de sistema del usuarioSystemoutprintln()try

Systemoutprint(Nombre del sistema )systemName = inputStreamreadLine()

Systemoutprint(Biblioteca en la que se crearaacute el archivo QCUSTCDTKY )library = inputStreamreadLine()

catch(Exception e)

Systemoutprintln(Error al obtener entrada de usuario)eprintStackTrace()Systemexit (0)

Cree un objeto AS400 y establezca conexioacuten para el servicio de acceso a nivel de registroAS400 system = new AS400(systemName)try

systemconnectService(AS400RECORDACCESS)catch(Exception e)

Systemoutprintln(No ha sido posible conectar para acceso a nivel de registro)Systemoutprintln(Vea si en el archivo readme hay instrucciones especiales relacionadas con el

IBM Toolbox para Java 469

acceso a nivel de registro)eprintStackTrace()Systemexit (0)

RecordFormat qcustcdtFormat = nulltry

Cree el objeto RecordFormat para crear el archivo El formato de registro del nuevo archivo seraacute el mismo que el del archivo QIWSQCUSTCDT Sin embargo haremos que el campo NUacuteMCLI sea un campo claveAS400FileRecordDescription recordDescription =

new AS400FileRecordDescription(system QSYSLIBQIWSLIBQCUSTCDTFILE)

Solo hay un formato de registro para el archivo por lo que debe tomar el primer (y uacutenico) elemento de la matriz RecordFormat devuelta como RecordFormat para el archivoSystemoutprintln(Se estaacute recuperando formato de registro de QIWSQCUSTCDT)qcustcdtFormat = recordDescriptionretrieveRecordFormat()[0] Indique que NUacuteMCLI es un campo claveqcustcdtFormataddKeyFieldDescription(CUSNUM)

catch(Exception e)

Systemoutprintln(No ha sido posible recuperar el formato de registro de QIWSQCUSTCDT)eprintStackTrace()Systemexit (0)

Cree el objeto de archivo por clave que representa el archivo que crearemos en el servidor Utilizaremos un objeto QSYSObectPathName para obtener el nombre del archivo con el formato correctoQSYSObjectPathName fileName = new QSYSObjectPathName(library

QCUSTCDTKYFILEMBR)

KeyedFile file = new KeyedFile(system fileNamegetPath())

try

Systemoutprintln(Se estaacute creando el archivo + library + QCUSTCDTKY) Cree el archivo con el objeto qcustcdtFormatfilecreate(qcustcdtFormat Archivo QCUSTCDT por clave)

Llene el archivo con los registros incluidos en QIWSQCUSTCDTcopyRecords(system library)

Abra el archivo para acceso solo de lectura Dado que accederemos al archivo de forma aleatoria especifique el factor de bloques 1 El paraacutemetro nivel de bloqueo de compromiso no se tendraacute en cuenta porque el control de compromiso no se ha iniciadofileopen(AS400FileREAD_ONLY

1AS400FileCOMMIT_LOCK_LEVEL_NONE)

Suponga que deseamos visualizar la informacioacuten de los clientes 192837 392859 y 938472 El campo NUacuteMCLI es un campo decimal con zona de longitud 6 sin posiciones decimales Por consiguiente el valor del campo clave se representa con un BigDecimalBigDecimal[] keyValues = new BigDecimal(192837)

new BigDecimal(392859)new BigDecimal(938472)

Cree la clave para leer los registros La clave para un objeto KeyedFile se especifica con Object[]Object[] key = new Object[1]

470 IBM Toolbox para Java IBM Toolbox para Java

Record data = nullfor (int i = 0 i lt keyValueslength i++)

Configure la clave para lecturakey[0] = keyValues[i]

Lea el registro correspondiente al nuacutemero de cliente keyValues[i]data = fileread(key)if (data = null)

Visualice el registro uacutenicamente si el saldo es superior a cero En ese caso visualice el nombre del cliente y el saldo El coacutedigo siguiente obtiene campos del registro por nombre de campo Al recuperarse el campo del registro el campo se convierte del formato de servidor al formato Javaif (((BigDecimal)datagetField(BALDUE))floatValue() gt 00)

Systemoutprint((String) datagetField(INIC) + )Systemoutprint((String) datagetField(APELLIDO) + )Systemoutprintln((BigDecimal) datagetField(SALDO))

Todas las operaciones con el archivo han terminadofileclose()

Elimine el archivo del sistema del usuariofiledelete()

catch(Exception e)

Systemoutprintln(No se ha podido crearleer en QTEMPQCUSTCDT)eprintStackTrace()try

fileclose() Elimine el archivo del sistema del usuariofiledelete()

catch(Exception x)

Todas las operaciones con el acceso a nivel de registro han terminado desconecte del servidor de acceso a nivel de registrosystemdisconnectService(AS400RECORDACCESS)Systemexit (0)

public static void copyRecords(AS400 system String library)

Utilice la clase CommandCall para ejecutar el mandato CPYF para copiar los registros de QIWSQCUSTCDT en QTEMPQCUSTCDTCommandCall c = new CommandCall(system CPYF FROMFILE(QIWSQCUSTCDT) TOFILE(

+ library + QCUSTCDTKY) MBROPT(REPLACE))try

Systemoutprintln(Se estaacuten copiando registros de QIWSQCUSTCDT en + library + QCUSTCDTKY)

crun()AS400Message[] msgs = cgetMessageList()if (msgs[0]getID()equals(CPC2955))

Systemoutprintln(No se ha podido llenar con datos + library + QCUSTCDTKY)

IBM Toolbox para Java 471

for (int i = 0 i lt msgslength i++)

Systemoutprintln(msgs[i])Systemexit (0)

catch(Exception e)

Systemoutprintln(No se ha podido llenar con datos + library + QCUSTCDTKY)Systemexit (0)

Ejemplo coacutemo se utiliza UserList para listar todos los usuarios de un grupodeterminadoEste coacutedigo fuente es un ejemplo de UserList de IBM Toolbox para Java Este programa lista todos losusuarios de un grupo determinado

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de lista de usuarios Este programa lista todos los usuarios de un grupo determinado Sintaxis del mandato UserListExample sistema grupo Este fuente es un ejemplo de UserList de IBM Toolbox para Java

import comibmas400accessimport comibmas400vaccessimport javautilEnumeration

public class UserListExample

public static void main (String[] args)

Si no se ha especificado un sistema y un grupo visualizar texto de ayuda y salirif (argslength = 2)

Systemoutprintln(Utilizacioacuten UserListExample sistema grupo)return

try

Cree un objeto AS400 El nombre del sistema se ha pasado como primer argumento de liacutenea de mandatosAS400 system = new AS400 (args[0])

El nombre de grupo se ha pasado como segundo argumento de liacutenea de mandatosString groupName = args[1]

Cree el objeto lista de usuariosUserList userList = new UserList (system)

472 IBM Toolbox para Java IBM Toolbox para Java

Obtenga una lista de los usuarios del grupo especificadouserListsetUserInfo (UserListMEMBER)userListsetGroupInfo (groupName)Enumeration enum = userListgetUsers ()

Itere por la lista e imprima los nombres y las descripciones de los usuarioswhile (enumhasMoreElements ())

User u = (User) enumnextElement ()Systemoutprintln (Nombre de usuario + ugetName ())Systemoutprintln (Descripcioacuten + ugetDescription ())Systemoutprintln ()

catch (Exception e)

Systemoutprintln (Error + egetMessage ())

Systemexit (0)

Ejemplos JavaBeansEn esta seccioacuten figura una lista de los ejemplos de coacutedigo que se proporcionan en la informacioacuten de beande IBM Toolbox para Java

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo coacutedigo de bean de IBM Toolbox para JavaEl siguiente ejemplo crea un objeto AS400 y un objeto CommandCall y luego registra escuchas en losobjetos Los escuchas de los objetos imprimen un comentario cuando el servidor se conecta o desconectay cuando el objeto CommandCall completa la ejecucioacuten de un mandato

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de beans Este programa utiliza el soporte de JavaBeans en las clases de IBM Toolbox para Java

IBM Toolbox para Java 473

Sintaxis del mandato BeanExample

import comibmas400accessAS400import comibmas400accessCommandCallimport comibmas400accessConnectionListenerimport comibmas400accessConnectionEventimport comibmas400accessActionCompletedListenerimport comibmas400accessActionCompletedEvent

class BeanExample

AS400 as400_ = new AS400()CommandCall cmd_ = new CommandCall( as400_ )

BeanExample()

Siempre que el sistema se conecte o desconecte imprima un comentario Para ello antildeada un escucha al objeto AS400 Cuando un sistema se conecte o desconecte el objeto AS400 llamaraacute a este coacutedigo

as400_addConnectionListener(new ConnectionListener()

public void connected(ConnectionEvent event)

Systemoutprintln( Sistema conectado )public void disconnected(ConnectionEvent event)

Systemoutprintln( Sistema desconectado )

)

Siempre que un mandato se ejecute hasta completarse imprima un comentario Para ello antildeada un escucha al objeto commandCall El objeto commandCall llamaraacute a este coacutedigo cuando ejecute un mandato

cmd_addActionCompletedListener(new ActionCompletedListener()

public void actionCompleted(ActionCompletedEvent event)

Systemoutprintln( Mandato completado )

)

void runCommand()

try

Ejecute un mandato Los escuchas imprimiraacuten comentarios cuando el sistema se conecte y cuando el mandato se haya ejecutado hasta completarsecmd_run( TESTCMD PARMS )

catch (Exception ex)

Systemoutprintln( ex )

474 IBM Toolbox para Java IBM Toolbox para Java

public static void main(String[] parameters)

BeanExample be = new BeanExample()

berunCommand()

Systemexit (0)

Ejemplo crear beans con un constructor visual de beansEn este ejemplo se utiliza el editor de composicioacuten de IBM VisualAge para Java Enterprise Edition V20pero los demaacutes constructores visuales de beans son similares Este ejemplo crea un applet para un botoacutenque cuando se pulsa ejecuta un mandato en el servidorv Arrastre un botoacuten y sueacuteltelo en el applet (El bean Button se halla en el constructor de beans en la

parte izquierda de la pestantildea Composicioacuten visual en la figura 1)v Suelte un bean CommandCall y un bean AS400 fuera del applet (Los beans se hallan en el constructor

de beans en la parte izquierda de la pestantildea Composicioacuten visual en la figura 1)

Figura 1 Ventana del Editor de composicioacuten visual de VisualAge - guiBeanExample

v Edite las propiedades del bean (Para editarlas seleccione el bean y luego pulse el botoacuten derecho delratoacuten para visualizar una ventana una de cuyas opciones es Propiedades)ndash Cambie la etiqueta del bean Button por Run command (Ejecutar mandato) como se muestra en la

figura 2Figura 2 cambiar la etiqueta del botoacuten por Run command o Ejecutar mandato

IBM Toolbox para Java 475

ndash Cambie el nombre de sistema del bean AS400 por TestSysndash Cambie el ID de usuario del bean AS400 por TestUser como se muestra en la figura 3

Figura 3 cambiar el nombre del ID de usuario por TestUser

ndash Cambie el mandato del bean CommandCall por SNDMSG MSG(Testing) TOUSR(TESTUSER)como se muestra en la figura 4Figura 4 cambiar el mandato del bean CommandCall

476 IBM Toolbox para Java IBM Toolbox para Java

v Conecte el bean AS400 al bean CommandCall El meacutetodo que se utiliza para ello variacutea en funcioacuten delos constructores de beans Para este ejemplo realice estos pasosndash Seleccione el bean CommandCall y luego pulse el botoacuten derecho del ratoacutenndash Seleccione Conectar

ndash Seleccione Caracteriacutesticas conectables

ndash Seleccione system en la lista de caracteriacutesticas como se muestra en la figura 5ndash Seleccione el bean AS400ndash Seleccione this en el menuacute emergente que aparece sobre el bean AS400

Figura 5 conectar el bean AS400 al bean CommandCall

IBM Toolbox para Java 477

v Conecte el botoacuten al bean CommandCallndash Seleccione el bean Button y luego pulse el botoacuten derecho del ratoacutenndash Seleccione Conectar

ndash Seleccione actionPerformed

ndash Seleccione el bean CommandCallndash Seleccione Caracteriacutesticas conectables en el menuacute emergente que aparecendash Seleccione run() en la lista de meacutetodos como se muestra en la figura 6

Figura 6 conectar un meacutetodo a un botoacuten

478 IBM Toolbox para Java IBM Toolbox para Java

Cuando haya terminado la ventana del Editor de composicioacuten visual de VisualAge puede tener elaspecto de la figura 7

Figura 7 Ventana del Editor de composicioacuten visual de VisualAge - Ejemplo de bean finalizado

IBM Toolbox para Java 479

Ejemplos clases commtraceEste tema enlaza con el ejemplo de coacutedigo proporcionado en la documentacioacuten de las clases commtracede IBM Toolbox para Javav ldquoEjemplo coacutemo se utilizan las clases commtracerdquo en la paacutegina 197

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplos de las clases HTMLLos ejemplos que figuran a continuacioacuten muestran algunas maneras de coacutemo se pueden utilizar las clasesHTML de IBM Toolbox para Javav Ejemplo coacutemo se utiliza la clase BidiOrderingv Ejemplo crear objetos HTMLAlignv Ejemplos de la clase HTMLDocument

ndash Ejemplo coacutemo se utiliza HTMLDocument para crear datos HTMLndash Ejemplo coacutemo se utiliza HTMLDocument para crear datos FO XSL

480 IBM Toolbox para Java IBM Toolbox para Java

v Ejemplo coacutemo se utilizan las clases de formularios HTMLv Ejemplos de clases de entrada de formulario

ndash Ejemplo crear un objeto ButtonFormInputndash Ejemplo crear un objeto FileFormInputndash Ejemplo crear un objeto HiddenFormInputndash Ejemplo crear un objeto ImageFormInputndash Ejemplo crear un objeto ResetFormInputndash Ejemplo crear un objeto SubmitFormInputndash Ejemplo crear un objeto TextFormInputndash Ejemplo crear un objeto PasswordFormInputndash Ejemplo crear un objeto RadioFormInputndash Ejemplo crear un objeto CheckboxFormInput

v Ejemplo crear objetos HTMLHeadingv Ejemplo coacutemo se utiliza la clase HTMLHyperlinkv Ejemplo coacutemo se utiliza la clase HTMLImagev Ejemplos de HTMLList

ndash Ejemplo crear listas ordenadasndash Ejemplo crear listas sin ordenarndash Ejemplo crear listas anidadas

v Ejemplo crear coacutedigos HTMLMetav Ejemplo crear coacutedigos HTMLParameterv Ejemplo crear coacutedigos HTMLServletv Ejemplo coacutemo se utiliza la clase HTMLTextv Ejemplos de HTMLTree

ndash Ejemplo coacutemo se utiliza la clase HTMLTreendash Ejemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrer

v Clases de formulario con disentildeondash Ejemplo coacutemo se utiliza la clase GridLayoutFormPanelndash Ejemplo coacutemo se utiliza la clase LineLayoutFormPanel

v Ejemplo coacutemo se utiliza la clase TextAreaFormElementv Ejemplo coacutemo se utiliza la clase LabelFormOutputv Ejemplo coacutemo se utiliza la clase SelectFormElementv Ejemplo coacutemo se utiliza la clase SelectOptionv Ejemplo coacutemo se utiliza la clase RadioFormInputGroupv Ejemplo coacutemo se utiliza la clase RadioFormInputv Ejemplo coacutemo se utilizan las clases HTMLTable

ndash Ejemplo coacutemo se utiliza la clase HTMLTableCellndash Ejemplo coacutemo se utiliza la clase HTMLTableRowndash Ejemplo coacutemo se utiliza la clase HTMLTableHeaderndash Ejemplo coacutemo se utiliza la clase HTMLTableCaption

Tambieacuten se pueden utilizar juntas las clases HTML y las clases servlet como en este ejemplo

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

IBM Toolbox para Java 481

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo coacutemo se utilizan las clases de formularios HTMLEl ejemplo siguiente de IBM Toolbox para Java muestra coacutemo se utilizan las clases de formulario HTML

Tambieacuten puede ver una salida de ejemplo a partir de la ejecucioacuten de este coacutedigo Las clases HTMLusadas en el meacutetodo showHTML estaacuten en negrita

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este coacutedigo fuente es un ejemplo de utilizacioacuten de las clases de paquete HTML que le permiten crear formularios HTML con facilidad

package customer

import javaioimport javaawtColor

import javaxservletimport javaxservlethttp

import comibmas400accessimport comibmas400utilhtml

public class HTMLExample extends HttpServlet

Determina si el usuario ya existe en la lista de registradosprivate static boolean found = false

La informacioacuten de registro se almacenaraacute aquiacuteString regPath = cregistrationtxt

public void init(ServletConfig config)

try

superinit(config)

catch(Exception e)

eprintStackTrace()

482 IBM Toolbox para Java IBM Toolbox para Java

Procesar la peticioacuten GET param req La peticioacuten param res La respuestapublic void doGet (HttpServletRequest req HttpServletResponse res)

throws ServletException IOException

ressetContentType(texthtml)ServletOutputStream out = resgetOutputStream()

Visualizar la Web utilizando las nuevas clases HTMLoutprintln(showHTML())outclose()

public void doPost (HttpServletRequest req HttpServletResponse res)throws ServletException IOException

String nameStr = reqgetParameter(name)String emailStr = reqgetParameter(email)String errorText =

Corriente de salida para escribir en el servletServletOutputStream out = resgetOutputStream()

ressetContentType(texthtml)

Comprobar si los paraacutemetros name y e-mail tienen valores vaacutelidosif (nameStrlength() == 0)

errorText += Nombre de cliente no entrado if (emailStrlength() == 0)

errorText += Correo electroacutenico no entrado

Si se han proporcionado los paraacutemetros name y e-mail continuarif (errorTextlength() == 0)

try

Cree el archivo registrationtxtFileWriter f = new FileWriter(regPath true)BufferedWriter output = new BufferedWriter(f)

Lector puesto en almacenamiento intermedio para buscar en el archivoBufferedReader in = new BufferedReader(new FileReader(regPath))

String line = inreadLine()

Restablezca el distintivo de encontradofound = false

Compruebe si este cliente ya se ha registrado o si ya ha utilizado la misma direccioacuten de correo electroacutenicowhile (found)

Si el archivo estaacute vaciacuteo o se ha llegado al final del archivoif (line == null)

break

Si el cliente ya estaacute registradoif ((lineequals(Nombre de cliente + nameStr)) ||

(lineequals(Direccioacuten de correo electroacutenico + emailStr)))

IBM Toolbox para Java 483

Enviacutee como salida un mensaje al cliente que diga que ya estaacute registradooutprintln (ltHTMLgt +

ltTITLEgt Registro de la Caja de herramientasltTITLEgt +ltMETA HTTP-EQUIV=pragma content=no-cachegt +ltBODY BGCOLOR=blanchedalmond TEXT=blackgt )

outprintln (ltPgtltHRgt +ltPgt + nameStr +ltBgt ya estaacute registrado con ese +ltBgtNombreltBgt o ltBgtDireccioacuten de correo electroacutenicoltBgt +ltPgt GraciasltPgtltHRgt)

Cree un objeto HTMLHyperlink y visualiacutecelooutprintln (ltULgtltLIgt +

new HTMLHyperlink(customerHTMLExampleVolver al formulario de registro) +

ltULgtltBODYgtltHTMLgt)found = truebreak

else Lea la liacutenea siguiente

line = inreadLine()

Objeto String para contener los datos sometidos desde el formulario HTMLString data

Si el nombre o el correo electroacutenico no estaacuten en nuestro archivo de texto continuarif (found)

------------------------------------------------------------ Inserte la nueva informacioacuten de cliente en un archivooutputnewLine()outputwrite(Nombre de cliente + nameStr)outputnewLine()outputwrite(Direccioacuten de correo electroacutenico + emailStr)outputnewLine()------------------------------------------------------------

------------------------------------------------------------ Obtener el recuadro de seleccioacuten USE a partir del formulariodata = reqgetParameter(use)if(data = null)

outputwrite(Utiliza actualmente la Caja de Herramientas + data)outputnewLine()

------------------------------------------------------------

------------------------------------------------------------ Obtener el recuadro de seleccioacuten Maacutes informacioacuten a partir del formulariodata = reqgetParameter(contact)if (data = null)

outputwrite(Ha solicitado maacutes informacioacuten + data)outputnewLine()

------------------------------------------------------------

------------------------------------------------------------ Obtener Versioacuten de AS400 a partir del formulario

484 IBM Toolbox para Java IBM Toolbox para Java

data = reqgetParameter(version)if (data = null)

if (dataequals(multiple versions))

data = reqgetParameter(MultiList)outputwrite(Muacuteltiples versiones + data)

else

outputwrite(Versioacuten de AS400 + data)

outputnewLine()------------------------------------------------------------

------------------------------------------------------------ Obtener Proyectos actuales a partir del formulariodata = reqgetParameter(interest)if (data = null)

outputwrite(Utiliza Java o estaacute interesado en + data)outputnewLine()

------------------------------------------------------------

------------------------------------------------------------ Obtener Plataformas a partir del formulariodata = reqgetParameter(platform)if (data = null)

outputwrite(Plataformas + data)outputnewLine()if (dataindexOf(Other) gt= 0)

outputwrite(Otras plataformas + reqgetParameter(OtherPlatforms))outputnewLine()

------------------------------------------------------------

------------------------------------------------------------Obtener Nuacutemero de servidores IBM i del formulariodata = reqgetParameter(list1)if (data = null)

outputwrite(Nuacutemero de servidores IBM i + data)outputnewLine()

------------------------------------------------------------

------------------------------------------------------------ Obtener Comentarios a partir del formulariodata = reqgetParameter(comments)if (data = null ampamp datalength() gt 0)

outputwrite(Comentarios + data)outputnewLine()

------------------------------------------------------------

------------------------------------------------------------ Obtener el archivo adjunto

IBM Toolbox para Java 485

data = reqgetParameter(myAttachment)if (data = null ampamp datalength() gt 0)

outputwrite(Archivo adjunto + data)outputnewLine()

------------------------------------------------------------

------------------------------------------------------------ Obtener informacioacuten de Copyright ocultadata = reqgetParameter(copyright)if (data = null)

outputwrite(data)outputnewLine()

------------------------------------------------------------

outputflush()outputclose()

Imprimir un agradecimiento al clienteoutprintln(ltHTMLgt)outprintln(ltTITLEgtGraciasltTITLEgt)outprintln(ltMETA HTTP-EQUIV=pragma content=no-cachegt )outprintln(ltBODY BGCOLOR=blanchedalmondgt)outprintln(ltHRgtltPgtGracias por registrarse ltBgt + nameStr + ltBgtltPgtltHRgt)

Cree un objeto HTMLHyperlink y visualiacutecelooutprintln(ltULgtltLIgt +

new HTMLHyperlink(customerHTMLExampleVolver al formulario de registro))

outprintln(ltULgtltBODYgtltHTMLgt)

catch (Exception e)

Mostrar error en el navegadoroutprintln(ltHTMLgt)outprintln(ltTITLEgtERRORltTITLEgt)outprintln(ltMETA HTTP-EQUIV=pragma content=no-cachegt )outprintln(ltBODY BGCOLOR=blanchedalmondgt)outprintln(ltBRgtltBgtMensaje de errorltBgtltPgt)outprintln(e + ltPgt)

Cree un objeto HTMLHyperlink y visualiacutecelooutprintln(ltULgtltLIgt +

new HTMLHyperlink(customerHTMLExampleVolver al formulario de registro))

outprintln(ltULgtltBODYgtltHTMLgt)

eprintStackTrace()

else

Enviacutee como salida un mensaje al cliente que diga que no ha entrado el nombre ni la direccioacuten de correo electroacutenico Inteacutentelo de nuevooutprintln (ltHTMLgt +

ltTITLEgtFormulario de registro no vaacutelidoltTITLEgt +ltMETA HTTP-EQUIV=pragma content=no-cachegt +ltBODY BGCOLOR=blanchedalmond TEXT=blackgt )

486 IBM Toolbox para Java IBM Toolbox para Java

outprintln (ltHRgtltBgtERRORltBgt en datos de cliente - ltPgtltBgt +errorText +ltBgtltPgtInteacutentelo de nuevo ltHRgt)

Cree un objeto HTMLHyperlink y visualiacutecelooutprintln(ltULgtltLIgt +

new HTMLHyperlink(customerHTMLExampleVolver al formulario de registro) +ltULgtltBODYgtltHTMLgt)

Cierre el transcriptoroutclose()

public void destroy(ServletConfig config)

No haga nada

public String getServletInfo()

return Registro de mi producto

private String showHTML()

Almacenamiento intermedio de tipo String para contener la paacutegina HTMLStringBuffer page = new StringBuffer()

Cree el objeto formulario HTMLHTMLForm form = new HTMLForm(servletcustomerHTMLExample)HTMLText txt

Construya el principio de la paacutegina HTML y antildeaacutedalo al almacenamiento intermedio de tipo Stringpageappend(ltHTMLgtn)pageappend(ltTITLEgt BienvenidoltTITLEgtn)pageappend(ltHEADgtltSCRIPT LANGUAGE=JavaScriptgt

function test()alert(Esto es un script de ejemplo ejecutado con unButtonFormInput)ltSCRIPTgtltHEADgt)

pageappend(ltMETA HTTP-EQUIV=pragma content=no-cachegtn)pageappend(ltBODY BGCOLOR=blanchedalmond TEXT=blackgtltBRgtn)

try

-------------------------------------------------------------------- Cree un tiacutetulo de paacutegina con texto HTMLtxt = new HTMLText(Registro de producto)txtsetSize(5)txtsetBold(true)txtsetColor(new Color(199 21 133))txtsetAlignment(HTMLConstantsCENTER)

Antildeada texto HTML al almacenamiento intermedio de tipo Stringpageappend(txtgetTag(true) + ltHRgtltBRgtn)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo linealLineLayoutFormPanel line = new LineLayoutFormPanel()txt = new HTMLText(Entre su nombre y direccioacuten de correo electroacutenico)txtsetSize(4)lineaddElement(txt)

IBM Toolbox para Java 487

Antildeada el disentildeo lineal al almacenamiento intermedio de tipo Stringpageappend(linetoString())pageappend(ltBRgt)--------------------------------------------------------------------

-------------------------------------------------------------------- Establezca el METHOD del formulario HTMLformsetMethod(HTMLFormMETHOD_POST)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree una entrada de texto para el nombreTextFormInput user = new TextFormInput(name)usersetSize(25)usersetMaxLength(40)

Cree una entrada de texto para la direccioacuten de correo-eTextFormInput email = new TextFormInput(email)emailsetSize(30)emailsetMaxLength(40)

Cree una ImageFormInputImageFormInput img =

new ImageFormInput(Someter formulario imagesmyPiimagescgif)imgsetAlignment(HTMLConstantsRIGHT)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un objeto LineLayoutFormPanel para el nombre y la direccioacuten de correo-eLineLayoutFormPanel line2 = new LineLayoutFormPanel()

Antildeada elementos al formulario de liacutenealine2addElement(new LabelFormElement(Nombre))line2addElement(user) Cree y antildeade un elemento etiqueta al disentildeo linealline2addElement(new LabelFormElement(Correo electroacutenico))line2addElement(email)line2addElement(img)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo lineal para hacer preguntasLineLayoutFormPanel line3 = new LineLayoutFormPanel()

Antildeada elementos al disentildeo linealline3addElement(new LineLayoutFormPanel())line3addElement(new

CheckboxFormInput(useyesiquestUtiliza actualmente la Caja de Herramientasfalse))

line3addElement(new LineLayoutFormPanel())line3addElement(new CheckboxFormInput(

contactyesiquestDesea informacioacuten sobre los futuros releases de la Caja de Herramientastrue))

line3addElement(new LineLayoutFormPanel())--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un grupo de botones de seleccioacuten de versioacutenRadioFormInputGroup group = new RadioFormInputGroup(version)

Antildeada al grupo entradas de formulario que sean botones de seleccioacutengroupadd(new RadioFormInput(version v3r2 V3R2 false))

488 IBM Toolbox para Java IBM Toolbox para Java

groupadd(new RadioFormInput(version v4r1 V4R1 false))groupadd(new RadioFormInput(version v4r2 V4R2 false))groupadd(new RadioFormInput(version v4r3 V4R3 false))groupadd(new RadioFormInput(version v4r4 V4R4 false))groupadd(new

RadioFormInput(versionmultiple versionsiquestMuacuteltiples versiones Cuaacutelesfalse))

Cree un elemento de formulario de seleccioacutenSelectFormElement mlist = new SelectFormElement(MultiList)mlistsetMultiple(true)mlistsetSize(3)

Cree las opciones para el elemento de formulario de seleccioacutenSelectOption option1 = mlistaddOption(V3R2 v3r2)SelectOption option2 = mlistaddOption(V4R1 v4r1)SelectOption option3 = mlistaddOption(V4R2 v4r2)SelectOption option4 = mlistaddOption(V4R3 v4r3)SelectOption option5 = mlistaddOption(V4R4 v4r4)

Cree texto HTMLtxt = new HTMLText(Nivel actual del servidor)txtsetSize(4)

Cree un disentildeo cuadriculadoGridLayoutFormPanel grid1 = new GridLayoutFormPanel(3)

Antildeada el grupo de botones de seleccioacuten y el elemento de formulario de seleccioacuten a la cuadriacuteculagrid1addElement(txt)grid1addElement(group)grid1addElement(mlist)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo cuadriculado para los interesesGridLayoutFormPanel grid2 = new GridLayoutFormPanel(1)txt = new HTMLText(Proyectos actuales o aacuterea de intereacutes +

(marque todo lo que crea oportuno))txtsetSize(4)

Antildeada elementos al disentildeo cuadriculadogrid2addElement(new LineLayoutFormPanel())grid2addElement(txt) Cree y antildeada un recuadro de seleccioacuten al disentildeo cuadriculadogrid2addElement(new

CheckboxFormInput(interest applications Aplicaciones true))grid2addElement(new

CheckboxFormInput(interest applets Applets false))grid2addElement(new

CheckboxFormInput(interest servlets Servlets false))--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo lineal para las plataformasLineLayoutFormPanel line4 = new LineLayoutFormPanel()txt = new HTMLText(Plataformas de cliente utilizadas +

(marque todo lo que crea oportuno))txtsetSize(4)

Antildeada elementos al disentildeo linealline4addElement(new LineLayoutFormPanel())line4addElement(txt)line4addElement(new LineLayoutFormPanel())line4addElement(new CheckboxFormInput(platform

IBM Toolbox para Java 489

95Windows95false))

line4addElement(new CheckboxFormInput(platform98Windows98false))

line4addElement(new CheckboxFormInput(platformNTWindowsNTfalse))

line4addElement(new CheckboxFormInput(platformOS2OS2false))

line4addElement(new CheckboxFormInput(platformAIXAIXfalse))

line4addElement(new CheckboxFormInput(platformLinuxLinuxfalse))

line4addElement(new CheckboxFormInput(platformAS400System ifalse))

line4addElement(new CheckboxFormInput(platformOtherOtrasfalse))

TextFormInput other = new TextFormInput(OtherPlatforms)othersetSize(20)othersetMaxLength(50)

line4addElement(other)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo lineal para el nuacutemero de servidoresLineLayoutFormPanel grid3 = new LineLayoutFormPanel()

txt = new HTMLText(iquestCuaacutentos servidores System i tiene)

txtsetSize(4)

Cree un elemento de formulario de seleccioacuten para el nuacutemero de servidores poseiacutedosSelectFormElement list = new SelectFormElement(list1) Cree y antildeada las opciones de seleccioacuten a la lista de elementos de formulario de seleccioacutenSelectOption opt0 = listaddOption(0 cero)SelectOption opt1 = listaddOption(1 uno true)SelectOption opt2 = listaddOption(2 dos)SelectOption opt3 = listaddOption(3 tres)SelectOption opt4 = listaddOption(4 cuatro)SelectOption opt5 = new SelectOption(5+ CincoOMaacutes false)listaddOption(opt5)

Antildeada elementos al disentildeo cuadriculadogrid3addElement(new LineLayoutFormPanel())grid3addElement(txt)grid3addElement(list)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo cuadriculado para los comentarios de productoGridLayoutFormPanel grid4 = new GridLayoutFormPanel(1)

490 IBM Toolbox para Java IBM Toolbox para Java

txt = new HTMLText(Comentarios de producto)txtsetSize(4)

Antildeada elementos al disentildeo cuadriculadogrid4addElement(new LineLayoutFormPanel())grid4addElement(txt) Cree un formulario de aacuterea de textogrid4addElement(new TextAreaFormElement(comments 5 75))grid4addElement(new LineLayoutFormPanel())--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo cuadriculadoGridLayoutFormPanel grid5 = new GridLayoutFormPanel(2)txt = new HTMLText(iquestDesea iniciar la sesioacuten en un servidor)txtsetSize(4)

Cree una entrada de texto y una etiqueta para el nombre del sistemaTextFormInput sys = new TextFormInput(system)LabelFormElement sysLabel = new LabelFormElement(System)

Cree una entrada de texto y una etiqueta para el ID de usuarioTextFormInput uid = new TextFormInput(uid)LabelFormElement uidLabel = new LabelFormElement(ID de usuario)

Cree una entrada de contrasentildea y una etiqueta para la contrasentildeaPasswordFormInput pwd = new PasswordFormInput(pwd)LabelFormElement pwdLabel = new LabelFormElement(Contrasentildea)

Antildeada las entradas de texto las entradas de contrasentildea y las etiquetas a la cuadriacuteculagrid5addElement(sysLabel)grid5addElement(sys)grid5addElement(uidLabel)grid5addElement(uid)grid5addElement(pwdLabel)grid5addElement(pwd)--------------------------------------------------------------------

-------------------------------------------------------------------- Antildeada los diversos paneles creados al formulario HTML en el orden en que han de aparecerformaddElement(line2)formaddElement(line3)formaddElement(grid1)formaddElement(grid2)formaddElement(line4)formaddElement(grid3)formaddElement(grid4)formaddElement(txt)formaddElement(new LineLayoutFormPanel())formaddElement(grid5)formaddElement(new LineLayoutFormPanel())formaddElement(

new HTMLText(Someter un archivo adjunto aquiacute ltbr gt)) Antildeada una entrada de archivo al formularioformaddElement(new FileFormInput(myAttachment))formaddElement(new ButtonFormInput(button

iexclPULSE AQUIacutetest()))

Antildeada un disentildeo de liacutenea vaciacuteo que a su vez antildeada un salto de liacutenea ltbr gt al formularioformaddElement(new LineLayoutFormPanel())formaddElement(new LineLayoutFormPanel())formaddElement(new SubmitFormInput(submit Registrar))formaddElement(new LineLayoutFormPanel())formaddElement(new LineLayoutFormPanel())formaddElement(new ResetFormInput(reset Restablecer))

IBM Toolbox para Java 491

Antildeada una entrada oculta al formularioformaddElement(new

HiddenFormInput(copyright(C) Copyright IBM Corp 1999 1999))

--------------------------------------------------------------------

Antildeada todo el formulario HTML al almacenamiento intermedio de tipo Stringpageappend(formtoString())

catch(Exception e)

eprintStackTrace()

Antildeada los coacutedigos HTML de final al almacenamiento intermediopageappend(ltBODYgtn)pageappend(ltHTMLgtn)

Devuelva toda la paacutegina HTML de tipo seriereturn pagetoString()

Salida de ejemplo de las clases HTMLA continuacioacuten figuran algunas posibles salidas de ejemplo que se pueden obtener al ejecutar el ejemplode las clases HTMLv Nombre de cliente Fred Flinstone

Direccioacuten de correo electroacutenico flinstonebedrockcomUtiliza actualmente la Caja de Herramientas siacuteHa solicitado maacutes informacioacuten siacuteMuacuteltiples versiones v4r2v4r4Utiliza Java o estaacute interesado en aplicacionesservletsPlataformas NTLinuxNuacutemero de servidores IBM i tresComentarios iexclNuestro departamento de programacioacuten utiliza la Caja de Herramientas

para construir aplicaciones de clienteArchivo adjunto Uwiedrichservlettemphtml(C) Copyright IBM Corp 1999 1999

v Nombre de cliente Barney RubbleDireccioacuten de correo electroacutenico rubblebedrockcomUtiliza actualmente la Caja de Herramientas siacuteVersioacuten de AS400 v4r4Utiliza Java o estaacute interesado en servletsPlataformas OS2Nuacutemero de servidoresIBM i CincoOMaacutes(C) Copyright IBM Corp 1999 1999

v Nombre de cliente George JetsonDireccioacuten de correo electroacutenico jetsonsprocketcomHa solicitado maacutes informacioacuten siacuteVersioacuten de AS400 v4r2Utiliza Java o estaacute interesado en aplicacionesPlataformas NTOtrasOtras plataformas SolarisNuacutemero de servidores IBM i unoComentarios iexclEs la primera vez que utilizo esto iexclQueacute gozada(C) Copyright IBM Corp 1999 1999

492 IBM Toolbox para Java IBM Toolbox para Java

v Nombre de cliente Clark KentDireccioacuten de correo electroacutenico supermankryptoncomVersioacuten de AS400 v4r2Nuacutemero de servidores IBM i uno(C) Copyright IBM Corp 1999 1999

Referencia relacionadaldquoEjemplo coacutemo se utilizan las clases de formularios HTMLrdquo en la paacutegina 482El ejemplo siguiente de IBM Toolbox para Java muestra coacutemo se utilizan las clases de formulario HTML

Ejemplo coacutemo se utilizan las clases HTMLTreeEste ejemplo muestra coacutemo crear aacuterboles HTML y de archivos mediante las clases de paquete HTML deIBM Toolbox para Java

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este fuente es un ejemplo de coacutemo se usan las clases del paquete HTML de IBM Toolbox para Java que permiten construir faacutecilmente aacuterboles de archivo y HTML

import javaioFileimport javaioPrintWriterimport javaioIOException

import javautilVectorimport javautilProperties

import javaxservletimport javaxservlethttp

import comibmas400accessAS400import comibmas400accessTraceimport comibmas400accessIFSJavaFileimport comibmas400utilhtmlHTMLMetaimport comibmas400utilhtmlHTMLTreeimport comibmas400utilhtmlHTMLTreeElementimport comibmas400utilhtmlURLParserimport comibmas400utilhtmlDirFilterimport comibmas400utilhtmlFileTreeElementimport comibmas400utilservletServletHyperlink

Ejemplo de coacutemo se usan las clases HTMLTree y FileTreeElement en un servletpublic class TreeNav extends HttpServlet

public void init(ServletConfig config)throws ServletException

superinit(config)

La Caja de Herramientas emplea un conjunto de iconos predeterminado para representar elementos expandidos contraiacutedos y documentos dentro del objeto HTMLTree Para mejorar estos iconos la Caja de Herramientas proporciona tres archivos gif (expandedgif collapsedgif y bulletgif) en el archivo jt400Servletjar Los navegadores no encuentran archivos gif en un archivo JAR o zip por lo que es necesario extraer estas imaacutegenes del archivo JAR y ponerse en el directorio de servidor Web adecuado (de forma predeterminada es el directorio html) Despueacutes descomente las siguientes liacuteneas de coacutedigo y especifique la ubicacioacuten correcta en estos meacutetodos set La ubicacioacuten puede ser absoluta o relativa

IBM Toolbox para Java 493

HTMLTreeElementsetExpandedGif(imagesexpandedgif)HTMLTreeElementsetCollapsedGif(imagescollapsedgif)HTMLTreeElementsetDocGif(imagesbulletgif)

Procesar la peticioacuten GET param req La peticioacuten param res La respuestapublic void doGet (HttpServletRequest req HttpServletResponse resp)

throws ServletException IOException

HttpSession session = reqgetSession(true)HTMLTree fileTree = (HTMLTree)sessiongetValue(filetree)

Si esta sesioacuten todaviacutea no tiene ninguacuten aacuterbol de archivo cree el aacuterbol inicialif (fileTree == null)

fileTree = createTree(req resp reqgetRequestURI())

Establezca la peticioacuten de servlet HTTP en HTMLTreefileTreesetHttpServletRequest(req)

respsetContentType(texthtml)

PrintWriter out = respgetWriter()outprintln(lthtmlgtn)outprintln(new HTMLMeta(Expires Mon 03 Jan 1990 130000 GMT))outprintln(ltbodygtn)

Obtenga el coacutedigo de HTMLTreeoutprintln(fileTreegetTag())

outprintln(ltbodygtn)outprintln(lthtmlgtn)outclose()

Establezca el valor de aacuterbol de la sesioacuten para que al entrar en este servlet por segunda vez se reutilice el objeto FileTreesessionputValue(filetree fileTree)

Procesar la peticioacuten POST param req La peticioacuten param res La respuestapublic void doPost (HttpServletRequest req HttpServletResponse res)

throws ServletException IOException

ressetContentType(texthtml)ServletOutputStream out = resgetOutputStream()

Este meacutetodo crearaacute el objeto HTMLTree inicialprivate HTMLTree createTree(HttpServletRequest req HttpServletResponse resp String uri)

Cree un objeto HTMLTreeHTMLTree tree = new HTMLTree(req)

try

Cree un objeto URLParserURLParser urlParser = new URLParser(uri)

494 IBM Toolbox para Java IBM Toolbox para Java

AS400 sys = new AS400(CPUStatussystemName_ javactl jteam1)

Cree un objeto de archivo (File) y establezca el directorio de IFS raiacutezIFSJavaFile root = new IFSJavaFile(sys QIBM)

Cree un filtro y liste todos los directoriosDirFilter filter = new DirFilter()File[] dirList = rootlistFiles(filter)

Obtenga la lista de archivos que se adecuan al filtro de directoriosString[] list = rootlist(filter)

File[] dirList = new File[listlength]

No queremos obligar a los servidores Web a utilizar JDK12 ya que la mayoriacutea de las JVM de servidor Web son maacutes lentas de actualizar al uacuteltimo nivel de JDK Lo maacutes eficaz para crear estos objetos de archivo es utilizar el meacutetodo listFiles(filter) de JDK12 lo que se hariacutea como se indica a continuacioacuten en lugar de utilizar el meacutetodo list(filter) y despueacutes convertir la matriz de series devuelta a la correspondiente matriz de archivos (File[]) File[] dirList = rootlistFiles(filter)

for (int j=0 jltdirListlength ++j)

if (root instanceof IFSJavaFile)dirList[j] = new IFSJavaFile((IFSJavaFile)root list[j])

elsedirList[j] = new File(list[j])

for (int i=0 iltdirListlength i++)

Cree un objeto FileTreeElement para cada directorio de la listaFileTreeElement node = new FileTreeElement(dirList[i])

Cree un objeto ServletHyperlink para los iconos de expandircontraerServletHyperlink sl = new ServletHyperlink(urlParsergetURI())slsetHttpServletResponse(resp)nodesetIconUrl(sl)

Cree un objeto ServletHyperlink para el servlet TreeList que visualizaraacute el contenido del objeto FileTreeElement (directorio)ServletHyperlink tl = new ServletHyperlink(servletTreeList)tlsetTarget(list)

Si ServletHyperlink no tiene nombre estableacutezcalo en el nombre del directorioif (tlgetText() == null)

tlsetText(dirList[i]getName())

Establezca el TextUrl para el objeto FileTreeElementnodesetTextUrl(tl)

Antildeada el objeto FileTreeElement a HTMLTreetreeaddElement(node)

catch (Exception e)

eprintStackTrace()

return tree

IBM Toolbox para Java 495

public void destroy(ServletConfig config)

No haga nada

public String getServletInfo()

return Navegacioacuten por FileTree

Ejemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrer(archivo 1 de 3)Este coacutedigo de ejemplo de IBM Toolbox para Java junto con el coacutedigo de los dos archivos de ejemploadicionales visualiza un objeto HTMLTree y un objeto FileListElement en un servlet

Los tres archivos del ejemplo sonv FileTreeExamplejava - Este archivo genera los marcos HTML y arranca el servletv TreeNavjava - Este archivo construye y gestiona el aacuterbolv TreeListjava - Este archivo visualiza el contenido de las selecciones efectuadas en la clase TreeNavjava

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este coacutedigo fuente es un ejemplo de utilizacioacuten de las clases de paquete HTML que permiten construir faacutecilmente aacuterboles de archivo y HTML

import javaioPrintWriterimport javaioIOException

import javaxservletimport javaxservlethttp

import comibmas400utilhtmlHTMLMeta

Ejemplo de coacutemo se utilizan los marcos para visualizar un HTMLTree y un FileListElement en un servlet

public class FileTreeExample extends HttpServlet

public void init(ServletConfig config)throws ServletException

superinit(config)

Procesar la peticioacuten GET param req La peticioacuten param res La respuesta

public void doGet (HttpServletRequest req HttpServletResponse resp)throws ServletException IOException

respsetContentType(texthtml)

496 IBM Toolbox para Java IBM Toolbox para Java

Defina dos marcos El primero un marco de navegacioacuten visualizaraacute el HTMLTree que contendraacute FileTreeElements y haraacute posible la navegacioacuten del sistema de archivos El segundo visualizaraacutelistaraacute el contenido de un directorio seleccionado en el marco de navegacioacutenPrintWriter out = respgetWriter()outprintln(lthtmlgtn)outprintln(new HTMLMeta(ExpiresMon 04 Jan 1990 130000 GMT))outprintln(ltframeset cols=25gt)outprintln(ltframe frameborder=5 src=servletTreeNav name=navgt)outprintln(ltframe frameborder=3 src=servletTreeList name=listgt)outprintln(ltframesetgt)outprintln(lthtmlgtn)outclose()

Procesar la peticioacuten POST param req La peticioacuten param res La respuesta

public void doPost (HttpServletRequest req HttpServletResponse res)throws ServletException IOException

ressetContentType(texthtml)ServletOutputStream out = resgetOutputStream()

public void destroy(ServletConfig config)

No haga nada

public String getServletInfo()

return Servlet FileTree

Ejemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrer(archivo 2 de 3)Este coacutedigo de ejemplo junto con el coacutedigo de los dos archivos de ejemplo adicionales visualiza unobjeto HTMLTree y un objeto FileListElement en un servlet

Los tres archivos del ejemplo sonv FileTreeExamplejava - Este archivo genera los marcos HTML y arranca el servletv TreeNavjava - Este archivo construye y gestiona el aacuterbolv TreeListjava - Este archivo visualiza el contenido de las selecciones efectuadas en la clase TreeNavjava

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este fuente es un ejemplo de coacutemo se usan las clases del paquete HTML de IBM Toolbox para Java que permiten construir faacutecilmente aacuterboles de archivo y HTML

import javaioFileimport javaioPrintWriterimport javaioIOException

import javaxservlet

IBM Toolbox para Java 497

import javaxservlethttp

import comibmas400accessAS400import comibmas400accessIFSJavaFileimport comibmas400utilhtmlHTMLMetaimport comibmas400utilhtmlHTMLTreeimport comibmas400utilhtmlHTMLTreeElementimport comibmas400utilhtmlURLParserimport comibmas400utilhtmlDirFilterimport comibmas400utilhtmlFileTreeElementimport comibmas400utilservletServletHyperlink

Ejemplo de coacutemo se usan las clases HTMLTree y FileTreeElement en un servlet

public class TreeNav extends HttpServlet

private AS400 sys_

public void init(ServletConfig config)throws ServletException

superinit(config)

Cree un objeto AS400sys_ = new AS400(mySystem myUserID myPassword)

IBM Toolbox para Java emplea un conjunto de iconos predeterminado para representar elementos expandidos contraiacutedos y documentos dentro del objeto HTMLTree Para mejorar estos iconos IBM Toolbox para Java proporciona tres archivos gif (expandedgif collapsedgif y bulletgif) en el archivo jt400Servletjar Los navegadores no encuentran archivos gif en un archivo JAR o zip por lo que es necesario extraer estas imaacutegenes del archivo JAR y colocarlas en el directorio de servidor Web adecuado (predeterminado es el directorio html) A continuacioacuten cambie las siguientes liacuteneas de coacutedigo para especificar la ubicacioacuten correcta en los meacutetodos set La ubicacioacuten puede ser absoluta o relativa

HTMLTreeElementsetExpandedGif(httpmyServerexpandedgif)HTMLTreeElementsetCollapsedGif(httpmyServercollapsedgif)HTMLTreeElementsetDocGif(httpmyServerbulletgif)

Procesar la peticioacuten GET param req La peticioacuten param res La respuesta

public void doGet (HttpServletRequest req HttpServletResponse resp)throws ServletException IOException

Utilice los datos de sesioacuten para recordar el estado del aacuterbolHttpSession session = reqgetSession(true)HTMLTree fileTree = (HTMLTree)sessiongetValue(filetree)

Si esta sesioacuten todaviacutea no tiene ninguacuten aacuterbol de archivo cree el aacuterbol inicialif (fileTree == null)

fileTree = createTree(req resp reqgetRequestURI())

Establezca la peticioacuten de servlet HTTP en HTMLTreefileTreesetHttpServletRequest(req)

respsetContentType(texthtml)

498 IBM Toolbox para Java IBM Toolbox para Java

PrintWriter out = respgetWriter()outprintln(lthtmlgtn)outprintln(new HTMLMeta(Expires Mon 03 Jan 1990 130000 GMT))outprintln(ltbodygtn)

Obtenga el coacutedigo de HTMLTreeoutprintln(fileTreegetTag())

outprintln(ltbodygtn)outprintln(lthtmlgtn)outclose()

Establezca el valor de aacuterbol de la sesioacuten para que al entrar en este servlet por segunda vez se reutilice el objeto FileTreesessionputValue(filetree fileTree)

Procesar la peticioacuten POST param req La peticioacuten param res La respuesta

public void doPost (HttpServletRequest req HttpServletResponse res)throws ServletException IOException

ressetContentType(texthtml)ServletOutputStream out = resgetOutputStream()

Este meacutetodo crearaacute el objeto HTMLTree inicial

private HTMLTree createTree(HttpServletRequest reqHttpServletResponse resp String uri)

Cree un objeto HTMLTreeHTMLTree tree = new HTMLTree(req)

try

Cree un objeto URLParserURLParser urlParser = new URLParser(uri)

Cree un objeto de archivo (File) y establezca el directorio de IFS raiacutezIFSJavaFile root = new IFSJavaFile(sys_ QIBM)

Cree un objeto filtro (Filter)DirFilter filter = new DirFilter()

Obtenga la lista de archivos que se adecuan al filtro de directoriosString[] list = rootlist(filter)

File[] dirList = new File[listlength]

No queremos obligar a los servidores Web a utilizar JDK12 ya que la mayoriacutea de las JVM de servidor Web son maacutes lentas de actualizar al uacuteltimo nivel de JDK Lo maacutes eficaz para crear estos objetos archivo es usar el meacutetodo listFiles(filter) en JDK12 lo que se hariacutea como se indica a continuacioacuten en lugar de utilizar el meacutetodo list(filter) y despueacutes convertir la matriz de tipo serie devuelta a matriz de archivos (File[]) adecuada File[] dirList = rootlistFiles(filter)

for (int j=0 jltdirListlength ++j)

IBM Toolbox para Java 499

if (root instanceof IFSJavaFile)dirList[j] = new IFSJavaFile((IFSJavaFile)root list[j])

elsedirList[j] = new File(list[j])

for (int i=0 iltdirListlength i++)

Cree un objeto FileTreeElement para cada directorio de la listaFileTreeElement node = new FileTreeElement(dirList[i])

Cree un objeto ServletHyperlink para los iconos de expandircontraerServletHyperlink sl = new ServletHyperlink(urlParsergetURI())slsetHttpServletResponse(resp)nodesetIconUrl(sl)

Cree un objeto ServletHyperlink para el servlet TreeList que visualizaraacute el contenido del objeto FileTreeElement (directorio)ServletHyperlink tl = new ServletHyperlink(servletTreeList)tlsetTarget(list)

Si ServletHyperlink no tiene nombre estableacutezcalo en el nombre del directorioif (tlgetText() == null)

tlsetText(dirList[i]getName())

Establezca el TextUrl para el objeto FileTreeElementnodesetTextUrl(tl)

Antildeada el objeto FileTreeElement a HTMLTreetreeaddElement(node)

sys_disconnectAllServices()

catch (Exception e)

eprintStackTrace()

return tree

public void destroy(ServletConfig config)

No haga nada

public String getServletInfo()

return Navegacioacuten por FileTree

Ejemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrer(archivo 3 de 3)Este coacutedigo de ejemplo junto con el coacutedigo de los dos archivos de ejemplo adicionales visualiza unobjeto HTMLTree y un objeto FileListElement en un servlet

Los tres archivos del ejemplo sonv FileTreeExamplejava - Este archivo genera los marcos HTML y arranca el servletv TreeNavjava - Este archivo construye y gestiona el aacuterbolv TreeListjava - Este archivo visualiza el contenido de las selecciones efectuadas en la clase TreeNavjava

500 IBM Toolbox para Java IBM Toolbox para Java

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este fuente es un ejemplo de coacutemo se usan las clases del paquete HTML de IBM Toolbox para Java que permiten construir faacutecilmente listas de archivos y HTML

import javaioPrintWriterimport javaioIOExceptionimport javaioFile

import comibmas400accessAS400import comibmas400accessTraceimport comibmas400accessIFSJavaFileimport comibmas400utilhtmlHTMLMetaimport comibmas400utilhtmlHTMLHeadingimport comibmas400utilhtmlHTMLConstantsimport comibmas400utilhtmlFileListElementimport comibmas400utilhtml

import javaxservletimport javaxservlethttp

Ejemplo de coacutemo se utiliza la clase FileListElement en un servletpublic class TreeList extends HttpServlet

private AS400 sys_

Procesar la peticioacuten GET param req La peticioacuten param res La respuestapublic void doGet(HttpServletRequest req HttpServletResponse resp)throws ServletException IOException

respsetContentType(texthtml)

try

PrintWriter out = respgetWriter()outprintln(lthtmlgtn)outprintln(new HTMLMeta(Expires

Mon 02 Jan 1990 130000 GMT))outprintln(ltbodygtn)

Si el paraacutemetro de viacutea de acceso no es nulo el usuario ha seleccionado un elemento en la lista FileTreeElement del marco de navegacioacutenif (reqgetPathInfo() = null)

Cree un objeto FileListElement que pase un objeto sistema AS400 y la peticioacuten de servlet HTTP La peticioacuten contendraacute la informacioacuten de viacutea de acceso necesaria para listar el contenido del objeto FileTreeElement (directorio) seleccionadoFileListElement fileList = new FileListElement(sys_ req)

Tambieacuten puede crear un objeto FileListElement a partir de un nombre de compartimiento NetServer y una viacutea de acceso de compartimiento FileListElement fileList =

new FileListElement(sys_ req TreeShare

IBM Toolbox para Java 501

QIBMProdDataHTTPPublicjt400)

Visualice el contenido de FileListElementoutprintln(fileListlist())

Visualice este HTMLHeading si no se ha seleccionado ninguacuten objeto FileTreeElementelse

HTMLHeading heading = newHTMLHeading(1Ejemplo de lista de archivos HTML)

headingsetAlign(HTMLConstantsCENTER)

outprintln(headinggetTag())

outprintln(ltbodygtn)outprintln(lthtmlgtn)outclose()

catch (Exception e)

eprintStackTrace()

Procesar la peticioacuten POST param req La peticioacuten param res La respuesta

public void doPost (HttpServletRequest req HttpServletResponse res)throws ServletException IOException

ressetContentType(texthtml)ServletOutputStream out = resgetOutputStream()

public void init(ServletConfig config)throws ServletException

superinit(config)

Cree un objeto AS400sys_ = new AS400(mySystem myUID myPWD)

Ejemplo coacutemo se utilizan las clases HTMLTableEl ejemplo que figura a continuacioacuten muestra coacutemo funcionan las clases HTMLTable

Cree un objeto HTMLTable predeterminadoHTMLTable table = new HTMLTable()

Establezca los atributos de la tablatablesetAlignment(HTMLTableCENTER)tablesetBorderWidth(1)

Cree un objeto HTMLTableCaption predeterminado y establezca el texto del pie de tablaHTMLTableCaption caption = new HTMLTableCaption()

captionsetElement(Saldos de cuenta de cliente - 1 de enero de 2000)

Establezca el pie de tablatablesetCaption(caption)

502 IBM Toolbox para Java IBM Toolbox para Java

Cree las cabeceras de la tabla y antildeaacutedalas a la mismaHTMLTableHeader account_header = new HTMLTableHeader(new HTMLText(CUENTA))HTMLTableHeader name_header = new HTMLTableHeader(new HTMLText(NOMBRE))HTMLTableHeader balance_header = new HTMLTableHeader(new HTMLText(SALDO))

tableaddColumnHeader(account_header)tableaddColumnHeader(name_header)tableaddColumnHeader(balance_header)

Antildeada filas a la tabla Cada registro de cliente corresponde a una fila de la tablaint numCols = 3for (int rowIndex=0 rowIndexlt numCustomers rowIndex++)

HTMLTableRow row = new HTMLTableRow()rowsetHorizontalAlignment(HTMLTableRowCENTER)

HTMLText account = new HTMLText(customers[rowIndex]getAccount())HTMLText name = new HTMLText(customers[rowIndex]getName())HTMLText balance = new HTMLText(customers[rowIndex]getBalance())

rowaddColumn(new HTMLTableCell(account))rowaddColumn(new HTMLTableCell(name))rowaddColumn(new HTMLTableCell(balance))

Antildeada la fila a la tablatableaddRow(row)

Systemoutprintln(tablegetTag())

El ejemplo de coacutedigo Java anterior genera el siguiente coacutedigo HTMLlttable align=center border=1gtltcaptiongtSaldos de cuenta de cliente - 1 de enero de 2000ltcaptiongtlttrgtltthgtACCOUNTltthgtltthgtNAMEltthgtltthgtBALANCEltthgtlttrgtlttr align=centergtlttdgt0000001lttdgtlttdgtCustomer1lttdgtlttdgt10000lttdgtlttrgtlttr align=centergtlttdgt0000002lttdgtlttdgtCustomer2lttdgtlttdgt20000lttdgtlttrgtlttr align=centergtlttdgt0000003lttdgtlttdgtCustomer3lttdgtlttdgt55000lttdgtlttrgtlttablegt

La tabla que hay a continuacioacuten muestra coacutemo se visualiza el coacutedigo HTML anterior en un navegadorWeb

Tabla 3 Saldos de cuenta de cliente - 1 de enero de 2000

CUENTA NOMBRE SALDO

0000001 Cliente1 10000

0000002 Cliente2 20000

0000003 Cliente3 55000

IBM Toolbox para Java 503

Ejemplos PCML (Program Call Markup Language)Los ejemplos siguientes utilizan PCML para llamar a interfaces API de IBM i y cada uno enlaza con unapaacutegina que muestra el fuente PCML seguido de un programa Java

Nota la autorizacioacuten adecuada variacutea en cada uno de los ejemplos pero puede incluir determinadasautorizaciones sobre objeto y autorizaciones especiales Para ejecutar estos ejemplos debe iniciar la sesioacutencon un perfil de usuario que posea la autorizacioacuten adecuada para llevar a cabo las acciones siguientesv Llamar a la API de IBM i que se indica en el ejemplov Acceder a la informacioacuten que se solicita

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo ejemplo simple de recuperacioacuten de datosEste ejemplo simple muestra el fuente PCML y el programa Java necesarios para recuperar informacioacutenacerca de un perfil de usuario del servidor La API a la que se llama es la API Recuperar informacioacuten deusuario (QSYRUSRI)

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Este ejemplo simple consta de dos partesv Coacutedigo fuente PCML para llamar a QSYRUSRIv Coacutedigo fuente de programa Java para llamar a QSYRUSRI

Coacutedigo fuente PCML para llamar a QSYRUSRIltpcml version=10gt

lt-- Fuente PCML para llamar a la API Recuperar informacioacuten de usuario (QSYRUSRI) --gt

lt-- Formato USRI0150 - Hay otros formatos disponibles --gtltstruct name=usri0100gt

ltdata name=bytesReturned type=int length=4 usage=outputgtltdata name=bytesAvailable type=int length=4 usage=outputgtltdata name=userProfile type=char length=10 usage=outputgtltdata name=previousSignonDate type=char length=7 usage=outputgtltdata name=previousSignonTime type=char length=6 usage=outputgtltdata type=byte length=1 usage=outputgtltdata name=badSignonAttempts type=int length=4 usage=outputgtltdata name=status type=char length=10 usage=outputgtltdata name=passwordChangeDate type=byte length=8 usage=outputgtltdata name=noPassword type=char length=1 usage=outputgtltdata type=byte length=1 usage=outputgt

504 IBM Toolbox para Java IBM Toolbox para Java

ltdata name=passwordExpirationInterval type=int length=4 usage=outputgtltdata name=datePasswordExpires type=byte length=8 usage=outputgtltdata name=daysUntilPasswordExpires type=int length=4 usage=outputgtltdata name=setPasswordToExpire type=char length=1 usage=outputgtltdata name=displaySignonInfo type=char length=10 usage=outputgt

ltstructgt

lt-- Programa QSYRUSRI y su lista de paraacutemetros para recuperar el formato USRI0100 --gtltprogram name=qsyrusri path=QSYSlibQSYRUSRIpgmgt

ltdata name=receiver type=struct struct=usri0100 usage=outputgtltdata name=receiverLength type=int length=4 usage=input gtltdata name=format type=char length=8 usage=input init=USRI0100gtltdata name=profileName type=char length=10 usage=input init=CURRENTgtltdata name=errorCode type=int length=4 usage=input init=0gt

ltprogramgt

ltpcmlgt

Coacutedigo fuente de programa Java para llamar a QSYRUSRIimport comibmas400dataProgramCallDocumentimport comibmas400dataPcmlExceptionimport comibmas400accessAS400import comibmas400accessAS400Message

Programa de ejemplo para llamar a la API Recuperar informacioacuten de usuario (QSYRUSRI)public class qsyrusri

public qsyrusri()

public static void main(String[] argv)

AS400 as400System comibmas400accessAS400ProgramCallDocument pcml comibmas400dataProgramCallDocumentboolean rc = false Coacutedigo de retorno de ProgramCallDocumentcallProgram()String msgId msgText Mensajes devueltos desde el servidorObject value Valor de retorno de ProgramCallDocumentgetValue()

SystemsetErr(Systemout)

Construya AS400 sin paraacutemetros se solicitaraacuten al usuarioas400System = new AS400()

try

Quite la marca de comentario de la liacutenea siguiente para obtener informacioacuten de depuracioacutencomibmas400dataPcmlMessageLogsetTraceEnabled(true)

Systemoutprintln(Estaacute empezando el ejemplo PCML)Systemoutprintln( Se estaacute construyendo ProgramCallDocument para la API QSYRUSRI)

Construya ProgramCallDocument El primer paraacutemetro es el sistema al que se va a conectar El segundo paraacutemetro es el nombre del recurso PCML En este ejemplo el archivo PCML serializado qsyrusripcmlser o el archivo fuente PCML qsyrusripcml debe estar en la viacutea de acceso de clasespcml = new ProgramCallDocument(as400System qsyrusri)

Establezca paraacutemetros de entrada Varios paraacutemetros tienen valores predeterminados especificados en el fuente PCML No es necesario establecerlos mediante coacutedigo JavaSystemoutprintln( Se estaacuten estableciendo paraacutemetros de entrada)pcmlsetValue(qsyrusrireceiverLength

new Integer((pcmlgetOutputsize(qsyrusrireceiver))))

Peticioacuten para llamar a la API Se solicitaraacute al usuario que inicie la sesioacuten en el sistema

IBM Toolbox para Java 505

Systemoutprintln( Llamando a la API QSYRUSRI para pedir informacioacutendel usuario de inicio de sesioacuten)

rc = pcmlcallProgram(qsyrusri)

Si el coacutedigo de retorno es false se han recibido mensajes del servidorif(rc == false)

Recupere la lista de mensajes del servidorAS400Message[] msgs = pcmlgetMessageList(qsyrusri)

Itere a traveacutes de los mensajes y escriacutebalos en la salida estaacutendarfor (int m = 0 m lt msgslength m++)

msgId = msgs[m]getID()msgText = msgs[m]getText()Systemoutprintln( + msgId + - + msgText)

Systemoutprintln( Ha fallado la llamada a QSYRUSRI Vea los mensajes anteriores )Systemexit (0)

Si el coacutedigo de retorno ha sido true la llamada a QSYRUSRI ha sido satisfactoria Escriba parte de los resultados en la salida estaacutendarelse

value = pcmlgetValue(qsyrusrireceiverbytesReturned)Systemoutprintln( Bytes devueltos + value)value = pcmlgetValue(qsyrusrireceiverbytesAvailable)Systemoutprintln( Bytes disponibles + value)value = pcmlgetValue(qsyrusrireceiveruserProfile)Systemoutprintln( Nombre de perfil + value)value = pcmlgetValue(qsyrusrireceiverpreviousSignonDate)Systemoutprintln( Fecha de inicio de sesioacuten anterior + value)value = pcmlgetValue(qsyrusrireceiverpreviousSignonTime)Systemoutprintln( Hora de inicio de sesioacuten anterior + value)

catch (PcmlException e)

Systemoutprintln(egetLocalizedMessage())eprintStackTrace()Systemoutprintln( Ha fallado la llamada a QSYRUSRI )Systemexit (0)

Systemexit (0) Fin de main()

Ejemplo recuperar una lista de informacioacutenEste ejemplo muestra el coacutedigo fuente PCML y el programa Java necesarios para recuperar una lista deusuarios autorizados en un servidor La API a la que se llama es la API Abrir lista de usuariosautorizados (QGYOLAUS) Este ejemplo muestra coacutemo se accede a una matriz de estructuras devueltapor un programa del servidor

Este ejemplo consta de dos partesv Coacutedigo fuente PCML para llamar a QGYOLAUSv Coacutedigo fuente de programa Java para llamar a QGYOLAUS

Coacutedigo fuente PCML para llamar a QGYOLAUSltpcml version=10gt

lt-- Fuente PCML para llamar a la API Abrir lista de usuarios autorizados (QGYOLAUS) --gt

506 IBM Toolbox para Java IBM Toolbox para Java

lt-- Formato AUTU0150 - Hay otros formatos disponibles --gtltstruct name=autu0150gt

ltdata name=name type=char length=10 gtltdata name=userOrGroup type=char length=1 gtltdata name=groupMembers type=char length=1 gtltdata name=description type=char length=50 gt

ltstructgt

lt-- Estructura para listar informacioacuten (comuacuten a todas las API de tipo Abrir lista) --gtltstruct name=listInfogt

ltdata name=totalRcds type=int length=4 gtltdata name=rcdsReturned type=int length=4 gtltdata name=rqsHandle type=byte length=4 gtltdata name=rcdLength type=int length=4 gtltdata name=infoComplete type=char length=1 gtltdata name=dateCreated type=char length=7 gtltdata name=timeCreated type=char length=6 gtltdata name=listStatus type=char length=1 gtltdata type=byte length=1 gtltdata name=lengthOfInfo type=int length=4 gtltdata name=firstRecord type=int length=4 gtltdata type=byte length=40 gt

ltstructgt

lt-- Programa QGYOLAUS y su lista de paraacutemetros para recuperar el formato AUTU0150 --gtltprogram name=qgyolaus path=QSYSlibQGYlibQGYOLAUSpgm parseorder=listInfo receivergt

ltdata name=receiver type=struct struct=autu0150 usage=outputcount=listInforcdsReturned outputsize=receiverLength gt

ltdata name=receiverLength type=int length=4 usage=input init=16384 gtltdata name=listInfo type=struct struct=listInfo usage=output gtltdata name=rcdsToReturn type=int length=4 usage=input init=264 gtltdata name=format type=char length=10 usage=input init=AUTU0150 gtltdata name=selection type=char length=10 usage=input init=USER gtltdata name=member type=char length=10 usage=input init=NONE gtltdata name=errorCode type=int length=4 usage=input init=0 gt

ltprogramgt

lt-- El programa QGYGTLE ha devuelto registros adicionales de la listacreada por QGYOLAUS --gt

ltprogram name=qgygtle path=QSYSlibQGYlibQGYGTLEpgm parseorder=listInfo receivergtltdata name=receiver type=struct struct=autu0150 usage=output

count=listInforcdsReturned outputsize=receiverLength gtltdata name=receiverLength type=int length=4 usage=input init=16384 gtltdata name=requestHandle type=byte length=4 usage=input gtltdata name=listInfo type=struct struct=listInfo usage=output gtltdata name=rcdsToReturn type=int length=4 usage=input init=264 gtltdata name=startingRcd type=int length=4 usage=input gtltdata name=errorCode type=int length=4 usage=input init=0 gt

ltprogramgt

lt-- El programa QGYCLST cierra la lista liberando recursos en el servidor --gtltprogram name=qgyclst path=QSYSlibQGYlibQGYCLSTpgm gt

ltdata name=requestHandle type=byte length=4 usage=input gtltdata name=errorCode type=int length=4 usage=input init=0 gt

ltprogramgtltpcmlgt

Coacutedigo fuente de programa Java para llamar a QGYOLAUSimport comibmas400dataProgramCallDocumentimport comibmas400dataPcmlExceptionimport comibmas400accessAS400import comibmas400accessAS400Message

Programa de ejemplo para llamar a la API Recuperar lista de usuarios autorizados (QGYOLAUS)public class qgyolaus

IBM Toolbox para Java 507

public static void main(String[] argv)

AS400 as400System comibmas400accessAS400ProgramCallDocument pcml comibmas400dataProgramCallDocumentboolean rc = false Coacutedigo de retorno de ProgramCallDocumentcallProgram()String msgId msgText Mensajes devueltos desde el servidorObject value Valor de retorno de ProgramCallDocumentgetValue()

int[] indices = new int[1] Iacutendices para acceder al valor de la matrizint nbrRcds Nuacutemero de registros devueltos desde QGYOLAUS y QGYGTLE

nbrUsers Nuacutemero total de usuarios recuperadosString listStatus Estado de la lista en el servidorbyte[] requestHandle = new byte[4]

SystemsetErr(Systemout)

Construya AS400 sin paraacutemetros se solicitaraacuten al usuarioas400System = new AS400()

try

Quite la marca de comentario de la liacutenea siguiente para obtener informacioacuten de depuracioacutencomibmas400dataPcmlMessageLogsetTraceEnabled(true)

Systemoutprintln(Estaacute empezando el ejemplo PCML)Systemoutprintln( Se estaacute construyendo ProgramCallDocument para la API QGYOLAUS)

Construya ProgramCallDocument El primer paraacutemetro es el sistema al que se va a conectar El segundo paraacutemetro es el nombre del recurso PCML En este ejemplo el archivo PCML serializado qgyolauspcmlser o el archivo fuente PCML qgyolauspcml debe estar en la viacutea de acceso de clasespcml = new ProgramCallDocument(as400System qgyolaus)

Todos los paraacutemetros de entrada tienen valores predeterminados especificados en el fuente PCML No es necesario establecerlos mediante coacutedigo Java

Peticioacuten para llamar a la API Se solicitaraacute al usuario que inicie la sesioacuten en el sistemaSystemoutprintln( Llamando a la API QGYOLAUS para solicitar informacioacuten

del usuario de inicio de sesioacuten)rc = pcmlcallProgram(qgyolaus)

Si el coacutedigo de retorno es false se han recibido mensajes del servidorif(rc == false)

Recupere la lista de mensajes del servidorAS400Message[] msgs = pcmlgetMessageList(qgyolaus)

Itere a traveacutes de los mensajes y escriacutebalos en la salida estaacutendarfor (int m = 0 m lt msgslength m++)

msgId = msgs[m]getID()msgText = msgs[m]getText()Systemoutprintln( + msgId + - + msgText)

Systemoutprintln( Ha fallado la llamada a QGYOLAUS Vea los mensajes anteriores )Systemexit (0)

Si el coacutedigo de retorno ha sido true la llamada a QGYOLAUS ha sido satisfactoria Escriba parte de los resultados en la salida estaacutendarelse

boolean doneProcessingList = falseString programName = qgyolaus

508 IBM Toolbox para Java IBM Toolbox para Java

nbrUsers = 0while (doneProcessingList)

nbrRcds = pcmlgetIntValue(programName + listInforcdsReturned)requestHandle = (byte[]) pcmlgetValue(programName + listInforqsHandle)

Itere a traveacutes de la lista de usuariosfor (indices[0] = 0 indices[0] lt nbrRcds indices[0]++)

value = pcmlgetValue(programName + receivername indices)Systemoutprintln(Usuario + value)

value = pcmlgetValue(programName + receiverdescription indices)Systemoutprintln(tt + value)

nbrUsers += nbrRcds

Compruebe si se han recuperado todos los usuarios Si no seraacute necesario hacer nuevas llamadas a Obtener entradas de lista (QGYGTLE) para recuperar los demaacutes usuarios de la listalistStatus = (String) pcmlgetValue(programName + listInfolistStatus)if ( listStatusequals(2) La lista estaacute marcada como Completa

|| listStatusequals(3) ) O la lista estaacute marcada como Error al construir

doneProcessingList = trueelse

programName = qgygtle

Establezca los paraacutemetros de entrada para QGYGTLEpcmlsetValue(qgygtlerequestHandle requestHandle)pcmlsetIntValue(qgygtlestartingRcd nbrUsers + 1)

Llame a Obtener entradas de lista (QGYGTLE) para obtener maacutes usuarios de la listarc = pcmlcallProgram(qgygtle)

Si el coacutedigo de retorno es false se han recibido mensajes del servidorif(rc == false)

Recupere la lista de mensajes del servidorAS400Message[] msgs = pcmlgetMessageList(qgygtle)

Itere a traveacutes de los mensajes y escriacutebalos en la salida estaacutendarfor (int m = 0 m lt msgslength m++)

msgId = msgs[m]getID()msgText = msgs[m]getText()Systemoutprintln( + msgId + - + msgText)

Systemoutprintln( Ha fallado la llamada a QGYGTLE Vea los mensajes anteriores )Systemexit (0)

Si el coacutedigo de retorno ha sido true la llamada a QGYGTLE ha sido satisfactoria

Systemoutprintln(Nuacutemero de usuarios devueltos + nbrUsers)

Llame a la API Cerrar lista (QGYCLST)pcmlsetValue(qgyclstrequestHandle requestHandle)rc = pcmlcallProgram(qgyclst)

catch(PcmlException e)

IBM Toolbox para Java 509

Systemoutprintln(egetLocalizedMessage())eprintStackTrace()Systemoutprintln( Ha fallado la llamada a QGYOLAUS )Systemexit (0)

Systemexit (0)

Ejemplo recuperar datos multidimensionalesEste ejemplo muestra el fuente PCML y el programa Java necesarios para recuperar una lista deexportaciones NFS (sistema de archivos de red) de un servidor La API a la que se llama es la APIRecuperar exportaciones NFS (QZNFRTVE) Este ejemplo muestra coacutemo se accede a matrices deestructuras dentro de una matriz de estructuras

Este ejemplo consta de dos partesv Coacutedigo fuente PCML para llamar a QZNFRTVEv Coacutedigo fuente de programa Java para llamar a QZNFRTVE

Fuente PCML para llamar a QZNFRTVEltpcml version=10gt

ltstruct name=receivergtltdata name=lengthOfEntry type=int length=4 gtltdata name=dispToObjectPathName type=int length=4 gtltdata name=lengthOfObjectPathName type=int length=4 gtltdata name=ccsidOfObjectPathName type=int length=4 gtltdata name=readOnlyFlag type=int length=4 gtltdata name=nosuidFlag type=int length=4 gtltdata name=dispToReadWriteHostNames type=int length=4 gtltdata name=nbrOfReadWriteHostNames type=int length=4 gtltdata name=dispToRootHostNames type=int length=4 gtltdata name=nbrOfRootHostNames type=int length=4 gtltdata name=dispToAccessHostNames type=int length=4 gtltdata name=nbrOfAccessHostNames type=int length=4 gtltdata name=dispToHostOptions type=int length=4 gtltdata name=nbrOfHostOptions type=int length=4 gtltdata name=anonUserID type=int length=4 gtltdata name=anonUsrPrf type=char length=10 gtltdata name=pathName type=char length=lengthOfObjectPathName

offset=dispToObjectPathName offsetfrom=receiver gt

ltstruct name=rwAccessList count=nbrOfReadWriteHostNamesoffset=dispToReadWriteHostNames offsetfrom=receivergt

ltdata name=lengthOfEntry type=int length=4 gtltdata name=lengthOfHostName type=int length=4 gtltdata name=hostName type=char length=lengthOfHostName gtltdata type=byte length=0

offset=lengthOfEntry gtltstructgt

ltstruct name=rootAccessList count=nbrOfRootHostNamesoffset=dispToRootHostNames offsetfrom=receivergt

ltdata name=lengthOfEntry type=int length=4 gtltdata name=lengthOfHostName type=int length=4 gtltdata name=hostName type=char length=lengthOfHostName gtltdata type=byte length=0

offset=lengthOfEntry gtltstructgt

ltstruct name=accessHostNames count=nbrOfAccessHostNamesoffset=dispToAccessHostNames offsetfrom=receiver gt

ltdata name=lengthOfEntry type=int length=4 gt

510 IBM Toolbox para Java IBM Toolbox para Java

ltdata name=lengthOfHostName type=int length=4 gtltdata name=hostName type=char length=lengthOfHostName gtltdata type=byte length=0

offset=lengthOfEntry gtltstructgt

ltstruct name=hostOptions offset=dispToHostOptions offsetfrom=receiver count=nbrOfHostOptionsgtltdata name=lengthOfEntry type=int length=4 gtltdata name=dataFileCodepage type=int length=4 gtltdata name=pathNameCodepage type=int length=4 gtltdata name=writeModeFlag type=int length=4 gtltdata name=lengthOfHostName type=int length=4 gtltdata name=hostName type=char length=lengthOfHostName gtltdata type=byte length=0 offset=lengthOfEntry gt

ltstructgt

ltdata type=byte length=0 offset=lengthOfEntry gtltstructgt

ltstruct name=returnedRcdsFdbkInfogtltdata name=bytesReturned type=int length=4 gtltdata name=bytesAvailable type=int length=4 gtltdata name=nbrOfNFSExportEntries type=int length=4 gtltdata name=handle type=int length=4 gt

ltstructgt

ltprogram name=qznfrtve path=QSYSlibQZNFRTVEpgm parseorder=returnedRcdsFdbkInfo receiver gtltdata name=receiver type=struct struct=receiver usage=output

count=returnedRcdsFdbkInfonbrOfNFSExportEntries outputsize=receiverLengthgtltdata name=receiverLength type=int length=4 usage=input init=4096 gtltdata name=returnedRcdsFdbkInfo type=struct struct=returnedRcdsFdbkInfo usage=output gtltdata name=formatName type=char length=8 usage=input init=EXPE0100 gtltdata name=objectPathName type=char length=lengthObjPathName usage=input init=FIRST gtltdata name=lengthObjPathName type=int length=4 usage=input init=6 gtltdata name=ccsidObjectPathName type=int length=4 usage=input init=0 gtltdata name=desiredCCSID type=int length=4 usage=input init=0 gtltdata name=handle type=int length=4 usage=input init=0 gtltdata name=errorCode type=int length=4 usage=input init=0 gt

ltprogramgt

ltpcmlgt

Coacutedigo fuente de programa Java para llamar a QZNFRTVEimport comibmas400dataProgramCallDocumentimport comibmas400dataPcmlExceptionimport comibmas400accessAS400import comibmas400accessAS400Message

Programa de ejemplo para llamar a la API Recuperar exportaciones NFS (QZNFRTVE)public class qznfrtve

public static void main(String[] argv)

AS400 as400System comibmas400accessAS400ProgramCallDocument pcml comibmas400dataProgramCallDocumentboolean rc = false Coacutedigo de retorno de ProgramCallDocumentcallProgram()String msgId msgText Mensajes devueltos desde el servidorObject value Valor de retorno de ProgramCallDocumentgetValue()

SystemsetErr(Systemout)

Construya AS400 sin paraacutemetros se solicitaraacuten al usuarioas400System = new AS400()

int[] indices = new int[2] Iacutendices para acceder al valor de la matrizint nbrExports Nuacutemero de exportaciones devueltas

IBM Toolbox para Java 511

int nbrOfReadWriteHostNames nbrOfRWHostNames nbrOfRootHostNamesnbrOfAccessHostnames nbrOfHostOpts

try

Quite la marca de comentario de la liacutenea siguiente para obtener informacioacuten de depuracioacuten comibmas400dataPcmlMessageLogsetTraceEnabled(true)

Systemoutprintln(Estaacute empezando el ejemplo PCML)Systemoutprintln( Se estaacute construyendo ProgramCallDocument para la API QZNFRTVE)

Construya ProgramCallDocument El primer paraacutemetro es el sistema al que se va a conectar El segundo paraacutemetro es el nombre del recurso PCML En este ejemplo el archivo PCML serializado qznfrtvepcmlser o el archivo fuente PCML qznfrtvepcml debe estar en la viacutea de acceso de clasespcml = new ProgramCallDocument(as400System qznfrtve)

Establezca paraacutemetros de entrada Varios paraacutemetros tienen valores predeterminados especificados en el fuente PCML No es necesario establecerlos mediante coacutedigo JavaSystemoutprintln( Se estaacuten estableciendo paraacutemetros de entrada)pcmlsetValue(qznfrtvereceiverLength new Integer( ( pcmlgetOutputsize(qznfrtvereceiver))))

Peticioacuten para llamar a la API Se solicitaraacute al usuario que inicie la sesioacuten en el sistemaSystemoutprintln( Se estaacute llamando a la API QZNFRTVE que solicita exportaciones NFS)rc = pcmlcallProgram(qznfrtve)

if (rc == false)

Recupere la lista de mensajes del servidorAS400Message[] msgs = pcmlgetMessageList(qznfrtve)

Itere a traveacutes de los mensajes y escriacutebalos en la salida estaacutendarfor (int m = 0 m lt msgslength m++)

msgId = msgs[m]getID()msgText = msgs[m]getText()Systemoutprintln( + msgId + - + msgText)

Systemoutprintln( Ha fallado la llamada a QZNFRTVE Vea los mensajes anteriores )Systemexit (0)

El coacutedigo de retorno ha sido true la llamada a QZNFRTVE ha sido satisfactoria Escriba parte de los resultados en la salida estaacutendarelse

nbrExports = pcmlgetIntValue(qznfrtvereturnedRcdsFdbkInfonbrOfNFSExportEntries) Itere a traveacutes de la lista de exportacionesfor (indices[0] = 0 indices[0] lt nbrExports indices[0]++)

value = pcmlgetValue(qznfrtvereceiverpathName indices)Systemoutprintln(Nombre de viacutea = + value)

Itere y escriba Nombres de host de lecturaescritura para esta exportacioacutennbrOfReadWriteHostNames = pcmlgetIntValue(qznfrtvereceivernbrOfReadWriteHostNames

indices)for(indices[1] = 0 indices[1] lt nbrOfReadWriteHostNames indices[1]++)

value = pcmlgetValue(qznfrtvereceiverrwAccessListhostName indices)Systemoutprintln( Nombre de host de acceso

de lecturaescritura = + value)

Itere y escriba Nombres de host root para esta exportacioacutennbrOfRootHostNames = pcmlgetIntValue(qznfrtvereceivernbrOfRootHostNames indices)for(indices[1] = 0 indices[1] lt nbrOfRootHostNames indices[1]++)

512 IBM Toolbox para Java IBM Toolbox para Java

value = pcmlgetValue(qznfrtvereceiverrootAccessListhostName indices)Systemoutprintln( Nombre de host de acceso root = + value)

Itere y escriba Nombres de host de acceso para esta exportacioacutennbrOfAccessHostnames = pcmlgetIntValue(qznfrtvereceivernbrOfAccessHostNames

indices)for(indices[1] = 0 indices[1] lt nbrOfAccessHostnames indices[1]++)

value = pcmlgetValue(qznfrtvereceiveraccessHostNameshostName indices)Systemoutprintln( Nombre de host de acceso = + value)

Itere y escriba Opciones de host para esta exportacioacutennbrOfHostOpts = pcmlgetIntValue(qznfrtvereceivernbrOfHostOptions indices)for(indices[1] = 0 indices[1] lt nbrOfHostOpts indices[1]++)

Systemoutprintln( Opciones de host)value = pcmlgetValue(qznfrtvereceiverhostOptionsdataFileCodepage indices)Systemoutprintln( Paacutegina de coacutedigos de archivo de datos = + value)value = pcmlgetValue(qznfrtvereceiverhostOptionspathNameCodepage indices)Systemoutprintln( Paacutegina de coacutedigos de nombre de viacutea de acceso = + value)value = pcmlgetValue(qznfrtvereceiverhostOptionswriteModeFlag indices)Systemoutprintln( Distintivo de modalidad de escritura = + value)value = pcmlgetValue(qznfrtvereceiverhostOptionshostName indices)Systemoutprintln( Nombre de host = + value)

Fin de iteracioacuten en bucle por la lista de exportaciones

El fin de llamada a QZNFRTVE ha sido satisfactoriocatch(PcmlException e)

Systemoutprintln(egetLocalizedMessage())eprintStackTrace()Systemexit(-1)

Systemexit (0) Fin de main()

Ejemplos clases ReportWriterEn esta seccioacuten figura una lista de los ejemplos de coacutedigo que se proporcionan en la documentacioacuten delas clases ReportWriter de IBM Toolbox para Java

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

IBM Toolbox para Java 513

Ejemplo coacutemo se utiliza JSPReportProcessor con PDFContextEste ejemplo utiliza las clases JSPReportProcessor y PDFContext para obtener datos de un URLespecificado y convertir los datos a formato PDF Despueacutes los datos se convierten en un documento PDF

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Para ver el contenido de un archivo fuente JSP de ejemplo que puede emplear con JSPRunReportconsulte JSPcust_tablejsp Tambieacuten puede bajar un archivo zip con el archivo de ejemplo JSP El archivozip tambieacuten contiene los archivos de ejemplo XML y XSL que puede utilizar con el ejemplo deXSLReportProcessor (PCLRunReport) El ejemplo siguiente (JSPRunReport) utiliza las clases JSPReportProcessor y PDFContext para obtener datos de un URL especificado y convertir los datos al formato PDF Despueacutes los datos se convierten en un documento PDF Sintaxis del mandato java JSPRunReport ltUrl_jspgt ltnombre_archivo_salidagt

import javalangimport javaawtimport javaioimport javanetimport javaawtprintimport javaawteventimport javautilLinkedListimport javautilListIteratorimport javautilHashMap

import comibmxslcomposerfloimport comibmxslcomposerareasimport comibmxslcomposerframeworkimport comibmxslcomposerjava2dimport comibmxslcomposerprimimport comibmxslcomposerpropertiesimport comibmas400utilreportwriterprocessorimport comibmas400utilreportwriterpdfwriterimport javaioIOExceptionimport javaioSerializableimport orgxmlsaxSAXException

public class JSPRunReport

public static void main(String args[])

FileOutputStream fileout = null

Especifique el URL que contiene los datos que desea utilizar en el informe String JSPurl = args[0]URL jspurl = nulltry

jspurl = new URL(JSPurl)catch (MalformedURLException e)

Obtenga el nombre de archivo PDF de salida String filename = args[1]

514 IBM Toolbox para Java IBM Toolbox para Java

try fileout = new FileOutputStream(filename)catch (FileNotFoundException e)

Configure el formato de paacutegina Paper paper = new Paper()papersetSize(612792)papersetImageableArea(18 18 576 756)PageFormat pf = new PageFormat()pfsetPaper(paper)

Cree un objeto PDFContext y convierta FileOutputStream como OutputStream PDFContext pdfcontext = new PDFContext((OutputStream)fileout pf)

Systemoutprintln( Preparado para analizar documento XSL )

Cree el objeto JSPReportProcessor y establezca la plantilla en el JSP especificado JSPReportProcessor jspprocessor = new JSPReportProcessor(pdfcontext)try jspprocessorsetTemplate(jspurl)

catch (NullPointerException np)String mes = npgetMessage()Systemoutprintln(mes)Systemexit (0)

Procese el informe try jspprocessorprocessReport()catch (IOException e)

String mes = egetMessage()Systemoutprintln(mes)Systemexit (0)

catch (SAXException se) String mes = segetMessage()Systemoutprintln(mes)Systemexit (0)

Systemexit (0)

Ejemplo archivo JSP de ejemplo de JSPReportProcessorUtilice este archivo de ejemplo con el tema Ejemplo utilizacioacuten de JSPReportProcessor con PDFContext

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteltxml version=10gt

lt--Copyright (c) 1999 The Apache Software Foundation Reservados todos los derechos

--gt

lt page session=falsegtlt page language=java contentType=texthtml gtlt page import=javalang gtlt page import=javautil gt

IBM Toolbox para Java 515

lt-- ltjspuseBean id=rsquocust_tablersquo scope=rsquopagersquo class=rsquotableJSPcust_tablersquogt --gt

ltString[][] cust_data = new String [4][5]

public void jspInit()

cust_record_field [][] cust_data cust_record incluye el nombre la direccioacuten la ciudad la regioacuten administrativa y el coacutedigo postal del cliente

String [] cust_record_1 = IBM3602 4th StRochesterMn55901String [] cust_record_2 = HP400 2ndSpringfieldMo33559String [] cust_record_3 = Wolzack34 Hwy 52NLansingOr67895String [] cust_record_4 = Siems343 60thSalemTx12345

cust_data[0] = cust_record_1cust_data[1] = cust_record_2cust_data[2] = cust_record_3cust_data[3] = cust_record_4

gt

lt-- Primera prueba de anaacutelisis y composicioacuten --gtltforoot xmlnsfo=httpwwww3org1999XSLFormatgt

ltfolayout-master-setgtltfosimple-page-master master-name=theMaster gtltforegion-body region-name=theRegion margin-left=2ingtltfosimple-page-mastergtltfopage-sequence-master master-name=theMastergtltfosingle-page-master-reference master-name=thePagegtltfopage-sequence-mastergt

ltfolayout-master-setgtltfopage-sequence master-name=theMastergtltfoflow flow-name=theRegiongt

ltfoblockgtltfoblock text-align=centergt NORCAP ltfoblockgtltfoblock space-before=2in text-align=centergtPAN PACIFIC HOTEL IN SAN FRANCISCO ltfoblockgtltfoblock text-align=centergt FRIDAY DECEMBER 8-9 2000 ltfoblockgt

ltfoblockgtltfoblock space-before=5in font-size=8ptgtltfotable table-layout=fixedgt

ltfotable-column column-width=3ingtltfotable-column column-width=3ingtltfotable-column column-width=3ingtltfotable-column column-width=3ingtltfotable-column column-width=3ingtltfotable-bodygt

ltfotable-rowgtltfotable-cell column-number=1gt

ltfoblock border-bottom-style=solidgtNAMEltfoblockgtltfotable-cellgtltfotable-cell column-number=2gt

ltfoblock border-bottom-style=solidgtADDRESSltfoblockgtltfotable-cellgtltfotable-cell column-number=3gt

ltfoblock border-bottom-style=solidgtCITYltfoblockgtltfotable-cellgtltfotable-cell column-number=4gt

ltfoblock border-bottom-style=solidgtSTATEltfoblockgtltfotable-cellgtltfotable-cell column-number=5gt

ltfoblock border-bottom-style=solidgtZIP CODEltfoblockgtltfotable-cellgt

ltfotable-rowgt

516 IBM Toolbox para Java IBM Toolbox para Java

lt Antildeada fila a tablafor(int i = 0 i lt= 3 i++)

String[] _array = cust_data[i]gt

ltfotable-rowgtltfotable-cell column-number=1gt

ltfoblock space-before=1ingtlt if(_array[0]equals(IBM)) gt

ltfoinline background-color=bluegtlt outprint(_array[0]) gtltfoinlinegt

lt else gtlt outprint(_array[0]) gt

lt gtltfoblockgt

ltfotable-cellgtltfotable-cell column-number=2gt

ltfoblock space-before=1ingtlt outprint(_array[1]) gt

ltfoblockgtltfotable-cellgtltfotable-cell column-number=3gt

ltfoblock space-before=1ingtlt outprint(_array[2]) gt

ltfoblockgtltfotable-cellgtltfotable-cell column-number=4gt

ltfoblock space-before=1ingtlt outprint(_array[3]) gt

ltfoblockgtltfotable-cellgtltfotable-cell column-number=5gtltfoblock space-before=1ingt

lt outprint(_array[4]) gtltfoblockgt

ltfotable-cellgtltfotable-rowgt

lt fin de fila mientrasgt

ltfotable-bodygtltfotablegtltfoblockgt

ltfoflowgtltfopage-sequencegt

ltforootgt

Ejemplo coacutemo se utiliza XSLReportProcessor con PCLContextEste ejemplo no debe utilizarse ya que la clase XSLReportProcessor ha dejado de estar soportada

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante El ejemplo siguiente (PCLRunReport) utiliza las clases XSLPReportProcessor y PCLContext para obtener datos XML y convertir los datos al formato PCL Despueacutes los datos se pasan como una corriente a una OutputQueue de impresora Para ver el contenido de los archivos fuente XML y XSL de ejemplo que puede emplear con PCLRunReport consulte realestatexml y realestatexsl Tambieacuten puede bajar un archivo zip que contiene los archivos de ejemplo XML y XSL El archivo zip

IBM Toolbox para Java 517

tambieacuten contiene un archivo de ejemplo JSP que puede emplear con el ejemplo JSPReportProcessor (JSPRunReport) Sintaxis del mandato java PCLRunReport ltarchivo_xmlgt ltarchivo_xslgt

import javalangimport javaawtimport javaioimport javaawtprintimport javaawteventimport javautilLinkedListimport javautilListIteratorimport javautilHashMap

import comibmxslcomposerfloimport comibmxslcomposerareasimport comibmxslcomposerframeworkimport comibmxslcomposerjava2dimport comibmxslcomposerprimimport comibmxslcomposerpropertiesimport comibmas400utilreportwriterprocessorimport comibmas400utilreportwriterpclwriterimport javaioIOExceptionimport javaioSerializableimport orgxmlsaxSAXExceptionimport comibmas400access

public class PCLRunReport

public static void main(String args[])

SpooledFileOutputStream fileout = nullString xmldocumentName = args[0]String xsldocumentName = args[1]

String sys = ltsystemgt Inserte el nombre del servidor String user = ltusergt Inserte el nombre de perfil de usuario String pass = ltpasswordgt Inserte la contrasentildea

AS400 system = new AS400(sys user pass)

Inserte la cola de salida String outqname = QSYSLIBqusrsysLIBltoutqgtOUTQOutputQueue outq = new OutputQueue(system outqname)PrintParameterList parms = new PrintParameterList()parmssetParameter(PrintObjectATTR_OUTPUT_QUEUE outqgetPath())

tryfileout = new SpooledFileOutputStream(system parms null null)

catch (Exception e)

Configure el formato de paacutegina Paper paper = new Paper()papersetSize(612792)papersetImageableArea(18 36 576 720)PageFormat pf = new PageFormat()pfsetPaper(paper)

Cree un objeto PCLContext y convierta FileOutputStreamcomo OutputStream

518 IBM Toolbox para Java IBM Toolbox para Java

PCLContext pclcontext = new PCLContext((OutputStream)fileout pf)

Systemoutprintln(Preparado para analizar documento XSL)

Cree el objeto XSLReportProcessor XSLReportProcessor xslprocessor = new XSLReportProcessor(pclcontext)try xslprocessorsetXMLDataSource(xmldocumentName)catch (SAXException se)

String mes = segetMessage()Systemoutprintln(mes)Systemexit (0)

catch (IOException ioe) String mes = ioegetMessage()Systemoutprintln(mes)Systemexit (0)

catch (NullPointerException np)String mes = npgetMessage()Systemoutprintln(mes)Systemexit (0)

Establezca la plantilla en el origen de datos XML especificado try xslprocessorsetTemplate(xsldocumentName)catch (NullPointerException np)

String mes = npgetMessage()Systemoutprintln(mes)Systemexit (0)

catch (IOException e) String mes = egetMessage()Systemoutprintln(mes)Systemexit (0)

catch (SAXException se) String mes = segetMessage()Systemoutprintln(mes)Systemexit (0)

Procese el informe try xslprocessorprocessReport()catch (IOException e)

String mes = egetMessage()Systemoutprintln(mes)Systemexit (0)

catch (SAXException se) String mes = segetMessage()Systemoutprintln(mes)Systemexit (0)

Systemexit (0)

Ejemplo archivo XML de ejemplo de XSLReportProcessorEste ejemplo no debe utilizarse ya que la clase XSLReportProcessor ha dejado de estar soportada

IBM Toolbox para Java 519

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteltxml version=10gt

ltRESIDENTIAL-LISTINGS VERSION=061698gt

ltRESIDENTIAL-LISTING ID=ID1287 VERSION=061698gtltGENERALgtltTYPEgtApartmentltTYPEgtltPRICEgt$110000ltPRICEgtltSTRUCTUREgtltNUM-BEDSgt3ltNUM-BEDSgtltNUM-BATHSgt1ltNUM-BATHSgtltSTRUCTUREgtltAGE UNITS=YEARSgt15ltAGEgtltLOCATION COUNTRY=USA STATE=MA COUNTY=MIDDLESEX SECURITY=PublicgtltADDRESSgt13 Some AvenueltADDRESSgtltCITYgtDorchesterltCITYgtltZIPgt02121ltZIPgt

ltLOCATIONgtltIMAGE FORMAT=JPG WIDTH=300 HEIGHT=150 SRC=house1jpggtltMLSgt

ltMLS-CODE SECURITY=Restrictedgt30224877ltMLS-CODEgt

ltMLS-SOURCE SECURITY=PublicgtltNAMEgtBob the RealtorltNAMEgtltPHONEgt1-617-555-1212ltPHONEgtltFAXgt1-617-555-1313ltFAXgtltWEBgtltEMAILgtBobbigbuckscomltEMAILgtltSITEgtwwwbigbuckscomltSITEgtltWEBgtltMLS-SOURCEgtltMLSgtltDATESgtltLISTING-DATEgt3598ltLISTING-DATEgtltDATESgtltLAND-AREA UNITS=ACRESgt001ltLAND-AREAgt

ltGENERALgt

ltFEATURESgtltDISCLOSURESgt

In your dreamsltDISCLOSURESgt

ltUTILITIESgtYes

ltUTILITIESgtltEXTRASgt

Pest control includedltEXTRASgtltCONSTRUCTIONgt

Wallboard and glueltCONSTRUCTIONgtltACCESSgt

Front doorltACCESSgtltFEATURESgt

ltFINANCIALgtltASSUMABLEgt

I assume soltASSUMABLEgtltOWNER-CARRYgt

Too heavyltOWNER-CARRYgtltASSESMENTSgt

$150000ltASSESMENTSgtltDUESgt

$100

520 IBM Toolbox para Java IBM Toolbox para Java

ltDUESgtltTAXESgt

$2000ltTAXESgtltLENDERgt

Fly by nite mortgage coltLENDERgtltEARNESTgt

BurtltEARNESTgtltDIRECTIONSgt

North south east westltDIRECTIONSgtltFINANCIALgt

ltREMARKSgtltREMARKSgt

ltCONTACTSgtltCOMPANYgtltNAMEgt

Noplace RealtyltNAMEgtltADDRESSgt

12 Main StreetltADDRESSgtltCITYgt

Lowell MAltCITYgtltZIPgt

34567ltZIPgtltCOMPANYgtltAGENTgtltNAMEgt

Mary JonesltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltAGENTgtltOWNERgtltNAMEgtltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltOWNERgt

ltTENANTgtYes

ltTENANTgtltCOMMISIONgt15

ltCOMMISIONgtltCONTACTSgt

ltRESIDENTIAL-LISTINGgt

ltRESIDENTIAL-LISTING VERSION=061698 ID=ID1289gtltGENERALgt

IBM Toolbox para Java 521

ltIMAGE FORMAT=JPG WIDTH=300 HEIGHT=150 SRC=house2jpggtltIMAGEgt

ltMLSgtltMLS-CODE SECURITY=Restrictedgt

30298877ltMLS-CODEgt

ltMLS-SOURCE SECURITY=PublicgtltNAMEgtMary the RealtorltNAMEgtltPHONEgt1-617-555-3333ltPHONEgtltFAXgt1-617-555-4444ltFAXgtltWEBgtltEMAILgt

MarysomebuckscomltEMAILgtltSITEgt

wwwbigbuckscomltSITEgtltWEBgtltMLS-SOURCEgtltMLSgt

ltTYPEgtHomeltTYPEgt

ltPRICEgt$200000ltPRICEgt

ltAGE UNITS=MONTHSgt3ltAGEgt

ltLOCATION COUNTRY=USA STATE=CO COUNTY=MIDDLESEX SECURITY=PublicgtltADDRESSgt1 Main StreetltADDRESSgtltCITYgt

BoulderltCITYgtltZIPgt11111ltZIPgtltLOCATIONgt

ltSTRUCTUREgtltNUM-BEDSgt

2ltNUM-BEDSgt

ltNUM-BATHSgt2

ltNUM-BATHSgtltSTRUCTUREgt

ltDATESgtltLISTING-DATEgt

4398ltLISTING-DATEgt

ltDATESgt

522 IBM Toolbox para Java IBM Toolbox para Java

ltLAND-AREA UNITS=ACRESgt001ltLAND-AREAgt

ltGENERALgt

ltFEATURESgtltDISCLOSURESgt

In your dreamsltDISCLOSURESgt

ltUTILITIESgtYes

ltUTILITIESgtltEXTRASgt

Pest control includedltEXTRASgtltCONSTRUCTIONgt

Wallboard and glueltCONSTRUCTIONgtltACCESSgt

Front doorltACCESSgtltFEATURESgt

ltFINANCIALgtltASSUMABLEgt

I assume soltASSUMABLEgtltOWNER-CARRYgt

Too heavyltOWNER-CARRYgtltASSESMENTSgt

$150000ltASSESMENTSgtltDUESgt

$100ltDUESgtltTAXESgt

$2000ltTAXESgtltLENDERgt

Fly by nite mortgage coltLENDERgtltEARNESTgt

BurtltEARNESTgtltDIRECTIONSgt

North south east westltDIRECTIONSgtltFINANCIALgt

ltREMARKSgtltREMARKSgt

ltCONTACTSgtltCOMPANYgtltNAMEgt

Noplace RealtyltNAMEgtltADDRESSgt

12 Main StreetltADDRESSgtltCITYgt

Lowell MAltCITYgtltZIPgt

34567

IBM Toolbox para Java 523

ltZIPgtltCOMPANYgtltAGENTgtltNAMEgt

Mary JonesltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltAGENTgtltOWNERgtltNAMEgtltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltOWNERgt

ltTENANTgtYes

ltTENANTgtltCOMMISIONgt15

ltCOMMISIONgtltCONTACTSgt

ltRESIDENTIAL-LISTINGgtltRESIDENTIAL-LISTING VERSION=061698 ID=ID1290gt

ltGENERALgt

ltIMAGE FORMAT=JPG WIDTH=300 HEIGHT=150 SRC=house3jpggtltIMAGEgt

ltMLSgtltMLS-CODE SECURITY=Restrictedgt

20079877ltMLS-CODEgt

ltMLS-SOURCE SECURITY=PublicgtltNAMEgtBob the RealtorltNAMEgtltPHONEgt1-617-555-1212ltPHONEgtltFAXgt1-617-555-1313ltFAXgtltWEBgtltEMAILgt

BobbigbuckscomltEMAILgtltSITEgt

wwwbigbuckscomltSITEgtltWEBgtltMLS-SOURCEgtltMLSgt

ltTYPEgtApartmentltTYPEgt

524 IBM Toolbox para Java IBM Toolbox para Java

ltPRICEgt$65000ltPRICEgt

ltAGE UNITS=YEARSgt30ltAGEgt

ltLOCATION COUNTRY=USA STATE=MA COUNTY=MIDDLESEX SECURITY=PublicgtltADDRESSgt25 Which AveltADDRESSgtltCITYgt

CambridgeltCITYgtltZIPgt02139ltZIPgtltLOCATIONgt

ltSTRUCTUREgtltNUM-BEDSgt

3ltNUM-BEDSgt

ltNUM-BATHSgt1

ltNUM-BATHSgtltSTRUCTUREgt

ltDATESgtltLISTING-DATEgt

3597ltLISTING-DATEgt

ltDATESgt

ltLAND-AREA UNITS=ACRESgt005ltLAND-AREAgt

ltGENERALgt

ltFEATURESgtltDISCLOSURESgt

In your dreamsltDISCLOSURESgt

ltUTILITIESgtYes

ltUTILITIESgtltEXTRASgt

Pest control includedltEXTRASgtltCONSTRUCTIONgt

Wallboard and glueltCONSTRUCTIONgtltACCESSgt

Front doorltACCESSgtltFEATURESgt

ltFINANCIALgtltASSUMABLEgt

I assume soltASSUMABLEgtltOWNER-CARRYgt

Too heavyltOWNER-CARRYgtltASSESMENTSgt

IBM Toolbox para Java 525

$150000ltASSESMENTSgtltDUESgt

$100ltDUESgtltTAXESgt

$2000ltTAXESgtltLENDERgt

Fly by nite mortgage coltLENDERgtltEARNESTgt

BurtltEARNESTgtltDIRECTIONSgt

North south east westltDIRECTIONSgtltFINANCIALgt

ltREMARKSgtltREMARKSgt

ltCONTACTSgtltCOMPANYgtltNAMEgt

Noplace RealtyltNAMEgtltADDRESSgt

12 Main StreetltADDRESSgtltCITYgt

Lowell MAltCITYgtltZIPgt

34567ltZIPgtltCOMPANYgtltAGENTgtltNAMEgt

Mary JonesltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltAGENTgtltOWNERgtltNAMEgtltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltOWNERgt

ltTENANTgtYes

ltTENANTgtltCOMMISIONgt15

ltCOMMISIONgtltCONTACTSgt

ltRESIDENTIAL-LISTINGgt

526 IBM Toolbox para Java IBM Toolbox para Java

ltRESIDENTIAL-LISTING VERSION=061698 ID=ID1291gtltGENERALgt

ltIMAGE FORMAT=JPG WIDTH=300 HEIGHT=150 SRC=house4jpggtltIMAGEgt

ltMLSgtltMLS-CODE SECURITY=Restrictedgt

29389877ltMLS-CODEgt

ltMLS-SOURCE SECURITY=PublicgtltNAMEgtMary the RealtorltNAMEgtltPHONEgt1-617-555-3333ltPHONEgtltFAXgt1-617-555-4444ltFAXgtltWEBgtltEMAILgt

MarysomebuckscomltEMAILgtltSITEgt

wwwbigbuckscomltSITEgtltWEBgtltMLS-SOURCEgtltMLSgt

ltTYPEgtHome

ltTYPEgt

ltPRICEgt$449000ltPRICEgt

ltAGE UNITS=YEARSgt7ltAGEgt

ltLOCATION COUNTRY=USA STATE=MA COUNTY=MIDDLESEX SECURITY=PublicgtltADDRESSgt100 Any RoadltADDRESSgtltCITYgt

LexingtonltCITYgtltZIPgt02421ltZIPgtltLOCATIONgt

ltSTRUCTUREgtltNUM-BEDSgt

7ltNUM-BEDSgt

ltNUM-BATHSgt3

ltNUM-BATHSgtltSTRUCTUREgt

ltDATESgtltLISTING-DATEgt

6898

IBM Toolbox para Java 527

ltLISTING-DATEgtltDATESgt

ltLAND-AREA UNITS=ACRESgt20ltLAND-AREAgt

ltGENERALgt

ltFEATURESgtltDISCLOSURESgt

In your dreamsltDISCLOSURESgt

ltUTILITIESgtYes

ltUTILITIESgtltEXTRASgt

Pest control includedltEXTRASgtltCONSTRUCTIONgt

Wallboard and glueltCONSTRUCTIONgtltACCESSgt

Front doorltACCESSgtltFEATURESgt

ltFINANCIALgtltASSUMABLEgt

I assume soltASSUMABLEgtltOWNER-CARRYgt

Too heavyltOWNER-CARRYgtltASSESMENTSgt

$300000ltASSESMENTSgtltDUESgt

$100ltDUESgtltTAXESgt

$2000ltTAXESgtltLENDERgt

Fly by nite mortgage coltLENDERgtltEARNESTgt

BurtltEARNESTgtltDIRECTIONSgt

North south east westltDIRECTIONSgtltFINANCIALgt

ltREMARKSgtltREMARKSgt

ltCONTACTSgtltCOMPANYgtltNAMEgt

Noplace RealtyltNAMEgtltADDRESSgt

12 Main StreetltADDRESSgtltCITYgt

Lowell MA

528 IBM Toolbox para Java IBM Toolbox para Java

ltCITYgtltZIPgt

34567ltZIPgtltCOMPANYgtltAGENTgtltNAMEgt

Mary JonesltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltAGENTgtltOWNERgtltNAMEgtltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltOWNERgt

ltTENANTgtYes

ltTENANTgtltCOMMISIONgt15

ltCOMMISIONgtltCONTACTSgt

ltRESIDENTIAL-LISTINGgt

ltRESIDENTIAL-LISTINGSgt

Ejemplo archivo XSL de ejemplo de XSLReportProcessorEste ejemplo no debe utilizarse ya que la clase XSLReportProcessor ha dejado de estar soportada

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteltxml version=10gt

lt-- Ejemplo de estilo de un documento inmobiliario imaginado --gtltxslstylesheet version=10 xmlnsxsl=httpwwww3org1999XSLTransform

xmlnsfo=httpwwww3org1999XSLFormat gt

ltxsltemplate match=RESIDENTIAL-LISTINGSgtltforootgtltfolayout-master-setgt

ltfosimple-page-master master-name=theMastergtltforegion-body region-name=theRegiongt

ltfosimple-page-mastergtltfopage-sequence-master master-name=theMastergt

ltfosingle-page-master-reference master-name=thePage gtltfopage-sequence-mastergt

ltfolayout-master-setgtltfopage-sequence master-name=theMastergtltfoflow flow-name=theRegiongt

ltxslapply-templatesgtltfoflowgtltfopage-sequencegt

ltforootgtltxsltemplategt

IBM Toolbox para Java 529

ltxsltemplate match=RESIDENTIAL-LISTINGgt

ltfoblock font-family=Times New Roman font-weight=normal font-size=24ptbackground-color=silver padding-before=5px padding-after=5pxpadding-start=5px padding-end=5px border-before-style=solidborder-before-color=blue border-after-style=solid border-after-color=blueborder-start-style=solid border-start-color=blue border-end-style=solidborder-end-color=bluegt

ltfocharacter character=y background-color=blue border-before-style=solidborder-before-color=yellow border-after-style=solid border-after-color=yellowborder-start-style=solid border-start-color=yellow border-end-style=solidborder-end-color=yellow gt

ltfoblockgt

ltxsltemplategtltxslstylesheetgt

Ejemplos RFMLEn esta seccioacuten figura una lista de los ejemplos de coacutedigo que se proporcionan en la documentacioacuten delcomponente RFML de IBM Toolbox para Javav Ejemplo Utilizacioacuten de RFML comparada con la utilizacioacuten de clases Record de IBM Toolbox para Javav Ejemplo Archivo fuente RFML

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo archivo fuente RFMLEste archivo fuente RFML de ejemplo define el formato de los registros de cliente seguacuten el uso realizadoen el ejemplo de RFML acerca de Coacutemo se utiliza RFML en comparacioacuten con el uso de las clases Recordde IBM Toolbox para Java

Este archivo fuente RFML podriacutea ser un archivo de texto denominado qcustcdtrfml

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteltxml version=10 encoding=UTF-8 standalone=nogtltDOCTYPE rfml SYSTEM rfmldtdgt

ltrfml version=40 ccsid=819gt

ltrecordformat name=cusrecgt

530 IBM Toolbox para Java IBM Toolbox para Java

ltdata name=cusnum type=zoned length=6 precision=0 init=0gtltdata name=lstnam type=char length=8 ccsid=37 init=Agtltdata name=init type=char length=3 ccsid=37 init=Bgtltdata name=street type=char length=13 ccsid=37 init=Cgtltdata name=city type=char length=6 ccsid=37 init=Dgtltdata name=state type=char length=2 ccsid=37 init=Egtltdata name=zipcod type=zoned length=5 init=1gtltdata name=cdtlmt type=zoned length=4 init=2gtltdata name=chgcod type=zoned length=1 init=3gtltdata name=baldue type=zoned length=6 precision=2 init=4gtltdata name=cdtdue type=zoned length=6 precision=2 init=5gt

ltrecordformatgt

ltrecordformat name=cusrec1gt

ltdata name=cusnum type=zoned length=6 precision=0 init=0gtltdata name=lstnam type=char length=8 ccsid=37 init=Agtltdata name=init type=char length=3 ccsid=37 init=Bgtltdata name=street type=char length=13 ccsid=37 init=Cgtltdata name=city type=char length=6 ccsid=37 init=Dgtltdata name=state type=char length=2 ccsid=37 init=Egtltdata name=zipcod type=zoned length=5 init=1gtltdata name=cdtlmt type=zoned length=4 init=2gtltdata name=chgcod type=zoned length=1 init=3gtltdata name=baldue type=struct struct=balancegtltdata name=cdtdue type=struct struct=balancegt

ltrecordformatgt

ltrecordformat name=cusrecAsciigt

ltdata name=cusnum type=zoned length=6 precision=0 init=0gtltdata name=lstnam type=char length=8 init=Agtltdata name=init type=char length=3 init=Bgtltdata name=street type=char length=13 init=Cgtltdata name=city type=char length=6 init=Dgtltdata name=state type=char length=2 init=Egtltdata name=zipcod type=zoned length=5 init=1gtltdata name=cdtlmt type=zoned length=4 init=2gtltdata name=chgcod type=zoned length=1 init=3gtltdata name=baldue type=zoned length=6 precision=2 init=4gtltdata name=cdtdue type=zoned length=6 precision=2 init=5gt

ltrecordformatgt

ltstruct name=balancegtltdata name=amount type=zoned length=6 precision=2 init=7gt

ltstructgt

ltrfmlgt

Referencia relacionadaldquoEjemplo coacutemo se utiliza RFML en comparacioacuten con el uso de las clases Record de IBM Toolbox paraJavardquo en la paacutegina 320Este ejemplo muestra las diferencias entre el uso de RFML y el uso de las clases Record de IBM Toolboxpara Java

Ejemplo coacutemo se utiliza una credencial de siacutembolo de perfil paraintercambiar la identidad de la hebra de IBM iEl siguiente ejemplo de coacutedigo muestra coacutemo se utiliza una credencial de siacutembolo de perfil paraintercambiar la identidad de la hebra de IBM i y trabajar en nombre de un determinado usuario

IBM Toolbox para Java 531

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Cree una ProfileTokenCredential de un solo uso con un tiempo de espera de 60 segundosAS400 system = new AS400()ProfileTokenCredential pt = new ProfileTokenCredential()ptsetSystem(system)ptsetTimeoutInterval(60)ptsetTokenType(ProfileTokenCredentialTYPE_SINGLE_USE)

Es preciso sustituir un ID de usuario y una contrasentildea vaacutelidosptsetTokenExtended(user password)

Intercambie la identidad de hebra de OS400 y recupere una credencial para maacutes adelante hacer un nuevo intercambio de regreso a la identidad originalAS400Credential cr = ptswap(true)

Cree un segundo objeto AS400AS400 system2 = new AS400()CommandCall cmd = new CommandCall(system)

Trabaje bajo la identidad intercambiada en este momento

Intercambie de nuevo para regresar a la identidad de hebra original de OS400crswap()

Borre las credencialescrdestroy()ptdestroy()systemdisconnectAllServices()system2disconnectAllServices()

Ejemplos de las clases de servletsLos ejemplos que figuran a continuacioacuten muestran algunas maneras de coacutemo se pueden utilizar las clasesde servletsv Ejemplo coacutemo se utiliza la clase ListRowDatav Ejemplo coacutemo se utiliza la clase RecordListRowDatav Ejemplo coacutemo se utiliza la clase SQLResultSetRowDatav Ejemplo coacutemo se utiliza la clase HTMLFormConverterv Ejemplo coacutemo se utiliza la clase ListMetaDatav Ejemplo coacutemo se utiliza la clase SQLResultSetMetaDatav Ejemplo visualizar una lista de recursos en un servlet

Tambieacuten se pueden utilizar juntas las clases de servlets y las clases HTML como en este ejemplo

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

532 IBM Toolbox para Java IBM Toolbox para Java

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo coacutemo se utiliza ListRowDataLas tres partes de este ejemplo ilustran la utilizacioacuten de la clase ListRowData para generar y visualizarHTML

Este ejemplo consta de tres partesv ldquoCoacutedigo fuente Java que muestra coacutemo funciona la clase ListRowDatardquov ldquoCoacutedigo fuente HTML generado a partir del fuente Java mediante HTMLTableConverterrdquov ldquoVisualizacioacuten en un navegador del HTML generadordquo en la paacutegina 534

Coacutedigo fuente Java que muestra coacutemo funciona la clase ListRowData Acceda a una cola de datos existente que no esteacute vaciacuteaKeyedDataQueue dq = new KeyedDataQueue(systemObject_ QSYSLIBMYLIBLIBMYDQDTAQ)

Cree un objeto metadatosListMetaData metaData = new ListMetaData(2)

Establezca que la primera columna sea el ID de clientemetaDatasetColumnName(0 ID de cliente)metaDatasetColumnLabel(0 ID de cliente)metaDatasetColumnType(0 RowMetaDataTypeSTRING_DATA_TYPE)

Establezca que la segunda columna sea el pedido que se ha de procesarmetaDatasetColumnName(1 Nuacutemero de pedido)metaDatasetColumnLabel(1 Nuacutemero de pedido)metaDatasetColumnType(1 RowMetaDataTypeSTRING_DATA_TYPE)

Cree un objeto ListRowDataListRowData rowData = new ListRowData()rowDatasetMetaData(metaData)

Obtenga las entradas a partir de la cola de datosKeyedDataQueueEntry data = dqread(key 0 EQ)while (data = null)

Antildeada la entrada de la cola al objeto datos de filaObject[] row = new Object[2]row[0] = new String(key)row[1] = new String(datagetData())rowDataaddRow(row)

Obtenga otra entrada de la coladata = dqread(key 0 EQ)

Cree un objeto conversor HTML y convierta los datos de fila (rowData) a HTMLHTMLTableConverter conv = new HTMLTableConverter()convsetUseMetaData(true)HTMLTable[] html = convconvertToTables(rowData)

Visualice la salida del conversorSystemoutprintln(html[0])

Coacutedigo fuente HTML generado a partir del fuente Java mediante HTMLTableConverter

Al utilizar la ldquoClase HTMLTableConverterrdquo en la paacutegina 244 en el ejemplo de fuente Java anterior segenera el siguiente coacutedigo HTML

IBM Toolbox para Java 533

lttablegtlttrgtltthgtID de clienteltthgtltthgtNuacutemero de pedidoltthgtlttrgtlttrgtlttdgt777-53-4444lttdgtlttdgt12345-XYZlttdgtlttrgtlttrgtlttdgt777-53-4444lttdgtlttdgt56789-ABClttdgtlttrgtlttablegt

Visualizacioacuten en un navegador del HTML generado

La tabla que hay a continuacioacuten muestra coacutemo se visualiza el coacutedigo fuente HTML en un navegador

ID de cliente Nuacutemero de pedido777-53-4444 12345-XYZ777-53-4444 56789-ABC

Ejemplo coacutemo se utiliza RecordListRowDataEste ejemplo muestra el funcionamiento de la clase RecordListRowData el coacutedigo fuente HTML generadomediante la utilizacioacuten de la clase HTMLTableConverted y tambieacuten coacutemo visualiza un navegador elHTML generado

Este ejemplo consta de tres partesv Fuente Java que muestra coacutemo funciona la clase RecordListRowDatav Fuente HTML generado a partir del fuente Java mediante HTMLTableConverterv Visualizacioacuten en un navegador del HTML generado

Fuente Java que muestra coacutemo funciona la clase RecordListRowData Cree un objeto servidorAS400 mySystem = new AS400 (mySystemmyCompcom UserId Password)

Obtenga el nombre de la viacutea de acceso del archivoQSYSObjectPathName file = new QSYSObjectPathName(myLibrary myFile first mbr)String ifspath = filegetPath()

Cree un objeto de archivo que represente el archivoSequentialFile sf = new SequentialFile(mySystem ifspath)

Recupere el formato de registro del archivoAS400FileRecordDescription recordDescription = new AS400FileRecordDescription(mySystem ifspath)RecordFormat recordFormat = recordDescriptionretrieveRecordFormat()[0]

Establezca el formato de registro del archivosfsetRecordFormat(recordFormat)

Obtenga los registros del archivoRecord[] records = sfreadAll()

Cree un objeto RecordListRowData y antildeaacutedale los registrosRecordListRowData rowData = new RecordListRowData(recordFormat)

for (int i=0 i lt recordslength i++)

rowDataaddRow(records[i])

534 IBM Toolbox para Java IBM Toolbox para Java

Cree un objeto conversor HTML y convierta los datos de fila (rowData) a HTMLHTMLTableConverter conv = new HTMLTableConverter()convsetMaximumTableSize(3)HTMLTable[] html = convconvertToTables(rowData)

Visualice la primera tabla HTML generada por el conversorSystemoutprintln(html[0])

Fuente HTML generado a partir del fuente Java mediante HTMLTableConverter

Al utilizar la clase HTMLTableConverter en el ejemplo de fuente Java anterior se genera el siguientecoacutedigo HTMLlttablegtlttrgtltthgtCNUMltthgtltthgtLNAMltthgtltthgtINITltthgtltthgtSTRltthgtltthgtCTYltthgtltthgtSTATEltthgtltthgtZIPltthgtltthgtCTLMTltthgtltthgtCHGCODltthgtltthgtBDUEltthgtltthgtCTDUEltthgtlttrgtlttrgtlttdgt938472lttdgtlttdgtHenning lttdgtlttdgtG Klttdgtlttdgt4859 Elm Ave lttdgtlttdgtDallaslttdgtlttdgtTXlttdgtlttd align=rightgt75217lttdgtlttd align=rightgt5000lttdgtlttd align=rightgt3lttdgtlttd align=rightgt3700lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt839283lttdgtlttdgtJones lttdgtlttdgtB Dlttdgtlttdgt21B NW 135 StlttdgtlttdgtClay lttdgtlttdgtNYlttdgtlttd align=rightgt13041lttdgtlttd align=rightgt400lttdgtlttd align=rightgt1lttdgtlttd align=rightgt10000lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt392859lttdgtlttdgtVine lttdgtlttdgtS SlttdgtlttdgtPO Box 79 lttdgtlttdgtBrotonlttdgtlttdgtVTlttdgtlttd align=rightgt5046lttdgtlttd align=rightgt700lttdgtlttd align=rightgt1lttdgt

IBM Toolbox para Java 535

lttd align=rightgt43900lttdgtlttd align=rightgt000lttdgtlttrgtlttablegt

Visualizacioacuten en un navegador del HTML generado

La tabla que hay a continuacioacuten muestra coacutemo se visualiza el coacutedigo fuente HTML en un navegador

NUacuteMCLIAPELLIDO INIC CALLE CIUDAD ESTADO COacuteDPOST LMTCDT COacuteDCARG SALDO CDTVENC

938472 Henning G K 4859 Elm Ave Dallas TX 75217 5000 3 3700 000

839283 Jones B D 21B NW 135 St Clay NY 13041 400 1 10000 000

392859 Vine S S PO Box 79 Broton VT 5046 700 1 43900 000

Ejemplo coacutemo se utiliza SQLResultSetRowDataEste ejemplo muestra el funcionamiento de la clase SQLResultSetRowData el coacutedigo fuente HTMLgenerado y tambieacuten coacutemo visualiza un navegador el HTML generado

Este ejemplo consta de tres partesv Fuente Java que muestra coacutemo funciona la clase SQLResultSetRowDatav Fuente HTML generado a partir del fuente Java mediante HTMLTableConverterv Visualizacioacuten en un navegador del HTML generado

Fuente Java que muestra coacutemo funciona la clase SQLResultSetRowData Cree un objeto servidorAS400 mySystem = new AS400 (mySystemmyCompcom UserId Password)

Registre y obtenga una conexioacuten con la base de datosDriverManagerregisterDriver(new comibmas400accessAS400JDBCDriver())Connection connection = DriverManagergetConnection(jdbcas400 + mySystemgetSystemName())

Ejecute una sentencia SQL y obtenga el conjunto de resultadosStatement statement = connectioncreateStatement()statementexecute(select from qiwsqcustcdt)ResultSet resultSet = statementgetResultSet()

Cree el objeto SQLResultSetRowData e inicialice con el conjunto de resultadosSQLResultSetRowData rowData = new SQLResultSetRowData(resultSet)

Cree un objeto tabla HTML para que lo utilice el conversorHTMLTable table = new HTMLTable()

Establezca cabeceras de columna descriptivasString[] headers = Nuacutemero cliente Apellido Iniciales

Calle Ciudad Estado Coacutedigo postalLiacutemite creacutedito Coacutedigo cargo SaldoCreacutedito vencido

tablesetHeader(headers)

Establezca varias opciones de formato dentro de la tablatablesetBorderWidth(2)tablesetCellSpacing(1)tablesetCellPadding(1)

Cree un objeto conversor HTML y convierta los datos de fila (rowData) a HTMLHTMLTableConverter conv = new HTMLTableConverter()convsetTable(table)HTMLTable[] html = convconvertToTables(rowData)

Visualice la tabla HTML generada por el conversorSystemoutprintln(html[0])

536 IBM Toolbox para Java IBM Toolbox para Java

Fuente HTML generado a partir del fuente Java mediante HTMLTableConverter

Al utilizar la clase HTMLTableConverter en el ejemplo de fuente Java anterior se genera el siguientecoacutedigo HTMLlttable border=2 cellpadding=1 cellspacing=1gtlttrgtltthgtNuacutemero de clienteltthgtltthgtApellidoltthgtltthgtInicialesltthgtltthgtDireccioacutenCalleltthgtltthgtCiudadltthgtltthgtEstadoltthgtltthgtCoacutedigo postalltthgtltthgtLiacutemite creacuteditoltthgtltthgtCoacutedigo cargoltthgtltthgtSaldoltthgtltthgtCreacutedito vencidoltthgtlttrgtlttrgtlttdgt938472lttdgtlttdgtHenning lttdgtlttdgtG Klttdgtlttdgt4859 Elm Ave lttdgtlttdgtDallaslttdgtlttdgtTXlttdgtlttd align=rightgt75217lttdgtlttd align=rightgt5000lttdgtlttd align=rightgt3lttdgtlttd align=rightgt3700lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt839283lttdgtlttdgtJones lttdgtlttdgtB Dlttdgtlttdgt21B NW 135 StlttdgtlttdgtClay lttdgtlttdgtNYlttdgtlttd align=rightgt13041lttdgtlttd align=rightgt400lttdgtlttd align=rightgt1lttdgtlttd align=rightgt10000lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt392859lttdgtlttdgtVine lttdgtlttdgtS SlttdgtlttdgtPO Box 79 lttdgtlttdgtBrotonlttdgtlttdgtVTlttdgtlttd align=rightgt5046lttdgtlttd align=rightgt700lttdgtlttd align=rightgt1lttdgtlttd align=rightgt43900lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt938485lttdgtlttdgtJohnson lttdgtlttdgtJ Alttdgtlttdgt3 Alpine Way lttdgtlttdgtHelen lttdgtlttdgtGAlttdgtlttd align=rightgt30545lttdgt

IBM Toolbox para Java 537

lttd align=rightgt9999lttdgtlttd align=rightgt2lttdgtlttd align=rightgt398750lttdgtlttd align=rightgt3350lttdgtlttrgtlttrgtlttdgt397267lttdgtlttdgtTyron lttdgtlttdgtW Elttdgtlttdgt13 Myrtle Dr lttdgtlttdgtHectorlttdgtlttdgtNYlttdgtlttd align=rightgt14841lttdgtlttd align=rightgt1000lttdgtlttd align=rightgt1lttdgtlttd align=rightgt000lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt389572lttdgtlttdgtStevens lttdgtlttdgtK Llttdgtlttdgt208 Snow PasslttdgtlttdgtDenverlttdgtlttdgtCOlttdgtlttd align=rightgt80226lttdgtlttd align=rightgt400lttdgtlttd align=rightgt1lttdgtlttd align=rightgt5875lttdgtlttd align=rightgt150lttdgtlttrgtlttrgtlttdgt846283lttdgtlttdgtAlison lttdgtlttdgtJ Slttdgtlttdgt787 Lake Dr lttdgtlttdgtIsle lttdgtlttdgtMNlttdgtlttd align=rightgt56342lttdgtlttd align=rightgt5000lttdgtlttd align=rightgt3lttdgtlttd align=rightgt1000lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt475938lttdgtlttdgtDoe lttdgtlttdgtJ Wlttdgtlttdgt59 Archer Rd lttdgtlttdgtSutterlttdgtlttdgtCAlttdgtlttd align=rightgt95685lttdgtlttd align=rightgt700lttdgtlttd align=rightgt2lttdgtlttd align=rightgt25000lttdgtlttd align=rightgt10000lttdgtlttrgtlttrgtlttdgt693829lttdgtlttdgtThomas lttdgtlttdgtA Nlttdgtlttdgt3 Dove CirclelttdgtlttdgtCasperlttdgtlttdgtWYlttdgtlttd align=rightgt82609lttdgtlttd align=rightgt9999lttdgtlttd align=rightgt2lttdgt

538 IBM Toolbox para Java IBM Toolbox para Java

lttd align=rightgt000lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt593029lttdgtlttdgtWilliamslttdgtlttdgtE Dlttdgtlttdgt485 SE 2 Ave lttdgtlttdgtDallaslttdgtlttdgtTXlttdgtlttd align=rightgt75218lttdgtlttd align=rightgt200lttdgtlttd align=rightgt1lttdgtlttd align=rightgt2500lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt192837lttdgtlttdgtLee lttdgtlttdgtF Llttdgtlttdgt5963 Oak St lttdgtlttdgtHectorlttdgtlttdgtNYlttdgtlttd align=rightgt14841lttdgtlttd align=rightgt700lttdgtlttd align=rightgt2lttdgtlttd align=rightgt48950lttdgtlttd align=rightgt050lttdgtlttrgtlttrgtlttdgt583990lttdgtlttdgtAbraham lttdgtlttdgtM Tlttdgtlttdgt392 Mill St lttdgtlttdgtIsle lttdgtlttdgtMNlttdgtlttd align=rightgt56342lttdgtlttd align=rightgt9999lttdgtlttd align=rightgt3lttdgtlttd align=rightgt50000lttdgtlttd align=rightgt000lttdgtlttrgtlttablegt

Visualizacioacuten en un navegador del HTML generado

La tabla que hay a continuacioacuten muestra coacutemo se visualiza el coacutedigo fuente HTML en un navegador

Nuacutemerocliente Apellido Iniciales Calle Ciudad Estado

Coacutedigopostal

Liacutemitecreacutedito

Coacutedigocargo Saldo

Creacuteditovencido

938472 Henning G K 4859 ElmAve

Dallas TX 75217 5000 3 3700 000

839283 Jones B D 21B NW135 St

Clay NY 13041 400 1 10000 000

392859 Vine S S PO Box 79 Broton VT 5046 700 1 43900 000

938485 Johnson J A 3 AlpineWay

Helen GA 30545 9999 2 398750 3350

397267 Tyron W E 13 MyrtleDr

Hector NY 14841 1000 1 000 000

389572 Stevens K L 208 SnowPass

Denver CO 80226 400 1 5875 150

IBM Toolbox para Java 539

Nuacutemerocliente Apellido Iniciales Calle Ciudad Estado

Coacutedigopostal

Liacutemitecreacutedito

Coacutedigocargo Saldo

Creacuteditovencido

846283 Alison J S 787 LakeDr

Isle MN 56342 5000 3 1000 000

475938 Doe J W 59 ArcherRd

Sutter CA 95685 700 2 25000 10000

693829 Thomas A N 3 DoveCircle

Casper WY 82609 9999 2 000 000

593029 Williams E D 485 SE 2Ave

Dallas TX 75218 200 1 2500 000

192837 Lee F L 5963 OakSt

Hector NY 14841 700 2 48950 050

583990 Abraham M T 392 Mill St Isle MN 56342 9999 3 50000 000

Ejemplo coacutemo se utiliza HTMLFormConverterMientras ejecuta un servidor Web con soporte para servlets compile y ejecute el ejemplo siguiente paraver coacutemo funciona la clase HTMLFormConverterimport javaawtColorimport javaioIOExceptionimport javaioPrintWriterimport javasqlDriverManagerimport javasqlConnectionimport javasqlResultSetimport javasqlStatementimport javautilEnumerationimport javautilHashtableimport javaxservletimport javaxservlethttp

import comibmas400utilhtmlGridLayoutFormPanelimport comibmas400utilhtmlHTMLConstantsimport comibmas400utilhtmlHTMLFormimport comibmas400utilhtmlHTMLTableimport comibmas400utilhtmlHTMLTableCaptionimport comibmas400utilhtmlHTMLTextimport comibmas400utilhtmlLabelFormElementimport comibmas400utilhtmlLineLayoutFormPanelimport comibmas400utilhtmlSubmitFormInputimport comibmas400utilhtmlTextFormInput

import comibmas400utilservletHTMLFormConverterimport comibmas400utilservletSQLResultSetRowData

import comibmas400accessAS400import comibmas400accessAS400JDBCDriver

Ejemplo de coacutemo se utiliza la clase HTMLFormConverter en un servlet

public class HTMLFormConverterExample extends HttpServlet

private String userId_ = myUserIdprivate String password_ = myPwdprivate AS400 system_

private Connection databaseConnection_

540 IBM Toolbox para Java IBM Toolbox para Java

Haga un borrado antes de volver al formulario HTML principalpublic void cleanup()

try

Cierre la conexioacuten con la base de datosif (databaseConnection_ = null)

databaseConnection_close()databaseConnection_ = null

catch (Exception e)

eprintStackTrace ()

Convierta los datos de fila a HTML formateadoprivate HTMLTable[] convertRowData(SQLResultSetRowData rowData)

try

Cree el conversor el cual generaraacute HTML a partir del conjunto de resultados devueltos por la consulta de base de datosHTMLFormConverter converter = new HTMLFormConverter()

Establezca los atributos del formularioconvertersetBorderWidth(3)convertersetCellPadding(2)convertersetCellSpacing(4)

Convierta los datos de fila a HTMLHTMLTable[] htmlTable = converterconvertToForms(rowData)return htmlTable

catch (Exception e)

eprintStackTrace ()return null

Devuelva la respuesta al clientepublic void doGet(HttpServletRequest request HttpServletResponse response)

throws IOException ServletException

responsesetContentType(texthtml)PrintWriter out = responsegetWriter()

outprintln(showHtmlMain())outclose()

Maneje los datos enviados al formulariopublic void doPost (HttpServletRequest request HttpServletResponse response)

throws ServletException IOException

SQLResultSetRowData rowData = new SQLResultSetRowData()HTMLTable[] htmlTable = null

Obtenga el objeto sesioacuten actual o cree uno si es necesarioHttpSession session = requestgetSession(true)

IBM Toolbox para Java 541

ServletOutputStream out = responsegetOutputStream()

responsesetContentType(texthtml)

Hashtable parameters = getRequestParameters (request)

Recupere los valores de los datos de fila y los valores de tabla HTML de esta sesioacutenrowData = (SQLResultSetRowData) sessiongetValue(sessionRowData)htmlTable = (HTMLTable[]) sessiongetValue(sessionHtmlTable)

Si es la primera vez que se pasa mostrar el primer registroif (parameterscontainsKey(getRecords))

rowData = getAllRecords(parameters out)

if (rowData = null)

Establezca el valor de los datos de fila para esta sesioacutensessionputValue(sessionRowData rowData)

Situacuteese en el primer registrorowDatafirst()

Convierta los datos de fila a HTML formateadohtmlTable = convertRowData(rowData)

if (htmlTable = null)

rowDatafirst()sessionputValue(sessionHtmlTable htmlTable)outprintln(showHtmlForRecord(htmlTable 0))

Si se ha pulsado el botoacuten Volver a principal volver al formulario HTML principalelse if (parameterscontainsKey(returnToMain))

sessioninvalidate()cleanup()outprintln(showHtmlMain())

Si se ha pulsado el botoacuten Primero mostrar el primer registroelse if (parameterscontainsKey(getFirstRecord))

rowDatafirst()outprintln(showHtmlForRecord(htmlTable 0))

Si se ha pulsado el botoacuten Anterior mostrar el registro anteriorelse if (parameterscontainsKey(getPreviousRecord))

if (rowDataprevious())

rowDatafirst()outprintln(showHtmlForRecord(htmlTable rowDatagetCurrentPosition()))

Si se ha pulsado el botoacuten Siguiente mostrar el registro siguienteelse if (parameterscontainsKey(getNextRecord))

if (rowDatanext())

rowDatalast()outprintln(showHtmlForRecord(htmlTable rowDatagetCurrentPosition()))

542 IBM Toolbox para Java IBM Toolbox para Java

Si se ha pulsado el botoacuten Uacuteltimo mostrar el uacuteltimo registroelse if (parameterscontainsKey(getLastRecord))

rowDatalast()outprintln(showHtmlForRecord(htmlTable rowDatagetCurrentPosition()))

Si no se ha producido ninguno de los casos anteriores debe haber un errorelse

outprintln(showHtmlForError(Se ha producido un error interno Paraacutemetros inesperados))

Guarde el valor de los datos de fila de esta sesioacuten para que la posicioacuten actual se actualice en el objeto asociado a esta sesioacutensessionputValue(sessionRowData rowData)

Cierre la corriente de datos de salidaoutclose()

Obtenga todos los registros del archivo entrado por el usuarioprivate SQLResultSetRowData getAllRecords(Hashtable parameters ServletOutputStream out)

throws IOException

SQLResultSetRowData records = null

try

Obtenga el nombre del sistema de la biblioteca y del archivo a partir de la lista de paraacutemetrosString sys = ((String) parametersget(System))toUpperCase()String lib = ((String) parametersget(Library))toUpperCase()String file = ((String) parametersget(File))toUpperCase()if ((sys == null || sysequals()) ||

(lib == null || libequals()) ||(file == null || fileequals()))

outprintln(showHtmlForError(No es vaacutelido el nombre del sistema

del archivo o de la biblioteca))else

Obtenga la conexioacuten con el servidorgetDatabaseConnection (sys out)if (databaseConnection_ = null)

Statement sqlStatement = databaseConnection_createStatement()

Consulte la base de datos para obtener el conjunto de resultadosString query = SELECT FROM + lib + + fileResultSet rs = sqlStatementexecuteQuery (query)

boolean rsHasRows = rsnext() situacutee el cursor en la primera fila

Mostrar un mensaje de error si el archivo no contiene ninguacuten registro en caso contrario establecer los datos de fila en los datos del conjunto de resultadosif (rsHasRows)

outprintln(showHtmlForError(No hay registros en el archivo))else

records = new SQLResultSetRowData (rs)

No cierre Statement antes de terminar de usar

IBM Toolbox para Java 543

ResultSet porque de lo contrario se produciriacutean anomaliacuteassqlStatementclose()

catch (Exception e)

eprintStackTrace ()outprintln(showHtmlForError(etoString()))

return records

Establezca una conexioacuten de base de datosprivate void getDatabaseConnection (String sysName ServletOutputStream out)

throws IOException

if (databaseConnection_ == null)

try

databaseConnection_ =DriverManagergetConnection(jdbcas400sysNameuserId_password_ )

catch (Exception e)

eprintStackTrace ()outprintln(showHtmlForError(etoString()))

Obtiene los paraacutemetros a partir de una peticioacuten de servlet HTTPprivate static Hashtable getRequestParameters (HttpServletRequest request)

Hashtable parameters = new Hashtable ()Enumeration enum = requestgetParameterNames()while (enumhasMoreElements())

String key = (String) enumnextElement()String value = requestgetParameter (key)parametersput (key value)

return parameters

Obtenga la informacioacuten de servletpublic String getServletInfo()

return HTMLFormConverterExample

Siga los pasos de inicializacioacutenpublic void init(ServletConfig config)

try

superinit(config)

Registre el controlador JDBCtry

544 IBM Toolbox para Java IBM Toolbox para Java

DriverManagerregisterDriver(new AS400JDBCDriver())catch (Exception e)

Systemoutprintln(Controlador JDBC no encontrado)

catch (Exception e)

eprintStackTrace()

Establezca la informacioacuten de cabecera de paacuteginaprivate String showHeader(String title)

StringBuffer page = new StringBuffer()pageappend(lthtmlgtltheadgtlttitlegt + title + lttitlegt)pageappend(ltheadgtltbody bgcolor=blanchedalmondgt)return pagetoString ()

Mostrar la paacutegina HTML con la debida informacioacuten de errorprivate String showHtmlForError(String message)

String title = ErrorStringBuffer page = new StringBuffer()pageappend (showHeader (title))try

Cree el objeto formulario HTMLHTMLForm errorForm = new HTMLForm(HTMLFormConverterExample)

Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formularioerrorFormsetMethod(HTMLFormMETHOD_POST)

Cree un panel de una sola columna al que se antildeadiraacuten los elementos HTMLGridLayoutFormPanel grid = new GridLayoutFormPanel()

Cree el elemento de texto para el error y antildeaacutedalo al panelHTMLText text = new HTMLText(message)textsetBold(true)textsetColor(Colorred)gridaddElement(text)

Cree el botoacuten para volver a principal y antildeaacutedalo al panelgridaddElement(new SubmitFormInput(returnToMain Volver a principal))

Antildeada el panel al formulario HTMLerrorFormaddElement(grid)

pageappend(errorFormtoString())catch (Exception e)

eprintStackTrace ()pageappend(ltbodygtlthtmlgt)return pagetoString()

Mostrar el formulario HTML para un registro individualprivate String showHtmlForRecord(HTMLTable[] htmlTable int position)

IBM Toolbox para Java 545

String title = Ejemplo de HTMLFormConverterStringBuffer page = new StringBuffer()pageappend (showHeader (title))

pageappend(lth1gt + title + lth1gt)

try

Cree el objeto formulario HTMLHTMLForm recForm = new HTMLForm(HTMLFormConverterExample)

Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formulariorecFormsetMethod(HTMLFormMETHOD_POST)

Defina un disentildeo de panel de una sola columna en el que se dispongan los elementos HTML generadosGridLayoutFormPanel grid = new GridLayoutFormPanel()

Cree y antildeada un pie de tabla que haga un seguimiento del registro actualHTMLText recNumText = new HTMLText(Nuacutemero de registro + (position + 1))recNumTextsetBold(true)gridaddElement(recNumText)

Defina un disentildeo de panel de dos columnas en el que disponer la tabla y el texto de comentario de la salida del conversorGridLayoutFormPanel tableGrid = new GridLayoutFormPanel(2)tableGridaddElement(htmlTable[position])HTMLText comment = new HTMLText( lt---- Salida de la clase HTMLFormConverter)commentsetBold(true)commentsetColor(Colorblue)tableGridaddElement(comment)

Antildeada la liacutenea de tabla al panelgridaddElement(tableGrid)

Defina un disentildeo de panel de una sola fila en el que deban disponerse los botones que permiten moverse por la lista de registrosLineLayoutFormPanel buttonLine = new LineLayoutFormPanel()buttonLineaddElement(new SubmitFormInput(getFirstRecord Primero))buttonLineaddElement(new SubmitFormInput(getPreviousRecord Anterior))buttonLineaddElement(new SubmitFormInput(getNextRecord Siguiente))buttonLineaddElement(new SubmitFormInput(getLastRecord Uacuteltimo))

Defina otro disentildeo de panel de una sola fila para el botoacuten Volver a principalLineLayoutFormPanel returnToMainLine = new LineLayoutFormPanel()returnToMainLineaddElement(new SubmitFormInput(returnToMain Volver a principal))

Antildeada al panel cuadriculado las liacuteneas que contienen los botonesgridaddElement(buttonLine)gridaddElement(returnToMainLine)

Antildeada el panel al formulariorecFormaddElement(grid)

Antildeada el formulario a la paacutegina HTMLpageappend(recFormtoString())

catch (Exception e)

eprintStackTrace ()

pageappend(ltbodygtlthtmlgt)return pagetoString()

546 IBM Toolbox para Java IBM Toolbox para Java

Mostrar el formulario HTML principal (solicite entrada para nombre de sistema archivo y biblioteca)private String showHtmlMain()

String title = Ejemplo de HTMLFormConverterStringBuffer page = new StringBuffer()pageappend (showHeader (title))

pageappend(lth1gt + title + lth1gt)

Cree el objeto formulario HTMLHTMLForm mainForm = new HTMLForm(HTMLFormConverterExample)

try

Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formulariomainFormsetMethod(HTMLFormMETHOD_POST)

Antildeada una descripcioacuten corta al formularioHTMLText desc =

new HTMLText(ltPgtEste ejemplo utiliza la clase HTMLFormConverter +para convertir los datos recuperados de un archivo de +servidor El conversor genera una matriz de tablas +HTML Cada entrada de la matriz es un registro del +archivo +Los registros se visualizan de uno en uno y hay +botones que permiten moverse hacia delante o hacia +atraacutes en la lista de registrosltPgt)

mainFormaddElement(desc)

Antildeada instrucciones al formularioHTMLText instr =

new HTMLText(ltPgtEspecifique el nombre del servidor +y el nombre del archivo y de la biblioteca +a los que desea acceder Luego pulse el botoacuten +Mostrar registros para continuarltPgt)

mainFormaddElement(instr)

Cree un panel con un disentildeo cuadriculado y antildeada los campos de entrada de sistema archivo y bibliotecaGridLayoutFormPanel panel = new GridLayoutFormPanel(2)

LabelFormElement sysPrompt = new LabelFormElement(Servidor )TextFormInput system = new TextFormInput(System)systemsetSize(10)

LabelFormElement filePrompt = new LabelFormElement(Nombre de archivo )TextFormInput file = new TextFormInput(File)filesetSize(10)

LabelFormElement libPrompt = new LabelFormElement(Nombre de biblioteca )TextFormInput library = new TextFormInput(Library)librarysetSize(10)

paneladdElement(sysPrompt)paneladdElement(system)paneladdElement(filePrompt)paneladdElement(file)paneladdElement(libPrompt)paneladdElement(library)

Antildeada el panel al formulariomainFormaddElement(panel)

IBM Toolbox para Java 547

Cree el botoacuten de someter y antildeaacutedalo al formulariomainFormaddElement(new SubmitFormInput(getRecords Mostrar registros))

catch (Exception e)

eprintStackTrace ()

pageappend(mainFormtoString())pageappend(ltbodygtlthtmlgt)

return pagetoString()

El HTML generado por el ejemplo anterior ofrece este aspectolttable border=0gtlttrgtlttdgtltbgtRecord number 1ltbgtlttdgtlttrgtlttrgtlttdgtlttable border=0gtlttrgtlttdgtlttable border=3 cellpadding=2 cellspacing=4gtlttrgtltthgtCUSNUMltthgtlttdgt839283lttdgtlttrgtlttrgtltthgtLSTNAMltthgtlttdgtJones lttdgtlttrgtlttrgtltthgtINITltthgtlttdgtB DlttdgtlttrgtlttrgtltthgtSTREETltthgtlttdgt21B NW 135 StlttdgtlttrgtlttrgtltthgtCITYltthgtlttdgtClay lttdgtlttrgtlttrgtltthgtSTATEltthgtlttdgtNYlttdgtlttrgtlttrgtltthgtZIPCODltthgtlttdgt13041lttdgtlttrgtlttrgtltthgtCDTLMTltthgtlttdgt400lttdgtlttrgtlttrgtltthgtCHGCODltthgtlttdgt1lttdgtlttrgtlttrgtltthgtBALDUEltthgtlttdgt10000lttdgtlttrgt

548 IBM Toolbox para Java IBM Toolbox para Java

lttrgtltthgtCDTDUEltthgtlttdgt000lttdgtlttrgtlttablegtlttdgtlttdgtltfont color=0000ffgt ltbgtlt-- Salida de la clase HTMLFormConverter--gtltbgtltfontgtlttdgtlttrgtlttablegtlttdgtlttrgtlttrgtltformgtlttdgtltinput type=submit name=getFirstRecord value=Primero gtltinput type=submit name=getPreviousRecord value=Anterior gtltinput type=submit name=getNextRecord value=Siguiente gtltinput type=submit name=getLastRecord value=Uacuteltimo gtltbr gtlttdgtlttrgtlttrgtlttdgtltinput type=submit name=returnToMain value=Volver a principal gtltbr gtlttdgtlttrgtlttablegtltformgt

Ejemplo de Luces encendidas para las clases HTML y servletEste ejemplo muestra coacutemo funcionan las clases HTML y servlet Es una visioacuten general Para ver esteejemplo compiacutelelo y ejecuacutetelo con un servidor Web y un navegador en marchaimport javaioIOExceptionimport javaioCharArrayWriterimport javaioPrintWriterimport javasqlimport javautilEnumerationimport javautilHashtableimport javaxservletimport javaxservlethttp

import comibmas400utilhtmlimport comibmas400utilservletimport comibmas400access

Un ejemplo de coacutemo se utilizan las clases de IBM Toolbox para Java en un servlet

Esquemas de las bases de datos SQL en el servidor

Archivo LICENSESBiblioteca LIGHTSON

Campo Tipo Longitud NulosLICENSE CHARACTER 10 NOT NULLUSER_ID CHARACTER 10 NOT NULL WITH DEFAULTE_MAIL CHARACTER 20 NOT NULLWHEN_ADDED DATE NOT NULL WITH DEFAULTTIME_STAMP TIMESTAMP NOT NULL WITH DEFAULT

Archivo REPORTSBiblioteca LIGHTSON

Campo Tipo Longitud NulosLICENSE CHARACTER 10 NOT NULL

IBM Toolbox para Java 549

REPORTER CHARACTER 10 NOT NULL WITH DEFAULTDATE_ADDED DATE NOT NULL WITH DEFAULTTIME_ADDED TIME NOT NULL WITH DEFAULTTIME_STAMP TIMESTAMP NOT NULL WITH DEFAULTLOCATION CHARACTER 10 NOT NULLCOLOR CHARACTER 10 NOT NULLCATEGORY CHARACTER 10 NOT NULL

public class LightsOn extends javaxservlethttpHttpServlet

private AS400 system_private String password_ contrasentildea del servidor y de la base de datos SQLprivate javasqlConnection databaseConnection_

public void destroy (ServletConfig config)

try if (databaseConnection_ = null)

databaseConnection_close()

catch (Exception e) eprintStackTrace ()

public void doGet (HttpServletRequest requestHttpServletResponse response)

throws IOException ServletException

HttpSession session = requestgetSession()

responsesetContentType(texthtml)PrintWriter out = responsegetWriter()

outprintln(showHtmlMain())

outclose()

public void doPost (HttpServletRequest request HttpServletResponse response)throws ServletException IOException

HttpSession session = requestgetSession(true)ServletOutputStream out = responsegetOutputStream()responsesetContentType(texthtml)

Hashtable parameters = getRequestParameters (request)

if (parameterscontainsKey(askingToReport))outprintln (showHtmlForReporting ())

else if (parameterscontainsKey(askingToRegister))outprintln (showHtmlForRegistering ())

else if (parameterscontainsKey(askingToUnregister))outprintln(showHtmlForUnregistering())

else if (parameterscontainsKey(askingToListRegistered))outprintln (showHtmlForListingAllRegistered ())

else if (parameterscontainsKey(askingToListReported))outprintln (showHtmlForListingAllReported ())

else if (parameterscontainsKey(returningToMain))outprintln (showHtmlMain ())

else Ninguno de los anteriores por lo que presupondremos que el usuario ha rellenado un formulario y estaacute sometiendo informacioacuten Tome la informacioacuten

550 IBM Toolbox para Java IBM Toolbox para Java

entrante y realice la accioacuten solicitada

if (parameterscontainsKey(submittingReport)) String acknowledgement = reportLightsOn (parameters out)outprintln (showAcknowledgement(acknowledgement))

else if (parameterscontainsKey(submittingRegistration)) String acknowledgement = registerLicense (parameters out)outprintln (showAcknowledgement(acknowledgement))

else if (parameterscontainsKey(submittingUnregistration)) String acknowledgement = unregisterLicense (parameters out)outprintln (showAcknowledgement(acknowledgement))

else outprintln (showAcknowledgement(Error (interno) +

Ni informar ni registrar +ni desregistrar ni listar registrados ni listar reportados))

outclose() Cierre la corriente de datos de salida

Obtiene los paraacutemetros a partir de una peticioacuten de servlet HTTP y los empaqueta en una tabla hash por comodidadprivate static Hashtable getRequestParameters (HttpServletRequest request)

Hashtable parameters = new Hashtable ()Enumeration enum = requestgetParameterNames()while (enumhasMoreElements())

String key = (String) enumnextElement()String value = requestgetParameter (key)parametersput (key value)

return parameters

Elimina blancos y guiones de un objeto String y lo pone todo en mayuacutesculasprivate static String normalize (String oldString)

if (oldString == null || oldStringlength() == 0) return nullStringBuffer newString = new StringBuffer ()for (int i=0 iltoldStringlength() i++)

if (oldStringcharAt(i) = rsquo rsquo ampamp oldStringcharAt(i) = rsquo-rsquo)newStringappend (oldStringcharAt(i))

return newStringtoString()toUpperCase()

Compone una lista de series entre comillas simplesprivate static String quoteList (String[] inList)

StringBuffer outList = new StringBuffer()for (int i=0 iltinListlength i++)

outListappend (rsquo + inList[i] + rsquo)if (iltinListlength-1)

outListappend ()return outListtoString()

IBM Toolbox para Java 551

public String getServletInfo ()

return Servlet Luces encendidas

private AS400 getSystem ()

try

if (system_ == null)

system_ = new AS400()

Nota seriacutea mejor obtener estos valores de un archivo de propiedadesString sysName = MYSYSTEM TBDString userId = MYUSERID TBDString password = MYPASSWD TBD

system_setSystemName(sysName)system_setUserId(userId)system_setPassword(password)password_ = password

system_connectService(AS400DATABASE)system_connectService(AS400FILE)system_addPasswordCacheEntry(sysName userId password_)

catch (Exception e) eprintStackTrace () system_ = null

return system_

public void init (ServletConfig config)

boolean rc

try superinit(config)

Registre el controlador JDBCtry

javasqlDriverManagerregisterDriver(new comibmas400accessAS400JDBCDriver())catch (Exception e)

Systemoutprintln(Controlador JDBC no encontrado)

catch (Exception e) eprintStackTrace()

private void getDatabaseConnection ()

if (databaseConnection_ == null) try

databaseConnection_ = javasqlDriverManagergetConnection(jdbcas400 + getSystem()getSystemName() + +LIGHTSON getSystem()getUserId() password_ )

552 IBM Toolbox para Java IBM Toolbox para Java

catch (Exception e) eprintStackTrace ()

private String registerLicense (Hashtable parameters ServletOutputStream out)

String licenseNum = normalize ((String)parametersget(licenseNum))String eMailAddress = (String)parametersget(eMailAddress)StringBuffer acknowledgement = new StringBuffer()

if (licenseNum == null || licenseNumlength() == 0)acknowledgementappend (Error nuacutemero de matriacutecula no especificadon)

if (eMailAddress == null || eMailAddresslength() == 0)acknowledgementappend (Error direccioacuten de correo-e para notificacioacuten no especificadan)

if (acknowledgementlength() == 0)

try

Inserte el nuevo nuacutemero de matriacutecula y la nueva direccioacuten de correo-e en la base de datosgetDatabaseConnection ()Statement sqlStatement = databaseConnection_createStatement()

Emita la peticioacutenString cmd = INSERT INTO LICENSES (LICENSE E_MAIL) VALUES ( +

quoteList(new String[] licenseNum eMailAddress) + )sqlStatementexecuteUpdate(cmd)sqlStatementclose()

Acuse el recibo de la peticioacutenacknowledgementappend (El nuacutemero de matriacutecula + licenseNum + se ha registrado)acknowledgementappend (La direccioacuten de correo-e para notificacioacuten es + eMailAddress)

catch (Exception e) eprintStackTrace ()

return acknowledgementtoString()

private String unregisterLicense (Hashtable parameters ServletOutputStream out)

String licenseNum = normalize ((String)parametersget(licenseNum))StringBuffer acknowledgement = new StringBuffer()

if (licenseNum == null || licenseNumlength() == 0)acknowledgementappend (Error nuacutemero de matriacutecula no especificadon)

if (acknowledgementlength() == 0)

try

Elimine de la base de datos el nuacutemero de matriacutecula y la direccioacuten de correo-e especificadosgetDatabaseConnection ()Statement sqlStatement = databaseConnection_createStatement()

Suprima la(s) fila(s) de la base de datos LICENSESString cmd = DELETE FROM LICENSES WHERE LICENSE = rsquo + licenseNum + rsquosqlStatementexecuteUpdate(cmd)sqlStatementclose()

Acuse el recibo de la peticioacutenacknowledgementappend (El nuacutemero de matriacutecula + licenseNum + se ha desregistrado)

catch (Exception e) eprintStackTrace ()

IBM Toolbox para Java 553

return acknowledgementtoString()

private String reportLightsOn (Hashtable parameters ServletOutputStream out)

String licenseNum = normalize ((String)parametersget(licenseNum))String location = (String)parametersget(location)String color = (String)parametersget(color)String category = (String)parametersget(category)StringBuffer acknowledgement = new StringBuffer()if (licenseNum == null || licenseNumlength() == 0)

acknowledgementappend (Error nuacutemero de matriacutecula no especificado)

if (acknowledgementlength() == 0)

try

Informe de luces encendidas para un vehiacuteculo especificadogetDatabaseConnection ()Statement sqlStatement = databaseConnection_createStatement()

Antildeada una entrada a la base de datos REPORTSString cmd = INSERT INTO REPORTS (LICENSE LOCATION COLOR CATEGORY) VALUES ( +

quoteList(new String[] licenseNum location color category) + )sqlStatementexecuteUpdate(cmd)sqlStatementclose()

Acuse el recibo de la peticioacutenacknowledgementappend (El nuacutemero de matriacutecula + licenseNum + se ha anotado en el informe iexclGracias)

catch (Exception e) eprintStackTrace ()

return acknowledgementtoString()

private String showHeader (String title)

StringBuffer page = new StringBuffer()pageappend(lthtmlgtltheadgtlttitlegt + title + lttitlegt)pageappend(ltheadgtltbody bgcolor=blanchedalmondgt)return pagetoString ()

private String showAcknowledgement (String acknowledgement)

String title = Acuse de reciboStringBuffer page = new StringBuffer()pageappend (showHeader (title))

try HTMLForm form = new HTMLForm(LightsOn)GridLayoutFormPanel grid = new GridLayoutFormPanel()HTMLText text = new HTMLText(acknowledgement)if (acknowledgementstartsWith(Error))

textsetBold(true)gridaddElement(text)gridaddElement(new SubmitFormInput(returningToMain Inicio))formaddElement(grid)pageappend(formtoString())

catch (Exception e) eprintStackTrace () pageappend(ltbodygtlthtmlgt)return pagetoString()

554 IBM Toolbox para Java IBM Toolbox para Java

private String showHtmlMain ()

String title = Herramienta Luces encendidasStringBuffer page = new StringBuffer()pageappend (showHeader (title))

pageappend(lth1gt + title + lth1gt)

Cree el objeto formulario HTMLHTMLForm mainForm = new HTMLForm(LightsOn)GridLayoutFormPanel grid = new GridLayoutFormPanel()

try Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formulariomainFormsetMethod(HTMLFormMETHOD_POST)

Cree algunos botonesgridaddElement(new SubmitFormInput(askingToReport Informe de un vehiacuteculo con luces encendidas))gridaddElement(new SubmitFormInput(askingToRegister Registrar mi nuacutemero de matriacutecula))gridaddElement(new SubmitFormInput(askingToUnregister Desregistrar mi nuacutemero de matriacutecula))gridaddElement(new SubmitFormInput(askingToListRegistered Listar todas las matriacuteculas registradas))gridaddElement(new SubmitFormInput(askingToListReported Listar todos los vehiacuteculos con luces encendidas))

mainFormaddElement(grid)catch (Exception e) eprintStackTrace ()

pageappend(mainFormtoString())pageappend(ltbodygtlthtmlgt)

return pagetoString()

private String showHtmlForReporting ()

String title = Informar de un vehiacuteculo con las luces encendidasStringBuffer page = new StringBuffer()pageappend (showHeader (title))

pageappend(lth1gt + title + lth1gt)

Cree el objeto formulario HTMLHTMLForm reportForm = new HTMLForm(LightsOn)GridLayoutFormPanel grid = new GridLayoutFormPanel(2)

try Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formularioreportFormsetMethod(HTMLFormMETHOD_POST)

TextFormInput licenseNum = new TextFormInput(licenseNum)licenseNumsetSize(10)licenseNumsetMaxLength(10)

Antildeada elementos al formulario de liacuteneagridaddElement(new LabelFormElement(Nuacutemero de matriacutecula de vehiacuteculo))gridaddElement(licenseNum)

Cree un grupo de botones de seleccioacuten y antildeada los botones de seleccioacutenRadioFormInputGroup colorGroup = new RadioFormInputGroup(color)

colorGroupadd(color white blanco true)colorGroupadd(color black negro false)colorGroupadd(color gray gris false)

IBM Toolbox para Java 555

colorGroupadd(color red rojo false)colorGroupadd(color yellow amarillo false)colorGroupadd(color green verde false)colorGroupadd(color blue azul false)colorGroupadd(color brown marroacuten false)

Cree una lista de seleccioacuten para la categoriacutea del vehiacuteculoSelectFormElement category = new SelectFormElement(category)categoryaddOption(sedan sedaacuten true)categoryaddOption(convertible convertibl) campo de 10 caracteres en DBcategoryaddOption(truck camioacuten)categoryaddOption(van furgoneta)categoryaddOption(SUV SUV)categoryaddOption(motorcycle moto)categoryaddOption(other otras)

Cree una lista de seleccioacuten para la ubicacioacuten del vehiacuteculo (nuacutemero del edificio)SelectFormElement location = new SelectFormElement(location)locationaddOption(001 001 true)locationaddOption(002 002)locationaddOption(003 003)locationaddOption(005 005)locationaddOption(006 006)locationaddOption(015 015)

gridaddElement(new LabelFormElement(Color))gridaddElement(colorGroup)

gridaddElement(new LabelFormElement(Tipo de vehiacuteculo))gridaddElement(category)

gridaddElement(new LabelFormElement(Edificio))gridaddElement(location)

gridaddElement(new SubmitFormInput(submittingReport Someter informe))gridaddElement(new SubmitFormInput(returningToMain Inicio))

reportFormaddElement(grid)catch (Exception e) eprintStackTrace ()

pageappend(reportFormtoString())

pageappend(ltbodygtlthtmlgt)

return pagetoString()

private String showHtmlForRegistering ()

String title = Registrar mi nuacutemero de matriacuteculaStringBuffer page = new StringBuffer()pageappend (showHeader (title))

pageappend(lth1gt + title + lth1gt)

Cree el objeto formulario HTMLHTMLForm registrationForm = new HTMLForm(LightsOn)

Defina un disentildeo de panel de dos columnas en el que disponer los elementos HTML generadosGridLayoutFormPanel grid = new GridLayoutFormPanel(2)

try Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formularioregistrationFormsetMethod(HTMLFormMETHOD_POST)

556 IBM Toolbox para Java IBM Toolbox para Java

TextFormInput licenseNum = new TextFormInput(licenseNum)licenseNumsetSize(10)licenseNumsetMaxLength(10)

TextFormInput eMailAddress = new TextFormInput(eMailAddress)eMailAddresssetMaxLength(20)

gridaddElement(new LabelFormElement(Nuacutemero de matriacutecula))gridaddElement(licenseNum)

gridaddElement(new LabelFormElement(Direccioacuten de notificacioacuten por correo-e))gridaddElement(eMailAddress)

gridaddElement(new SubmitFormInput(submittingRegistration Registrar))gridaddElement(new SubmitFormInput(returningToMain Inicio))

registrationFormaddElement(grid)catch (Exception e) eprintStackTrace ()

pageappend(registrationFormtoString())

pageappend(ltbodygtlthtmlgt)

return pagetoString()

private String showHtmlForUnregistering ()

String title = Desregistrar mi nuacutemero de matriacuteculaStringBuffer page = new StringBuffer()pageappend (showHeader (title))

pageappend(lth1gt + title + lth1gt)

Cree el objeto formulario HTMLHTMLForm unregistrationForm = new HTMLForm(LightsOn)GridLayoutFormPanel grid = new GridLayoutFormPanel(2)

try Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formulariounregistrationFormsetMethod(HTMLFormMETHOD_POST)

Cree el objeto LineLayoutFormPanelTextFormInput licenseNum = new TextFormInput(licenseNum)licenseNumsetSize(10)licenseNumsetMaxLength(10)

gridaddElement(new LabelFormElement(Nuacutemero de matriacutecula de vehiacuteculo))gridaddElement(licenseNum)

gridaddElement(new SubmitFormInput(submittingUnregistration Desregistrar))gridaddElement(new SubmitFormInput(returningToMain Inicio))

unregistrationFormaddElement(grid)

catch (Exception e) eprintStackTrace ()CharArrayWriter cWriter = new CharArrayWriter()PrintWriter pWriter = new PrintWriter (cWriter true)eprintStackTrace (pWriter)pageappend (cWritertoString())

pageappend(unregistrationFormtoString())

IBM Toolbox para Java 557

pageappend(ltbodygtlthtmlgt)

return pagetoString()

private String showHtmlForListingAllRegistered ()

String title = Todas las matriacuteculas registradasStringBuffer page = new StringBuffer()pageappend (showHeader (title))

try

Cree el objeto formulario HTMLHTMLForm mainForm = new HTMLForm(LightsOn)

Defina un disentildeo de panel de una sola columna en el que se dispongan los elementos HTML generadosGridLayoutFormPanel grid = new GridLayoutFormPanel()

Especifique el disentildeo para la tabla generadaHTMLTable table = new HTMLTable()tablesetAlignment(HTMLConstantsLEFT)tablesetBorderWidth(3)

Cree y antildeada el pie y la cabecera de tablaHTMLTableCaption caption = new HTMLTableCaption()

captionsetAlignment(HTMLConstantsTOP)captionsetElement(title)tablesetCaption(caption)tablesetHeader(new String[] Matriacutecula Fecha de adicioacuten )

Cree el conversor que generaraacute la tabla HTML a partir del conjunto de resultados devueltos por la consulta de base de datosHTMLTableConverter converter = new HTMLTableConverter()convertersetTable(table)

getDatabaseConnection ()Statement sqlStatement = databaseConnection_createStatement()

Primero haga una preconsulta a la base de datos para verificar que no estaacute vaciacuteaString query = SELECT COUNT() FROM LICENSESResultSet rs = sqlStatementexecuteQuery (query)rsnext() situacutee el cursor en la primera filaint rowCount = rsgetInt(1)

if (rowCount == 0) pageappend (ltfont size=4 color=redgtNo se han notificado vehiacuteculosltfontgt)

else

query = SELECT LICENSEWHEN_ADDED FROM LICENSESrs = sqlStatementexecuteQuery (query)SQLResultSetRowData rowData = new SQLResultSetRowData (rs)HTMLTable[] generatedHtml = converterconvertToTables(rowData)gridaddElement(generatedHtml[0])

sqlStatementclose() Nota no se debe cerrar la sentencia mientras no se haya terminado de usar el conjunto de resultados

gridaddElement(new SubmitFormInput(returningToMain Inicio))

mainFormaddElement(grid)pageappend(mainFormtoString())

558 IBM Toolbox para Java IBM Toolbox para Java

catch (Exception e) eprintStackTrace () pageappend(ltbodygtlthtmlgt)return pagetoString()

private String showHtmlForListingAllReported ()

String title = Todos los vehiacuteculos con las luces encendidasStringBuffer page = new StringBuffer()pageappend (showHeader (title))

try

Cree el objeto formulario HTMLHTMLForm form = new HTMLForm(LightsOn)

Defina un disentildeo de panel de una sola columna en el que se dispongan los elementos HTML generadosGridLayoutFormPanel grid = new GridLayoutFormPanel()

Especifique el disentildeo para la tabla generadaHTMLTable table = new HTMLTable()tablesetAlignment(HTMLConstantsLEFT)tablesetBorderWidth(3)

Cree y antildeada el pie y la cabecera de tablaHTMLTableCaption caption = new HTMLTableCaption()

captionsetAlignment(HTMLConstantsTOP)captionsetElement(title)tablesetCaption(caption)tablesetHeader(new String[] Matriacutecula Color Categoriacutea Fecha Hora )

Cree el conversor que generaraacute la tabla HTML a partir del conjunto de resultados devueltos por la consulta de base de datosHTMLTableConverter converter = new HTMLTableConverter()convertersetTable(table)

getDatabaseConnection ()Statement sqlStatement = databaseConnection_createStatement()

Primero haga una preconsulta a la base de datos para verificar que no estaacute vaciacuteaString query = SELECT COUNT() FROM REPORTSResultSet rs = sqlStatementexecuteQuery (query)rsnext() situacutee el cursor en la primera filaint rowCount = rsgetInt(1)

if (rowCount == 0) pageappend (ltfont size=4 color=redgtNo se han notificado vehiacuteculosltfontgt)

else

query = SELECT LICENSECOLORCATEGORYDATE_ADDEDTIME_ADDED FROM REPORTSrs = sqlStatementexecuteQuery (query)SQLResultSetRowData rowData = new SQLResultSetRowData (rs)HTMLTable[] generatedHtml = converterconvertToTables(rowData)gridaddElement(generatedHtml[0])

sqlStatementclose() Nota no se debe cerrar la sentencia mientras no se haya terminado de usar el conjunto de resultados

gridaddElement(new SubmitFormInput(returningToMain Inicio))formaddElement(grid)pageappend(formtoString())

catch (Exception e) eprintStackTrace () pageappend(ltbodygtlthtmlgt)

IBM Toolbox para Java 559

return pagetoString()

Ejemplos simples de programacioacutenEstos ejemplos muestran algunas de los procedimientos por los que puede empezar a codificar suspropios programas Java utilizando las clases de IBM Toolbox para Java Estos ejemplos pensados para losprogramadores que simplemente comienzan a utilizar las clases de IBM Toolbox para Java contienendescripciones detalladas sobre las liacuteneas clave del coacutedigo

Si desea obtener ayuda sobre coacutemo empezar consulte Coacutemo escribir el primer programa de IBM Toolboxpara Java

Para obtener enlaces con muchos de los demaacutes ejemplos proporcionados en la informacioacuten de IBMToolbox para Java consulte los Ejemplos de coacutedigo

Utilice la lista siguiente para ver los ejemplos simples de programacioacutenv Llamadas a mandatosv Coacutemo se utilizan las colas de mensajesv Coacutemo se utilizan las clases de acceso a nivel de registrov Coacutemo se utilizan las clases JDBC para crear y llenar con datos una tabla

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Coacutemo escribir el primer programa de IBM Toolbox para JavaPara empezar este sencillo ejercicio debe tener instalado Java en la estacioacuten de trabajo

Puede decidir queacute versioacuten desea instalar consultando los Requisitos para ejecutar aplicaciones Java

Una vez que tenga instalado Java en el cliente lleve a cabo las tareas siguientes1 Copie jt400jar en la estacioacuten de trabajo2 Antildeada jt400jar a la CLASSPATH de la estacioacuten de trabajo especificando la viacutea de acceso completa del

archivo JAR a la CLASSPATH Por ejemplo si el archivo jt400jar reside en el directorio clib de laestacioacuten de trabajo (que ejecuta Windows) antildeada lo siguiente al final de la sentencia CLASSPATH

clibjt400jar

3 Abra un editor de texto y escriba el primer ejemplo simple de programacioacuten

560 IBM Toolbox para Java IBM Toolbox para Java

Nota aseguacuterese de no incluir el texto que hace referencia a las notas (por ejemplo Nota 1 Nota 2etc) Guarde el documento nuevo con el nombre CmdCalljava

4 Inicie una sesioacuten de mandato en la estacioacuten de trabajo y utilice el siguiente mandato para compilar elejemplo simple de programacioacuten

javac CmdCalljava

5 En la sesioacuten de mandato escriba el siguiente mandato para ejecutar el ejemplo simple deprogramacioacuten

java CmdCall

[ Ejemplos simples de programacioacuten ]

Ejemplo coacutemo se utiliza CommandCallEste ejemplo utiliza la clase de acceso de IBM Toolbox para Java CommandCall

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este coacutedigo fuente es un ejemplo de Lista de trabajos (Job List) Las clases de acceso estaacuten en comibmas400accesspackage Importe este paquete para usar las clases de IBM Toolbox para Java

import comibmas400access

public class CmdCall

public static void main(String[] args)

Como sucede con otras clases Java las clases de IBM Toolbox para Java lanzan excepciones cuando se produce alguacuten error Estas se deben capturar mediante los programas que utilizan IBM Toolbox para Javatry Nota 1

AS400 system = new AS400()

CommandCall cc = new CommandCall(system) Nota 2

ccrun(CRTLIB MYLIB) Nota 3

AS400Message[] ml = ccgetMessageList() Nota 4

for (int i=0 iltmllength i++)

Systemoutprintln(ml[i]getText()) Nota 5

catch (Exception e)

eprintStackTrace()

Systemexit (0)

IBM Toolbox para Java 561

1 IBM Toolbox para Java utiliza el objeto AS400 para identificar el servidor destino Si construye elobjeto AS400 sin paraacutemetros IBM Toolbox para Java solicita el nombre de sistema el ID de usuario yla contrasentildea La clase AS400 tambieacuten incluye un constructor que toma el nombre de sistema el ID deusuario y la contrasentildea

2 Utilice el objeto CommandCall de IBM Toolbox para Java para enviar mandatos al servidor Al crearel objeto CommandCall le pasa un objeto AS400 para que sepa cuaacutel es el servidor destino delmandato

3 Utilice el meacutetodo run() en el objeto de llamada a mandato para ejecutar un mandato4 El resultado de ejecutar un mandato es una lista de mensajes de IBM i IBM Toolbox para Java

representa estos mensajes como objetos AS400Message Una vez completado el mandato el usuariorecibe los mensajes obtenidos del objeto CommandCall

5 Imprima el texto del mensaje Tambieacuten hay disponible otra informacioacuten como el ID de mensaje lagravedad del mensaje etc Este programa solo imprime el texto del mensaje

Ejemplo coacutemo se utilizan las colas de mensajes (parte 1 de 3)Este coacutedigo fuente es un ejemplo de cola de mensajes de IBM Toolbox para Java

[ Parte siguiente ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de coacutemo se utiliza la funcioacuten cola de mensajes de IBM Toolbox para Java Este fuente es un ejemplo de la cola de mensajes de IBM Toolbox para Java

package examples Nota 1

import javaioimport javautil

import comibmas400access Nota 2

public class displayMessages extends Object

public static void main(String[] parameters) Nota 3

displayMessages me = new displayMessages()meMain(parameters) Nota 4

Systemexit(0) Nota 5

void displayMessage()

void Main(String[] parms)

try Nota 6

562 IBM Toolbox para Java IBM Toolbox para Java

Aquiacute va el coacutedigo de IBM Toolbox para Javacatch (Exception e)

eprintStackTrace() Nota 7

1 Esta clase estaacute en el paquete examples Java utiliza paquetes para evitar que se produzcan conflictosde nombres entre los archivos de clase Java

2 Esta liacutenea pone a disposicioacuten de este programa todas las clases de IBM Toolbox para Java existentesen el paquete access Estas clases tienen en comuacuten el prefijo comibmas400 Mediante una sentenciade importacioacuten (import) el programa puede hacer referencia a una clase tan solo con utilizar sunombre no el nombre totalmente calificado Por ejemplo para hacer referencia a la clase AS400 bastacon utilizar el nombre AS400 en vez de comibmas400AS400

3 Esta clase tiene un meacutetodo main por lo tanto se puede ejecutar como aplicacioacuten Para invocar elprograma ejecute java examplesdisplayMessages Observe que las mayuacutesculasminuacutesculas debencoincidir al ejecutar el programa Debido a que se utiliza una clase de IBM Toolbox para Java elarchivo jt400zip debe estar en la variable de entorno de viacutea de acceso de clases

4 El meacutetodo main indicado en la nota 3 es estaacutetico Una de las restricciones que tienen los meacutetodosestaacuteticos es que solo pueden llamar a otros meacutetodos estaacuteticos de sus propias clases Para evitar estarestriccioacuten muchos programas Java crean un objeto y luego realizan el proceso de inicializacioacuten en unmeacutetodo llamado Main El meacutetodo Main() puede llamar a cualquier otro meacutetodo del objetodisplayMessages

5 IBM Toolbox para Java crea hebras en nombre de la aplicacioacuten para llevar a cabo la actividad de IBMToolbox para Java El programa si cuando va a terminar no emite Systemexit(0) no puede terminarcon normalidad Por ejemplo supongamos que este programa se ha ejecutado desde un indicador desolicitud del DOS de Windows 95 Sin esta liacutenea el indicador de solicitud de mandatos no retornacuando finaliza el programa El usuario tiene que pulsar las teclas Control-C para obtener unindicador de solicitud de mandatos

6 El coacutedigo de IBM Toolbox para Java lanza excepciones que deben ser capturadas por el programa7 Este programa visualiza el texto de la excepcioacuten mientras realiza el proceso de error Las excepciones

lanzadas por IBM Toolbox para Java estaacuten traducidas por lo que el texto de la excepcioacuten estaraacute en elidioma de la estacioacuten de trabajo

[ Parte siguiente ]

Ejemplo coacutemo se utilizan las colas de mensajes (parte 2 de 3)Este coacutedigo fuente es un ejemplo de cola de mensajes de IBM Toolbox para Java

[ Parte anterior | Parte siguiente ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de coacutemo se utiliza la funcioacuten cola de mensajes de IBM Toolbox para Java Este fuente es un ejemplo de la cola de mensajes de IBM Toolbox para Java

package examples

IBM Toolbox para Java 563

import javaioimport javautilimport comibmas400access

public class displayMessages extends Object

public static void main(String[] parameters)

displayMessages me = new displayMessages()

meMain(parameters)

Systemexit (0)

void displayMessage()

void Main(String[] parms)

try

AS400 system = new AS400() Nota 1

if (parmslength gt 0)systemsetSystemName(parms[0]) Nota 2

catch (Exception e)

eprintStackTrace()

1 Un programa utiliza el objeto AS400 para designar a queacute servidor debe conectarse Todos losprogramas que necesitan recursos de un servidor deben tener un objeto AS400 con una sola salvedadLa excepcioacuten es JDBC Si el programa utiliza JDBC el controlador JDBC de IBM Toolbox para Javacrea el objeto AS400 para el programa

2 Este programa supone que el primer paraacutemetro de liacutenea de mandatos es el nombre del servidor Si sepasa un paraacutemetro al programa se utiliza el meacutetodo setSystemName del objeto AS400 para establecerel nombre del sistema El objeto AS400 tambieacuten necesita informacioacuten de inicio de sesioacuten del servidorv Si el programa se estaacute ejecutando en una estacioacuten de trabajo el programa de IBM Toolbox para Java

solicita al usuario un ID de usuario y una contrasentildea Nota si no se especifica un nombre delsistema como paraacutemetro de liacutenea de mandatos el objeto AS400 tambieacuten solicita el nombre delsistema

v Si el programa se estaacute ejecutando en la JVM de IBM i se utiliza el ID de usuario y la contrasentildea delusuario que ejecuta el programa Java En este caso el usuario no especifica un nombre del sistemasino que deja que el nombre del sistema tome de forma predeterminada el nombre del sistema en elque se estaacute ejecutando el programa

[ Parte anterior | Parte siguiente ]

Ejemplo coacutemo se utilizan las colas de mensajes (parte 3 de 3)Este coacutedigo fuente es un ejemplo de cola de mensajes de IBM Toolbox para Java

[ Parte anterior ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

564 IBM Toolbox para Java IBM Toolbox para Java

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de coacutemo se utiliza la funcioacuten cola de mensajes de IBM Toolbox para Java Este fuente es un ejemplo de la cola de mensajes de IBM Toolbox para Java

package examples

import javaioimport javautilimport comibmas400access

public class displayMessages extends Object

public static void main(String[] parameters)

displayMessages me = new displayMessages()

meMain(parameters)

Systemexit (0)

void displayMessage()

void Main(String[] parms)

try

AS400 system = new AS400()

if (parmslength gt 0)systemsetSystemName(parms[0])

MessageQueue queue = new MessageQueue(system MessageQueueCURRENT) Nota 1

Enumeration e = queuegetMessages() Nota 2

while (ehasMoreElements())

QueuedMessage message = (QueuedMessage) enextElement() Nota 3Systemoutprintln(messagegetText()) Nota 4

catch (Exception e)

eprintStackTrace()

1 La finalidad de este programa es visualizar mensajes en una cola de mensajes de servidor Para estatarea se utiliza el objeto MessageQueue de IBM Toolbox para Java Cuando se construye el objeto colade mensajes los paraacutemetros son el objeto AS400 y el nombre de la cola de mensajes El objeto AS400

IBM Toolbox para Java 565

indica queacute servidor contiene el recurso y el nombre de la cola de mensajes identifica la cola demensajes del servidor En este caso se utiliza una constante que indica al objeto cola de mensajes queacceda a la cola del usuario que ha iniciado la sesioacuten

2 El objeto cola de mensajes obtiene una lista de mensajes del servidor En este momento se establece laconexioacuten con el servidor

3 Eliminar un mensaje de la lista El mensaje estaacute en el objeto QueuedMessage del programa de IBMToolbox para Java

4 Imprimir el texto del mensaje

[ Parte anterior ]

Ejemplo coacutemo se utiliza el acceso a nivel de registro (parte 1 de 2)Este programa solicitaraacute al usuario el nombre del servidor y el archivo que se debe visualizar El archivodebe existir y ha de contener registros Cada registro del archivo se visualizaraacute en Systemout

[ Parte siguiente ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de acceso a nivel de registro Este programa solicitaraacute el nombre del servidor y el archivo que se debe visualizar El archivo debe existir y ha de contener registros Cada registro del archivo se visualizaraacute en la salida del sistema (Systemout) Sintaxis de la llamada java RLSequentialAccessExample Este fuente es un ejemplo de RecordLevelAccess de IBM Toolbox para Java

import javaioimport javautilimport comibmas400access

public class RLSequentialAccessExample

public static void main(String[] parameters)

BufferedReader inputStream = new BufferedReader(new InputStreamReader(Systemin)1)

String systemName = String library = String file = String member =

Systemoutprintln()try

Systemoutprint(Nombre del sistema )systemName = inputStreamreadLine()

Systemoutprint(Biblioteca en la que existe el archivo )library = inputStreamreadLine()

Systemoutprint(Nombre de archivo )file = inputStreamreadLine()

Systemoutprint(Nombre de miembro (pulse Intro para el primer miembro) )

566 IBM Toolbox para Java IBM Toolbox para Java

member = inputStreamreadLine()if (memberequals())

member = FIRST

Systemoutprintln()catch (Exception e)

Systemoutprintln(Error al obtener entrada de usuario)eprintStackTrace()Systemexit (0)

AS400 system = new AS400(systemName) Nota 1try

systemconnectService(AS400RECORDACCESS)catch(Exception e)

Systemoutprintln(No ha sido posible conectar para acceso a nivel de registro)Systemoutprintln(Vea si en el archivo de instalacioacuten de la guiacutea del programador hay

instrucciones especiales relacionadas con el acceso a nivel de registro)eprintStackTrace()Systemexit (0)

QSYSObjectPathName filePathName = new QSYSObjectPathName(library file member MBR) Nota 2

SequentialFile theFile = new SequentialFile(system filePathNamegetPath()) Nota 3

AS400FileRecordDescription recordDescription =new AS400FileRecordDescription(system filePathNamegetPath())

try

RecordFormat[] format = recordDescriptionretrieveRecordFormat() Nota 4

theFilesetRecordFormat(format[0]) Nota 5

theFileopen(AS400FileREAD_ONLY 100 AS400FileCOMMIT_LOCK_LEVEL_NONE) Nota 6

Systemoutprintln(Se va a visualizar el archivo + librarytoUpperCase() + +filetoUpperCase() + ( + theFilegetMemberName()trim() + ))

Record record = theFilereadNext() Nota 7while (record = null)

Systemoutprintln(record)record = theFilereadNext()

Systemoutprintln()

theFileclose() Nota 8

systemdisconnectService(AS400RECORDACCESS) Nota 9catch (Exception e)

IBM Toolbox para Java 567

Systemoutprintln(Se produjo un error al intentar visualizar el archivo)eprintStackTrace()

try

Cierre el archivotheFileclose()

catch(Exception x)

systemdisconnectService(AS400RECORDACCESS)Systemexit (0)

Aseguacuterese de que finaliza la aplicacioacuten en el readme encontraraacute detallesSystemexit (0)

1 Esta liacutenea de coacutedigo crea un objeto AS400 y establece conexioacuten con el servicio de acceso a nivel deregistro

2 Esta liacutenea crea un objeto QSYSObjectPathName que obtiene el formato del nombre de viacutea de sistemade archivos integrado del objeto que se debe visualizar

3 Esta sentencia crea un objeto que representa un archivo secuencial existente en el servidor con el quese ha establecido conexioacuten Este archivo secuencial es el que se visualizaraacute

4 Estas liacuteneas recuperan el formato de registro del archivo5 Esta liacutenea establece el formato de registro del archivo6 Esta liacutenea abre para lectura el archivo seleccionado Leeraacute los registros de 100 en 100 cuando sea

posible7 Esta liacutenea de coacutedigo lee cada registro por orden8 Esta liacutenea cierra el archivo9 Esta liacutenea desconecta del servicio de acceso a nivel de registro

[ Parte siguiente ]

Ejemplo coacutemo se utiliza el acceso a nivel de registro (parte 2 de 2)Este ejemplo muestra la utilizacioacuten del acceso a nivel de registro

[ Parte anterior ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de acceso a nivel de registro Sintaxis de llamada java RLACreateExample

import javaioimport javautil

568 IBM Toolbox para Java IBM Toolbox para Java

import comibmas400access

public class RLACreateExample

public static void main(String[] args)

AS400 system = new AS400(args[0])String filePathName = QSYSLIBMYLIBLIBMYFILEFILEMBR1MBR Nota 1

try

SequentialFile theFile = new SequentialFile(system filePathName)

Inicio de nota 2CharacterFieldDescription lastNameField =

new CharacterFieldDescription(new AS400Text(20) APELLIDO)CharacterFieldDescription firstNameField =

new CharacterFieldDescription(new AS400Text(20) NOMBRE)BinaryFieldDescription yearsOld =

new BinaryFieldDescription(new AS400Bin4() EDAD)

RecordFormat fileFormat = new RecordFormat(RF)fileFormataddFieldDescription(lastNameField)fileFormataddFieldDescription(firstNameField)fileFormataddFieldDescription(yearsOld)

theFilecreate(fileFormat Un archivo de nombres y edades) Nota 2 Fin de nota 2

theFileopen(AS400FileREAD_WRITE 1 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Inicio de nota 3Record newData = fileFormatgetNewRecord()newDatasetField(APELLIDO Doe)newDatasetField(NOMBRE John)newDatasetField(EDAD new Integer(63))

theFilewrite(newData) Nota 3 Fin de nota 3

theFileclose()catch(Exception e)

Systemoutprintln(Se ha producido un error )eprintStackTrace()

systemdisconnectService(AS400RECORDACCESS)

Systemexit (0)

1 (args[0]) en la liacutenea anterior y MYFILEFILE son fragmentos de coacutedigo necesarios para que se ejecuteel resto del ejemplo El programa supone que existe la biblioteca MYLIB en el servidor y que elusuario puede acceder a ella

2 El texto situado entre los comentarios Java que tienen la etiqueta Inicio de nota 2 y Fin de nota 2muestra coacutemo puede crear usted mismo un formato de registro en vez de obtenerlo de un archivoexistente La uacuteltima liacutenea de este bloque crea el archivo en el servidor

3 El texto situado entre los comentarios Java que tienen la etiqueta Inicio de nota 3 y Fin de nota 3muestra una forma de crear un registro y despueacutes escribirlo en un archivo

[ Parte anterior ]

IBM Toolbox para Java 569

Ejemplo coacutemo se utilizan las clases JDBC para crear y llenar con datos una tabla(parte 1 de 2)Este programa utiliza el controlador JDBC de IBM Toolbox para Java para crear y llenar una tabla

[ Parte siguiente ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de JDBCPopulate Este programa utiliza el controlador JDBC de IBM Toolbox para Java a fin de crear una tabla y llenarla con datos Sintaxis del mandato JDBCPopulate sistema nombreColeccioacuten nombreTabla Por ejemplo JDBCPopulate MySystem MyLibrary MyTable Este fuente es un ejemplo del controlador JDBC de IBM Toolbox para Java

import javasql

public class JDBCPopulate

private static final String words[]= Uno Dos Tres Cuatro Cinco

Seis Siete Ocho Nueve DiezOnce Doce Trece Catorce QuinceDieciseacuteis Diecisiete Dieciocho Diecinueve Veinte

public static void main (String[] parameters)

if (parameterslength = 3) Systemoutprintln()Systemoutprintln(Utilizacioacuten)Systemoutprintln()Systemoutprintln( JDBCPopulate system collectionName tableName)Systemoutprintln()Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln()Systemoutprintln( JDBCPopulate MySystem MyLibrary MyTable)Systemoutprintln()return

String system = parameters[0]String collectionName = parameters[1]String tableName = parameters[2]

Connection connection = null

try DriverManagerregisterDriver(new comibmas400accessAS400JDBCDriver()) Nota 1

connection = DriverManagergetConnection (jdbcas400+ system + + collectionName) Nota 2

570 IBM Toolbox para Java IBM Toolbox para Java

try Statement dropTable = connectioncreateStatement ()dropTableexecuteUpdate (DROP TABLE + tableName) Nota 3

catch (SQLException e)

Statement createTable = connectioncreateStatement ()createTableexecuteUpdate (CREATE TABLE + tableName

+ (I INTEGER WORD VARCHAR(20) SQUARE INTEGER + SQUAREROOT DOUBLE)) Nota 4

PreparedStatement insert = connectionprepareStatement (INSERT INTO + tableName + (I WORD SQUARE SQUAREROOT) + VALUES ( )) Nota 5

for (int i = 1 i lt= wordslength ++i) insertsetInt (1 i)insertsetString (2 words[i-1])insertsetInt (3 ii)insertsetDouble (4 Mathsqrt(i))insertexecuteUpdate () Nota 6

Systemoutprintln (La tabla + collectionName + + tableName+ se ha llenado con datos)

catch (Exception e) Systemoutprintln ()Systemoutprintln (ERROR + egetMessage())

finally

try if (connection = null)

connectionclose () Nota 7catch (SQLException e)

Hacer caso omiso

Systemexit (0)

1 Esta liacutenea carga el controlador JDBC de IBM Toolbox para Java Se necesita un controlador JDBC paraque haga de mediador entre JDBC y la base de datos con la que se trabaja

2 Esta sentencia conecta con la base de datos Apareceraacute una solicitud para el ID de usuario y lacontrasentildea Se proporciona un esquema SQL predeterminado para que no tenga usted que calificar elnombre de la tabla en las sentencias SQL

3 Estas liacuteneas suprimen la tabla si es que ya existe4 Estas liacuteneas crean la tabla5 Esta liacutenea prepara una sentencia que insertaraacute filas en la tabla Debido a que se va a ejecutar esta

sentencia varias veces debe utilizarse una sentencia preparada (PreparedStatement) y marcadores deparaacutemetro

6 Este bloque de coacutedigo llena con datos la tabla cada vez que se ejecuta el bucle el bloque inserta unafila en la tabla

IBM Toolbox para Java 571

7 Ahora que ya se ha creado la tabla y se ha llenado con datos esta sentencia cierra la conexioacuten con labase de datos

[ Parte siguiente ]

Ejemplo coacutemo se utilizan las clases JDBC para crear y llenar con datos una tabla(parte 2 de 2)Este programa utiliza el controlador JDBC de IBM Toolbox para Java para consultar una tabla y enviar sucontenido a la salida

[ Parte anterior ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de JDBCQuery Este programa utiliza el controlador JDBC de IBM Toolbox para Java para consultar una tabla y enviar su contenido a la salida Sintaxis del mandato JDBCQuery sistema nombreColeccioacuten nombreTabla Por ejemplo JDBCQuery MySystem qiws qcustcdt Este fuente es un ejemplo del controlador JDBC de IBM Toolbox para Java

import javasql

public class JDBCQuery

Deacute formato a una serie (String) para que tenga la anchura especificadaprivate static String format (String s int width)

String formattedString

La serie es maacutes corta que la anchura especificada por lo que tenemos que rellenarla con blancosif (slength() lt width)

StringBuffer buffer = new StringBuffer (s)for (int i = slength() i lt width ++i)

bufferappend ( )formattedString = buffertoString()

En caso contrario tendremos que truncar la serieelse

formattedString = ssubstring (0 width)

return formattedString

public static void main (String[] parameters)

Compruebe los paraacutemetros de entradaif (parameterslength = 3)

Systemoutprintln()Systemoutprintln(Utilizacioacuten)Systemoutprintln()

572 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln( JDBCQuery system collectionName tableName)Systemoutprintln()Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln()Systemoutprintln( JDBCQuery mySystem qiws qcustcdt)Systemoutprintln()return

String system = parameters[0]String collectionName = parameters[1]String tableName = parameters[2]

Connection connection = null

try

DriverManagerregisterDriver(new comibmas400accessAS400JDBCDriver()) Nota 1

Obtenga una conexioacuten con la base de datos Debido a que no proporcionamos un ID de usuario ni una contrasentildea apareceraacute una solicitudconnection = DriverManagergetConnection (jdbcas400 + system)DatabaseMetaData dmd = connectiongetMetaData () Nota 2

Ejecute la consultaStatement select = connectioncreateStatement ()ResultSet rs = selectexecuteQuery (SELECT FROM

+ collectionName + dmdgetCatalogSeparator() + tableName) Nota 3

Obtenga informacioacuten sobre el conjunto de resultados Establezca que la anchura de la columna sea la longitud mayor de las dos la longitud de la etiqueta o la longitud de los datosResultSetMetaData rsmd = rsgetMetaData ()int columnCount = rsmdgetColumnCount () Nota 4String[] columnLabels = new String[columnCount]int[] columnWidths = new int[columnCount]for (int i = 1 i lt= columnCount ++i)

columnLabels[i-1] = rsmdgetColumnLabel (i)columnWidths[i-1] = Mathmax (columnLabels[i-1]length()

rsmdgetColumnDisplaySize (i)) Nota 5

Enviacutee las cabeceras de columna a la salidafor (int i = 1 i lt= columnCount ++i)

Systemoutprint (format (rsmdgetColumnLabel(i) columnWidths[i-1]))Systemoutprint ( )

Systemoutprintln ()

Enviacutee una liacutenea de guiones a la salidaStringBuffer dashedLinefor (int i = 1 i lt= columnCount ++i)

for (int j = 1 j lt= columnWidths[i-1] ++j)Systemoutprint (-)

Systemoutprint ( )Systemoutprintln ()

Itere a traveacutes de las filas del conjunto de resultados y enviacutee las columnas que hay en cada fila a la salidawhile (rsnext ())

for (int i = 1 i lt= columnCount ++i) String value = rsgetString (i)if (rswasNull ())

value = ltnullgt Nota 6

IBM Toolbox para Java 573

Systemoutprint (format (value columnWidths[i-1]))Systemoutprint ( )

Systemoutprintln ()

catch (Exception e) Systemoutprintln ()Systemoutprintln (ERROR + egetMessage())

finally

Borretry

if (connection = null)connectionclose ()

catch (SQLException e)

Hacer caso omiso

Systemexit (0)

1 Esta liacutenea carga el controlador JDBC de IBM Toolbox para Java El controlador JDBC hace demediador entre JDBC y la base de datos con la que estaacute trabajando

2 Esta liacutenea recupera los metadatos de la conexioacuten los metadatos son un objeto que describe muchas delas caracteriacutesticas de la base de datos

3 Esta sentencia ejecuta la consulta en la tabla especificada4 Estas liacuteneas recuperan informacioacuten acerca de la tabla5 Estas liacuteneas establecen la anchura de la columna para que sea igual a la longitud mayor de estas dos

la longitud de la etiqueta o la longitud de los datos6 Este bloque de coacutedigo itera a traveacutes de todas las filas de la tabla y visualiza el contenido de cada

columna de cada fila

[ Parte anterior ]

Ejemplos consejos para la programacioacutenEn esta seccioacuten figura una lista de los ejemplos de coacutedigo que se proporcionan en toda la documentacioacutende sugerencias de programacioacuten de IBM Toolbox para Java

Gestioacuten de conexionesv Ejemplo Establecer una conexioacuten con el sistema con un objeto CommandCallv Ejemplo Establecer dos conexiones con el sistema con un objeto CommandCallv Ejemplo Crear los objetos CommandCall y IFSFileInputStream con un objeto AS400v Ejemplo Utilizar AS400ConnectionPool para preconectar con el sistemav Ejemplo Utilizar AS400ConnectionPool para preconectar con un servicio especiacutefico del sistema y

despueacutes reutilizar la conexioacuten

Inicio y finalizacioacuten de las conexionesv Ejemplo coacutemo se preconecta un programa Java al sistemav Ejemplo Coacutemo se desconecta un programa Java del sistema

574 IBM Toolbox para Java IBM Toolbox para Java

v Ejemplo Coacutemo se desconecta y reconecta un programa Java al sistema con disconnectService() y run()v Ejemplo Coacutemo se desconecta un programa Java del sistema y no se puede reconectar

Excepcionesv Ejemplo coacutemo se utilizan las excepciones

Rastreov Ejemplo coacutemo se utiliza el rastreov Ejemplo coacutemo se utiliza setTraceOn()v Ejemplo coacutemo se utiliza el rastreo de componente

Optimizacioacutenv Ejemplo crear dos objetos AS400v Ejemplo coacutemo se utiliza un objeto AS400 para representar un segundo servidor

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplos clases de utilidadesEn este tema figura una lista de los ejemplos de coacutedigo que se proporcionan en toda la documentacioacuten delas clases de utilidades de IBM Toolbox para Java

AS400ToolboxJarMakerv Ejemplo extraer AS400class y todas sus clases dependientes de jt400jarv Ejemplo subdividir jt400jar en un conjunto de archivos de 300 KBv Ejemplo eliminar archivos no utilizados de un archivo JARv Ejemplo crear un archivo JAR que tenga 400 KB menos a base de omitir las tablas de conversioacuten con el

paraacutemetro -ccsid

CommandPrompterv Ejemplo coacutemo se utiliza CommandPrompter para solicitar y ejecutar un mandato

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM Toolbox para Java 575

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo coacutemo se utiliza CommandPrompterEste programa de ejemplo utiliza las clases CommandPrompter CommandCall y AS400Message parasolicitar un mandato ejecutar el mandato y visualizar los mensajes devueltos si el mandato no se haejecutado

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de CommandPrompter Este programa utiliza CommandPrompter CommandCall y AS400Message para solicitar un mandato ejecutar el mandato y visualizar los mensajes devueltos si el mandato no se ejecuta Sintaxis del mandato Prompter serieMandato

import comibmas400uiutilCommandPrompterimport comibmas400accessAS400import comibmas400accessAS400Messageimport comibmas400accessCommandCallimport javaxswingJFrameimport javaawtFlowLayoutpublic class Prompterpublic static void main ( String args[] ) throws Exception

JFrame frame = new JFrame()framegetContentPane()setLayout(new FlowLayout())AS400 system = new AS400(mySystem myUserId myPasswd)String cmdName = args[0]

Launch the CommandPrompterCommandPrompter cp = new CommandPrompter(frame system cmdName)if (cpshowDialog() == CommandPrompterOK)

String cmdString = cpgetCommandString()Systemoutprintln(Serie del mandato + cmdString)

Ejecute el mandato construido en el programa de solicitudCommandCall cmd = new CommandCall(system cmdString)if (cmdrun())

AS400Message[] msgList = cmdgetMessageList()for (int i = 0 i lt msgListlength ++i)

Systemoutprintln(msgList[i]getText())

576 IBM Toolbox para Java IBM Toolbox para Java

Systemexit (0)

Ejemplos XPCMLEn esta seccioacuten figura una lista de los ejemplos de coacutedigo que se proporcionan en toda la documentacioacutendel componente XPCML de IBM Toolbox para Javav ldquoEjemplo condensar un documento XPCML existenterdquo en la paacutegina 583v ldquoEjemplo condensar un documento XPCML existente con coacutedigo Java incluidordquo en la paacutegina 583v ldquoEjemplo coacutemo se utiliza fuente XPCML condensado para crear un objeto ProgramCallDocumentrdquo en

la paacutegina 586v ldquoEjemplo obtener los resultados de una llamada a programa en formato de XPCML condensadordquo en la

paacutegina 586v ldquoEjemplo recuperar los resultados de una llamada a programa en formato de XPCMLrdquov ldquoEjemplo pasar valores de paraacutemetros como XPCMLrdquo en la paacutegina 580v ldquoEjemplos pasar matrices de valores de paraacutemetros como XPCMLrdquo en la paacutegina 581v ldquoEjemplo convertir un documento PCML en un documento XPCMLrdquo en la paacutegina 354

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo recuperar los resultados de una llamada a programa en formato deXPCMLEl ejemplo siguiente muestra coacutemo se puede construir un objeto ProgramCallDocument XPCML llamar aun programa de IBM i y recuperar los resultados de la llamada a programa en formato de XPCML

El ejemplo da por supuestos los siguientes componentesv El documento XPCML qgyolausxpcml que define las especificaciones del programa y los paraacutemetros

con valores de entradav El coacutedigo Java que construye un objeto ProgramCallDocument utiliza el archivo XPCML y a

continuacioacuten llama al programa QGYOLAUSv Los resultados de la llamada a programa que el coacutedigo Java genera en formato de XPCML y almacena

en el archivo XPCMLOutxpcml

Fiacutejese en coacutemo se especifican los datos de matriz en el fuente XPCML original y el generado El elementoqgyolausreceiver un paraacutemetro de salida es un objeto XPCML arrayOfStructParm con un atributo que

IBM Toolbox para Java 577

establece el nuacutemero en listInforcdsReturned El coacutedigo de ejemplo siguiente solo contiene una parte de lasalida de QGYOLAUS Si el ejemplo incluyera toda la salida el coacutedigo podriacutea contener 89 usuarios bajoel coacutedigo XPCML ltarrayOfStructParmgt

Para las matrices de estructuras XPCML utiliza el coacutedigo XPCML ltstruct_igt para delimitar cada uno delos elementos structParm Cada uno de los coacutedigos ltstruct_igt indica que los datos que figuran en suinterior constituyen un elemento de tipo struct autu0150 El atributo de iacutendice (index) del coacutedigoltstruct_igt especifica el elemento de la matriz para el dato de tipo struct

En el caso de las matrices de tipos simples tales como arrayOfStringParm arrayOfIntParm etc el coacutedigoXPCML ltigt indica elementos de matriz

Documento XPCML qgyolausxpcmlltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=xpcmlxsd version=40gt

lt-- Fuente XPCML para llamar a la API Abrir lista de usuarios autorizados --gtlt-- (QGYOLAUS) API --gt

lt-- Formato AUTU0150 - Hay otros formatos disponibles --gtltstruct name=autu0150gt

ltstringParm name=name length=10gtltstringParm name=userOrGroup length=1gtltstringParm name=groupMembers length=1gtltstringParm name=description length=50gt

ltstructgt

lt-- Estructura para listar informacioacuten (comuacuten a todas las API de tipo Abrir lista) --gtltstruct name=listInfogt

ltintParm name=totalRcdsgtltintParm name=rcdsReturnedgt0ltrcdsReturnedgtlthexBinaryParm name=rqsHandle totalBytes=4gtltintParm name=rcdLengthgtltstringParm name=infoComplete length=1gtltstringParm name=dateCreated length=7gtltstringParm name=timeCreated length=6gtltstringParm name=listStatus length=1gtlthexBinaryParm totalBytes=1gtltunsignedIntParm name=lengthOfInfogtltintParm name=firstRecordgtlthexBinaryParm totalBytes=40gt

ltstructgt

lt-- Programa QGYOLAUS y su lista de paraacutemetros para recuperar --gtlt-- el formato AUTU0150 --gt

ltprogram name=QGYOLAUS path=QSYSlibQGYlibQGYOLAUSpgmparseOrder=listInfo receivergt

ltparameterListgt Valores de salida --- matriz del elemento struct autu0150ltarrayOfStructParm name=receiver count=listInforcdsReturned

passDirection=out outputSize=receiverLength struct=autu0150gt Valores de entradaltintParm name=receiverLength passDirection=ingt16384ltintParmgtltstructParm name=listInfo passDirection=out struct=listInfogt Valores de entradaltintParm name=rcdsToReturn passDirection=ingt264ltintParmgtltstringParm name=format passDirection=in length=10gt

AUTU0150ltstringParmgtltstringParm name=selection passDirection=in length=10gt

USERltstringParmgtltstringParm name=member passDirection=in length=10gt

578 IBM Toolbox para Java IBM Toolbox para Java

NONEltstringParmgtltintParm name=errorCode passDirection=ingt0ltintParmgt

ltparameterListgtltprogramgt

Coacutedigo Java que construye el objeto ProgramCallDocument y utiliza el fuente XPCMLpara llamar al programa QGYOLAUS

system = new AS400() Cree un objeto ProgramCallDocument en el que se analizaraacute el archivoProgramCallDocument xpcmlDoc =

new ProgramCallDocument(system QGYOLAUSxpcml)

Llame a QGYOLAUSboolean rc = xpcmlDoccallProgram(QGYOLAUS)

Obtenga los resultados de la llamada a programa en formato de XPCML y guaacuterdelos en el archivo XPCMLOutxpcmlif (rc) El programa se ha ejecutado satisfactoriamente

xpcmlDocgenerateXPCML(QGYOLAUSXPCMLOutxpcml)

Resultados de la llamada a programa generados en formato de XPCML y almacenados enel archivo XPCMLOutxpcml

ltxml version=10 gtltxpcml version=40

xmlnsxsi=httpwwww3org2001XMLSchema-instancexsinoNamespaceSchemaLocation=rsquoxpcmlxsdrsquo gt

ltprogram name=QGYOLAUS path=QSYSlibQGYlibQGYOLAUSpgmparseOrder=listInfo receivergt

ltparameterListgtltarrayOfStructParm name=receiver passDirection=out

count=listInforcdsReturned outputSize=receiverLengthstruct=autu0150gt

ltstruct_i index=0gtltstringParm name=name length=10gtJANEDOWltstringParmgtltstringParm name=userOrGroup length=1gt0ltstringParmgtltstringParm name=groupMembers length=1gt0ltstringParmgtltstringParm name=description length=50gt

Jane DoeltstringParmgtltstruct_igtltstruct_i index=1gt

ltstringParm name=name length=10gtBOBSltstringParmgtltstringParm name=userOrGroup length=1gt0ltstringParmgtltstringParm name=groupMembers length=1gt0ltstringParmgtltstringParm name=description length=50gt

Bob SmithltstringParmgtltstruct_igt

lt-- Aquiacute puede haber maacutes registros seguacuten el nuacutemero de usuarios de la salida --gtlt-- En este caso figuran 89 registros de usuario --gt

ltarrayOfStructParmgt lt-- Fin de la matriz de usuarios --gtltintParm name=receiverLength passDirection=ingt

16384ltintParmgtltstructParm name=listInfo passDirection=out

struct=listInfogtltintParm name=totalRcdsgt89ltintParmgtltintParm name=rcdsReturnedgt89ltintParmgtlthexBinaryParm name=rqsHandle totalBytes=4gt

00000001==lthexBinaryParmgtltintParm name=rcdLengthgt62ltintParmgtltstringParm name=infoComplete length=1gtCltstringParmgtltstringParm name=dateCreated length=7gt

1030321ltstringParmgtltstringParm name=timeCreated length=6gt

IBM Toolbox para Java 579

120927ltstringParmgtltstringParm name=listStatus length=1gt2ltstringParmgtlthexBinaryParm totalBytes=1gtlthexBinaryParmgtltunsignedIntParm name=lengthOfInfogt

5518ltunsignedIntParmgtltintParm name=firstRecordgt1ltintParmgt

ltstructParmgtltintParm name=rcdsToReturn passDirection=ingt264ltintParmgtltstringParm name=format passDirection=in length=10gt

AUTU0150ltstringParmgtltstringParm name=selection passDirection=in length=10gt

USERltstringParmgtltstringParm name=member passDirection=in length=10gt

NONEltstringParmgtltintParm name=errorCode passDirection=ingt0ltintParmgt

ltparameterListgtltprogramgt

ltxpcmlgt

Ejemplo pasar valores de paraacutemetros como XPCMLLos valores de paraacutemetros de programas se pueden establecer en el archivo fuente XPCML Cuando selee y se analiza el archivo XPCML automaacuteticamente se llama al meacutetodo setValue deProgramCallDocument para cada uno de los paraacutemetros cuyo valor se ha pasado como XPCML De estemodo el usuario se ahorra el tener que escribir coacutedigo Java para establecer los valores de complicadasestructuras y matrices

En los ejemplos siguientes el fuente XPCML llama a dos programas distintos prog1 y prog2 Ambosprogramas utilizan el paraacutemetro de entrada s1Ref El primer ejemplo establece valores distintos paras1Ref para cada llamada a programa El segundo ejemplo especifica el mismo valor para s1Ref para cadallamada a programa y muestra una buena forma de establecer valores de datos constantes para losparaacutemetros de entrada

Ejemplo pasar valores distintos para los paraacutemetros de entrada

En el ejemplo siguiente una vez que el analizador XML lee y analiza el documento el valor del elementoprog1s1Refs2Refs2p1[0] es prog1Val_1 y el valor del elemento prog1s1Refs2Refs2p1[1] es prog1Val_2

ltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instancexsinoNamespaceSchemaLocation=xpcmlxsd version=40gt

ltstruct name=s1gtltstringParm name=s1p1gtltstructParm name=s2Ref struct=s2gt

ltstructgt

ltstruct name=s2gtltstringParm name=s2p1 length=10gtltarrayOfStringParm name=parm1 count=2gt

ltstructgt

ltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgtltparameterListgt

ltstructParm name=s1Ref struct=s1 passDirection=in gtltstringParm name=s1p1gtprog1ValltstringParmgtltstructParm name=s2Ref struct=s2gt

ltstringParm name=s2p1 length=10gtprog1ValltstringParmgtltarrayOfStringParm name=parm1 count=2gt

ltigtprog1Val_1ltigtltigtprog1Val_2ltigt

ltarrayOfStringParmgtltstructParmgt

ltstructParmgtltparameterListgtltprogramgt

580 IBM Toolbox para Java IBM Toolbox para Java

ltprogram name=prog2 path=QSYSLIBW95LIBLIBPROG1PGMgtltparameterListgt

ltstructParm name=s1Ref struct=s1 passDirection=in gtltstringParm name=s1p1gtprog2ValltstringParmgtltstructParm name=s2Ref struct=s2gt

ltstringParm name=s2p1 length=10gtprog2ValltstringParmgtltarrayOfStringParm name=parm1 count=2gt

ltigtprog2Val_1ltigtltigtprog2Val_2ltigt

ltarrayOfStringParmgtltstructParmgt

ltstructParmgtltparameterListgtltprogramgtltxpcmlgt

Ejemplo pasar valores constantes para los paraacutemetros de entrada

En el ejemplo siguiente una vez que el analizador XML lee y analiza el documento el valor del elementoprog1s1Refs2Refs2p1[0] es constantVal_1 y el valor del elemento prog1s1Refs2Refs2p1[1] esconstantVal_2

ltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instancexsinoNamespaceSchemaLocation=xpcmlxsd version=40gt

ltstruct name=s1 gtltstringParm name=s1p1gtconstantValltstringParmgtltstructParm name=s2Ref struct=s2gt

ltstructgt

ltstruct name=s2gtltstringParm name=s2p1 length=10gtconstantValltstringParmgtltarrayOfStringParm name=parm1 count=2gt

ltigtconstantVal_1ltigtltigtconstantVal_2ltigt

ltarrayOfStringParmgtltstructgt

ltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgtltparameterListgt

ltstructParm name=s1Ref struct=s1 passDirection=in gtltparameterListgtltprogramgt

ltprogram name=prog2 path=QSYSLIBW95LIBLIBPROG1PGMgtltparameterListgt

ltstructParm name=s1Ref struct=s1 passDirection=in gtltparameterListgtltprogramgtltxpcmlgt

Ejemplos pasar matrices de valores de paraacutemetros como XPCMLEl ejemplo siguiente muestra coacutemo se pasan matrices de valores de paraacutemetros utilizando los datos dematriz structParm y una matriz de elementos struct

Si utiliza XPCML para pasar datos de matriz debe utilizar el atributo countv Especifique el atributo count en el elemento de matrizv Establezca el atributo count como el nuacutemero de elementos que contiene la matriz en el momento de

analizar el documentoltxml version=10 encoding=UTF-8gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=xpcmlxsd version=40gt

IBM Toolbox para Java 581

ltstruct name=s1 gtltstringParm name=s1p1gtltstruct name=s1Arraygt

ltstringParm name=s1Ap1gtltstructgt

ltstructgt

ltstruct name=s2gtltstringParm name=s2p1gt

ltstructgt

ltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgtltparameterListgt

ltstructParm name=s1Ref struct=s1 passDirection=in gtltstringParm name=s1p1gtValue 1ltstringParmgtltarrayOfStruct name=s1Array count=2gt

ltstruct_igtltstringParm name=s1Ap1gtValue 1ltstringParmgt

ltstruct_igtltstruct_igt

ltstringParm name=s1Ap1gtValue 2ltstringParmgtltstruct_igt

ltarrayOfStructgtltstructParmgtltarrayOfStructParm name=s2Ref struct=s2 count=2 passDirection=in gt

ltstruct_igtltstringParm name=s2p1gtValue 1ltstringParmgt

ltstruct_igtltstruct_igt

ltstringParm name=s2p1gtValue 2ltstringParmgtltstruct_igt

ltarrayOfStructParmgtltparameterListgtltprogramgtltxpcmlgt

Por ejemplo el siguiente fuente XPCML especifica una matriz de tres elementos intParm y establece elprimer elemento en 12 el segundo en 100 y el tercero en 4

ltxml version=10 gtltxpcml version=40 xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=rsquoxpcmlxsdrsquo gtltprogram name=prog1 path=QSYSlibMYLIGlibPROG1pgmgtltparameterListgt

ltarrayOfIntParm name=intArray count=3gtltigt12ltigtltigt100ltigtltigt4ltigt

ltarrayOfIntParmgtltparameterListgtltprogramgt

ltxpcmlgt

Utilizar el atributo index de los coacutedigos ltigt y ltstruct_igt para establecer valores dematrices

Puede utilizar el atributo index de los coacutedigos ltigt y ltstruct_igt para establecer valores de matrices En elejemplo siguiente el fuente XPCML establece el primer elemento de la matriz en 4 el segundo en 100 yel tercero en 12

ltxml version=10 gtltxpcml version=40 xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=rsquoxpcmlxsdrsquo gt

ltprogram name=prog1 path=QSYSlibMYLIGlibPROG1pgmgtltparameterListgt

582 IBM Toolbox para Java IBM Toolbox para Java

ltarrayOfIntParm name=intArray count=3gtlti index=2gt12ltigtlti index=1gt100ltigtlti index=0gt4ltigt

ltarrayOfIntParmgtltparameterListgtltprogramgt

ltxpcmlgt

Ejemplo condensar un documento XPCML existenteEl ejemplo siguiente muestra coacutemo se puede condensar un documento XPCML existente El ejemplocontiene el fuente XPCML original el fuente XPCML condensado final y el esquema ampliado

Fuente XPCML originalltxml version=10 encoding=UTF-8gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=xpcmlxsd version=40gtltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgt

ltparameterListgtltstringParm name=parm1 passDirection=in passMode=value

minvrm=V5R2M0 ccsid=37 length=10gtValue 1ltstringParmgtltparameterListgt

ltprogramgtltxpcmlgt

Fuente XPCML condensadoltxml version=10 encoding=UTF-8gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=myXSDxsd version=40gtltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgt

ltparameterListgtltparm1_gtValue 1ltparm1_gt

ltparameterListgtltprogramgtltxpcmlgt

Esquema generadolt-- Definicioacuten XSD de parm1 --gtltxsschema xmlnsxs=rsquohttpwwww3org2001XMLSchemarsquogtlt-- Enlace de retorno a XPCMLxsd --gtltxsinclude schemaLocation=rsquoxpcmlxsdrsquogtltxselement name=parm1_ substitutionGroup=stringParmGroup gtltxscomplexTypegt

ltxssimpleContentgtltxsrestriction base=stringParmTypegt

lt-- Atributos definidos para parm1 --gtltxsattribute name=name type=string50 fixed=parm1 gtltxsattribute name=length type=xsstring fixed=10 gtltxsattribute name=passMode type=xsstring fixed=value gtltxsattribute name=ccsid type=xsstring fixed=37 gtltxsattribute name=minvrm type=xsstring fixed=V5R2M0 gt

ltxsrestrictiongtltxssimpleContentgt

ltxscomplexTypegtltxselementgt

ltschemagt

Ejemplo condensar un documento XPCML existente con coacutedigo Java incluidoEl ejemplo siguiente muestra coacutemo se puede condensar un documento XPCML existente El ejemplocontiene el fuente XPCML original el fuente XPCML condensado final el coacutedigo Java que llama acondenseXPCML() y varias de las nuevas definiciones de tipo generadas del esquema ampliado

IBM Toolbox para Java 583

Fuente XPCML originallt-- Fuente XPCML totalmente especificado --gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=xpcmlxsd version=40gt

ltstruct name=qualifiedJobNamegtltstringParm name=jobName length=10gtltstringParmgtltstringParm name=userName length=10gtltstringParm name=jobNumber length=6gt

ltstructgt

ltstruct name=jobi0100gtltintParm name=numberOfBytesReturnedgtltintParm name=numberOfBytesAvailablegtltstructParm name=qualifiedJobName struct=qualifiedJobNamegtlthexBinaryParm name=internalJobIdentifier totalBytes=16gtltstringParm name=jobStatus length=10gtltstringParm name=jobType length=1gtltstringParm name=jobSubtype length=1gtltstringParm length=2gtltintParm name=runPrioritygtltintParm name=timeSlicegtltintParm name=defaultWaitgtltstringParm name=purge length=10gt

ltstructgt

ltprogram name=qusrjobi_jobi0100 path=QSYSLIBQUSRJOBIPGMgtltparameterListgt

ltstructParm name=receiverVariable passDirection=outoutputSize=lengthOfReceiverVariable struct=jobi0100gt

ltintParm name=lengthOfReceiverVariable passDirection=ingt86ltintParmgtltstringParm name=formatName passDirection=in length=8gtJOBI0100ltstringParmgtltstructParm name=qualifiedJobName passDirection=in struct=qualifiedJobNamegtlthexBinaryParm name=internalJobIdentifier

passDirection=in totalBytes=16gt lthexBinaryParmgtltintParm name=errorCode passDirection=ingt0ltintParmgt

ltparameterListgtltprogramgtltxpcmlgt

Coacutedigo Java para condensar el fuente XPCML originaltry

FileInputStream fullStream = new FileInputStream(myXPCMLxpcml)FileOutputStream condensedStream = new FileOutputStream(myCondensedXPCMLxpcml)FileOutputStream xsdStream = new FileOutputStream(myXSDxsd)ProgramCallDocumentcondenseXPCML(fullStream xsdStream condensedStream myXSDxsd)

catch (Exception e)

Systemoutprintln(error - +egetMessage())eprintStackTrace()

Fuente XPCML condensado myCondensedXPCMLxpcmlltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=myXSDxsd version=40gt

ltstruct name=qualifiedJobNamegtltjobName_gtltjobName_gtltuserName_gtltjobNumber_gt

ltstructgt

ltstruct name=jobi0100gtltnumberOfBytesReturned_gt

584 IBM Toolbox para Java IBM Toolbox para Java

ltnumberOfBytesAvailable_gtltstructParm name=qualifiedJobName struct=qualifiedJobNamegtltinternalJobIdentifier_gtltjobStatus_gtltjobType_gtltjobSubtype_gtltstringParm length=2gtltrunPriority_gtlttimeSlice_gtltdefaultWait_gtltpurge_gt

ltstructgt

ltprogram name=qusrjobi_jobi0100 path=QSYSLIBQUSRJOBIPGMgtltparameterListgt

ltstructParm name=receiverVariable passDirection=outoutputSize=lengthOfReceiverVariable struct=jobi0100gt

ltlengthOfReceiverVariable_gt86ltlengthOfReceiverVariable_gtltformatName_gtJOBI0100ltformatName_gtltstructParm name=qualifiedJobName passDirection=in struct=qualifiedJobNamegtltinternalJobIdentifier_gt ltinternalJobIdentifier_gtlterrorCode_gt0lterrorCode_gt

ltparameterListgtltprogramgtltxpcmlgt

Varias definiciones de tipo del esquema generado myXSDxsdltxsschema xmlnsxs=rsquohttpwwww3org2001XMLSchemarsquogtltxsinclude schemaLocation=rsquoxpcmlxsdrsquogt

ltxselement name=jobName_ substitutionGroup=stringParmGroup gtltxscomplexTypegt

ltxssimpleContentgtltxsrestriction base=stringParmTypegt

ltxsattribute name=name type=string50 fixed=jobName gtltxsattribute name=length type=xsstring fixed=10 gt

ltxsrestrictiongtltxssimpleContentgt

ltxscomplexTypegtltxselementgt

ltxselement name=userName_ substitutionGroup=stringParmGroup gtltxscomplexTypegt

ltxssimpleContentgtltxsrestriction base=stringParmTypegt

ltxsattribute name=name type=string50 fixed=userName gtltxsattribute name=length type=xsstring fixed=10 gt

ltxsrestrictiongtltxssimpleContentgt

ltxscomplexTypegtltxselementgt

ltxselement name=jobNumber_ substitutionGroup=stringParmGroup gtltxscomplexTypegt

ltxssimpleContentgtltxsrestriction base=stringParmTypegt

ltxsattribute name=name type=string50 fixed=jobNumber gtltxsattribute name=length type=xsstring fixed=6 gt

ltxsrestrictiongtltxssimpleContentgt

ltxscomplexTypegtltxselementgt

ltxselement name=lengthOfReceiverVariable_ substitutionGroup=intParmGroup gtltxscomplexTypegt

ltxssimpleContentgt

IBM Toolbox para Java 585

ltxsrestriction base=intParmTypegtltxsattribute name=name type=string50 fixed=lengthOfReceiverVariable gtltxsattribute name=passDirection type=passDirectionType fixed=in gt

ltxsrestrictiongtltxssimpleContentgt

ltxscomplexTypegtltxselementgt

ltxselement name=formatName_ substitutionGroup=stringParmGroup gtltxscomplexTypegt

ltxssimpleContentgtltxsrestriction base=stringParmTypegt

ltxsattribute name=name type=string50 fixed=formatName gtltxsattribute name=length type=xsstring fixed=8 gtltxsattribute name=passDirection type=passDirectionType fixed=in gt

ltxsrestrictiongtltxssimpleContentgt

ltxscomplexTypegtltxselementgt

lt-- A continuacioacuten figuran maacutes definiciones de tipo para cada uno de los nuevos tipos definidos --gtltxsschemagt

Ejemplo coacutemo se utiliza fuente XPCML condensado para crear un objetoProgramCallDocumentAlgunos constructores de ProgramCallDocument aceptan un archivo fuente condensedXPCML y elesquema correspondiente (archivo xsd) Esto permite emplear fuente XPCML condensado para crear unobjeto ProgramCallDocument

Los constructores indicados anteriormente precisan que se especifiquen los paraacutemetros siguientesv Un objeto String que especifique un archivo XPCML condensadov Un objeto InputStream que contenga las definiciones de tipo creadas al ejecutar condenseXPCML()

Al utilizar estos constructores se carga y se analiza un archivo XPCML condensado Ademaacutes el procesoanota los errores de anaacutelisis que se producen Tras llevar a cabo el anaacutelisis el constructor crea un objetoProgramCallDocument

En el ejemplo de coacutedigo Java siguiente se utiliza fuente XPCML condensado para crear un objetoProgramCallDocument El coacutedigo de ejemplo da por supuesto lo siguientev El nombre del archivo XPCML condensado es myCondensedXPCMLxpcmlv El nombre del esquema ampliado es myXSDxsd

A continuacioacuten el coacutedigo utiliza el objeto ProgramCallDocument para ejecutar el programaqusrjobi_jobi0100

AS400 system = new AS400() Cree un objeto ProgramCallDocument y analice el archivoProgramCallDocument xpcmlDoc =

new ProgramCallDocument(systemmyCondensedXPCMLxpcmlnew FileInputStream(myXSDxsd))

boolean rc = xpcmlDoccallProgram(qusrjobi_jobi0100)

Nota el coacutedigo XPCML que se utiliza para llamar al programa (tras crear el objetoProgramCallDocument) es el mismo que se utilizariacutea con PCML

Ejemplo obtener los resultados de una llamada a programa en formato de XPCMLcondensadoEl procedimiento para obtener los resultados de una llamada a programa en formato de XPCMLcondensado es el mismo que para obtenerlos en formato de XPCML no condensado llamando aProgramCallDocumentgenerateXPCML()

586 IBM Toolbox para Java IBM Toolbox para Java

Utilice setXsdName() para especificar el nombre del esquema ampliado que generateXPCML() empleapara generar el atributo noNamespaceSchemaLocation del coacutedigo ltxpcmlgt en el fuente XPCMLcondensado

Es importante utilizar setXsdName() cuando se desean utilizar los resultados de la llamada a programa(en formato de XPCML condensado) como fuente para otro objeto ProgramCallDocument Debeespecificar el nombre del esquema ampliado para que el analizador sepa queacute archivo de esquema debeutilizar al efectuar el anaacutelisis

Por ejemplo el coacutedigo siguiente obtiene el resultado de una llamada a programa y genera fuente XPCMLcondensado

AS400 system = new AS400()

Cree un objeto ProgramCallDocument y analice el archivoProgramCallDocument xpcmlDoc =

new ProgramCallDocument(system myCondensedXPCMLxpcml new FileInputStream(myXSDxsd))

boolean rc = xpcmlDoccallProgram(qusrjobi_jobi0100)

if (rc) El programa se ha ejecutado satisfactoriamente

xpcmlDocsetXsdName(myXSDxsd)xpcmlDocgenerateXPCML(qusrjobi_jobi0100XPCMLOutxpcml)

El coacutedigo siguiente muestra un ejemplo de coacutemo se obtienen los resultados de una llamada a programaen formato de XPCML condensado

ltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instancexsinoNamespaceSchemaLocation=myXSDxsd version=40gt

ltprogram name=qusrjobi_jobi0100 path=QSYSLIBQUSRJOBIPGMgtltparameterListgtltstructParm name=receiverVariable passDirection=out

outputSize=lengthOfReceiverVariable struct=jobi0100gtltnumberOfBytesReturned_gt100ltnumberOfBytesReturned_gtltnumberOfBytesAvailable_gt100ltnumberOfBytesAvailable_gtltstructParm name=qualifiedJobName

struct=qualifiedJobNamegtltjobName_gtltjobName_gtltuserName_gtltjobNumber_gt

ltstructParmgtltinternalJobIdentifier_gtltjobStatus_gtACTIVEltjobStatus_gtltjobType_gtPJltjobTypegtltjobSubtype_gtltstringParm length=2gtltrunPriority_gt5ltrunPrioritygtlttimeSlice_gtltdefaultWait_gt10ltdefaultWait_gtltpurge_gt

ltstructParmgtltlengthOfReceiverVariable_gt86ltlengthOfReceiverVariable_gtltformatName_gtJOBI0100ltformatName_gtltstructParm name=qualifiedJobName passDirection=in struct=qualifiedJobNamegtltinternalJobIdentifier_gt ltinternalJobIdentifier_gtlterrorCode_gt0lterrorCode_gt

ltparameterListgtltprogramgtltxpcmlgt

IBM Toolbox para Java 587

Ejemplo visualizar una lista de recursos en un servletUtilice la clase ResourceListRowData junto con la clase HTMLFormConverter o HTMLTableConverterpara visualizar una lista de recursos en un servletv HTMLFormConverter visualiza el contenido de la lista de recursos como una serie de formularios en la

que cada formulario contiene valores de atributo para un recurso de la lista de recursosv HTMLTableConverter visualiza el contenido de la lista de recursos como una tabla en la que cada fila

contiene informacioacuten sobre un recurso de la lista de recursos

Las columnas de un objeto ResourceListRowData se especifican como una matriz de ID de atributo decolumna mientras que cada fila representa un objeto de recurso

Cree la lista de recursos Este ejemplo crea una lista de todos los mensajes de la cola de mensajes del usuario actualAS400 system = new AS400(MYSYSTEM MYUSERID MYPASSWORD)RMessageQueue messageQueue = new RMessageQueue(system RMessageQueueCURRENT)

Cree el objeto ResourceListRowData En este ejemplo hay cuatro columnas en la tabla La primera columna contiene los iconos y los nombres de cada mensaje de la cola de mensajes Las demaacutes columnas contienen el texto la gravedad y el tipo de cada mensajeResourceListRowData rowdata = new ResourceListRowData(messageQueue

new Object[] null RQueuedMessageMESSAGE_TEXT RQueuedMessageMESSAGE_SEVERITYRQueuedMessageMESSAGE_TYPE )

Cree los objetos HTMLTable y HTMLTableConverter que se usaraacuten para generar y personalizar las tablas HTMLHTMLTable table = new HTMLTable()tablesetCellSpacing(6)tablesetBorderWidth(8)

HTMLTableConverter converter = new HTMLTableConverter()convertersetTable(table)convertersetUseMetaData(true)

Genere la tabla HTMLString[] html = converterconvert(rowdata)Systemoutprintln(html[0])

Informacioacuten relacionada para IBM Toolbox para JavaLa lista siguiente contiene sitios Web y temas de Information Center relacionados con la informacioacuten deIBM Toolbox para Java

Recursos de IBM Toolbox para Java

Consulte los siguientes sitios si desea adquirir maacutes conocimientos sobre IBM Toolbox para Java

v IBM Toolbox para Java and JTOpen ofrece informacioacuten sobre paquetes de servicio consejos derendimiento ejemplos y mucho maacutes Tambieacuten puede bajar un paquete comprimido en zip de estainformacioacuten incluidos los Javadocs

v IBM Toolbox para Java Frequently Asked Questions (FAQ) da respuesta a cuestiones relacionadascon el rendimiento la resolucioacuten de problemas JDBC y otros aspectos

v IBM Toolbox para Java and JTOpen forum proporciona un meacutetodo eficaz para comunicarse conla comunidad de programadores de Java que utilizan IBM Toolbox para Java y los desarrolladores deIBM Toolbox para Java

588 IBM Toolbox para Java IBM Toolbox para Java

Java

Java es un lenguaje de programacioacuten que permite desarrollar applets y aplicaciones orientadas a objetosportables Consulte los siguientes sitios si desea adquirir maacutes conocimientos sobre Java

v IBM developerWorks Java technology zone facilita informacioacuten formacioacuten y herramientas paraayudarle a utilizar Java productos IBM y otras tecnologiacuteas destinadas a crear soluciones empresariales

v The Source for Java Developers ofrece informacioacuten sobre los diversos usos de Java incluidas lasnuevas tecnologiacuteas

Java Naming and Directory Interface

v Java Naming and Directory Interface (JNDI) ofrece una visioacuten general de JNDI informacioacutenteacutecnica ejemplos y una lista de los proveedores de servicio disponibles

v IBM i LDAP facilita informacioacuten acerca de LDAP (Lightweight Directory Access Protocol) en IBMi

Java Secure Socket Extension

v Java SE Security ofrece una breve visioacuten general de JSSE y enlaces a maacutes informacioacuten

Servlets

Los servlets son pequentildeos programas Java que se ejecutan en un servidor y actuacutean de mediadores entrelas peticiones de uno o muacuteltiples clientes (cada uno de los cuales se ejecuta en un navegador) y una ovarias bases de datos Dado que los servlets estaacuten programados en Java pueden ejecutar peticiones comovarias hebras en un solo proceso lo que permite ahorrar recursos del sistema Consulte los siguientessitios si desea adquirir maacutes conocimientos sobre los servlets

v Java Servlet technology contiene informacioacuten teacutecnica instrucciones y herramientas que leayudaraacuten a entender y utilizar los servlets

XHTML

XHTML se considera como sucesor de HTML 40 Se basa en HTML 40 pero incorpora la extensibilidadde XML Consulte los siguientes sitios si desea adquirir maacutes conocimientos sobre XHTML

v The Web Developers Virtual Library proporciona una introduccioacuten a XHTML con ejemplos yenlaces a informacioacuten adicional

v W3C proporciona informacioacuten teacutecnica sobre estaacutendares XHTML y recomendaciones

XML

XML (Extensible Markup Language) es un metalenguaje que permite describir y organizar la informacioacutende modo que sea faacutecilmente comprensible tanto para los humanos como para las maacutequinas Unmetalenguaje permite definir un lenguaje de coacutedigos de documento y su estructura Consulte lossiguientes sitios si desea adquirir maacutes conocimientos sobre XML

v IBM developerWorks XML zone ofrece un sitio dedicado al trabajo que IBM realiza con XML y acoacutemo permite facilitar el comercio electroacutenico

v W3C XML facilita recursos teacutecnicos para los desarrolladores de XML

v XMLcom facilita informacioacuten actualizada sobre XML en la industria informaacutetica

IBM Toolbox para Java 589

v XMLorg proporciona noticias e informacioacuten sobre la comunidad de XML con noticias del sectorcalendarios de eventos y mucho maacutes

v XML Cover Pages ofrece un completo trabajo de referencia en liacutenea para XML SGML yestaacutendares relacionados con XML como XSL y XSLT

Otras referencias

v IBM HTTP Server para i facilita informacioacuten recursos y consejos relativos a IBM HTTP Serverpara i

v IBM iAccess facilita informacioacuten acerca de IBM i Access con bajadas FAQs y enlaces a sitiosadicionales

v IBM WebSphere Host On-Demand ofrece informacioacuten acerca del emulador basado en navegadorque ofrece soporte para S390 IBM i y la emulacioacuten de DECUnix

v IBM Support and downloads ofrece un portal al soporte de hardware y software de IBM

Informacioacuten sobre licencia de coacutedigo y exencioacuten de responsabilidadIBM le otorga una licencia de copyright no exclusiva para utilizar todos los ejemplos de coacutedigo deprogramacioacuten a partir de los que puede generar funciones similares adaptadas a sus necesidadesespeciacuteficas

SUJETO A LAS GARANTIacuteAS ESTATUTARIAS QUE NO PUEDAN EXCLUIRSE IBM Y LOSDESARROLLADORES Y SUMINISTRADORES DE PROGRAMAS DE IBM NO OFRECEN NINGUNAGARANTIacuteA NI CONDICIOacuteN YA SEA IMPLIacuteCITA O EXPLIacuteCITA INCLUIDAS PERO SIN LIMITARSE AELLAS LAS GARANTIacuteAS O CONDICIONES IMPLIacuteCITAS DE COMERCIALIZACIOacuteN ADECUACIOacuteNA UN PROPOacuteSITO DETERMINADO Y NO VULNERACIOacuteN CON RESPECTO AL PROGRAMA O ALSOPORTE TEacuteCNICO SI EXISTE

BAJO NINGUNA CIRCUNSTANCIA IBM Y LOS DESARROLLADORES O SUMINISTRADORES DEPROGRAMAS DE IBM SE HACEN RESPONSABLES DE NINGUNA DE LAS SIGUIENTESSITUACIONES NI SIQUIERA EN CASO DE HABER SIDO INFORMADOS DE TAL POSIBILIDAD1 PEacuteRDIDA DE DATOS O DANtildeOS CAUSADOS EN ELLOS2 DANtildeOS ESPECIALES ACCIDENTALES DIRECTOS O INDIRECTOS O DANtildeOS ECONOacuteMICOS

DERIVADOS3 PEacuteRDIDAS DE BENEFICIOS COMERCIALES DE INGRESOS CLIENTELA O AHORROS

ANTICIPADOS

ALGUNAS JURISDICCIONES NO PERMITEN LA EXCLUSIOacuteN O LA LIMITACIOacuteN DE LOS DANtildeOSDIRECTOS ACCIDENTALES O DERIVADOS POR LO QUE PARTE DE LAS LIMITACIONES OEXCLUSIONES ANTERIORES O TODAS ELLAS PUEDE NO SER PROCEDENTE EN SU CASO

Teacuterminos y condicionesLos permisos para utilizar estas publicaciones estaacuten sujetos a los siguientes teacuterminos y condiciones

Uso personal puede reproducir estas publicaciones para uso personal (no comercial) siempre y cuandoincluya una copia de todos los avisos de derechos de autor No puede distribuir ni visualizar estaspublicaciones ni ninguna de sus partes como tampoco elaborar trabajos que se deriven de ellas sin elconsentimiento expliacutecito de IBM

590 IBM Toolbox para Java IBM Toolbox para Java

Uso comercial puede reproducir distribuir y visualizar estas publicaciones uacutenicamente dentro de suempresa siempre y cuando incluya una copia de todos los avisos de derechos de autor No puedeelaborar trabajos que se deriven de estas publicaciones ni tampoco reproducir distribuir ni visualizarestas publicaciones ni ninguna de sus partes fuera de su empresa sin el consentimiento expliacutecito de IBM

Aparte de la autorizacioacuten que se concede expliacutecitamente en este permiso no se otorga ninguacuten otropermiso licencia ni derecho ya sea expliacutecito o impliacutecito sobre las publicaciones la informacioacuten losdatos el software o cualquier otra propiedad intelectual contenida en ellas

IBM se reserva el derecho de retirar los permisos aquiacute concedidos siempre que seguacuten el parecer delfabricante se utilicen las publicaciones en detrimento de sus intereses o cuando tambieacuten seguacuten el parecerdel fabricante no se sigan debidamente las instrucciones anteriores

No puede bajar exportar ni reexportar esta informacioacuten si no lo hace en plena conformidad con lalegislacioacuten y normativa vigente incluidas todas las leyes y normas de exportacioacuten de Estados Unidos

IBM NO PROPORCIONA NINGUNA GARANTIacuteA SOBRE EL CONTENIDO DE ESTASPUBLICACIONES LAS PUBLICACIONES SE PROPORCIONAN TAL CUAL SIN GARANTIacuteA DENINGUNA CLASE YA SEA EXPLIacuteCITA O IMPLIacuteCITA INCLUIDAS PERO SIN LIMITARSE A ELLASLAS GARANTIacuteAS IMPLIacuteCITAS DE COMERCIALIZACIOacuteN NO VULNERACIOacuteN E IDONEIDAD PARAUN FIN DETERMINADO

IBM Toolbox para Java 591

592 IBM Toolbox para Java IBM Toolbox para Java

Avisos

Esta informacioacuten se ha escrito para productos y servicios ofrecidos en Estados Unidos de Ameacuterica

Es posible que IBM no ofrezca en otros paiacuteses los productos servicios o caracteriacutesticas que se describenen este documento Consulte con el representante local de IBM para obtener informacioacuten acerca de losproductos y servicios que actualmente estaacuten disponibles en su zona Las referencias a programasproductos o servicios de IBM no pretenden establecer ni implicar que soacutelo puedan utilizarse dichosproductos programas o servicios de IBM En su lugar se puede utilizar cualquier producto programa oservicio funcionalmente equivalente que no infrinja ninguno de los derechos intelectuales de IBM Noobstante es responsabilidad del usuario evaluar y verificar el funcionamiento de cualquier productoprograma o servicio que no sea de IBM

IBM puede tener patentes o solicitudes de patentes pendientes que cubran la materia descrita en estedocumento La posesioacuten de este documento no le otorga ninguna licencia sobre dichas patentes Puedeenviar consultas sobre licencias por escrito a

IBM Director of LicensingIBM CorporationNorth Castle DriveArmonk NY 10504-1785EEUU

Para consultas sobre licencias relacionadas con informacioacuten de doble byte (DBCS) poacutengase en contactocon el Departamento de propiedad intelectual de IBM de su paiacutes o enviacutee consultas por escrito a

Intellectual Property LicensingLegal and Intellectual Property LawIBM Japan Ltd1623-14 Shimotsuruma Yamato-shiKanagawa 242-8502 Japoacuten

El paacuterrafo siguiente no se aplica al Reino Unido ni a ninguacuten otro paiacutes donde estas disposiciones seanincompatibles con la legislacioacuten local INTERNATIONAL BUSINESS MACHINES CORPORATIONPROPORCIONA ESTA PUBLICACIOacuteN TAL CUAL SIN GARANTIacuteAS DE NINGUacuteN TIPO NIEXPLIacuteCITAS NI IMPLIacuteCITAS INCLUYENDO PERO NO LIMITAacuteNDOSE A ELLAS LAS GARANTIacuteASIMPLIacuteCITAS DE NO VULNERACIOacuteN COMERCIALIZACIOacuteN O IDONEIDAD PARA UN FINCONCRETO Algunas legislaciones no contemplan la declaracioacuten de limitacioacuten de garantiacuteas ni impliacutecitasni expliacutecitas en determinadas transacciones por lo que cabe la posibilidad de que esta declaracioacuten no seaaplicable en su caso

Esta informacioacuten puede contener imprecisiones teacutecnicas o errores tipograacuteficos La informacioacuten incluida eneste documento estaacute sujeta a cambios perioacutedicos que se incorporaraacuten en nuevas ediciones de lapublicacioacuten IBM puede realizar en cualquier momento mejoras o cambios en los productos o programasdescritos en esta publicacioacuten sin previo aviso

Las referencias hechas en esta publicacioacuten a sitios Web que no son de IBM se proporcionan uacutenicamentepor cortesiacutea y de ninguacuten modo deben interpretarse como promocioacuten de dichos sitios Web Los materialesde dichos sitios Web no forman parte de los materiales de este producto IBM y su utilizacioacuten esresponsabilidad del usuario

IBM puede utilizar o distribuir cualquier informacioacuten que se le proporcione en la forma que considereadecuada sin incurrir por ello en ninguna obligacioacuten para con el remitente

copy Copyright IBM Corp 1999 2014 593

Los licenciatarios de este programa que deseen obtener informacioacuten sobre eacutel para poder (i) intercambiarinformacioacuten entre programas creados de forma independiente y otros programas (incluidos este) y (ii) yutilizar de forma mutua la informacioacuten que se ha intercambiado deben ponerse en contacto con

IBM CorporationSoftware Interoperability Coordinator Department YBWA3605 Highway 52 NRochester MN 55901EEUU

Esta informacioacuten puede estar disponible sujeta a los teacuterminos y condiciones pertinentes e incluir enalgunos casos el pago de una cantidad

El programa bajo licencia descrito en este documento y todo el material con licencia disponible seproporcionan bajo los teacuterminos de IBM Customer Agreement IBM International Program LicenseAgreement o cualquier otro acuerdo equivalente entre IBM y el cliente

Los datos de rendimiento incluidos aquiacute se determinaron en un entorno controlado Por lo tanto losresultados que se obtengan en otros entornos operativos pueden variar significativamente Puedenhaberse realizado mediciones en sistemas que esteacuten en fase de desarrollo y no existe ninguna garantiacutea deque esas mediciones vayan a ser iguales en los sistemas disponibles en el mercado Ademaacutes es posibleque algunas mediciones se hayan estimado mediante extrapolacioacuten Los resultados reales pueden variarLos usuarios de este documento deben verificar los datos aplicables a su entorno especiacutefico

La informacioacuten concerniente a productos que no son de IBM se ha obtenido de los suministradores dedichos productos de sus anuncios publicados o de otras fuentes de informacioacuten puacuteblica disponibles IBMno ha probado esos productos y no puede confirmar la exactitud del rendimiento de la compatibilidad nide ninguna otra declaracioacuten relacionada con productos que no sean de IBM Las consultas acerca de lasprestaciones de los productos que no son de IBM deben dirigirse a los suministradores de talesproductos

Todas las declaraciones relativas a la direccioacuten o intencioacuten futura de IBM estaacuten sujetas a cambios oanulacioacuten sin previo aviso y representan uacutenicamente metas y objetivos

Todos los precios de IBM mostrados son precios de minoristas sugeridos por IBM estaacuten actualizados yestaacuten sujetos a cambios sin aviso previo Los precios de los concesionarios pueden ser diferentes

Esta documentacioacuten se suministra solo a efectos de planificacioacuten La informacioacuten que aquiacute se incluye estaacutesujeta a cambios antes de que los productos descritos esteacuten disponibles

Esta informacioacuten contiene ejemplos de datos e informes utilizados en operaciones comerciales diariasPara ilustrarlas de la forma maacutes completa posible los ejemplos incluyen nombres de personas empresasmarcas y productos Todos estos nombres son ficticios y cualquier parecido con los nombres y direccionesutilizados por una empresa real es pura coincidencia

LICENCIA DE COPYRIGHT

Esta informacioacuten contiene programas de aplicacioacuten de ejemplo en lenguaje fuente que muestran teacutecnicasde programacioacuten en diversas plataformas operativas Puede copiar modificar y distribuir estos programasde muestra de cualquier modo sin pagar a IBM con el fin de desarrollar utilizar comercializar odistribuir programas de aplicacioacuten que se ajusten a la interfaz de programacioacuten de aplicaciones para laplataforma operativa para la que se ha escrito el coacutedigo de muestra Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones Por lo tanto IBM no puede garantizar ni darpor supuesta la fiabilidad la capacidad de servicio ni la funcionalidad de estos programas Losprogramas de ejemplo se ofrecen TAL CUAL sin garantiacutea de ninguacuten tipo IBM no se haraacute responsablede los dantildeos derivados de la utilizacioacuten que haga el usuario de los programas de ejemplo

594 IBM Toolbox para Java IBM Toolbox para Java

Cada copia o parte de estos programas de ejemplo asiacute como todo trabajo derivado debe incluir un avisode copyright como el siguiente

copy (nombre de su empresa) (antildeo) Partes de este coacutedigo derivan de programas de ejemplo de IBM CorpSample Programs

copy Copyright IBM Corp _escriba el antildeo o antildeos_

Si estaacute viendo esta informacioacuten en copia software es posible que las fotografiacuteas y las ilustraciones encolor no aparezcan

Informacioacuten sobre interfaces de programacioacutenEsta publicacioacuten de proporciona documentacioacuten sobre las interfaces de programacioacuten previstas quepermiten al cliente escribir programas para obtener los servicios de IBM i

Marcas registradasIBM el logotipo de IBM e ibmcom son marcas registradas o marcas comerciales registradas deInternational Business Machines Corp registradas en muchas jurisdicciones de todo el mundo Otrosnombres de servicios y productos podriacutean ser marcas registradas de IBM u otras compantildeiacuteas Haydisponible una lista actual de marcas registradas de IBM en la web ldquoInformacioacuten de marca registrada ycopyrightrdquo en wwwibmcomlegalcopytradeshtml

Adobe el logotipo de Adobe PostScript y el logotipo de PostScript son marcas registradas de AdobeSystems Incorporated en los Estados Unidos yo en otros paiacuteses

IT Infrastructure Library es una marca registrada de Central Computer and Telecommunications Agencyque ahora forma parte de Office of Government Commerce

Intel el logotipo de Intel Intel Inside el logotipo de Intel Inside Intel Centrino el logotipo de IntelCentrino Celeron Intel Xeon Intel SpeedStep Itanium y Pentium son marcas registradas de IntelCorporation o de sus filiales en Estados Unidos yo en otros paiacuteses

Linux es una marca registrada de Linus Torvalds en Estados Unidos yo en otros paiacuteses

Microsoft Windows Windows NT y el logotipo de Windows con marcas registradas de MicrosoftCorporation en Estados Unidos yo en otros paiacuteses

ITIL es una marca registrada una marca registrada comunitaria de la OGC britaacutenica (Office ofGovernment Commerce) y estaacute registrada en la Oficina de Patentes y Marcas de Estados Unidos

UNIX es una marca registrada de The Open Group en Estados Unidos y en otros paiacuteses

Cell Broadband Engine es una marca registrada de Sony Computer en Estados Unidos yo en otrospaiacuteses y se utiliza bajo licencia

Java y todas las marcas y logotipos basados en Java son marcas registradas de Oracle Inc en EstadosUnidos yo en otros paiacuteses

Otros nombres de servicios y productos podriacutean ser marcas registradas de IBM u otras compantildeiacuteas

Teacuterminos y condicionesLos permisos para utilizar estas publicaciones estaacuten sujetos a los siguientes teacuterminos y condiciones

Avisos 595

Uso personal puede reproducir estas publicaciones para uso personal (no comercial) siempre y cuandoincluya una copia de todos los avisos de derechos de autor No puede distribuir ni visualizar estaspublicaciones ni ninguna de sus partes como tampoco elaborar trabajos que se deriven de ellas sin elconsentimiento expliacutecito de IBM

Uso comercial puede reproducir distribuir y visualizar estas publicaciones uacutenicamente dentro de suempresa siempre y cuando incluya una copia de todos los avisos de derechos de autor No puedeelaborar trabajos que se deriven de estas publicaciones ni tampoco reproducir distribuir ni visualizarestas publicaciones ni ninguna de sus partes fuera de su empresa sin el consentimiento expliacutecito de IBM

Aparte de la autorizacioacuten que se concede expliacutecitamente en este permiso no se otorga ninguacuten otropermiso licencia ni derecho ya sea expliacutecito o impliacutecito sobre las publicaciones la informacioacuten losdatos el software o cualquier otra propiedad intelectual contenida en ellas

IBM se reserva el derecho de retirar los permisos aquiacute concedidos siempre que seguacuten el parecer delfabricante se utilicen las publicaciones en detrimento de sus intereses o cuando tambieacuten seguacuten el parecerdel fabricante no se sigan debidamente las instrucciones anteriores

No puede bajar exportar ni reexportar esta informacioacuten si no lo hace en plena conformidad con lalegislacioacuten y normativa vigente incluidas todas las leyes y normas de exportacioacuten de Estados Unidos

IBM NO PROPORCIONA NINGUNA GARANTIacuteA SOBRE EL CONTENIDO DE ESTASPUBLICACIONES LAS PUBLICACIONES SE PROPORCIONAN TAL CUAL SIN GARANTIacuteA DENINGUNA CLASE YA SEA EXPLIacuteCITA O IMPLIacuteCITA INCLUIDAS PERO SIN LIMITARSE A ELLASLAS GARANTIacuteAS IMPLIacuteCITAS DE COMERCIALIZACIOacuteN NO VULNERACIOacuteN E IDONEIDAD PARAUN FIN DETERMINADO

596 IBM Toolbox para Java IBM Toolbox para Java

Nuacutemero de Programa 5770-SS1

Impreso en Espantildea

  • Contenido
  • IBM Toolbox para Java
    • Novedades de IBM i 72
    • Archivo PDF para IBM Toolbox para Java
    • Instalacioacuten y gestioacuten de IBM Toolbox para Java
      • Gestioacuten de la instalacioacuten de IBM Toolbox para Java
      • Instalacioacuten de IBM Toolbox para Java
        • Requisitos de IBM i para IBM Toolbox para Java
          • Opciones de IBM i necesarias
          • Coacutemo determinar si IBM Toolbox para Java estaacute instalado en el sistema
          • Comprobar el perfil QUSER
          • Cambiar el perfil de usuario QUSER
          • Dependencias de otros programas bajo licencia
          • Compatibilidad con niveles distintos de IBM i
          • Optimizaciones nativas al llevar a cabo la ejecucioacuten en la JVM de IBM i
            • Requisitos de estacioacuten de trabajo para IBM Toolbox para Java
              • Requisitos de estacioacuten de trabajo para ejecutar aplicaciones de IBM Toolbox para Java
              • Requisitos de estacioacuten de trabajo para ejecutar applets de IBM Toolbox para Java
                • Instalacioacuten de IBM Toolbox para Java en el sistema
                • Instalacioacuten de IBM Toolbox para Java en la estacioacuten de trabajo
                  • Archivos JAR
                      • Propiedades del sistema
                        • JTOpenLite
                        • Clases de IBM Toolbox para Java
                          • Clases de acceso
                            • Puntos de acceso de servidor
                            • Clase AS400
                              • Gestioacuten de identificadores de usuario predeterminado
                              • Utilizacioacuten de una memoria cacheacute de contrasentildeas
                              • Solicitud de identificadores de usuario y contrasentildeas
                              • Resumen de solicitudes ID de usuario predeterminado y colocacioacuten de contrasentildeas en memoria cacheacute
                                • Clase SecureAS400
                                • Clase AS400JPing
                                • Clase BidiTransform
                                • Clase BidiConversionProperties
                                • Clase CallStackEntry
                                • Clases ClusteredHashTable
                                • Clase CommandCall
                                • Agrupacioacuten de conexiones
                                • Aacuterea de datos
                                • Conversioacuten y descripcioacuten de datos
                                  • Clases de conversioacuten para datos numeacutericos
                                  • Conversioacuten de texto
                                  • Clases de conversioacuten para tipos compuestos
                                  • Clases de descripcioacuten de campo
                                  • Clase RecordFormat
                                  • Clase Record
                                  • Recuperacioacuten del contenido de un campo
                                  • Establecimiento del contenido de un campo
                                  • Clase LineDataRecordWriter
                                    • Colas de datos
                                      • Colas de datos secuenciales
                                      • Colas de datos por clave
                                        • Certificados digitales
                                        • Clase EnvironmentVariable
                                        • Excepciones
                                        • Clase FileAttributes
                                        • Clase FTP
                                        • Clases del sistema de archivos integrado
                                          • Clase IFSFile
                                          • Clase IFSJavaFile
                                          • IFSFileInputStream
                                          • Clase IFSTextFileInputStream
                                          • IFSFileReader
                                          • Clase IFSFileOutputStream
                                          • Clase IFSTextFileOutputStream
                                          • IFSFileWriter
                                          • IFSRandomAccessFile
                                          • Clase IFSKey
                                          • Modalidad de compartimiento de archivo
                                          • IFSSystemView
                                            • Clase ISeriesNetServer
                                            • Clase JavaApplicationCall
                                            • Clases JDBC
                                              • Clase AS400JDBCBlob
                                              • Interfaz CallableStatement
                                              • Clase AS400JDBCClob
                                              • Clase AS400JDBCConnection
                                              • AS400JDBCConnectionPool
                                              • Clase AS400JDBCManagedConnectionPoolDataSource
                                                • Ejemplos coacutemo se utiliza la clase AS400JDBCManagedConnectionPoolDataSource
                                                  • Interfaz DatabaseMetaData
                                                  • Clase AS400JDBCDataSource
                                                  • Registro del controlador JDBC
                                                  • Clase AS400JDBCParameterMetaData
                                                  • Interfaz PreparedStatement
                                                  • Clase ResultSet
                                                  • Clase AS400JDBCRowSet
                                                  • Clase AS400JDBCSavepoint
                                                  • Ejecucioacuten de sentencias SQL con objetos Statement
                                                  • Gestioacuten de transacciones distribuidas XA de JDBC
                                                    • Clases de trabajos
                                                      • Clase Job
                                                      • Clase JobList
                                                      • Clase JobLog
                                                        • Clases de mensajes
                                                        • Clase NetServer
                                                        • Clase ObjectReferences
                                                        • Clases de permisos
                                                          • Clase DLOPermission
                                                          • QSYSPermission
                                                          • RootPermission
                                                            • Clases de impresioacuten
                                                              • Listar objetos de impresioacuten
                                                              • Trabajar con objetos de impresioacuten
                                                              • Recuperar atributos de PrintObject
                                                              • Atributos de recursos AFP
                                                              • Atributos de la cola de salida
                                                              • Atributos de impresora
                                                              • Atributos de archivo de impresora
                                                              • Atributos de archivo en spool
                                                              • Atributos de trabajo de transcriptor
                                                              • Atributos de objeto de impresioacuten
                                                              • Copiar archivos en spool
                                                              • Crear archivos en spool nuevos
                                                              • Generar una corriente de datos SCS
                                                              • Leer archivos en spool y recursos AFP
                                                              • Leer archivos en spool mediante PrintObjectPageInputStream y PrintObjectTransformedInputStream
                                                                • Clase ProductLicense
                                                                • Clase ProgramCall
                                                                • Clase QSYSObjectPathName
                                                                • Acceso a nivel de registro
                                                                  • AS400File
                                                                  • KeyedFile
                                                                  • SequentialFile
                                                                  • AS400FileRecordDescription
                                                                  • Crear y suprimir archivos y miembros
                                                                  • Leer y escribir registros
                                                                  • Bloquear archivos
                                                                  • Utilizar bloques de registros
                                                                  • Fijar la posicioacuten del cursor
                                                                  • Control de compromiso
                                                                    • Clase SaveFile
                                                                    • Clase ServiceProgramCall
                                                                    • Clase Subsystem
                                                                    • Clases SystemStatus
                                                                      • Clase SystemPool
                                                                        • Valores del sistema
                                                                        • Clase Trace
                                                                        • Clases de usuarios y grupos
                                                                        • Clase UserSpace
                                                                          • Clases commtrace
                                                                            • Modelo de commtrace
                                                                            • Clases Format y FormatProperties
                                                                              • Ejecutar Format como un programa autoacutenomo
                                                                                • Clase Prolog
                                                                                • Clase Frame
                                                                                • Clase LanHeader
                                                                                • Clase IPPacket
                                                                                • Clase Header
                                                                                • Ejemplo coacutemo se utilizan las clases commtrace
                                                                                  • Clases HTML
                                                                                    • Clase BidiOrdering
                                                                                    • Clase HTMLAlign
                                                                                    • Clase HTMLDocument
                                                                                      • Coacutemo se utiliza HTMLDocument para crear datos HTML
                                                                                      • Coacutemo se utiliza HTMLDocument para crear datos FO XSL
                                                                                        • Clases habilitadas para FO XSL
                                                                                          • Ejemplos coacutemo se utiliza HTMLDocument
                                                                                            • Clases de formularios HTML
                                                                                              • Clases FormInput
                                                                                                • Clase ButtonFormInput
                                                                                                • Clase FileFormInput
                                                                                                • Clase HiddenFormInput
                                                                                                • Clase ImageFormInput
                                                                                                • Clase ResetFormInput
                                                                                                • Clase SubmitFormInput
                                                                                                • Clase TextFormInput
                                                                                                • Clase PasswordFormInput
                                                                                                • Clase RadioFormInput
                                                                                                • Clase CheckboxFormInput
                                                                                                  • Clase LayoutFormPanel
                                                                                                    • GridLayoutFormPanel
                                                                                                    • Clase LineLayoutFormPanel
                                                                                                      • Clase TextAreaFormElement
                                                                                                      • Clase LabelFormElement
                                                                                                      • Clase SelectFormElement
                                                                                                      • Clase SelectOption
                                                                                                      • Clase RadioFormInputGroup
                                                                                                        • Clase HTMLHead
                                                                                                        • Clase HTMLHeading
                                                                                                        • Clase HTMLHyperlink
                                                                                                        • Clase HTMLImage
                                                                                                        • Clases HTMLList
                                                                                                        • Clase HTMLMeta
                                                                                                        • Clase HTMLParameter
                                                                                                        • Clase HTMLServlet
                                                                                                        • Clases de tablas HTML
                                                                                                          • Clase HTMLTableCell
                                                                                                          • Clase HTMLTableRow
                                                                                                          • Clase HTMLTableHeader
                                                                                                          • Clase HTMLTableCaption
                                                                                                            • Clase HTMLText
                                                                                                            • Clases HTMLTree
                                                                                                              • Clase HTMLTreeElement
                                                                                                              • Clase FileTreeElement
                                                                                                              • Clase FileListElement
                                                                                                              • Clase FileListRenderer
                                                                                                                  • Clases ReportWriter
                                                                                                                    • Clases Context
                                                                                                                    • Clase JSPReportProcessor
                                                                                                                    • Clase XSLReportProcessor
                                                                                                                      • Clases de seguridad
                                                                                                                        • SSL (capa de sockets segura)
                                                                                                                          • Utilizacioacuten de SSL para cifrar datos entre IBM Toolbox para Java y los servidores IBM i
                                                                                                                            • Configuracioacuten de IBM i para utilizar SSL
                                                                                                                                • Servicios de autenticacioacuten
                                                                                                                                  • Clases de servlets
                                                                                                                                    • Clases de autenticacioacuten
                                                                                                                                    • Clase RowData
                                                                                                                                      • Clase ListRowData
                                                                                                                                      • Clase RecordListRowData
                                                                                                                                      • Clase ResourceListRowData
                                                                                                                                      • Clase QLResultSetRowData
                                                                                                                                        • Clases RowMetaData
                                                                                                                                          • Clase ListMetaData
                                                                                                                                          • Clase RecordFormatMetaData
                                                                                                                                          • Clase SQLResultSetMetaData
                                                                                                                                            • Clases conversoras
                                                                                                                                              • Clase StringConverter
                                                                                                                                              • Clase HTMLFormConverter
                                                                                                                                              • Clase HTMLTableConverter
                                                                                                                                                  • Clases de utilidades
                                                                                                                                                    • Clases de instalacioacuten y actualizacioacuten en cliente
                                                                                                                                                    • AS400ToolboxJarMaker
                                                                                                                                                      • Componentes soportados en IBM Toolbox para Java
                                                                                                                                                      • Valores de CCSID y codificacioacuten soportados por IBM Toolbox para Java
                                                                                                                                                        • Clase CommandHelpRetriever
                                                                                                                                                        • Clase CommandPrompter
                                                                                                                                                        • RunJavaApplication
                                                                                                                                                        • JPing
                                                                                                                                                            • Beans de IBM Toolbox para Java
                                                                                                                                                            • JDBC
                                                                                                                                                              • Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java para IBM i 72
                                                                                                                                                              • Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java para IBM i 71
                                                                                                                                                              • Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java para IBM i 61
                                                                                                                                                              • Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java para IBM i 54
                                                                                                                                                              • Propiedades JDBC de IBM Toolbox para Java
                                                                                                                                                                • Propiedad LibraryList de JDBC
                                                                                                                                                                  • Tipos SQL JDBC
                                                                                                                                                                    • Soporte de proxy
                                                                                                                                                                    • Capa de Sockets Segura y Extensioacuten de sockets seguros Java
                                                                                                                                                                    • Componentes XML (Extensible Markup Language)
                                                                                                                                                                      • PCML (Program Call Markup Language)
                                                                                                                                                                        • Requisitos para utilizar PCML
                                                                                                                                                                        • Construir llamadas a programa IBM i con PCML
                                                                                                                                                                        • Sintaxis de PCML
                                                                                                                                                                          • Coacutedigo PCML program
                                                                                                                                                                          • Coacutedigo PCML struct
                                                                                                                                                                          • Coacutedigo PCML data
                                                                                                                                                                            • Valores de longitud y precisioacuten
                                                                                                                                                                              • Record Format Markup Language
                                                                                                                                                                                • Requisitos para utilizar RFML
                                                                                                                                                                                • Ejemplo coacutemo se utiliza RFML en comparacioacuten con el uso de las clases Record de IBM Toolbox para Java
                                                                                                                                                                                • Clase RecordFormatDocument
                                                                                                                                                                                • Documentos RFML y sintaxis RFML
                                                                                                                                                                                  • Definicioacuten de tipo de documento RFML (DTD)
                                                                                                                                                                                  • Coacutedigo RFML data
                                                                                                                                                                                  • Coacutedigo RFML rfml
                                                                                                                                                                                  • Coacutedigo RFML recordformat
                                                                                                                                                                                  • Coacutedigo RFML struct
                                                                                                                                                                                      • Analizador XML y procesador XSLT
                                                                                                                                                                                      • XPCML (Extensible Program Call Markup Language)
                                                                                                                                                                                        • Ventajas de XPCML respecto de PCML
                                                                                                                                                                                        • Requisitos de uso de XPCML
                                                                                                                                                                                        • Esquema y sintaxis XPCML
                                                                                                                                                                                          • Comparacioacuten del fuente XPCML con el fuente PCML
                                                                                                                                                                                          • Archivo xpcmlxsd de esquema
                                                                                                                                                                                          • Sintaxis de XPCML
                                                                                                                                                                                          • Atributos de coacutedigos XPCML
                                                                                                                                                                                            • Utilizacioacuten de XPCML
                                                                                                                                                                                              • Convertir fuente PCML existente en XPCML
                                                                                                                                                                                              • Utilizar XPCML para llamar a un programa del servidor
                                                                                                                                                                                              • Obtener los resultados de una llamada a programa en formato de XPCML
                                                                                                                                                                                              • Pasar valores de paraacutemetros como XPCML
                                                                                                                                                                                              • Coacutemo se utiliza fuente XPCML condensado
                                                                                                                                                                                              • Identificar errores de anaacutelisis en XPCML
                                                                                                                                                                                                • Preguntas habituales (FAQ)
                                                                                                                                                                                                • Consejos para la programacioacuten
                                                                                                                                                                                                  • Coacutemo concluir el programa Java
                                                                                                                                                                                                  • Nombres de viacutea de acceso del sistema de archivos integrado para objetos de servidor
                                                                                                                                                                                                  • Gestionar conexiones en programas Java
                                                                                                                                                                                                  • Maacutequina virtual Java de IBM i
                                                                                                                                                                                                    • Comparacioacuten de la maacutequina virtual Java de IBM i y las clases de IBM Toolbox para Java
                                                                                                                                                                                                    • Ejecutar las clases de IBM Toolbox para Java en la maacutequina virtual Java de IBM i
                                                                                                                                                                                                    • Establecer el nombre del sistema el ID de usuario y la contrasentildea con un objeto AS400 en la maacutequina virtual Java de IBM i
                                                                                                                                                                                                      • Agrupacioacuten de almacenamiento auxiliar (ASP) independiente
                                                                                                                                                                                                      • Excepciones
                                                                                                                                                                                                      • Clase Trace
                                                                                                                                                                                                      • Optimizacioacuten de IBM i
                                                                                                                                                                                                      • Mejoras en el rendimiento
                                                                                                                                                                                                      • Clases de instalacioacuten y actualizacioacuten en cliente
                                                                                                                                                                                                      • AS400ToolboxJarMaker
                                                                                                                                                                                                      • Soporte de idiomas nacionales para Java
                                                                                                                                                                                                      • Servicio y soporte para IBM Toolbox para Java
                                                                                                                                                                                                        • Ejemplos de coacutedigo
                                                                                                                                                                                                          • Ejemplos clases de acceso
                                                                                                                                                                                                          • Ejemplos JavaBeans
                                                                                                                                                                                                          • Ejemplos clases commtrace
                                                                                                                                                                                                          • Ejemplos de las clases HTML
                                                                                                                                                                                                          • Ejemplos PCML (Program Call Markup Language)
                                                                                                                                                                                                          • Ejemplos clases ReportWriter
                                                                                                                                                                                                          • Ejemplos RFML
                                                                                                                                                                                                          • Ejemplo coacutemo se utiliza una credencial de siacutembolo de perfil para intercambiar la identidad de la hebra de IBM i
                                                                                                                                                                                                          • Ejemplos de las clases de servlets
                                                                                                                                                                                                          • Ejemplos simples de programacioacuten
                                                                                                                                                                                                          • Ejemplos consejos para la programacioacuten
                                                                                                                                                                                                          • Ejemplos clases de utilidades
                                                                                                                                                                                                          • Ejemplos XPCML
                                                                                                                                                                                                            • Informacioacuten relacionada para IBM Toolbox para Java
                                                                                                                                                                                                              • Avisos
                                                                                                                                                                                                                • Informacioacuten sobre interfaces de programacioacuten
                                                                                                                                                                                                                • Marcas registradas
                                                                                                                                                                                                                • Teacuterminos y condiciones
Page 2: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188

IBM iVersioacuten 72

ProgramacioacutenIBM Toolbox para Java

NotaAntes de utilizar esta informacioacuten y el producto al que da soporte lea la informacioacuten de la seccioacuten ldquoAvisosrdquo en la paacutegina593

Este documento puede contener referencias al coacutedigo interno bajo licencia (LIC) El Coacutedigo interno bajo licencia esCoacutedigo maacutequina que se proporciona bajo los teacuterminos del acuerdo de licencia IBM License Agreement for MachineCode

copy Copyright IBM Corporation 1999 2014

Contenido

IBM Toolbox para Java 1Novedades de IBM i 72 1Archivo PDF para IBM Toolbox para Java 2Instalacioacuten y gestioacuten de IBM Toolbox para Java 2

Gestioacuten de la instalacioacuten de IBM Toolbox paraJava 2Instalacioacuten de IBM Toolbox para Java 3

Requisitos de IBM i para IBM Toolbox paraJava 3

Opciones de IBM i necesarias 3Coacutemo determinar si IBM Toolbox para Javaestaacute instalado en el sistema 4Comprobar el perfil QUSER 4Cambiar el perfil de usuario QUSER 4Dependencias de otros programas bajolicencia 4Compatibilidad con niveles distintos de IBMi 5Optimizaciones nativas al llevar a cabo laejecucioacuten en la JVM de IBM i 6

Requisitos de estacioacuten de trabajo para IBMToolbox para Java 6

Requisitos de estacioacuten de trabajo paraejecutar aplicaciones de IBM Toolbox paraJava 6Requisitos de estacioacuten de trabajo paraejecutar applets de IBM Toolbox para Java 6

Instalacioacuten de IBM Toolbox para Java en elsistema 7Instalacioacuten de IBM Toolbox para Java en laestacioacuten de trabajo 7

Archivos JAR 8Propiedades del sistema 11

JTOpenLite 20Clases de IBM Toolbox para Java 20

Clases de acceso 20Puntos de acceso de servidor 20Clase AS400 21

Gestioacuten de identificadores de usuariopredeterminado 22Utilizacioacuten de una memoria cacheacute decontrasentildeas 23Solicitud de identificadores de usuario ycontrasentildeas 23Resumen de solicitudes ID de usuariopredeterminado y colocacioacuten decontrasentildeas en memoria cacheacute 24

Clase SecureAS400 26Clase AS400JPing 27Clase BidiTransform 27Clase BidiConversionProperties 28Clase CallStackEntry 28Clases ClusteredHashTable 28Clase CommandCall 30Agrupacioacuten de conexiones 31Aacuterea de datos 32

Conversioacuten y descripcioacuten de datos 34Clases de conversioacuten para datos numeacutericos 36Conversioacuten de texto 37Clases de conversioacuten para tiposcompuestos 38Clases de descripcioacuten de campo 39Clase RecordFormat 40Clase Record 40Recuperacioacuten del contenido de un campo 41Establecimiento del contenido de un campo 42Clase LineDataRecordWriter 42

Colas de datos 44Colas de datos secuenciales 45Colas de datos por clave 46

Certificados digitales 46Clase EnvironmentVariable 48Excepciones 49Clase FileAttributes 50Clase FTP 50Clases del sistema de archivos integrado 51

Clase IFSFile 52Clase IFSJavaFile 53IFSFileInputStream 55Clase IFSTextFileInputStream 55IFSFileReader 56Clase IFSFileOutputStream 57Clase IFSTextFileOutputStream 57IFSFileWriter 58IFSRandomAccessFile 58Clase IFSKey 59Modalidad de compartimiento de archivo 60IFSSystemView 61

Clase ISeriesNetServer 61Clase JavaApplicationCall 61Clases JDBC 62

Clase AS400JDBCBlob 63Interfaz CallableStatement 65Clase AS400JDBCClob 65Clase AS400JDBCConnection 67AS400JDBCConnectionPool 68ClaseAS400JDBCManagedConnectionPoolDataSource69Interfaz DatabaseMetaData 78Clase AS400JDBCDataSource 79Registro del controlador JDBC 80Clase AS400JDBCParameterMetaData 82Interfaz PreparedStatement 83Clase ResultSet 84Clase AS400JDBCRowSet 86Clase AS400JDBCSavepoint 87Ejecucioacuten de sentencias SQL con objetosStatement 89Gestioacuten de transacciones distribuidas XAde JDBC 91

Clases de trabajos 92Clase Job 93

copy Copyright IBM Corp 1999 2014 iii

||

Clase JobList 93Clase JobLog 94

Clases de mensajes 95Clase NetServer 97Clase ObjectReferences 98Clases de permisos 99

Clase DLOPermission 100QSYSPermission 101RootPermission 103

Clases de impresioacuten 104Listar objetos de impresioacuten 105Trabajar con objetos de impresioacuten 106Recuperar atributos de PrintObject 107Atributos de recursos AFP 108Atributos de la cola de salida 108Atributos de impresora 109Atributos de archivo de impresora 110Atributos de archivo en spool 114Atributos de trabajo de transcriptor 117Atributos de objeto de impresioacuten 117Copiar archivos en spool 155Crear archivos en spool nuevos 157Generar una corriente de datos SCS 158Leer archivos en spool y recursos AFP 159Leer archivos en spool mediantePrintObjectPageInputStream yPrintObjectTransformedInputStream 160

Clase ProductLicense 160Clase ProgramCall 161Clase QSYSObjectPathName 163Acceso a nivel de registro 164

AS400File 166KeyedFile 166SequentialFile 168AS400FileRecordDescription 169Crear y suprimir archivos y miembros 171Leer y escribir registros 174Bloquear archivos 175Utilizar bloques de registros 176Fijar la posicioacuten del cursor 178Control de compromiso 179

Clase SaveFile 180Clase ServiceProgramCall 181Clase Subsystem 181Clases SystemStatus 181

Clase SystemPool 183Valores del sistema 183Clase Trace 185Clases de usuarios y grupos 188Clase UserSpace 189

Clases commtrace 190Modelo de commtrace 190Clases Format y FormatProperties 191

Ejecutar Format como un programaautoacutenomo 193

Clase Prolog 194Clase Frame 194Clase LanHeader 195Clase IPPacket 195Clase Header 196

Ejemplo coacutemo se utilizan las clasescommtrace 197

Clases HTML 198Clase BidiOrdering 199Clase HTMLAlign 200Clase HTMLDocument 201

Coacutemo se utiliza HTMLDocument paracrear datos HTML 201Coacutemo se utiliza HTMLDocument paracrear datos FO XSL 202Ejemplos coacutemo se utilizaHTMLDocument 205

Clases de formularios HTML 210Clases FormInput 211Clase LayoutFormPanel 215Clase TextAreaFormElement 216Clase LabelFormElement 217Clase SelectFormElement 217Clase SelectOption 218Clase RadioFormInputGroup 218

Clase HTMLHead 219Clase HTMLHeading 220Clase HTMLHyperlink 220Clase HTMLImage 221Clases HTMLList 221Clase HTMLMeta 224Clase HTMLParameter 225Clase HTMLServlet 225Clases de tablas HTML 226

Clase HTMLTableCell 226Clase HTMLTableRow 227Clase HTMLTableHeader 227Clase HTMLTableCaption 228

Clase HTMLText 228Clases HTMLTree 228

Clase HTMLTreeElement 229Clase FileTreeElement 230Clase FileListElement 231Clase FileListRenderer 231

Clases ReportWriter 232Clases Context 233Clase JSPReportProcessor 233Clase XSLReportProcessor 233

Clases de seguridad 234SSL (capa de sockets segura) 234

Utilizacioacuten de SSL para cifrar datos entreIBM Toolbox para Java y los servidoresIBM i 235

Servicios de autenticacioacuten 236Clases de servlets 238

Clases de autenticacioacuten 239Clase RowData 240

Clase ListRowData 240Clase RecordListRowData 241Clase ResourceListRowData 241Clase QLResultSetRowData 242

Clases RowMetaData 242Clase ListMetaData 242Clase RecordFormatMetaData 243Clase SQLResultSetMetaData 243

Clases conversoras 244

iv IBM Toolbox para Java IBM Toolbox para Java

Clase StringConverter 244Clase HTMLFormConverter 244Clase HTMLTableConverter 244

Clases de utilidades 245Clases de instalacioacuten y actualizacioacuten encliente 245AS400ToolboxJarMaker 246

Componentes soportados en IBM Toolboxpara Java 247Valores de CCSID y codificacioacutensoportados por IBM Toolbox para Java 249

Clase CommandHelpRetriever 253Clase CommandPrompter 254RunJavaApplication 254JPing 255

Beans de IBM Toolbox para Java 256JDBC 256

Mejoras efectuadas en el soporte JDBC de IBMToolbox para Java para IBM i 72 256Mejoras efectuadas en el soporte JDBC de IBMToolbox para Java para IBM i 71 257Mejoras efectuadas en el soporte JDBC de IBMToolbox para Java para IBM i 61 261Mejoras efectuadas en el soporte JDBC de IBMToolbox para Java para IBM i 54 265Propiedades JDBC de IBM Toolbox para Java 266

Propiedad LibraryList de JDBC 285Tipos SQL JDBC 287

Soporte de proxy 287Capa de Sockets Segura y Extensioacuten de socketsseguros Java 293Componentes XML (Extensible Markup Language) 293

PCML (Program Call Markup Language) 293Requisitos para utilizar PCML 294Construir llamadas a programa IBM i conPCML 294Sintaxis de PCML 299

Coacutedigo PCML program 299Coacutedigo PCML struct 301Coacutedigo PCML data 307

Record Format Markup Language 320Requisitos para utilizar RFML 320Ejemplo coacutemo se utiliza RFML encomparacioacuten con el uso de las clases Recordde IBM Toolbox para Java 320Clase RecordFormatDocument 322Documentos RFML y sintaxis RFML 323

Definicioacuten de tipo de documento RFML(DTD) 323Coacutedigo RFML data 325Coacutedigo RFML rfml 329Coacutedigo RFML recordformat 329Coacutedigo RFML struct 330

Analizador XML y procesador XSLT 330XPCML (Extensible Program Call MarkupLanguage) 331

Ventajas de XPCML respecto de PCML 331Requisitos de uso de XPCML 332Esquema y sintaxis XPCML 333

Comparacioacuten del fuente XPCML con elfuente PCML 333

Archivo xpcmlxsd de esquema 335Sintaxis de XPCML 350Atributos de coacutedigos XPCML 352

Utilizacioacuten de XPCML 353Convertir fuente PCML existente enXPCML 353Utilizar XPCML para llamar a unprograma del servidor 354Obtener los resultados de una llamada aprograma en formato de XPCML 355Pasar valores de paraacutemetros comoXPCML 356Coacutemo se utiliza fuente XPCMLcondensado 356Identificar errores de anaacutelisis en XPCML 357

Preguntas habituales (FAQ) 358Consejos para la programacioacuten 358

Coacutemo concluir el programa Java 358Nombres de viacutea de acceso del sistema dearchivos integrado para objetos de servidor 359Gestionar conexiones en programas Java 361Maacutequina virtual Java de IBM i 369

Comparacioacuten de la maacutequina virtual Java deIBM i y las clases de IBM Toolbox para Java 369Ejecutar las clases de IBM Toolbox para Javaen la maacutequina virtual Java de IBM i 370Establecer el nombre del sistema el ID deusuario y la contrasentildea con un objeto AS400en la maacutequina virtual Java de IBM i 371

Agrupacioacuten de almacenamiento auxiliar (ASP)independiente 373Excepciones 374Clase Trace 375Optimizacioacuten de IBM i 377Mejoras en el rendimiento 379Clases de instalacioacuten y actualizacioacuten en cliente 381AS400ToolboxJarMaker 381Soporte de idiomas nacionales para Java 383Servicio y soporte para IBM Toolbox para Java 383

Ejemplos de coacutedigo 384Ejemplos clases de acceso 384Ejemplos JavaBeans 473Ejemplos clases commtrace 480Ejemplos de las clases HTML 480Ejemplos PCML (Program Call MarkupLanguage) 504Ejemplos clases ReportWriter 513Ejemplos RFML 530Ejemplo coacutemo se utiliza una credencial desiacutembolo de perfil para intercambiar la identidadde la hebra de IBM i 531Ejemplos de las clases de servlets 532Ejemplos simples de programacioacuten 560Ejemplos consejos para la programacioacuten 574Ejemplos clases de utilidades 575Ejemplos XPCML 577

Informacioacuten relacionada para IBM Toolbox paraJava 588

Avisos 593Informacioacuten sobre interfaces de programacioacuten 595

Contenido v

|||

Marcas registradas 595 Teacuterminos y condiciones 595

vi IBM Toolbox para Java IBM Toolbox para Java

IBM Toolbox para Java

IBMreg Toolbox para Javatrade es un conjunto de clases Java que permiten utilizar programas Java paraacceder a datos del sistema Con estas clases puede escribir aplicaciones de clienteservidor applets yservlets que funcionen con datos existentes en el sistema Tambieacuten puede ejecutar las aplicaciones Javaque utilizan las clases de IBM Toolbox para Java en la maacutequina virtual Java (JVM) de IBM i

IBM Toolbox para Java utiliza los servidores de host de IBM i como puntos de acceso al sistema Dadoque IBM Toolbox para Java utiliza funciones de comunicacioacuten incorporadas a Java no es necesarioutilizar IBM i Access para Windows para utilizar IBM Toolbox para Java Cada servidor se ejecuta en untrabajo aparte en el servidor y cada trabajo servidor enviacutea y recibe corrientes de datos a traveacutes de unaconexioacuten por socket

Nota al utilizar los ejemplos de coacutedigo acepta los teacuterminos del ldquoInformacioacuten sobre licencia de coacutedigo yexencioacuten de responsabilidadrdquo en la paacutegina 590

Novedades de IBM i 72Conozca la informacioacuten nueva o con modificaciones importantes de la coleccioacuten de temas de IBMToolbox para Java

Se han realizado los siguientes cambios en IBM Toolbox para Java en IBM i 72v Las clases siguientes se han antildeadido desde el release anterior de IBM i Todas las clases listadas aquiacute

estaacuten en el paquete comibmas400access a menos que se indique lo contrariondash comibmas400accessAS400JDBCTimestamp

v Se han realizado mejoras significativas en las clases de JDBC que estaacuten en el paquetecomibmas400access

v Se ha antildeadido informacioacuten sobre ldquoJTOpenLiterdquo en la paacutegina 20 ubicada en el paquetecomibmjtopenlite JTOpenLite permite escribir programas Java que permiten a diversos dispositivosmoacuteviles acceder directamente a datos y recursos de IBM i

Obtener IBM Toolbox para Java

IBM Toolbox para Java estaacute disponible en los formatos siguientesv Los Archivos JAR de IBM Toolbox para Java se instalan en el sistema de archivos integrado de IBM i

bajo el directorio QIBMProdDataOS400jt400v IBM Toolbox para Java tambieacuten estaacute disponible en una versioacuten de fuente abierto Puede descargar el

coacutedigo y obtener maacutes informacioacuten en el sitio Web de JTOpen

Coacutemo ver las novedades y los cambios realizados

Para ayudarle a ver doacutende se han realizado cambios teacutecnicos el Information Center utilizav La imagen para marcar doacutende empieza la informacioacuten nueva o modificadav La imagen para marcar doacutende finaliza la informacioacuten nueva o modificada

En los archivos PDF aparecen barras de revisioacuten (|) en el margen izquierdo de la informacioacuten nueva omodificada

Si desea obtener otra informacioacuten sobre las novedades o modificaciones de este release consulte eldocumento Memoraacutendum para los usuarios

copy Copyright IBM Corp 1999 2014 1

Archivo PDF para IBM Toolbox para JavaPuede visualizar e imprimir un archivo PDF de esta informacioacuten

Para visualizar o descargar la versioacuten en PDF de este documento seleccione IBM Toolbox para Java

Puede visualizar o descargar estos archivos PDF de temas relacionadosv IBM Developer Kit para Javav Depurador de IBM i

Otra informacioacuten

Tambieacuten puede descargar un paquete comprimido en zip del tema IBM Toolbox para Java que incluye

los Javadocs del sitio Web de IBM Toolbox para Java y JTOpen

Nota la informacioacuten del paquete comprimido tiene enlaces con documentos que no se incluyen en elpaquete comprimido por lo que esos enlaces no funcionaraacuten

Guardar archivos PDF

Para guardar un PDF en la estacioacuten de trabajo con el fin de verlo o imprimirlo1 Pulse el enlace PDF con el botoacuten derecho del ratoacuten en el navegador2 Pulse la opcioacuten que guarda el PDF localmente3 Navegue al directorio en el que desea guardar el archivo PDF4 Pulse Guardar

Descargar Adobe Reader

Necesita tener instalado Adobe Reader en el sistema para poder visualizar o imprimir estos PDF Puededescargar una copia gratuita desde el sitio Web de Adobe

(wwwadobecomproductsacrobatreadstephtml)

Instalacioacuten y gestioacuten de IBM Toolbox para JavaEl uso de IBM Toolbox para Java facilita la tarea de escribir applets servlets y aplicaciones Java clienteque accedan a los recursos datos y programas del sistema

Gestioacuten de la instalacioacuten de IBM Toolbox para JavaSolo es necesario que instale IBM Toolbox para Java en los sistemas cliente que lo utilicen o en unaubicacioacuten de la red en la que los clientes puedan acceder al mismo Los clientes pueden ser PCestaciones de trabajo dedicadas o sistemas IBM i Es importante recordar que puede configurar unservidor IBM i o una particioacuten del servidor como cliente En el segundo caso debe instalar IBM Toolboxpara Java en la particioacuten cliente del servidor

Puede utilizar cualquiera de los meacutetodos siguientes (solos o combinados) para instalar y gestionar IBMToolbox para Javav Gestioacuten individual para instalar y gestionar de forma individual IBM Toolbox para Java en cada

clientev Gestioacuten en red de una sola instalacioacuten utilizando la red para instalar y gestionar una uacutenica instalacioacuten

compartida de IBM Toolbox para Java en un servidor

2 IBM Toolbox para Java IBM Toolbox para Java

En los apartados siguientes se describe brevemente coacutemo afecta al rendimiento y a la facilidad de gestioacutencada uno de los meacutetodos El modo de desarrollo de las aplicaciones Java y gestioacuten de los recursos queelija determinaraacute cuaacutel de los meacutetodos (o cuaacutel de las combinaciones de meacutetodos) utilizaraacute

Gestioacuten individual

Puede elegir gestionar las instalaciones de IBM Toolbox para Java de forma individual en los distintosclientes La principal ventaja de instalar IBM Toolbox para Java en clientes individuales es que con ello sereduce el tiempo que tarda un cliente en iniciar una aplicacioacuten que utiliza las clases de IBM Toolbox paraJava

La principal desventaja es la gestioacuten individual de esas instalaciones Un usuario o una aplicacioacuten creadapor el usuario debe hacer un seguimiento de queacute versioacuten de IBM Toolbox para Java estaacute instalada encada estacioacuten de trabajo y llevar a cabo las tareas de gestioacuten

Gestioacuten en red de una sola instalacioacuten

Tambieacuten puede utilizar la red para instalar y gestionar una uacutenica copia de IBM Toolbox para Java en unservidor al que todos los clientes puedan acceder Este tipo de instalacioacuten en red proporciona lassiguientes ventajasv Todos los clientes utilizan la misma versioacuten de IBM Toolbox para Javav La actualizacioacuten de la uacutenica instalacioacuten de IBM Toolbox para Java beneficia a todos los clientesv Los distintos clientes no tienen que preocuparse de llevar a cabo ninguna tarea de mantenimiento

excepto la de establecer la misma CLASSPATH inicial

Este tipo de instalacioacuten tambieacuten tiene el inconveniente de aumentar el tiempo que tarda un cliente eniniciar una aplicacioacuten de IBM Toolbox para Java Asimismo debe permitir que la CLASSPATH del clienteapunte al servidor Puede utilizar NetServer que estaacute integrado en IBM i u otro meacutetodo que le permitaacceder a los archivos del sistema como IBM i Access para Windows

Instalacioacuten de IBM Toolbox para JavaEl meacutetodo que utilice para instalar IBM Toolbox para Java dependeraacute de coacutemo desee gestionar lainstalacioacuten Utilice estos temas para instalar IBM Toolbox para Java

Requisitos de IBM i para IBM Toolbox para JavaEste tema detalla los requisitos que el entorno debe cumplir para poder utilizar IBM Toolbox para Java

Nota antes de utilizar IBM Toolbox para Java compruebe que se cumplen los requisitos de estacioacuten detrabajo que corresponden a su entorno

Opciones de IBM i necesarias

Para ejecutar IBM Toolbox para Java en un entorno de clienteservidor debe habilitar el perfil de usuarioQUSER iniciar los servidores de host y tener TCPIP en ejecucioacutenv El perfil de usuario QUSER debe estar habilitado para iniciar los servidores de hostv Los servidores de host escuchan y aceptan las peticiones de conexioacuten de los clientes La opcioacuten

Servidores de host IBM i se incluye con la opcioacuten base de IBM i Para obtener maacutes informacioacutenconsulte el tema acerca de la administracioacuten de servidores de host

v El soporte TCPIP que estaacute integrado en IBM i permite conectar el servidor a una red Para obtenermaacutes informacioacuten consulte TCPIP

Coacutemo iniciar las opciones de IBM i necesarias

En una liacutenea de mandatos inicie las opciones de IBM i necesarias siguiendo estos pasos

IBM Toolbox para Java 3

1 Compruebe que el perfil QUSER estaacute habilitado2 Para iniciar los servidores de host IBM i utilice el mandato CL Iniciar servidor de host Escriba

STRHOSTSVR ALL y pulse INTRO3 Para iniciar el servidor de gestioacuten de datos distribuidos (DDM) TCPIP utilice el mandato CL Iniciar

servidor TCPIP Escriba STRTCPSVR SERVER(DDM) y pulse INTRO

Coacutemo determinar si IBM Toolbox para Java estaacute instalado en el sistema

Para ver si IBM Toolbox para Java ya estaacute instalado en el servidor IBM i siga los pasos de este tema1 En System i Navigator seleccione el sistema que desea utilizar e inicie la sesioacuten en eacutel2 En el aacuterbol de funciones (el panel izquierdo) expanda el sistema y a continuacioacuten expanda

Configuracioacuten y servicio3 Expanda Software y a continuacioacuten expanda Productos instalados4 En el panel Detalles (el panel derecho) consulte si se ha instalado la opcioacuten 3 del producto 5770-SS1

Si ve este producto y la combinacioacuten de opciones IBM Toolbox para Java estaacute instalado en el servidorseleccionado

Nota tambieacuten puede averiguar si IBM Toolbox para Java estaacute instalado ejecutando el mandato CL Ira menuacute (GO MENU(LICPGM)) Opcioacuten 11

Si IBM Toolbox para Java no estaacute instalado puede instalar IBM Toolbox para Java instalando la opcioacuten 3del producto 5770-SS1

Comprobar el perfil QUSER

Los servidores de host IBM i se inician con el perfil de usuario QUSER por lo que primero debeasegurarse de que el perfil QUSER estaacute habilitado para poder ejecutar IBM Toolbox para Java en unentorno clienteservidor

Comprobar el perfil QUSER

Para utilizar la liacutenea de mandatos a fin de comprobar el perfil QUSER siga estos pasos1 En una liacutenea de mandatos escriba DSPUSRPRF USRPRF(QUSER) y pulse Intro2 Compruebe que Estado tiene establecido el valor ENABLED Si el estado del perfil no es ENABLED

cambie el perfil QUSER

Cambiar el perfil de usuario QUSER

Si el perfil QUSER no estaacute establecido en ENABLED (habilitado) debe habilitarlo para iniciar losservidores de host IBM i Asimismo la contrasentildea del perfil QUSER no puede ser NONE Si ese es elcaso debe restablecerla

Para utilizar la liacutenea de mandatos a fin de habilitar el perfil QUSER siga estos pasos1 Escriba CHGUSRPRF USRPRF(QUSER) y pulse INTRO2 Cambie el campo Estado a ENABLED y pulse INTRO

El perfil de usuario QUSER estaacute ahora preparado para iniciar los servidores de host IBM i

Dependencias de otros programas bajo licencia

En funcioacuten de coacutemo desee utilizar IBM Toolbox para Java puede que tenga que instalar otros programasbajo licencia

4 IBM Toolbox para Java IBM Toolbox para Java

Visor de archivos en spool

Si desea utilizar las funciones del visor de archivos en spool (clase SpooledFileViewer) de IBM Toolboxpara Java aseguacuterese de que en el servidor esteacute instalada la opcioacuten 8 de host (Fonts de compatibilidadAFP)

Nota las clases SpooledFileViewer PrintObjectPageInputStream y PrintObjectTransformedInputStreamsolo funcionan cuando se conectan a sistemas cuya versioacuten sea igual o posterior a V4R4

SSL (capa de sockets segura)

Si desea utilizar SSL (capa de sockets segura) compruebe que tenga instalado lo siguientev Programa bajo licencia IBM HTTP Server para i 5770-DG1v Opcioacuten 34 de IBM i (Digital Certificate Manager)

Para obtener maacutes informacioacuten sobre SSL consulte ldquoCapa de Sockets Segura y Extensioacuten de socketsseguros Javardquo en la paacutegina 293

Servidor HTTP para utilizar applets servlets o SSL

Si desea utilizar applets servlets o SSL en el servidor IBM i debe configurar un servidor HTTP e instalarlos archivos de clase en el sistema Para obtener maacutes informacioacuten acerca de IBM HTTP Server para i

consulte el sitio Web de HTTP Server

Si desea informacioacuten sobre el gestor de certificados digitales y sobre coacutemo crear certificados digitales conIBM HTTP Server y trabajar con ellos consulte Gestioacuten de certificados digitales

Compatibilidad con niveles distintos de IBM i

Dado que puede utilizar IBM Toolbox para Java tanto en el servidor como en el cliente las cuestiones decompatibilidad afectan tanto a la ejecucioacuten en un servidor como a la conexioacuten desde un cliente a unservidor

Utilizar IBM Toolbox para Java para conectarse desde un cliente a un servidor

Puede utilizar distintas versiones de IBM Toolbox para Java en un cliente y en el servidor al que seconecta Para utilizar IBM Toolbox para Java con el fin de acceder a los datos y recursos de un servidorIBM i el servidor al que se conecta debe ejecutar uno de los sistemas operativos siguientesv IBM i 72v IBM i 71v IBM i 61

La tabla siguiente muestra los requisitos de compatibilidad para la conexioacuten con distintas versionesanteriores de IBM i

Nota IBM Toolbox para Java no da soporte a la compatibilidad con versiones posteriores No se puedeinstalar IBM Toolbox para Java en un servidor que ejecute una versioacuten maacutes reciente de IBM i Porejemplo si utiliza la versioacuten de IBM Toolbox para Java que se distribuye con IBM i 61 no puedeconectarse a un servidor que ejecute IBM i 72

LPP Se suministra con IBM i Se conecta a IBM i

5761-JC1 61 53 y superior

5770-SS1 71 54 y superior

IBM Toolbox para Java 5

|

LPP Se suministra con IBM i Se conecta a IBM i

5770-SS1 72 61 y posterior

Optimizaciones nativas al llevar a cabo la ejecucioacuten en la JVM de IBM i

Las optimizaciones nativas son un conjunto de funciones que hacen que las clases de IBM Toolbox paraJava funcionen como un usuario esperariacutea que funcionaran al ejecutarse en IBM i Las optimizacionessolo inciden en el funcionamiento de IBM Toolbox para Java al ejecutarse en la JVM de IBM i

Las optimizaciones de IBM Toolbox para Java cuando se ejecuta en IBM i sonv Inicio de sesioacuten si no se especifica ninguacuten ID de usuario o ninguna contrasentildea en el objeto AS400 se

utilizan el ID de usuario y la contrasentildea del trabajo actualv Llamada directa a las API de IBM i en lugar de efectuar llamadas por socket a los servidores de host

ndash Acceso a base de datos a nivel de registro colas de datos y espacio de usuario cuando se cumplenlos requisitos de seguridad

ndash Llamada a programa y llamada a mandato cuando se cumplen los requisitos de seguridad y losrequisitos de seguridad de hebras

Nota para obtener un mejor rendimiento establezca la propiedad driver de JDBC para utilizar elcontrolador nativo cuando el programa Java y el archivo de base de datos esteacuten en el mismo servidor

No es necesario efectuar ninguacuten cambio en la aplicacioacuten Java para obtener las optimizaciones IBMToolbox para Java habilita automaacuteticamente las optimizaciones cuando corresponde

Para obtener las mejoras en el rendimiento debe asegurarse de utilizar el archivo JAR que contiene lasoptimizaciones nativas de IBM i Para obtener maacutes informacioacuten consulte la nota 1 de Archivos JAR

Si no utiliza el archivo JAR que incluye las optimizaciones nativas de IBM i IBM Toolbox para Javafunciona como si se ejecutara en un cliente

Requisitos de estacioacuten de trabajo para IBM Toolbox para JavaAseguacuterese de que la estacioacuten de trabajo cumple con los siguientes requisitos

Nota antes de utilizar IBM Toolbox para Java compruebe que se cumplen los requisitos de IBM irelativos a su entorno

Requisitos de estacioacuten de trabajo para ejecutar aplicaciones de IBM Toolbox para Java

Para desarrollar y ejecutar aplicaciones de IBM Toolbox para Java aseguacuterese de que la estacioacuten de trabajocumpla los requisitos siguientesv Se recomienda emplear una maacutequina virtual Java de Java 2 Standard Edition (J2SE) soportada Son

muchas las nuevas funciones de IBM Toolbox para Java que requieren utilizar la versioacuten 14 o superiorde la JVM

v TCPIP instalado y configurado

Requisitos de estacioacuten de trabajo para ejecutar applets de IBM Toolbox para Java

Para desarrollar y ejecutar aplicaciones de IBM Toolbox para Java aseguacuterese de que la estacioacuten de trabajocumpla los requisitos siguientesv Un navegador que tenga una maacutequina virtual Java (JVM) compatiblev TCPIP instalado y configuradov La estacioacuten de trabajo debe conectarse a un servidor que ejecute IBM i 61 o un release maacutes reciente

6 IBM Toolbox para Java IBM Toolbox para Java

|||

|

Instalacioacuten de IBM Toolbox para Java en el sistemaUacutenicamente debe instalar IBM Toolbox para Java en el servidor IBM i si ha configurado como cliente elsistema o una particioacuten del sistema

Antes de instalar IBM Toolbox para Java debe asegurarse de que la versioacuten de IBM i cumple losrequisitos para ejecutar IBM Toolbox para Java Puede resultarle de intereacutes determinar si IBM Toolboxpara Java ya estaacute instalado en el servidor

Instalacioacuten de IBM Toolbox para Java

Puede instalar IBM Toolbox para Java instalando la opcioacuten 3 de 5770-SS1 Puede utilizar System iNavigator o la liacutenea de mandatos

Utilizacioacuten de System i Navigator para instalar IBM Toolbox para Java

Para instalar IBM Toolbox para Java utilizando System i Navigator siga estos pasos1 En System i Navigator inicie la sesioacuten en el sistema que desea utilizar2 En el aacuterbol de funciones (el panel izquierdo) expanda Mis conexiones3 Bajo Mis conexiones pulse con el botoacuten derecho el sistema donde desea instalar IBM Toolbox para

Java4 Seleccione Ejecutar mandato5 En el diaacutelogo Restaurar programa bajo licencia (RSTLICPGM) escriba la siguiente informacioacuten y a

continuacioacuten pulse Aceptarv Producto 5770-SS1v Dispositivo el nombre del dispositivo o archivo de salvarv Parte opcional a a restaurar 3

Nota para obtener maacutes informacioacuten pulse Ayuda en el diaacutelogo Restaurar programa bajo licencia(RSTLICPGM)

Puede utilizar System i Navigator para ver el estado de la tarea Mandato de Management Centralresultante siguiendo estos pasos1 Expanda Management Central2 Expanda Actividad de tareas3 Bajo Actividad de tareas seleccione Mandatos4 En el panel de detalles pulse la tarea de Ejecutar mandato adecuada

Utilizar la liacutenea de mandatos para instalar IBM Toolbox para Java

Para instalar IBM Toolbox para Java desde una liacutenea de mandatos siga estos pasos1 En una liacutenea de mandatos utilice el mandato CL Ir a menuacute Escriba GO MENU(LICPGM) y pulse

INTRO2 Seleccione 11 Instalar programa bajo licencia3 Seleccione 5770-SS1 3 Soporte de directorio base ampliado

Encontraraacute maacutes informacioacuten sobre coacutemo instalar programas bajo licencia en Gestioacuten de software yprogramas bajo licencia

Instalacioacuten de IBM Toolbox para Java en la estacioacuten de trabajoAntes de instalar IBM Toolbox para Java compruebe que se cumplen los requisitos de estacioacuten de trabajoque corresponden a su entorno

IBM Toolbox para Java 7

El meacutetodo que utilice para instalar IBM Toolbox para Java en la estacioacuten de trabajo dependeraacute de coacutemodesee gestionar la instalacioacutenv Para instalar IBM Toolbox para Java en clientes individuales copie los archivos JAR en la estacioacuten de

trabajo y configure la CLASSPATH de la estacioacuten de trabajov Para utilizar el producto IBM Toolbox para Java instalado en un servidor solo tiene que configurar la

CLASSPATH de la estacioacuten de trabajo de modo que apunte a la instalacioacuten del servidor Para que laCLASSPATH de la estacioacuten de trabajo apunte al servidor el servidor debe tener instalado IBM iNetServer

En esta informacioacuten se describe coacutemo copiar los archivos de clase en la estacioacuten de trabajo Para obtenermaacutes informacioacuten sobre coacutemo establecer la CLASSPATH de la estacioacuten de trabajo consulte ladocumentacioacuten del sistema operativo de la estacioacuten de trabajo o la informacioacuten disponible en el sitio Web

de Sun Java

Nota para utilizar las clases de IBM Toolbox para Java en la aplicacioacuten tambieacuten es preciso que elsistema cumpla los requisitos de IBM i

Los archivos de clase de IBM Toolbox para Java estaacuten empaquetados en varios archivos JAR por lo quedebe copiar uno o maacutes de estos archivos JAR en la estacioacuten de trabajo Para obtener maacutes informacioacutensobre queacute archivos JAR son necesarios para las funciones de IBM Toolbox para Java especiacuteficas consulteArchivos JAR

Ejemplo coacutemo copiar jt400jar

En el ejemplo que figura a continuacioacuten se supone que se desea copiar jt400jar que contiene las clases denuacutecleo de IBM Toolbox para Java

Para copiar manualmente el archivo JAR siga estos pasos1 Busque el archivo jt400jar en el directorio siguiente QIBMProdDataHTTPPublicjt400lib2 Copie jt400jar del servidor en la estacioacuten de trabajo Para ello existen varios meacutetodos

v Utilice IBM i Access para Windows a fin de correlacionar una unidad de red de la estacioacuten detrabajo con el servidor y a continuacioacuten copie el archivo

v Utilice el protocolo de transferencia de archivos (FTP) para enviar el archivo a la estacioacuten de trabajo(en modalidad binaria)

3 Actualice la variable de entorno CLASSPATH de la estacioacuten de trabajov Por ejemplo si utiliza Windows NT y ha copiado jt400jar en Cjt400lib antildeada la serie siguiente

al final de la CLASSPATHCjt400libjt400jar

Tambieacuten tiene la opcioacuten de utilizar la versioacuten de fuente abierto de IBM Toolbox para Java denominadaJTOpen Para obtener maacutes informacioacuten sobre JTOpen consulte el sitio Web de IBM Toolbox para Java y

JTOpen

Archivos JAR

IBM Toolbox para Java se suministra en forma de conjunto de archivos JAR Cada uno de los archivosJAR contiene paquetes Java que proporcionan funciones especiacuteficas Puede reducir la cantidad de espaciode almacenamiento necesario utilizando uacutenicamente los archivos JAR que sean precisos para habilitar lasfunciones concretas que desee

Para utilizar un archivo JAR compruebe que especifica una entrada para el mismo en la variableCLASSPATH

8 IBM Toolbox para Java IBM Toolbox para Java

El diagrama siguiente indica los archivos JAR que debe antildeadir a la variable CLASSPATH para utilizar lafuncioacuten o el paquete asociado

Paquete o funcioacuten de IBM Toolbox para JavaArchivos JAR que deben estar en la variableCLASSPATH

Clases de acceso jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 ojt400Proxyjar en un entorno de proxy

ldquoClase CommandHelpRetrieverrdquo en la paacutegina 253 jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 y unanalizador XML y un procesador XSLT Nota 3

CommandPrompter Nota 3 jt400jar jui400jar util400jar Nota 4 y un analizador XMLNota 3

Clases commtrace jt400jar (cliente) o jt400Nativejar (servidor) Nota 1

Clases HTML jt400jar Nota 1 maacutes jt400Servletjar (cliente) ojt400Nativejar (servidor) Nota 1

Clase HTMLDocument Los mismos archivos JAR necesarios para las clasesHTML maacutes un analizador XML y un procesador XSLTNota 3

Clases JCA jt400jar (cliente) o jt400Nativejar (servidor) Nota 1

GUI de origen de datos JDBC jt400jar (cliente) Nota 1 y jui400jarNota 5

Mensajes de error y del sistema de NLS jt400Mri_lang_cntryjar Nota 6

PCML (desarrollo y ejecucioacuten analizado) Nota 7 jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 Nota 8 yun analizador XML Nota 3

PCML (ejecucioacuten serializado) jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 Nota 8

Clases ReportWriter jt400jar (cliente) o jt400Nativejar (servidor) Nota 1archivos JAR de reportwriter Nota 9 y un analizador XMLy un procesador XSLT Nota 3

RFML jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 y unanalizador XML Nota 3

Clases de seguridad jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 ojt400Proxyjar en un entorno de proxy

Clases de servlets jt400jar Nota 1 maacutes jt400Servletjar (cliente) ojt400Nativejar (servidor) Nota 1

Depurador de IBM i Nota 4 jt400jar (cliente) Nota 1 y tesjar

XPCML jt400jar (cliente) o jt400Nativejar (servidor) Nota 1 y unanalizador XML y un procesador XSLT Nota 3

Nota 1 no coloque jt400jar y jt400Nativejar en la CLASSPATH Elija el archivo JAR maacutes adecuado a suentorno y utilice soacutelo ese archivo JAR en la CLASSPATH

Nota 2 algunas de las clases de IBM Toolbox para Java se encuentran en maacutes de un archivo JARv jt400jar - Acceso commtrace JCA soporte para JDBC PCML RFML seguridad utilidades y XPCMLv jt400zip - Utilice jt400jar en lugar de jt400zip jt400zip se distribuye para mantener la compatibilidad

con los releases anteriores de IBM Toolbox para Javav jt400Accesszip - Las mismas clases que contiene jt400jar jtAccess400zip se distribuye para mantener

la compatibilidad con los releases anteriores de IBM Toolbox para Java Utilice jt400jar o jt400Nativejaren lugar de jt400Accesszip

v jt400Nativejar - Acceso HTML PCML RFML seguridad XPCML y optimizaciones nativas Lasoptimizaciones nativas son un conjunto de clases (menos de 20) que aprovechan la funcioacuten de IBM icuando se ejecuta en la JVM de IBM i Dado que jt400Nativejar contiene las optimizaciones nativas al

IBM Toolbox para Java 9

ejecutarse en la JVM de IBM i utilice jt400Nativejar en lugar de jt400jar jt400Nativejar se suministracon IBM i y reside en el directorio QIBMProdDataOS400jt400lib

v jt400Native11xjar - Utilice jt400Nativejar en lugar de jt400Native11xjar jt400Native11xjar sedistribuye para mantener la compatibilidad con los releases anteriores de IBM Toolbox para Java

Nota 3 cuando tenga que utilizar un analizador XML o procesador XSLT aseguacuterese de que es compatiblecon JAXP Encontraraacute maacutes informacioacuten en esta paacutegina

ldquoAnalizador XML y procesador XSLTrdquo en la paacutegina 330

Nota 4 al utilizar CommandPrompter o el depurador de IBM i tambieacuten es necesario un archivo JARadicional que no forma parte de IBM Toolbox para Java jhalljar Para obtener maacutes informacioacuten sobre

coacutemo bajar jhalljar consulte el sitio Web de Sun JavaHelp

Nota 5 util400jar contiene clases especiacuteficas de IBM i para dar formato a la entrada y para emplear elprograma de solicitud de liacutenea de mandatos Para utilizar la clase CommandPrompter se necesitautil400jar

Nota 6 jui400jar contiene las clases necesarias para utilizar la interfaz de GUI DataSource JDBC jt400jar(Nota 1) contiene las clases necesarias para todas las demaacutes funciones JDBC

Nota 7 jt400Mri_xx_yyjar contiene mensajes traducidos entre los que se encuentran series incluidas enmensajes de excepcioacuten diaacutelogos y salida de otros procesos normales En jt400Mri_lang_cntryjar lang = elcoacutedigo de idioma ISO y cntry = el coacutedigo de paiacutes o regioacuten ISO utilizado para traducir el texto incluidoEn algunos casos no se emplea el coacutedigo de paiacutes o regioacuten ISO Al instalar una versioacuten en idioma nacionalconcreta del programa bajo licencia IBM Toolbox para Java en el sistema se instala el archivojt400Mri_lang_cntryjar adecuado Si el idioma no estaacute soportado la instalacioacuten utiliza de formapredeterminada la versioacuten en ingleacutes que se incluye en los archivos JAR de IBM Toolbox para Javav Por ejemplo al instalar la versioacuten del idioma alemaacuten del programa bajo licencia 5770-SS1 se instala el

archivo JAR del idioma alemaacuten jt400Mri_dejar

Puede antildeadir soporte para otros idiomas antildeadiendo maacutes de uno de estos archivos JAR a la variableclasspath Java carga la serie correcta seguacuten el entorno local actual

Nota 8 la serializacioacuten del archivo PCML durante el desarrollo supone dos ventajas1 Tan solo deberaacute analizar el archivo PCML durante el desarrollo y no durante la ejecucioacuten2 Los usuarios necesitaraacuten incluir menos archivos JAR en la variable CLASSPATH para ejecutar la

aplicacioacuten

Para analizar el archivo PCML durante el desarrollo necesitaraacute el moacutedulo de ejecucioacuten de PCML dedatajar o jt400jar y el analizador PCML de x4j400jar Para ejecutar la aplicacioacuten serializada los usuariossolo necesitaraacuten jt400jar Para obtener maacutes informacioacuten consulte ldquoConstruir llamadas a programa IBM icon PCMLrdquo en la paacutegina 294

Nota 9 utilice jt400jar y jt400Nativejar en lugar de data400jar data400jar contiene las clases deejecucioacuten PCML que ahora tambieacuten estaacuten en jt400jar y jt400Nativejar (Nota 1) data400jar se distribuyepara mantener la compatibilidad con los releases anteriores de IBM Toolbox para Java

Nota 10 hay copias de las clases ReportWriter en maacutes de un archivo JARv composerjarv outputwriterjarv reportwritersjar

10 IBM Toolbox para Java IBM Toolbox para Java

Si su aplicacioacuten enviacutea corrientes de datos PCL a un archivo en spool del IBM i debe establecer comodisponibles las clases de acceso mediante el archivo JAR adecuado (Nota 1) Para crear un archivo enspool que contenga los datos PCL se necesitan las clases AS400 OutputQueue PrintParameterList ySpooledFileOutputStream Para obtener maacutes informacioacuten consulte las clases ReportWriter

Propiedades del sistemaPuede especificar propiedades del sistema para configurar diversos aspectos de IBM Toolbox para Java

Por ejemplo puede utilizar las propiedades del sistema para definir un servidor proxy o un nivel derastreo Las propiedades del sistema son uacutetiles para la adecuada configuracioacuten en tiempo de ejecucioacuten sinnecesidad de volver a compilar el coacutedigo Las propiedades del sistema funcionan como las variables deentorno en el sentido de que cuando se cambia una propiedad del sistema durante la ejecucioacuten por logeneral el cambio no se refleja hasta la proacutexima vez que se ejecuta la aplicacioacuten

Puede establecer las propiedades del sistema de varias formasv Mediante el meacutetodo javalangSystemsetProperties()

Puede establecer las propiedades del sistema de forma programaacutetica mediante el meacutetodojavalangSystemsetProperties()Por ejemplo el coacutedigo siguiente establece la propiedad comibmas400accessAS400proxyServer enhqoffice

Properties systemProperties = SystemgetProperties()systemPropertiesput (comibmas400accessAS400proxyServer hqoffice)SystemsetProperties (systemProperties)

v Mediante la opcioacuten -D del mandato java

Muchos entornos permiten establecer propiedades del sistema al ejecutar aplicaciones desde una liacuteneade mandatos mediante la opcioacuten -D del mandato javaPor ejemplo el programa siguiente ejecuta la aplicacioacuten denominada Inventory con la propiedadcomibmas400accessAS400proxyServer establecida en hqoffice

java -Dcomibmas400accessAS400proxyServer=hqoffice Inventory

v Mediante un archivo jt400properties

En algunos entornos puede resultar poco praacutectico ordenar a todos los usuarios que establezcan suspropias propiedades del sistema Como alternativa puede especificar las propiedades del sistema deIBM Toolbox para Java en un archivo denominado jt400properties donde se buscaraacute como si fueraparte del paquete comibmas400access Dicho de otro modo coloque el archivo jt400properties en undirectorio comibmas400access al que apunte la sentencia CLASSPATHPor ejemplo establezca la propiedad comibmas400accessAS400proxyServer en hqoffice insertandola liacutenea siguiente en el archivo jt400properties

comibmas400accessAS400proxyServer=hqoffice

El caraacutecter de barra inclinada invertida () funciona como caraacutecter de escape en los archivos depropiedades Para especificar un caraacutecter de barra inclinada invertida literal emplee dos caracteres debarra inclinada invertida ()Modifique este ejemplo de un archivo jt400properties para su entorno

v Mediante una clase Properties

Algunos navegadores no cargan los archivos de propiedades sin cambiar expliacutecitamente los valores deseguridad Sin embargo la mayoriacutea de los navegadores siacute admiten propiedades en archivos class demodo que las propiedades del sistema de IBM Toolbox para Java tambieacuten pueden especificarsemediante una clase denominada comibmas400accessProperties que ampliacutea javautilPropertiesPor ejemplo para establecer la propiedad comibmas400accessAS400proxyServer en hqofficeutilice el coacutedigo Java siguiente

package comibmas400access

public class Properties

IBM Toolbox para Java 11

extends javautilProperties

public Properties ()

put (comibmas400accessAS400proxyServer hqoffice)

Modifique y compile este ejemplo de un archivo fuente Propertiesjava para su entorno

Si una propiedad del sistema de IBM Toolbox para Java se establece mediante maacutes de uno de losprocedimientos descritos anteriormente se aplica la prioridad siguiente (por orden de prioridaddecreciente)1 La propiedad del sistema establecida programaacuteticamente mediante

javalangSystemsetProperties()

2 La propiedad del sistema establecida mediante la opcioacuten -D del mandato java

3 La propiedad del sistema establecida mediante una clase Properties4 La propiedad del sistema establecida mediante un archivo jt400properties

IBM Toolbox para Java da soporte a las propiedades del sistema siguientesv ldquoPropiedades de servidor proxyrdquov ldquoPropiedades de rastreordquo en la paacutegina 13v ldquoPropiedades de llamada a mandatoprogramardquo en la paacutegina 13v ldquoPropiedades de FTPrdquo en la paacutegina 13v ldquoPropiedades de conexioacutenrdquo en la paacutegina 14

Propiedades de servidor proxy

Propiedad de servidor proxy Descripcioacuten

comibmas400accessAS400proxyServer Especifica el nombre de host y el nuacutemero depuerto de servidor proxy con el formato

nombrehostnuacutemeropuerto

El nuacutemero de puerto es opcional

comibmas400accessTunnelProxyServerclientCleanupInterval Especifica con queacute frecuencia en segundosel servidor proxy busca si hay conexionesdesocupadas El servidor proxy inicia unahebra para buscar los clientes que ya notienen comunicacioacuten Utilice esta propiedadpara establecer con queacute frecuencia busca lahebra si hay conexiones desocupadas

comibmas400accessTunnelProxyServerclientLifetime Especifica durante cuaacutento tiempo ensegundos puede estar desocupado un clienteantes de que el servidor proxy elimine lasreferencias a los objetos de modo que lamaacutequina virtual Java pueda eliminarlos en larecogida de basura El servidor proxy iniciauna hebra para buscar los clientes que ya notienen comunicacioacuten Utilice esta propiedadpara establecer durante cuaacutento tiempo puedeestar desocupado un cliente antes de que seejecute la recogida de basura sobre eacutel

12 IBM Toolbox para Java IBM Toolbox para Java

Propiedades de rastreo

Propiedad de rastreo Descripcioacuten

comibmas400accessTracecategory Especifica queacute categoriacuteas de rastreo deben habilitarse Setrata de una lista delimitada por comas que contienecualquier combinacioacuten de categoriacuteas de rastreo La listacompleta de categoriacuteas de rastreo se define en la claseTrace

comibmas400accessTracefile Especifica el archivo en que se escribe la salida derastreo Por omisioacuten la salida de rastreo se escribe enSystemout

comibmas400accessServerTraceJDBC Especifica queacute categoriacuteas de rastreo deben iniciarse en eltrabajo servidor JDBC Para obtener informacioacuten sobrelos valores soportados consulte la propiedad de rastreodel servidor JDBC

Propiedades de llamada a mandatoprograma

Propiedad de llamada a mandatoprograma Descripcioacuten

comibmas400accessCommandCallthreadSafe Especifica si puede suponerse que las llamadas amandato son seguras en ejecucioacuten multihebra Si es truese supone que todas las llamadas a mandato son segurasen ejecucioacuten multihebra Si es false se supone que todaslas llamadas a mandato no son seguras en ejecucioacutenmultihebra Esta propiedad no se tiene en cuenta para unobjeto CommandCall determinado siCommandCallsetThreadSafe() oAS400setMustUseSockets(true) se ha llevado a cabosobre el objeto

comibmas400accessProgramCallthreadSafe Especifica si puede suponerse que las llamadas aprograma son seguras en ejecucioacuten multihebra Si estrue se supone que todas las llamadas a programa sonseguras en ejecucioacuten multihebra Si es false se suponeque todas las llamadas a programa no son seguras enejecucioacuten multihebra Esta propiedad no se tiene encuenta para un objeto ProgramCall determinado siProgramCallsetThreadSafe() oAS400setMustUseSockets(true) se ha llevado a cabosobre el objeto

Propiedades de FTP

Propiedad de FTP Descripcioacuten

comibmas400accessFTPreuseSocket Especifica si el socket se reutiliza para variastransferencias de archivo (a traveacutes de una sola instanciaFTP) cuando estaacute en la modalidad active Si el valor estrue se reutiliza el socket Si el valor es false se crea unsocket nuevo para cada transferencia de archivo Estapropiedad no se tiene en cuenta para un objeto FTP dadosi se ha realizado FTPsetReuseSocket() sobre el objeto

IBM Toolbox para Java 13

Propiedades de conexioacuten

Propiedad de conexioacuten Descripcioacuten

comibmas400accessAS400guiAvailable Indica si el entorno actual tiene capacidad GUI Si estrue puede solicitarse informacioacuten durante el inicio desesioacuten para mostrar las condiciones de error solicitarinformacioacuten adicional o solicitar un cambio decontrasentildea Si es false las condiciones de error o lainformacioacuten que falta generaraacuten excepciones Lasaplicaciones que se ejecutan como aplicaciones de IBM io que desean controlar la interfaz de usuario de inicio desesioacuten pueden ejecutarse con la modalidad de solicitudde informacioacuten establecida en false El valorpredeterminado es true

comibmas400accessAS400mustAddLanguageLibrary Indica si los objetos AS400 deben intentar antildeadir labiblioteca de idioma secundario a la lista de bibliotecascuando se ejecutan en el sistema Si establece labiblioteca de idioma se garantiza que los mensajes deerror del sistema que se devuelven esteacuten en el idiomanacional correspondiente al entorno local del cliente Sise establece en true los objetos AS400 intentaraacuten antildeadirla biblioteca de idioma secundario a la lista de bibliotecascuando se ejecutan en el sistema Si se establece enfalse los objetos AS400 no intentaraacuten antildeadir labiblioteca de idioma secundario a la lista de bibliotecasEl valor predeterminado es false

comibmas400accessAS400mustUseNetSockets Especifica si los objetos AS400 deben utilizar soacutelo socketsde dominio de Internet Cuando el programa Java seejecuta en el sistema algunas clases de IBM Toolbox paraJava crean conexiones de socket de dominio UNIX Si seestablece en true los objetos AS400 soacutelo utilizaraacutensockets de dominio de Internet Si se establece en falselos objetos AS400 pueden utilizar conexiones de socketde dominio UNIX ademaacutes de los sockets de dominio deInternet El valor predeterminado es false

comibmas400accessAS400mustUseSockets Especifica si los objetos AS400 deben utilizar socketsCuando el programa Java se ejecuta en el sistemaalgunas clases de IBM Toolbox para Java acceden a losdatos llamando a una API en lugar de realizar unallamada de socket al sistema Existen algunas pequentildeasdiferencias en el comportamiento de las clases cuando seutilizan llamadas de API en lugar de llamadas de socketSi el programa se ve afectado por estas diferenciaspuede obligar a las clases a que utilicen llamadas desocket en lugar de llamadas de API estableciendo lapropiedad en true El valor predeterminado es false

comibmas400accessAS400mustUseSuppliedProfile Especifica si los objetos AS400 deben utilizar soacutelo unperfil suministrado Cuando el programa Java se ejecutaen el sistema puede utilizarse la informacioacuten del perfilde usuario con el que se ha iniciado actualmente lasesioacuten (CURRENT) Si el valor es true debesuministrarse un perfil de usuario Si es false losobjetos AS400 recuperan la informacioacuten del perfil deusuario actual si no se suministra un perfil de usuario Elvalor predeterminado es false

14 IBM Toolbox para Java IBM Toolbox para Java

Propiedad de conexioacuten Descripcioacuten

comibmas400accessAS400signonHandler Especifica el manejador de inicio de sesioacutenpredeterminado Esta propiedad no se tiene en cuentapara un objeto AS400 dado si se ha realizadoAS400setSignonHandler() sobre el objeto o si se hallamado a AS400setDefaultSignonHandler()

comibmas400accessAS400threadUsed Especifica si los objetos AS400 usan hebras en unacomunicacioacuten con los servidores de host Si IBM Toolboxpara Java utiliza hebras puede ser ventajoso para elrendimiento la desactivacioacuten de las hebras puede sernecesaria si la aplicacioacuten debe ser compatible con laespecificacioacuten de Enterprise Java Beans El valorpredeterminado es true

Ejemplo archivo de propiedadesEste ejemplo muestra las propiedades del servidor proxy las categoriacuteas de rastreo las llamadas amandato las llamadas a programa las transferencias de archivo y las conexiones========================================================= IBM Toolbox para Java --------------------------------------------------------- Archivo de propiedades de ejemplo Denomine este archivo jt400properties y almaceacutenelo en un directorio comibmas400access al que apunte la la classpath =========================================================

--------------------------------------------------------- Propiedades del sistema de servidor proxy ---------------------------------------------------------

Esta propiedad del sistema especifica el nombre de host y el nuacutemero de puerto del servidor proxy con el formato nombrehostnuacutemeropuerto El nuacutemero de puerto es opcionalcomibmas400accessAS400proxyServer=hqoffice

Esta propiedad del sistema especifica con queacute frecuencia en segundos el servidor proxy buscaraacute si hay conexiones desocupadas El servidor proxy inicia una hebra para buscar los clientes que ya no tienen comunicacioacuten Utilice esta propiedad para establecer con queacute frecuencia busca la hebra si hay conexiones desocupadascomibmas400accessTunnelProxyServerclientCleanupInterval=7200

Esta propiedad del sistema especifica durante cuaacutento tiempo en segundos un cliente puede estar desocupado antes de eliminarse El servidor proxy inicia una hebra para buscar los clientes que ya no tienen comunicacioacuten Utilice esta propiedad para establecer cuaacutento tiempo puede estar desocupado un cliente antes de eliminarsecomibmas400accessTunnelProxyServerclientLifetime=2700

--------------------------------------------------------- Propiedades del sistema de rastreo ---------------------------------------------------------

Esta propiedad del sistema especifica queacute categoriacuteas de rastreo deben habilitarse Se trata de una lista delimitada por comas que contiene cualquier combinacioacuten de categoriacuteas de rastreo La lista completa de categoriacuteas de rastreo se define en la clase Tracecomibmas400accessTracecategory=errorwarninginformation

Esta propiedad del sistema especifica el archivo en que se escribe la

IBM Toolbox para Java 15

salida de rastreo Por omisioacuten la salida de rastreo se escribe en Systemoutcomibmas400accessTracefile=ctemptraceout

--------------------------------------------------------- Propiedades del sistema de llamada a mandato ---------------------------------------------------------

Esta propiedad del sistema especifica si las llamadas a mandato deben suponerse como seguras en ejecucioacuten multihebra Si es true se supone que todas las llamadas a mandato son seguras en ejecucioacuten multihebra Si es false se supone que todas las llamadas a mandato no son seguras en ejecucioacuten multihebra Esta propiedad se omite para un objeto CommandCall determinado si CommandCallsetThreadSafe(truefalse) o AS400setMustUseSockets(true) se ha llevado a cabo sobre el objetocomibmas400accessCommandCallthreadSafe=true

--------------------------------------------------------- Propiedades del sistema de llamada a programa ---------------------------------------------------------

Esta propiedad del sistema especifica si las llamadas a programa deben suponerse como seguras en ejecucioacuten multihebra Si es true se supone que todas las llamadas a mandato son seguras en ejecucioacuten multihebra Si es false se supone que todas las llamadas a mandato no son seguras en ejecucioacuten multihebra Esta propiedad se omite para un objeto ProgramCall determinado si ProgramCallsetThreadSafe(truefalse) o AS400setMustUseSockets(true) se ha llevado a cabo sobre el objetocomibmas400accessProgramCallthreadSafe=true

--------------------------------------------------------- Propiedades del sistema de FTP ---------------------------------------------------------

Esta propiedad del sistema especifica si se reutiliza el socket para varias transferencias de archivo (a traveacutes de una sola instancia FTP) cuando estaacute en la modalidad active Si el valor es true se reutiliza el socket Si es false se crea un socket nuevo para cada transferencia de archivo Esta propiedad no se tiene en cuenta para un objeto FTP dado si FTPsetReuseSocket(truefalse) se ha realizado sobre el objetocomibmas400accessFTPreuseSocket=true

--------------------------------------------------------- Propiedades del sistema de conexioacuten ---------------------------------------------------------

Esta propiedad del sistema especifica el manejador de inicio de sesioacuten predeterminado Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setSignonHandler() se ha ejecutado sobre el objeto o si se ha llamado a AS400setDefaultSignonHandler()comibmas400accessAS400signonHandler=mypackageMyHandler

Esta propiedad del sistema especifica si en Toolbox se debe suponer que el entorno actual tiene capacidad GUI Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setGuiAvailable() se ha ejecutado en el objetocomibmas400accessAS400guiAvailable=true

Esta propiedad del sistema especifica si debe antildeadirse la biblioteca de idioma secundario correspondiente a la lista de bibliotecas cuando se ejecuta en el sistema De forma predeterminada la biblioteca no se antildeade

16 IBM Toolbox para Java IBM Toolbox para Java

Esta propiedad no se tiene en cuenta para un objeto AS400 dado si se ha ejecutado AS400setMustAddLanguageLibrary() en el objetocomibmas400accessAS400mustAddLanguageLibrary=true

Esta propiedad del sistema especifica si deben utilizarse sockets cuando se comunica con el sistema Si se establece en true esta propiedad indica a Toolbox que no explote optimizaciones nativas cuando se ejecute directamente en el sistema De forma predeterminada cuando se ejecuta directamente en el sistema Toolbox explotaraacute optimizaciones nativas si estaacuten disponibles y sockets de elusioacuten Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setMustUseSockets() se ha ejecutado en el objetocomibmas400accessAS400mustUseSockets=true

Esta propiedad del sistema especifica si deben utilizarse sockets de dominio de Internet cuando se comunica con el sistema Si se establece en true esta propiedad indica a Toolbox que no explote los sockets Unix cuando se ejecute directamente en el sistema De forma predeterminada cuando se ejecuta directamente en el sistema Toolbox explotaraacute los sockets Unix si estaacuten disponibles en lugar de sockets de dominio de Internet Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setMustUseNetSockets() se ha ejecutado en el objetocomibmas400accessAS400mustUseNetSockets=true

Esta propiedad del sistema especifica si debe utilizarse el perfil proporcionado de forma expliacutecita cuando se comunica con el sistema Si se establece en true esta propiedad indica a Toolbox que no explote el perfil con el que se ha iniciado la sesioacuten actualmente de forma predeterminada cuando se ejecuta directamente en el sistema Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setMustUseSuppliedProfile() se ha ejecutado en el objetocomibmas400accessAS400mustUseSuppliedProfile=true

Esta propiedad del sistema especifica si se utilizan hebras cuando se comunica con los servidores de host De forma predeterminada el objeto AS400 crea hebras diferentes para escuchar en los sockets de comunicacioacuten a los servidores de host Si se establece en false esta propiedad indica a Toolbox que no cree hebras diferentes para las comunicaciones de los servidores de host Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setThreadUsed() se ha ejecutado en el objetocomibmas400accessAS400threadUsed=true End

Ejemplo archivo fuente de clase de propiedades del sistema========================================================= IBM Toolbox para Java--------------------------------------------------------- Archivo fuente de clase de propiedades de ejemplo Compile este archivo fuente y almacene el archivo de clase en la sentencia CLASSPATH=========================================================package comibmas400access

public class Propertiesextends javautilProperties

public Properties ()

--------------------------------------------------------- Propiedades del sistema de servidor proxy

IBM Toolbox para Java 17

---------------------------------------------------------

Esta propiedad del sistema especifica el nombre de host y el nuacutemero de puerto del servidor proxy con el formato nombrehostnuacutemeropuerto El nuacutemero de puerto es opcionalput (comibmas400accessAS400proxyServer hqoffice)

Esta propiedad del sistema especifica con queacute frecuencia en segundos el servidor proxy buscaraacute si hay conexiones desocupadas El servidor proxy inicia una hebra para buscar los clientes que ya no tienen comunicacioacuten Utilice esta propiedad para establecer con queacute frecuencia busca la hebra si hay conexiones desocupadasput(comibmas400accessTunnelProxyServerclientCleanupInterval 7200)

Esta propiedad del sistema especifica durante cuaacutento tiempo en segundos un cliente puede estar desocupado antes de eliminarse El servidor proxy inicia una hebra para buscar los clientes que ya no tienen comunicacioacuten Utilice esta propiedad para establecer cuaacutento tiempo puede estar desocupado un cliente antes de eliminarseput(comibmas400accessTunnelProxyServerclientLifetime 2700)

--------------------------------------------------------- Propiedades del sistema de rastreo ---------------------------------------------------------

Esta propiedad del sistema especifica queacute categoriacuteas de rastreo deben habilitarse Se trata de una lista delimitada por comas que contiene cualquier combinacioacuten de categoriacuteas de rastreo La lista completa de categoriacuteas de rastreo se define en la clase Traceput (comibmas400accessTracecategory errorwarninginformation)

Esta propiedad del sistema especifica el archivo en que se escribe la salida de rastreo Por omisioacuten la salida de rastreo se escribe en Systemoutput (comibmas400accessTracefile ctemptraceout)

--------------------------------------------------------- Propiedades del sistema de llamada a mandato ---------------------------------------------------------

Esta propiedad del sistema especifica si las llamadas a mandato deben suponerse como seguras en ejecucioacuten multihebra Si es true se supone que todas las llamadas a mandato son seguras en ejecucioacuten multihebra Si es false se supone que todas las llamadas a programa no son seguras en ejecucioacuten multihebra Esta propiedad se omite para un objeto CommandCall determinado si CommandCallsetThreadSafe(truefalse) o AS400setMustUseSockets(true) se ha llevado a cabo sobre el objetoput (comibmas400accessCommandCallthreadSafe true)

--------------------------------------------------------- Propiedades del sistema de llamada a programa ---------------------------------------------------------

Esta propiedad del sistema especifica si las llamadas a programa deben suponerse como seguras en ejecucioacuten multihebra Si es true se supone que todas las llamadas a mandato son seguras en ejecucioacuten multihebra Si es false se supone que todas las llamadas a programa no son seguras en ejecucioacuten multihebra Esta propiedad se omite para un objeto ProgramCall determinado si ProgramCallsetThreadSafe(truefalse) o AS400setMustUseSockets(true) se ha llevado a cabo sobre el objetoput (comibmas400accessProgramCallthreadSafe true)

--------------------------------------------------------- Propiedades del sistema de FTP

18 IBM Toolbox para Java IBM Toolbox para Java

---------------------------------------------------------

Esta propiedad del sistema especifica si se reutiliza el socket para varias transferencias de archivo (a traveacutes de una sola instancia FTP) en modalidad active Si el valor es true se reutiliza el socket Si el valor es false se crea un socket nuevo para cada transferencia de archivos Esta propiedad no se tiene en cuenta para un objeto FTP dado si FTPsetReuseSocket(truefalse) se ha realizado sobre el objetoput (comibmas400accessFTPreuseSocket true)

--------------------------------------------------------- Propiedades del sistema de conexioacuten ---------------------------------------------------------

Esta propiedad del sistema especifica el manejador de inicio de sesioacuten predeterminado Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setSignonHandler() se ha ejecutado en el objeto o si se ha llamado a AS400setDefaultSignonHandler()put (comibmas400accessAS400signonHandler mypackageMyHandler)

Esta propiedad del sistema especifica si en Toolbox se debe suponer que el entorno actual tiene capacidad GUI Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setGuiAvailable() se ha ejecutado en el objetoput (comibmas400accessAS400guiAvailable true)

Esta propiedad del sistema especifica si debe antildeadirse la biblioteca de idioma secundario correspondiente a la lista de bibliotecas cuando se ejecuta en el sistema De forma predeterminada la biblioteca no se antildeade Esta propiedad no se tiene en cuenta para un objeto AS400 dado si se ha ejecutado AS400setMustAddLanguageLibrary() en el objetoput (comibmas400accessAS400mustAddLanguageLibrary true)

Esta propiedad del sistema especifica si deben utilizarse sockets cuando se comunica con el sistema De forma predeterminada cuando se ejecuta directamente en el sistema Toolbox explotaraacute optimizaciones nativas si estaacuten disponibles y sockets de elusioacuten Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setMustUseSockets() se ha ejecutado en el objetoput (comibmas400accessAS400mustUseSockets true)

Esta propiedad del sistema especifica si deben utilizarse sockets de dominio de Internet cuando se comunica con el sistema Si se establece en true esta propiedad indica a Toolbox que no explote los sockets Unix cuando se ejecute directamente en el sistema De forma predeterminada cuando se ejecuta directamente en el sistema Toolbox explotaraacute los sockets Unix si estaacuten disponibles en lugar de sockets de dominio de Internet Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setMustUseNetSockets() se ha ejecutado en el objetoput (comibmas400accessAS400mustUseNetSockets true)

Esta propiedad del sistema especifica si debe utilizarse el perfil proporcionado de forma expliacutecita cuando se comunica con el sistema Si se establece en true esta propiedad indica a Toolbox que no explote el perfil con el que se ha iniciado la sesioacuten actualmente de forma predeterminada cuando se ejecuta directamente en el sistema Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setMustUseSuppliedProfile() se ha ejecutado en el objetoput (comibmas400accessAS400mustUseSuppliedProfile true)

IBM Toolbox para Java 19

Esta propiedad del sistema especifica si se utilizan hebras cuando se comunica con los servidores de host De forma predeterminada el objeto AS400 crea hebras diferentes para escuchar en los sockets de comunicacioacuten a los servidores de host Si se establece en false esta propiedad indica a Toolbox que no cree hebras diferentes para las comunicaciones de los servidores de host Esta propiedad no se tiene en cuenta para un objeto AS400 dado si AS400setThreadUsed() se ha ejecutado en el objetoput (comibmas400accessAS400threadUsed true)

JTOpenLiteEl paquete JTOpenLite (comibmjtopenlite) permite escribir programas Java que permiten a diversosdispositivos moacuteviles acceder directamente a datos y recursos de IBM i Aunque JTOpenLite se consideraparte de IBM Toolbox para Java no se incluye en el producto bajo licencia El archivo jar de JTOpenLite(jtopenlitejar) se incluye en la versioacuten de fuente abierto de IBM Toolbox para Java denominada JTOpenDebe bajar y configurar por separado JTOpenLite que estaacute contenido en JTOpen

Iniciacioacuten a JTOpenLite

Puede bajar JTOpenLite del sitio web de IBM Toolbox for JavaJTOpen El sitio web tambieacuten ofreceinformacioacuten adicional sobre la configuracioacuten de JTOpenLiteInformacioacuten relacionada

Sitio web de IBM Toolbox for JavaJTOpen

Clases de IBM Toolbox para JavaLas clases de IBM Toolbox para Java estaacuten categorizadas por paquetes como todas las clases Java Cadapaquete proporciona un tipo determinado de funcionalidad

Para mayor comodidad en esta documentacioacuten habitualmente se hace referencia a cada paquete con unnombre corto Por ejemplo el paquete comibmas400access se denomina paquete access

Clases de accesoLas clases de acceso de IBM Toolbox para Java representan datos y recursos de IBM iInformacioacuten relacionadaJavadoc de clases EventLogPermite anotar excepciones y mensajes con independencia del dispositivo utilizado para visualizarlosResumen de paquetes de acceso

Puntos de acceso de servidorLas clases de acceso de IBM Toolbox para Java suministran funciones similares al uso de las API de IBM iAccess para Windows Sin embargo la instalacioacuten de IBM i Access para Windows no es un requisito parala utilizacioacuten de estas clases

Las clases de acceso utilizan los sistemas existentes como puntos de acceso Cada servidor se ejecuta enun trabajo aparte del sistema y enviacutea y recibe corrientes de datos a traveacutes de una conexioacuten por socket

Figura 1 Puntos de acceso de servidor

20 IBM Toolbox para Java IBM Toolbox para Java

|

|||||

|

||

|

|

Clase AS400La clase AS400 de IBM Toolbox para Java gestiona un conjunto de conexiones por socket a los trabajos deservidor en el servidor sobre comportamiento de inicio de sesioacuten para el servidor incluido lapresentacioacuten al usuario de la solicitud de informacioacuten de inicio de sesioacuten la colocacioacuten de contrasentildeas enmemoria cacheacute y la gestioacuten de usuario predeterminado

El programa Java debe proporcionar un objeto AS400 cuando el programa Java utiliza una instancia deuna clase que accede al sistema IBM i Por ejemplo el objeto CommandCall requiere un objeto AS400para poder enviar mandatos al sistema

El objeto AS400 maneja de manera diferente las conexiones los ID de usuario y las contrasentildeas cuando seejecuta en la maacutequina virtual Java de IBM i Para obtener maacutes informacioacuten consulte ldquoMaacutequina virtualJava de IBM irdquo en la paacutegina 369

Los objetos AS400 ahora soportan la autenticacioacuten de Kerberos utilizando la interfaz de programacioacuten deaplicaciones Java Generic Security Service (API JGSS) para autenticar en el servidor en lugar de utilizarun ID de usuario y una contrasentildea

IBM Toolbox para Java 21

Nota para utilizar los tickets de kerberos debe configurarse la interfaz de programacioacuten de aplicacionesJava Generic Security Services (JGSS) Para obtener maacutes informacioacuten sobre JGSS consulte la

Documentacioacuten de seguridad de Java

Consulte la seccioacuten Gestionar conexiones para obtener informacioacuten acerca de coacutemo se gestionan lasconexiones con el servidor mediante el objeto AS400 En el Javadoc AS400ConnectionPool encontraraacuteinformacioacuten acerca de coacutemo reducir el tiempo de conexioacuten inicial solicitando conexiones desde unaagrupacioacuten de conexiones

La clase AS400 proporciona las siguientes funciones de inicio de sesioacutenv Autenticar el perfil de usuariov Obtener una credencial de siacutembolo de perfil y autenticar el perfil de usuario asociadov Establecer una credencial de siacutembolo de perfilv Gestionar identificadores de usuario predeterminadosv Colocar contrasentildeas en la memoria cacheacutev Solicitar ID de usuariov Cambiar una contrasentildeav Obtener la versioacuten y el release del sistema operativo

Para obtener informacioacuten acerca de coacutemo utilizar un objeto AS400 al enviar o recibir datos cifradosconsulte la clase SecureAS400Informacioacuten relacionadaJavadoc AS400ConnectionPoolJavadoc AS400

Gestioacuten de identificadores de usuario predeterminado

Si desea minimizar el nuacutemero de veces que un usuario debe iniciar la sesioacuten utilice un ID de usuariopredeterminado El programa Java utiliza el ID de usuario predeterminado si no se suministra ninguacuten IDde usuario El ID de usuario predeterminado puede establecerse ya sea por medio del programa Java omediante la interfaz de usuario Si el ID de usuario predeterminado no se ha establecido el diaacutelogo Iniciode sesioacuten permite al usuario establecer el ID de usuario predeterminado

Una vez establecido el ID de usuario predeterminado para un servidor determinado el diaacutelogo Inicio desesioacuten no permite realizar cambios en el mismo Cuando se construye un objeto AS400 el programa Javapuede suministrar el ID de usuario y la contrasentildea Cuando un programa suministra el ID de usuario alobjeto AS400 el ID de usuario predeterminado no se ve afectado El programa si va a establecer ocambiar el ID de usuario predeterminado debe establecer expliacutecitamente setUseDefaultUser() EnResumen de solicitudes ID de usuario predeterminado y colocacioacuten de contrasentildeas en memoria cacheacuteencontraraacute maacutes informacioacuten

El objeto AS400 tiene meacutetodos para obtener establecer y eliminar el ID de usuario predeterminado Elprograma Java tambieacuten puede inhabilitar el proceso de ID de usuario predeterminado mediante elmeacutetodo setUseDefaultUser() Si el proceso de ID de usuario predeterminado estaacute inhabilitado y laaplicacioacuten Java no suministra ninguacuten ID de usuario el objeto AS400 solicita el ID de usuario cada vezque se establece una conexioacuten con el servidor

Todos los objetos AS400 que representan el mismo servidor IBM i dentro de una maacutequina virtual Javautilizan el mismo ID de usuario predeterminado

En el ejemplo que sigue se crean dos conexiones con el servidor utilizando dos objetos AS400 Si elusuario al iniciar la sesioacuten marcoacute el recuadro ID de usuario predeterminado cuando se establezca lasegunda conexioacuten no se presentaraacute al usuario ninguna solicitud para que escriba un ID de usuario

22 IBM Toolbox para Java IBM Toolbox para Java

Cree dos objetos AS400 para elmismo sistema

AS400 sys1 = new AS400(mySystemmyCompanycom)AS400 sys2 = new AS400(mySystemmyCompanycom)

Inicie una conexioacuten con el servicio de llamada a mandato Se solicita al usuario el ID de usuario y la contrasentildeasys1connectService(AS400COMMAND)

Inicie otra conexioacuten con el servicio de llamada a mandato No se solicita informacioacuten al usuariosys2connectService(AS400COMMAND)

La informacioacuten de ID de usuario predeterminado se eliminaraacute cuando el colector de basura haya recogidoel uacuteltimo objeto AS400 correspondiente al servidor

Utilizacioacuten de una memoria cacheacute de contrasentildeas

La memoria cacheacute de contrasentildeas permite a IBM Toolbox para Java guardar informacioacuten de contrasentildea yde ID de usuario para que no se solicite al usuario dicha informacioacuten cada vez que se establezca unaconexioacuten

Los meacutetodos proporcionados por el objeto AS400 permiten realizar estas tareasv Borrar la memoria cacheacute de contrasentildeas e inhabilitarlav Minimizar el nuacutemero de veces que el usuario debe escribir informacioacuten de inicio de sesioacuten

La memoria cacheacute de contrasentildeas es aplicable a todos los objetos AS400 que representan un sistema IBM identro de una maacutequina virtual Java Java no permite a las maacutequinas virtuales compartir informacioacutenentre siacute por lo que una contrasentildea colocada en la memoria cacheacute en una maacutequina virtual Java no esvisible para otra maacutequina virtual La memoria cacheacute quedaraacute descartada en cuanto el colector de basurahaya recogido el uacuteltimo objeto AS400 El diaacutelogo Inicio de sesioacuten dispone de un recuadro de seleccioacutenque ofrece al usuario la opcioacuten de guardar la contrasentildea en la memoria cacheacute Cuando se construye unobjeto AS400 el programa Java tiene la opcioacuten de suministrar el ID de usuario y la contrasentildea Lascontrasentildeas suministradas en los constructores no se almacenan en la memoria cacheacute

El objeto AS400 proporciona meacutetodos para borrar la memoria cacheacute de contrasentildeas e inhabilitar lamemoria cacheacute de contrasentildeas En la seccioacuten Resumen de solicitudes ID de usuario predeterminado ycolocacioacuten de contrasentildeas en la memoria cacheacute encontraraacute maacutes informacioacuten

Solicitud de identificadores de usuario y contrasentildeas

Si se utiliza la clase AS400 la solicitud de ID de usuario y contrasentildea puede presentarse cuando seestablece la conexioacuten con el servidor La solicitud puede quedar desactivada por el programa Java

Los programas Java pueden desactivar la solicitud de ID de usuario y contrasentildea asiacute como las ventanasde mensajes visualizadas por el objeto AS400 Ello puede ser necesario por ejemplo cuando unaaplicacioacuten se estaacute ejecutando en una pasarela en nombre de muchos clientes Si las solicitudes y losmensajes se visualizan en la maacutequina pasarela el usuario no puede interactuar con las solicitudes Lasaplicaciones de este tipo pueden desactivar toda presentacioacuten de solicitudes utilizando el meacutetodosetGuiAvailable() en el objeto AS400

En Resumen de solicitudes ID de usuario predeterminado y colocacioacuten de contrasentildeas en memoria cacheacuteencontraraacute maacutes informacioacuten

IBM Toolbox para Java 23

Resumen de solicitudes ID de usuario predeterminado y colocacioacuten de contrasentildeas en memoriacacheacute

Los programas Java pueden controlar en queacute momento se presenta la solicitud de ID de usuario ycuaacutendo entra en juego la colocacioacuten de contrasentildeas en la memoria cacheacute La informacioacuten del diaacutelogoInicio de sesioacuten permite establecer el ID de usuario predeterminado y poner la contrasentildea en la memoriacacheacute La tabla que figura a continuacioacuten es un resumen de cuaacutendo se presentan las solicitudes queacuteinformacioacuten se recupera y cuaacutel es la informacioacuten que se establece

En esta tabla se presupone que el programa Java permite el proceso de ID de usuario predeterminado yla colocacioacuten de contrasentildeas en la memoria cacheacute y que se ha marcado el recuadro ID de usuariopredeterminado y el recuadro Guardar contrasentildea en el diaacutelogo Inicio de sesioacuten

Utilice esta tabla para las conexiones de cliente no para la ejecucioacuten de Java en el servidor

Sistemaproporcionado enel constructor

ID de usuarioproporcionado enel constructor

Contrasentildeaproporcionada enel constructor

Se estableceusuariopredeterminado

Contrasentildea enmemoria cacheacutepara ID deusuario

Resultado deutilizar valoresmarcados

Se solicita alusuario el nombredel sistema el IDde usuario y lacontrasentildea El IDde usuariopredeterminadose establece y lacontrasentildea sepone en memoriacacheacute

Siacute Se solicita alusuario el ID deusuario y lacontrasentildea Elnombre delsistema sevisualiza pero nopuede cambiarseEl ID de usuariopredeterminadose establece y lacontrasentildea sepone en memoriacacheacute

24 IBM Toolbox para Java IBM Toolbox para Java

Sistemaproporcionado enel constructor

ID de usuarioproporcionado enel constructor

Contrasentildeaproporcionada enel constructor

Se estableceusuariopredeterminado

Contrasentildea enmemoria cacheacutepara ID deusuario

Resultado deutilizar valoresmarcados

Siacute Siacute Se solicita alusuario lacontrasentildea El IDde usuario sevisualiza y puedecambiarse Elnombre delsistema sevisualiza pero nopuede cambiarseEl ID de usuariopredeterminadono cambia Lacontrasentildea sepone en memoriacacheacute

Siacute Siacute Siacute No se presentaninguna solicitudEl ID de usuariopredeterminadono cambia Lacontrasentildea no sepone en memoriacacheacute

Siacute Se solicita alusuario el nombredel sistema y lacontrasentildea El IDde usuario sevisualiza y puedecambiarseCambiar el ID deusuario nomodifica el ID deusuariopredeterminadoLa contrasentildea sepone en memoriacacheacute

Siacute Siacute Se solicita lacontrasentildea del IDde usuariopredeterminadoEl ID de usuariose visualiza ypuede cambiarseEl nombre delsistema sevisualiza pero nopuede cambiarseLa contrasentildea sepone en memoriacacheacute

IBM Toolbox para Java 25

Sistemaproporcionado enel constructor

ID de usuarioproporcionado enel constructor

Contrasentildeaproporcionada enel constructor

Se estableceusuariopredeterminado

Contrasentildea enmemoria cacheacutepara ID deusuario

Resultado deutilizar valoresmarcados

Siacute Siacute Siacute No se presentaninguna solicitudLa conexioacuten serealiza utilizandoel ID de usuariopredeterminado yla contrasentildea dela memoria cacheacute

Siacute Siacute Siacute No se presentaninguna solicitudLa conexioacuten serealiza como elusuarioespecificadoutilizando lacontrasentildea de lamemoria cacheacute

Siacute Siacute Siacute Siacute No se presentaninguna solicitudLa conexioacuten serealiza como elusuarioespecificadoutilizando lacontrasentildea de lamemoria cacheacute

Siacute Siacute Siacute Siacute No se presentaninguna solicitudLa conexioacuten serealiza como elusuarioespecificado

Clase SecureAS400La clase SecureAS400 permite utilizar un objeto AS400 al enviar o recibir datos cifrados Cuando unobjeto AS400 se comunica con el servidor los datos de usuario (excepto la contrasentildea de usuario) seenviacutean sin cifrar al servidor Por consiguiente los objetos de IBM Toolbox para Java asociados a un objetoAS400 intercambian datos con el servidor por medio de una conexioacuten normal

Si desea utilizar IBM Toolbox para Java para intercambiar datos confidenciales con el servidor puedecifrar los datos mediante SSL (capa de sockets segura) Utilice el objeto SecureAS400 para designar losdatos que desea cifrar Los objetos de IBM Toolbox para Java asociados a un objeto SecureAS400intercambian datos con el servidor por medio de una conexioacuten segura

Encontraraacute maacutes informacioacuten en el tema acerca de Capa de Sockets Segura y Extensioacuten de sockets segurosJava

La clase SecureAS400 es una subclase de la AS400

Puede configurar una conexioacuten de servidor segura creando una instancia de un objeto SecureAS400 delos modos siguientesv SecureAS400(String systemName String userID) le solicita informacioacuten de inicio de sesioacuten

26 IBM Toolbox para Java IBM Toolbox para Java

v SecureAS400(String systemName String userID String password) no le solicita informacioacuten de iniciode sesioacuten

A continuacioacuten figura un ejemplo de coacutemo se utiliza CommandCall para enviar mandatos al servidorutilizando una conexioacuten segura

Cree un objeto AS400 seguro Esta sentencia es la uacutenica que cambia en relacioacuten con el caso no SSLSecureAS400 sys = new SecureAS400(mySystemmyCompanycom)

Cree un objeto de llamada a mandatoCommandCall cmd = new CommandCall(sys myCommand)

Ejecute los mandatos Se establece una conexioacuten segura al ejecutarse el mandato Toda la informacioacuten pasada entre el cliente y el servidor estaacute cifradacmdrun()

Informacioacuten relacionadaJavadoc SecureAS400Javadoc AS400

Clase AS400JPingLa clase AS400JPing de IBM Toolbox para Java permite al programa Java consultar los servidores de hostpara ver queacute servicios estaacuten en ejecucioacuten y queacute puertos estaacuten en servicio

Para consultar los servidores desde una liacutenea de mandatos utilice la clase JPing

La clase AS400JPing proporciona varios meacutetodosv Realizar un ping del servidorv Realizar un ping de un servicio especiacutefico en el servidorv Establecer un objeto PrintWriter en el que desea anotar la informacioacuten de la operacioacuten pingv Establecer el tiempo de espera de la operacioacuten ping

Ejemplo coacutemo se utiliza AS400JPing

El ejemplo siguiente muestra coacutemo utilizar AS400JPing dentro de un programa Java para realizar un pingdel servicio de mandatos remotos

AS400JPing pingObj = new AS400JPing(myAS400 AS400COMMAND false)if (pingObjping())

Systemoutprintln(SATISFACTORIO)else

Systemoutprintln(ANOacuteMALO)

Informacioacuten relacionadaClase AS400JPing

Clase BidiTransformLa clase BidiTransform de IBM Toolbox para Java proporciona transformaciones de disentildeo que hacenposible la conversioacuten de texto bidireccional en formato IBM i (tras convertirlo primero a Unicode) a textobidireccional en formato Java o de formato Java a formato IBM i

Clase AS400BidiTransform

La clase AS400BidiTransform permite llevar a cabo estas accionesv Obtener y establecer el CCSID del sistemav Obtener y establecer el tipo de serie de los datos IBM iv Obtener y establecer el tipo de serie de los datos de Java

IBM Toolbox para Java 27

v Convertir datos de un disentildeo Java a IBM iv Convertir datos de un disentildeo IBM i a Java

Ejemplo coacutemo se utiliza AS400BidiTransform

El ejemplo que sigue muestra coacutemo se puede utilizar la clase AS400BidiTransform para transformar textobidireccional

Datos Javaa disentildeo del sistema

AS400BidiTransform abtabt = new AS400BidiTransform(424)String dst = abttoAS400Layout(alguna serie bidireccional)

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Clase BidiConversionPropertiesLa clase BidiConversionProperties proporciona un conjunto de propiedades que pueden utilizarse paracontrolar la conversioacuten de datos del juego de caracteresInformacioacuten relacionadaDocumentacioacuten java de BidiConversionProperties

Clase CallStackEntryLa clase CallStackEntry representa una entrada en la pila de llamadas de una hebra especiacutefica de untrabajo servidor

Los objetos de este tipo se generan llamando a JobgetCallStack()Informacioacuten relacionadaJavadoc de CallStackEntry

Clases ClusteredHashTableLas clases ClusteredHashTable de IBM Toolbox para Java permiten a los programas Java utilizar tablashash agrupadas en cluacutester de gran disponibilidad para compartir y duplicar datos en almacenamiento nopersistente entre los nodos de un cluacutester

Para utilizar las clases ClusteredHashTable compruebe que puede emplear almacenamiento nopersistente para los datos Los datos duplicados no estaacuten cifrados

Nota la siguiente informacioacuten da por supuesto que se han entendido los conceptos y teacuterminoshabituales de la tecnologiacutea de cluacutester de IBM i Consulte la seccioacuten Tecnologiacutea de cluacutester de IBM i paraobtener detalles

Para utilizar la clase ClusteredHashTable es necesario haber definido y activado un cluacutester en lossistemas Tambieacuten debe iniciar un servidor de tablas hash agrupadas en cluacutester Para obtener maacutesinformacioacuten consulte Configurar cluacutesteres e Interfaces API de tablas hash agrupadas en cluacutester

Los paraacutemetros obligatorios son el nombre del servidor de tablas hash agrupadas en cluacutester y el objetoAS400 que representa el sistema que contiene el servidor de tablas hash agrupadas en cluacutester

Para almacenar datos en un servidor de tablas hash agrupadas en cluacutester necesita un handle de conexioacuteny una clavev Al abrir una conexioacuten el servidor de tablas hash agrupadas en cluacutester asigna el handle de conexioacuten

que debe especificar en las peticiones posteriores efectuadas al servidor de tablas hash agrupadas encluacutester Este handle de conexioacuten solo es adecuado para el objeto AS400 del que se ha creado unainstancia por lo que debe abrir otra conexioacuten si utiliza un objeto AS400 distinto

28 IBM Toolbox para Java IBM Toolbox para Java

v Debe especificar la clave para acceder a los datos de la tabla hash agrupada en cluacutester y cambiar losdatos Las claves duplicadas no estaacuten soportadas

La clase ClusteredHashTable proporciona meacutetodos que permiten llevar a cabo las acciones siguientesv Abrir una conexioacuten con el trabajo servidor de tablas hash agrupadas en cluacutesterv Generar una clave exclusiva para almacenar datos en la tabla hash agrupada en cluacutesterv Cerrar la conexioacuten activa con el trabajo servidor de tablas hash agrupadas en cluacutester

Algunos meacutetodos de la clase ClusteredHashTable utilizan la clase ClusteredHashTableEntry para llevar acabo las acciones siguientesv Obtener una entrada de la tabla hash agrupada en cluacutesterv Almacenar una entrada en la tabla hash agrupada en cluacutesterv Obtener una lista de entradas de la tabla hash agrupada en cluacutester para todos los perfiles de usuario

Ejemplo coacutemo se utiliza ClusteredHashTable

El ejemplo siguiente se ejecuta en el servidor de tablas hash agrupadas en cluacutester denominadoCHTSVR01 Supone que ya hay un cluacutester y un servidor de tablas hash agrupadas en cluacutester activosAbre una conexioacuten genera una clave coloca una entrada utilizando la clave nueva en la tabla hashagrupada en cluacutester obtiene una entrada de la tabla hash agrupada en cluacutester y cierra la conexioacuten

ClusteredHashTableEntry myEntry = null

String myData = new String(Estos son mis datos)Systemoutprintln(Datos que deben almacenarse + myData)

AS400 system = new AS400()

ClusteredHashTable cht = new ClusteredHashTable(systemCHTSVR01)

Abra una conexioacutenchtopen()

Obtenga una clave para la tabla hashbyte[] key = nullkey = chtgenerateKey()

Prepare algunos datos que desee almacenar en la tabla hash ENTRY_AUTHORITY_ANY_USER significa que cualquier usuario puede acceder a la entrada de la tabla hash agrupada en cluacutester DUPLICATE_KEY_FAIL significa que si la clave especificada ya existe la peticioacuten ClusteredHashTableput() no se ejecutaraacute correctamenteint timeToLive = 500myEntry = new ClusteredHashTableEntry(keymyDatagetBytes()timeToLive

ClusteredHashTableEntryENTRY_AUTHORITY_ANY_USERClusteredHashTableEntryDUPLICATE_KEY_FAIL)

Almacene (o coloque) la entrada en la tabla hashchtput(myEntry)

Obtenga una entrada de la tabla hashClusteredHashTableEntry output = chtget(key)

Cierre la conexioacutenchtclose()

La utilizacioacuten de la clase ClusteredHashTable hace que el objeto AS400 se conecte al servidor Paraobtener maacutes informacioacuten consulte Gestioacuten de conexiones

IBM Toolbox para Java 29

Clase CommandCallLa clase CommandCall permite a un programa Java llamar a un mandato IBM i no interactivo

Los resultados del mandato estaacuten disponibles en una lista de objetos AS400Message

La entrada de CommandCall esv La serie del mandato que ha de ejecutarsev El objeto AS400 que representa el sistema que va a ejecutar el mandato

La serie del mandato se puede establecer en el constructor mediante el meacutetodo setCommand() deCommandCall o se puede establecer en el meacutetodo run() Una vez ejecutado el mandato el programa Javapuede emplear el meacutetodo getMessageList() para recuperar los mensajes de IBM i que se hayan producidocomo consecuencia del mandato

La utilizacioacuten de la clase CommandCall hace que el objeto AS400 se conecte al sistema En Gestioacuten deconexiones encontraraacute informacioacuten acerca de coacutemo se gestionan las conexiones

Cuando el programa Java y el mandato de IBM i estaacuten en el mismo servidor el comportamientopredeterminado de IBM Toolbox para Java es consultar la seguridad de la hebra para el mandato en elsistema Si es segura el mandato se ejecuta en la hebra Puede suprimir la consulta en tiempo deejecucioacuten especificando expliacutecitamente la seguridad de la hebra para el mandato con el meacutetodosetThreadSafe()

Ejemplos

En los ejemplos siguientes se muestran varios modos de utilizar la clase CommandCall para ejecutardistintos tipos de mandatos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Ejemplo ejecutar un mandato

El ejemplo siguiente muestra coacutemo se utiliza la clase CommandCall para ejecutar un mandato en elsistema

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de llamada a mandato Este programa establece el mandato para que se ejecute maacutes adelante Puede establecerse aquiacute en el constructorCommandCall cmd = new CommandCall(sys)

Ejecute el mandato CRTLIBcmdrun(CRTLIB MYLIB)

Obtenga la lista de mensajes que contiene el resultado del mandatoAS400Message[] messageList = cmdgetMessageList()

Procese la lista de mensajes

Desconecte puesto que ya ha terminado de enviar mandatos al servidorsysdisconnectService(AS400COMMAND)

Ejemplo ejecutar un mandato especificado por el usuario

30 IBM Toolbox para Java IBM Toolbox para Java

En ldquoEjemplo coacutemo se utiliza CommandCallrdquo en la paacutegina 387 se muestra coacutemo ejecutar un mandatoespecificado por el usuarioInformacioacuten relacionadaJavadoc CommandCallJavadoc AS400MessageJavadoc AS400

Agrupacioacuten de conexionesUtilice las agrupaciones de conexiones para compartir conexiones y gestionar conjuntos (agrupaciones) deconexiones con un sistema IBM i Por ejemplo una aplicacioacuten puede recuperar una conexioacuten de unaagrupacioacuten utilizarla y a continuacioacuten devolverla a la agrupacioacuten para volver a utilizarla

La clase AS400ConnectionPool gestiona una agrupacioacuten de objetos AS400 La claseAS400JDBCConnectionPool representa una agrupacioacuten de AS400JDBCConnections disponibles para suuso por parte de un programa Java como parte del soporte de IBM Toolbox para Java para la API JDBC20 Optional Package La interfaz JDBC ConnectionPool tambieacuten estaacute soportada en la API JDBC 30 queestaacute empaquetada con Java 2 Platform Standard Edition versioacuten 14

Una agrupacioacuten de conexiones de cualquiera de los dos tipos posibles hace un seguimiento del nuacutemerode conexiones que crea Con los meacutetodos heredados de ConnectionPool puede establecer diversaspropiedades de agrupacioacuten de conexiones entre las que se incluyen las siguientesv el nuacutemero maacuteximo de conexiones que una agrupacioacuten puede proporcionarv el tiempo maacuteximo de vida de una conexioacutenv el tiempo maacuteximo de inactividad de una conexioacuten

En teacuterminos de rendimiento la conexioacuten con el servidor es una operacioacuten cara El uso de agrupacionesde conexiones puede mejorar el rendimiento al evitar tiempos de conexioacuten repetidos Por ejemplo creeconexiones cuando cree la agrupacioacuten de conexiones rellenando la agrupacioacuten con conexiones activas(preconectadas) utilizando la clase AS400ConnectionPool En lugar de crear nuevas conexiones puedeutilizar una agrupacioacuten de conexiones para recuperar utilizar devolver y volver a utilizar faacutecilmente losobjetos de conexioacuten

Puede recuperar una conexioacuten mediante AS400ConnectionPool especificando el nombre del sistema el IDde usuario la contrasentildea y (si lo desea) el servicio Para especificar el servicio al que desea conectarutilice las constantes de la clase AS400 (FILE PRINT COMMAND etc)

Tras recuperar y utilizar la conexioacuten las aplicaciones devuelven las conexiones a la agrupacioacuten Es cadaaplicacioacuten la responsable de devolver las conexiones a la agrupacioacuten para que vuelvan a emplearse Si lasconexiones no se devuelven a la agrupacioacuten el tamantildeo de la agrupacioacuten de conexiones sigue creciendo ylas conexiones no se reutilizan

Consulte la seccioacuten Gestioacuten de conexiones para obtener maacutes informacioacuten acerca de coacutemo gestionarcuaacutendo se abre una conexioacuten con el sistema al utilizar las clases AS400ConnectionPool

Ejemplo coacutemo se utiliza AS400ConnectionPool

En ldquoEjemplo coacutemo se utiliza AS400ConnectionPoolrdquo en la paacutegina 389 se muestra coacutemo reutilizar losobjetos AS400Informacioacuten relacionadaJavadoc AS400ConnectionPoolJavadoc AS400

IBM Toolbox para Java 31

Aacuterea de datosLa clase DataArea de IBM Toolbox para Java es una clase base abstracta que representa un objeto aacuterea dedatos de IBM i

Esta clase base tiene cuatro subclases que dan soporte a estos elementos datos de tipo caraacutecter datosdecimales datos loacutegicos y aacutereas de datos locales que contienen datos de tipo caraacutecter

Mediante la clase DataArea se pueden realizar estas tareasv Obtener el tamantildeo del aacuterea de datosv Obtener el nombre del aacuterea de datosv Devolver el objeto de sistema AS400 correspondiente al aacuterea de datosv Renovar los atributos del aacuterea de datosv Establecer el sistema en el que existe el aacuterea de datos

La utilizacioacuten de la clase DataArea hace que el objeto AS400 se conecte al servidor En Gestioacuten deconexiones encontraraacute informacioacuten acerca de coacutemo se gestionan las conexiones

CharacterDataArea

La clase CharacterDataArea representa un aacuterea de datos existente en el servidor que contiene datos detipo caraacutecter Las aacutereas de datos de tipo caraacutecter no disponen de un servicio que permita identificar losdatos con el debido CCSID por lo tanto el objeto aacuterea de datos presupone que el CCSID de los datos esel del usuario En la escritura el objeto aacuterea de datos se convierte de un tipo serie (Unicode) al CCSIDdel usuario antes de que los datos se escriban en el servidor En la lectura el objeto aacuterea de datospresupone que el CCSID de los datos es el del usuario y la conversioacuten se realiza desde dicho CCSID aUnicode antes de devolver la serie al programa Cuando se leen datos del aacuterea de datos la cantidad dedatos leiacutedos viene expresada en el nuacutemero de caracteres no en el nuacutemero de bytes

Mediante la clase CharacterDataArea se pueden realizar estas tareasv Borrar el aacuterea de datos para que solo contenga blancosv Crear en el sistema un aacuterea de datos de tipo caraacutecter utilizando los valores predeterminados de las

propiedadesv Crear un aacuterea de datos de tipo caraacutecter con los atributos especificadosv Suprimir el aacuterea de datos del sistema en el que existev Devolver el nombre de viacutea de acceso de IFS del objeto representado por el aacuterea de datosv Leer la totalidad de los datos contenidos en el aacuterea de datosv Leer una cantidad especificada de datos del aacuterea de datos a partir del desplazamiento 0 o del

desplazamiento que se haya especificadov Establecer el nombre totalmente calificado de la viacutea de acceso del sistema de archivos integrado del

aacuterea de datosv Escribir datos al principio del aacuterea de datosv Escribir una cantidad especificada de datos en el aacuterea de datos a partir del desplazamiento 0 o del

desplazamiento que se haya especificado

DecimalDataArea

La clase DecimalDataArea representa un aacuterea de datos existente en el servidor que contiene datosdecimales

Mediante la clase DecimalDataArea se pueden realizar estas tareasv Borrar el aacuterea de datos para que contenga 00

32 IBM Toolbox para Java IBM Toolbox para Java

v Crear en el sistema un aacuterea de datos decimales utilizando los valores predeterminados de laspropiedades

v Crear un aacuterea de datos decimales con los atributos especificadosv Suprimir el aacuterea de datos del servidor en el que existev Devolver el nuacutemero de diacutegitos que hay en el aacuterea de datos a la derecha de la coma decimalv Devolver el nombre de viacutea de acceso de IFS del objeto representado por el aacuterea de datosv Leer la totalidad de los datos contenidos en el aacuterea de datosv Establecer el nombre totalmente calificado de la viacutea de acceso del sistema de archivos integrado del

aacuterea de datosv Escribir datos al principio del aacuterea de datos

Ejemplo coacutemo se utiliza DecimalDataArea El siguiente ejemplo muestra coacutemo se crea un aacuterea de datosdecimales y coacutemo se escribe en ella

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Establezca una conexioacuten con el servidor MyServerAS400 system = new AS400(MyServer)

Cree un objeto DecimalDataAreaQSYSObjectPathName path = new QSYSObjectPathName(MYLIB MYDATA DTAARA)DecimalDataArea dataArea = new DecimalDataArea(system pathgetPath())

Cree en el servidor el aacuterea de datos decimales utilizando los valores predeterminadosdataAreacreate()

Borre el aacuterea de datosdataAreaclear()

Escriba en el aacuterea de datosdataAreawrite(new BigDecimal(12))

Lea el aacuterea de datosBigDecimal data = dataArearead()

Suprima el aacuterea de datos del servidordataAreadelete()

LocalDataArea

La clase LocalDataArea representa un aacuterea de datos local existente en el servidor En el servidor existe unaacuterea de datos local como aacuterea de datos de tipo caraacutecter pero el aacuterea de datos local tiene algunasrestricciones que deben tenerse en cuenta

El aacuterea de datos local estaacute asociada a un trabajo servidor y no es posible acceder a ella desde otro trabajoPor lo tanto esta aacuterea de datos local no se puede crear ni suprimir Cuando el trabajo servidor finaliza elaacuterea de datos local asociada a dicho trabajo se suprime automaacuteticamente y el objeto LocalDataArea quehace referencia al trabajo deja de ser vaacutelido Tambieacuten es preciso tener presente que las aacutereas de datoslocales tienen un tamantildeo fijo de 1024 caracteres en el servidor

Mediante la clase LocalDataArea se pueden realizar estas tareasv Borrar el aacuterea de datos para que solo contenga blancosv Leer la totalidad de los datos contenidos en el aacuterea de datosv Leer una cantidad especificada de datos del aacuterea de datos a partir del desplazamiento que se haya

especificadov Escribir datos al principio del aacuterea de datosv Escribir una cantidad especificada de datos en el aacuterea de datos escribieacutendose el primer caraacutecter en el

desplazamiento

IBM Toolbox para Java 33

LogicalDataArea

La clase LogicalDataArea representa un aacuterea de datos existente en el servidor que contiene datos loacutegicos

Mediante la clase LogicalDataArea puede realizar estas tareasv Borrar el aacuterea de datos para que contenga falsev Crear un aacuterea de datos de tipo caraacutecter en el servidor utilizando los valores predeterminados de las

propiedadesv Crear un aacuterea de datos de tipo caraacutecter con los atributos especificadosv Suprimir el aacuterea de datos del servidor en el que existev Devolver el nombre de viacutea de acceso de IFS del objeto representado por el aacuterea de datosv Leer la totalidad de los datos contenidos en el aacuterea de datosv Establecer el nombre totalmente calificado de la viacutea de acceso del sistema de archivos integrado del

aacuterea de datosv Escribir datos al principio del aacuterea de datos

DataAreaEvent

La clase DataAreaEvent representa un evento de aacuterea de datos

La clase DataAreaEvent se puede usar con cualquiera de las clases DataArea Mediante la claseDataAreaEvent puede realizar esta tareav Obtener el identificador del evento

DataAreaListener

La clase DataAreaListener proporciona una interfaz que permite recibir eventos de aacuterea de datos

La clase DataAreaListener se puede usar con cualquiera de las clases DataArea Es posible invocar laclase DataAreaListener cuando se lleva a cabo cualquiera de estas accionesv Borrarv Crearv Suprimirv Leerv Escribir

Javadoc DataAreaJavadoc CharacterDataAreaJavadoc DecimalDataAreaJavadoc LocalDataAreaJavadoc LogicalDataAreaJavadoc DataAreaEventJavadoc DataAreaListener

Conversioacuten y descripcioacuten de datosLas clases de conversioacuten de datos proporcionan la posibilidad de convertir datos de tipo caraacutecter ynumeacuterico entre los formatos de IBM i y Java La conversioacuten puede ser necesaria cuando se accede a datosde IBM i desde un programa Java Las clases de conversioacuten de datos soportan la conversioacuten de diversosformatos numeacutericos y entre diversas paacuteginas de coacutedigos EBCDIC y Unicode

Las clases de descripcioacuten de datos se construyen sobre las clases de conversioacuten de datos para convertirtodos los campos de un registro con una sola llamada de meacutetodo La clase RecordFormat permite al

34 IBM Toolbox para Java IBM Toolbox para Java

programa describir los datos que constituyen un objeto DataQueueEntry un paraacutemetro ProgramCall unregistro de un archivo de base de datos al que se accede mediante clases de acceso a nivel de registro ocualquier almacenamiento intermedio de datos del sistema La clase Record permite al programaconvertir el contenido del registro y acceder a los datos por nombre de campo o por iacutendice

Las clases conversoras permiten realizar la conversioacuten entre Java y el sistema BinaryConverter realiza laconversioacuten entre las matrices de bytes Java y los tipos de datos simples Java CharConverter realiza laconversioacuten entre los objetos de tipo serie Java y las paacuteginas de coacutedigos de IBM i Para obtener maacutesinformacioacuten consulte el tema Conversores

Tipos de datos

AS400DataType es una interfaz que define los meacutetodos necesarios para la conversioacuten de datos Unprograma Java utiliza los tipos de datos cuando es necesario convertir fragmentos de datos individualesExisten clases de conversioacuten para los siguientes tipos de datosv Numeacutericov Texto (tipo caraacutecter)v Compuesto (numeacuterico y texto)

Ejemplo coacutemo se utilizan las clases AS400DataType

El ejemplo siguiente muestra coacutemo utilizar las clases AS400DataType con ProgramCall tanto paraproporcionar datos para los paraacutemetros de programa como para interpretar los datos devueltos en losparaacutemetros de programa

Ejemplo coacutemo se utilizan las clases AS400DataType con ProgramCall

Conversioacuten que especifica un formato de registro

IBM Toolbox para Java proporciona clases sobre las que construir las clases de tipos de datos quepermiten que los datos se conviertan de registro en registro en vez de convertirse de campo en campoPor ejemplo supongamos que un programa Java lee datos de salida de una cola de datos El objeto colade datos devuelve una matriz de bytes de datos de IBM i al programa Java Esta matriz puede enpotencia contener muchos tipos de datos de IBM i La aplicacioacuten puede convertir de uno en uno loscampos de la matriz de bytes utilizando las clases de tipos de datos o bien el programa puede crear unformato de registro que describa los campos en la matriz de bytes Luego ese registro realiza laconversioacuten

La conversioacuten de formato de registro puede ser de utilidad cuando se estaacute trabajando con datos de lallamada a programa de la cola de datos y de las clases de acceso a nivel de registro La entrada y lasalida de estas clases son matrices de bytes que pueden contener muchos campos de diversos tipos Losconversores de formato de registro pueden facilitar la conversioacuten de estos datos entre el formato de IBM iy el formato Java

La conversioacuten mediante el formato de registro emplea tres clasesv Las clases FieldDescription identifican un campo o paraacutemetro con un tipo de datos y un nombrev Una clase RecordFormat describe un grupo de camposv Una clase Record une la descripcioacuten de un registro (en la clase RecordFormat) con los datos realesv Una clase LineDataRecordWriter escribe un registro en un objeto OutputStream en formato de datos de

liacutenea

Ejemplos coacutemo se utilizan las clases de conversioacuten de formato de registro

IBM Toolbox para Java 35

Los ejemplos siguientes ilustran coacutemo se utilizan las clases de conversioacuten de formato de registro con lascolas de datos

Coacutemo se utilizan las clases Record y RecordFormat para poner datos en una cola

Coacutemo se utilizan las clases FieldDescription RecordFormat y RecordJavadoc AS400DataType

Clases de conversioacuten para datos numeacutericos

Las clases de conversioacuten para datos numeacutericos convierten los datos numeacutericos del formato utilizado enIBM i (denominado formato del sistema en la tabla siguiente) al formato Java

En la tabla siguiente se muestran los tipos de datos soportados

Tipo numeacuterico Descripcioacuten

AS400Bin2 La conversioacuten se realiza entre un nuacutemero de dos bytescon signo con el formato del sistema y un objeto ShortJava

AS400Bin4 La conversioacuten se realiza entre un nuacutemero de cuatro bytescon signo con el formato del sistema y un objeto IntegerJava

AS400ByteArray La conversioacuten se realiza entre dos matrices de bytes Esde utilidad porque el conversor rellena con ceroscorrectamente y rellena con datos el almacenamientointermedio destino

AS400Float4 La conversioacuten se realiza entre un nuacutemero de comaflotante de cuatro bytes con signo con el formato delsistema y un objeto Float Java

AS400Float8 La conversioacuten se realiza entre un nuacutemero de comaflotante de ocho bytes con signo con el formato delsistema y un objeto Double Java

AS400PackedDecimal La conversioacuten se realiza entre un nuacutemero decimalempaquetado con el formato del sistema y un objetoBigDecimal Java

AS400UnsignedBin2 La conversioacuten se realiza entre un nuacutemero de dos bytessin signo con el formato del sistema y un objeto IntegerJava

AS400UnsignedBin4 La conversioacuten se realiza entre un nuacutemero de cuatro bytessin signo con el formato del sistema y un objeto LongJava

AS400ZonedDecimal La conversioacuten se realiza entre un nuacutemero decimal conzona con el formato del sistema y un objeto BigDecimalJava

Ejemplos

En los ejemplos que siguen se muestran conversiones de datos de tipo numeacuterico con el formato delsistema a un objeto int Java

Ejemplo realizar una conversioacuten del formato del sistema a un objeto int Java Cree un almacenamiento intermedio que contenga el tipo de datos del sistema Supongamos que el almacenamiento intermedio se rellena con datos numeacutericos con el formato del sistema procedentes de colas de datos llamadas a programa etc

36 IBM Toolbox para Java IBM Toolbox para Java

byte[] data = new byte[100]

Cree un conversor para este tipo de datos del sistemaAS400Bin4 bin4Converter = new AS400Bin4()

Realice la conversioacuten del tipo del sistema al objeto Java El nuacutemero empieza al principio del almacenamiento intermedioInteger intObject = (Integer) bin4ConvertertoObject(data0)

Extraiga el tipo Java simple del objeto Javaint i = intObjectintValue()

Ejemplo realizar la conversioacuten de un objeto int Java al formato del sistema Cree un objeto Java que contenga el valor que se ha de convertirInteger intObject = new Integer(22)

Cree un conversor para el tipo de datos del sistemaAS400Bin4 bin4Converter = new AS400Bin4()

Realice la conversioacuten del objeto Java al tipo de datos del sistemabyte[] data = bin4ConvertertoBytes(intObject)

Averiguumle cuaacutentos bytes del almacenamiento intermedio se rellenaron con el valor del sistemaint length = bin4ConvertergetByteLength()

Conversioacuten de texto

Los datos de tipo caraacutecter se convierten mediante la clase AS400Text de IBM Toolbox para Java Esta clasehace que los datos de tipo caraacutecter que tienen la paacutegina de coacutedigos y el juego de caracteres (CCSID)EBCDIC se conviertan a Unicode

Al construir el objeto AS400Text el programa Java especifica la longitud de la serie que se debe convertirasiacute como el CCSID o la codificacioacuten del servidor Se supone que el CCSID del programa Java es Unicode13488 El meacutetodo toBytes() hace que el formato Java se convierta en una matriz de bytes en formato deIBM i El meacutetodo toObject() hace que una matriz de bytes en formato IBM i se convierta al formato Java

La clase AS400BidiTransform proporciona transformaciones de disentildeo que hacen posible la conversioacuten detexto bidireccional en formato de IBM i (tras convertirlo primero a Unicode) a texto bidireccional enformato Java o de formato Java a formato de IBM i La conversioacuten predeterminada se basa en el CCSIDdel trabajo Para modificar la direccioacuten y el formato del texto especifique BidiStringType Tenga encuenta que cuando los objetos IBM Toolbox para Java llevan a cabo la conversioacuten internamente como enla clase DataArea los objetos tienen un meacutetodo para cambiar el tipo de serie Por ejemplo la claseDataArea tiene el meacutetodo addVetoableChangeListener() que se puede especificar para escuchar cambiosde veto a determinadas propiedades entre ellas el tipo de serie

Ejemplo convertir datos de texto

En el ejemplo siguiente se supone que un objeto DataQueueEntry devuelve un texto en EBCDIC Elejemplo convierte los datos EBCDIC a Unicode para que el programa Java pueda utilizarlos

Supongamos que ya se ha realizado el trabajo de configuracioacuten de la cola de datos para recuperar el texto del sistema y los datos se han colocado en el siguiente almacenamiento intermedioint textLength = 100byte[] data = new byte[textLength]

Cree un conversor para el tipo de datos del sistema Observe que se construye un conversor predeterminado Este conversor supone que la paacutegina de coacutedigos

EBCDIC de IBM i coincide con el entorno nacional del cliente Si ello no corresponde a la realidad el programa Java puede especificar expliacutecitamente el CCSID de

IBM Toolbox para Java 37

EBCDIC que se debe utilizar Sin embargo se recomienda especificar un CCSID cuando sea posible (consulte las notas siguientes)AS400Text textConverter = new AS400Text(textLength)

Nota si lo desea puede crear un conversor para un CCSID especiacutefico Utilice un objeto AS400 por si el programa se ejecuta como un cliente proxy de IBM Toolbox para Javaint ccsid = 37AS400 system = Objeto AS400AS400Text textConverter = new AS400Text(textLength ccsid system)

Nota tambieacuten puede crear un conversor solo con el objeto AS400 Este conversor supone que la paacutegina de coacutedigos de IBM i coincide con el CCSID devuelto por el objeto AS400AS400Text textConverter = new AS400Text(textLength system)

Convierta los datos de EBCDIC a Unicode Si la longitud del objeto AS400Text es superior al nuacutemero de caracteres convertidos la serie (String) resultante se rellenaraacute con blancos hasta la longitud especificadaString javaText = (String) textConvertertoObject(data)

Informacioacuten relacionadaJavadoc AS400TextJavadoc AS400BidiTransformJavadoc BidiStringType

Clases de conversioacuten para tipos compuestos

Este tema describe las clases de conversioacuten de IBM Toolbox para Java para tipos compuestosv AS400Array - Permite al programa Java trabajar con una matriz de tipos de datosv AS400Structure - Permite al programa Java trabajar con una estructura cuyos elementos son tipos de

datos

Ejemplo convertir tipos de datos compuestos

En el ejemplo que sigue se muestra la conversioacuten desde una estructura Java a una matriz de bytes ycoacutemo se realiza la conversioacuten inversa El ejemplo presupone que se emplea el mismo formato de datostanto para el enviacuteo como para la recepcioacuten de los datos

Cree una estructura de tipos de datos que se corresponda con una estructura que contiene - un nuacutemero de cuatro bytes - cuatro bytes de relleno - un nuacutemero de ocho bytes - 40 caracteresAS400DataType[] myStruct =

new AS400Bin4()new AS400ByteArray(4)new AS400Float8()new AS400Text(40)

Cree un objeto conversioacuten que utilice la estructuraAS400Structure myConverter = new AS400Structure(myStruct)

Cree el objeto Java que contiene los datos que deben enviarse al servidorObject[] myData =

new Integer(88) el nuacutemero de cuatro bytesnew byte[0] el relleno (permite rellenar con 0 el objeto conversioacuten)new Double(2345) el nuacutemero de coma flotante de ocho bytesEsa es mi estructura la serie de caracteres

38 IBM Toolbox para Java IBM Toolbox para Java

Haga que el objeto Java se convierta en matriz de bytesbyte[] myAS400Data = myConvertertoBytes(myData)

Enviacutee la matriz de bytes al servidor Obtenga los datos nuevamente del servidor Los datos devueltos seraacuten asimismo una matriz de bytes

Convierta los datos devueltos desde IBM i al formato JavaObject[] myRoundTripData = (Object[])myConvertertoObject(myAS400Data0)

Saque el tercer objeto de la estructura Es el objeto doubleDouble doubleObject = (Double) myRoundTripData[2]

Extraiga el tipo Java simple del objeto Javadouble d = doubleObjectdoubleValue()

Javadoc AS400ArrayJavadoc AS400Structure

Clases de descripcioacuten de campo

Las clases de descripciones de campo permiten al programa Java describir el contenido de un campo oun paraacutemetro con un tipo de datos y una serie que contenga el nombre del campo El programa si estaacutetrabajando con datos de acceso a nivel de registro puede asimismo especificar cualquier palabra clave deespecificacioacuten de definicioacuten de datos (DDS) IBM i que describa el campo con maacutes detalle

Clases de Descripcioacuten de campo

Las clases de descripcioacuten de campo son las siguientesv BinaryFieldDescriptionv CharacterFieldDescriptionv DateFieldDescriptionv DBCSEitherFieldDescriptionv DBCSGraphicFieldDescriptionv DBCSOnlyFieldDescriptionv DBCSOpenFieldDescriptionv FloatFieldDescriptionv HexFieldDescriptionv PackedDecimalFieldDescriptionv TimeFieldDescriptionv TimestampFieldDescriptionv ZonedDecimalFieldDescription

Ejemplo crear descripciones de campo

En el ejemplo siguiente se supone que las entradas existentes en una cola de datos tienen el mismoformato Cada entrada tiene un nuacutemero de mensaje (AS400Bin4) una indicacioacuten de la hora (8 caracteres)y un texto de mensaje (50 caracteres) que puede describir con descripciones de campo

Cree una descripcioacuten de campo para los datos numeacutericos Observe que utiliza el tipo de datos AS400Bin4 Tambieacuten denomina el campo para que sea posible acceder a eacutel por el nombre en la clase de registroBinaryFieldDescription bfd = new BinaryFieldDescription(new AS400Bin4() msgNumber)

Cree una descripcioacuten de campo para los datos de tipo caraacutecter Observe que utiliza el tipo de datos AS400Text Tambieacuten denomina el campo para que sea posible

IBM Toolbox para Java 39

acceder a eacutel por el nombre en la clase de registroCharacterFieldDescription cfd1 = new CharacterFieldDescription(new AS400Text(8) msgTime)

Cree una descripcioacuten de campo para los datos de tipo caraacutecter Observe que utiliza el tipo de datos AS400Text Tambieacuten denomina el campo para que sea posible acceder a eacutel por el nombre en la clase de registroCharacterFieldDescription cfd2 = new CharacterFieldDescription(new AS400Text(50) msgText)

Ahora puede agrupar las descripciones de campo en una instancia de la clase RecordFormat Para vercoacutemo antildeadir las descripciones de campo a un objeto RecordFormat vea el ejemplo de la paacutegina siguiente

ldquoClase RecordFormatrdquo

Clase RecordFormat

La clase RecordFormat de IBM Toolbox para Java permite al programa Java describir un grupo decampos o paraacutemetros Un objeto Record contiene los datos descritos por un objeto RecordFormat Si elprograma utiliza clases de acceso a nivel de registro la clase RecordFormat tambieacuten permite al programaespecificar descripciones para campos clave

Un objeto RecordFormat contiene un conjunto de descripciones de campo El acceso a la descripcioacuten decampo se puede realizar por iacutendice o por nombre En la clase RecordFormat hay meacutetodos que permitenrealizar estas tareasv Antildeadir descripciones de campo al formato de registrov Antildeadir descripciones de campo de clave al formato de registrov Recuperar descripciones de campo del formato de registro por iacutendice o por nombrev Recuperar descripciones de campo de clave del formato de registro por iacutendice o por nombrev Recuperar los nombres de los campos que constituyen el formato de registrov Recuperar los nombres de los campos de clave que constituyen el formato de registrov Recuperar el nuacutemero de campos existentes en el formato de registrov Recuperar el nuacutemero de campos de clave existentes en el formato de registrov Crear un objeto Record basado en este formato de registro

Ejemplo antildeadir descripciones de campo a un formato de registro

En el ejemplo siguiente se antildeade a un formato de registro las descripciones de campo creadas en elejemplo de descripcioacuten de campo

Cree un objeto formato de registro despueacutes relleacutenelo con descripciones de campoRecordFormat rf = new RecordFormat()rfaddFieldDescription(bfd)rfaddFieldDescription(cfd1)rfaddFieldDescription(cfd2)

Para ver coacutemo crear un registro a partir del formato de registro vea el ejemplo de la paacutegina siguiente

ldquoClase RecordrdquoJavadoc RecordFormat

Clase Record

La clase de registro de IBM Toolbox para Java permite al programa Java procesar los datos descritos porla clase de formato de registro

La conversioacuten de datos se realiza entre matrices de bytes que contienen datos del servidor y objetos JavaEn la clase registro hay meacutetodos que permiten realizar estas tareas

40 IBM Toolbox para Java IBM Toolbox para Java

v Recuperar el contenido de un campo por iacutendice o por nombre como objeto Javav Recuperar el nuacutemero de campos del registrov Establecer el contenido de un campo por iacutendice o por nombre con un objeto Javav Recuperar el contenido del registro como datos del servidor en una matriz de bytes o en una corriente

de datos de salidav Establecer el contenido del registro desde una matriz de bytes o una corriente de datos de entradav Convertir el contenido del registro en una serie (String)

Ejemplo leer un registro

En el ejemplo siguiente se utiliza el formato de registro creado en el ejemplo de formato de registro Supongamos que ya se ha realizado el trabajo de configuracioacuten de la cola de datos Ahora debe leerse un registro de la cola de datosDataQueueEntry dqe = dqread()

Los datos de la cola de datos estaacuten ahora en una entrada de cola de datos Obtenga los datos de la entrada de cola de datos y poacutengalos en el registro Obtenemos un registro predeterminado del objeto de formato de registro y lo inicializamos con los datos de la entrada de cola de datosRecord dqRecord = rfgetNewRecord(dqegetData())

Ahora que los datos estaacuten en el registro saque los datos de un campo a razoacuten de un campo cada vez convirtiendo los datos a medida que se vayan eliminando El resultado son los datos de un objeto Java que ahora el programa puede procesarInteger msgNumber = (Integer) dqRecordgetField(msgNumber)String msgTime = (String) dqRecordgetField(msgTime)String msgText = (String) dqRecordgetField(msgText)

Informacioacuten relacionadaJavadoc Record

Recuperacioacuten del contenido de un campo

Para recuperar el contenido de un objeto Record puede hacer que el programa Java obtenga los camposde uno en uno o que obtenga todos los campos a la vez

El meacutetodo getField() de la clase Record permite recuperar un campo individual por nombre o por iacutendiceEl meacutetodo getFields() permite recuperar la totalidad de los campos como Object[]

El programa Java debe hacer que el objeto Object (o un elemento de Object[]) devuelto se conviertatemporalmente al objeto Java adecuado para el campo recuperado La tabla que figura a continuacioacutenmuestra el objeto Java adecuado al que se ha de convertir temporalmente en funcioacuten del tipo de campo

Tipo de campo (DDS) Tipo de campo (FieldDescription) Objeto Java

BINARIO (B) longitud lt= 4 BinaryFieldDescription Short

BINARIO (B) longitud gt= 5 BinaryFieldDescription Integer

CARAacuteCTER (A) CharacterFieldDescription String

Cualquier DBCS (E) DBCSEitherFieldDescription String

DBCS graacutefico (G) DBCSGraphicFieldDescription String

Solo DBCS (J) DBCSOnlyFieldDescription String

DBCS abierto (O) DBCSOpenFieldDescription String

FECHA (L) DateFieldDescription String

FLOTANTE (F) precisioacuten simple FloatFieldDescription Float

FLOTANTE (F) precisioacuten doble FloatFieldDescription Double

IBM Toolbox para Java 41

Tipo de campo (DDS) Tipo de campo (FieldDescription) Objeto Java

HEXADECIMAL (H) HexFieldDescription byte[]

DECIMAL EMPAQUETADO (P) PackedDecimalFieldDescription BigDecimal

HORA (T) TimeDecimalFieldDescription String

INDICACIOacuteN DE LA HORA (Z) TimestampDecimalFieldDescription String

DECIMAL CON ZONA (P) ZonedDecimalFieldDescription BigDecimal

Informacioacuten relacionadaJavadoc Record

Establecimiento del contenido de un campo

Para establecer el contenido de un objeto Record utilice el meacutetodo setField() en el programa Java

El programa Java debe especificar el objeto Java adecuado para el campo que se va a establecer La tablaque figura a continuacioacuten muestra el objeto Java adecuado para cada tipo de campo posible

Tipo de campo (DDS) Tipo de campo (FieldDescription) Objeto Java

BINARIO (B) longitud lt= 4 BinaryFieldDescription Short

BINARIO (B) longitud gt= 5 BinaryFieldDescription Integer

CARAacuteCTER (A) CharacterFieldDescription String

Cualquier DBCS (E) DBCSEitherFieldDescription String

DBCS graacutefico (G) DBCSGraphicFieldDescription String

Solo DBCS (J) DBCSOnlyFieldDescription String

DBCS abierto (O) DBCSOpenFieldDescription String

FECHA (L) DateFieldDescription String

FLOTANTE (F) precisioacuten simple FloatFieldDescription Float

FLOTANTE (F) precisioacuten doble FloatFieldDescription Double

HEXADECIMAL (H) HexFieldDescription byte[]

DECIMAL EMPAQUETADO (P) PackedDecimalFieldDescription BigDecimal

HORA (T) TimeDecimalFieldDescription String

INDICACIOacuteN DE LA HORA (Z) TimestampDecimalFieldDescription String

DECIMAL CON ZONA (P) ZonedDecimalFieldDescription BigDecimal

Informacioacuten relacionadaJavadoc Record

Clase LineDataRecordWriter

La clase LineDataRecordWriter escribe los datos de registro en formato de datos de liacutenea en un objetoOutputStream La clase convierte los datos en bytes utilizando el CCSID especificado El formato deregistro asociado al registro determina el formato de los datos

LineDataRecordWriter

La utilizacioacuten de LineDataRecordWriter requiere que se hayan establecido los siguientes atributos deformato de registrov ID de formato de registro

42 IBM Toolbox para Java IBM Toolbox para Java

v Tipo de formato de registro

Junto con las clases Record o RecordFormat la clase LineDataRecordWriter toma un registro comoentrada para el meacutetodo writeRecord() (El registro toma RecordFormat como entrada cuando se crea unainstancia del mismo)

La clase LineDataRecordWriter proporciona meacutetodos que permiten llevar a cabo estas accionesv Obtener el CCSIDv Obtener el nombre de la codificacioacutenv Escribir los datos de registro en formato de datos de liacutenea en un objeto OutputStream

Ejemplo coacutemo se utiliza la clase LineDataRecordWriter

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

En el ejemplo siguiente se muestra un modo de emplear la clase LineDataRecordWriter para escribir unregistro

Ejemplo de coacutemo se utiliza la clase LineDataRecordWritertry

Cree un CCSIDccsid_ = system_getCcsid()

Cree una cola de salida e indique que los datos del archivo en spool sean LINEOutputQueue outQ = new OutputQueue(system_ QSYSLIBRLPLIBLIBLDRWOUTQ)PrintParameterList parms = new PrintParameterList()parmssetParameter(PrintObjectATTR_PRTDEVTYPE LINE)

Inicialice el formato de registro para escribir datosRecordFormat recfmt = initializeRecordFormat()

Cree un registro y asigne datos para imprimirRecord record = new Record(recfmt)createRecord(record)

SpooledFileOutputStream os = nulltry

Cree el archivo en spool de salida para contener los datos de registroos = new SpooledFileOutputStream(system_ parms null outQ)

catch (Exception e) Systemoutprintln(Se ha producido un error al crear el archivo en spool)eprintStackTrace()

Cree el transcriptor de registro de datos de liacuteneaLineDataRecordWriter ldwldw = new LineDataRecordWriter(os ccsid_ system_)

Escriba el registro de datosldwwriteRecord(record)

Cierre el objeto OutputStreamosclose()

catch(Exception e)

failed(e Se ha producido una excepcioacuten)

Javadoc LineDataRecordWriter

IBM Toolbox para Java 43

Javadoc RecordJavadoc RecordFormat

Colas de datosLas clases DataQueue permiten al programa Java interactuar con las colas de datos del servidor

Las colas de datos de IBM i tienen las caracteriacutesticas siguientesv La cola de datos permite agilizar las comunicaciones entre trabajos Por lo tanto es un excelente

procedimiento para sincronizar los trabajos y pasar datos entre ellosv Muchos trabajos pueden acceder simultaacuteneamente a las colas de datosv Los mensajes pueden tener un formato libre en una cola de datos Los campos no son obligatorios

como en los archivos de base de datosv La cola de datos puede utilizarse tanto para procesos siacutencronos como asiacutencronosv En una cola de datos los mensajes pueden ordenarse de varias maneras

ndash Uacuteltimo en entrar primero en salir (LIFO) El uacuteltimo mensaje (el maacutes reciente) colocado en la cola dedatos es el primer mensaje que se saca de ella

ndash Primero en entrar primero en salir (FIFO) El primer mensaje (el maacutes antiguo) colocado en la cola dedatos es el primer mensaje que se saca de ella

ndash Por clave Cada mensaje de la cola de datos tiene una clave asociada a eacutel Para poder sacar unmensaje de la cola de datos es preciso especificar la clave asociada al mismo

Las clases de cola de datos proporcionan un conjunto completo de interfaces que permiten acceder a lascolas de datos del servidor desde el programa Java Es un excelente meacutetodo de comunicacioacuten entre losprogramas Java y los programas del servidor escritos en cualquier lenguaje de programacioacuten

Cada objeto de cola de datos tiene como paraacutemetro obligatorio el objeto AS400 que representa el servidorque tiene la cola de datos o donde se debe crear la cola de datos

La utilizacioacuten de las clases de cola de datos hace que el objeto AS400 se conecte al servidor En Gestioacutende conexiones encontraraacute informacioacuten acerca de coacutemo se gestionan las conexiones

Cada objeto cola de datos requiere el nombre de viacutea de acceso del sistema de archivos integrado de lacola de datos El tipo correspondiente a la cola de datos es DTAQ En Nombres de viacutea de acceso delsistema de archivos integrado puede encontrar maacutes informacioacuten

Colas de datos secuenciales y por clave

Las clases de cola de datos dan soporte a colas de datos secuenciales y por claves

Los meacutetodos comunes a los dos tipos de colas estaacuten en la clase BaseDataQueue La clase DataQueueampliacutea la clase BaseDataQueue para completar la implementacioacuten de las colas de datos secuenciales Laclase KeyedDataQueue ampliacutea la clase BaseDataQueue para completar la implementacioacuten de las colas dedatos por clave

Cuando se leen de una cola de datos los datos se colocan en un objeto DataQueueEntry Este objetocontiene los datos de los dos tipos de colas de datos las que son por clave y las secuenciales Los datosadicionales disponibles cuando se leen de una cola de datos por clave se colocan en un objetoKeyedDataQueueEntry que ampliacutea la clase DataQueueEntry

Las clases de cola de datos no alteran los datos que se escriben en la cola de datos del servidor o se leende ella El programa Java debe dar el formato correcto a los datos Las clases de conversioacuten de datosproporcionan meacutetodos para convertir los datos

44 IBM Toolbox para Java IBM Toolbox para Java

Ejemplo coacutemo se utiliza DataQueue y DataQueueEntry

En el ejemplo que sigue se crea un objeto DataQueue se leen datos del objeto DataQueueEntry y luego selleva a cabo la desconexioacuten del sistema

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree el objeto DataQueueDataQueue dq = new DataQueue(sys QSYSLIBMYLIBLIBMYQUEUEDTAQ)

Lea datos de la colaDataQueueEntry dqData = dqread()

Obtenga datos del objeto DataQueueEntrybyte[] data = dqDatagetData()

Procese los datos

Desconecte puesto que ya ha terminado de utilizar las colas de datossysdisconnectService(AS400DATAQUEUE)

Informacioacuten relacionadaJavadoc BaseDataQueueJavadoc DataQueueJavadoc KeyedDataQueueJavadoc DataQueueEntryJavadoc KeyedDataQueueEntry

Colas de datos secuenciales

Las entradas existentes en una cola de datos secuencial del servidor se eliminan por orden FIFO (primeroen entrar primero en salir) o LIFO (uacuteltimo en entrar primero en salir)

Las clases BaseDataQueue y DataQueue proporcionan los siguientes meacutetodos para trabajar con las colasde datos secuencialesv El meacutetodo create que permite crear una cola de datos en el servidor El programa Java debe especificar

el tamantildeo maacuteximo de una entrada en la cola de datos El programa Java puede especificaropcionalmente paraacutemetros de cola de datos (FIFO frente a LIFO guardar informacioacuten de remitenteespecificar informacioacuten de autorizacioacuten forzar en disco y proporcionar una descripcioacuten de cola)cuando se crea la cola

v El meacutetodo peek que permite echar una mirada raacutepida a una entrada en la cola de datos sin eliminardicha entrada de la cola El programa Java puede esperar o devolver inmediatamente si en estemomento no hay ninguna entrada en la cola

v El meacutetodo read que permite leer una entrada quitaacutendola de la cola El programa Java puede esperar odevolver inmediatamente si no hay ninguna entrada disponible en la cola

v El meacutetodo write que permite escribir una entrada en la colav El meacutetodo clear que permite borrar todas las entradas de la colav El meacutetodo delete que permite suprimir la cola

La clase BaseDataQueue proporciona meacutetodos adicionales para recuperar los atributos de la cola dedatos

IBM Toolbox para Java 45

Ejemplos trabajar con colas de datos secuenciales

En los siguientes ejemplos de cola de datos secuencial el productor pone elementos en una cola de datosy el consumidor saca los elementos de la cola y los procesa

ldquoEjemplo coacutemo se utilizan las clases DataQueue para poner datos en una colardquo en la paacutegina 403

ldquoEjemplo coacutemo se utilizan las clases DataQueue para leer entradas en una cola de datosrdquo en lapaacutegina 406

Javadoc BaseDataQueueJavadoc DataQueue

Colas de datos por clave

Las clases BaseDataQueue y KeyedDataQueue proporcionan meacutetodos para trabajar con colas de datos porclavev El meacutetodo create que permite crear una cola de datos por clave en el sistema El programa Java debe

especificar la longitud de la clave y el tamantildeo maacuteximo de una entrada en la cola El programa Javapuede especificar opcionalmente informacioacuten de autorizacioacuten guardar informacioacuten de remitente forzaren disco y proporcionar una descripcioacuten de cola

v El meacutetodo peek que permite echar una mirada raacutepida a una entrada en funcioacuten de la claveespecificada sin eliminar la entrada de la cola El programa Java puede esperar o devolverinmediatamente si en la cola no hay actualmente ninguna entrada que coincida con los criterios de laclave

v El meacutetodo read que permite leer una entrada en funcioacuten de la clave especificada quitaacutendola de la colaEl programa Java puede esperar o devolver inmediatamente si en la cola no hay ninguna entradadisponible que coincida con los criterios de la clave

v El meacutetodo write que permite escribir una entrada por clave en la colav El meacutetodo clear que permite borrar todas las entradas o solo las que coincidan con una clave

especificadav El meacutetodo delete que permite suprimir la cola

Las clases BaseDataQueue y KeyedDataQueue proporcionan asimismo meacutetodos adicionales que permitenrecuperar los atributos de la cola de datos

Ejemplos trabajar con colas de datos por clave

En los siguientes ejemplos de cola de datos por clave el productor pone elementos en una cola de datosy el consumidor saca los elementos de la cola y los procesa

ldquoEjemplo coacutemo se utiliza KeyedDataQueuerdquo en la paacutegina 412

ldquoEjemplo coacutemo se utilizan las clases KeyedDataQueue para leer entradas de una cola de datosrdquo enla paacutegina 415

Javadoc BaseDataQueueJavadoc KeyedDataQueue

Certificados digitalesLos certificados digitales son sentencias con firma digital utilizadas para las transacciones protegidas enInternet

Para establecer una conexioacuten segura utilizando SSL (capa de sockets segura) se requiere un certificadodigital

46 IBM Toolbox para Java IBM Toolbox para Java

Los certificados digitales constan de estos elementosv La clave puacuteblica de cifrado del usuariov El nombre y la direccioacuten del usuariov La firma digital de una autoridad certificadora (CA) de terceros La firma de la autoridad garantiza

que el usuario es una entidad de confianzav La fecha de emisioacuten del certificadov La fecha de caducidad del certificado

Como administrador de un servidor protegido puede antildeadir al servidor una clave de raiacutez de confianzade una autoridad certificadora Esto quiere decir que el servidor se fiaraacute de cualquier persona quedisponga de un certificado procedente de esa determinada autoridad certificadora

Los certificados digitales ofrecen tambieacuten el cifrado garantizando una transferencia segura de los datosmediante una clave privada de cifrado

Es posible crear certificados digitales con la herramienta javakey (Encontraraacute maacutes informacioacuten sobre

javakey y la seguridad Java en la paacutegina sobre seguridad Java de Sun Microsystems Inc ) IBMToolbox para Java tiene clases que administran certificados digitales en el sistema

Las clases AS400Certificate proporcionan meacutetodos para gestionar certificados X509 ASN1 codificados Seproporcionan clases para realizar estas tareasv Obtener y establecer datos de certificadosv Listar certificados por lista de validacioacuten o perfil de usuariov Gestionar certificados por ejemplo antildeadir un certificado a un perfil de usuario o suprimir un

certificado de una lista de validacioacuten

La utilizacioacuten de una clase de certificado hace que el objeto AS400 se conecte al servidor En Gestioacuten deconexiones encontraraacute informacioacuten acerca de coacutemo se gestionan las conexiones

En el servidor los certificados pertenecen a una lista de validacioacuten o a un perfil de usuariov La clase AS400CertificateUserProfileUtil tiene meacutetodos para gestionar certificados en un perfil de

usuariov La clase AS400CertificateVldlUtil tiene meacutetodos para gestionar los certificados de una lista de

validacioacuten

Para utilizar AS400CertificateUserProfileUtil y AS400CertificateVldlUtil es necesario instalar la opcioacuten 34del sistema operativo base (Gestor de Certificados Digitales) Estas dos clases ampliacutean la claseAS400CertificateUtil que es una clase base abstracta que define meacutetodos que son comunes a las dossubclases

La clase AS400Certificate proporciona meacutetodos para leer y escribir datos de certificado El acceso a losdatos se realiza en forma de matriz de bytes El paquete JavaSecurity de la maacutequina virtual Java 12proporciona clases que permiten obtener y establecer campos individuales del certificado

Lista de certificados

Para obtener una lista de certificados el programa Java debe llevar a cabo estas tareas1 Crear un objeto AS4002 Construir el objeto certificado correcto Los objetos que se utilizan para listar certificados en un perfil

de usuario (AS400CertificateUserProfileUtil) son distintos de los utilizados para listar certificados enuna lista de validacioacuten (AS400CertificateVldlUtil)

IBM Toolbox para Java 47

3 Crear criterios de seleccioacuten basados en los atributos de certificado La clase AS400CertificateAttributecontiene atributos que se utilizan como criterios de seleccioacutenUno o varios objetos atributo definen loscriterios que deben satisfacerse para poder antildeadir un certificado a la lista Por ejemplo una listapodriacutea contener uacutenicamente certificados para un determinado usuario u organizacioacuten

4 Crear un espacio de usuario en el servidor y poner el certificado en el espacio de usuario Unaoperacioacuten de listar puede generar una gran cantidad de datos Para que un programa Java puedarecuperar los datos primero es necesario colocarlos en un espacio de usuario Utilice el meacutetodolistCertificates() para colocar los certificados en el espacio de usuario

5 Utilice el meacutetodo getCertificates() de AS400CertificateUtil para recuperar certificados del espacio deusuario

Ejemplo listar certificados digitales

El ejemplo que figura a continuacioacuten lista certificados de una lista de validacioacuten Solo lista los certificadospertenecientes a una determinada persona

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree un objeto AS400 Los certificados estaacuten en este sistemaAS400 sys = new AS400(mySystemmyCompanycom)

Cree el objeto certificadoAS400CertificateVldlUtil certificateList =

new AS400CertificateVldlUtil(sys QSYSLIBMYLIBLIBCERTLISTVLDL)

Cree la lista de atributos de certificado Solo queremos certificados correspondientes a una uacutenica persona por lo que la lista consta de un solo elementoAS400CertificateAttribute[] attributeList = new AS400CertificateAttribute[1]attributeList[0] =

new AS400CertificateAttribute(AS400CertificateAttributeSUBJECT_COMMON_NAME Jane Doe)

Recupere la lista que coincide con los criterios Se utilizaraacute el espacio de usuario myspace de la biblioteca mylib para almacenar los certificados El espacio de usuario debe existir antes de llamar a esta APIint count = certificateListlistCertificates(attributeList QSYSLIBMYLIBLIBMYSPACEUSRSPC)

Recupere los certificados del espacio de usuarioAS400Certificates[] certificates =

certificateListgetCertificates(QSYSLIBMYLIBLIBMYSPACEUSRSPC 0 8)

Procese los certificados

Javadoc AS400CertificateUserProfileUtilJavadoc AS400CertificateVldUtilJavadoc AS400CertificateAttribute

Clase EnvironmentVariableLa clase EnvironmentVariable y la clase EnvironmentVariableList de IBM Toolbox para Java permitenacceder a variables de entorno a nivel de sistema de IBM i y establecerlas

Cada una de las variables tiene identificadores exclusivos el nombre de sistema y el nombre de variablede entorno Cada variable de entorno tiene asociado un CCSID (que de forma predeterminada es elCCSID del trabajo actual) que describe doacutende estaacute almacenado el contenido de la variable

Nota las variables de entorno son distintas de los valores del sistema aunque a menudo se utilizan conel mismo fin Encontraraacute maacutes informacioacuten acerca de coacutemo acceder a los valores del sistema en Valores delsistema

48 IBM Toolbox para Java IBM Toolbox para Java

Utilice un objeto EnvironmentVariable para llevar a cabo las acciones siguientes en una variable deentornov Obtener y establecer el nombrev Obtener y establecer el sistemav Obtener y establecer el valor (lo que permite cambiar el CCSID)v Renovar el valor

Ejemplo crear establecer y obtener variables de entorno

El ejemplo que sigue crea dos variables de entorno (EnvironmentVariable) y posteriormente establece yobtiene sus valores

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree el objeto de sistemaAS400 system = new AS400(mySystem)

Cree la variable de entorno de color de primer plano y estableacutezcala en rojo (red)EnvironmentVariable fg = new EnvironmentVariable(system FOREGROUND)fgsetValue(RED)

Cree la variable de entorno de color de fondo y obtenga su valorEnvironmentVariable bg = new EnvironmentVariable(system BACKGROUND)String background = bggetValue()

Javadoc EnvironmentVariableJavadoc EnvironmentVariableList

ExcepcionesLas clases de acceso de IBM Toolbox para Java lanzan excepciones cuando se producen errores dedispositivo limitaciones fiacutesicas errores de programacioacuten o errores de entrada de usuario Las clases deexcepcioacuten se basan en el tipo de error que se produce en vez de basarse en la ubicacioacuten origen del error

La mayor parte de las excepciones contiene la informacioacuten siguientev Tipo de error El objeto de excepcioacuten lanzado indica queacute tipo de error se ha producido Los errores del

mismo tipo se agrupan en una clase de excepcioacutenv Detalles del error La excepcioacuten contiene un coacutedigo de retorno para identificar con maacutes precisioacuten la

causa del error producido Los valores del coacutedigo de retorno son constantes dentro de la clase deexcepcioacuten

v Texto del error La excepcioacuten contiene una serie de caracteres descriptiva del error que se haproducido La serie se traduce al idioma del entorno local de la maacutequina virtual Java del cliente

Ejemplo capturar una excepcioacuten lanzada

El siguiente ejemplo muestra coacutemo capturar una excepcioacuten lanzada recuperar el coacutedigo de retorno yvisualizar el texto de la excepcioacuten

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Todo el trabajo de configuracioacuten para suprimir un archivo en el servidor mediante la clase IFSFile ya se ha terminado Ahora intente suprimir el archivotry

aFiledelete()

IBM Toolbox para Java 49

La supresioacuten ha falladocatch (ExtendedIOException e)

Visualice la serie traducida que indica la razoacuten por la que ha fallado la supresioacutenSystemoutprintln(e)

Obtenga el coacutedigo de retorno de la excepcioacuten y visualice informacioacuten adicional basada en el coacutedigo de retornoint rc = egetReturnCode()

switch (rc)

case ExtendedIOExceptionFILE_IN_USESystemoutprintln(Supresioacuten anoacutemala archivo en uso )break

case ExtendedIOExceptionPATH_NOT_FOUNDSystemoutprintln(Supresioacuten anoacutemala viacutea no encontrada )break

Para cada error especiacutefico del que desea efectuar un seguimiento

defaultSystemoutprintln(Supresioacuten anoacutemala rc = )Systemoutprintln(rc)

Clase FileAttributesLa clase FileAttributes de IBM Toolbox para Java representa el conjunto de atributos de archivo quepueden recuperarse y establecerse mediante las API Obtener atributos (Qp0lGetAttr) y Estableceratributos (Qp0lSetAttr)

Para obtener los atributos de un objeto eacuteste debe existir y el llamador debe tener autorizacioacuten sobre eacutelSoacutelo los atributos soportados por el sistema de archivos especiacutefico el tipo de objeto y el release delsistema operativo pueden recuperarse o establecerse

Puede encontrar una lista completa de los atributos disponibles en el Javadoc FileAttributesInformacioacuten relacionadaJavadoc FileAttributesAPI Obtener atributos (Qp0lGetAttr)API Establecer atributos (Qp0lSetAttr)

Clase FTPLa clase FTP de IBM Toolbox para Java proporciona una interfaz programable con las funciones FTP

Ya no es necesario que utilice javaruntimeexec() ni que indique a los usuarios que ejecuten los mandatosFTP en una aplicacioacuten aparte Es decir puede programar las funciones FTP directamente en la aplicacioacutenAsiacute desde dentro de su programa puede hacer estas tareasv Conectarse a un servidor FTPv Enviar mandatos al servidorv Listar los archivos de un directoriov Obtener los archivos del servidor y colocar archivos en el servidor

Ejemplo coacutemo se utiliza FTP para copiar archivos de un servidor

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

50 IBM Toolbox para Java IBM Toolbox para Java

Por ejemplo con la clase FTP puede copiar en un servidor un conjunto de archivos de un directorioFTP client = new FTP(myServer myUID myPWD)clientcd(myDir)clientsetDataTransferType(FTPBINARY)String [] entries = clientls()

for (int i = 0 i lt entrieslength i++)

Systemoutprintln(Copiando + entries[i])try

clientget(entries[i] cftptest + entries[i])catch (Exception e)

Systemoutprintln( la operacioacuten de copia ha fallado probablemente sea un directorio)

clientdisconnect()

FTP es una interfaz geneacuterica que funciona con numerosos y variados servidores FTP Por lo tanto esresponsabilidad del programador el adoptar la semaacutentica del servidor

Subclase AS400FTP

Mientras que la clase FTP es una interfaz FTP geneacuterica la subclase AS400FTP estaacute escrita especiacuteficamentepara el servidor FTP del servidor Es decir esta subclase entiende la semaacutentica del servidor FTP en elservidor IBM i Por ejemplo esta clase entiende los diversos pasos que se necesitan para transferir alservidor un archivo de salvar y los lleva a cabo automaacuteticamente AS400FTP tambieacuten encaja bien en losrecursos de seguridad de IBM Toolbox para Java Al igual que con las otras clases de IBM Toolbox paraJava AS400FTP depende del objeto AS400 para obtener el nombre del sistema el ID de usuario y lacontrasentildea

Ejemplo coacutemo se utiliza AS400FTP para guardar un archivo en el servidor

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente pone un archivo de salvar en el servidor Fiacutejese en coacutemo la aplicacioacuten no establece eltipo de transferencia de datos en binario ni utiliza CommandCall para crear el archivo de salvar Debidoa que la extensioacuten es savf la clase AS400FTP detecta que el archivo que se ha de poner es un archivo desalvar y realiza esos pasos automaacuteticamente

AS400 system = new AS400()AS400FTP ftp = new AS400FTP(system)ftpput(myDatasavf QSYSLIBMYLIBLIBMYDATASAVF)

Javadoc FTPJavadoc AS400FTP

Clases del sistema de archivos integradoLas clases del sistema de archivos integrado permiten a un programa Java acceder a los archivos delsistema de archivos integrado de IBM i como una corriente de bytes o una corriente de caracteres Lasclases del sistema de archivos integrado se crearon debido a que el paquete javaio no proporciona lafuncioacuten de redireccioacuten de archivos ni otras funciones delIBM i

Las funciones proporcionadas por las clases IFSFile forman un superconjunto de las funcionesproporcionadas por las clases de entradasalida (IO) de archivo existentes en el paquete javaio Todos losmeacutetodos de javaio FileInputStream FileOutputStream y RandomAccessFile estaacuten en las clases del sistemade archivos integrado

IBM Toolbox para Java 51

Ademaacutes las clases contienen meacutetodos para llevar a cabo las tareas siguientesv Especificar una modalidad de compartimiento de archivos para denegar el acceso a un archivo que se

esteacute utilizandov Especificar una modalidad de creacioacuten de archivo para abrir crear o sustituir el archivov Bloquear una seccioacuten del archivo y denegar el acceso a dicha parte del archivo mientras se esteacute

utilizandov Listar el contenido de un directorio de manera maacutes eficazv Almacenar en la memoria cacheacute el contenido de un directorio para mejorar el rendimiento al limitar las

llamadas al servidorv Determinar el nuacutemero de bytes que estaacuten disponibles en el sistema de archivos del servidorv Permitir a un applet Java acceder a los archivos del sistema de archivos del servidorv Leer y escribir datos como texto en vez de como datos binariosv Determinar el tipo de objeto de archivo (loacutegico fiacutesico de salvar etc) cuando el objeto estaacute en el

sistema de archivos QSYSLIB

Mediante las clases del sistema de archivos integrado el programa Java puede acceder directamente a losarchivos continuos existentes en el sistema El programa Java puede seguir utilizando el paquete javaiopero en ese caso el sistema operativo del cliente debe proporcionar un meacutetodo de redireccioacuten Porejemplo si el programa Java se estaacute ejecutando en un sistema operativo Windows 95 o Windows NT serequiere la funcioacuten Unidades de red de IBM i Access para Windows a fin de redirigir las llamadas javaioal sistema Con las clases del sistema de archivos integrado no se necesita IBM i Access para Windows

Las clases del sistema de archivos integrado tienen como paraacutemetro obligatorio el objeto AS400 querepresenta el sistema que contiene el archivo El hecho de utilizar las clases de sistema de archivosintegrado hace que el objeto AS400 se conecte al sistema En Gestioacuten de conexiones encontraraacuteinformacioacuten acerca de coacutemo se gestionan las conexiones

Las clases del sistema de archivos integrado requieren el nombre jeraacuterquico que el objeto tiene en elsistema de archivos integrado Como caraacutecter separador de las viacuteas de acceso utilice la barra inclinadahacia delante El ejemplo que figura a continuacioacuten muestra coacutemo se accede a FILE1 en la viacutea dedirectorio DIR1DIR2

DIR1DIR2FILE1

Ejemplos coacutemo se utilizan las clases del sistema de archivos integrado

En ldquoEjemplo coacutemo se utilizan las clases del sistema de archivos integrado (IFS) para copiar un archivo deun directorio en otrordquo en la paacutegina 423 se muestra coacutemo se utilizan las clases del sistema de archivosintegrado para copiar un archivo de un directorio en otro en el sistema

En ldquoEjemplo coacutemo se utilizan las clases del sistema de archivos integrado (IFS) para listar el contenidode un directoriordquo en la paacutegina 425 se muestra coacutemo se utilizan las clases del sistema de archivosintegrado para listar el contenido de un directorio en el sistema

Clase IFSFile

La clase IFSFile de IBM Toolbox para Java representa un objeto del sistema de archivos integrado de IBMi

Los meacutetodos que hay en IFSFile representan operaciones realizadas en el objeto como un todo Se puedeutilizar IFSFileInputStream IFSFileOutputStream y IFSRandomAccessFile para leer y escribir en elarchivo La clase IFSFile permite al programa Java llevar a cabo estas tareasv Determinar si el objeto existe y es un directorio o un archivov Determinar si el programa Java puede leer o escribir en un archivo

52 IBM Toolbox para Java IBM Toolbox para Java

v Determinar la longitud de un archivov Determinar los permisos de un objeto y establecer los permisos de un objetov Crear un directoriov Suprimir un archivo o un directoriov Redenominar un archivo o un directoriov Obtener o establecer la fecha de la uacuteltima modificacioacuten de un archivov Listar el contenido de un directoriov Listar el contenido de un directorio y guardar la informacioacuten de atributos en una memoria cacheacute localv Determinar la cantidad de espacio disponible en el sistemav Determinar el tipo de objeto de archivo cuando estaacute en el sistema de archivos QSYSLIB

Puede obtener la lista de archivos de un directorio con el meacutetodo list() o el meacutetodo listFiles()v El meacutetodo listFiles() almacena en la memoria cacheacute informacioacuten de cada uno de los archivos de la

llamada inicial Tras efectuar la llamada a listFiles() la utilizacioacuten de otros meacutetodos para consultardetalles de archivo permite obtener un mejor rendimiento ya que la informacioacuten se recupera de lamemoria cacheacute Por ejemplo realizar una llamada a isDirectory() en un objeto IFSFile devuelto porlistFiles() no requiere efectuar una llamada al servidor

v El meacutetodo list() recupera informacioacuten sobre cada uno de los archivos en una peticioacuten independienterealizada al servidor lo que hace que sea maacutes lento y que utilice maacutes recursos del servidor

Nota la utilizacioacuten de listFiles() significa que la informacioacuten de la memoria cacheacute puede quedarobsoleta por lo que puede que deba renovar los datos volviendo a efectuar una llamada a listFiles()

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase IFSFilev ldquoEjemplo crear un directoriordquo en la paacutegina 418v ldquoEjemplo coacutemo se utilizan las excepciones de IFSFile para hacer seguimiento de erroresrdquo en la paacutegina

419v ldquoEjemplo listar archivos con la extensioacuten txtrdquo en la paacutegina 419v ldquoEjemplo coacutemo se utiliza el meacutetodo de IFSFile listFiles() para listar el contenido de un directoriordquo en la

paacutegina 420Informacioacuten relacionadaJavadoc IFSFile

Clase IFSJavaFile

Esta clase de IBM Toolbox para Java representa un archivo del sistema de archivos integrado de IBM i yampliacutea la clase javaioFile IFSJavaFile permite escribir archivos para la interfaz javaioFile que accede alos sistemas de archivos integrados

IFSJavaFile crea interfaces portables que son compatibles con javaioFile y uacutenicamente utiliza los erroresy las excepciones que utiliza la clase javaioFile IFSJavaFile emplea las caracteriacutesticas del gestor deseguridad de javaioFile pero a diferencia de javaioFile IFSJavaFile emplea las caracteriacutesticas deseguridad de forma continua

La clase IFSJavaFile se utiliza junto con IFSFileInputStream y IFSFileOutputStream No da soporte a lasclases javaioFileInputStream y javaioFileOutputStream

IFSJavaFile estaacute basada en IFSFile sin embargo la interfaz de IFSJavaFile se parece maacutes a javaioFile quea IFSFile IFSFile es una alternativa de la clase IFSJavaFile

IBM Toolbox para Java 53

Puede obtener la lista de archivos de un directorio con el meacutetodo list() o el meacutetodo listFiles()v El meacutetodo listFiles() permite obtener un mejor rendimiento ya que recupera y almacena en la memoria

cacheacute la informacioacuten de cada uno de los archivos de la llamada inicial Posteriormente la informacioacutende cada uno de los archivos se recupera de la memoria cacheacute

v El meacutetodo list() recupera informacioacuten sobre cada uno de los archivos en una peticioacuten independiente loque hace que sea maacutes lento y que utilice maacutes recursos del servidor

Nota la utilizacioacuten de listFiles() significa que la informacioacuten de la memoria cacheacute puede quedarobsoleta por lo que puede que deba renovar los datos

Ejemplo coacutemo se utiliza IFSJavaFile

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El siguiente ejemplo muestra coacutemo se utiliza la clase IFSJavaFile Trabaje con DirFiletxt en la memoria flash del sistemaAS400 as400 = new AS400(flash)IFSJavaFile file = new IFSJavaFile(as400 DirFiletxt)

Determine el directorio padre del archivoString directory = filegetParent()

Determine el nombre del archivoString name = filegetName()

Determine el tamantildeo del archivolong length = filelength()

Determine cuaacutendo se modificoacute el archivo por uacuteltima vezDate date = new Date(filelastModified())

Suprima el archivoif (filedelete() == false)

Visualice el coacutedigo de errorSystemerrprintln(No se ha podido suprimir el archivo)

try

IFSFileOutputStream os =new IFSFileOutputStream(filegetSystem() file IFSFileOutputStreamSHARE_ALL false)

byte[] data = new byte[256]int i = 0for ( i lt datalength i++)

data[i] = (byte) ioswrite(data[i])

osclose()

catch (Exception e)

Systemerrprintln (Excepcioacuten + egetMessage())

Informacioacuten relacionadaJavadoc IFSJavaFile

54 IBM Toolbox para Java IBM Toolbox para Java

IFSFileInputStream

La clase IFSFileInputStream de IBM Toolbox para Java representa una corriente de entrada para leer datosde un archivo en el servidor

Al igual que en la clase IFSFile en IFSFileInputStream hay meacutetodos que duplican los meacutetodos deFileInputStream del paquete javaio Ademaacutes de estos meacutetodos IFSFileInputStream dispone de meacutetodosadicionales especiacuteficos para la plataforma IBM i La clase IFSFileInputStream permite a un programa Javahacer lo siguientev Abrir un archivo para lectura El archivo debe existir debido a que esta clase no crea archivos en el

servidor Puede utilizar un constructor que le permita especificar la modalidad de compartimiento dearchivo

v Determinar el nuacutemero de bytes de la corrientev Leer bytes de la corrientev Saltarse bytes de la corrientev Bloquear o desbloquear bytes de la corrientev Cerrar el archivo

Al igual que FileInputStream de javaio esta clase permite a un programa Java leer una corriente de bytesdel archivo El programa Java lee los bytes de modo secuencial con la uacutenica opcioacuten adicional de saltarsebytes de la corriente

Ademaacutes de los meacutetodos de FileInputStream IFSFileInputStream proporciona al programa Java lasopciones siguientesv Bloquear y desbloquear bytes de la corriente En IFSKey encontraraacute maacutes informacioacutenv Especificar una modalidad de compartimiento al abrir el archivo En Modalidades de compartimiento

encontraraacute maacutes informacioacuten

Ejemplo coacutemo se utiliza IFSFileInputStream

El ejemplo que sigue muestra coacutemo se utiliza la clase IFSFileInputStream Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Abra un objeto de archivo que represente el archivoIFSFileInputStream aFile = new IFSFileInputStream(sysmydir1mydir2myfile)

Determine el nuacutemero de bytes en el archivoint available = aFileavailable()

Asigne un almacenamiento intermedio que contenga los datosbyte[] data = new byte[10240]

Lea todo el archivo de 10 en 10 Kfor (int i = 0 i lt available i += 10240)

aFileread(data)

Cierre el archivoaFileclose()

Informacioacuten relacionadaJavadoc IFSFileInputStream

Clase IFSTextFileInputStream

IFSTextFileInputStream ha quedado en desuso y la sustituye la clase IFSFileReader

IBM Toolbox para Java 55

La clase IFSTextFileInputStream representa una corriente de datos de tipo caraacutecter leiacutedos en un archivoLos datos leiacutedos del objeto IFSTextFileInputStream se proporcionan al programa Java en un objeto StringJava por lo que siempre es Unicode Al abrir el archivo el objeto IFSTextFileInputStream determina elCCSID de los datos del archivo Si los datos estaacuten almacenados en una codificacioacuten distinta de Unicodeel objeto IFSTextFileInputStream convierte los datos de la codificacioacuten del archivo a Unicode antes dedaacuterselos al programa Java Si no es posible convertir los datos se lanza una excepcioacutenUnsupportedEncodingException

El ejemplo que sigue muestra coacutemo se utiliza la clase IFSTextFileInputStream Trabaje con File en

el mySystem del sistemaAS400 as400 = new AS400(mySystem)IFSTextFileInputStream file = new IFSTextFileInputStream(as400 File)

Lea los primeros cuatro caracteres del archivoString s = fileread(4)

Visualice los caracteres leiacutedos Lea los primeros cuatro caracteres del archivo De ser necesario el objeto IFSTextFileInputStream convierte los datos a UnicodeSystemoutprintln(s)

Cierre el archivofileclose()

Referencia relacionadaldquoIFSFileReaderrdquoUtilice esta clase para leer archivos de caracteres del sistema de archivos integrado

IFSFileReader

Utilice esta clase para leer archivos de caracteres del sistema de archivos integrado

IFSFileReader estaacute disentildeado para leer corrientes de caracteres IFSFileReader sustituye aIFSTextFileOutputStream

Ejemplo coacutemo se utiliza IFSFileReader

El ejemplo siguiente muestra coacutemo se utiliza IFSFileReaderimport javaioBufferedReader

Trabaje con File1 en el eniac del sistemaAS400 system = new AS400(eniac)IFSFile file = new IFSFile(system File1)BufferedReader reader = new BufferedReader(new IFSFileReader(file))

Lea la primera liacutenea del archivo convirtiendo caracteresString line1 = readerreadLine()

Visualice la serie leiacutedaSystemoutprintln(line1)

Cierre el lectorreaderclose()

Informacioacuten relacionadaJavadoc IFSFileReader

56 IBM Toolbox para Java IBM Toolbox para Java

Clase IFSFileOutputStream

La clase IFSFileOutputStream representa una corriente de salida para escribir datos en un archivo en elservidor

Al igual que en la clase IFSFile en IFSFileOutputStream hay meacutetodos que duplican los meacutetodos deFileOutputStream del paquete javaio IFSFileOutputStream dispone asimismo de meacutetodos adicionalesespeciacuteficos para el servidor La clase IFSFileOutputStream permite a un programa Java hacer lo siguientev Abrir un archivo para escritura El archivo si ya existe se sustituye Existen constructores que

permiten especificar la modalidad de compartimiento de archivo y si se ha antildeadido el contenido de unarchivo existente

v Escribir bytes en la corrientev Comprometer en el disco los bytes que se escriben en la corrientev Bloquear o desbloquear bytes de la corrientev Cerrar el archivo

Al igual que FileOutputStream de javaio esta clase permite a un programa Java escribir secuencialmenteuna corriente de bytes en el archivo

Ademaacutes de los meacutetodos de FileOutputStream IFSFileOutputStream proporciona al programa Java lasopciones siguientesv Bloquear y desbloquear bytes de la corriente En IFSKey encontraraacute maacutes informacioacutenv Especificar una modalidad de compartimiento al abrir el archivo En Modalidades de compartimiento

encontraraacute maacutes informacioacuten

Ejemplo coacutemo se utiliza IFSFileOutputStream

El siguiente ejemplo muestra coacutemo se utiliza la clase IFSFileOutputStream Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Abra un objeto de archivo que represente el archivoIFSFileOutputStream aFile =

new IFSFileOutputStream(sysmydir1mydir2myfile)

Escriba en el archivobyte i = 123aFilewrite(i)

Cierre el archivoaFileclose()

Javadoc IFSFileOutputStream

Clase IFSTextFileOutputStream

IFSTextFileOutputStream ha quedado en desuso y la sustituye la clase IFSFileWriter

La clase IFSTextFileOutputStream representa una corriente de datos de tipo caraacutecter que se estaacutenescribiendo en un archivo Los datos proporcionados al objeto IFSTextFileOutputStream estaacuten en unobjeto String Java por lo que la entrada siempre es Unicode Sin embargo el objetoIFSTextFileOutputStream puede convertir los datos a otro CCSID a medida que se escriben en el archivoEl comportamiento predeterminado es escribir caracteres Unicode en el archivo pero el programa Javapuede establecer el CCSID destino antes de que se abra el archivo En este caso el objetoIFSTextFileOutputStream convierte los caracteres de Unicode al CCSID especificado antes de escribirlosen el archivo Si no es posible convertir los datos se lanza una excepcioacutenUnsupportedEncodingException

IBM Toolbox para Java 57

Ejemplo coacutemo se utiliza IFSTextFileOutputStream

El ejemplo que sigue muestra coacutemo se utiliza la clase IFSTextFileOutputStream Trabaje con File en el mySystem del

sistemaAS400 as400 = new AS400(mySystem)IFSTextFileOutputStream file =

new IFSTextFileOutputStream(as400 File)

Escriba una serie (String) en el archivo Como no se ha especificado ninguacuten CCSID antes de escribir en el archivo los caracteres Unicode se escribiraacuten en el archivo En el archivo se etiquetaraacute indicando que tiene datos Unicodefilewrite(Hola a todos)

Cierre el archivofileclose()

Referencia relacionadaldquoIFSFileWriterrdquoUtilice IFSFileWriter para escribir en archivos de caracteres del sistema de archivos integradoIFSFileWriter estaacute disentildeado para escribir corrientes de caracteres

IFSFileWriter

Utilice IFSFileWriter para escribir en archivos de caracteres del sistema de archivos integradoIFSFileWriter estaacute disentildeado para escribir corrientes de caracteres

IFSFileWriter es el sustituto de IFSTextFileOutputStream

Ejemplo coacutemo se utiliza IFSFileWriter

El ejemplo siguiente muestra coacutemo se utiliza IFSFileWriterimport javaioPrintWriterimport javaioBufferedWriter

Trabaje con File1 en el mysystem del sistemaAS400 as400 = new AS400(mysystem)IFSFile file = new IFSFile(system File1)

PrintWriter writer =new PrintWriter(new BufferedWriter(new IFSFileWriter(file)))

Escriba una liacutenea de texto en el archivo convirtiendo caractereswriterprintln(text)

Cierre el archivowriterclose()

Informacioacuten relacionadaJavadoc IFSFileWriter

IFSRandomAccessFile

La clase IFSRandomAccessFile de IBM Toolbox para Java representa un archivo existente en el servidorpara la lectura y la escritura de datos

El programa Java puede leer y escribir datos de forma secuencial o aleatoria Al igual que en la claseIFSFile en IFSRandomAccessFile hay meacutetodos que duplican los meacutetodos de RandomAccessFile delpaquete javaio Ademaacutes de estos meacutetodos IFSRandomAccessFile dispone de meacutetodos adicionalesespeciacuteficos para IBM i Mediante IFSRandomAccessFile un programa Java puede llevar a cabo estastareas

58 IBM Toolbox para Java IBM Toolbox para Java

v Abrir un archivo para acceso de lectura escritura o lecturaescritura El programa Java puedeespecificar opcionalmente la modalidad de compartimiento de archivo y la opcioacuten de existencia

v Leer datos en el desplazamiento actual del archivov Escribir datos en el desplazamiento actual del archivov Obtener o establecer el desplazamiento actual del archivov Cerrar el archivo

Ademaacutes de los meacutetodos de la clase RandomAccessFile de javaio IFSRandomAccessFile proporciona alprograma Java las opciones siguientesv Comprometer en disco los bytes escritosv Bloquear y desbloquear bytes del archivov Bloquear y desbloquear bytes de la corriente En IFSKey encontraraacute maacutes informacioacutenv Especificar una modalidad de compartimiento al abrir el archivo En Modalidades de compartimiento

encontraraacute maacutes informacioacutenv Especificar la opcioacuten de existencia al abrir un archivo El programa Java puede elegir una de estas

posibilidadesndash Si el archivo existe abrirlo si el archivo no existe crearlondash Si el archivo existe sustituirlo si el archivo no existe crearlondash Si el archivo existe no realizar la apertura si el archivo no existe crearlondash Si el archivo existe abrirlo si el archivo no existe no realizar la aperturandash Si el archivo existe sustituirlo si el archivo no existe no realizar la apertura

Ejemplo coacutemo se utiliza IFSRandomAccessFile

El ejemplo que sigue muestra coacutemo se utiliza la clase IFSRandomAccessFile para escribir cuatro bytes aintervalos de 1 K en un archivo

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Abra un objeto de archivo que represente el archivoIFSRandomAccessFile aFile =

new IFSRandomAccessFile(sysmydir1myfile rw)

Establezca los datos que han de escribirsebyte i = 123

Escriba en el archivo 10 veces a intervalos de 1 Kfor (int j=0 jlt10 j++)

Mueva el desplazamiento actualaFileseek(j 1024)

Escriba en el archivo El desplazamiento actual avanza seguacuten el tamantildeo de la escrituraaFilewrite(i)

Cierre el archivoaFileclose()

Informacioacuten relacionadaJavadoc IFSRandomAccessFile

Clase IFSKey

Si el programa Java permite a otros programas acceder a un archivo simultaacuteneamente dicho programaJava puede bloquear bytes en el archivo por un tiempo Durante ese tiempo el programa tiene el uso

IBM Toolbox para Java 59

exclusivo de esa seccioacuten del archivo Cuando un bloqueo se realiza satisfactoriamente las clases delsistema de archivos integrado devuelven un objeto IFSKey

Este objeto se proporciona al meacutetodo unlock() para indicar cuaacuteles son los bytes que se han dedesbloquear Al cerrar el archivo el sistema desbloquea todos los bloqueos que auacuten quedan en el archivo(el sistema realiza un desbloqueo de todos los bloqueos que el programa no desbloqueoacute)

Ejemplo coacutemo se utiliza IFSKey

El ejemplo que sigue muestra coacutemo se utiliza la clase IFSKey Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Abra una corriente de entrada Este constructor se abre con share_all para que otros programas puedan abrir este archivoIFSFileInputStream aFile =

new IFSFileInputStream(sysmydir1mydir2myfile)

Bloquee el primer Kilobyte del archivo Ahora ninguna otra instancia puede leer estos bytesIFSKey key = aFilelock(1024)

Lea el primer Kilobyte del archivobyte data[] = new byte[1024]aFileread(data)

Desbloquee los bytes del archivoaFileunlock(key)

Cierre el archivoaFileclose()

Informacioacuten relacionadaJavadoc IFSKey

Modalidad de compartimiento de archivo

El programa Java puede especificar una modalidad de compartimiento al abrir un archivo Puede ser queel programa permita a los demaacutes programas abrir el archivo simultaacuteneamente o bien que tenga un accesoexclusivo al archivo

El ejemplo que sigue muestra coacutemo se especifica una modalidad de compartimiento de archivo Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Abra un objeto de archivo que represente el archivo Dado que este programa especifica share-none los demaacutes intentos abiertos fallaraacuten hasta que se cierre esta instanciaIFSFileOutputStream aFile =

new IFSFileOutputStream(sysmydir1mydir2myfileIFSFileOutputStreamSHARE_NONEfalse)

Lleve a cabo operaciones en el archivo

Cierre el archivo Ahora las demaacutes peticiones abiertas se ejecutaraacuten correctamenteaFileclose()

60 IBM Toolbox para Java IBM Toolbox para Java

IFSSystemView

IFSSystemView proporciona una pasarela para el sistema de archivos integrado de IBM i que se utiliza alconstruir objetos javaxswingJFileChooser

JFileChooser es un procedimiento Java estaacutendar para construir diaacutelogos a fin de recorrer y seleccionararchivos

Ejemplo coacutemo se utiliza IFSSystemView

El ejemplo siguiente muestra coacutemo se utiliza IFSSystemViewimport comibmas400accessAS400import comibmas400accessIFSJavaFileimport comibmas400accessIFSSystemViewimport javaxswingJFileChooserimport javaawtFrame

Trabaje con el directorio Dir en el sistema myAS400AS400 system = new AS400(myAS400)IFSJavaFile dir = new IFSJavaFile(system Dir)

JFileChooser chooser = new JFileChooser(dir new IFSSystemView(system))Frame parent = new Frame()int returnVal = choosershowOpenDialog(parent)if (returnVal == JFileChooserAPPROVE_OPTION)

IFSJavaFile chosenFile = (IFSJavaFile)(choosergetSelectedFile())Systemoutprintln(Ha seleccionado el archivo denominado +

chosenFilegetName())

Informacioacuten relacionadaJavadoc IFSSystemView

Clase ISeriesNetServerLa clase ISeriesNetServer representa el servicio NetServer en un servidor Esta clase permite al usuarioconsultar y modificar el estado y la configuracioacuten del NetServer

ISeriesNetServer sustituye a la clase NetServerInformacioacuten relacionadaJavadoc ISeriesNetServer

Clase JavaApplicationCallLa clase JavaApplicationCall proporciona la posibilidad de que el cliente utilice la JVM del servidor paraejecutar un programa Java que reside en el servidor

Despueacutes de establecer una conexioacuten con el servidor desde el cliente la clase JavaApplicationCall lepermite realizar estas tareas de configuracioacuten1 Establecer la variable de entorno CLASSPATH en el servidor con el meacutetodo setClassPath()2 Definir los paraacutemetros del programa con el meacutetodo setParameters()3 Ejecutar el programa con run()4 Enviar una entrada desde el cliente al programa Java El programa Java lee la entrada por medio de

una entrada estaacutendar que se establece con el meacutetodo sendStandardInString() La salida estaacutendar y lasalida de error estaacutendar se pueden redirigir desde el programa Java al cliente por medio degetStandardOutString() y getStandardErrorString()

JavaApplicationCall es una clase a la que se llama desde el programa Java Sin embargo IBM Toolboxpara Java tambieacuten proporciona programas de utilidad para llamar a programas Java que residen en el

IBM Toolbox para Java 61

servidor Estos programas de utilidad son programas Java completos que se pueden ejecutar desde laestacioacuten de trabajo Puede encontrar maacutes informacioacuten en la clase RunJavaApplication

Ejemplo

El ejemplo de la documentacioacuten de consulta de javadocs de JavaApplicationCall muestra coacutemo ejecutaren el servidor un programa (con la salida iexclHola a todos) desde el cliente

JavaApplicationCallInformacioacuten relacionadaJavadoc JavaApplicationCall

Clases JDBCJDBC es una interfaz de programas de aplicacioacuten (API) incluida en la plataforma Java que permite a losprogramas Java conectar con una gran variedad de bases de datos

Interfaces soportadas

La tabla siguiente muestra las interfaces JDBC soportadas y la API necesaria para utilizarlas

Interfaz JDBC soportada API necesaria

Blob proporciona acceso a los objetos binarios de grantamantildeo (BLOB)

Nuacutecleo de JDBC 21 soporte mejorado en JDBC 40

CallableStatement ejecuta procedimientos almacenadosde SQL

JDK 11 soporte mejorado en JDBC 40

Clob proporciona acceso a los objetos de tipo caraacutecter degran tamantildeo (CLOB)

Nuacutecleo de JDBC 21 soporte mejorado en JDBC 40

Connection representa una conexioacuten con una base dedatos especiacutefica

JDK 11 soporte mejorado en JDBC 40

ConnectionPool representa una agrupacioacuten de objetosConnection

Paquete opcional de JDBC 20

ConnectionPoolDataSource representa una faacutebrica deobjetos AS400JDBCPooledConnection reunidos en unaagrupacioacuten

Paquete opcional de JDBC 20

DatabaseMetaData proporciona informacioacuten acerca de labase de datos como conjunto

JDK 11 soporte mejorado en JDBC 40

DataSource representa una faacutebrica de conexiones de basede datos

Paquete opcional de JDBC 20 soporte mejorado en JDBC40

Driver crea la conexioacuten y devuelve informacioacuten acerca dela versioacuten del controlador

JDK 11

ParameterMetaData ofrece la posibilidad de obtenerinformacioacuten acerca de los tipos y las propiedades de losparaacutemetros de un objeto PreparedStatement

API de JDBC 30 soporte mejorado en JDBC 40

PooledConnection proporciona ganchos para la gestioacutende agrupaciones de conexiones

Paquete opcional de JDBC 20 soporte mejorado en JDBC40

PreparedStatement ejecuta sentencias SQL compiladas JDK 11 soporte mejorado en JDBC 40

ResultSet proporciona acceso a una tabla de datos que segenera mediante la ejecucioacuten de una consulta SQL o elmeacutetodo catalog de DatabaseMetaData

JDK 11 soporte mejorado en JDBC 40

ResultSetMetaData proporciona informacioacuten sobre unconjunto de resultados (ResultSet) especiacutefico

JDK 11 soporte mejorado en JDBC 40

RowId representa un valor ROWID de SQL JDBC 40

62 IBM Toolbox para Java IBM Toolbox para Java

Interfaz JDBC soportada API necesaria

RowSet es un conjunto de filas conectado que encapsulaun conjunto de resultados (ResultSet)

Paquete opcional de JDBC 20

Savepoint proporciona un control maacutes especiacutefico en lastransacciones

API JDBC 30

SQLXML representa un valor XML de SQL JDBC 40

Statement ejecuta sentencias SQL y obtiene losresultados

JDK 11 soporte mejorado en JDBC 40

StatementEvent se enviacutea a todos losStatementEventListeners que se han registrado en unaPooledConnection Eso se produce cuando el controladordetermina que una PreparedStatement que estaacute asociadacon la PooledConnection se ha cerrado o el controladordetermina que no es vaacutelida

StatementEventListener registra las notificaciones deeventos producidos en PreparedStatements que seencuentran en la agrupacioacuten Statement

JDBC 40

XAConnection es una conexioacuten de base de datos queparticipa en transacciones XA globales

Paquete opcional de JDBC 20

XAResource es un gestor de recursos destinado a su usoen las transacciones XA

Paquete opcional de JDBC 20

Referencia relacionadaldquoJDBCrdquo en la paacutegina 256JDBC es una interfaz de programas de aplicacioacuten (API) incluida en la plataforma Java que permite a losprogramas Java conectar con una gran variedad de bases de datosldquoEjemplo coacutemo se utiliza JDBCPopulate para crear y llenar con datos una tablardquo en la paacutegina 428Este programa utiliza el controlador JDBC de IBM Toolbox para Java para crear y llenar una tablaldquoEjemplo coacutemo se utiliza JDBCQuery para consultar una tablardquo en la paacutegina 439Este programa utiliza el controlador JDBC de IBM Toolbox para Java para consultar una tabla y enviar sucontenido a la salidaInformacioacuten relacionada

JTOpen La versioacuten de coacutedigo fuente abierto de IBM Toolbox para JavaJavadoc AS400JDBCConnectionPoolDataSourceJavadoc AS400JDBCPooledConnectionRowID

Clase AS400JDBCBlob

Puede utilizar un objeto AS400JDBCBlob para acceder a objetos binarios de gran tamantildeo (BLOB) comopor ejemplo los archivos de sonido (wav) o los archivos de imagen (gif)

La diferencia clave entre la clase AS400JDBCBlob y la clase AS400JDBCBlobLocator es el lugar dealmacenamiento del blob Con la clase AS400JDBCBlob el blob se almacena en la base de datos que inflael tamantildeo del archivo de base de datos La clase AS400JDBCBlobLocator almacena en el archivo de basede datos un localizador (es como si fuese un puntero) que sentildeala al lugar en el que se encuentra el blob

Con la clase AS400JDBCBlob puede utilizarse la propiedad de umbral de lob Esta propiedad especificael tamantildeo maacuteximo (en kilobytes) de LOB (objeto de gran tamantildeo) que puede recuperarse como parte deun conjunto de resultados Los LOB cuyo tamantildeo sobrepasa este umbral se recuperan en fragmentosutilizando una comunicacioacuten adicional con el servidor Los umbrales de LOB de mayor tamantildeo reducenla frecuencia de la comunicacioacuten con el servidor pero bajan maacutes datos de LOB aunque dichos datos no

IBM Toolbox para Java 63

se utilicen Los umbrales de LOB de menor tamantildeo pueden incrementar la frecuencia de la comunicacioacutencon el servidor pero uacutenicamente bajan los datos de LOB seguacuten se necesiten En Propiedades de JDBCencontraraacute informacioacuten sobre las propiedades adicionales que estaacuten disponibles

Mediante la clase AS400JDBCBlob se pueden realizar estas tareasv Devolver el blob entero como una corriente de bytes sin interpretarv Devolver parte del contenido del blobv Devolver la longitud del blobv Crear una corriente de datos binarios para escribir en el blobv Escribir una matriz de bytes en el blobv Escribir la totalidad o una parte de una matriz de bytes en el blobv Truncar el blob

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase AS400JDBCBlob para leerinformacioacuten de un blob y actualizar un blob

Ejemplo coacutemo se utiliza la clase AS400JDBCBlob para leer informacioacuten de un blobBlob blob = resultSetgetBlob (1)long length = bloblength ()byte[] bytes = blobgetBytes(1 (int) length)

Ejemplo coacutemo se utiliza la clase AS400JDBCBlob para actualizar un blobResultSet rs = statementexecuteQuery (SELECT BLOB FROM MYTABLE)rsabsolute(5)Blob blob = rsgetBlob(1)

Cambie los bytes del blob empezando por el byte nuacutemero 7 del blobblobsetBytes (7 new byte[] (byte) 57 (byte) 58 (byte) 98)

Actualice el blob en el conjunto de resultados cambiando el blob que empieza en el byte nuacutemero 7 del blob (empezando a contar a partir del 1) y truncando el blob al final de los bytes actualizados (ahora el blob tiene 9 bytes)rsupdateBlob(1 blob)

Actualice la base de datos con el cambio Asiacute se cambiaraacute el blob en la base de datos empezando en el byte nuacutemero 7 del blob y truncando el blob al final de los bytes actualizadosrsupdateRow()rsclose()

Clase AS400JDBCBlobLocator

Puede utilizar un objeto AS400JDBCBlobLocator para acceder a objetos binarios de gran tamantildeo

Mediante la clase AS400JDBCBlobLocator se pueden realizar estas tareasv Devolver el blob entero como una corriente de bytes sin interpretarv Devolver parte del contenido del blobv Devolver la longitud del blobv Crear una corriente de datos binarios para escribir en el blobv Escribir una matriz de bytes en el blobv Escribir la totalidad o una parte de una matriz de bytes en el blobv Truncar el blob

64 IBM Toolbox para Java IBM Toolbox para Java

Javadoc AS400JDBCBlobJavadoc AS400JDBCBlobLocator

Interfaz CallableStatement

Puede utilizar un objeto CallableStatement para ejecutar procedimientos almacenados de SQL Elprocedimiento almacenado al que se llama debe estar ya almacenado en la base de datos El objetoCallableStatement no contiene el procedimiento almacenado sino que uacutenicamente llama a dichoprocedimiento

Un procedimiento almacenado puede devolver uno o varios objetos ResultSet y utilizar paraacutemetros INOUT e INOUT Utilice ConnectionprepareCall() para crear objetos CallableStatement nuevos

El objeto CallableStatement permite someter a una base de datos varios mandatos SQL como si fuesen unsolo grupo mediante el uso del soporte de proceso por lotes Puede obtener un mejor rendimientoempleando el soporte de proceso por lotes ya que normalmente se tarda menos en procesar un grupo deoperaciones que en procesarlas una a una

CallableStatement permite obtener y establecer paraacutemetros y columnas por nombre aunque el uso deliacutendice de columna permite conseguir un mejor rendimiento

Ejemplo coacutemo se utiliza CallableStatement

El ejemplo que sigue muestra coacutemo se utiliza la interfaz CallableStatement Coneacutectese al servidorConnection c = DriverManagergetConnection(jdbcas400mySystem)

Cree el objeto CallableStatement Este objeto precompila la llamada especificada en un procedimiento almacenado Los signos de interrogacioacuten indican doacutende deben establecerse los paraacutemetros de entrada y doacutende pueden recuperarse los paraacutemetros de salida Los primeros dos paraacutemetros son paraacutemetros de entrada y el tercer paraacutemetro es un paraacutemetro de salidaCallableStatement cs = cprepareCall(CALL MYLIBRARYADD ( ))

Establezca paraacutemetros de entradacssetInt (1 123)cssetInt (2 234)

Registre el tipo del paraacutemetro de salidacsregisterOutParameter (3 TypesINTEGER)

Ejecute el procedimiento almacenadocsexecute ()

Obtenga el valor del paraacutemetro de salidaint sum = csgetInt (3)

Cierre CallableStatement y la conexioacutencsclose()cclose()

Javadoc AS400JDBCCallableStatement

Clase AS400JDBCClob

Puede utilizar un objeto AS400JDBCClob para acceder a los objetos de tipo caraacutecter de gran tamantildeo(CLOB) como por ejemplo los grandes documentos

La diferencia clave entre la clase AS400JDBCClob y la clase AS400JDBCClobLocator es el lugar dealmacenamiento del clob Con la clase AS400JDBCClob el clob se almacena en la base de datos que infla

IBM Toolbox para Java 65

el tamantildeo del archivo de base de datos La clase AS400JDBCClobLocator almacena en el archivo de basede datos un localizador (es como si fuese un puntero) que sentildeala al lugar en el que se encuentra el clob

Con la clase AS400JDBCClob puede utilizar la propiedad de umbral de lob Esta propiedad especifica eltamantildeo maacuteximo (en kilobytes) de LOB (objeto de gran tamantildeo) que puede recuperarse como parte de unconjunto de resultados Los LOB cuyo tamantildeo sobrepasa este umbral se recuperan en fragmentosutilizando una comunicacioacuten adicional con el servidor Los umbrales de LOB de mayor tamantildeo reducenla frecuencia de la comunicacioacuten con el servidor pero bajan maacutes datos de LOB aunque dichos datos nose utilicen Los umbrales de LOB de menor tamantildeo pueden incrementar la frecuencia de la comunicacioacutencon el servidor pero uacutenicamente bajan los datos de LOB seguacuten se necesiten En ldquoPropiedades JDBC deIBM Toolbox para Javardquo en la paacutegina 266 encontraraacute informacioacuten sobre las propiedades adicionales queestaacuten disponibles

Mediante la clase AS400JDBCClob se pueden realizar estas tareasv Devolver el clob entero como una corriente de caracteres ASCIIv Devolver el contenido del clob como una corriente de caracteresv Devolver una parte del contenido del clobv Devolver la longitud del clobv Crear una corriente de caracteres Unicode o una corriente de caracteres ASCII para escribir en el clobv Escribir una serie en el clobv Truncar el clob

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase AS400JDBCClob para leerinformacioacuten de un clob y actualizar un clob

Ejemplo coacutemo se utiliza la clase AS400JDBCClob para leer informacioacuten de un clobClob clob = rsgetClob(1)int length = cloblength()String s = clobgetSubString(1 (int) length)

Ejemplo coacutemo se utiliza la clase AS400JDBCClob para actualizar un clobResultSet rs = statementexecuteQuery (SELECT CLOB FROM MYTABLE)rsabsolute(4)Clob clob = rsgetClob(1)

Cambie los caracteres del clob empezando por el tercer caraacutecter del clobclobsetString (3 Small)

Actualice el clob en el conjunto de resultados empezando por el tercer caraacutecter del clob y truncando el clob al final de la serie de actualizacioacuten (el clob ahora tiene 7 caracteres)rsupdateClob(1 clob)

Actualice la base de datos con el clob actualizado Asiacute se cambiaraacute el clob en la base de datos empezando en el tercer caraacutecter del clob y truncando el clob al final de la serie de actualizacioacutenrsupdateRow()rsclose()

Clase AS400JDBCClobLocator

Puede utilizar un objeto AS400JDBCClobLocator para acceder a los objetos de tipo caraacutecter de grantamantildeo (CLOB)

66 IBM Toolbox para Java IBM Toolbox para Java

Mediante la clase AS400JDBCClobLocator se pueden realizar estas tareasv Devolver el clob entero como una corriente de caracteres ASCIIv Devolver el clob entero como una corriente de caracteresv Devolver una parte del contenido del clobv Devolver la longitud del clobv Crear una corriente de caracteres Unicode o una corriente de caracteres ASCII para escribir en el clobv Escribir una serie en el clobv Truncar el clob

Javadoc AS400JDBCClobJavadoc AS400JDBCClobLocator

Clase AS400JDBCConnection

La clase AS400JDBCConnection proporciona una conexioacuten JDBC con una base de datos DB2 para IBM iespeciacutefica

Utilice DriverManagergetConnection() para crear nuevos objetos AS400JDBCConnection Para obtenermaacutes informacioacuten consulte ldquoRegistro del controlador JDBCrdquo en la paacutegina 80

Hay muchos paraacutemetros opcionales que pueden especificarse al crearse la conexioacuten Las propiedadespueden especificarse como parte del URL o en un objeto javautilProperties En ldquoPropiedades JDBC deIBM Toolbox para Javardquo en la paacutegina 266 encontraraacute una lista completa de las propiedades soportadaspor AS400JDBCDriver

Nota una conexioacuten puede contener como maacuteximo 9999 sentencias abiertas

AS400JDBCConnection incluye soporte para los puntos de salvar y la posibilidad de retencioacuten a nivel delas sentencias asiacute como soporte limitado para la devolucioacuten de claves generadas automaacuteticamente

Para utilizar los tickets de kerberos establezca uacutenicamente el nombre de sistema (y no la contrasentildea) enel objeto URL JDBC La identidad del usuario se recupera mediante la infraestructura JGSS (Java GenericSecurity Services) por lo que tampoco necesita especificar un usuario en el URL JDBC Solo puedeestablecer un meacutetodo de autenticacioacuten en un objeto AS400JDBCConnection a la vez Al establecer lacontrasentildea se borran los tickets de kerberos o los siacutembolos de perfil Para obtener maacutes informacioacutenconsulte ldquoClase AS400rdquo en la paacutegina 21

Mediante la clase AS400JDBCConnection se pueden realizar estas tareasv Crear una sentencia (objetos Statement PreparedStatement o CallableStatement)v Crear una sentencia que tenga un tipo de conjunto de resultados y una concurrencia especiacuteficos

(objetos Statement PreparedStatement o CallableStatement)v Comprometer y retrotraer los cambios efectuados en la base de datos y liberar los bloqueos de base de

datos que estaacuten retenidos actualmentev Cerrar la conexioacuten y los recursos del servidor de inmediato en lugar de esperar a que se liberen

automaacuteticamentev Establecer la posibilidad de retencioacuten y obtener la posibilidad de retencioacuten de la conexioacutenv Establecer el aislamiento de transaccioacuten y obtener el aislamiento de transaccioacuten de la conexioacutenv Obtener los metadatos de la conexioacutenv Activar o desactivar el compromiso automaacuteticov Obtener el identificador de trabajo del trabajo servidor de host que corresponde a la conexioacuten

Si utiliza JDBC 30 y se conecta a un servidor que ejecuta IBM i 52 o posterior puede emplearAS400JDBCConnection para llevar a cabo las acciones siguientes

IBM Toolbox para Java 67

v Crear una sentencia con una posibilidad de retencioacuten de conjunto de resultados especiacutefica (objetoStatement PreparedStatement o CallableStatement)

v Crear una sentencia preparada que devuelva las claves generadas automaacuteticamente (cuando se llama agetGeneratedKeys() en el objeto Statement)

v Utilizar puntos de salvar que ofrecen un control maacutes especiacutefico de las transaccionesndash Establecer puntos de salvarndash Retrotraer puntos de salvarndash Liberar puntos de salvar

Javadoc AS400JDBCConnection

AS400JDBCConnectionPool

La clase AS400JDBCConnectionPool representa una agrupacioacuten de objetos AS400JDBCConnectiondisponibles para su uso por un programa Java como parte del soporte de IBM Toolbox para Java para laAPI JDBC 20 Optional Package

Puede emplear un objeto AS400JDBCConnectionPoolDataSource para especificar las propiedades de lasconexiones que se crean en la agrupacioacuten como se muestra en el ejemplo siguiente

No podraacute cambiar el origen de datos de la agrupacioacuten de conexiones una vez que haya solicitado unaconexioacuten y la agrupacioacuten esteacute en uso Para restablecer el origen de datos de la agrupacioacuten de conexionesprimero debe efectuar una llamada a close() en la agrupacioacuten

Para devolver conexiones a un objeto AS400JDBCConnectionPool utilice close() en el objetoAS400JDBCConnection

Nota si las conexiones no se devuelven a la agrupacioacuten el tamantildeo de la agrupacioacuten de conexionessigue creciendo y las conexiones no se reutilizan

Para establecer propiedades en la agrupacioacuten utilice los meacutetodos heredados de ConnectionPool Entre laspropiedades que puede establecer se encuentran las siguientesv Nuacutemero maacuteximo de conexiones permitidas en la agrupacioacutenv Tiempo maacuteximo de vida de una conexioacutenv Tiempo maacuteximo de inactividad de una conexioacuten

Tambieacuten puede registrar objetos AS400JDBCConnectionPoolDataSource mediante un proveedor deservicio JNDI (Java Naming and Directory Interface) Para obtener maacutes informacioacuten acerca de losproveedores de servicios JNDI consulte los enlaces de referencia de IBM Toolbox para Java

Ejemplo coacutemo se utiliza la agrupacioacuten de conexiones

El ejemplo siguiente obtiene de JNDI un origen de datos de agrupacioacuten de conexiones y lo emplea paracrear una agrupacioacuten de conexiones con 10 conexiones

Obtenga un objeto AS400JDBCConnectionPoolDataSource de JNDI (se supone que el entorno JNDI estaacute establecido)Context context = new InitialContext(environment)AS400JDBCConnectionPoolDataSource datasource =

(AS400JDBCConnectionPoolDataSource)contextlookup(jdbcmyDatabase)

Cree un objeto AS400JDBCConnectionPoolAS400JDBCConnectionPool pool = new AS400JDBCConnectionPool(datasource)

Antildeada 10 conexiones a la agrupacioacuten que la aplicacioacuten pueda utilizar (las conexiones fiacutesicas de base de datos se crean

68 IBM Toolbox para Java IBM Toolbox para Java

seguacuten el origen de datos)poolfill(10)

Obtenga un handle con una conexioacuten de base de datos de la agrupacioacutenConnection connection = poolgetConnection()

Realizar diversas consultasactualizaciones en la base de datos

Cierre el handle de la conexioacuten para devolverla a la agrupacioacutenconnectionclose()

La aplicacioacuten trabaja con varias aplicaciones maacutes de la agrupacioacuten

Cierre la agrupacioacuten para liberar todos los recursospoolclose()

Javadoc AS400JDBCConnectionPoolJavadoc AS400JDBCConnectionPoolJavadoc AS400JDBCConnectionPoolDataSource

Clase AS400JDBCManagedConnectionPoolDataSource

La agrupacioacuten de conexiones JDBC es una agrupacioacuten de conexiones gestionadas que permite reutilizarconexiones

La clase AS400JDBCManagedConnectionPoolDataSource simplifica el mantenimiento de agrupaciones deconexiones eliminando la necesidad de que las aplicaciones de usuario implementen su propio coacutedigo degestioacuten La agrupacioacuten de conexiones se utiliza en combinacioacuten con el mecanismo de la interfazDataSource de JDBC La clase AS400JDBCManagedConnectionPoolDataSource contiene unaimplementacioacuten de la interfaz javaxsqlDataSource Esta clase gestiona las funciones del mecanismo deagrupacioacuten de conexiones y permite acceder a eacutel igual que a un DataSource habitual La configuracioacuten yutilizacioacuten del gestor de agrupaciones de conexiones JDBC autogestionadas implica la utilizacioacuten de JNDI(Java Naming and Directory Interface) para enlazar el origen de datos gestionado de la agrupacioacuten deconexiones Para que la agrupacioacuten de conexiones JDBC autogestionada funcione es necesario JNDI

Estas propiedades permiten configurar los atributos de la agrupacioacuten de conexionesv InitialPoolSizev MinPoolSizev MaxPoolSizev MaxLifetimev MaxIdleTimev PropertyCyclev ReuseConnections

Para obtener maacutes informacioacuten consulte los Javadocs sobre los meacutetodos setX() siendo X la propiedad

Ejemplos coacutemo se utiliza la clase AS400JDBCManagedConnectionPoolDataSource

Estos ejemplos ilustran la utilizacioacuten de la clase AS400JDBCManagedConnectionPoolDataSource La claseAS400JDBCManagedConnectionPoolDataSource simplifica el mantenimiento de agrupaciones deconexiones eliminando la necesidad de que las aplicaciones de usuario implementen su propio coacutedigo degestioacuten

Nota al utilizar los ejemplos de coacutedigo acepta los teacuterminos del ldquoInformacioacuten sobre licencia de coacutedigo yexencioacuten de responsabilidadrdquo en la paacutegina 590

IBM Toolbox para Java 69

Ejemplo 1

Este breve ejemplo muestra la utilizacioacuten baacutesica de la claseAS400JDBCManagedConnectionPoolDataSourceimport javaxnamingContextimport javaxnamingInitialContextimport javaxsqlDataSource

import comibmas400accessAS400JDBCManagedConnectionPoolDataSourceimport comibmas400accessAS400JDBCManagedDataSource

public class TestJDBCConnPoolSnippet

void test()

AS400JDBCManagedConnectionPoolDataSource cpds0 = new AS400JDBCManagedConnectionPoolDataSource()

Establecer propiedades generales de origen de datos Tenga en cuenta que tanto el origen de datos de agrupacioacuten de conexiones (CPDS) como el origen de datos gestionado (MDS) tienen estas propiedades y pueden tener valores diferentescpds0setServerName(host)cpds0setDatabaseName(host)iasp puede especificarse aquiacutecpds0setUser(userid)cpds0setPassword(password)

cpds0setSavePasswordWhenSerialized(true)

Establecer propiedades especiacuteficas de agrupacioacuten de conexionescpds0setInitialPoolSize(initialPoolSize_)cpds0setMinPoolSize(minPoolSize_)cpds0setMaxPoolSize(maxPoolSize_)cpds0setMaxLifetime((int)(maxLifetime_1000)) convertir a segundoscpds0setMaxIdleTime((int)(maxIdleTime_1000)) convertir a segundoscpds0setPropertyCycle((int)(propertyCycle_1000)) convertir a segundoscpds0setReuseConnections(false) no reutilizar conexiones

Establecer la faacutebrica de contexto inicial que debe utilizarseSystemsetProperty(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory)

Obtener el contexto inicial JNDIContext ctx = new InitialContext()

Nota a continuacioacuten figura un procedimiento alternativo para establecer las propiedades de contexto localmente Properties env = new Properties() envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory) Contexto ctx = new InitialContext(env)

ctxrebind(mydatasource cpds0) Ahora pueden realizarse buacutesquedas en cpds por el nombre mydatasource

Crear un objeto DataSource estaacutendar que haga referencia a eacutel

AS400JDBCManagedDataSource mds0 = new AS400JDBCManagedDataSource()mds0setDescription(DataSource que da soporte a la agrupacioacuten de conexiones)mds0setDataSourceName(mydatasource)ctxrebind(ConnectionPoolingDataSource mds0)

DataSource dataSource_ = (DataSource)ctxlookup(ConnectionPoolingDataSource)

AS400JDBCManagedDataSource mds_ = (AS400JDBCManagedDataSource)dataSource_

boolean isHealthy = mds_checkPoolHealth(false) comprobar el estado de la agrupacioacuten

Connection c = dataSource_getConnection()

Ejemplo 2

Este ejemplo muestra maacutes detalles acerca de la utilizacioacuten de la claseAS400JDBCManagedConnectionPoolDataSource

70 IBM Toolbox para Java IBM Toolbox para Java

import javaawtTextAreaimport javaioBufferedReaderimport javaioFileimport javaioFileReaderimport javaioFileInputStreamimport javaioFileOutputStreamimport javaioOutputStreamimport javaioPrintStreamimport javautilVectorimport javautilProperties

import javasqlConnectionimport javaxsqlDataSourceimport javasqlResultSetimport javasqlStatementimport javaxnamingimport javautilDateimport javautilArrayListimport javautilRandomimport comibmas400accessAS400import comibmas400accessAS400JDBCManagedConnectionPoolDataSourceimport comibmas400accessAS400JDBCManagedDataSourceimport comibmas400accessTrace

public class TestJDBCConnPool

private static final boolean DEBUG = false

Si activa este indicador aseguacuterese de activar tambieacuten el indicador siguiente AS400JDBCConnectionTESTING_THREAD_SAFETYprivate static final boolean TESTING_THREAD_SAFETY = false

private static String useridprivate static String passwordprivate static String host

Nota a efectos de coherencia todos los valores de tiempo se almacenan en unidades de milisegundosprivate int initialPoolSize_ inicial de conexiones en la agrupacioacutenprivate int minPoolSize_ miacuten de conexiones en la agrupacioacutenprivate int maxPoolSize_ maacutex de conexiones en la agrupacioacutenprivate long maxLifetime_ maacutex de tiempo de vida (msegs) de conexiones en la agrupacioacutenprivate long maxIdleTime_ maacutex de tiempo de desocupacioacuten (msegs) de conexiones disponibles en la agrupacioacutenprivate long propertyCycle_ frecuencia de mantenimiento de agrupacioacuten (msegs)

private int numDaemons_ de daemons de peticionario que deben crearseprivate static long timeToRunDaemons_ duracioacuten total (msegs) de ejecucioacuten de los daemonsprivate long daemonMaxSleepTime_ tiempo maacutex (msegs) para latencia de daemons de peticionario en cada cicloprivate long daemonMinSleepTime_ tiempo miacuten (msegs) para latencia de daemons de peticionario en cada cicloprivate long poolHealthCheckCycle_ de msegs entre llamadas a checkPoolHealth()

private boolean keepDaemonsAlive_ = true Si es false los daemons se cierran

private DataSource dataSource_private AS400JDBCManagedDataSource mds_

private final Object daemonSleepLock_ = new Object()

private Random random_ = new Random()

static

try ClassforName(comibmas400accessAS400JDBCDriver)

catch ( Exception e)

Systemoutprintln(Imposible registrar el controlador JDBC)Systemexit (0)

public static void main(String[] args)

host = args[0]userid = args[1]password = args[2]timeToRunDaemons_ = (new Integer(args[3]))intValue() 1000 milisegundosargs[3]=tiempo de ejecucioacuten en segundos

IBM Toolbox para Java 71

TestJDBCConnPool cptest = new TestJDBCConnPool()

cptestsetup()cptestrunTest()

public void setup()

try

if (DEBUG)Systemoutprintln(iquestel distintivo TESTING_THREAD_SAFETY

+ (es TESTING_THREAD_SAFETY true false))

if (TESTING_THREAD_SAFETY)

Ajustar los valores para realizar pruebas de utilizacioacuten intensiva de hebras NOTA se presupone que la clase AS400JDBCConnection tambieacuten se ha modificado para

no establecer conexiones reales con un servidorreal

Para ello edite AS400JDBCConnectionjava cambiando su indicador TESTING_THREAD_SAFETY a rsquofalsersquo y vuelva a compilar

minPoolSize_ = 100maxPoolSize_ = 190initialPoolSize_ = 150 este valor debe restablecerse en maxPoolSize_numDaemons_ = 75if (timeToRunDaemons_ == 0)

timeToRunDaemons_ = 1801000 180 segundos == 3 minutos

else Establecer valores maacutes conservadores ya que van a establecerse conexiones reales con un

servidor real y no deseamos monopolizar el servidorminPoolSize_ = 5maxPoolSize_ = 15initialPoolSize_ = 9numDaemons_ = 4if (timeToRunDaemons_ == 0)

timeToRunDaemons_ = 151000 15 segundos

maxLifetime_ = (int)timeToRunDaemons_ 3maxIdleTime_ = (int)timeToRunDaemons_ 4propertyCycle_ = timeToRunDaemons_ 4poolHealthCheckCycle_ = Mathmin(timeToRunDaemons_ 4 20601000) como miacutenimo una vez cada 20 minutos (maacutes frecuentemente si el tiempo de ejecucioacuten es maacutes corto)daemonMaxSleepTime_ = Mathmin(timeToRunDaemons_ 3 101000) como maacuteximo 10 segundos (menos si el tiempo de ejecucioacuten es maacutes corto)daemonMinSleepTime_ = 20 milisegundos

if (DEBUG)Systemoutprintln(setup Construyendo

+ AS400JDBCManagedConnectionPoolDataSource (cpds0))AS400JDBCManagedConnectionPoolDataSource cpds0 =

new AS400JDBCManagedConnectionPoolDataSource()

Establecer propiedades de origen de datos Tenga en cuenta que tanto CPDS como MDS tienen estas propiedades y pueden tener valores diferentescpds0setServerName(host)cpds0setDatabaseName(host)iasp puede especificarse aquiacutecpds0setUser(userid)cpds0setPassword(password)

cpds0setSavePasswordWhenSerialized(true)

Establecer propiedades especiacuteficas de agrupacioacuten de conexionescpds0setInitialPoolSize(initialPoolSize_)cpds0setMinPoolSize(minPoolSize_)cpds0setMaxPoolSize(maxPoolSize_)cpds0setMaxLifetime((int)(maxLifetime_1000)) convertir a segundoscpds0setMaxIdleTime((int)(maxIdleTime_1000)) convertir a segundoscpds0setPropertyCycle((int)(propertyCycle_1000)) convertir a segundoscpds0setReuseConnections(false) no reutilizar conexiones

Establecer la faacutebrica de contexto inicial que debe utilizarseSystemsetProperty(ContextINITIAL_CONTEXT_FACTORY

comsunjndifscontextRefFSContextFactory)

Obtener el contexto inicial JNDI

72 IBM Toolbox para Java IBM Toolbox para Java

Context ctx = new InitialContext()

Nota a continuacioacuten figura un procedimiento alternativo para establecer las propiedades de contexto localmente Properties env = new Properties() envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory) Contexto ctx = new InitialContext(env)

ctxrebind(mydatasource cpds0) Ahora pueden realizarse buacutesquedas en cpds por el

nombre mydatasource

if (DEBUG)Systemoutprintln(setup lookup(mydatasource + ))

AS400JDBCManagedConnectionPoolDataSource cpds1 = (AS400JDBCManagedConnectionPoolDataSource)ctxlookup(mydatasource) if (DEBUG) Systemoutprintln(setup cpds1getUser() == | + cpds1getUser() + |)

Crear un objeto DataSource estaacutendar que haga referencia a eacutel

if (DEBUG)Systemoutprintln(setup Constructing AS400JDBCManagedDataSource (mds0))

AS400JDBCManagedDataSource mds0 = new AS400JDBCManagedDataSource()mds0setDescription(DataSource que da soporte a la agrupacioacuten de conexiones)mds0setDataSourceName(mydatasource)ctxrebind(ConnectionPoolingDataSource mds0)

if (DEBUG)Systemoutprintln(setup lookup(ConnectionPoolingDataSource + ))

dataSource_ = (DataSource)ctxlookup(ConnectionPoolingDataSource)dataSource_setLogWriter(output_)if (DEBUG)Systemoutprintln(setup dataSource_getUser() == | +

((AS400JDBCManagedDataSource)dataSource_)getUser() + |)

mds_ = (AS400JDBCManagedDataSource)dataSource_catch (Exception e)

eprintStackTrace()Systemoutprintln(Error de configuracioacuten durante la creacioacuten del archivo de rastreo)

void displayConnectionType(Connection conn boolean specifiedDefaultId)

if (conn instanceof comibmas400accessAS400JDBCConnectionHandle)Systemoutprint((+ (specifiedDefaultId + -) + P))

elseSystemoutprint((+ (specifiedDefaultId + -) + NP))

Obtiene y devuelve conexiones desde y hacia una agrupacioacuten de conexiones durante un tiempopublic void runTest()

boolean ok = truetry

Systemoutprintln(Pruebe iniciada ejecutada en + new Date())

if (DEBUG)Systemoutprintln(Comprobacioacuten de estado justo despueacutes de la

creacioacuten del origen de datos+ (se espera que la agrupacioacuten auacuten no exista) )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten existe antes del primer getConnection())

Comprobar algunos meacutetodos getset para propiedades JDBCSystemoutprintln(Comprobando meacutetodos getset )

mds_setAccess(soacutelo lectura)if (mds_getAccess()equals(soacutelo lectura))

ok = falseSystemoutprintln(nERROR getAccess() ha devuelto un valor inesperado

IBM Toolbox para Java 73

+ | + mds_getAccess()+|)

boolean oldBool = mds_isBigDecimal()boolean newBool = (oldBool false true)mds_setBigDecimal(newBool)if (mds_isBigDecimal() = newBool)

ok = falseSystemoutprintln(nERROR isBigDecimal() ha devuelto un valor

inesperado + |+mds_isBigDecimal()+|)

mds_setBigDecimal(oldBool)

int oldInt = mds_getBlockCriteria()int newInt = (oldInt == 2 1 2)mds_setBlockCriteria(newInt)if (mds_getBlockCriteria() = newInt)

ok = falseSystemoutprintln(nERROR getBlockCriteria() ha devuelto un valor

inesperado + |+mds_getBlockCriteria()+|)

mds_setBlockCriteria(oldInt)

Comprobar algunos meacutetodos getset para propiedades de socket

oldBool = mds_isKeepAlive()newBool = (oldBool false true)mds_setKeepAlive(newBool)if (mds_isKeepAlive() = newBool)

ok = falseSystemoutprintln(nERROR isKeepAlive() ha devuelto un valor

inesperado + |+mds_isKeepAlive()+|)

mds_setKeepAlive(oldBool)

oldInt = mds_getReceiveBufferSize()newInt = (oldInt == 256 512 256)mds_setReceiveBufferSize(newInt)if (mds_getReceiveBufferSize() = newInt)

ok = falseSystemoutprintln(nERROR getReceiveBufferSize() ha devuelto un valor

inesperado + |+mds_getReceiveBufferSize()+|)

mds_setReceiveBufferSize(oldInt)

Systemoutprintln(CONNECTION 1)Object o = dataSource_getConnection()Systemoutprintln(ogetClass())Systemoutprintln(LOOK ABOVE)Connection c1 = dataSource_getConnection()

if (DEBUG)displayConnectionType(c1 true)

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes del primer getConnection() )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del primer getConnection())

if (TESTING_THREAD_SAFETY)

try

c1setAutoCommit(false)if (DEBUG)Systemoutprintln(SELECT FROM QIWSQCUSTCDT)

Statement s = c1createStatement()ResultSet rs = sexecuteQuery(SELECT FROM QIWSQCUSTCDT)while (rsnext ())

if (DEBUG)Systemoutprintln(rsgetString(2))

74 IBM Toolbox para Java IBM Toolbox para Java

rsclose()sclose()

catch (Exception e)

eprintStackTrace()if (DEBUG)Systemoutprintln(Comprobacioacuten de estado despueacutes de un

error de conexioacuten muy grave )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado

despueacutes del error muy + grave)

Systemoutprintln(CONNECTION 2)Connection c2 = dataSource_getConnection(userid password)if (DEBUG)displayConnectionType(c2 false)

Systemoutprintln(CONNECTION 3)Connection c3 = dataSource_getConnection()if (DEBUG)displayConnectionType(c3 true)

c1close()

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes del primer close())

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del primer close())

Systemoutprintln(CONNECTION 4)Connection c4 = dataSource_getConnection()if (DEBUG) displayConnectionType(c4 true)

c1close() cerrar de nuevoc2close()c3close()c4close()

if (DEBUG) Systemoutprintln(Comprobando estado despueacutes del uacuteltimo close())if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del uacuteltimo close())

Iniciar los daemons de pruebaSystemoutprintln(Iniciando daemons de prueba)startThreads()

Ejecutar los daemons de prueba durante un tiempo comprobar el estado de la agrupacioacuten perioacutedicamente

long startTime = SystemcurrentTimeMillis()long endTime = startTime + timeToRunDaemons_while (SystemcurrentTimeMillis() lt endTime)

Systemoutprint(h) Permitir que los daemons se ejecuten durante un tiempo y luego comprobar el estado de la agrupacioacutentry

Threadsleep(poolHealthCheckCycle_)catch (InterruptedException ie) if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de iniciar los daemons de prueba)

Detener los daemons de pruebaSystemoutprintln(Deteniendo daemons de prueba)stopThreads()

if (DEBUG)Systemoutprintln(Comprobacioacuten de estado despueacutes de ejecutar

daemons connectionGetter)

IBM Toolbox para Java 75

if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de detener los daemons de prueba)

if (TESTING_THREAD_SAFETY)

Systemoutprintln(CONNECTION 5)Connection c = dataSource_getConnection()if (DEBUG) displayConnectionType(c true)csetAutoCommit(false)if (DEBUG) Systemoutprintln(SELECT FROM QIWSQCUSTCDT)Statement s = ccreateStatement()ResultSet rs = sexecuteQuery(SELECT FROM QIWSQCUSTCDT)while (rsnext ())

if (DEBUG) Systemoutprintln(rsgetString(2))rsclose()sclose()cclose()

Systemoutprintln(nCerrando la agrupacioacuten)mds_closePool()

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes de cerrar la agrupacioacuten)

TracesetTraceJDBCOn(true) aseguacuterese de que se imprima el estado finalTracesetTraceOn(true)if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de cerrar la agrupacioacuten)

Systemoutprintln()if(ok==true)

Systemoutprintln(prueba ejecutada satisfactoriamente)else

Systemoutprintln(prueba anoacutemala)catch (Exception e)

Systemoutprintln(e)eprintStackTrace()

finally

Systemoutprintln(Prueba finalizada en + new Date())

void startThreads()

Crear un grupo de hebras que llaman a getConnection()Thread[] threads = new Thread[numDaemons_]for (int i=0 iltnumDaemons_ i++)

ConnectionGetter getter Elegir aleatoriamente si este daemon especificaraacute el uid predeterminado o un uid exclusivoif (random_nextBoolean())

getter = new ConnectionGetter(useridpassword)if (TESTING_THREAD_SAFETY) puede utilizarse un userid ficticio

getter = new ConnectionGetter(Thread+i Pwd+i)else debe utilizarse un userid real

getter = new ConnectionGetter(useridpassword)

else

getter = new ConnectionGetter(null null)

threads[i] = new Thread(getter [+i+])threads[i]setDaemon(true)

Iniciar las hebrasfor (int i=0 iltnumDaemons_ i++)

76 IBM Toolbox para Java IBM Toolbox para Java

threads[i]start()

void stopThreads()

Indicar a las hebras que se detengankeepDaemonsAlive_ = falsesynchronized (daemonSleepLock_)

daemonSleepLock_notifyAll()

Esperar a que los daemons se detengantry

Threadsleep(3000)catch (InterruptedException ie)

ConnectionGetter --------------------------------------------------------------------

Clase de ayuda Este daemon se activa a intervalos aleatorios y obtieneotra conexioacuten de la agrupacioacuten de conexiones o devuelve una conexioacuten obtenidaanteriormente a la agrupacioacuten

private final class ConnectionGetter implements Runnable

private String uid_private String pwd_private boolean useDefaultUid_private long maxSleepTime_private String threadName_private boolean firstConnection_ = trueArrayList connections_ = new ArrayList() lista de conexiones que actualmente son rsquopropiedadrsquo de este meacutetodo de obtencioacuten

ConnectionGetter(String uid String pwd) uid_ = uidpwd_ = pwdif (uid_ == null) useDefaultUid_ = trueelse useDefaultUid_ = falsemaxSleepTime_ = daemonMaxSleepTime_ copia propia que puede ajustarse

public void run()

threadName_ = ThreadcurrentThread()getName()if (DEBUG) Systemoutprintln(ConnectionGetter(+threadName_+) Starting up)

try

while (keepDaemonsAlive_)

try

Elegir un tiempo de latencia aleatorio entre los valores miacutenimo y maacuteximolong sleepTime = Mathmax((long)(maxSleepTime_ random_nextFloat())

daemonMinSleepTime_) Nota nunca debe llamarse a wait(0) porque esperariacutea indefinidamentesynchronized (daemonSleepLock_)

try daemonSleepLock_wait(sleepTime)Systemoutprint()

catch (InterruptedException ie)

if (keepDaemonsAlive_) break

Decidir aleatoriamente si debe solicitarse otra conexioacuten o devolver una conexioacuten obtenida anteriormenteConnection connif (random_nextBoolean()) Dejar la decisioacuten a la suerte Solicitar otra conexioacuten

if (useDefaultUid_)

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) - get())

IBM Toolbox para Java 77

conn = dataSource_getConnection()else

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) -

+ get(+uid_+))conn = dataSource_getConnection(uid_ pwd_)

if (conn == null) Systemoutprintln(ConnectionGetter(+threadName_+) ERROR

+ getConnection() ha devuelto null)else

Ocasionalmente olvidar que somos propietarios de una conexioacuten y olvidar cerrarla Las conexiones hueacuterfanas deben en uacuteltimo teacutermino sobrepasar su tiempo de vida maacuteximo y el gestor de conexiones las repetiraacutefloat val = random_nextFloat()if (firstConnection_ || val lt 01)

convierta en rsquohueacuterfanasrsquo algunas de las conexiones obtenidasfirstConnection_ = false

else

connections_add(conn)if (DEBUG) displayConnectionType(conn useDefaultUid_)if (conn instanceof comibmas400accessAS400JDBCConnectionHandle) Hemos colocado una conexioacuten en una agrupacioacuten Intente aumentar el tiempo de ciclo

if (maxSleepTime_ gt 100)maxSleepTime_--

elsemaxSleepTime_ = 100

else No hemos colocado una conexioacuten en una agrupacioacuten Eso significa que la agrupacioacuten

debe estar al maacuteximo de capacidad Reduzca un poco el tiempo de ciclomaxSleepTime_ = maxSleepTime_ + 50

else Cerrar una conexioacuten de la que actualmente somos propietarios

if (connections_size() = 0) conn = (Connection)connections_remove(0)connclose()

inner trycatch (Exception e)

eprintStackTrace()

outer while outer tryfinally

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) Stopping)

Devolver todas las conexiones que todaviacutea estaacuten en la listafor (int i=0 iltconnections_size() i++)

Connection conn = (Connection)connections_remove(0)try connclose() catch (Exception e) eprintStackTrace()

clase interna rsquoConnectionGetterrsquo

Interfaz DatabaseMetaData

Puede utilizar un objeto DatabaseMetaData para obtener informacioacuten acerca de la base de datos comoconjunto y obtener asimismo informacioacuten de cataacutelogo

78 IBM Toolbox para Java IBM Toolbox para Java

El siguiente ejemplo muestra coacutemo se obtiene una lista de tablas que es una funcioacuten de cataacutelogo Coneacutectese al servidorConnection c = DriverManagergetConnection(jdbcas400mySystem)

Obtenga los metadatos de base de datos de la conexioacutenDatabaseMetaData dbMeta = cgetMetaData()

Obtenga una lista de tablas que coincidan con los criterios siguientesString catalog = myCatalogString schema = mySchemaString table = myTable indica el patroacuten de buacutesquedaString types[] = TABLE VIEW SYSTEM TABLEResultSet rs = dbMetagetTables(catalog schema table types)

Itere por ResultSet para obtener los valores

Cierre el objeto Connectioncclose()

Informacioacuten relacionadaJavadoc AS400JDBCDatabaseMetaData

Clase AS400JDBCDataSource

La clase AS400JDBCDataSource representa una faacutebrica de conexiones de base de datos de IBM i La claseAS400JDBCConnectionPoolDataSource representa una faacutebrica de objetos AS400JDBCPooledConnection

Puede registrar cualquier tipo de objeto de origen de datos mediante un proveedor de servicios JNDI(Java Naming and Directory Interface) Para obtener maacutes informacioacuten sobre proveedores de serviciosJNDI consulte la seccioacuten ldquoInformacioacuten relacionada para IBM Toolbox para Javardquo en la paacutegina 588

Ejemplos

Los ejemplos siguientes muestran formas de crear y utilizar objetos AS400JDBCDataSource Los dosuacuteltimos ejemplos muestran coacutemo registrar un objeto AS400JDBCDataSource en JNDI y a continuacioacutenemplear el objeto devuelto de JNDI para obtener una conexioacuten de base de datos Observe que incluso alusar distintos proveedores de servicio JNDI el coacutedigo es muy parecido

Ejemplo crear un objeto AS400JDBCDataSource

A continuacioacuten figura un ejemplo en el que se crea un objeto AS400JDBCDataSource y se conecta este conuna base de datos

Cree un origen de datos para efectuar la conexioacutenAS400JDBCDataSource datasource = new AS400JDBCDataSource(myAS400)datasourcesetUser(myUser)datasourcesetPassword(MYPWD)

Cree una conexioacuten de base de datos con el servidorConnection connection = datasourcegetConnection()

Ejemplo crear un objeto AS400JDBCConnectionPoolDataSource que pueda utilizarse para almacenaren la memoria cacheacute conexiones JDBC

El ejemplo siguiente muestra coacutemo utilizar un objeto AS400JDBCConnectionPoolDataSource paraalmacenar en la memoria cacheacute conexiones JDBC

Cree un origen de datos para efectuar la conexioacutenAS400JDBCConnectionPoolDataSource dataSource =

new AS400JDBCConnectionPoolDataSource(myAS400)datasourcesetUser(myUser)datasourcesetPassword(MYPWD)

IBM Toolbox para Java 79

Obtenga PooledConnectionPooledConnection pooledConnection = datasourcegetPooledConnection()

Ejemplo coacutemo se utilizan las clases de proveedor de servicio JNDI para almacenar un objetoAS400JDBCDataSource

El ejemplo siguiente muestra coacutemo utilizar las clases de proveedor de servicio JNDI para almacenar unobjeto DataSource directamente en el sistema de archivos integrado del servidor

Cree un origen de datos para la base de datos de IBM iAS400JDBCDataSource dataSource = new AS400JDBCDataSource()dataSourcesetServerName(myAS400)dataSourcesetDatabaseName(myAS400 Database)

Registre el origen de datos en JNDI (Java Naming and Directory Interface)Hashtable env = new Hashtable()envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory)Context context = new InitialContext(env)contextbind(jdbccustomer dataSource)

Devuelva un objeto AS400JDBCDataSource de JNDI y obtenga una conexioacutenAS400JDBCDataSource datasource = (AS400JDBCDataSource) contextlookup(jdbccustomer)Connection connection = datasourcegetConnection(myUser MYPWD)

Ejemplo coacutemo se utilizan los objetos AS400JDBCDataSource y las clases de IBM SecureWay Directorycon un servidor de directorios LDAP (Lightweight Directory Access Protocol)

Los ejemplos siguientes muestra coacutemo utilizar las clases de IBM SecureWay Directory para almacenar unobjeto en un servidor de directorios LDAP (Lightweight Directory Access Protocol)

Cree un origen de datos para la base de datos de IBM iAS400JDBCDataSource dataSource = new AS400JDBCDataSource()dataSourcesetServerName(myAS400)dataSourcesetDatabaseName(myAS400 Database)

Registre el origen de datos en JNDI (Java Naming and Directory Interface)Hashtable env = new Hashtable()envput(ContextINITIAL_CONTEXT_FACTORY comibmjndiLDAPCtxFactory)Context context = new InitialContext(env)contextbind(cn=myDatasource cn=myUsers ou=myLocationo=myCompanyc=myCountryRegion

dataSource)

Devuelva un objeto AS400JDBCDataSource de JNDI y obtenga una conexioacutenAS400JDBCDataSource datasource = (AS400JDBCDataSource) contextlookup(

cn=myDatasource cn=myUsers ou=myLocationo=myCompanyc=myCountryRegion)Connection connection = datasourcegetConnection(myUser MYPWD)

Javadoc AS400JDBCDataSourceJavadoc AS400JDBCConnectionPoolDataSourceJavadoc AS400JDBCPooledConnection

Registro del controlador JDBC

Antes de utilizar JDBC para acceder a los datos de un archivo de base de datos del servidor es necesarioregistrar el controlador JDBC de IBM Toolbox para Java con DriverManager

El controlador se puede registrar ya sea utilizando una propiedad de sistema Java o haciendo que elprograma Java registre el controladorv Registrar mediante una propiedad del sistema

Cada maacutequina virtual tiene su propio meacutetodo para establecer las propiedades del sistema Por ejemploel mandato Java de JDK utiliza la opcioacuten -D para establecer las propiedades del sistema Paraestablecer el controlador mediante las propiedades del sistema especifique

80 IBM Toolbox para Java IBM Toolbox para Java

-Djdbcdrivers=comibmas400accessAS400JDBCDriver

v Registrar mediante el programa JavaPara cargar el controlador JDBC de IBM Toolbox para Java antes de la primera llamada a JDBC antildeadaal programa Java la liacutenea siguiente

ClassforName(comibmas400accessAS400JDBCDriver)

El controlador JDBC de IBM Toolbox para Java se registra cuando se carga siendo este es el meacutetodopreferido de registrar el controlador Tambieacuten puede registrar expliacutecitamente el controlador JDBC deIBM Toolbox para Java con lo siguiente

javasqlDriverManagerregisterDriver (new comibmas400accessAS400JDBCDriver ())

Si invoca DriverManagerregisterDriver() el controlador JDBC de IBM Toolbox para Java se registra dosveces Una vez cuando la JVM carga AS400JDBCDriver y otra en la llamada expliacutecita al meacutetodoregisterDriver() Esto se debe a la implementacioacuten de DriverManager sobre la que IBM Toolbox paraJava no tiene control Tener un controlador que aparece dos veces en la lista del registro deDriverManager normalmente no supone ninguacuten problema Aunque puede haber casos en los que seutilicen los dos controladores registrados Por ejemplo cuando se intenta obtener una conexioacuten con unacontrasentildea incorrecta DriverManager no podraacute obtener una conexioacuten con el primer controladorregistrado y por lo tanto lo intentaraacute con el segundo controlador registrado

El controlador JDBC de IBM Toolbox para Java no requiere un objeto AS400 como paraacutemetro de entradacomo lo requieren las demaacutes clases de IBM Toolbox para Java que obtienen datos de un servidor Sinembargo internamente siacute que se utiliza un objeto AS400 para gestionar el usuario predeterminado y lacolocacioacuten de contrasentildeas en memoria cacheacute Cuando se establece una conexioacuten con el servidor porprimera vez puede solicitarse al usuario que escriba el ID de usuario y la contrasentildea El usuario puedeoptar por guardar el ID de usuario como ID de usuario predeterminado y antildeadir la contrasentildea a lamemoria cacheacute de contrasentildeas Al igual que en las demaacutes funciones de IBM Toolbox para Java si es elprograma Java el que proporciona el ID de usuario y la contrasentildea el usuario predeterminado no seestablece y la contrasentildea no se pone en la memoria cacheacute En ldquoGestionar conexiones en programas Javardquoen la paacutegina 361 encontraraacute informacioacuten acerca de coacutemo se gestionan las conexiones

Utilizacioacuten del controlador JDBC para conectarse a una base de datos del servidor

El meacutetodo DriverManagergetConnection() le permite conectarse a la base de datos del servidorDriverManagergetConnection() toma como argumento una serie de URL (localizador uniforme derecursos) El gestor de controladores JDBC intenta localizar un controlador que pueda conectarse a la basede datos representada por el URL Cuando utilice el controlador de IBM Toolbox para Java utilice lasiguiente sintaxis para el URL

jdbcas400systemNamedefaultSchemalistOfProperties

Nota en el URL se puede omitir systemName o defaultSchema

Para utilizar los tickets de kerberos establezca uacutenicamente el nombre de sistema (y no la contrasentildea) enel objeto URL JDBC La identidad del usuario se recupera mediante la infraestructura JGSS (Java GenericSecurity Services) por lo que tampoco necesita especificar un usuario en el URL JDBC Solo puedeestablecer un meacutetodo de autenticacioacuten en un objeto AS400JDBCConnection a la vez Al establecer lacontrasentildea se borran los tickets de kerberos o los siacutembolos de perfil Para obtener maacutes informacioacutenconsulte ldquoClase AS400rdquo en la paacutegina 21

Ejemplos utilizacioacuten del controlador JDBC para conectarse a un servidor

Ejemplo utilizar un URL en el que no se especifica un nombre de sistema

Este ejemplo hace que se solicite al usuario que escriba el nombre del sistema al que desea conectarse Coneacutectese al sistema sin nombre Se solicita al usuario que escriba el nombre del sistemaConnection c = DriverManagergetConnection(jdbcas400)

IBM Toolbox para Java 81

Ejemplo conectarse a la base de datos del servidor no se especifica ninguacuten esquema SQLpredeterminado ni ninguna propiedad

Coneacutectese al sistema rsquomySystemrsquo No se especifica ninguacuten esquema SQL predeterminado ni ninguna propiedadConnection c = DriverManagergetConnection(jdbcas400mySystem)

Ejemplo conectarse a la base de datos del servidor se especifica un esquema SQL predeterminado Coneacutectese al sistema rsquomySys2rsquo Se especifica el esquema SQL predeterminado rsquomyschemarsquoConnection c2 = DriverManagergetConnection(jdbcas400mySys2mySchema)

Ejemplo conectarse a la base de datos del servidor y utilizar javautilProperties para especificar laspropiedades

El programa Java puede especificar un conjunto de propiedades de JDBC ya sea utilizando la interfazjavautilProperties o especificando dichas propiedades como parte del URL En ldquoPropiedades JDBC deIBM Toolbox para Javardquo en la paacutegina 266 encontraraacute una lista de las propiedades soportadas

Por ejemplo para especificar las propiedades mediante la interfaz Properties podriacutea utilizar el siguientecoacutedigo

Cree un objeto propiedadesProperties p = new Properties()

Establezca las propiedades para la conexioacutenpput(naming sql)pput(errors full)

Coneacutectese utilizando el objeto de propiedadesConnection c = DriverManagergetConnection(jdbcas400mySystemp)

Ejemplo conectarse a la base de datos del servidor y utilizar un URL (localizador uniforme derecursos) para especificar las propiedades

Coneacutectese utilizando las propiedades Se propiedades se establecen en el URL en lugar de mediante un objeto propiedadesConnection c = DriverManagergetConnection(

jdbcas400mySystemnaming=sqlerrors=full)

Ejemplo conectarse a la base de datos del servidor y especificar el ID de usuario y la contrasentildea Coneacutectese utilizando las propiedades indicadas en el URL y especificando un ID de usuario y una contrasentildeaConnection c = DriverManagergetConnection(

jdbcas400mySystemnaming=sqlerrors=fullauserapassword)

Ejemplo desconectarse de la base de datos

Para desconectarse del servidor utilice el meacutetodo close() en el objeto Connecting Utilice la sentenciasiguiente para cerrar la conexioacuten creada en el ejemplo anterior

cclose()

Javadoc AS400JDBCDriver

Clase AS400JDBCParameterMetaData

La clase AS400JDBCParameterMetaData permite a los programas recuperar informacioacuten sobre laspropiedades de paraacutemetros de los objetos PreparedStatement y CallableStatement

82 IBM Toolbox para Java IBM Toolbox para Java

AS400JDBCParameterMetaData ofrece meacutetodos que permiten llevar a cabo las acciones siguientesv Obtener el nombre de clase del paraacutemetrov Obtener el nuacutemero de paraacutemetros de PreparedStatementv Obtener el tipo SQL del paraacutemetrov gtObtener el nombre de tipo especiacutefico de la base de datos del paraacutemetrov Obtener la precisioacuten o la escala del paraacutemetro

Ejemplo coacutemo se utiliza AS400JDBCParameterMetaData

En el ejemplo siguiente se muestra coacutemo se utiliza AS400JDBCParameterMetaData para recuperarparaacutemetros de un objeto PreparedStatement generado dinaacutemicamente

Obtenga una conexioacuten desde el controladorClassforName(comibmas400accessAS400JDBCDriver)Connection connection =

DriverManagergetConnection(jdbcas400myAS400 myUserId myPassword)

Cree un objeto sentencia preparadaPreparedStatement ps =

connectionprepareStatement(SELECT STUDENTS FROM STUDENTTABLE WHERE STUDENT_ID= )

Establezca un ID de alumno en el paraacutemetro 1pssetInt(1 123456)

Recupere los metadatos de paraacutemetro de la sentencia preparadaParameterMetaData pMetaData = psgetParameterMetaData()

Recupere el nuacutemero de paraacutemetros de la sentencia preparada Devuelve 1int parameterCount = pMetaDatagetParameterCount()

Averiguumle el nombre de tipo de paraacutemetro del paraacutemetro 1 Devuelve INTEGERString getParameterTypeName = pMetaDatagetParameterTypeName(1)

Informacioacuten relacionadaJavadoc AS400JDBCParameterMetaData

Interfaz PreparedStatement

Puede utilizar un objeto PreparedStatement cuando vea que una sentencia SQL se va a ejecutar muchasveces Una sentencia preparada es una sentencia SQL que se ha precompilado

Esta solucioacuten es maacutes eficaz que la de ejecutar muchas veces la misma sentencia utilizando un objetoStatement pues de esta uacuteltima forma la sentencia se compila cada vez que se ejecuta Ademaacutes lasentencia SQL contenida en un objeto PreparedStatement puede tener uno o varios paraacutemetros IN UtiliceConnectionprepareStatement() para crear objetos PreparedStatement

El objeto PreparedStatement permite someter a una base de datos varios mandatos SQL como si fuesenun solo grupo mediante el uso del soporte de proceso por lotes Puede mejorar el rendimiento empleandoel soporte de proceso por lotes ya que normalmente se tarda menos en procesar un grupo de operacionesque en procesarlas una a una

Ejemplo coacutemo se utiliza PreparedStatement

El ejemplo que sigue muestra coacutemo se utiliza la interfaz PreparedStatement Coneacutectese al servidorConnection c = DriverManagergetConnection(jdbcas400mySystem)

Cree el objeto PreparedStatement Este objeto precompila la

IBM Toolbox para Java 83

sentencia SQL especificada Los signos de interrogacioacuten indican doacutende deben establecerse los paraacutemetros antes de ejecutar la sentenciaPreparedStatement ps =

cprepareStatement(INSERT INTO MYLIBRARYMYTABLE (NAME ID) VALUES ( ))

Establezca paraacutemetros y ejecute la sentenciapssetString(1 JOSH)pssetInt(2 789)psexecuteUpdate()

Establezca paraacutemetros y ejecute la sentencia otra vezpssetString(1 DAVE)pssetInt(2 456)psexecuteUpdate()

Cierre PreparedStatement y la conexioacutenpsclose()cclose()

Informacioacuten relacionadaJavadoc AS400JDBCPreparedStatement

Clase ResultSet

Puede utilizar un objeto ResultSet para acceder a una tabla de datos generada ejecutando una consultaLas filas de la tabla se recuperan en secuencia Dentro de una fila es posible acceder a los valores de lascolumnas en cualquier orden

Los datos almacenados en ResultSet se recuperan mediante los diversos meacutetodos get en funcioacuten del tipode datos que se vayan a recuperar El meacutetodo next() permite desplazarse a la fila siguiente

ResultSet permite obtener y actualizar columnas por nombre aunque el uso del iacutendice de columnamejora el rendimiento

Movimiento de cursor

Un cursor que es un puntero interno utilizado por un conjunto de resultados sentildeala a la filaperteneciente a dicho conjunto y a la que estaacute accediendo el programa Java

Se ha mejorado el rendimiento del meacutetodo getRow() Antes de la versioacuten V5R2 al utilizar ResultSetlast()ResultSetafterLast() y ResultSetabsolute() con un valor negativo el nuacutemero de fila actual no estabadisponible Las restricciones anteriores se han eliminado con lo que el meacutetodo getRow() es ahoratotalmente funcional

JDBC 20 y las especificaciones de JDBC posteriores proporcionan meacutetodos adicionales para acceder aposiciones especiacuteficas dentro de una base de datos

Posiciones de cursor desplazables

absoluteafterLastbeforeFirstfirstgetRowisAfterLastisBeforeFirst

isFirstisLastlastmoveToCurrentRowmoveToInsertRowpreviousrelative

84 IBM Toolbox para Java IBM Toolbox para Java

Posibilidades de desplazamiento

Si un conjunto de resultados se crea mediante la ejecucioacuten de una sentencia es posible moverse(desplazarse) por las filas de una tabla en sentido hacia atraacutes (de la uacuteltima a la primera) o hacia delante(de la primera a la uacuteltima)

Un conjunto de resultados que deacute soporte a este movimiento se llama desplazable Los conjuntos deresultados desplazables admiten tambieacuten el posicionamiento absoluto El posicionamiento absoluto lepermite moverse directamente a una fila especificando la posicioacuten que dicha fila tiene en el conjunto deresultados

Con JDBC 20 y las especificaciones de JDBC posteriores se dispone de dos posibilidades dedesplazamiento adicionales al trabajar con la clase ResultSet conjuntos de resultados no sensibles aldesplazamiento y sensibles al desplazamiento

Un conjunto de resultados no sensible al desplazamiento suele no ser sensible a los cambios realizadosmientras estaacute abierto mientras que el conjunto de resultados sensible al desplazamiento es sensible a loscambios

Nota IBM i uacutenicamente admite el acceso solo de lectura para los cursores insensibles desplazables IBMToolbox para Java da soporte a un cursor insensible al desplazamiento si la concurrencia del conjunto deresultados es solo de lectura Si el tipo de conjunto de resultados se especifica como insensible y laconcurrencia se especifica como actualizable el tipo de conjunto de resultados cambia a sensible y seenviacutea un aviso al usuario

Conjuntos de resultados actualizables

En la aplicacioacuten puede utilizar conjuntos de resultados que emplean ya sea una concurrencia solo delectura (no pueden realizarse actualizaciones en los datos) ya sea una concurrencia actualizable (permiterealizar actualizaciones en los datos y utiliza bloqueos de escritura de base de datos para controlar elacceso a un mismo elemento de datos por parte de las distintas transacciones) En un conjunto deresultados actualizable las filas se pueden actualizar insertar y suprimir Puede disponer de numerososmeacutetodos de actualizacioacuten para usarlos en el programa por ejemplo puedev Actualizar una corriente de datos ASCIIv Actualizar Big Decimalv Actualizar una corriente binaria

En el Resumen de meacutetodos encontraraacute una lista completa de los meacutetodos de actualizacioacuten que estaacutendisponibles a traveacutes de la interfaz ResultSet

Ejemplo conjuntos de resultados actualizables

El ejemplo que figura a continuacioacuten muestra coacutemo se utiliza un conjunto de resultados que permiterealizar actualizaciones en los datos (concurrencia de actualizacioacuten) y realizar cambios en el conjunto deresultados mientras permanece abierto (sensible al desplazamiento)

Coneacutectese al servidorConnection c = DriverManagergetConnection(jdbcas400mySystem)

Cree un objeto Statement Establezca la concurrencia del conjunto de resultados en actualizableStatement s = ccreateStatement(ResultSetTYPE_SCROLL_SENSITIVE

ResultSetCONCUR_UPDATABLE)

Ejecute una consulta El resultado se coloca en un objeto ResultSetResultSet rs = sexecuteQuery (SELECT NAMEID FROM MYLIBRARYMYTABLE FOR UPDATE)

Itere por las filas de ResultSet

IBM Toolbox para Java 85

A medida que leemos la fila la actualizaremos con un nuevo IDint newId = 0while (rsnext ())

Obtenga los valores a partir del ResultSet El primer valor es una serie y el segundo valor es un enteroString name = rsgetString(NAME)int id = rsgetInt(ID)

Systemoutprintln(Nombre = + name)Systemoutprintln(ID antiguo = + id)

Actualice el ID con un nuevo enterorsupdateInt(ID ++newId)

Enviacutee las actualizaciones al servidorrsupdateRow ()

Systemoutprintln(ID nuevo = + newId)

Cierre la sentencia y la conexioacutensclose()cclose()

ResultSetMetaData

La interfaz ResultSetMetaData determina los tipos y las propiedades de las columnas de un conjunto deresultados (ResultSet)

Al conectarse a un servidor que ejecuta IBM i 52 o posterior el uso de la propiedad de metadatosampliados permite aumentar la precisioacuten de los siguientes meacutetodos de ResultSetMetaDatav getColumnLabel(int)v isReadOnly(int)v isSearchable(int)v isWriteable(int)

Asimismo al establecer esta propiedad en true se habilita el soporte para el meacutetodoResultSetMetaDatagetSchemaName(int) Tenga en cuenta que al utilizar la propiedad de metadatosampliados puede empeorarse el rendimiento ya que es preciso recuperar maacutes informacioacuten del servidor

Javadoc AS400JDBCResultSetJavadoc AS400ResultSetMetaData

Clase AS400JDBCRowSet

La clase AS400JDBCRowSet representa un conjunto de filas conectado que encapsula un conjunto deresultados JDBC Los meacutetodos de AS400JDBCRowSet son muy similares a los de AS400JDBCResultSet Laconexioacuten con la base de datos se mantiene mientras se utiliza

Puede utilizar una instancia de AS400JDBCDataSource o AS400JDBCConnectionPoolDataSource paracrear la conexioacuten con la base de datos que desea utilizar para acceder a los datos de AS400JDBCRowSet

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo puede utilizar la clase AS400JDBCRowSet

Ejemplo crear poblar y actualizar un objeto AS400JDBCRowSet

86 IBM Toolbox para Java IBM Toolbox para Java

DriverManagerregisterDriver(new AS400JDBCDriver()) Establecer conexioacuten mediante un URLAS400JDBCRowSet rowset = new AS400JDBCRowSet(jdbcas400mySystemmyUser myPassword)

Establecer el mandato que sirve para poblar la listarowsetsetCommand(SELECT FROM MYLIBDATABASE)

Llenar con datos el conjunto de filasrowsetexecute()

Actualizar los saldos del clientewhile (rowsetnext())

double newBalance = rowsetgetDouble(BALANCE) +july_statementsgetPurchases(rowsetgetString(CUSTNUM))

rowsetupdateDouble(BALANCE newBalance)rowsetupdateRow()

Ejemplo crear y llenar de datos un objeto AS400JDBCRowSet mientras se obtiene el origen de datosde JNDI

Obtener el origen de datos registrado en JNDI (se supone que se ha establecido el entorno JNDI)Context context = new InitialContext()AS400JDBCDataSource dataSource = (AS400JDBCDataSource) contextlookup(jdbccustomer)

AS400JDBCRowSet rowset = new AS400JDBCRowSet() Establecer conexioacuten definiendo el nombre del origen de datosrowsetsetDataSourceName(jdbccustomer)rowsetsetUsername(myuser)rowsetsetPassword(myPasswd)

Establecer la sentencia preparada e inicializar los paraacutemetrosrowsetsetCommand(SELECT FROM MYLIBRARYMYTABLE WHERE STATE = AND BALANCE gt )rowsetsetString(1 MINNESOTA)rowsetsetDouble(2 MAXIMUM_LIMIT)

Llenar con datos el conjunto de filasrowsetexecute()

Javadoc AS400JDBCRowSetJavadoc AS400JDBCResultSet

Clase AS400JDBCSavepoint

La clase AS400JDBCSavepoint de IBM Toolbox para Java representa un punto de interrupcioacuten loacutegico enuna transaccioacuten El uso de los puntos de salvar permite controlar de modo maacutes preciso los cambios a losque afecta la retrotraccioacuten de una transaccioacuten

Figura 1 coacutemo se utilizan los puntos de salvar para controlar las retrotracciones en una transaccioacuten

IBM Toolbox para Java 87

Por ejemplo la figura 1 muestra una transaccioacuten que contiene dos puntos de salvar A y B Al retrotraerla transaccioacuten a cualquiera de los dos puntos de salvar uacutenicamente se deshacen los cambios desde elpunto en que se llama a una retrotraccioacuten hasta el punto de salvar De este modo se evita tener quedeshacer todos los cambios de toda la transaccioacuten Observe que una vez efectuada la retrotraccioacuten hastael punto de salvar A posteriormente no puede efectuar la retrotraccioacuten hasta el punto de salvar B Nopuede acceder al punto de salvar B despueacutes de haberse retrotraiacutedo el trabajo maacutes allaacute del mismo

Ejemplo coacutemo se utilizan los puntos de salvar

En este ejemplo supongamos que su aplicacioacuten actualiza los registros de alumnos Tras actualizar uncampo determinado de cada registro de alumno efectuacutea una operacioacuten de compromiso El coacutedigo detectaun error concreto asociado a la actualizacioacuten de este campo y retrotrae el trabajo realizado cuando seproduce este error Usted sabe que este error concreto afecta uacutenicamente al trabajo efectuado en elregistro actual

Por consiguiente establece un punto de salvar entre cada actualizacioacuten de los registros de alumnosAhora cuando se produce este error solo retrotrae la uacuteltima actualizacioacuten de la tabla de alumnos Enlugar de tener que retrotraer una gran cantidad de trabajo ahora puede retrotraer uacutenicamente unapequentildea cantidad de trabajo

El coacutedigo del ejemplo siguiente muestra coacutemo pueden utilizarse los puntos de salvar En el ejemplo sesupone que el ID de alumno de John es 123456 y el ID de alumno de Jane es 987654

Obtenga una conexioacuten desde el controladorClassforName(comibmas400accessAS400JDBCDriver)

Obtenga un objeto StatementStatement statement = connectioncreateStatement()

Actualice el registro de John con su nota rsquoBrsquo en gimnasiaint rows = statementexecuteUpdate(

UPDATE STUDENTTABLE SET GRADE_SECOND_PERIOD = rsquoBrsquo WHERE STUDENT_ID= rsquo123456rsquo)

Establezca un punto de salvar marcando un punto intermedio en la transaccioacutenSavepoint savepoint1 = connectionsetSavepoint(SAVEPOINT_1)

Actualice el registro de Jane con su nota rsquoCrsquo en bioquiacutemicaint rows = statementexecuteUpdate(

UPDATE STUDENTTABLE SET GRADE_SECOND_PERIOD = rsquoCrsquo WHERE STUDENT_ID= rsquo987654rsquo)

Se ha detectado un error por lo que debemos retrotraer el registro de Jane pero no el de John Retrotraiga la transaccioacuten hasta el punto de salvar 1 El cambio del registro de Jane se elimina mientras que el del registro de John se conserva

88 IBM Toolbox para Java IBM Toolbox para Java

connectionrollback(savepoint1)

Comprometa la transaccioacuten solo se compromete la nota rsquoBrsquo de John en la base de datosconnectioncommit()

Consideraciones y restricciones

Para utilizar los puntos de salvar deben tenerse presentes las consideraciones y restricciones siguientes

Consideraciones

IBM Toolbox para Java sigue las reglas de base de datos en relacioacuten con el modo en que lasretrotracciones afectan a los cursores y bloqueos retenidos Por ejemplo al establecer la opcioacuten deconexioacuten de modo que se mantengan abiertos los cursores tras una retrotraccioacuten tradicional los cursorestambieacuten permanecen abiertos tras una retrotraccioacuten hasta un punto de salvar Dicho de otro modocuando se produce una peticioacuten de retrotraccioacuten en la que intervienen puntos de salvar IBM Toolboxpara Java no mueve ni cierra el cursor si la base de datos subyacente no soporta esta funcioacuten

Al utilizar un punto de salvar para retrotraer una transaccioacuten solo se deshacen las acciones efectuadasdesde el punto de inicio de la retrotraccioacuten hasta el punto de salvar Las acciones efectuadas antes de esepunto de salvar se conservan Como se muestra en el ejemplo anterior tenga en cuenta que puedecomprometer una transaccioacuten que contenga trabajo efectuado antes de un punto de salvar determinadopero que no contenga trabajo efectuado tras el punto de salvar

Todos los puntos de salvar se liberan y dejan de ser vaacutelidos cuando se compromete la transaccioacuten ocuando se retrotrae toda la transaccioacuten Tambieacuten puede liberar puntos de salvar llamando aConnectionreleaseSavepoint()

Restricciones

Al utilizar puntos de salvar se aplican las restricciones siguientesv Los puntos de salvar con nombre deben ser exclusivosv No podraacute reutilizar un nombre de punto de salvar hasta que se libere comprometa o retrotraiga el

punto de salvarv El compromiso automaacutetico debe establecerse en OFF para que los puntos de salvar sean vaacutelidos

Puede establecer el compromiso automaacutetico en OFF mediante ConnectionsetAutoCommit(false) Si sehabilita el compromiso automaacutetico cuando se utilizan puntos de salvar se lanza una excepcioacuten

v Los puntos de salvar no son vaacutelidos en las conexiones XA Si se utiliza una conexioacuten XA con puntos desalvar se lanza una excepcioacuten

v El servidor debe ejecutar IBM i Versioacuten 5 Release 2 o posterior Si se utilizan puntos de salvar alconectarse (o estando ya conectado) a un servidor que ejecuta la versioacuten V5R1 o anterior de IBM i selanza una excepcioacutenJavadoc AS400JDBCSavePoint

Ejecucioacuten de sentencias SQL con objetos Statement

Utilice un objeto Statement para ejecutar una sentencia SQL y opcionalmente obtener el conjunto deresultados (ResultSet) generado por ella

PreparedStatement es heredera de Statement y CallableStatement es heredera de PreparedStatementUtilice los siguientes objetos Statement para ejecutar las distintas sentencias SQLv ldquoInterfaz Statementrdquo en la paacutegina 90 - Ejecuta una sentencia SQL simple que no tiene ninguacuten

paraacutemetrov ldquoInterfaz PreparedStatementrdquo en la paacutegina 83 - Ejecuta una sentencia SQL precompilada que puede

tener o no tener paraacutemetros IN

IBM Toolbox para Java 89

v ldquoInterfaz CallableStatementrdquo en la paacutegina 65 - Ejecuta una llamada a un procedimiento almacenado debase de datos El objeto CallableStatement puede tener o no tener paraacutemetros IN OUT e INOUT

El objeto Statement permite someter a una base de datos varios mandatos SQL como si fuesen un sologrupo mediante el uso del soporte de proceso por lotes Puede mejorar el rendimiento empleando elsoporte de proceso por lotes ya que normalmente se tarda menos en procesar un grupo de operacionesque en procesarlas una a una

Cuando utilice las actualizaciones por lotes normalmente deberaacute desactivar el compromiso automaacuteticoLa desactivacioacuten del compromiso automaacutetico permite al programa determinar si debe comprometer latransaccioacuten en el caso de que se produzca un error y no se hayan ejecutado todos los mandatos En JDBC20 y las especificaciones de JDBC posteriores un objeto Statement puede hacer un seguimiento de unalista de mandatos que pueden someterse satisfactoriamente y ejecutarse conjuntamente en un grupoCuando el meacutetodo executeBatch() ejecuta esta lista de mandatos por lotes la ejecucioacuten de los mandatos serealiza en el orden en que se antildeadieron a la lista

AS400JDBCStatement proporciona meacutetodos que permiten llevar a cabo muchas acciones entre ellas lassiguientesv Ejecutar distintos tipos de sentenciasv Recuperar los valores de distintos paraacutemetros del objeto Statement tales como

ndash La conexioacutenndash Las claves generadas automaacuteticamente que se han creado como consecuencia de la ejecucioacuten del

objeto Statementndash El tamantildeo de buacutesqueda y la direccioacuten de buacutesquedandash El tamantildeo maacuteximo de campo y el liacutemite maacuteximo de filandash El conjunto de resultados actual el conjunto de resultados siguiente el tipo de conjunto de

resultados la concurrencia del conjunto de resultados y la posibilidad de retencioacuten del cursor delconjunto de resultados

v Antildeadir una sentencia SQL al proceso por lotes actualv Ejecutar el proceso por lotes actual de sentencias SQL

Interfaz Statement

Utilice ConnectioncreateStatement() para crear objetos Statement nuevos

El ejemplo que sigue muestra coacutemo se utiliza un objeto Statement Coneacutectese al servidorConnection c = DriverManagergetConnection(jdbcas400mySystem)

Cree un objeto StatementStatement s = ccreateStatement()

Ejecute una sentencia SQL que cree una tabla en la base de datossexecuteUpdate(CREATE TABLE MYLIBRARYMYTABLE (NAME VARCHAR(20) ID INTEGER))

Ejecute una sentencia SQL que inserte un registro en la tablasexecuteUpdate(INSERT INTO MYLIBRARYMYTABLE (NAME ID) VALUES (rsquoDAVErsquo 123))

Ejecute una sentencia SQL que inserte un registro en la tablasexecuteUpdate(INSERT INTO MYLIBRARYMYTABLE (NAME ID) VALUES (rsquoCINDYrsquo 456))

Ejecute una consulta SQL en la tablaResultSet rs = sexecuteQuery(SELECT FROM MYLIBRARYMYTABLE)

Cierre la sentencia y la conexioacutensclose()cclose()

90 IBM Toolbox para Java IBM Toolbox para Java

Javadoc AS400JDBCStatement

Gestioacuten de transacciones distribuidas XA de JDBC

Las clases de gestioacuten de transacciones distribuidas XA de JDBC permiten utilizar el controlador JDBC deIBM Toolbox para Java dentro de una transaccioacuten distribuida La utilizacioacuten de las clases de XA parahabilitar el controlador JDBC de IBM Toolbox para Java permite a eacuteste participar en las transacciones queabarcan varios oriacutegenes de datos

Normalmente las clases de gestioacuten de transacciones distribuidas XA se utilizan y controlan directamentecon un gestor de transacciones independiente del controlador JDBC Las interfaces de gestioacuten detransacciones distribuidas se definen como parte de JDBC 20 Optional Package y Java Transaction API(JTA) Ambas estaacuten disponibles a traveacutes de Sun como archivos JAR Las interfaces de gestioacuten detransacciones distribuidas tambieacuten estaacuten soportadas en la API JDBC 30 que estaacute empaquetada con laplataforma Java 2 Standard Edition versioacuten 14

Encontraraacute maacutes informacioacuten en los sitios Web de Sun correspondientes a JDBC y JTA

Utilice los objetos siguientes para permitir que el controlador JDBC de IBM Toolbox para Java participeen las transacciones distribuidas XAv AS400JDBCXADataSource - Una faacutebrica de objetos AS400JDBCXAConnection Es una subclase de

AS400JDBCDataSourcev AS400JDBCXACConnection - Un objeto de conexioacuten de agrupacioacuten que proporciona ganchos para la

gestioacuten de agrupaciones de conexiones y la gestioacuten de recursos XAv AS400JDBCXAResource - Un gestor de recursos destinado al uso en la gestioacuten de transacciones XA

Nota antes de V5R3 el servidor de host de base de datos utilizaba API XA para bloqueos de aacutembito detrabajo (modelo XA) En V5R3 y releases siguientes el servidor de host de base de datos utiliza API XApara bloqueos de aacutembito de transaccioacuten (modelo NTS) para todas las funciones MTS Encontraraacute maacutesinformacioacuten sobre las diferencias entre estas API en API XA

Ejemplo coacutemo se utilizan las clases de XA

El ejemplo siguiente muestra un uso sencillo de las clases de XA Tenga en cuenta que los detalles seincluiriacutean con tareas que utilizaran otros oriacutegenes de datos Este tipo de coacutedigo habitualmente aparecedentro de un gestor de transacciones

Cree un origen de datos XA para establecer la conexioacuten XAAS400JDBCXADataSource xaDataSource = new AS400JDBCXADataSource(myAS400)xaDataSourcesetUser(myUser)xaDataSourcesetPassword(myPasswd)

Obtenga un objeto XAConnection y obtenga el objeto XAResource asociado Esto proporciona acceso al gestor de recursosXAConnection xaConnection = xaDataSourcegetXAConnection()XAResource xaResource = xaConnectiongetXAResource()

Genere un nuevo Xid (esta tarea corresponde al gestor de transacciones)Xid xid =

Inicie la transaccioacutenxaResourcestart(xid XAResourceTMNOFLAGS)

Lleve a cabo alguna tarea con la base de datos

Finalice la transaccioacutenxaResourceend(xid XAResourceTMSUCCESS)

Realice los preparativos para una operacioacuten de compromiso

IBM Toolbox para Java 91

xaResourceprepare(xid)

Comprometa la transaccioacutenxaResourcecommit(xid false)

Cierre la conexioacuten XA cuando haya finalizado Esto cierra el recurso XA impliacutecitamentexaConnectionclose()

Clases de trabajosLas clases Jobs de IBM Toolbox para Java que se encuentran en el paquete access permiten a unprograma Java recuperar y cambiar informacioacuten de trabajo

Utilice las clases de trabajos para trabajar con el siguiente tipo de informacioacuten de trabajov Informacioacuten de fecha y horav Cola de trabajosv Identificadores de idiomav Anotaciones de mensajesv Cola de salidav Informacioacuten de impresora

Ejemplos

Los ejemplos que figuran a continuacioacuten muestran algunas maneras de utilizar las clases Job JobList yJobLog El primer ejemplo muestra un modo de emplear una memoria cacheacute con la clase Job Justodespueacutes del coacutedigo de ejemplo encontraraacute enlaces con otros ejemplos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Ejemplo utilizar una memoria cacheacute al establecer un valor y al obtener un valortry

Crea un objeto AS400AS400 as400 = new AS400(systemName)

Construye un objeto Jobbyte[] internalJobID = xxxxxxxxxxxxxxxxgetBytes()Job job = new Job(as400 internalJobID)

Obtiene informacioacuten de trabajoSystemoutprintln(Usuario de este trabajo + jobgetUser())Systemoutprintln(CPU utilizada + jobgetCPUUsed())Systemoutprintln(Fecha del sistema de entrada del trabajo + jobgetJobEnterSystemDate())

Establece la modalidad de memoria cacheacutejobsetCacheChanges(true)

Los cambios se almacenaraacuten en la memoria cacheacutejobsetRunPriority(66)jobsetDateFormat(YMD)

Comprometer los cambios Ello cambiaraacute el valor en el sistemajobcommitChanges()

Establecer informacioacuten de trabajo en el sistema directamente (sin memoria cacheacute)jobsetCacheChanges(false)jobsetRunPriority(60)

92 IBM Toolbox para Java IBM Toolbox para Java

catch (Exception e)

Systemoutprintln(error + e)

Los ejemplos siguientes muestran coacutemo listar los trabajos pertenecientes a un usuario especiacutefico coacutemolistar los trabajos con la informacioacuten de estado del trabajo y coacutemo mostrar los mensajes de unasanotaciones de trabajo

ldquoEjemplo coacutemo se utiliza JobList para listar informacioacuten de identificacioacuten de trabajordquo en la paacutegina441

ldquoEjemplo coacutemo se utiliza JobList para obtener una lista de trabajosrdquo en la paacutegina 444

ldquoEjemplo coacutemo se utiliza JobLog para visualizar los mensajes de las anotaciones de trabajordquo en lapaacutegina 447

Javadoc del paquete Access

Clase Job

La clase Job (en el paquete access) permite a un programa Java recuperar y cambiar informacioacuten de lostrabajos del servidor

Con la clase Job se puede recuperar y cambiar el siguiente tipo de informacioacuten de trabajov Colas de trabajosv Colas de salidav Anotaciones de mensajesv Dispositivo de impresorav Identificador de paiacutes o regioacutenv Formato de fecha

La clase Job tambieacuten ofrece la posibilidad de cambiar un solo valor a la vez o de poner en memoria cacheacutevarios cambios utilizando el meacutetodo setCacheChanges(true) y comprometiendo los cambios con elmeacutetodo commitChanges() Si la puesta en memoria cacheacute no estaacute activada no es necesario realizar uncompromiso

Ejemplo

Puede ver un ejemplo de coacutedigo en la documentacioacuten de consulta de javadocs correspondiente a la claseJob El ejemplo siguiente muestra coacutemo se establecen valores en la memoria cacheacute y se obtienen valoresde ella para establecer la prioridad de ejecucioacuten con el meacutetodo setRunPriority() y coacutemo se establece elformato de fecha con el meacutetodo setDateFormat()

Javadoc Job

Clase JobList

Puede utilizar una clase JobList (en el paquete access) para listar trabajos de IBM i

Con la clase JobList es posible recuperarv Todos los trabajosv Trabajos por nombre nuacutemero de trabajo o usuario

Utilice el meacutetodo getJobs() para devolver una lista de trabajos o el meacutetodo getLength() para devolver elnuacutemero de trabajos recuperados con el uacuteltimo meacutetodo getJobs()

IBM Toolbox para Java 93

Ejemplo coacutemo se utiliza JobList

El siguiente ejemplo lista todos los trabajos activos del sistema Cree un objeto AS400 Liste los trabajos que hay en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree el objeto lista de trabajosJobList jobList = new JobList(sys)

Obtenga la lista de trabajos activosEnumeration list = jobListgetJobs()

Para cada trabajo activo del sistema imprima informacioacuten de trabajowhile (listhasMoreElements())

Job j = (Job) listnextElement()

Systemoutprintln(jgetName() + +jgetUser() + +jgetNumber())

Javadoc Job

Clase JobLog

La clase JobLog (en el paquete access) recupera los mensajes existentes en las anotaciones de trabajo deun trabajo del servidor efectuando una llamada a getMessages()

Ejemplo coacutemo se utiliza JobLog

El ejemplo siguiente imprime todos los mensajes de las anotaciones de trabajo correspondientes alusuario especificado

El trabajo de preparacioacuten para crear un objeto AS400 y un objeto JobList ya se ha realizado

Obtenga la lista de trabajos activos en el servidorEnumeration list = jobListgetJobs()

Busque en la lista para localizar un trabajo correspondiente al usuario especificadowhile (listhasMoreElements())

Job j = (Job) listnextElement()

if (jgetUser()trim()equalsIgnoreCase(userID))

Se ha encontrado un trabajo correspondiente al usuario actual Cree un objeto anotaciones de trabajo para este trabajoJobLog jlog = new JobLog(system jgetName() jgetUser() jgetNumber())

Enumere los mensajes de las anotaciones de trabajo y luego impriacutemalosEnumeration messageList = jloggetMessages()

while (messageListhasMoreElements())

AS400Message message = (AS400Message) messageListnextElement()Systemoutprintln(messagegetText())

94 IBM Toolbox para Java IBM Toolbox para Java

Javadoc Job

Clases de mensajesLa clase AS400Message de IBM Toolbox para Java y sus clases asociadas representan un mensaje devueltodesde el servidor

AS400Message

El objeto AS400Message permite al programa Java recuperar un mensaje de IBM i generado en unaoperacioacuten anterior (por ejemplo en una llamada a mandato) El programa Java puede recuperar de unobjeto mensaje los siguientes datosv La biblioteca IBM i y el archivo de mensajes que contienen el mensajev El ID de mensajev El tipo de mensajev La gravedad del mensajev El texto del mensajev El texto de ayuda del mensaje

En el ejemplo siguiente se muestra coacutemo utilizar el objeto AS400Message

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree un objeto de llamada a mandatoCommandCall cmd = new CommandCall(sys myCommand)

Ejecute el mandatocmdrun()

Obtenga la lista de mensajes que son el resultado del mandato que se acaban de ejecutarAS400Message[] messageList = cmdgetMessageList()

Itere por la lista que muestra los mensajesfor (int i = 0 i lt messageListlength i++)

Systemoutprintln(messageList[i]getText())

Ejemplos coacutemo se utilizan las listas de mensajes

Los ejemplos que hay a continuacioacuten muestran coacutemo pueden emplearse las listas de mensajes conCommandCall y ProgramCallv ldquoEjemplo coacutemo se utiliza CommandCallrdquo en la paacutegina 387v ldquoEjemplo coacutemo se utiliza ProgramCallrdquo en la paacutegina 459

QueuedMessage

La clase QueuedMessage ampliacutea la clase AS400Message

La clase QueuedMessage accede a informacioacuten sobre un mensaje de una cola de mensajes de IBM i Conesta clase un programa Java puede recuperar los datos siguientes

IBM Toolbox para Java 95

v Informacioacuten acerca de doacutende se originoacute un mensaje como por ejemplo el programa el nuacutemero detrabajo y el usuario

v La cola de mensajesv La clave del mensajev El estado de respuesta al mensaje

El ejemplo siguiente imprime todos los mensajes que hay en la cola de mensajes del usuario actual (elque ha iniciado la sesioacuten)

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

La cola de mensajes estaacute en este sistemaAS400 sys = new AS400(mySystemmyCompanycom)

Cree el objeto cola de mensajes Este objeto representaraacute la cola correspondiente al usuario actualMessageQueue queue = new MessageQueue(sys MessageQueueCURRENT)

Obtenga la lista de mensajes que hay actualmente en la cola del usuarioEnumeration e = queuegetMessages()

Imprima cada mensaje de la colawhile (ehasMoreElements())

QueuedMessage msg = egetNextElement()Systemoutprintln(msggetText())

MessageFile

La clase MessageFile permite recibir un mensaje de un archivo de mensajes de IBM i La claseMessageFile devuelve un objeto AS400Message que contiene el mensaje Mediante la clase MessageFilepuede realizar estas tareasv Devolver un objeto mensaje que contiene el mensajev Devolver un objeto mensaje que contiene texto de sustitucioacuten del mensaje

El ejemplo siguiente muestra coacutemo se recupera e imprime un mensaje

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

AS400 system = new AS400(mysystemmycompanycom)MessageFile messageFile = new MessageFile(system)messageFilesetPath(QSYSLIBQCPFMSGMSGF)AS400Message message = messageFilegetMessage(CPD0170)Systemoutprintln(messagegetText())

MessageQueue

La clase MessageQueue permite a un programa Java interactuar con una cola de mensajes de IBM i

La clase MessageQueue hace de contenedor para la clase QueuedMessage El meacutetodo getMessages()concretamente devuelve una lista de objetos QueuedMessage La clase MessageQueue puede realizarestas tareasv Establecer atributos de cola de mensajesv Obtener informacioacuten sobre una cola de mensajesv Recibir mensajes de una cola de mensajes

96 IBM Toolbox para Java IBM Toolbox para Java

v Enviar mensajes a una cola de mensajesv Responder a los mensajes

El ejemplo siguiente lista los mensajes que hay en la cola de mensajes para el usuario actual

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

La cola de mensajes estaacute en este sistemaAS400 sys = new AS400(mySystemmyCompanycom)

Cree el objeto cola de mensajes Este objeto representaraacute la cola correspondiente al usuario actualMessageQueue queue = new MessageQueue(sys MessageQueueCURRENT)

Obtenga la lista de mensajes que hay actualmente en la cola del usuarioEnumeration e = queuegetMessages()

Imprima cada mensaje de la colawhile (ehasMoreElements())

QueuedMessage msg = egetNextElement()Systemoutprintln(msggetText())

Javadoc AS400MessageJavadoc QueuedMessageResumen de paquetes de accesoJavadoc MessageFileJavadoc MessageQueue

Clase NetServerLa clase NetServer ha quedado en desuso y la sustituye la clase ISeriesNetServer

La clase NetServer representa el servicio NetServer en el servidor Los objetos NetServer permitenconsultar y modificar el estado y la configuracioacuten del servicio NetServer

Por ejemplo puede utilizar la clase NetServer para realizar las tareas siguientesv Iniciar o detener NetServerv Obtener una lista de todos los compartimientos de archivo y compartimientos de impresora actualesv Obtener una lista de todas las sesiones actualesv Consultar y cambiar valores de atributo (empleando meacutetodos heredados de ChangeableResource)

Nota para utilizar la clase NetServer necesita un perfil de usuario de servidor que tenga la autorizacioacutenIOSYSCFG

La clase NetServer es una extensioacuten de ChangeableResource y Resource de modo que proporciona unconjunto de atributos para representar los diversos valores de NetServer Puede consultar o cambiar losatributos para acceder a la configuracioacuten de NetServer o modificarla Entre los atributos de NetServer seencuentran los siguientesv NOMBREv NAME_PENDINGv DOMAINv ALLOW_SYSTEM_NAMEv AUTOSTARTv CCSID

IBM Toolbox para Java 97

v WINS_PRIMARY_ADDRESS

Atributos pendientes

Muchos de los atributos de NetServer son atributos pendientes (por ejemplo NAME_PENDING) Losatributos pendientes representan los valores de NetServer que entraraacuten en vigor la proacutexima vez que seinicie (o que se reinicie) NetServer en el servidor

Si tiene un par de atributos relacionados y uno es un atributo pendiente mientras que el otro es unatributo no pendientev El atributo pendiente es de lecturaescritura por lo que puede modificarlov El atributo no pendiente es solo de lectura por lo que puede consultarlo pero no modificarlo

Otras clases de NetServer

Varias clases de NetServer relacionadas permiten obtener y establecer informacioacuten detallada sobreconexiones sesiones compartimientos de archivo y compartimientos de impresora especiacuteficosv NetServerConnection representa una conexioacuten NetServerv NetServerFileShare representa un compartimiento de servidor de archivo NetServerv NetServerPrintShare representa un compartimiento de servidor de impresioacuten NetServerv NetServerSession representa una sesioacuten NetServerv NetServerShare representa un compartimiento NetServer

Ejemplo coacutemo se utiliza un objeto NetServer para cambiar el nombre del NetServer

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree un objeto sistema para representar el servidorAS400 system = new AS400(MYSYSTEM MYUSERID MYPASSWD)

Cree un objeto con el que consultar y modificar el NetServerNetServer nServer = new NetServer(system)

Establezca el atributo de nombre pendiente en NEWNAMEnServersetAttributeValue(NetServerNAME_PENDING NEWNAME)

Comprometa los cambios De este modo se enviacutean los cambios al servidornServercommitAttributeChanges()

El nombre de NetServer se estableceraacute en NEWNAME la proacutexima vez que se finalice y se inicie NetServer

Clase ObjectReferencesLa clase ObjectReferences de IBM Toolbox para Java representa el conjunto de informacioacuten relativa a lasreferencias del sistema de archivos integrado sobre un objeto que puede recuperarse mediante la APIRecuperar referencias de objeto (QP0LROR)

Una referencia es un tipo de acceso o bloqueo individual obtenido sobre el objeto al utilizar las interfacesdel sistema de archivos integrado Un objeto puede tener varias referencias simultaacuteneas suponiendo quelos tipos de referencias no entren en conflicto entre siacute Esta clase no devolveraacute informacioacuten acerca debloqueos de rango de bytes que pueden existir actualmente sobre un objeto

El usuario debe tener la autorizacioacuten de datos de ejecucioacuten (X) sobre cada directorio que preceda alobjeto cuyas referencias deben obtenerse El usuario debe tener la autorizacioacuten de datos de lectura (R)sobre el objeto cuyas referencias deben obtenerse

98 IBM Toolbox para Java IBM Toolbox para Java

Para obtener maacutes informacioacuten consulte el Javadoc ObjectReferencesInformacioacuten relacionadaJavadoc ObjectReferencesAPI Recuperar referencias de objeto (QP0LROR)

Clases de permisosLas clases de permisos de IBM Toolbox para Java permiten obtener y establecer informacioacuten deautorizacioacuten sobre objeto La informacioacuten de autorizacioacuten sobre objeto tambieacuten se llama permiso La clasePermission representa la autorizacioacuten que una coleccioacuten de varios usuarios posee sobre un objeto Laclase UserPermission representa la autorizacioacuten que un usuario individual posee sobre un objetoespeciacutefico

Clase Permission

La clase Permission permite recuperar y cambiar informacioacuten de autorizacioacuten sobre objeto Incluye unacoleccioacuten de diversos usuarios que tienen autorizacioacuten sobre el objeto El objeto Permission permite alprograma Java poner en memoria cacheacute los cambios realizados en la autorizacioacuten hasta que se llame almeacutetodo commit() Una vez llamado el meacutetodo commit() todos los cambios realizados hasta ese momentose enviacutean al servidor Algunas de las funciones proporcionadas por la clase Permission sonv addAuthorizedUser() antildeade un usuario autorizadov commit() compromete en el servidor los cambios realizados en el permisov getAuthorizationList() devuelve la lista de autorizaciones del objetov getAuthorizedUsers() devuelve una enumeracioacuten de los usuarios autorizadosv getOwner() devuelve el nombre del propietario del objetov getSensitivityLevel() devuelve el nivel de confidencialidad del objetov getType() devuelve el tipo de autorizacioacuten sobre objeto (QDLO QSYS o Raiacutez)v getUserPermission() devuelve el permiso que un determinado usuario tiene sobre el objetov getUserPermissions() devuelve una enumeracioacuten de los permisos que los usuarios tienen sobre el

objetov setAuthorizationList() establece la lista de autorizaciones del objetov setSensitivityLevel() establece el nivel de confidencialidad del objeto

Ejemplo coacutemo se utiliza Permission

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se crea un permiso y se antildeade un usuario para que tenga autorizacioacutensobre un objeto

Cree un objeto AS400AS400 as400 = new AS400()

Cree el objeto Permission pasando el AS400 y el objetoPermission myPermission = new Permission(as400 QSYSLIBmyLibLIB)

Antildeada un usuario para que tenga autorizacioacuten sobre el objetomyPermissionaddAuthorizedUser(User1)

Clase UserPermission

La clase UserPermission representa la autorizacioacuten de un determinado usuario individualUserPermission tiene tres subclases que manejan la autorizacioacuten basaacutendose en el tipo de objetov DLOPermission

IBM Toolbox para Java 99

v QSYSPermissionv RootPermission

La clase UserPermission le permite llevar a cabo estas tareasv Determinar si el perfil de usuario es un perfil de grupov Devolver el nombre del perfil de usuariov Indicar si el usuario tiene autorizacioacutenv Establecer la autorizacioacuten de la gestioacuten de lista de autorizaciones

Ejemplo coacutemo se utiliza UserPermission

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se recuperan los usuarios y los grupos que tienen permiso sobre unobjeto y coacutemo se imprimen de uno en uno

Cree un objeto sistemaAS400 sys = new AS400(MYAS400 USERID PASSWORD)

Represente los permisos sobre un objeto existente en el sistema como una bibliotecaPermission objectInQSYS = new Permission(sys QSYSLIBFREDLIB)

Recupere los diversos usuariosgrupos que tienen establecidos permisos en ese objetoEnumeration enum = objectInQSYSgetUserPermissions()while (enumhasMoreElements())

Imprima los nombres de perfil de usuariogrupo de uno en unoUserPermission userPerm = (UserPermission)enumnextElement()Systemoutprintln(userPermgetUserID())

Javadoc PermissionJavadoc UserPermission

Clase DLOPermission

La clase DLOPermission es una subclase de UserPermission DLOPermission permite visualizar yestablecer las autorizaciones (denominadas permisos) que un usuario tiene para un objeto de bibliotecade documentos (DLO) Los DLO se almacenan en QDLS

A cada usuario se le asigna uno de los siguientes valores de autorizacioacuten

Valor de autorizacioacuten Descripcioacuten

ALL El usuario puede llevar a cabo todas las operacionessalvo las que estaacuten controladas por la gestioacuten de lista deautorizaciones

AUTL Se utiliza la lista de autorizaciones para determinar laautorizacioacuten sobre el documento

CHANGE El usuario puede realizar cambios y efectuar funcionesbaacutesicas en el objeto

EXCLUDE El usuario no puede acceder al objeto

USE El usuario posee sobre el objeto autorizacioacuten operativade lectura y de ejecucioacuten

100 IBM Toolbox para Java IBM Toolbox para Java

Si desea realizar cambios o determinar cuaacutel es la autorizacioacuten de un usuario debe utilizar uno de estosmeacutetodosv getDataAuthority() permite visualizar el valor de la autorizacioacuten del usuariov setDataAuthority() permite establecer el valor de la autorizacioacuten del usuario

Tras establecer los permisos es importante que utilice el meacutetodo commit() de la clase Permissions paraenviar los cambios al servidor

Para obtener maacutes informacioacuten sobre los permisos y las autorizaciones consulte el tema Informacioacuten deconsulta sobre seguridad

Ejemplo coacutemo se utiliza DLOPermission

En el ejemplo siguiente se muestra coacutemo se recuperan e imprimen los permisos DLO incluidos losperfiles de usuario para cada permiso

Cree un objeto sistema

AS400 sys = new AS400(MYAS400 USERID PASSWORD) Represente los permisos sobre un objeto DLOPermission objectInQDLS = new Permission(sys QDLSMyFolder)

Imprima el nombre de viacutea del objeto y recupere los correspondientes permisosSystemoutprintln(Los permisos sobre + objectInQDLSgetObjectPath() + son)Enumeration enum = objectInQDLSgetUserPermissions()while (enumhasMoreElements())

Para cada uno de los permisos imprima el nombre del perfil de usuario y las autorizaciones que posee dicho usuario sobre el objetoDLOPermission dloPerm = (DLOPermission)enumnextElement()Systemoutprintln(dloPermgetUserID() + + dloPermgetDataAuthority())

Informacioacuten relacionadaJavadoc DLOPermission

QSYSPermission

QSYSPermission es una subclase de la clase UserPermission QSYSPermission permite visualizar yestablecer el permiso que un usuario posee sobre un objeto de la estructura tradicional de bibliotecas deIBM i de QSYSLIB Puede establecer la autorizacioacuten sobre un objeto almacenado en QSYSLIBestableciendo un valor de autorizacioacuten definido por el sistema o estableciendo las autorizacionesindividuales sobre objetos y sobre datos

La tabla siguiente lista y describe los valores de autorizacioacuten definidos por el sistema vaacutelidos

Valor de autorizacioacuten definido por el sistema Descripcioacuten

ALL El usuario puede llevar a cabo todas las operacionessalvo las que estaacuten controladas por la gestioacuten de lista deautorizaciones

AUTL Se utiliza la lista de autorizaciones para determinar laautorizacioacuten sobre el documento

CHANGE El usuario puede realizar cambios y efectuar funcionesbaacutesicas en el objeto

EXCLUDE El usuario no puede acceder al objeto

USE El usuario posee sobre el objeto autorizacioacuten operativade lectura y de ejecucioacuten

IBM Toolbox para Java 101

Cada valor de autorizacioacuten definido por el sistema representa en realidad una combinacioacuten de lasautorizaciones individuales sobre objetos y sobre datos La tabla siguiente muestra las relaciones de lasautorizaciones definidas por el sistema con las autorizaciones individuales sobre objetos y sobre datos

Tabla 1 S indica las autorizaciones que siacute pueden asignarse n indica las autorizaciones que no pueden asignarse

Autorizacioacutendefinidapor elsistema

Autorizacioacuten sobre objeto Autorizacioacuten sobre datos

Oper Gest Exist Alter Ref Lect Adic Actual Supr Ejec

Total S S S S S S S S S S

Cambio S n n n n S S S S S

Exclusioacuten n n n n n n n n n n

Uso S n n n n S n n n S

Lista deautoriz

Solo tiene validez con el usuario (PUBLIC) y una lista de autorizaciones especificada que determinelas autorizaciones individuales sobre objetos y sobre datos

Al especificar una autorizacioacuten definida por el sistema automaacuteticamente se asignan las autorizacionesindividuales correspondientes Del mismo modo al especificar distintas autorizaciones individuales secambian los valores de autorizacioacuten individuales correspondientes Cuando una combinacioacuten deautorizaciones individuales sobre objeto y autorizaciones sobre datos no se correlaciona con un valor deautorizacioacuten definido por el sistema uacutenico el valor uacutenico pasa a ser la autorizacioacuten Definida porusuario

Utilice el meacutetodo getObjectAuthority() para visualizar la autorizacioacuten definida por el sistema actualUtilice el meacutetodo setObjectAuthority() para establecer la autorizacioacuten definida por el sistema actualutilizando un solo valor

Utilice el meacutetodo set adecuado para habilitar o inhabilitar los valores individuales de autorizacioacuten sobreobjetov setAlter()v setExistence()v setManagement()v setOperational()v setReference()

Utilice el meacutetodo set adecuado para habilitar o inhabilitar los valores de autorizacioacuten sobre datosindividualesv setAdd()v setDelete()v setExecute()v setRead()v setUpdate()

Para obtener maacutes informacioacuten acercas de las diversas autorizaciones consulte el tema Informacioacuten deconsulta sobre seguridad Para obtener informacioacuten sobre coacutemo utilizar los mandatos CL para otorgar yeditar autorizaciones sobre objetos consulte los mandatos CL Otorgar autorizacioacuten sobre objeto(GRTOBJAUT) y Editar autorizacioacuten sobre objeto (EDTOBJAUT)

Ejemplo

Este ejemplo muestra coacutemo se recuperan e imprimen los permisos correspondientes a un objeto QSYS

102 IBM Toolbox para Java IBM Toolbox para Java

Cree un objeto sistemaAS400 sys = new AS400(MYAS400 USERID PASSWORD)

Represente los permisos sobre un objeto QSYSPermission objectInQSYS = new Permission(sys QSYSLIBFREDLIB)

Imprima el nombre de viacutea del objeto y recupere los correspondientes permisosSystemoutprintln(Los permisos sobre +objectInQSYSgetObjectPath()+ son)Enumeration enum = objectInQSYSgetUserPermissions()while (enumhasMoreElements())

Para cada uno de los permisos imprima el nombre del perfil de usuario y las autorizaciones que posee dicho usuario sobre el objetoQSYSPermission qsysPerm = (QSYSPermission)enumnextElement()Systemoutprintln(qsysPermgetUserID()+ +qsysPermgetObjectAuthority())

Javadoc QSYSPermissionldquoClase UserPermissionrdquo en la paacutegina 99

RootPermission

La clase RootPermission representa la autorizacioacuten de un usuario sobre los objetos contenidos en laestructura de directorio raiacutez Los objetos de RootPermissions son los que no estaacuten contenidos enQSYSLIB ni en QDLS

RootPermission es una subclase de la clase UserPermission La clase RootPermission permite visualizar yestablecer los permisos correspondientes a un usuario de un objeto contenido en la estructura deldirectorio raiacutez

Un objeto que esteacute en la estructura del directorio raiacutez puede establecer la autorizacioacuten sobre datos o laautorizacioacuten sobre objeto Puede establecer la autorizacioacuten sobre datos en los valores que se indican en latabla siguiente Utilice el meacutetodo getDataAuthority() para visualizar los valores actuales y el meacutetodosetDataAuthority() para establecer la autorizacioacuten sobre datos

La tabla siguiente lista y describe los valores de autorizacioacuten sobre datos vaacutelidos

Valor de autorizacioacutensobre datos Descripcioacuten

none El usuario no posee autorizacioacuten alguna sobre el objeto

RWX El usuario posee autorizacioacuten para leer antildeadir actualizar suprimir y ejecutar

RW El usuario posee autorizacioacuten para leer antildeadir y suprimir

RX El usuario posee autorizacioacuten para leer y ejecutar

WX El usuario posee autorizacioacuten para antildeadir actualizar suprimir y ejecutar

R El usuario posee autorizacioacuten para leer

W El usuario posee autorizacioacuten para antildeadir actualizar y suprimir

X El usuario posee autorizacioacuten para ejecutar

EXCLUDE El usuario no puede acceder al objeto

AUTL Las autorizaciones de uso puacuteblico sobre este objeto proceden de la lista deautorizaciones

La autorizacioacuten sobre objeto se puede establecer en uno o varios de estos valores alteracioacuten existenciagestioacuten o referencia Puede utilizar los meacutetodos setAlter() setExistence() setManagement() osetReference() para activar o desactivar los valores

IBM Toolbox para Java 103

Tras establecer la autorizacioacuten sobre datos o la autorizacioacuten sobre objeto de un objeto es importante queutilice el meacutetodo commit() de la clase Permissions para enviar los cambios al servidor

Para obtener maacutes informacioacuten acercas de las diversas autorizaciones consulte el tema Informacioacuten deconsulta sobre seguridad

Ejemplo

Este ejemplo muestra coacutemo se recuperan e imprimen los permisos correspondientes a un objeto raiacutez Cree un objeto sistemaAS400 sys = new AS400(MYAS400 USERID PASSWORD)

Represente los permisos sobre un objeto en el sistema de archivos raiacutezPermission objectInRoot = new Permission(sys fred)

Imprima el nombre de viacutea del objeto y recupere los correspondientes permisosSystemoutprintln(Los permisos sobre +objectInRootgetObjectPath()+ son)Enumeration enum = objectInRootgetUserPermissions()while (enumhasMoreElements())

Para cada uno de los permisos imprima el nombre del perfil de usuario y las autorizaciones que posee dicho usuario sobre el objetoRootPermission rootPerm = (RootPermission)enumnextElement()Systemoutprintln(rootPermgetUserID()+ +rootPermgetDataAuthority())

Informacioacuten relacionadaJavadoc RootPermission

Clases de impresioacutenLos objetos de impresioacuten son los archivos en spool las colas de salida las impresoras los archivos deimpresora los trabajos transcriptores y los recursos de las Funciones Avanzadas de Impresioacuten (AFP)incluidos los fonts las definiciones de formulario los preformatos las definiciones de paacutegina y lossegmentos de paacutegina

Las clases de IBM Toolbox para Java de los objetos de impresioacuten estaacuten organizadas en una clase basePrintObject y en una subclase para cada uno de los seis tipos de objetos de impresioacuten La clase basecontiene los meacutetodos y los atributos que son comunes a todos los objetos de impresioacuten del servidor Lassubclases contienen los meacutetodos y atributos que son especiacuteficos para cada subtipo

Ejemplosv Ejemplo crear archivos en spool muestra coacutemo se crea un archivo en spool en un servidor a partir de

una corriente de entradav Ejemplo crear archivos en spool SCS muestra coacutemo se genera una corriente de datos SCS utilizando la

clase SCS3812Writer y coacutemo se escribe la corriente en un archivo en spool en el servidorv Ejemplo leer archivos en spool muestra coacutemo se utiliza PrintObjectInputStream para leer un archivo en

spool existente en el servidorv Ejemplo leer y transformar archivos en spool muestra coacutemo se utiliza PrintObjectPageInputStream y

PrintObjectTransformedInputStream para obtener diferentes transformaciones al leer datos de archivosen spool

v Ejemplo copiar un archivo en spool muestra coacutemo copiar un archivo en spool en la misma cola quecontiene el archivo que se desea copiar

v Ejemplo listar archivos en spool asiacutencronamente (utilizando escuchas) muestra coacutemo se listan de modoasiacutencrono todos los archivos en spool de un sistema y coacutemo se utiliza la interfazPrintObjectListListener para obtener informacioacuten de retorno a medida que la lista se va construyendo

104 IBM Toolbox para Java IBM Toolbox para Java

v Ejemplo listar archivos en spool asiacutencronamente (sin utilizar escuchas) muestra coacutemo se listan demodo asiacutencrono todos los archivos en spool de un sistema sin utilizar la interfazPrintObjectListListener

v Ejemplo listar archivos en spool siacutencronamente muestra coacutemo se listan de modo siacutencrono todos losarchivos en spool que hay en un sistema

Informacioacuten relacionadaJavadoc PrintObject

Listar objetos de impresioacuten

Puede utilizar la clase PrintObjectList de IBM Toolbox para Java y sus subclases para trabajar con listasde objetos de impresioacuten Los objetos de impresioacuten son los archivos en spool las colas de salida lasimpresoras los recursos de las Funciones Avanzadas de Impresioacuten (AFP) los archivos de impresora y lostrabajos transcriptores

Cada subclase dispone de meacutetodos que permiten el filtrado de la lista basaacutendose en los elementos quetienen sentido para un determinado tipo de objeto de impresioacuten Por ejemplo SpooledFileList permitefiltrar una lista de archivos en spool basaacutendose en el usuario que creoacute los archivos en spool en la cola desalida en la que se encuentran los archivos en spool en el tipo de formulario o en los datos de usuario delos archivos en spool Uacutenicamente se listan los archivos en spool que coinciden con los criterios defiltrado De no establecerse ninguacuten filtro se utiliza un valor predeterminado para cada uno de los filtros

Para recuperar realmente la lista de objetos de impresioacuten del servidor se emplea el meacutetodoopenSynchronously() u openAsynchronously() El meacutetodo openSynchronously() no vuelve hasta que sehan recuperado del servidor todos los objetos de la lista El meacutetodo openAsynchronously() vuelveinmediatamente y el llamador puede realizar otras tareas en primer plano mientras espera a que seconstruya la lista La lista abierta asiacutencronamente permite asimismo al llamador empezar a mostrar losobjetos al usuario a medida que van llegando El usuario debido a que puede ver los objetos a medidaque van llegando tiene la impresioacuten de que el tiempo de respuesta es maacutes corto De hecho el tiempo derespuesta global puede ser maacutes largo a causa del proceso adicional que se lleva a cabo en cada objeto dela lista

Si la lista se abre asiacutencronamente el llamador puede obtener informacioacuten de retorno acerca de laconstruccioacuten de la lista Diversos meacutetodos como por ejemplo isCompleted() y size() indican si ya se haterminado de construir la lista o devuelven el tamantildeo actual de la lista Otros meacutetodos comowaitForListToComplete() y waitForItem() permiten al llamador esperar a que la lista se complete o a quese recupere un elemento determinado Ademaacutes de llamar a estos meacutetodos de PrintObjectList el llamadorpuede registrarse en la lista como escucha En tal caso el llamador recibe notificacioacuten de los eventos quese producen en la lista Para registrarse o desregistrarse de los eventos el llamador utilizaPrintObjectListListener() y a continuacioacuten llama a addPrintObjectListListener() para registrarse o aremovePrintObjectListListener() para desregistrarse En la siguiente tabla se muestran los eventos que unobjeto PrintObjectList puede comunicar

Evento de PrintObjectList Cuaacutendo se entrega el evento

listClosed Al cerrarse la lista

listCompleted Al completarse la lista

listErrorOccurred Cuando se lanza alguna excepcioacuten mientras se recupera la lista

listOpened Al abrirse la lista

listObjectAdded Cuando se antildeade un objeto a la lista

Tras haber abierto la lista y procesado los objetos que contiene cierre la lista utilizando el meacutetodo close()Asiacute se liberan los recursos que se hayan asignado al colector de basura durante la apertura Despueacutes decerrar una lista es posible modificar los filtros de la misma y la lista puede abrirse de nuevo

IBM Toolbox para Java 105

Cuando se listan objetos de impresioacuten los atributos acerca de cada objeto de impresioacuten listado se enviacuteandesde el servidor y se almacenan junto con el objeto de impresioacuten Estos atributos se pueden actualizarmediante el meacutetodo update() de la clase PrintObject Los atributos enviados desde el servidor variacutean enfuncioacuten del tipo de objeto de impresioacuten que se lista Hay una lista predeterminada de atributos para cadatipo de objeto de impresioacuten que se puede alterar temporalmente utilizando el meacutetodosetAttributesToRetrieve() de PrintObjectList En la seccioacuten Recuperar atributos de PrintObject encontraraacuteuna lista de los atributos soportados por cada tipo de objeto de impresioacuten

Ejemplos

En los ejemplos siguientes se muestran diversas formas de listar archivos en spool

ldquoEjemplo listar archivos en spool asiacutencronamente (utilizando escuchas)rdquo en la paacutegina 453 quemuestra coacutemo se listan de modo asiacutencrono todos los archivos en spool de un sistema y coacutemo seutiliza la interfaz PrintObjectListListener para obtener informacioacuten de retorno a medida que la listase va construyendo

ldquoEjemplo listar archivos en spool asiacutencronamente (sin utilizar escuchas)rdquo en la paacutegina 456 quemuestra coacutemo se listan de modo asiacutencrono todos los archivos en spool de un sistema sin utilizar lainterfaz PrintObjectListListener

ldquoEjemplo listar archivos en spool siacutencronamenterdquo en la paacutegina 458 que muestra coacutemo se listan demodo siacutencrono todos los archivos en spool que hay en un sistema

Javadoc PrintObjectListJavadoc SpooledFileListJavadoc AFPResource

Trabajar con objetos de impresioacuten

PrintObject es una clase abstracta Una clase abstracta no permite crear una instancia de la clase En vezde ello es preciso crear una instancia de una de sus subclases para trabajar con objetos de impresioacuten

Para crear objetos de las subclases puede seguir cualquiera de estos procedimientosv Si conoce el sistema y los atributos identificadores del objeto construya el objeto expliacutecitamente

llamando al constructor puacuteblico de dicho objetov Puede utilizar una subclase de PrintObjectList para construir una lista de los objetos y luego acceder a

los objetos individuales mediante la listav Un objeto puede crearse y serle devuelto como resultado de llamar a un meacutetodo o a un conjunto de

meacutetodos Por ejemplo el meacutetodo estaacutetico start() de la clase WriterJob devuelve un objeto WriterJob

Utilice la clase base PrintObject y sus subclases para trabajar con los objetos de impresioacuten del servidorv OutputQueuev Impresorav PrinterFilev SpooledFilev WriterJob

Javadoc PrintObjectJavadoc PrintObjectListJavadoc OutputQueueJavadoc PrinterJavadoc PrinterFileJavadoc SpooledFile

106 IBM Toolbox para Java IBM Toolbox para Java

Javadoc WriterJob

Recuperar atributos de PrintObject

Para recuperar atributos de un objeto de impresioacuten puede utilizar el ID de atributo y uno de los diversosmeacutetodos de la clase base PrintObject

Los meacutetodos que puede utilizar son los siguientesv Utilice getIntegerAttribute(int attributeID) para recuperar un atributo de tipo entero)v Utilice getFloatAttribute(int attributeID) para recuperar un atributo de tipo coma flotantev Utilice getStringAttribute(int attributeID) para recuperar un atributo de tipo serie

El paraacutemetro attributeID es un entero que identifica el atributo que se ha de recuperar Todos los ID sedefinen como constantes puacuteblicas en la clase base PrintObject El archivo PrintAttributes contiene unaentrada de cada ID de atributo La entrada incluye una descripcioacuten del atributo y de su tipo (enterocoma flotante o serie) Si desea obtener una lista de cuaacuteles son los atributos que pueden recuperarsemediante estos meacutetodos seleccione los enlaces siguientesv AFPResourceAttrs para recursos AFPv OutputQueueAttrs para colas de salidav PrinterAttrs para impresorasv PrinterFileAttrs para archivos de impresorav SpooledFileAttrs para archivos en spoolv WriterJobAttrs para trabajos transcriptores

Para lograr un rendimiento aceptable estos atributos se copian en el cliente La copia se realiza al listarselos objetos o bien cuando un objeto se necesite por primera vez en el caso de que dicho objeto se hayacreado impliacutecitamente Ello evita que el objeto tenga que ir al host cada vez que la aplicacioacuten necesiterecuperar un atributo Tambieacuten hace que sea posible que la instancia del objeto de impresioacuten Javacontenga informacioacuten desfasada acerca del objeto existente en el servidor El usuario del objeto puederenovar todos los atributos llamando al meacutetodo update() en el objeto Ademaacutes si la aplicacioacuten llama aalguacuten meacutetodo existente en el objeto que pueda provocar cambios en los atributos del objeto los atributosse actualizan automaacuteticamente Por ejemplo si una cola de salida tiene el atributo de estado RELEASED(getStringAttribute(ATTR_OUTQSTS) devuelve la serie RELEASED) y se llama al meacutetodo hold() en lacola de datos si despueacutes se obtiene el atributo de estado se devolveriacutea el valor HELD

Meacutetodo setAttributes

Puede utilizar el meacutetodo setAttributes para cambiar los atributos de los objetos de archivos en spool yarchivo de impresora Si desea obtener una lista de cuaacuteles son los atributos que se pueden establecerseleccione los enlaces siguientesv PrinterFileAttrs para archivos de impresorav SpooledFileAttrs para archivos en spool

El meacutetodo setAttributes toma un paraacutemetro PrintParameterList que es una clase utilizada para conteneruna coleccioacuten de identificadores de atributos y de sus valores La lista al principio estaacute vaciacutea y elllamador puede ir antildeadiendo atributos a la lista mediante los diversos meacutetodos setParameter()

Clase PrintParameterList

La clase PrintParameterList se puede utilizar para pasar un grupo de atributos a un meacutetodo que tomecomo paraacutemetros un nuacutemero determinado de atributos Por ejemplo para enviar un archivo en spoolmediante TCP (LPR) puede emplear el meacutetodo de SpooledFile sendTCP() El objeto PrintParameterListcontiene los paraacutemetros necesarios para el mandato de enviar (por ejemplo el sistema remoto y la cola)

IBM Toolbox para Java 107

maacutes los paraacutemetros opcionales que se deseen (por ejemplo si hay que suprimir el archivo en spooldespueacutes del enviacuteo) En estos casos la documentacioacuten del meacutetodo proporciona una lista de los atributosnecesarios y de los opcionales El meacutetodo setParameter() de PrintParameterList no comprueba queacuteatributos se establecen ni los valores que se les da El meacutetodo setParameter() de PrintParameterList tansolo contiene los valores que se han de pasar al meacutetodo En general los atributos adicionales dePrintParameterList no se tienen en cuenta y los valores no permitidos de los atributos utilizados sediagnostican en el servidor

Javadoc PrintObjectJavadoc SpooledFileJavadoc PrintParameterList

Atributos de recursos AFP

Este tema indica los atributos que pueden recuperarse y establecerse para un recurso AFP

Recuperar atributos

Pueden recuperarse los atributos siguientes para un recurso AFP utilizando el meacutetodogetIntegerAttribute() getStringAttribute() o getFloatAttribute() adecuadov ATTR_AFP_RESOURCE - Viacutea de acceso del sistema de archivos integrado de recursos AFPv ATTR_OBJEXTATTR - Atributo ampliado de objetov ATTR_DESCRIPTION - Texto descriptivov ATTR_DATE - Archivo de fecha abiertov ATTR_TIME - Archivo de hora abiertov ATTR_NUMBYTES - Nuacutemero de bytes de lecturaescritura

Establecer atributos

No estaacute permitido establecer atributos para un recurso AFP

Atributos de la cola de salida

Este tema indica los atributos disponibles para una cola de salida

Recuperar atributos

Pueden recuperarse los atributos siguientes para una cola de salida empleando el meacutetodogetIntegerAttribute() getStringAttribute() o getFloatAttribute() adecuadov ATTR_AUTHCHCK - Autorizacioacuten para comprobarv ATTR_DATA_QUEUE - Nombre del sistema de archivos integrado de la cola de datosv ATTR_DISPLAYANY - Visualizar cualquier archivov ATTR_JOBSEPRATR - Separadores de trabajov ATTR_NUMFILES - Nuacutemero de archivosv ATTR_NUMWRITERS - Nuacutemero de transcriptores iniciados para la colav ATTR_OPCNTRL - Operador controladov ATTR_ORDER - Orden de archivos en colav ATTR_OUTPUT_QUEUE - Nombre del sistema de archivos integrado de la cola de salidav ATTR_OUTQSTS - Estado de la cola de salidav ATTR_PRINTER - Impresorav ATTR_SEPPAGE - Paacutegina de separacioacutenv ATTR_DESCRIPTION - Descripcioacuten de texto

108 IBM Toolbox para Java IBM Toolbox para Java

v ATTR_USRDEFOPT - Opciones definidas por el usuariov ATTR_USER_DEFINED_OBJECT - Nombre del sistema de archivos integrado del objeto definido por

el usuariov ATTR_USER_TRANSFORM_PROG - Nombre del sistema de archivos integrado del programa de

transformacioacuten del usuariov ATTR_USER_DRIVER_PROG - Nombre del sistema de archivos integrado del programa controlador

del usuariov ATTR_WTRJOBNAME - Nombre de trabajo del transcriptorv ATTR_WTRJOBNUM - Nuacutemero de trabajo del transcriptorv ATTR_WTRJOBSTS - Estado del trabajo del transcriptorv ATTR_WTRJOBUSER - Nombre de usuario del trabajo del transcriptor

Establecer atributos

No estaacute permitido establecer atributos para una cola de salida

Atributos de impresora

Pueden recuperarse los atributos siguientes para una impresora empleando el meacutetodogetIntegerAttribute() getStringAttribute() o getFloatAttribute() adecuado

Recuperar atributos

v ATTR_AFP - Funciones avanzadas de impresioacutenv ATTR_ALIGNFORMS - Alinear formulariosv ATTR_ALWDRTPRT - Permitir impresioacuten directav ATTR_BTWNCPYSTS - Estado entre copiasv ATTR_BTWNFILESTS - Estado entre archivosv ATTR_CODEPAGE - Paacutegina de coacutedigosv ATTR_CHANGES - Cambiosv ATTR_DEVCLASS - Clase de dispositivov ATTR_DEVMODEL - Modelo de dispositivov ATTR_DEVTYPE - Tipo de dispositivov ATTR_DEVSTATUS - Estado de dispositivov ATTR_DRWRSEP - Bandeja de separadoresv ATTR_ENDPNDSTS - Estado pendiente de finalizacioacutenv ATTR_FILESEP - Separadores de archivov ATTR_FONTID - Identificador de fontv ATTR_FORM_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de formulariov ATTR_FORMTYPE - Tipo de formulariov ATTR_FORMTYPEMSG - Mensaje de tipo de formulariov ATTR_FORMFEED - Alimentacioacuten de papelv ATTR_CHAR_ID - Juego de caracteres graacuteficosv ATTR_HELDSTS - Estado de retenidov ATTR_HOLDPNDSTS - Estado pendiente de retencioacutenv ATTR_JOBUSER - Usuario de trabajov ATTR_MFGTYPE - Tipo y modelo de fabricantev ATTR_MESSAGE_QUEUE - Nombre del sistema de archivos integrado de la cola de mensajesv ATTR_ONJOBQSTS - Estado de en cola de trabajos

IBM Toolbox para Java 109

v ATTR_OUTPUT_QUEUE - Nombre del sistema de archivos integrado de la cola de salidav ATTR_OVERALLSTS - Estado globalv ATTR_POINTSIZE - Cuerpov ATTR_PRINTER - Impresorav ATTR_PRTDEVTYPE - Tipo de dispositivo de impresorav ATTR_PUBINF_COLOR_SUP - Color de informacioacuten de publicacioacuten soportadov ATTR_PUBINF_PPM_COLOR - Paacuteginas por minuto de informacioacuten de publicacioacuten (color)v ATTR_PUBINF_PPM - Paacuteginas por minuto de informacioacuten de publicacioacuten (monocromo)v ATTR_PUBINF_DUPLEX_SUP - Soporte duacuteplex de informacioacuten de publicacioacutenv ATTR_PUBINF_LOCATION - Ubicacioacuten de informacioacuten de publicacioacutenv ATTR_RMTLOCNAME - Nombre de ubicacioacuten remotav ATTR_SPOOLFILE - Nombre de archivo en spoolv ATTR_SPLFNUM - Nuacutemero de archivo en spoolv ATTR_STARTEDBY - Iniciado por usuariov ATTR_DESCRIPTION - Texto descriptivov ATTR_USERDATA - Datos de usuariov ATTR_USRDEFOPT - Opciones definidas por el usuariov ATTR_USER_DEFINED_OBJECT - Nombre del sistema de archivos integrado del objeto definido por

el usuariov ATTR_USER_TRANSFORM_PROG - Nombre del sistema de archivos integrado del programa de

transformacioacuten del usuariov ATTR_USER_DRIVER_PROG - Nombre del sistema de archivos integrado del programa controlador

del usuariov ATTR_SCS2ASCII - Transformar SCS en ASCIIv ATTR_WTNGDATASTS - Estado de en espera de datosv ATTR_WTNGDEVSTS - Estado de en espera de dispositivov ATTR_WTNGMSGSTS - Estado de en espera de mensajev ATTR_WTRAUTOEND - Cuaacutendo finalizar transcriptor automaacuteticamentev ATTR_WTRJOBNAME - Nombre de trabajo del transcriptorv ATTR_WTRJOBSTS - Estado del trabajo del transcriptorv ATTR_WTRSTRTD - Transcriptor iniciadov ATTR_WRTNGSTS - Estado de transcribiendo

Establecer atributos

No estaacute permitido establecer atributos para una impresora

Atributos de archivo de impresora

Este tema contiene una lista de los atributos de archivo de impresora que se utilizan con IBM Toolboxpara Java

Recuperar atributos

Pueden recuperarse los atributos siguientes para un archivo de impresora empleando el meacutetodogetIntegerAttribute() getStringAttribute() o getFloatAttribute() adecuadov ATTR_ALIGN - Alinear paacuteginav ATTR_BKMGN_ACR - Desplazamiento a traveacutes de margen reverso

110 IBM Toolbox para Java IBM Toolbox para Java

v ATTR_BKMGN_DWN - Desplazamiento abajo de margen reversov ATTR_BACK_OVERLAY - Nombre del sistema de archivos integrado del preformato reversov ATTR_BKOVL_DWN - Desplazamiento abajo de preformato reversov ATTR_BKOVL_ACR - Desplazamiento a traveacutes de preformato reversov ATTR_CPI - Caracteres por pulgadav ATTR_CODEDFNTLIB - Nombre de biblioteca de font codificadov ATTR_CODEPAGE - Paacutegina de coacutedigosv ATTR_CODEDFNT - Nombre de font codificadov ATTR_CONTROLCHAR - Caraacutecter de controlv ATTR_CONVERT_LINEDATA - Convertir datos de liacuteneav ATTR_COPIES - Copiasv ATTR_CORNER_STAPLE - Grapa en esquinav ATTR_DBCSDATA - Datos DBCS especificados por usuariov ATTR_DBCSEXTENSN - Caracteres de extensioacuten DBCSv ATTR_DBCSROTATE - Rotacioacuten de caracteres DBCSv ATTR_DBCSCPI - Caracteres DBCS por pulgadav ATTR_DBCSSISO - Espaciado DBCS SOSIv ATTR_DFR_WRITE - Diferir escriturav ATTR_PAGRTT - Grados de rotacioacuten de paacuteginav ATTR_EDGESTITCH_NUMSTAPLES - Nuacutemero de grapas de ligadura de bordesv ATTR_EDGESTITCH_REF - Referencia de ligadura de bordesv ATTR_EDGESTITCH_REFOFF - Desplazamiento de referencia de ligadura de bordesv ATTR_ENDPAGE - Paacutegina finalv ATTR_FILESEP - Separadores de archivov ATTR_FOLDREC - Acomodar registrosv ATTR_FONTID - Identificador de fontv ATTR_FORM_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de formulariov ATTR_FORMFEED - Alimentacioacuten de papelv ATTR_FORMTYPE - Tipo de formulariov ATTR_FTMGN_ACR - Desplazamiento a traveacutes de margen anversov ATTR_FTMGN_DWN - Desplazamiento abajo de margen anversov ATTR_FRONT_OVERLAY - Nombre del sistema de archivos integrado del preformato anversov ATTR_FTOVL_ACR - Desplazamiento a traveacutes de preformato anversov ATTR_FTOVL_DWN - Desplazamiento abajo de preformato anversov ATTR_CHAR_ID - Juego de caracteres graacuteficosv ATTR_JUSTIFY - Alineacioacuten de hardwarev ATTR_HOLD - Retener archivo en spoolv ATTR_LPI - Liacuteneas por pulgadav ATTR_MAXRCDS - Maacuteximo de registros de salida en spoolv ATTR_OUTPTY - Prioridad de salidav ATTR_OUTPUT_QUEUE - Nombre del sistema de archivos integrado de la cola de salidav ATTR_OVERFLOW - Nuacutemero de liacutenea de desbordamientov ATTR_PAGE_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de paacuteginav ATTR_PAGELEN - Longitud de paacuteginav ATTR_MEASMETHOD - Meacutetodo de medida

IBM Toolbox para Java 111

v ATTR_PAGEWIDTH - Anchura de paacuteginav ATTR_MULTIUP - Paacuteginas por carav ATTR_POINTSIZE - Cuerpov ATTR_FIDELITY - Fidelidad de impresioacutenv ATTR_DUPLEX - Imprimir en ambas carasv ATTR_PRTQUALITY - Calidad de impresioacutenv ATTR_PRTTEXT - Texto de impresioacutenv ATTR_PRINTER - Impresorav ATTR_PRTDEVTYPE - Tipo de dispositivo de impresorav ATTR_RPLUNPRT - Sustituir caracteres no imprimiblesv ATTR_RPLCHAR - Caraacutecter de sustitucioacutenv ATTR_SADDLESTITCH_NUMSTAPLES - Nuacutemero de grapas de cosido por el lomov ATTR_SADDLESTITCH_REF - Referencia de cosido por el lomov ATTR_SAVE - Guardar archivo en spoolv ATTR_SRCDRWR - Bandeja del papelv ATTR_SPOOL - Poner los datos en spoolv ATTR_SCHEDULE - Planificacioacuten de salida en spoolv ATTR_STARTPAGE - Paacutegina inicialv ATTR_DESCRIPTION - Texto descriptivov ATTR_UNITOFMEAS - Unidad de medidav ATTR_USERDATA - Datos de usuariov ATTR_USRDEFDATA - Datos definidos por usuariov ATTR_USRDEFOPT - Opciones definidas por el usuariov ATTR_USER_DEFINED_OBJECT - Nombre del sistema de archivos integrado del objeto definido por

el usuario

Establecer atributos

Pueden establecerse los atributos siguientes para un archivo de impresora empleando el meacutetodosetAttributes()v ATTR_ALIGN - Alinear paacuteginav ATTR_BKMGN_ACR - Desplazamiento a traveacutes de margen reversov ATTR_BKMGN_DWN - Desplazamiento abajo de margen reversov ATTR_BACK_OVERLAY - Nombre del sistema de archivos integrado del preformato reversov ATTR_BKOVL_DWN - Desplazamiento abajo de preformato reversov ATTR_BKOVL_ACR - Desplazamiento a traveacutes de preformato reversov ATTR_CPI - Caracteres por pulgadav ATTR_CODEDFNTLIB - Nombre de biblioteca de font codificadov ATTR_CODEPAGE - Paacutegina de coacutedigosv ATTR_CODEDFNT - Nombre de font codificadov ATTR_CONTROLCHAR - Caraacutecter de controlv ATTR_CONVERT_LINEDATA - Convertir datos de liacuteneav ATTR_COPIES - Copiasv ATTR_CORNER_STAPLE - Grapa en esquinav ATTR_DBCSDATA - Datos DBCS especificados por usuariov ATTR_DBCSEXTENSN - Caracteres de extensioacuten DBCS

112 IBM Toolbox para Java IBM Toolbox para Java

v ATTR_DBCSROTATE - Rotacioacuten de caracteres DBCSv ATTR_DBCSCPI - Caracteres DBCS por pulgadav ATTR_DBCSSISO - Espaciado DBCS SOSIv ATTR_DFR_WRITE - Diferir escriturav ATTR_PAGRTT - Grados de rotacioacuten de paacuteginav ATTR_EDGESTITCH_NUMSTAPLES - Nuacutemero de grapas de ligadura de bordesv ATTR_EDGESTITCH_REF - Referencia de ligadura de bordesv ATTR_EDGESTITCH_REFOFF - Desplazamiento de referencia de ligadura de bordesv ATTR_ENDPAGE - Paacutegina finalv ATTR_FILESEP - Separadores de archivov ATTR_FOLDREC - Acomodar registrosv ATTR_FONTID - Identificador de fontv ATTR_FORM_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de formulariov ATTR_FORMFEED - Alimentacioacuten de papelv ATTR_FORMTYPE - Tipo de formulariov ATTR_FTMGN_ACR - Desplazamiento a traveacutes de margen anversov ATTR_FTMGN_DWN - Desplazamiento abajo de margen anversov ATTR_FRONT_OVERLAY - Nombre del sistema de archivos integrado del preformato anversov ATTR_FTOVL_ACR - Desplazamiento a traveacutes de preformato anversov ATTR_FTOVL_DWN - Desplazamiento abajo de preformato anversov ATTR_CHAR_ID - Juego de caracteres graacuteficosv ATTR_JUSTIFY - Alineacioacuten de hardwarev ATTR_HOLD - Retener archivo en spoolv ATTR_LPI - Liacuteneas por pulgadav ATTR_MAXRCDS - Maacuteximo de registros de salida en spoolv ATTR_OUTPTY - Prioridad de salidav ATTR_OUTPUT_QUEUE - Nombre del sistema de archivos integrado de la cola de salidav ATTR_OVERFLOW - Nuacutemero de liacutenea de desbordamientov ATTR_PAGE_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de paacuteginav ATTR_PAGELEN - Longitud de paacuteginav ATTR_MEASMETHOD - Meacutetodo de medidav ATTR_PAGEWIDTH - Anchura de paacuteginav ATTR_MULTIUP - Paacuteginas por carav ATTR_POINTSIZE - Cuerpov ATTR_FIDELITY - Fidelidad de impresioacutenv ATTR_DUPLEX - Imprimir en ambas carasv ATTR_PRTQUALITY - Calidad de impresioacutenv ATTR_PRTTEXT - Texto de impresioacutenv ATTR_PRINTER - Impresorav ATTR_PRTDEVTYPE - Tipo de dispositivo de impresorav ATTR_RPLUNPRT - Sustituir caracteres no imprimiblesv ATTR_RPLCHAR - Caraacutecter de sustitucioacutenv ATTR_SADDLESTITCH_NUMSTAPLES - Nuacutemero de grapas de cosido por el lomov ATTR_SADDLESTITCH_REF - Referencia de cosido por el lomov ATTR_SAVE - Guardar archivo en spool

IBM Toolbox para Java 113

v ATTR_SRCDRWR - Bandeja del papelv ATTR_SPOOL - Poner los datos en spoolv ATTR_SCHEDULE - Planificacioacuten de salida en spoolv ATTR_STARTPAGE - Paacutegina inicialv ATTR_DESCRIPTION - Texto descriptivov ATTR_UNITOFMEAS - Unidad de medidav ATTR_USERDATA - Datos de usuariov ATTR_USRDEFDATA - Datos definidos por usuariov ATTR_USRDEFOPT - Opciones definidas por el usuariov ATTR_USER_DEFINED_OBJECT - Nombre del sistema de archivos integrado del objeto definido por

el usuario

Atributos de archivo en spool

Este tema indica los atributos que pueden recuperarse y establecerse para un archivo en spool

Recuperar atributos

Pueden recuperarse los atributos siguientes para un archivo en spool empleando el meacutetodogetIntegerAttribute() getStringAttribute() o getFloatAttribute() adecuadov ATTR_AFP - Funciones avanzadas de impresioacutenv ATTR_ALIGN - Alinear paacuteginav ATTR_BKMGN_ACR - Desplazamiento a traveacutes de preformato reversov ATTR_BKMGN_DWN - Desplazamiento abajo de preformato reversov ATTR_BACK_OVERLAY - Nombre del sistema de archivos integrado del preformato reversov ATTR_BKOVL_DWN - Desplazamiento abajo de preformato reversov ATTR_BKOVL_ACR - Desplazamiento a traveacutes de preformato reversov ATTR_CPI - Caracteres por pulgadav ATTR_CODEDFNTLIB - Nombre de biblioteca de font codificadov ATTR_CODEDFNT - Nombre de font codificadov ATTR_CODEPAGE - Paacutegina de coacutedigosv ATTR_CONTROLCHAR - Caraacutecter de controlv ATTR_COPIES - Copiasv ATTR_COPIESLEFT - Copias dejadas para producirv ATTR_CORNER_STAPLE - Grapa en esquinav ATTR_CURPAGE - Paacutegina actualv ATTR_DATE - Fecha de creacioacuten del objetov ATTR_DATE_WTR_BEGAN_FILE - Fecha en que el transcriptor empezoacute a procesar el archivo en spoolv ATTR_DATE_WTR_CMPL_FILE - Fecha en que el transcriptor terminoacute de procesar el archivo en spoolv ATTR_DBCSDATA - Datos DBCS especificados por usuariov ATTR_DBCSEXTENSN - Caracteres de extensioacuten DBCSv ATTR_DBCSROTATE - Rotacioacuten de caracteres DBCSv ATTR_DBCSCPI - Caracteres DBCS por pulgadav ATTR_DBCSSISO - Espaciado DBCS SOSIv ATTR_PAGRTT - Grados de rotacioacuten de paacuteginav ATTR_EDGESTITCH_NUMSTAPLES - Nuacutemero de grapas de ligadura de bordesv ATTR_EDGESTITCH_REF - Referencia de ligadura de bordes

114 IBM Toolbox para Java IBM Toolbox para Java

v ATTR_EDGESTITCH_REFOFF - Desplazamiento de referencia de ligadura de bordesv ATTR_ENDPAGE - Paacutegina finalv ATTR_FILESEP - Separadores de archivov ATTR_FOLDREC - Acomodar registrosv ATTR_FONTID - Identificador de fontv ATTR_FORM_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de formulariov ATTR_FORMFEED - Alimentacioacuten de papelv ATTR_FORMTYPE - Tipo de formulariov ATTR_FTMGN_ACR - Desplazamiento a traveacutes de margen anversov ATTR_FTMGN_DWN - Desplazamiento abajo de margen anversov ATTR_FRONTSIDE_OVERLAY - Nombre del sistema de archivos integrado del preformato anversov ATTR_FTOVL_ACR - Desplazamiento a traveacutes de preformato anversov ATTR_FTOVL_DWN - Desplazamiento abajo de preformato anversov ATTR_CHAR_ID - Juego de caracteres graacuteficosv ATTR_JUSTIFY - Alineacioacuten de hardwarev ATTR_HOLD - Retener archivo en spoolv ATTR_IPP_ATTR_CHARSET - Atributos IPP - juego de caracteresv ATTR_IPP_JOB_ID - ID de trabajo IPPv ATTR_IPP_JOB_NAME - Nombre de trabajo IPPv ATTR_IPP_JOB_NAME_NL - NL de nombre de trabajo IPPv ATTR_IPP_JOB_ORIGUSER - Nombre de usuario emisor de trabajo IPPv ATTR_IPP_JOB_ORIGUSER_NL - NL de nombre de usuario emisor de trabajo IPPv ATTR_IPP_PRINTER_NAME - Nombre de impresora IPPv ATTR_JOBNAME - Nombre de trabajov ATTR_JOBNUMBER - Nuacutemero de trabajov ATTR_JOBUSER - Usuario de trabajov ATTR_JOB_SYSTEM - Sistema de trabajov ATTR_LASTPAGE - Uacuteltima paacutegina impresav ATTR_LINESPACING - Interlineadov ATTR_LPI - Liacuteneas por pulgadav ATTR_MAXRCDS - Maacuteximo de registros de salida en spoolv ATTR_PAGELEN - Longitud de paacuteginav ATTR_PAGEWIDTH - Anchura de paacuteginav ATTR_MEASMETHOD - Meacutetodo de medidav ATTR_NETWORK - Identificador de redv ATTR_NUMBYTES - Nuacutemero de bytes de lecturaescriturav ATTR_OUTPUTBIN - Bandeja de salidav ATTR_OUTPTY - Prioridad de salidav ATTR_OUTPUT_QUEUE - Nombre del sistema de archivos integrado de la cola de salidav ATTR_OVERFLOW - Nuacutemero de liacutenea de desbordamientov ATTR_MULTIUP - Paacuteginas por carav ATTR_POINTSIZE - Cuerpov ATTR_FIDELITY - Fidelidad de impresioacutenv ATTR_DUPLEX - Imprimir en ambas carasv ATTR_PRTQUALITY - Calidad de impresioacuten

IBM Toolbox para Java 115

v ATTR_PRTTEXT - Texto de impresioacutenv ATTR_PRINTER - Impresorav ATTR_PRTASSIGNED - Impresora asignadav ATTR_PRTDEVTYPE - Tipo de dispositivo de impresorav ATTR_PRINTER_FILE - Nombre del sistema de archivos integrado del archivo de impresorav ATTR_RECLENGTH - Longitud de registrov ATTR_REDUCE - Reducir salidav ATTR_RPLUNPRT - Sustituir caracteres no imprimiblesv ATTR_RPLCHAR - Caraacutecter de sustitucioacutenv ATTR_RESTART - Reiniciar impresioacutenv ATTR_SADDLESTITCH_NUMSTAPLES - Nuacutemero de grapas de cosido por el lomov ATTR_SADDLESTITCH_REF - Referencia de cosido por el lomov ATTR_SAVE - Guardar archivo en spoolv ATTR_SRCDRWR - Bandeja del papelv ATTR_SPOOLFILE - Nombre de archivo en spoolv ATTR_SPLFNUM - Nuacutemero de archivo en spoolv ATTR_SPLFSTATUS - Estado de archivo en spoolv ATTR_SCHEDULE - Planificacioacuten de salida en spoolv ATTR_STARTPAGE - Paacutegina inicialv ATTR_SYSTEM - Sistema en el que se ha creadov ATTR_TIME - Hora de creacioacuten del objetov ATTR_TIME_WTR_BEGAN_FILE - Hora en que el transcriptor empezoacute a procesar el archivo en spoolv ATTR_TIME_WTR_CMPL_FILE - Hora en que el transcriptor terminoacute de procesar el archivo en spoolv ATTR_PAGES - Total de paacuteginasv ATTR_UNITOFMEAS - Unidad de medidav ATTR_USERCMT - Comentario de usuariov ATTR_USERDATA - Datos de usuariov ATTR_USRDEFDATA - Datos definidos por usuariov ATTR_USRDEFFILE - Archivo definido por usuariov ATTR_USRDEFOPT - Opciones definidas por el usuariov ATTR_USER_DEFINED_OBJECT - Nombre del sistema de archivos integrado del objeto definido por

el usuario

Establecer atributos

Pueden establecerse los atributos siguientes para un archivo en spool empleando el meacutetodosetAttributes()v ATTR_ALIGN - Alinear paacuteginav ATTR_BACK_OVERLAY - Nombre del sistema de archivos integrado del preformato reversov ATTR_BKOVL_DWN - Desplazamiento abajo de preformato reversov ATTR_BKOVL_ACR - Desplazamiento a traveacutes de preformato reversov ATTR_COPIES - Copiasv ATTR_ENDPAGE - Paacutegina finalv ATTR_FILESEP - Separadores de archivov ATTR_FORM_DEFINITION - Nombre del sistema de archivos integrado de la definicioacuten de formulariov ATTR_FORMFEED - Alimentacioacuten de papel

116 IBM Toolbox para Java IBM Toolbox para Java

v ATTR_FORMTYPE - Tipo de formulariov ATTR_FRONTSIDE_OVERLAY - Nombre del sistema de archivos integrado del preformato anversov ATTR_FTOVL_ACR - Desplazamiento a traveacutes de preformato anversov ATTR_FTOVL_DWN - Desplazamiento abajo de preformato anversov ATTR_OUTPTY - Prioridad de salidav ATTR_OUTPUT_QUEUE - Nombre del sistema de archivos integrado de la cola de salidav ATTR_MULTIUP - Paacuteginas por carav ATTR_FIDELITY - Fidelidad de impresioacutenv ATTR_DUPLEX - Imprimir en ambas carasv ATTR_PRTQUALITY - Calidad de impresioacutenv ATTR_PRTSEQUENCE - Secuencia de impresioacutenv ATTR_PRINTER - Impresorav ATTR_RESTART - Reiniciar impresioacutenv ATTR_SAVE - Guardar archivo en spoolv ATTR_SCHEDULE - Planificacioacuten de salida en spoolv ATTR_STARTPAGE - Paacutegina inicialv ATTR_USERDATA - Datos de usuariov ATTR_USRDEFOPT - Opciones definidas por el usuariov ATTR_USER_DEFINED_OBJECT - Nombre del sistema de archivos integrado del objeto definido por

el usuario

Atributos de trabajo de transcriptor

Este tema indica los atributos para trabajos de transcriptor

Recuperar atributos

Pueden recuperarse los atributos siguientes para un trabajo de transcriptor empleando el meacutetodogetIntegerAttribute() getStringAttribute() o getFloatAttribute() adecuadov ATTR_WTRJOBNAME - Nombre de trabajo del transcriptorv ATTR_WTRJOBNUM - Nuacutemero de trabajo del transcriptorv ATTR_WTRJOBSTS - Estado del trabajo del transcriptorv ATTR_WTRJOBUSER - Nombre de usuario del trabajo del transcriptor

Establecer atributos

No estaacute permitido establecer atributos para un trabajo de transcriptor

Atributos de objeto de impresioacuten

Este tema indica los atributos disponibles para objetos de impresioacutenv Funciones avanzadas de impresioacutenv Recurso AFPv Alinear formulariosv Alinear paacuteginav Permitir impresioacuten directav Autorizacioacutenv Autorizacioacuten para comprobarv Finalizar transcriptor automaacuteticamente

IBM Toolbox para Java 117

v Almacenamiento auxiliarv Desplazamiento a traveacutes de margen reversov Desplazamiento abajo de margen reversov Preformato reversov Desplazamiento a traveacutes de preformato reversov Desplazamiento abajo de preformato reversov Estado entre copiasv Estado entre archivosv Cambiosv Caracteres por pulgadav Paacutegina de coacutedigosv Nombre de font codificadov Nombre de biblioteca de font codificadov Caraacutecter de controlv Convertir datos de liacuteneav Copiasv Copias dejadas para producirv Grapa en esquinav Paacutegina actualv Formato de datosv Cola de datosv Fecha de apertura de archivov Fecha de finalizacioacuten del trabajo de creacioacuten de archivo en spoolv Fecha en que el transcriptor empezoacute a procesar el archivo en spoolv Fecha en que el transcriptor terminoacute de procesar el archivo en spoolv Datos DBCS especificados por usuariov Caracteres de extensioacuten DBCSv Rotacioacuten de caracteres DBCSv Caracteres DBCS por pulgadav Espaciado DBCS SOSIv Diferir escriturav Grados de rotacioacuten de paacuteginav Suprimir archivo tras enviacuteov Opcioacuten de destinov Tipo de destinov Clase de dispositivov Modelo de dispositivov Estado de dispositivov Tipo de dispositivov Visualizar cualquier archivov Bandeja de separadoresv Nuacutemero de grapas de ligadura de bordesv Referencia de ligadura de bordesv Desplazamiento de referencia de ligadura de bordesv Estado pendiente de finalizacioacuten

118 IBM Toolbox para Java IBM Toolbox para Java

v Paacutegina finalv Origen de sobresv Separadores de archivov Acomodar registrosv Identificador de fontv Definicioacuten de formulariov Alimentacioacuten de papelv Tipo de formulariov Opcioacuten de mensaje de tipo de formulariov Desplazamiento a traveacutes de margen anversov Desplazamiento abajo de margen anversov Preformato anversov Desplazamiento a traveacutes de preformato anversov Desplazamiento abajo de preformato anversov Juego de caracteres graacuteficosv Alineacioacuten de hardwarev Estado de retenidov Retener archivo en spoolv Estado pendiente de retencioacutenv Configuracioacuten de la imagenv Inicializar el transcriptorv Direccioacuten Internetv Atributos IPP - juego de caracteresv ID de trabajo IPPv Nombre de trabajo IPPv NL de nombre de trabajo IPPv Nombre de usuario emisor de trabajo IPPv NL de nombre de usuario emisor de trabajo IPPv Nombre de impresora IPPv Nombre de trabajov Nuacutemero de trabajov Separadores de trabajov Sistema de trabajov Usuario de trabajov Uacuteltima paacutegina impresav Longitud de paacuteginav Nombre de bibliotecav Liacuteneas por pulgadav Interlineadov Tipo y modelo del fabricantev Maacuteximo de trabajos por lista de clientesv Maacuteximo de registros de salida en spoolv Meacutetodo de medidav Ayuda para mensajesv ID de mensaje

IBM Toolbox para Java 119

v Cola de mensajesv Respuesta a mensajev Texto de mensajev Tipo de mensajev Gravedad de mensajev Posibilidad de respuesta a varios elementosv Identificador de redv Atributos de objeto de servidor de impresioacuten de redv Nuacutemero de bytes del archivo en spoolv Nuacutemero de bytes de lecturaescriturav Nuacutemero de archivosv Nuacutemero de transcriptores iniciados para la colav Atributo de objeto ampliadov Estado de en cola de trabajosv Mandatos de tiempo de aperturav Controlado por el operadorv Orden de archivos en colav Bandeja de salidav Prioridad de salidav Cola de salidav Estado de la cola de salidav Estado globalv Nuacutemero de liacutenea de desbordamientov Una paacutegina cada vezv Nuacutemero de paacuteginas estimadov Definicioacuten de paacuteginav Nuacutemero de paacuteginav Paacuteginas por carav Cargador de papel 1v Cargador de papel 2v Densidad de pelv Cuerpov Fidelidad de impresioacutenv Imprimir en ambas carasv Calidad de impresioacutenv Secuencia de impresioacutenv Texto de impresioacutenv Impresorav Impresora asignadav Tipo de dispositivo de impresorav Archivo de impresorav Cola de impresorav Color de informacioacuten de publicacioacuten soportadov Paacuteginas por minuto de informacioacuten de publicacioacuten (color)v Paacuteginas por minuto de informacioacuten de publicacioacuten (monocromo)

120 IBM Toolbox para Java IBM Toolbox para Java

v Soporte duacuteplex de informacioacuten de publicacioacutenv Ubicacioacuten de informacioacuten de publicacioacutenv Nombre de ubicacioacuten remotav Longitud de registrov Reducir salidav Sistema remotov Sustituir caracteres no imprimiblesv Caraacutecter de sustitucioacutenv Reiniciar impresioacutenv Nuacutemero de grapas de cosido por el lomov Referencia de cosido por el lomov Guardar archivo en spoolv Desplazamiento de buacutesquedav Origen de buacutesquedav Prioridad de enviacuteov Paacutegina de separacioacutenv Bandeja del papelv SCS en spoolv Poner los datos en spoolv Meacutetodo de autenticacioacuten de creacioacuten de archivo en spoolv Meacutetodo de seguridad de creacioacuten de archivo en spoolv Nombre de archivo en spoolv Nuacutemero de archivo en spoolv Estado de archivo en spoolv Planificacioacuten de salida en spoolv Iniciado por usuariov Paacutegina inicialv Sistema en el que se ha creadov Texto descriptivov Hora de apertura de archivov Hora de finalizacioacuten del trabajo de creacioacuten de archivo en spoolv Hora en que el transcriptor empezoacute a procesar el archivo en spoolv Hora en que el transcriptor terminoacute de procesar el archivo en spoolv Total de paacuteginasv Transformar SCS en ASCIIv Unidad de medidav Comentario de usuariov Datos de usuariov Datos definidos por usuariov Archivo definido por usuariov Objeto definido por usuariov Opciones definidas por el usuariov Datos de programa controlador de usuariov Programa controlador de usuariov ID de usuario

IBM Toolbox para Java 121

v Direccioacuten de ID de usuariov Programa de transformacioacuten de usuariov Fidelidad de visualizacioacutenv Clase VMMVSv Estado de en espera de datosv Estado de en espera de dispositivov Estado de en espera de mensajev Cuaacutendo finalizar transcriptor automaacuteticamentev Cuaacutendo finalizar transcriptorv Cuaacutendo retener archivov Anchura de paacuteginav Objeto de personalizacioacuten de estacioacuten de trabajov Nombre de trabajo del transcriptorv Nuacutemero de trabajo del transcriptorv Estado del trabajo del transcriptorv Nombre de usuario del trabajo del transcriptorv Transcriptor iniciadov Paacutegina inicial de transcriptorv Estado de transcribiendov CCSID NPSv Nivel de NPS

Funciones avanzadas de impresioacuten

ID ATTR_AFP

Tipo String

DescripcioacutenIndica si este archivo en spool utiliza recursos de AFP externos al archivo en spool Los valoresvaacutelidos son YES y NO

Recurso AFP

ID ATTR_AFP_RESOURCE

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del recurso de AFP (funciones avanzadas deimpresioacuten) externo El formato de la viacutea de acceso del sistema de archivos integrado esQSYSLIBbibliotecaLIBrecursotipo donde biblioteca es la biblioteca que contiene el recursorecurso es el nombre del recurso y tipo es el tipo de recurso Los valores vaacutelidos de tipo sonFNTRSC FORMDF OVL PAGSEG y PAGDFN

Alinear formularios

ID ATTR_ALIGNFORMS

Tipo String

DescripcioacutenMomento en que se enviaraacute un mensaje de alineacioacuten de formularios Los valores vaacutelidos sonWTR FILE FIRST

122 IBM Toolbox para Java IBM Toolbox para Java

Alinear paacutegina

ID ATTR_ALIGN

Tipo String

DescripcioacutenIndica si se enviacutea un mensaje de alineacioacuten de formularios antes de imprimir este archivo enspool Los valores vaacutelidos son YES NO

Permitir impresioacuten directa

ID ATTR_ALWDRTPRT

Tipo String

DescripcioacutenIndica si el transcriptor de impresora permite que se asigne la impresora a un trabajo queimprime directamente en una impresora Los valores vaacutelidos son YES NO

Autorizacioacuten

ID ATTR_AUT

Tipo String

DescripcioacutenEspecifica la autorizacioacuten que se da a los usuarios que no tienen una autorizacioacuten especiacutefica parala cola de salida Los valores vaacutelidos son USE ALL CHANGE EXCLUDE LIBCRTAUT

Autorizacioacuten para comprobar

ID ATTR_AUTCHK

Tipo String

DescripcioacutenIndica queacute tipo de autorizaciones para la cola de salida permiten al usuario controlar todos losarchivos de la cola de salida Los valores vaacutelidos son OWNER DTAAUT

Finalizar transcriptor automaacuteticamente

ID ATTR_AUTOEND

Tipo String

DescripcioacutenEspecifica si el transcriptor debe finalizarse automaacuteticamente Los valores vaacutelidos son NO YES

Almacenamiento auxiliar

ID ATTR_AUX_POOL

Tipo Integer

DescripcioacutenEspecifica el nuacutemero de la agrupacioacuten de almacenamiento auxiliar (ASP) en la que se almacena elarchivo en spool Los valores posibles sonv 1 ASP del sistemav 2-32 Una de las ASP del usuario

Desplazamiento a traveacutes de margen reverso

ID ATTR_BACKMGN_ACR

IBM Toolbox para Java 123

Tipo Float

DescripcioacutenEspecifica la distancia respecto a la parte izquierda de la paacutegina donde se inicia la impresioacuten enel reverso de una hoja de papel El valor especial FRONTMGN se codificaraacute como -1

Desplazamiento abajo de margen reverso

ID ATTR_BACKMGN_DWN

Tipo Float

DescripcioacutenEspecifica la distancia respecto a la parte superior de la paacutegina donde se inicia la impresioacuten en elreverso de una hoja de papel El valor especial FRONTMGN se codificaraacute como -1

Preformato reverso

ID ATTR_BACK_OVERLAY

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del preformato reverso o un valor especial Si elvalor es una viacutea de acceso del sistema de archivos integrado tendraacute el formatoQSYSLIBbibliotecaLIBpreformatoOVL donde biblioteca es la biblioteca del recurso ypreformato es el nombre del preformato Los valores especiales vaacutelidos son FRONTOVL

Desplazamiento a traveacutes de preformato reverso

ID ATTR_BKOVL_ACR

Tipo Float

DescripcioacutenDesplazamiento horizontal desde el punto de origen en que se imprime el preformato

Desplazamiento abajo de preformato reverso

ID ATTR_BKOVL_DWN

Tipo Float

DescripcioacutenDesplazamiento vertical desde el punto de origen en que se imprime el preformato

Estado entre copias

ID ATTR_BTWNCPYSTS

Tipo String

DescripcioacutenIndica si el transcriptor se encuentra entre copias de un archivo en spool de varias copias Losvalores devueltos son YES o NO

Estado entre archivos

ID ATTR_BTWNFILESTS

Tipo String

DescripcioacutenIndica si el transcriptor se encuentra entre archivos Los valores devueltos son YES o NO

124 IBM Toolbox para Java IBM Toolbox para Java

Cambios

ID ATTR_CHANGES

Tipo String

DescripcioacutenMomento en que entran en vigor los cambios pendientes Los valores vaacutelidos son NORDYFFILEEND o un blanco para indicar que no hay cambios pendientes en el transcriptor

Caracteres por pulgada

ID ATTR_CPI

Tipo Float

DescripcioacutenNuacutemero de caracteres por pulgada horizontal

Paacutegina de coacutedigos

ID ATTR_CODEPAGE

Tipo String

DescripcioacutenCorrelacioacuten de caracteres graacuteficos con puntos de coacutedigo para este archivo en spool Si el campode juego de caracteres graacuteficos contiene un valor especial este campo puede contener un cero (0)

Nombre de font codificado

ID ATTR_CODEDFNT

Tipo String

DescripcioacutenNombre del font codificado Un font codificado es un recurso de AFP que estaacute formado por unjuego de caracteres y una paacutegina de coacutedigos Los valores especiales son FNTCHRSET

Nombre de biblioteca de font codificado

ID ATTR_CODEDFNTLIB

Tipo String

DescripcioacutenNombre de la biblioteca que contiene el font codificado Este campo puede contener blancos si elcampo de nombre de font codificado tiene un valor especial

Caraacutecter de control

ID ATTR_CONTROLCHAR

Tipo String

DescripcioacutenIndica si este archivo utiliza el caraacutecter de control de impresora Estaacutendar nacional americano Losvalores posibles son NONE para que no se pase ninguacuten caraacutecter de control de impresioacuten en losdatos que se imprimen o FCFC para que el primer caraacutecter de cada registro sea un caraacutecter decontrol de impresora Estaacutendar nacional americano

Convertir datos de liacutenea

ID ATTR_CONVERT_LINEDATA

Tipo String

IBM Toolbox para Java 125

DescripcioacutenIndica si los datos de liacutenea se convierten en AFPDS antes de escribirse en el spool Los valoresposibles son NO y YES

Copias

ID ATTR_COPIES

Tipo Integer

DescripcioacutenNuacutemero total de copias que se generaraacuten para este archivo en spool

Copias dejadas para producir

ID ATTR_COPIESLEFT

Tipo Integer

DescripcioacutenNuacutemero restante de copias que se generaraacuten para este archivo en spool

Grapa en esquina

ID ATTR_CORNER_STAPLE

Tipo String

DescripcioacutenEsquina de referencia que se utilizaraacute para grapar una esquina Las grapas se colocan en laesquina de referencia del medio Los valores vaacutelidos son NONE DEVD BOTRIGHTTOPRIGHT TOPLEFT y BOTLEFT

Paacutegina actual

ID ATTR_CURPAGE

Tipo Integer

DescripcioacutenPaacutegina actual que escribe el trabajo del transcriptor

Formato de datos

ID ATTR_DATAFORMAT

Tipo String

DescripcioacutenFormato de datos Los valores vaacutelidos son RCDDATA ALLDATA

Cola de datos

ID ATTR_DATA_QUEUE

Tipo String

DescripcioacutenEspecifica la viacutea de acceso del sistema de archivos integrado de la cola de datos que estaacute asociadaa la cola de salida o NONE si no hay ninguna cola de datos asociada a la cola de salida Elformato de la viacutea de acceso del sistema de archivos integrado es QSYSLIBbibliotecaLIBcoladatosDTAQ donde biblioteca es la biblioteca que contiene la cola de datos y coladatos es elnombre de la cola de datos

126 IBM Toolbox para Java IBM Toolbox para Java

Fecha de apertura de archivo

ID ATTR_DATE

Tipo String

DescripcioacutenEn el caso de los archivos en spool fecha en que se abrioacute el archivo en spool En el caso de losrecursos de AFP fecha de la uacuteltima modificacioacuten del objeto La fecha se codifica en una serie decaracteres con el formato siguiente S AA MM DD

Fecha de finalizacioacuten del trabajo de creacioacuten de archivo en spool

ID ATTR_DATE_END

Tipo String

DescripcioacutenFecha en la que ha finalizado el trabajo que ha creado el archivo en spool en el sistema Si elcampo de fecha de inicio de creacioacuten del archivo en spool estaacute establecido en ALL este campodebe establecerse en blancos Si se ha especificado una fecha para el campo de inicio de creacioacutendel archivo en spool este campo debe establecerse en una fecha vaacutelida La fecha debe tener elformato SAAMMDD o ser uno de los valores especiales siguientesv LAST deben devolverse todos los archivos en spool con una fecha y una hora de creacioacuten

igual o posterior a la fecha de inicio de creacioacuten de archivo en spoolv Fecha deben devolverse todos los archivos en spool con una fecha y una hora de creacioacuten

igual o posterior a la fecha y la hora de inicio de creacioacuten de archivo en spool e igual o inferiora la fecha y la hora de finalizacioacuten de creacioacuten de archivo en spool

El formato de fecha SAAMMDD se define del modo siguientev S es el siglo donde 0 indica los antildeos 19xx y 1 indica los antildeos 20xxv AA es el antildeov MM es el mesv DD es el diacutea

Fecha en que el transcriptor empezoacute a procesar el archivo en spool

ID ATTR_DATE_WTR_BEGAN_FILE

Tipo String

DescripcioacutenIndica la fecha en que el transcriptor empezoacute a procesar este archivo en spool La fecha secodifica en una serie de caracteres con el formato siguiente S AA MM DD

Fecha en que el transcriptor terminoacute de procesar el archivo en spool

ID ATTR_DATE_WTR_CMPL_FILE

Tipo String

DescripcioacutenIndica la fecha en que el transcriptor terminoacute de procesar este archivo en spool La fecha secodifica en una serie de caracteres con el formato siguiente S AA MM DD

Datos DBCS especificados por usuario

ID ATTR_DBCSDATA

Tipo String

IBM Toolbox para Java 127

DescripcioacutenIndica si el archivo en spool contiene datos DBCS (juego de caracteres de doble byte) Los valoresvaacutelidos son NO y YES

Caracteres de extensioacuten DBCS

ID ATTR_DBCSEXTENSN

Tipo String

DescripcioacutenIndica si el sistema debe procesar los caracteres de extensioacuten DBCS Los valores vaacutelidos son NOy YES

Rotacioacuten de caracteres DBCS

ID ATTR_DBCAROTATE

Tipo String

DescripcioacutenIndica si los caracteres DBCS se rotan 90 grados en el sentido contrario a las agujas del reloj antesde la impresioacuten Los valores vaacutelidos son NO y YES

Caracteres DBCS por pulgada

ID ATTR_DBCSCPI

Tipo Integer

DescripcioacutenNuacutemero de caracteres de doble byte que se imprimiraacuten por pulgada Los valores vaacutelidos son -1-2 5 6 y 10 El valor CPI se codifica como -1 El valor CONDENSED se codifica como -2

Espaciado DBCS SOSI

ID ATTR_DBCSSISO

Tipo String

DescripcioacutenDetermina la presentacioacuten de los caracteres de desplazamiento a teclado ideograacutefico y dedesplazamiento a teclado estaacutendar al imprimirse Los valores vaacutelidos son NO YES y RIGHT

Diferir escritura

ID ATTR_DFR_WRITE

Tipo String

DescripcioacutenIndica si los datos se retienen en los almacenamientos intermedios del sistema antes de escribirse

Grados de rotacioacuten de paacutegina

ID ATTR_PAGRTT

Tipo Integer

DescripcioacutenGrado de rotacioacuten del texto en la paacutegina en relacioacuten con la forma en que se carga el formularioen la impresora Los valores vaacutelidos son -1 -2 -3 0 90 180 270 El valor AUTO se codificacomo -1 el valor DEVD se codifica como -2 y el valor COR se codifica como -3

128 IBM Toolbox para Java IBM Toolbox para Java

Suprimir archivo tras enviacuteo

ID ATTR_DELETESPLF

Tipo String

DescripcioacutenIndica si debe suprimirse el archivo en spool despueacutes del enviacuteo Los valores vaacutelidos son NO yYES

Opcioacuten de destino

ID ATTR_DESTOPTION

Tipo String

DescripcioacutenOpcioacuten de destino Una serie de texto que permite al usuario pasar opciones al sistema receptor

Tipo de destino

ID ATTR_DESTINATION

Tipo String

DescripcioacutenTipo de destino Los valores vaacutelidos son OTHER AS400 PSF2

Clase de dispositivo

ID ATTR_DEVCLASS

Tipo String

DescripcioacutenClase de dispositivo

Modelo de dispositivo

ID ATTR_DEVMODEL

Tipo String

DescripcioacutenNuacutemero de modelo del dispositivo

Estado de dispositivo

ID ATTR_DEVSTATUS

Tipo Integer

DescripcioacutenEstado del dispositivo de impresora Los valores vaacutelidos son 0 (desactivado) 10 (pendiente dedesactivacioacuten) 20 (pendiente de activacioacuten) 30 (activado) 40 (pendiente de conexioacuten) 60 (activo)66 (transcriptor activo) 70 (retenido) 75 (apagado) 80 (pendiente de recuperacioacuten) 90(recuperacioacuten cancelada) 100 (anoacutemalo) 106 (transcriptor anoacutemalo) 110 (en servicio) 111(dantildeado) 112 (bloqueado) 113 (desconocido)

Tipo de dispositivo

ID ATTR_DEVTYPE

Tipo String

IBM Toolbox para Java 129

DescripcioacutenTipo de dispositivo

Visualizar cualquier archivo

ID ATTR_DISPLAYANY

Tipo String

DescripcioacutenIndica si los usuarios que tienen autorizacioacuten para leer esta cola de salida pueden visualizar losdatos de salida de cualquier archivo de salida de esta cola o uacutenicamente los datos de sus propiosarchivos Los valores vaacutelidos son YES NO OWNER

Bandeja de separadores

ID ATTR_DRWRSEP

Tipo Integer

DescripcioacutenIdentifica la bandeja de la que se tomaraacuten las paacuteginas de separacioacuten de trabajos y archivos Losvalores vaacutelidos son -1 -2 1 2 3 El valor FILE se codifica como -1 y el valor DEVD se codificacomo -2

Nuacutemero de grapas de ligadura de bordes

ID ATTR_EDGESTITCH_NUMSTAPLES

Tipo Integer

DescripcioacutenNuacutemero de grapas que van a colocarse a lo largo del borde de acabado

Referencia de ligadura de bordes

ID ATTR_EDGESTITCH_REF

Tipo String

DescripcioacutenLugar en que se colocaraacuten una o varias grapas en el medio a lo largo del borde de acabado Losvalores vaacutelidos son NONE DEVD BOTTOM RIGHT TOP y LEFT

Desplazamiento de referencia de ligadura de bordes

ID ATTR_EDGESTITCH_REFOFF

Tipo Float

DescripcioacutenDesplazamiento de la ligadura de bordes desde el borde de referencia hacia el centro del medio

Estado pendiente de finalizacioacuten

ID ATTR_ENDPNDSTS

Tipo String

DescripcioacutenIndica si se ha emitido un mandato Finalizar transcriptor (ENDWTR) para este transcriptor Losvalores posibles son NO (no se ha emitido ninguacuten mandato ENDWTR) IMMED (el transcriptorfinaliza tan pronto como sus almacenamientos intermedios de salida queden vaciacuteos) CTRLD (eltranscriptor finaliza una vez que se imprima la copia actual del archivo en spool) PAGEEND (eltranscriptor finaliza al final de la paacutegina)

130 IBM Toolbox para Java IBM Toolbox para Java

Paacutegina final

ID ATTR_ENDPAGE

Tipo Integer

DescripcioacutenNuacutemero de paacutegina en que finalizaraacute la impresioacuten del archivo en spool Los valores vaacutelidos son 0o el nuacutemero de paacutegina final El valor END se codifica como 0

Origen de sobres

ID ATTR_ENVLP_SOURCE

Tipo String

DescripcioacutenTamantildeo del sobre del origen de sobres Si no se especifica este campo o el valor no es vaacutelido seutilizaraacute el valor especial MFRTYPMDL Los valores vaacutelidos son NONE (no hay ninguacuten origende sobres) MFRTYPMDL (se utiliza el tamantildeo de sobre propuesto por el tipo y modelo delfabricante) MONARCH (3875 x 75 pulgadas) NUMBER9 (3875 x 8875 pulgadas)NUMBER10 (4125 x 95 pulgadas) B5 (176 mm x 250 mm) C5 (162 mm x 229 mm) DL (110mm x 220 mm)

Separadores de archivo

ID ATTR_FILESEP

Tipo Integer

DescripcioacutenNuacutemero de paacuteginas de separacioacuten de archivos que se colocan al principio de cada copia delarchivo en spool Los valores vaacutelidos son -1 o el nuacutemero de separadores El valor FILE secodifica como -1

Acomodar registros

ID ATTR_FOLDREC

Tipo String

DescripcioacutenIndica si los registros que superen la anchura de los formularios de impresora se acomodaraacuten a laliacutenea siguiente Los valores vaacutelidos son YES NO

Identificador de font

ID ATTR_FONTID

Tipo String

DescripcioacutenFont de impresora utilizado Los valores especiales vaacutelidos son CPI y DEVD

Definicioacuten de formulario

ID ATTR_FORM_DEFINITION

Tipo String

DescripcioacutenNombre de viacutea de acceso del sistema de archivos integrado de la definicioacuten de formulario o unvalor especial Si se especifica una viacutea de acceso del sistema de archivos integrado el formato es

IBM Toolbox para Java 131

QSYSLIBbibliotecaLIBdefformFORMDF donde biblioteca es la biblioteca de la definicioacuten deformulario y defform es el nombre de la definicioacuten de formulario Los valores especiales vaacutelidosson NONE INLINE INLINED y DEVD

Alimentacioacuten de papel

ID ATTR_FORMFEED

Tipo String

DescripcioacutenForma en que se produce la alimentacioacuten de papel en la impresora Los valores vaacutelidos sonCONT CUT AUTOCUT DEVD

Tipo de formulario

ID ATTR_FORMTYPE

Tipo String

DescripcioacutenTipo de formulario que se cargaraacute en la impresora para imprimir este archivo en spool

Opcioacuten de mensaje de tipo de formulario

ID ATTR_FORMTYPEMSG

Tipo String

DescripcioacutenOpcioacuten de mensaje para enviar un mensaje a la cola de mensajes del transcriptor cuando setermine el tipo de formulario actual Los valores vaacutelidos son MSG NOMSG INFOMSGINQMSG

Desplazamiento a traveacutes de margen anverso

ID ATTR_FTMGN_ACR

Tipo Float

DescripcioacutenEspecifica la distancia respecto a la parte izquierda de la paacutegina donde se inicia la impresioacuten enel anverso de una hoja de papel El valor especial DEVD se codifica como -2

Desplazamiento abajo de margen anverso

ID ATTR_FTMGN_DWN

Tipo Float

DescripcioacutenEspecifica la distancia respecto a la parte superior de la paacutegina donde se inicia la impresioacuten en elanverso de una hoja de papel El valor especial DEVD se codifica como -2

Preformato anverso

ID ATTR_FRONT_OVERLAY

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del preformato anverso El formato de la viacutea deacceso del sistema de archivos integrado es QSYSLIBbibliotecaLIBpreformatoOVL dondebiblioteca es la biblioteca del recurso y preformato es el nombre del preformato La serie NONEse utiliza para indicar que no se especifica ninguacuten preformato anverso

132 IBM Toolbox para Java IBM Toolbox para Java

Desplazamiento a traveacutes de preformato anverso

ID ATTR_FTOVL_ACR

Tipo Float

DescripcioacutenDesplazamiento horizontal desde el punto de origen en que se imprime el preformato

Desplazamiento abajo de preformato anverso

ID ATTR_FTOVL_DWN

Tipo Float

DescripcioacutenDesplazamiento vertical desde el punto de origen en que se imprime el preformato

Juego de caracteres graacuteficos

ID ATTR_CHAR_ID

Tipo String

DescripcioacutenJuego de caracteres graacuteficos que se utilizaraacute al imprimir este archivo Los valores especialesvaacutelidos son DEVD SYSVAL y JOBCCSID

Alineacioacuten de hardware

ID ATTR_JUSTIFY

Tipo Integer

DescripcioacutenPorcentaje de alineacioacuten a la derecha de la salida Los valores vaacutelidos son 0 50 100

Estado de retenido

ID ATTR_HELDSTS

Tipo String

DescripcioacutenIndica si el transcriptor estaacute retenido Los valores vaacutelidos son YES NO

Retener archivo en spool

ID ATTR_HOLD

Tipo String

DescripcioacutenIndica si se retiene el archivo en spool Los valores vaacutelidos son YES NO

Estado pendiente de retencioacuten

ID ATTR_HOLDPNDSTS

Tipo String

DescripcioacutenIndica si se ha emitido un mandato Retener transcriptor (HLDWTR) para este transcriptor Losvalores posibles son NO (no se ha emitido ninguacuten mandato HLDWTR) IMMED (el transcriptorqueda retenido cuando sus almacenamientos intermedios de salida queden vaciacuteos) CTRLD (el

IBM Toolbox para Java 133

transcriptor queda retenido una vez que se imprima la copia actual del archivo en spool)PAGEEND (el transcriptor queda retenido al final de la paacutegina)

Configuracioacuten de la imagen

ID ATTR_IMGCFG

Tipo String

DescripcioacutenServicios de transformacioacuten para diversos formatos de corriente de datos de impresioacuten e imagen

Inicializar el transcriptor

ID ATTR_WTRINIT

Tipo String

DescripcioacutenEl usuario puede especificar cuaacutendo debe inicializarse el dispositivo de impresora Los valoresvaacutelidos son WTR FIRST ALL

Direccioacuten Internet

ID ATTR_INTERNETADDR

Tipo String

DescripcioacutenDireccioacuten Internet del sistema receptor

Atributos IPP - juego de caracteres

ID ATTR_IPP_ATTR_CHARSET

Tipo String

DescripcioacutenIndica el juego de caracteres (juego de caracteres codificado y meacutetodo de codificacioacuten) de losatributos del archivo en spool especificados por IPP

ID de trabajo IPP

ID ATTR_IPP_JOB_ID

Tipo Integer

DescripcioacutenID de trabajo IPP relativo a la impresora IPP que ha creado el trabajo

Nombre de trabajo IPP

ID ATTR_IPP_ATR_CHARSET

Tipo String

DescripcioacutenNombre del trabajo faacutecilmente reconocible por el usuario

NL de nombre de trabajo IPP

ID ATTR_IPP_JOB_NAME_NL

Tipo String

134 IBM Toolbox para Java IBM Toolbox para Java

DescripcioacutenIdioma natural del nombre de trabajo

Nombre de usuario emisor de trabajo IPP

ID ATTR_IPP_JOB_ORIGUSER

Tipo String

DescripcioacutenIdentifica el usuario final que emitioacute este trabajo IPP

NL de nombre de usuario emisor de trabajo IPP

ID ATTR_IPP_JOB_ORIGUSER_NL

Tipo String

DescripcioacutenIdentifica el idioma natural del nombre de usuario que originoacute el trabajo

Nombre de impresora IPP

ID ATTR_IPP_PRINTER_NAME

Tipo String

DescripcioacutenIdentifica la impresora IPP que creoacute este trabajo

Nombre de trabajo

ID ATTR_JOBNAME

Tipo String

DescripcioacutenNombre del trabajo que creoacute el archivo en spool

Nuacutemero de trabajo

ID ATTR_JOBNUMBER

Tipo String

DescripcioacutenNuacutemero del trabajo que creoacute el archivo en spool

Separadores de trabajo

ID ATTR_JOBSEPRATR

Tipo Integer

DescripcioacutenNuacutemero de separadores de trabajo que se colocaraacuten al principio de la salida para cada trabajoque tenga archivos en spool en esta cola de salida Los valores vaacutelidos son -2 0-9 El valor MSGse codifica como -2 Los separadores de trabajo se especifican cuando se crea la cola de salida

Sistema de trabajo

ID ATTR_JOBSYSTEM

Tipo String

IBM Toolbox para Java 135

DescripcioacutenEl sistema en el que se ejecutaba el trabajo que ha creado el archivo en spool

Usuario de trabajo

ID ATTR_JOBUSER

Tipo String

DescripcioacutenNombre del usuario que creoacute el archivo en spool

Uacuteltima paacutegina impresa

ID ATTR_LASTPAGE

Tipo Integer

DescripcioacutenEl nuacutemero de la uacuteltima paacutegina impresa es el archivo si la impresioacuten finalizoacute antes de que seterminara de procesar el trabajo

Longitud de paacutegina

ID ATTR_PAGELEN

Tipo Float

DescripcioacutenLongitud de una paacutegina Las unidades de medida se especifican en el atributo de meacutetodo demedida

Nombre de biblioteca

ID ATTR_LIBRARY

Tipo String

DescripcioacutenNombre de la biblioteca

Liacuteneas por pulgada

ID ATTR_LPI

Tipo Float

DescripcioacutenNuacutemero de liacuteneas por pulgada vertical del archivo en spool

Interlineado

ID ATTR_LINESPACING

Tipo String

DescripcioacutenIndica coacutemo se espacian los registros de datos de liacutenea de un archivo al imprimirse Lainformacioacuten se devuelve uacutenicamente para los archivos de tipos de dispositivo de impresoraLINE y AFPDSLINE Los valores vaacutelidos son SINGLE DOUBLE TRIPLE o CTLCHAR

Tipo y modelo del fabricante

ID ATTR_MFGTYPE

Tipo String

136 IBM Toolbox para Java IBM Toolbox para Java

DescripcioacutenEspecifica el fabricante el tipo y el modelo al transformar los datos de impresioacuten de SCS enASCII

Maacuteximo de trabajos por lista de clientes

ID ATTR_MAX_JOBS_PER_CLIENT

Tipo Integer

DescripcioacutenEl cliente lo proporciona para indicar el tamantildeo maacuteximo de la cola de impresora

Maacuteximo de registros de salida en spool

ID ATTR_MAXRECORDS

Tipo Integer

DescripcioacutenNuacutemero maacuteximo de registros permitidos en este archivo en el momento de abrirse El valorNOMAX se codifica como 0

Meacutetodo de medida

ID ATTR_MEASMETHOD

Tipo String

DescripcioacutenMeacutetodo de medida utilizado para los atributos de longitud de paacutegina y anchura de paacutegina Losvalores vaacutelidos son ROWCOL UOM

Ayuda para mensajes

ID ATTR_MSGHELP

Tipo char()

DescripcioacutenLa ayuda para mensajes que a veces se denomina texto de segundo nivel puede devolversemediante una peticioacuten de recuperacioacuten de mensaje El sistema limita la longitud a 3000 caracteres(la versioacuten en ingleacutes debe ser un 30 inferior para dar cabida a la traduccioacuten)

ID de mensaje

ID ATTR_MESSAGEID

Tipo String

DescripcioacutenID de mensaje

Cola de mensajes

ID ATTR_MESSAGE_QUEUE

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado de la cola de mensajes que el transcriptor empleapara los mensajes operativos El formato de la viacutea de acceso del sistema de archivos integrado esQSYSLIBbibliotecaLIBcolamensajesMSGQ donde biblioteca es la biblioteca que contiene lacola de mensajes y colamensajes es el nombre de la cola de mensajes

IBM Toolbox para Java 137

Respuesta a mensaje

ID ATTR_MSGREPLY

Tipo String

DescripcioacutenRespuesta al mensaje Es una serie de texto que debe proporcionar el cliente que responde a unmensaje de tipo consulta En el caso de un mensaje recuperado el servidor devuelve el valor delatributo con la respuesta predeterminada que puede utilizar el cliente El sistema limita lalongitud a 132 caracteres Debe terminar en nulo debido a la longitud variable

Texto de mensaje

ID ATTR_MSGTEXT

Tipo String

DescripcioacutenEl texto del mensaje que a veces se denomina texto de primer nivel puede devolverse medianteuna peticioacuten de recuperacioacuten de mensaje El sistema limita la longitud a 132 caracteres

Tipo de mensaje

ID ATTR_MSGTYPE

Tipo String

DescripcioacutenEl tipo de mensaje es una codificacioacuten EBCDIC de 2 diacutegitos Dos tipos de mensajes indican si sepuede responder a un mensaje recuperado 04 Los mensajes informativos proporcionaninformacioacuten sin solicitar una respuesta (pueden requerir una accioacuten correctiva) 05 Los mensajesde consulta proporcionan informacioacuten y solicitan una respuesta

Gravedad de mensaje

ID ATTR_MSGSEV

Tipo Integer

DescripcioacutenGravedad del mensaje Los valores abarcan del 00 al 99 Cuanto mayor es el valor mayor es lagravedad o importancia de la condicioacuten

Posibilidad de respuesta a varios elementos

ID ATTR_MULTI_ITEM_REPLY

Tipo String

DescripcioacutenSi el cliente establece el valor de este atributo en YES el rendimiento de las operaciones de listade archivo en spool puede mejorar en gran medida El valor predeterminado es NO

Identificador de red

ID ATTR_NETWORK

Tipo String

DescripcioacutenIdentificador de red del sistema en que se creoacute el archivo

138 IBM Toolbox para Java IBM Toolbox para Java

Nuacutemero de bytes del archivo en spool

ID ATTR_NUMBYTES_SPLF

Tipo Integer

DescripcioacutenNuacutemero total de bytes disponibles en la corriente o en el archivo en spool El valor indica elnuacutemero de bytes ANTES de que tenga lugar cualquier transformacioacuten de los datos Para darcabida a los archivos con un tamantildeo superior a 231 - 1 bytes este valor se escala el usuariodebe multiplicar el valor por 10 K para obtener el nuacutemero real de bytes Este atributo no esvaacutelido para los archivos en spool que se visualizan en la modalidad de una paacutegina cada vez

Nuacutemero de bytes de lecturaescritura

ID ATTR_NUMBYTES

Tipo Integer

DescripcioacutenNuacutemero de bytes de una operacioacuten de lectura o de escritura La accioacuten del objeto determinacoacutemo interpretar este atributo

Nuacutemero de archivos

ID ATTR_NUMFILES

Tipo Integer

DescripcioacutenNuacutemero de archivos en spool que existen en la cola de salida

Nuacutemero de transcriptores iniciados para la cola

ID ATTR_NUMWRITERS

Tipo Integer

DescripcioacutenNuacutemero de trabajos de transcriptor iniciados para la cola de salida

Atributo de objeto ampliado

ID ATTR_OBJEXTATTR

Tipo String

DescripcioacutenAtributo ampliado utilizado por algunos objetos como los recursos de font Este valor sevisualiza mediante los mandatos WRKOBJ y DSPOBJD en el servidor El tiacutetulo de una pantalla deservidor puede indicar uacutenicamente Atributo En el caso de los tipos de objeto de recursos defont por ejemplo los valores comunes son CDEPAG CDEFNT y FNTCHRSET

Estado de en cola de trabajos

ID ATTR_ONJOBQSTS

Tipo String

DescripcioacutenIndica si el transcriptor estaacute en una cola de trabajos y por consiguiente no se encuentraactualmente en ejecucioacuten Los valores posibles son YES NO

IBM Toolbox para Java 139

Mandatos de tiempo de apertura

ID ATTR_OPENCMDS

Tipo String

DescripcioacutenIndica si el usuario desea que se inserten mandatos de tiempo de apertura de SCS en la corrientede datos antes de poner los datos de archivo en spool Los valores vaacutelidos son YES NO

Controlado por el operador

ID ATTR_OPCNTRL

Tipo String

DescripcioacutenIndica si los usuarios con autorizacioacuten de control de trabajos tienen permiso para gestionar ocontrolar los archivos en spool de esta cola Los valores vaacutelidos son YES NO

Orden de archivos en cola

ID ATTR_ORDER

Tipo String

DescripcioacutenOrden de los archivos en spool en esta cola de salida Los valores vaacutelidos son FIFO JOBNBR

Bandeja de salida

ID ATTR_OUTPUTBIN

Tipo Integer

DescripcioacutenBandeja de salida que utiliza la impresora para la salida impresa Los valores abarcan del 1 al65535 El valor DEVD se codifica como 0

Prioridad de salida

ID ATTR_OUTPTY

Tipo String

DescripcioacutenPrioridad del archivo en spool La prioridad abarca del 1 (superior) al 9 (inferior) Los valoresvaacutelidos son 0-9 donde 0 representa JOB

Cola de salida

ID ATTR_OUTPUT_QUEUE

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado de la cola de salida El formato de la viacutea deacceso del sistema de archivos integrado es QSYSLIBbibliotecaLIBcolaOUTQ dondebiblioteca es la biblioteca que contiene la cola de salida y cola es el nombre de la cola de salida

Estado de la cola de salida

ID ATTR_OUTQSTS

Tipo String

140 IBM Toolbox para Java IBM Toolbox para Java

DescripcioacutenEstado de la cola de salida Los valores vaacutelidos son RELEASED HELD

Estado global

ID ATTR_OVERALLSTS

Tipo Integer

DescripcioacutenEstado global de la impresora loacutegica El teacutermino impresora loacutegica hace referencia al dispositivode impresora la cola de salida y el trabajo de transcriptor Los valores vaacutelidos son 1 (nodisponible) 2 (apagada o todaviacutea no disponible) 3 (detenida) 4 (en espera de mensaje) 5(retenida) 6 (pendiente de detencioacuten ) 7 (pendiente de retencioacuten) 8 (en espera de impresora) 9(en espera de inicio) 10 (imprimiendo) 11 (en espera de cola de salida) 12 (pendiente deconexioacuten) 13 (apagada) 14 (inutilizable) 15 (en servicio) 999 (desconocida)

Nuacutemero de liacutenea de desbordamiento

ID ATTR_OVERFLOW

Tipo Integer

DescripcioacutenUacuteltima liacutenea que se imprimiraacute antes de que los datos que se imprimen se desborden a la paacuteginasiguiente

Una paacutegina cada vez

ID ATTR_PAGE_AT_A_TIME

Tipo String

DescripcioacutenEspecifica si el archivo en spool debe abrirse en la modalidad de una paacutegina cada vez Losvalores vaacutelidos son YES y NO

Nuacutemero de paacuteginas estimado

ID ATTR_PAGES_EST

Tipo String

DescripcioacutenEspecifica si el nuacutemero de paacuteginas es estimado en lugar de real Los valores vaacutelidos son YES yNO

Definicioacuten de paacutegina

ID ATTR_PAGE_DEFINITION

Tipo String

DescripcioacutenNombre de viacutea de acceso del sistema de archivos integrado de la definicioacuten de paacutegina o un valorespecial Si se especifica una viacutea de acceso del sistema de archivos integrado el formato esQSYSLIBbibliotecaLIBdefpaacutegPAGDFN donde biblioteca es la biblioteca de la definicioacuten depaacutegina y defpaacuteg es el nombre de la definicioacuten de paacutegina Los valores especiales vaacutelidos sonNONE

Nuacutemero de paacutegina

ID ATTR_PAGENUMBER

IBM Toolbox para Java 141

Tipo Integer

DescripcioacutenNuacutemero de la paacutegina que se leeraacute de un archivo en spool abierto en la modalidad de una paacuteginacada vez

Paacuteginas por cara

ID ATTR_MULTIUP

Tipo Integer

DescripcioacutenNuacutemero de paacuteginas loacutegicas que se imprimen en cada cara de cada paacutegina fiacutesica al imprimirse elarchivo Los valores vaacutelidos son 1 2 4

Cargador de papel 1

ID ATTR_PAPER_SOURCE_1

Tipo String

DescripcioacutenTamantildeo del papel del cargador de papel 1 Si no se especifica este campo o el valor no es vaacutelidose utilizaraacute el valor especial MFRTYPMDL Los valores vaacutelidos son NONE (no hay ninguacutencargador de papel 1 o el papel se alimenta de forma manual en la impresora) MFRTYPMDL (seutiliza el tamantildeo de papel propuesto por el tipo y modelo del fabricante) LETTER (85 x 110pulgadas) LEGAL (85 x 140 pulgadas) EXECUTIVE (725 x 105 pulgadas) LEDGER (170 x110 pulgadas) A3 (297 mm x 420 mm) A4 (210 mm x 297 mm) A5 (148 mm x 210 mm) B4(257 mm x 364 mm) B5 (182 mm x 257 mm) CONT80 (80 pulgadas de ancho con papelcontinuo) CONT132 (132 pulgadas de ancho con papel continuo)

Cargador de papel 2

ID ATTR_PAPER_SOURCE_2

Tipo String

DescripcioacutenTamantildeo del papel del cargador de papel 2 Si no se especifica este campo o el valor no es vaacutelidose utilizaraacute el valor especial MFRTYPMDL Los valores vaacutelidos son NONE (no hay ninguacutencargador de papel 2 o el papel se alimenta de forma manual en la impresora) MFRTYPMDL (seutiliza el tamantildeo de papel propuesto por el tipo y modelo del fabricante) LETTER (85 x 110pulgadas) LEGAL (85 x 140 pulgadas) EXECUTIVE (725 x 105 pulgadas) LEDGER (170 x110 pulgadas) A3 (297 mm x 420 mm) A4 (210 mm x 297 mm) A5 (148 mm x 210 mm) B4(257 mm x 364 mm) B5 (182 mm x 257 mm) CONT80 (80 pulgadas de ancho con papelcontinuo) CONT132 (132 pulgadas de ancho con papel continuo)

Densidad de pel

ID ATTR_PELDENSITY

Tipo String

DescripcioacutenPara los recursos de font uacutenicamente este valor es una codificacioacuten del nuacutemero de pels (1representa el tamantildeo de pel 240 2 representa el tamantildeo de pel 320) Pueden antildeadirse a estosotros valores significativos a medida que el servidor los defina

Cuerpo

ID ATTR_POINTSIZE

142 IBM Toolbox para Java IBM Toolbox para Java

Tipo Float

DescripcioacutenCuerpo en que se imprime el texto de este archivo en spool El valor especial NONE secodificaraacute como 0

Fidelidad de impresioacuten

ID ATTR_FIDELITY

Tipo String

DescripcioacutenTipo de manejo de errores que se lleva a cabo al imprimir Los valores vaacutelidos son ABSOLUTECONTENT

Imprimir en ambas caras

ID ATTR_DUPLEX

Tipo String

DescripcioacutenIndica coacutemo se imprime la informacioacuten Los valores vaacutelidos son FORMDF NO YESTUMBLE

Calidad de impresioacuten

ID ATTR_PRTQUALITY

Tipo String

DescripcioacutenCalidad de impresioacuten que se utiliza al imprimir este archivo en spool Los valores vaacutelidos sonSTD DRAFT NLQ FASTDRAFT

Secuencia de impresioacuten

ID ATTR_PRTSEQUENCE

Tipo String

DescripcioacutenSecuencia de impresioacuten Los valores vaacutelidos son NEXT

Texto de impresioacuten

ID ATTR_PRTTEXT

Tipo String

DescripcioacutenTexto que se imprime al final de cada paacutegina de la salida impresa y en las paacuteginas de separacioacutenLos valores especiales vaacutelidos son BLANK y JOB

Impresora

ID ATTR_PRINTER

Tipo String

DescripcioacutenNombre del dispositivo de impresora

IBM Toolbox para Java 143

Impresora asignada

ID ATTR_PRTASSIGNED

Tipo String

DescripcioacutenIndica si la impresora estaacute asignada Los valores vaacutelidos son 1 (asignada a una impresoraespeciacutefica) 2 (asignada a varias impresoras) 3 (no asignada)

Tipo de dispositivo de impresora

ID ATTR_PRTDEVTYPE

Tipo String

DescripcioacutenTipo de corriente de datos de la impresora Los valores vaacutelidos son SCS IPDS USERASCIIAFPDS LINE

Archivo de impresora

ID ATTR_PRINTER_FILE

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del archivo de impresora El formato de la viacutea deacceso del sistema de archivos integrado es QSYSLIBbibliotecaLIBarchivoimpresoraFILEdonde biblioteca es la biblioteca que contiene el archivo de impresora y archivoimpresora es elnombre del archivo de impresora

Cola de impresora

ID ATTR_RMTPRTQ

Tipo String

DescripcioacutenNombre de la cola de impresora destino al enviar archivos en spool mediante SNDTCPSPLF(LPR)

Color de informacioacuten de publicacioacuten soportado

ID ATTR_PUBINF_COLOR_SUP

Tipo String

DescripcioacutenIndica el color soportado para esta entrada de lista de publicacioacuten

Paacuteginas por minuto de informacioacuten de publicacioacuten (color)

ID ATTR_PUBINF_PPM_COLOR

Tipo Integer

DescripcioacutenLas paacuteginas por minuto soportadas en la modalidad de color para esta entrada de lista depublicacioacuten

Paacuteginas por minuto de informacioacuten de publicacioacuten (monocromo)

ID ATTR_PUBINF_PPM

Tipo Integer

144 IBM Toolbox para Java IBM Toolbox para Java

DescripcioacutenLas paacuteginas por minuto soportadas en monocromo para esta entrada de lista de publicacioacuten

Soporte duacuteplex de informacioacuten de publicacioacuten

ID ATTR_PUBINF_DUPLEX_SUP

Tipo String

DescripcioacutenIndicador de duacuteplex soportado para esta entrada de lista de publicacioacuten

Ubicacioacuten de informacioacuten de publicacioacuten

ID ATTR_PUBINF_LOCATION

Tipo String

DescripcioacutenDescripcioacuten de ubicacioacuten para esta entrada de lista de publicacioacuten

Nombre de ubicacioacuten remota

ID ATTR_RMTLOCNAME

Tipo String

DescripcioacutenNombre de ubicacioacuten del dispositivo de impresora

Longitud de registro

ID ATTR_RECLENGTH

Tipo Integer

DescripcioacutenLongitud de registro

Reducir salida

ID ATTR_REDUCE

Tipo String

DescripcioacutenForma en que se imprimen varias paacuteginas loacutegicas en cada cara de una paacutegina fiacutesica Los valoresvaacutelidos son TEXT o

Sistema remoto

ID ATTR_RMTSYSTEM

Tipo String

DescripcioacutenNombre de sistema remoto Los valores especiales vaacutelidos son INTNETADR

Sustituir caracteres no imprimibles

ID ATTR_RPLUNPRT

Tipo String

IBM Toolbox para Java 145

DescripcioacutenIndica si los caracteres que no pueden imprimirse deben sustituirse por otro caraacutecter Los valoresvaacutelidos son YES o NO

Caraacutecter de sustitucioacuten

ID ATTR_RPLCHAR

Tipo String

DescripcioacutenCaraacutecter que sustituye a los caracteres no imprimibles

Reiniciar impresioacuten

ID ATTR_RESTART

Tipo Integer

DescripcioacutenReiniciar impresioacuten Los valores vaacutelidos son -1 -2 -3 o el nuacutemero de paacutegina en que se reiniciaraacutela impresioacuten El valor STRPAGE se codifica como -1 el valor ENDPAGE se codifica como -2 y elvalor NEXT se codifica como -3

Nuacutemero de grapas de cosido por el lomo

ID ATTR_SADDLESTITCH_NUMSTAPLES

Tipo Integer

DescripcioacutenNuacutemero de grapas que van a colocarse a lo largo del borde de acabado

Referencia de cosido por el lomo

ID ATTR_SADDLESTITCH_REF

Tipo String

DescripcioacutenSe colocaraacuten una o varias grapas en el medio a lo largo del borde de acabado que se situacutea en elcentro del medio en paralelo al borde de referencia Los valores vaacutelidos son NONE DEVDTOP y LEFT

Guardar archivo en spool

ID ATTR_SAVESPLF

Tipo String

DescripcioacutenIndica si el archivo en spool debe guardarse despueacutes de escribirse Los valores vaacutelidos son YESNO

Desplazamiento de buacutesqueda

ID ATTR_SEEKOFF

Tipo Integer

DescripcioacutenDesplazamiento de buacutesqueda Admite valores tanto positivos como negativos en relacioacuten con elorigen de buacutesqueda

146 IBM Toolbox para Java IBM Toolbox para Java

Origen de buacutesqueda

ID ATTR_SEEKORG

Tipo Integer

DescripcioacutenLos valores vaacutelidos son 1 (principio o parte superior) 2 (actual) y 3 (final o parte inferior)

Prioridad de enviacuteo

ID ATTR_SENDPTY

Tipo String

DescripcioacutenPrioridad de enviacuteo Los valores vaacutelidos son NORMAL HIGH

Paacutegina de separacioacuten

ID ATTR_SEPPAGE

Tipo String

DescripcioacutenOfrece a un usuario la opcioacuten de imprimir una paacutegina de anuncio de cabecera Los valoresvaacutelidos son YES o NO

Bandeja del papel

ID ATTR_SRCDRWR

Tipo Integer

DescripcioacutenBandeja que se emplearaacute cuando se seleccione la opcioacuten de alimentacioacuten automaacutetica de hojassueltas Los valores vaacutelidos son -1 -2 1-255 El valor E1 se codifica como -1 y el valor FORMDFse codifica como -2

SCS en spool

ID ATTR_SPLSCS

Tipo Long

DescripcioacutenDetermina coacutemo se utilizan los datos SCS durante la creacioacuten del archivo en spool

Poner los datos en spool

ID ATTR_SPOOL

Tipo String

DescripcioacutenIndica si los datos de salida del dispositivo de impresora se ponen en spool Los valores vaacutelidosson YES NO

Meacutetodo de autenticacioacuten de creacioacuten de archivo en spool

ID ATTR_SPLF_AUTH_METHOD

Tipo Integer

IBM Toolbox para Java 147

DescripcioacutenIndica el meacutetodo de autenticacioacuten de cliente utilizado para crear este archivo en spool Losvalores vaacutelidos son x00(NONE) x01(REQUESTER) x02(BASIC) x03(CERTIFICATE) yx04(DIGEST)

Meacutetodo de seguridad de creacioacuten de archivo en spool

ID ATTR_SPLF_SECURITY_METHOD

Tipo String

DescripcioacutenIndica el meacutetodo de seguridad utilizado para crear este archivo en spool Los valores vaacutelidos sonx00(NONE) x01(SSL3) y x02(TLS)

Nombre de archivo en spool

ID ATTR_SPOOLFILE

Tipo String

DescripcioacutenNombre del archivo en spool

Nuacutemero de archivo en spool

ID ATTR_SPLFNUM

Tipo Integer

DescripcioacutenNuacutemero del archivo en spool Los valores especiales permitidos son -1 y 0 El valor LAST secodifica como -1 el valor ONLY se codifica como 0

Estado de archivo en spool

ID ATTR_SPLFSTATUS

Tipo String

DescripcioacutenEstado del archivo en spool Los valores vaacutelidos son CLOSED HELD MESSAGE OPENPENDING PRINTER READY SAVED WRITING

Planificacioacuten de salida en spool

ID ATTR_SCHEDULE

Tipo String

DescripcioacutenEspecifica uacutenicamente para los archivos en spool cuaacutendo estaacute disponible el archivo en spoolpara el transcriptor Los valores vaacutelidos son IMMED FILEEND JOBEND

Iniciado por usuario

ID ATTR_STARTEDBY

Tipo String

DescripcioacutenNombre del usuario que inicioacute el transcriptor

148 IBM Toolbox para Java IBM Toolbox para Java

Paacutegina inicial

ID ATTR_STARTPAGE

Tipo Integer

DescripcioacutenNuacutemero de paacutegina en que se iniciaraacute la impresioacuten del archivo en spool Los valores vaacutelidos son-1 0 1 o el nuacutemero de paacutegina El valor ENDPAGE se codifica como -1 Con el valor 0 laimpresioacuten se inicia en la paacutegina 1 Con el valor 1 se imprime todo el archivo

Sistema en el que se ha creado

ID ATTR_SYSTEM

Tipo String

DescripcioacutenNombre del sistema en el que se ha creado el archivo en spool Si no puede determinarse elnombre del sistema en el que se ha creado este archivo en spool se utiliza el nombre del sistemareceptor

Texto descriptivo

ID ATTR_DESCRIPTION

Tipo String

DescripcioacutenTexto para describir una instancia de un objeto AS400

Hora de apertura de archivo

ID ATTR_TIMEOPEN

Tipo String

DescripcioacutenEn el caso de los archivos en spool hora en que se abrioacute este archivo en spool En el caso de losrecursos de AFP hora de la uacuteltima modificacioacuten del objeto La hora se codifica en una serie decaracteres con el formato siguiente HH MM SS

Hora de finalizacioacuten del trabajo de creacioacuten de archivo en spool

ID ATTR_TIME_END

Tipo String

DescripcioacutenHora en la que ha finalizado el trabajo que ha creado el archivo en spool en el sistema Estecampo debe establecerse en blancos cuando se utiliza el valor especial ALL para el campo defecha de inicio de creacioacuten de archivo en spool o cuando se utiliza el valor especial LAST para elcampo de finalizacioacuten de creacioacuten de archivo en spool Este campo debe tener un valorestablecido si se especifica una fecha para el campo de fecha de finalizacioacuten de creacioacuten dearchivo en spool La hora debe tener el formato HHMMSS que se define como se indica acontinuacioacutenv HH - Horav MM - Minutosv SS - Segundos

Hora en que el transcriptor empezoacute a procesar el archivo en spool

ID ATTR_TIME_WTR_BEGAN_FILE

IBM Toolbox para Java 149

Tipo String

DescripcioacutenIndica la hora en que el transcriptor empezoacute a procesar el archivo en spool La hora se codifica enuna serie de caracteres con el formato siguiente HH MM SS

Hora en que el transcriptor terminoacute de procesar el archivo en spool

ID ATTR_TIME_WTR_CMPL_FILE

Tipo String

DescripcioacutenIndica la hora en que el transcriptor terminoacute de procesar el archivo en spool La hora se codificaen una serie de caracteres con el formato siguiente HH MM SS

Total de paacuteginas

ID ATTR_PAGES

Tipo Integer

DescripcioacutenNuacutemero de paacuteginas que contiene un archivo en spool

Transformar SCS en ASCII

ID ATTR_SCS2ASCII

Tipo String

DescripcioacutenIndica si los datos de impresioacuten se deben transformar de SCS en ASCII Los valores vaacutelidos sonYES NO

Unidad de medida

ID ATTR_UNITOFMEAS

Tipo String

DescripcioacutenUnidad de medida que se utilizaraacute para especificar distancias Los valores vaacutelidos son CMINCH

Comentario de usuario

ID ATTR_USERCMT

Tipo String

Descripcioacuten100 caracteres de comentario especificado por el usuario que describen el archivo en spool

Datos de usuario

ID ATTR_USERDATA

Tipo String

Descripcioacuten10 caracteres de datos especificados por el usuario que describen el archivo en spool Los valoresespeciales vaacutelidos son SOURCE

150 IBM Toolbox para Java IBM Toolbox para Java

Datos definidos por usuario

ID ATTR_USRDFNDTA

Tipo String

DescripcioacutenDatos definidos por el usuario que emplearaacuten las aplicaciones de usuario o los programasespecificados por el usuario que procesan archivos en spool Todos los caracteres son aceptablesEl tamantildeo maacuteximo es 255

Archivo definido por usuario

ID ATTR_USRDEFFILE

Tipo String

DescripcioacutenIndica si el archivo en spool se ha creado utilizando una API Los valores vaacutelidos son YES oNO

Objeto definido por usuario

ID ATTR_USER_DEFINED_OBJECT

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del objeto definido por el usuario que emplearaacutenlas aplicaciones de usuario que procesan archivos en spool Si se especifica una viacutea de acceso delsistema de archivos integrado el formato de la viacutea de acceso del sistema de archivos integrado esQSYSLIBbibliotecaLIBobjetotipo donde biblioteca es el nombre de la biblioteca que contieneel objeto o uno de los valores especiales LIBL o CURLIB objeto es el nombre del objeto ytipo es el tipo de objeto Los valores vaacutelidos de tipo son DTAARA DTAQ FILE PSFCFGUSRIDX USRQ y USRSPC La serie NONE se utiliza para indicar que no se utilizaraacuteninguacuten objeto definido por el usuario

Opciones definidas por el usuario

ID ATTR_USEDFNOPTS

Tipo String

DescripcioacutenOpciones definidas por el usuario que emplearaacuten las aplicaciones de usuario que procesanarchivos en spool Pueden especificarse hasta 4 opciones cada valor tiene la longitud char(10)Todos los caracteres son aceptables

Datos de programa controlador de usuario

ID ATTR_USRDRVPGMDTA

Tipo String

DescripcioacutenDatos de usuario que se emplearaacuten con el programa controlador de usuario Todos los caracteresson aceptables El tamantildeo maacuteximo es de 5000 caracteres

Programa controlador de usuario

ID ATTR_USER_DRIVER_PROG

Tipo String

IBM Toolbox para Java 151

DescripcioacutenViacutea de acceso del sistema de archivos integrado del programa controlador definido por el usuarioque procesa los archivos en spool El formato de la viacutea de acceso del sistema de archivosintegrado es QSYSLIBbibliotecaLIBprogramaPGM donde biblioteca es el nombre de labiblioteca que contiene el programa y programa es el nombre del programa El valor de bibliotecapuede ser uno de los valores especiales LIBL o CURLIB o un nombre de bibliotecaespeciacutefico La serie NONE se utiliza para indicar que no hay ninguacuten programa controladordefinido

ID de usuario

ID ATTR_TOUSERID

Tipo String

DescripcioacutenID de usuario al que se enviacutea el archivo en spool

Direccioacuten de ID de usuario

ID ATTR_TOADDRESS

Tipo String

DescripcioacutenDireccioacuten del usuario al que se enviacutea el archivo en spool

Programa de transformacioacuten de usuario

ID ATTR_USER_TRANSFORM_PROG

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del programa de transformacioacuten definido por elusuario que transforma los datos de archivo en spool antes de que los procese el programacontrolador El formato de la viacutea de acceso del sistema de archivos integrado esQSYSLIBbibliotecaLIBprogramaPGM donde biblioteca es el nombre de la biblioteca quecontiene el programa y programa es el nombre del programa El valor de biblioteca puede ser unode los valores especiales LIBL o CURLIB o un nombre de biblioteca especiacutefico La serieNONE se utiliza para indicar que no hay ninguacuten programa de transformacioacuten definido

Fidelidad de visualizacioacuten

ID ATTR_VIEWING_FIDELITY

Tipo String

DescripcioacutenProceso que tendraacute lugar al visualizar una paacutegina de datos de archivo en spool (en la modalidadde una paacutegina cada vez) Los valores vaacutelidos son ABSOLUTE y CONTENT (predeterminados)Para procesar todos los datos que no sean de barrido (mandatos) antes de la paacutegina actual seutiliza ABSOLUTE Con los archivos SCS se utiliza CONTENT para procesar uacutenicamente losmandatos de tiempo de apertura maacutes la paacutegina actual En el caso de los archivos AFPDS seutiliza CONTENT para procesar la primera paacutegina de datos maacutes la paacutegina actual

Clase VMMVS

ID ATTR_VMMVSCLASS

Tipo String

152 IBM Toolbox para Java IBM Toolbox para Java

DescripcioacutenClase VMMVS Los valores vaacutelidos son A-Z y 0-9

Estado de en espera de datos

ID ATTR_WTNGDATASTS

Tipo String

DescripcioacutenIndica si el transcriptor ha escrito todos los datos existentes en este momento en el archivo enspool y estaacute esperando maacutes datos Los valores posibles son NO (el transcriptor no estaacuteesperando maacutes datos) y YES (el transcriptor ha escrito todos los datos existentes en estemomento en el archivo en spool y estaacute esperando maacutes datos) Esta condicioacuten se produce cuandoel transcriptor produce un archivo en spool abierto con el valor SCHEDULE(IMMED)especificado

Estado de en espera de dispositivo

ID ATTR_WTNGDEVSTS

Tipo String

DescripcioacutenIndica si el transcriptor estaacute esperando a obtener el dispositivo de un trabajo que estaacuteimprimiendo directamente en la impresora Los valores posibles son NO (el transcriptor no estaacuteesperando el dispositivo) y YES (el transcriptor estaacute esperando el dispositivo)

Estado de en espera de mensaje

ID ATTR_WTNGMSGSTS

Tipo String

DescripcioacutenIndica si el transcriptor estaacute esperando una respuesta a un mensaje de consulta Los valoresposibles son NO y YES

Cuaacutendo finalizar transcriptor automaacuteticamente

ID ATTR_WTRAUTOEND

Tipo String

DescripcioacutenIndica cuaacutendo finalizar el transcriptor si debe finalizarse automaacuteticamente Los valores vaacutelidosson NORDYF FILEEND Finalizar transcriptor automaacuteticamente debe estar establecido en YES

Cuaacutendo finalizar transcriptor

ID ATTR_WTREND

Tipo String

DescripcioacutenIndica cuaacutendo finalizar el transcriptor Los valores vaacutelidos son CNTRLD IMMED y PAGEENDEs distinto de cuaacutendo finalizar el transcriptor automaacuteticamente

Cuaacutendo retener archivo

ID ATTR_HOLDTYPE

Tipo String

IBM Toolbox para Java 153

DescripcioacutenIndica cuaacutendo retener el archivo en spool Los valores vaacutelidos son IMMED y PAGEEND

Anchura de paacutegina

ID ATTR_PAGEWIDTH

Tipo Float

DescripcioacutenAnchura de una paacutegina Las unidades de medida se especifican en el atributo de meacutetodo demedida

Objeto de personalizacioacuten de estacioacuten de trabajo

ID ATTR_WORKSTATION_CUST_OBJECT

Tipo String

DescripcioacutenViacutea de acceso del sistema de archivos integrado del objeto de personalizacioacuten de estacioacuten detrabajo El formato de la viacutea de acceso del sistema de archivos integrado es QSYSLIBbibliotecaLIBobjpersWSCST donde biblioteca es la biblioteca que contiene el objeto depersonalizacioacuten y objpers es el nombre del objeto de personalizacioacuten de la estacioacuten de trabajo

Nombre de trabajo del transcriptor

ID ATTR_WRITER

Tipo String

DescripcioacutenNombre del trabajo del transcriptor

Nuacutemero de trabajo del transcriptor

ID ATTR_WTRJOBNUM

Tipo String

DescripcioacutenNuacutemero de trabajo del transcriptor

Estado del trabajo del transcriptor

ID ATTR_WTRJOBSTS

Tipo String

DescripcioacutenEstado del trabajo del transcriptor Los valores vaacutelidos son STR END JOBQ HLD MSGW

Nombre de usuario del trabajo del transcriptor

ID ATTR_WTRJOBUSER

Tipo String

DescripcioacutenNombre del usuario que inicioacute el trabajo del transcriptor

Transcriptor iniciado

ID ATTR_WTRSTRTD

Tipo String

154 IBM Toolbox para Java IBM Toolbox para Java

DescripcioacutenIndica si se ha iniciado un transcriptor para esta impresora Los valores posibles son 1 (se hainiciado un transcriptor) y 0 (no se ha iniciado ninguacuten transcriptor)

Paacutegina inicial de transcriptor

ID ATTR_WTRSTRPAGE

Tipo Integer

DescripcioacutenEspecifica el nuacutemero de paacutegina de la primera paacutegina que se imprimiraacute del primer archivo enspool cuando se inicie el trabajo del transcriptor Solo es vaacutelido si tambieacuten se especifica el nombredel archivo en spool cuando se inicia el transcriptor

Estado de transcribiendo

ID ATTR_WRTNGSTS

Tipo String

DescripcioacutenIndica si el transcriptor de impresioacuten estaacute en estado de transcribiendo Los valores posibles sonYES (el transcriptor estaacute en estado de transcribiendo) NO (el transcriptor no estaacute en estado detranscribiendo) y FILE (el transcriptor estaacute transcribiendo los separadores de archivo)

Atributos de objeto de servidor de impresioacuten de red

CCSID NPS

ID ATTR_NPSCCSID

Tipo Integer

DescripcioacutenCCSID en que el servidor de impresioacuten de red espera que esteacuten codificadas todas las series

Nivel de NPS

ID ATTR_NPSLEVEL

DescripcioacutenVersioacuten release y nivel de modificacioacuten del servidor de impresioacuten de red Este atributo es unaserie de caracteres codificada como VXRYMY (es decir V3R1M0) donde

X es un valor comprendido entre (09)Y es un valor comprendido entre (09AZ)

Copiar archivos en spool

Puede emplear el meacutetodo copy de la clase SpooledFile para crear una copia del archivo en spool querepresenta el objeto SpooledFile

Con el uso de SpooledFilecopy() se llevan a cabo las acciones siguientesv Se crea el archivo en spool nuevo en la misma cola de salida y en el mismo sistema que el archivo en

spool originalv Se devuelve una referencia al archivo en spool nuevo

SpooledFilecopy() es un meacutetodo nuevo que solo estaacute disponible si se baja JTOpen 32 o posterior o seaplica un arreglo de IBM i La solucioacuten oacuteptima que se recomienda es bajar y utilizar JTOpen Encontraraacutemaacutes informacioacuten en estos temas

IBM Toolbox para Java 155

v IBM Toolbox para Java and JTOpen Downloads

v IBM Toolbox para Java and JTOpen Service Packs

El meacutetodo copy utiliza la API Crear archivo en spool (QSPCRTSP) en el trabajo servidor de impresioacuten dered para crear una reacuteplica exacta del archivo en spool Uacutenicamente necesita una fecha y una hora decreacioacuten exclusivas para mantener la identidad de la copia del archivo en spool recieacuten creada

Al especificar una cola de salida como paraacutemetro del meacutetodo copy se crea la copia del archivo en spoolen la primera posicioacuten de la cola de salida especificada Tanto la cola de salida como el archivo en spooloriginal deben residir en el mismo sistema

Ejemplo copiar un archivo en spool con SpooledFilecopy()

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Este ejemplo muestra coacutemo se utiliza SpooledFilecopy() para copiar un archivo en spool en la mismacola que contiene el archivo que se desea copiar Si desea direccionar el archivo en spool que acaba decopiar a una cola de salida especiacutefica pase la cola de salida como paraacutemetro del meacutetodo copy

SpooledFile newSplf = new sourceSpooledFilecopy(ltnombre_cola_salidagt)

donde ltnombre_cola_salidagt es el objeto OutputQueuepublic static void main(String args[])

Cree el objeto sistemaAS400 as400 = new AS400(ltnombre_sistemagtltnombre_usuariogt ltcontrasentildeagt) Identifique la cola de salida que contiene el archivo en spool que desea copiarOutputQueue outputQueue =

new OutputQueue(as400 QSYSLIBQUSRSYSLIBltnombre_cola_salidagtOUTQ)

Cree una matriz que contenga todos los elementos necesarios para identificar de forma exclusiva un archivo en spool en el servidorString[][] splfTags =

ltnombre_archivo_spoolgtltnuacutem_archivo_spoolgtltnombre_trabajogtltnombre_usuariogtltnuacutemero_trabajogt Tenga en cuenta que ltnombre_sistemagt ltfechagt y lthoragt son opcionales Si no los incluye quite los correspondientes splfTags[i][j] donde j tiene el valor 5 6 o 7ltnombre_sistemagtltfechagtlthoragt

Imprima la informacioacuten que identifica el archivo en spool en Systemoutfor ( int i=0 iltsplfTagslength i++)

Systemoutprintln(Copiando -gt + splfTags[i][0] + + splfTags[i][1] + + splfTags[i][2] + + splfTags[i][3] + + splfTags[i][4] + + splfTags[i][5] + + splfTags[i][6] + + splfTags[i][7] )

Cree el objeto SpooledFile para el archivo en spool origenSpooledFile sourceSpooledFile =

new SpooledFile(as400splfTags[i][0]IntegerparseInt(splfTags[i][1])

156 IBM Toolbox para Java IBM Toolbox para Java

splfTags[i][2]splfTags[i][3]splfTags[i][5]splfTags[i][6]splfTags[i][7] )

Copie el archivo en spool con lo que se crea un nuevo objeto SpooledFile Para direccionar la copia del archivo en spool a una cola de salida especiacutefica utilice el coacutedigo siguiente SpooledFile newSplf = new sourceSpooledFilecopy(ltnombre_cola_salidagt) donde ltnombre_cola_salidagt es un objeto OutputQueue Especifique la cola de salida del siguiente modo OutputQueue outputQueue = new OutputQueue(as400 QSYSLIBQUSRSYSLIBltnombre_cola_salidagtOUTQ)try SpooledFile newSplf = new sourceSpooledFilecopy()

catch ( Exception e)

Javadoc SpooledFileAPI Crear archivo en spool (QSPCRTSP)

Crear archivos en spool nuevos

Puede utilizar la clase SpooledFileOutputStream para crear nuevos archivos en spool del servidor Laclase se deriva de la clase javaioOutputStream de JDK estaacutendar una vez construida puede emplearsedondequiera que se utilice una corriente de salida (OutputStream)

Al crear un objeto SpooledFileOutputStream nuevo el llamador puede especificar los elementossiguientesv El archivo de impresora que se ha de usarv La cola de salida en la que hay que poner el archivo en spoolv Un objeto PrintParameterList que puede contener paraacutemetros para alterar temporalmente los campos

del archivo de impresora

Todos estos paraacutemetros son opcionales (el llamador puede pasarlos todos o no pasar ninguno de ellos) Sino se especifica un archivo de impresora el servidor de impresioacuten de red utiliza el archivo QPNPSPRTFque es el archivo de impresora predeterminado para la impresioacuten de red Tambieacuten estaacute el paraacutemetro colade salida porque es praacutectico este paraacutemetro se puede especificar en PrintParameterList Si el paraacutemetrocola de salida se especifica en los dos lugares el campo de PrintParameterList altera temporalmente elparaacutemetro cola de salida En la documentacioacuten del constructor de SpooledFileOutputStream encontraraacuteuna lista completa de queacute atributos se pueden establecer en PrintParameterList para crear nuevosarchivos en spool

Utilice uno de los meacutetodos write() para escribir datos en el archivo en spool El objetoSpooledFileOutputStream pone los datos en el almacenamiento intermedio y los enviacutea cuando se cierra lacorriente de salida o al llenarse el almacenamiento intermedio La puesta en el almacenamientointermedio se realiza por dos razonesv Permite a la funcioacuten que determina automaacuteticamente el tipo de datos (consulte Tipos de corriente de

datos en archivos en spool) analizar un almacenamiento intermedio de datos lleno para determinar eltipo de datos

v Agiliza el funcionamiento de la corriente de salida ya que no todas las peticiones de escritura secomunican al servidor

Utilice el meacutetodo flush() para forzar que los datos se escriban en el servidor

IBM Toolbox para Java 157

Cuando el llamador ha terminado de escribir los datos en el nuevo archivo en spool se llama al meacutetodoclose() para cerrar el archivo en spool Una vez cerrado no se pueden escribir maacutes datos en eacutel Al llamaral meacutetodo getSpooledFile() una vez cerrado el archivo en spool el llamador puede obtener una referenciaa un objeto SpooledFile que representa el archivo en spool

Tipos de corriente de datos en archivos en spool

El atributo Tipo de datos de impresora del archivo en spool permite establecer el tipo de datos que seha de poner en el archivo en spool Si el llamador no especifica un tipo de datos de impresora el valorpredeterminado es utilizar la determinacioacuten automaacutetica de tipo de datos Este meacutetodo examina los milprimeros bytes de los datos de archivo en spool determina si se ajustan a las arquitecturas de corrientede datos Corriente de caracteres SNA (SCS) o corriente de datos de las Funciones Avanzadas deImpresioacuten (AFPDS) y luego establece el atributo de manera adecuada Si los bytes de los datos delarchivo en spool no coinciden con ninguna de estas arquitecturas los datos se marcan como de tipoUSERASCII La determinacioacuten automaacutetica de tipo de datos funciona la mayor parte del tiempo Engeneral el llamador utiliza esta funcioacuten a menos que se trate de un caso especiacutefico en el que no funcionela determinacioacuten automaacutetica de tipo de datos En tales casos el llamador puede hacer que el atributoTipo de datos de impresora se establezca en un valor especiacutefico (por ejemplo SCS) El llamador sidesea utilizar los datos de impresora que estaacuten en el archivo de impresora debe utilizar el valor especialPRTF El llamador si altera temporalmente el tipo de datos predeterminado al crear un archivo en spooldebe tener la precaucioacuten de asegurarse de que los datos que se ponen en el archivo en spool coincidencon el atributo de tipo de datos Poner datos no SCS en un archivo en spool marcado para recibir datosSCS hace que el host desencadene un mensaje de error y provoca la peacuterdida del archivo en spool

En general este atributo puede tener tres valoresv SCS - una corriente de datos de impresora basada en texto y EBCDICv AFPDS (corriente de datos de Funciones avanzadas de presentacioacuten) - otra corriente de datos

soportada en el servidor AFPDS puede contener texto imagen y graacuteficos y puede usar recursosexternos como preformatos de paacutegina e imaacutegenes externas en segmentos de paacutegina

v USERASCII - cualesquiera datos de impresora que no sean SCS ni AFPDS manejados por el servidormediante el paso a traveacutes Postscript y HP-PCL son ejemplos de corrientes de datos que se ponen enun archivo en spool de tipo USERASCIIJavadoc SpooledFileOutputStreamldquoEjemplo crear archivos en spoolrdquo en la paacutegina 448Este ejemplo muestra coacutemo se crea un archivo en spool en un servidor a partir de una corriente deentradaldquoEjemplo crear archivos en spool SCSrdquo en la paacutegina 449Este ejemplo utiliza la clase SCS3812Writer para generar una corriente de datos SCS y escribirla en unarchivo en spool del servidor

Generar una corriente de datos SCS

Para generar archivos en spool que se impriman en determinadas impresoras conectadas al servidor debecrearse una corriente de datos SCS (corriente de caracteres SNA) SCS es una corriente de datos EBCDICbasada en texto que puede imprimirse en impresoras SCS en impresoras IPDS o en impresoras de PCLa impresioacuten de SCS se puede realizar convirtiendo dicha corriente de datos mediante un emulador ocon la transformacioacuten de impresioacuten en host en el servidor

Puede utilizar las clases de transcriptor (writer) SCS para generar una corriente de datos SCS de este tipoLas clases de transcriptor SCS convierten los caracteres Unicode Java y las opciones de formato en unacorriente de datos SCS Hay cinco clases de transcriptor SCS que generan los diversos niveles decorrientes de datos SCS El llamador elige el transcriptor que corresponde al destino de impresora finalen el que va a imprimir el llamador o el usuario final

Para generar una corriente de datos de impresora SCS utilice las clases de transcriptor SCS siguientes

158 IBM Toolbox para Java IBM Toolbox para Java

Clase de transcriptor SCS Descripcioacuten

SCS5256Writer La clase de transcriptor SCS maacutes simple de todasSoporta texto retorno de carro salto de liacutenea nuevaliacutenea salto de paacutegina orientacioacuten horizontal y verticalabsoluta orientacioacuten horizontal y vertical relativa yestablecer formato vertical

SCS5224Writer Ampliacutea la clase de transcriptor 5256 y antildeade meacutetodospara establecer los caracteres por pulgada (CPI) y lasliacuteneas por pulgada (LPI)

SCS5219Writer Ampliacutea la clase de transcriptor 5224 y antildeade soportepara margen izquierdo subrayado tipo de papel (papelo sobre) tamantildeo de papel calidad de impresioacuten paacuteginade coacutedigos juego de caracteres nuacutemero de bandejaalimentadora y nuacutemero de bandeja destino

SCS5553Writer Ampliacutea la clase de transcriptor 5219 y antildeade soportepara rotacioacuten de caracteres liacuteneas de cuadriacutecula y ajustede fonts 5553 es una corriente de datos DBCS (juego decaracteres de doble byte)

SCS3812Writer Ampliacutea la clase de transcriptor 5219 y antildeade soportepara negrita duacuteplex orientacioacuten de texto y fonts

Para construir un transcriptor SCS el llamador necesita una corriente de salida y opcionalmente unacodificacioacuten La corriente de datos se escribe en la corriente de salida Para crear un archivo en spool SCSel llamador construye primero un objeto SpooledFileOutputStream y luego lo utiliza para construir unobjeto transcriptor SCS El paraacutemetro de codificacioacuten proporciona un identificador de juego de caracterescodificados (CCSID) EBCDIC al que se han de convertir los datos

Una vez construido el transcriptor los meacutetodos write() permiten enviar texto a la salida Los meacutetodoscarriageReturn() lineFeed() y newLine() permiten situar el cursor de escritura en la paacutegina El meacutetodoendPage() permite finalizar la paacutegina actual e iniciar una paacutegina nueva

Tras escribir todos los datos utilice el meacutetodo close() para finalizar la corriente de datos y cerrar lacorriente de salida

Ejemplo

ldquoEjemplo crear archivos en spool SCSrdquo en la paacutegina 449 muestra coacutemo se genera una corriente de datosSCS utilizando la clase SCS3812Writer y coacutemo se escribe la corriente en un archivo en spool en elservidor

Leer archivos en spool y recursos AFP

Puede utilizar la clase PrintObjectInputStream para leer el contenido sin procesar de un archivo en spoolo un recurso de Funciones Avanzadas de Impresioacuten (AFP) del servidor Esta clase ampliacutea la clasejavaioInputStream de JDK estaacutendar para que pueda emplearse dondequiera que se utilice una corrientede entrada (InputStream)

Puede obtener un objeto PrintObjectInputStream llamando al meacutetodo getInputStream() en una instanciade la clase SpooledFile o al meacutetodo getInputStream() en una instancia de la clase AFPResource

Utilice uno de los meacutetodos read() para leer en la corriente de entrada Todos estos meacutetodos devuelven elnuacutemero de bytes leiacutedos realmente o bien -1 en el caso de que no se haya leiacutedo ninguacuten byte y de que sehaya llegado al final del archivo

IBM Toolbox para Java 159

Utilice el meacutetodo available() de PrintObjectInputStream para devolver el nuacutemero total de bytes delarchivo en spool o del recurso AFP La clase PrintObjectInputStream da soporte a marcar la corriente deentrada por lo que PrintObjectInputStream siempre devuelve true desde el meacutetodo markSupported() Elllamador puede utilizar los meacutetodos mark() y reset() para hacer que la posicioacuten de lectura actualretroceda en la corriente de entrada Utilice el meacutetodo skip() para hacer que la posicioacuten de lectura avanceen la corriente de entrada sin leer los datos

Ejemplo

El ejemplo siguiente muestra coacutemo se utiliza PrintObjectInputStream para leer un archivo en spoolexistente en el servidor

Ejemplo leer archivos en spoolJavadoc PrintObjectInputStream

Leer archivos en spool mediante PrintObjectPageInputStream y PrintObjectTransformedInputStream

Puede utilizar la clase PrintObjectPageInputStream para leer los datos de un archivo en spool AFP y SCSdel servidor paacutegina a paacutegina

Puede obtener un objeto PrintObjectPageInputStream con el meacutetodo getPageInputStream()

Utilice uno de los meacutetodos read() para leer en la corriente de entrada Todos ellos devuelven el nuacutemerode bytes leiacutedos realmente o bien -1 en el caso de que no se haya leiacutedo ninguacuten byte y de que se hayallegado al final de la paacutegina

Utilice el meacutetodo available() de PrintObjectPageInputStream para devolver el nuacutemero total de bytes de lapaacutegina actual La clase PrintObjectPageInputStream da soporte a marcar la corriente de entrada por loque PrintObjectPageInputStream siempre devuelve true desde el meacutetodo markSupported() El llamadorpuede utilizar los meacutetodos mark() y reset() para hacer que la posicioacuten de lectura actual retroceda en lacorriente de entrada y asiacute lecturas posteriores vuelvan a leer los mismos bytes El llamador puede utilizarel meacutetodo skip() para hacer que la posicioacuten de lectura avance en la corriente de entrada sin leer los datos

Sin embargo si desea transformar toda una corriente de datos de archivo en spool utilice la clasePrintObjectTransformedInputStream

Ejemplo

El ejemplo siguiente muestra coacutemo se utiliza PrintObjectPageInputStream yPrintObjectTransformedInputStream para obtener diferentes transformaciones al leer datos de archivos enspool

ldquoEjemplo leer y transformar archivos en spoolrdquo en la paacutegina 452Informacioacuten relacionadaJavadoc PrintObjectPageInputStreamJavadoc PrintObjectTransformedInputStream

Clase ProductLicenseLa clase ProductLicense permite solicitar las licencias de productos instalados en el sistema Para que seacompatible con otros usuarios de licencias de IBM i la clase funciona mediante el soporte para licenciasde productos IBM i al solicitar o liberar una licencia

La clase no aplica la poliacutetica de licencias sino que devuelve suficiente informacioacuten para que la aplicacioacutenpueda implementarla Cuando se solicita una licencia la clase ProductLicense devuelve el estado de la

160 IBM Toolbox para Java IBM Toolbox para Java

peticioacuten (licencia concedida o denegada) Si se deniega la peticioacuten la aplicacioacuten debe inhabilitar elcomportamiento que requeriacutea la licencia ya que IBM Toolbox para Java no sabe queacute funcioacuten debeinhabilitar

Utilice la clase ProductLicense con el soporte para licencias de IBM i con objeto de implementar lalicencia de la aplicacioacutenv El lado servidor de la aplicacioacuten registra el producto y los teacuterminos de la licencia con el soporte para

licencias de IBM iv El lado cliente de la aplicacioacuten utiliza el objeto ProductLicense para solicitar y liberar licencias

Ejemplo caso praacutectico de ProductLicense

Imagine por ejemplo que un cliente ha adquirido 15 licencias de uso simultaacuteneas de su producto El usosimultaacuteneo significa que 15 usuarios pueden utilizar el producto a la vez pero no tienen que sernecesariamente 15 usuarios especiacuteficos Pueden ser 15 usuarios cualesquiera de la organizacioacuten Estainformacioacuten se registra con el soporte para licencias de IBM i A medida que los usuarios se conectan laaplicacioacuten utiliza la clase ProductLicense para solicitar una licenciav Si el nuacutemero de usuarios simultaacuteneos es inferior a 15 la peticioacuten es satisfactoria y se ejecuta la

aplicacioacutenv Cuando se conecta el usuario 16 la peticioacuten ProductLicense falla La aplicacioacuten visualiza un mensaje de

error y se termina

Cuando un usuario deja de ejecutar la aplicacioacuten la aplicacioacuten libera la licencia mediante la claseProductLicense En ese momento la licencia ya estaacute disponible para que otro usuario la utiliceInformacioacuten relacionadaJavadoc ProductLicense

Clase ProgramCallLa clase ProgramCall de IBM Toolbox para Java permite al programa Java llamar a un programa IBM iPuede utilizar la clase ProgramParameter para especificar paraacutemetros de entrada de salida y deentradasalida Si el programa se ejecuta los paraacutemetros de salida y de entradasalida contienen losdatos devueltos por el programa IBM i Si el programa de IBM i no puede ejecutarse satisfactoriamenteel programa Java puede recuperar los mensajes de IBM i que se produzcan en forma de una lista deobjetos AS400Message

Los paraacutemetros obligatorios sonv El programa y los paraacutemetros que han de ejecutarsev El objeto AS400 que representa el servidor que tiene el programa

El nombre de programa y la lista de paraacutemetros se pueden establecer en el constructor mediante elmeacutetodo setProgram() o se pueden establecer en el meacutetodo run() El meacutetodo run() llama al programa

La utilizacioacuten de la clase ProgramCall hace que el objeto AS400 se conecte al servidor En Gestioacuten deconexiones encontraraacute informacioacuten acerca de coacutemo se gestionan las conexiones

Ejemplo coacutemo se utiliza ProgramCall

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El siguiente ejemplo muestra coacutemo se utiliza la clase ProgramCall Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

IBM Toolbox para Java 161

Cree un objeto programa En este ejemplo se establece que el programa se ejecute maacutes adelanteProgramCall pgm = new ProgramCall(sys)

Establezca el nombre del programa Debido a que el programa no toma ninguacuten paraacutemetro pase null para el argumento de ProgramParameter[]pgmsetProgram(QSYSObjectPathNametoPath(MYLIB MYPROG PGM))

Ejecute el programa En este ejemplo el programa no tiene ninguacuten paraacutemetro Si no se ejecuta la anomaliacutea se devuelve como conjunto de mensajes en la lista de mensajesif (pgmrun() = true)

Si llega a este punto es que el programa no ha podido ejecutarse Obtenga la lista de mensajes para determinar por queacute el programa no se ejecutoacuteAS400Message[] messageList = pgmgetMessageList()

Procese la lista de mensajes

Desconecte puesto que ya ha terminado de ejecutar los programassysdisconnectService(AS400COMMAND)

El objeto ProgramCall requiere el nombre de viacutea de acceso del sistema de archivos integrado delprograma

El comportamiento predeterminado consiste en que los programas IBM i se ejecuten en un trabajoservidor aparte aunque el programa Java y el programa IBM i esteacuten en el mismo servidor Puede alterartemporalmente el comportamiento predeterminado y hacer que el programa IBM i se ejecute en el trabajoJava mediante el meacutetodo setThreadSafe()

Utilizacioacuten de los objetos ProgramParameter

Los objetos ProgramParameter permiten pasar datos de paraacutemetro entre el programa Java y el programaIBM i Establezca los datos de entrada con el meacutetodo setInputData() Tras la ejecucioacuten del programarecupere los datos de salida con el meacutetodo getOutputData() Cada paraacutemetro es una matriz de bytes Elprograma Java debe convertir la matriz de bytes entre el formato Java y el formato de IBM i Las clasesde conversioacuten de datos proporcionan meacutetodos para convertir los datos Los paraacutemetros se antildeaden alobjeto ProgramCall en forma de lista

Ejemplo coacutemo se utiliza ProgramParameter

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se utiliza el objeto ProgramParameter para pasar datos de paraacutemetro Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

En este ejemplo el programa tiene dos paraacutemetros Cree una lista para contener los paraacutemetrosProgramParameter[] parmList = new ProgramParameter[2]

El primero paraacutemetro es un paraacutemetro de entradabyte[] key = 1 2 3parmList[0] = new ProgramParameter(key)

162 IBM Toolbox para Java IBM Toolbox para Java

El segundo paraacutemetro es de salida Se devuelve un nuacutemero de cuatro bytesparmList[1] = new ProgramParameter(4)

Cree un objeto de programa que especifique el nombre del programa y la lista de paraacutemetrosProgramCall pgm = new ProgramCall(sys QSYSLIBMYLIBLIBMYPROGPGM parmList)

Ejecute el programaif (pgmrun() = true)

Si el sistema no puede ejecutar el programa vea la lista de mensajes para averiguar por queacute no se ha ejecutadoAS400Message[] messageList = pgmgetMessageList()

else

En caso contrario el programa se ha ejecutado Procese el segundo paraacutemetro que contiene los datos devueltos

Cree un conversor para este tipo de datosAS400Bin4 bin4Converter = new AS400Bin4()

Realice la conversioacuten desde el tipo del sistema al objeto Java El nuacutemero empieza al principio del almacenamiento intermediobyte[] data = parmList[1]getOutputData()int i = bin4ConvertertoInt(data)

Desconecte puesto que ya ha terminado de ejecutar los programassysdisconnectService(AS400COMMAND)

Javadoc ProgramCallJavadoc ProgramParameterJavadoc AS400MessageJavadoc AS400Javadoc CommandCallJavadoc ProgramParameter

Clase QSYSObjectPathNamePuede utilizar la clase QSYSObjectPathName para representar un objeto del sistema de archivosintegrado Esta clase permite construir un nombre de sistema de archivos integrado o analizar en suscomponentes un nombre de sistema de archivos integrado

Varias de las clases de IBM Toolbox para Java necesitan un nombre de viacutea de acceso del sistema dearchivos integrado para poderse utilizar El objeto QSYSObjectPathName permite construir el nombre

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase QSYSObjectPathName

Ejemplo 1 el objeto ProgramCall requiere el nombre de sistema de archivos integrado del programa delservidor al que se debe llamar Se utiliza un objeto QSYSObjectPathName para construir el nombre Parallamar al programa PRINT_IT de la biblioteca REPORTS utilizando un objeto QSYSObjectPathName

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de llamada a programa

IBM Toolbox para Java 163

ProgramCall pgm = new ProgramCall(sys)

Cree un objeto nombre de viacutea de acceso que represente el programa PRINT_IT de la biblioteca REPORTSQSYSObjectPathName pgmName =

new QSYSObjectPathName(REPORTSPRINT_ITPGM)

Utilice el objeto nombre de viacutea para establecer el nombre en el objeto de llamada a programapgmsetProgram(pgmNamegetPath())

Ejecute el programa procese los resultados

Ejemplo 2 si el nombre del objeto solo se utiliza una vez el programa Java puede emplear el meacutetodotoPath() para construir el nombre Utilizar este meacutetodo es maacutes eficaz que crear un objetoQSYSObjectPathName

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de llamada a programaProgramCall pgm = new ProgramCall(sys)

Utilice el meacutetodo toPath para crear el nombre que representa el programa PRINT_IT de la biblioteca REPORTSpgmsetProgram(QSYSObjectPathNametoPath(REPORTS

PRINT_ITPGM))

Ejecute el programa procese los resultados

Ejemplo 3 en este ejemplo se ha proporcionado a un programa Java una viacutea de acceso del sistema dearchivos integrado Puede utilizarse la clase QSYSObjectPathName para analizar este nombre en suscomponentes

Cree un objeto nombre de viacutea de acceso a partir del nombre totalmente calificado del sistema de archivos integradoQSYSObjectPathName ifsName = new QSYSObjectPathName(pathName)

Utilice el objeto nombre de viacutea para obtener la biblioteca el nombre y el tipo del objeto de servidorString library = ifsNamegetLibraryName()String name = ifsNamegetObjectName()String type = ifsNamegetObjectType()

Javadoc QSYSObjectPathName

Acceso a nivel de registroLas clases de acceso a nivel de registro crean leen actualizan y suprimen archivos y miembros de IBM iv Crear un archivo fiacutesico de IBM i especificando uno de estos elementos

ndash La longitud del registrondash Un archivo fuente DDS (especificaciones de descripcioacuten de datos)ndash Un objeto RecordFormat

v Recuperar el formato de registro de un archivo fiacutesico o loacutegico o los formatos de registro de un archivoloacutegico de formato muacuteltiple de IBM i

Nota el formato de registro del archivo no se recupera en su totalidad Los formatos de registrorecuperados estaacuten destinados a utilizarse cuando se establece el formato de registro para un objeto

164 IBM Toolbox para Java IBM Toolbox para Java

AS400File Solo se recupera la informacioacuten suficiente para describir el contenido de un registro delarchivo No se recupera informacioacuten de formato de registro tal como las cabeceras de columna y losalias

v Acceder a los registros de un archivo de IBM i secuencialmente por nuacutemero de registro o por clavev Escribir registros en un archivo del sistemav Actualizar registros en un archivo del sistema secuencialmente por nuacutemero de registro o por clavev Suprimir registros en un archivo del sistema secuencialmente por nuacutemero de registro o por clavev Bloquear un archivo para distintos tipos de accesov Utilizar el control de compromiso para permitir a un programa Java efectuar estas operaciones

ndash Iniciar el control de compromiso para la conexioacutenndash Especificar distintos niveles de bloqueo de control de compromiso para los distintos archivosndash Comprometer y retrotraer transacciones

v Suprimir archivos del sistemav Suprimir un miembro de un archivo del sistema

Nota las clases de acceso a nivel de registro no dan soporte a archivos loacutegicos de unioacuten ni a camposclave nulos

A continuacioacuten figuran algunas clases y las funciones que llevan a cabov AS400File es la clase base abstracta de las clases de acceso a nivel de registro Proporciona meacutetodos que

permiten acceder secuencialmente a los registros crear y suprimir archivos y miembros y realizar lasactividades de control de compromiso

v La clase KeyedFile representa un archivo del sistema que tiene acceso por clavev La clase SequentialFile representa un archivo del sistema que tiene acceso por nuacutemero de registrov La clase AS400FileRecordDescription proporciona los meacutetodos que permiten recuperar el formato de

registro de un archivo del sistema

Las clases de acceso a nivel de registro requieren un objeto AS400 que representa el sistema que tiene losarchivos de base de datos Al utilizar las clases de acceso a nivel de registro el objeto AS400 se conecta alsistema IBM i En Gestioacuten de conexiones encontraraacute informacioacuten acerca de coacutemo se gestionan lasconexiones

Las clases de acceso a nivel de registro requieren el nombre de viacutea de acceso del sistema de archivosintegrado del archivo de base de datos En Nombres de viacutea de acceso del sistema de archivos integradopuede encontrar maacutes informacioacuten

Las clases de acceso a nivel de registro utilizanv La clase RecordFormat para describir un registro del archivo de base de datosv La clase Record para proporcionar acceso a los registros del archivo de base de datosv La clase LineDataRecordWriter para escribir un registro en formato de datos de liacutenea

Estas clases se describen en la seccioacuten Conversioacuten de datos

Ejemplos

v El ejemplo de acceso secuencial muestra coacutemo se accede secuencialmente a un archivo del sistemav El ejemplo de leer un archivo muestra coacutemo se utilizan las clases de acceso a nivel de registro para leer

un archivo del sistemav El ejemplo de archivo por clave muestra coacutemo se utilizan las clases de acceso a nivel de registro para

leer registros por clave en un archivo del sistema

IBM Toolbox para Java 165

AS400File

La clase AS400File proporciona los meacutetodos que permiten realizar diversas accionesv Crear y suprimir archivos y miembros fiacutesicos del servidorv Leer y escribir registros en archivos del servidorv Bloquear archivos para distintos tipos de accesov Utilizar bloques de registros para aumentar el rendimientov Fijar la posicioacuten del cursor dentro de un archivo abierto del servidorv Gestionar las actividades de control de compromisoInformacioacuten relacionadaJavadoc AS400File

KeyedFile

La clase KeyedFile proporciona a un programa Java el acceso por clave a un archivo del servidor Accesopor clave quiere decir que el programa Java tan solo ha de especificar una clave para acceder a losregistros de un archivo Hay meacutetodos para situar el cursor leer actualizar y suprimir registros por clave

Para situar el cursor utilice estos meacutetodosv positionCursor(Object[]) - situacutea el cursor en el primer registro que tiene la clave especificadav positionCursorAfter(Object[]) - situacutea el cursor en el registro que hay despueacutes del primer registro que

tiene la clave especificadav positionCursorBefore(Object[]) - situacutea el cursor en el registro que hay antes del primer registro que

tiene la clave especificada

Para suprimir un registro utilice este meacutetodov deleteRecord(Object[]) - suprime el primer registro que tiene la clave especificada

Los meacutetodos de lectura sonv read(Object[]) - lee el primer registro que tiene la clave especificadav readAfter(Object[]) - lee el registro situado despueacutes del primer registro que tiene la clave especificadav readBefore(Object[]) - lee el registro situado antes del primer registro que tiene la clave especificadav readNextEqual() - lee el siguiente registro cuya clave coincide con la clave especificada La buacutesqueda

empieza a partir del registro situado despueacutes de la posicioacuten actual del cursorv readPreviousEqual() - lee el registro anterior cuya clave coincide con la especificada La buacutesqueda

empieza a partir del registro situado antes de la posicioacuten actual del cursor

Para actualizar un registro utilice este meacutetodov update(Object[]) - actualiza el registro que tiene la clave especificada

Tambieacuten se proporcionan meacutetodos para especificar criterios de buacutesqueda cuando se situacutea lee y actualizapor clave Los valores vaacutelidos de los criterios de buacutesqueda sonv Igual - se busca el primer registro cuya clave coincide con la especificadav Menor que - se busca el uacuteltimo registro cuya clave se encuentra antes de la especificada seguacuten el orden

de las claves del archivov Igual o menor que - se busca el primer registro cuya clave coincide con la especificada Si no se

encuentra ninguno se busca el uacuteltimo registro cuya clave se halla antes de la especificada seguacuten elorden de las claves del archivo

v Mayor que - se busca el primer registro cuya clave se encuentra despueacutes de la especificada seguacuten elorden de las claves del archivo

166 IBM Toolbox para Java IBM Toolbox para Java

v Igual o mayor que - se busca el primer registro cuya clave coincide con la especificada Si no seencuentra ninguno se busca el primer registro cuya clave se halla despueacutes de la especificada seguacuten elorden de las claves del archivo

KeyedFile es una subclase de AS400File todos los meacutetodos de AS400File estaacuten disponibles en KeyedFile

Especificar la clave

La clave de un objeto KeyedFile se representa mediante una matriz de objetos Java cuyos tipos y orden secorresponden con los tipos y el orden de los campos de clave tal como los especifica el objetoRecordFormat para el archivo

El ejemplo que sigue muestra coacutemo se especifica la clave para el objeto KeyedFile Especifique la clave para un archivo cuyos campos de clave puestos por orden son CUSTNAME CHAR(10) CUSTNUM BINARY(9) CUSTADDR CHAR(100)VARLEN() Observe que el uacuteltimo es un campo de longitud variableObject[] theKey = new Object[3]theKey[0] = John DoetheKey[1] = new Integer(445123)theKey[2] = 2227 John Doe Lane ANYTOWN NY 11199

Un objeto KeyedFile acepta claves parciales asiacute como claves completas No obstante los valores de loscampos clave se han de especificar por orden

Por ejemplo Especifique una clave parcial para un archivo cuyos campos de clave puestos por orden son CUSTNAME CHAR(10) CUSTNUM BINARY(9) CUSTADDR CHAR(100)VARLEN()Object[] partialKey = new Object[2]partialKey[0] = John DoepartialKey[1] = new Integer(445123)

Ejemplo de una clave parcial INVALIDObject[] INVALIDPartialKey = new Object[2]INVALIDPartialKey[0] = new Integer(445123)INVALIDPartialKey[1] = 2227 John Doe Lane ANYTOWN NY 11199

No se da soporte a las claves nulas ni a los campos de clave nulos

Los valores de campo de clave para un registro se pueden obtener del objeto Record correspondiente aun archivo mediante el meacutetodo getKeyFields()

El ejemplo siguiente muestra coacutemo se lee en un archivo por clave Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoKeyedFile myFile =new KeyedFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha compilado y estaacute disponible para que lo utilice el programa Java

IBM Toolbox para Java 167

RecordFormat recordFormat = new MYKEYEDFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivomyFileopen(AS400FileREAD_WRITE 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

El formato de registro del archivo contiene cuatro campos de clave CUSTNUM CUSTNAME PARTNUM y ORDNUM en este orden partialKey contendraacute 2 valores de campo de clave Debido a que los valores de campo de clave deben estar ordenados partialKey constaraacute de valores para CUSTNUM y CUSTNAMEObject[] partialKey = new Object[2]partialKey[0] = new Integer(1)partialKey[1] = John Doe

Lea el primer registro que coincida con partialKeyRecord keyedRecord = myFileread(partialKey)

De no encontrarse el registro se devuelve nullif (keyedRecord = null) Se ha encontrado el registro correspondiente a John Doe imprima la informacioacuten

Systemoutprintln(Informacioacuten de cliente + (String)partialKey[1] + )Systemoutprintln(keyedRecord)

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Informacioacuten relacionadaJavadoc KeyedFile

SequentialFile

La clase SequentialFile permite a un programa Java acceder a un archivo del servidor por nuacutemero deregistro Hay meacutetodos para situar el cursor leer actualizar y suprimir registros por nuacutemero de registro

Para situar el cursor utilice estos meacutetodosv positionCursor(int) - situacutea el cursor en el registro que tiene el nuacutemero de registro especificadov positionCursorAfter(int) - situacutea el cursor en el registro posterior al que tiene el nuacutemero de registro

especificadov positionCursorBefore(int) - situacutea el cursor en el registro anterior al que tiene el nuacutemero de registro

especificado

Para suprimir un registro utilice este meacutetodov deleteRecord(int) - suprime el registro que tiene el nuacutemero de registro especificado

Para leer un registro utilice estos meacutetodosv read(int) - lee el registro que tiene el nuacutemero de registro especificadov readAfter(int) - lee el registro posterior al que tiene el nuacutemero de registro especificadov readBefore(int) - lee el registro anterior al que tiene el nuacutemero de registro especificado

168 IBM Toolbox para Java IBM Toolbox para Java

Para actualizar un registro utilice este meacutetodov update(int) - actualiza el registro que tiene el nuacutemero de registro especificado

SequentialFile es una subclase de AS400File todos los meacutetodos de AS400File estaacuten disponibles enSequentialFile

El ejemplo siguiente muestra coacutemo se utiliza la clase SequentialFile Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha compilado y estaacute disponible para que lo utilice el programa JavaRecordFormat recordFormat = new MYFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivomyFileopen(AS400FileREAD_WRITE 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Suprima el registro nuacutemero 2myFiledelete(2)

Lea el registro nuacutemero 5 y actualiacuteceloRecord updateRec = myFileread(5)updateRecsetField(CUSTNAME newName)

Utilice el meacutetodo update() de la clase base puesto que ya estaacute situado en el registromyFileupdate(updateRec)

Actualice el registro nuacutemero 7updateRecsetField(CUSTNAME nextNewName)updateRecsetField(CUSTNUM new Integer(7))myFileupdate(7 updateRec)

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Informacioacuten relacionadaJavadoc SequentialFile

AS400FileRecordDescription

La clase AS400FileRecordDescription de IBM Toolbox para Java proporciona los meacutetodos que permitenrecuperar el formato de registro de un archivo del servidor

Esta clase proporciona meacutetodos para crear coacutedigo fuente Java para las subclases de RecordFormat ydevolver objetos RecordFormat que describen los formatos de registro de los archivos fiacutesicos o loacutegicos

IBM Toolbox para Java 169

del servidor especificados por el usuario La salida de estos meacutetodos puede utilizarse como entrada paraun objeto AS400File al establecer el formato de registro

Se recomienda utilizar siempre la clase AS400FileRecordDescription para generar el objeto RecordFormatcuando el archivo ya existe en el servidor

Nota la clase AS400FileRecordDescription no recupera la totalidad del formato de registro de unarchivo Solo se recupera la informacioacuten suficiente para describir el contenido de los registros quecomponen el archivo No se recupera informacioacuten como la de las cabeceras de columna los alias y loscampos de referencia Por lo tanto los formatos de registro recuperados no necesariamente crean unarchivo cuyo formato de registro sea ideacutentico al del archivo del que se recuperoacute

Crear coacutedigo fuente Java para subclases de RecordFormat para representar el formato de registro dearchivos del servidor

El meacutetodo createRecordFormatSource() crea archivos fuente Java para subclases de la clase RecordFormatLos archivos se pueden compilar y luego una aplicacioacuten o un applet los puede utilizar como entradapara el meacutetodo AS400FilesetRecordFormat()

El meacutetodo createRecordFormatSource() debe utilizarse como herramienta en tiempo de desarrollo pararecuperar los formatos de registro de archivos existentes en el servidor Con este meacutetodo el fuentecorrespondiente a la subclase de la clase RecordFormat puede crearse una vez modificarse si esnecesario compilarse y despueacutes lo pueden utilizar muchos programas Java que accedan a los mismosarchivos del servidor Uacutenicamente las aplicaciones Java pueden utilizar este meacutetodo porque crea losarchivos en el sistema local Sin embargo la salida (el coacutedigo fuente Java) se puede compilar y despueacutes lapueden utilizar tanto las aplicaciones como los applets Java

Nota este meacutetodo sobrescribe los archivos cuyo nombre sea ideacutentico al de los archivos fuente Java quese crean

Ejemplo 1 el ejemplo siguiente muestra coacutemo se utiliza el meacutetodo createRecordFormatSource() Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto AS400FileRecordDescription que represente el archivoAS400FileRecordDescription myFile = new AS400FileRecordDescription(sys

QSYSLIBMYLIBLIBMYFILEFILE) Cree el archivo fuente Java en el directorio de trabajo actual Especifique package commyCompanymyProduct para la sentencia package en el fuente ya que la clase se va a suministrar como parte de my productmyFilecreateRecordFormatSource(null commyCompanymyProduct)

Suponiendo que el nombre de formato del archivo MYFILE sea FILE1 el archivo FILE1Formatjava se crearaacute en el directorio de trabajo actual Va a sobrescribir cualquier archivo que tenga el mismo nombre El nombre de la clase seraacute FILE1Format La clase ampliaraacute RecordFormat

Ejemplo 2 compile el archivo creado maacutes arriba FILE1Formatjava y utiliacutecelo de la siguiente manera Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto AS400File que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILE)

Establezca el formato de registro Ello presupone que importcommyCompanymyProductFILE1Format ya se ha realizado

170 IBM Toolbox para Java IBM Toolbox para Java

myFilesetRecordFormat(new FILE1Format())

Abra el archivo y leacutealo

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Crear objetos RecordFormat para representar el formato de registro de archivos del servidor

El meacutetodo retrieveRecordFormat() devuelve una matriz de objetos RecordFormat que representan losformatos de registro de un archivo existente en el servidor Lo maacutes habitual es que en la matriz solo sedevuelva un objeto RecordFormat Cuando el archivo cuyo formato de registro se estaacute recuperando es unarchivo loacutegico de formato muacuteltiple se devuelve maacutes de un objeto RecordFormat Utilice este meacutetodo pararecuperar dinaacutemicamente en tiempo de ejecucioacuten el formato de registro de un archivo existente en elservidor El objeto RecordFormat puede usarse luego como entrada para el meacutetodoAS400FilesetRecordFormat()

El ejemplo siguiente muestra coacutemo se utiliza el meacutetodo retrieveRecordFormat() Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto AS400FileRecordDescription que represente el archivoAS400FileRecordDescription myFile = new AS400FileRecordDescription(sys

QSYSLIBMYLIBLIBMYFILEFILE) Recupere el formato de registro correspondiente al archivoRecordFormat[] format = myFileretrieveRecordFormat()

Cree un objeto AS400File que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILE)

Establezca el formato de registromyFilesetRecordFormat(format[0])

Abra el archivo y leacutealo

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Javadoc AS400FileRecordDescriptionJavadoc RecordFormatJavadoc AS400File

Crear y suprimir archivos y miembros

Los archivos fiacutesicos del servidor se crean especificando una longitud de registro un archivo fuente DDS(especificaciones de descripcioacuten de datos) existente en el servidor o un objeto RecordFormat

Al crear un archivo y especificar una longitud de registro puede crearse un archivo de datos o unarchivo fuente El meacutetodo establece el formato de registro correspondiente al objeto No llame al meacutetodosetRecordFormat() para el objeto

IBM Toolbox para Java 171

Un archivo de datos tiene un campo Este campo tiene el nombre del archivo es de tipo caraacutecter y sulongitud es la especificada en el meacutetodo create

Un archivo fuente consta de tres camposv El campo SRCSEQ que es DECIMAL CON ZONA (62)v El campo SRCDAT que es DECIMAL CON ZONA (60)v El campo SRCDTA que es un campo de tipo caraacutecter y cuya longitud es la especificada en el meacutetodo

create menos 12

Los ejemplos que hay a continuacioacuten muestran coacutemo se crean archivos y miembros

Ejemplo 1 para crear un archivo de datos con un registro de 128 bytes Cree un objeto AS400 el archivo se crearaacute en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile newFile =

new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Cree el archivonewFilecreate(128 DATA Archivo de datos con un registro de 128 bytes)

Abra el archivo solo para escritura Nota el formato de registro del archivo ya se ha establecido mediante create()newFileopen(AS400FileWRITE_ONLY 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Escriba un registro en el archivo Debido a que el formato de registro se establecioacute en create() se puede llamar a getRecordFormat() para obtener un registro debidamente formateado para este archivoRecord writeRec = newFilegetRecordFormat()getNewRecord()writeRecsetField(0 Registro uno)newFilewrite(writeRec)

Cierre el archivo porque ya ha terminado de usarlonewFileclose()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Ejemplo 2 cuando se crea un archivo especificando un archivo fuente DDS existente este se especifica enel meacutetodo create() Para poder abrir el archivo primero es preciso establecer su formato de registromediante el meacutetodo setRecordFormat() Por ejemplo

Cree un objeto AS400 el archivo se crearaacute en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree objetos QSYSObjectPathName para el archivo nuevo y para el archivo DDSQSYSObjectPathName file = new QSYSObjectPathName(MYLIB MYFILE FILE MBR)QSYSObjectPathName ddsFile = new QSYSObjectPathName(MYLIB DDSFILE FILE MBR)

Cree un objeto de archivo que represente el archivoSequentialFile newFile = new SequentialFile(sys file)

Cree el archivonewFilecreate(ddsFile Archivo creado utilizando la descripcioacuten DDSFile)

172 IBM Toolbox para Java IBM Toolbox para Java

Establezca el formato de registro del archivo recuperaacutendolo del servidornewFilesetRecordFormat(new AS400FileRecordDescription(sysnewFilegetPath())retrieveRecordFormat()[0])

Abra el archivo para escrituranewFileopen(AS400FileWRITE_ONLY 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Escriba un registro en el archivo El meacutetodo getRecordFormat() seguido del meacutetodo getNewRecord() serviraacute para obtener obtener un registro predeterminado para el archivoRecord writeRec = newFilegetRecordFormat()getNewRecord()newFilewrite(writeRec)

Cierre el archivo porque ya ha terminado de usarlonewFileclose()

Desconecte puesto que ya ha terminado de utilizar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Ejemplo 3 cuando se crea un archivo especificando un objeto RecordFormat este objeto se especifica enel meacutetodo create() El meacutetodo establece el formato de registro correspondiente al objeto No debe llamarseal meacutetodo setRecordFormat() para el objeto

Cree un objeto AS400 el archivo se crearaacute en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile newFile =

new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Recupere el formato de registro de un archivo existenteRecordFormat recordFormat = new AS400FileRecordDescription(sysQSYSLIBMYLIBLIBEXISTINGFILEMBR1MBR)retrieveRecordFormat()[0]

Cree el archivonewFilecreate(recordFormat Archivo creado usando un objeto formato de registro)

Abra el archivo solo para escritura Nota el formato de registro del archivo ya se ha establecido mediante create()newFileopen(AS400FileWRITE_ONLY 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Escriba un registro en el archivo El objeto recordFormat serviraacute para obtener un registro predeterminado debidamente formateado para el archivoRecord writeRec = recordFormatgetNewRecord()newFilewrite(writeRec)

Cierre el archivo porque ya ha terminado de usarlonewFileclose() Desconecte puesto que ya ha terminado de utilizar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Cuando suprima archivos y miembros utilice estos meacutetodosv Utilice el meacutetodo delete() para suprimir archivos del servidor y todos sus miembrosv Utilice el meacutetodo deleteMember() para suprimir tan solo un miembro de un archivo

IBM Toolbox para Java 173

Utilice el meacutetodo addPhysicalFileMember() para antildeadir miembros a un archivoInformacioacuten relacionadaJavadoc AS400File

Leer y escribir registros

Puede utilizar la clase AS400File para leer escribir actualizar y suprimir registros en los archivos delservidor

El acceso al registro se realiza mediante la clase Record que estaacute descrita por una clase RecordFormat Elformato de registro debe establecerse mediante el meacutetodo setRecordFormat() antes de abrir el archivo amenos que el archivo se haya acabado de crear (sin la intervencioacuten de close()) con uno de los meacutetodoscreate() pues estos meacutetodos establecen el formato de registro correspondiente al objeto

Utilice los meacutetodos read() para leer un registro del archivo Se proporcionan meacutetodos para realizar estastareasv read() - leer el registro situado en la posicioacuten actual del cursorv readFirst() - leer el primer registro del archivov readLast() - leer el uacuteltimo registro del archivov readNext() - leer el siguiente registro del archivov readPrevious() - leer el registro anterior del archivo

El ejemplo siguiente muestra coacutemo se utiliza el meacutetodo readNext() Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha se ha compilado y estaacute disponible para que lo utilice el programa JavaRecordFormat recordFormat = new MYFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivomyFileopen(AS400FileREAD_ONLY 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Lea cada registro del archivo escribiendo el campo CUSTNAME (nombre de cliente) en SystemoutSystemoutprintln( LISTA DE CLIENTES)Systemoutprintln(____________________________________________)

Record record = myFilereadNext()while(record = null)

Systemoutprintln(recordgetField(CUSTNAME))record = myFilereadNext()

Cierre el archivo porque ya ha terminado de usarlo

174 IBM Toolbox para Java IBM Toolbox para Java

myFileclose()

Desconecte puesto que ya ha terminado de utilizar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Utilice el meacutetodo update() para actualizar el registro situado en la posicioacuten del cursor

Por ejemplo Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha compilado y estaacute disponible para que lo utilice el programa JavaRecordFormat recordFormat = new MYFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivo para actualizacioacutenmyFileopen(AS400FileREAD_WRITE 0 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Actualice el primer registro del archivo Supongamos que newName es una serie que tiene el nombre nuevo para CUSTNAME (nombre de cliente)Record updateRec = myFilereadFirst()updateRecsetField(CUSTNAME newName)myFileupdate(updateRec)

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Utilice el meacutetodo write() para antildeadir registros al final de un archivo Al archivo se le puede antildeadir unregistro individual o una matriz de registros

Utilice el meacutetodo deleteCurrentRecord() para suprimir el registro situado en la posicioacuten del cursorInformacioacuten relacionadaJavadoc AS400File

Bloquear archivos

El programa Java puede bloquear un archivo para impedir que los demaacutes usuarios accedan a dichoarchivo mientras el primer programa Java lo esteacute utilizando

Los tipos de bloqueo son los siguientes Puede encontrar maacutes informacioacuten acerca de los tipos de bloqueoen el Javadoc de AS400Filev Bloqueo de lecturaexclusivo - El programa Java actual lee registros y ninguacuten otro programa puede

acceder al archivo

IBM Toolbox para Java 175

v Bloqueo de lecturapermitir lectura compartida - El programa Java actual lee registros y los demaacutesprogramas pueden leer registros del archivo

v Bloqueo de lecturapermitir escritura compartida - El programa Java actual lee registros y los demaacutesprogramas pueden cambiar el archivo

v Bloqueo de escrituraexclusivo - El programa Java actual cambia el archivo y los demaacutes programas nopueden acceder al archivo

v Bloqueo de escriturapermitir lectura compartida - El programa Java actual cambia el archivo y losdemaacutes programas pueden leer registros del archivo

v Bloqueo de escriturapermitir escritura compartida - El programa Java actual cambia el archivo y losdemaacutes programas pueden cambiar el archivo

Para liberar los bloqueos obtenidos mediante el meacutetodo lock() el programa Java inicia el meacutetodoreleaseExplicitLocks()Informacioacuten relacionadaJavadoc AS400File

Utilizar bloques de registros

La clase AS400File de IBM Toolbox para Java utiliza bloques de registros para aumentar el rendimientov Si el archivo se ha abierto para acceso de solo lectura se lee un bloque de registros cuando el

programa Java lee un registro La agrupacioacuten en bloques aumenta el rendimiento debido a que laspeticiones de lectura ulteriores se pueden manejar sin tener que acceder al servidor Es muy pequentildea ladiferencia de rendimiento que hay entre leer un registro individual y leer varios registros Elrendimiento aumenta de manera notable si el servicio de registros se puede obtener del bloque deregistros puesto en la memoria cacheacute del clienteEl nuacutemero de registros que deben leerse de cada bloque se puede establecer al abrir el archivo Porejemplo

Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha compilado y estaacute disponible para que lo utilice el programa JavaRecordFormat recordFormat = new MYFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivo Especifique 50 para el factor de bloquesint blockingFactor = 50myFileopen(AS400FileREAD_ONLY blockingFactor AS400FileCOMMIT_LOCK_LEVEL_NONE)

Lea el primer registro del archivo Debido a que se ha especificado el factor de bloques se recuperan 50 registros durante esta invocacioacuten de read()Record record = myFilereadFirst()for (int i = 1 i lt 50 ampamp record = null i++)

Los registros leiacutedos en este bucle se obtendraacuten del bloque de registros puestos en la memoria cacheacute del cliente

176 IBM Toolbox para Java IBM Toolbox para Java

record = myFilereadNext()

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de utilizar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

v Si el archivo se abre para acceso solo de escritura el factor de bloques indica cuaacutentos registros seescriben en el archivo de una sola vez cuando se invoca el meacutetodo write(Record[])Por ejemplo

Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha compilado y estaacute disponible para que lo utilice el programa JavaRecordFormat recordFormat = new MYFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivo Especifique 50 para el factor de bloquesint blockingFactor = 50myFileopen(AS400FileWRITE_ONLY blockingFactor AS400FileCOMMIT_LOCK_LEVEL_NONE)

Cree una matriz de registros que deban escribirse en el archivoRecord[] records = new Record[100]for (int i = 0 i lt 100 i++)

Supongamos que el archivo tiene dos campos CUSTNAME y CUSTNUM (nombre y nuacutemero de cliente)records[i] = recordFormatgetNewRecord()records[i]setField(CUSTNAME Cliente + StringvalueOf(i))records[i]setField(CUSTNUM new Integer(i))

Escriba los registros en el archivo Debido a que el factor de bloques es 50 solo se realizan dos viajes al servidor escribieacutendose 50 registros en cada viajemyFilewrite(records)

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de utilizar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

v Si el archivo se abre para acceso de lecturaescritura no se lleva a cabo la agrupacioacuten en bloques Deespecificarse un factor de bloques en el meacutetodo open() dicho valor no se tiene en cuentaJavadoc AS400File

IBM Toolbox para Java 177

Fijar la posicioacuten del cursor

Un archivo abierto dispone de un cursor El cursor sentildeala al registro que se ha de leer actualizar osuprimir Cuando se abre un archivo por primera vez el cursor sentildeala al principio del archivo Elprincipio del archivo se encuentra antes del primer registro

Utilice estos meacutetodos para fijar la posicioacuten del cursorv positionCursorAfterLast() - Situacutea el cursor despueacutes del uacuteltimo registro La existencia de este meacutetodo se

debe a que con eacutel los programas Java pueden utilizar el meacutetodo readPrevious() para acceder a losregistros del archivo

v positionCursorBeforeFirst() - Situacutea el cursor antes del primer registro La existencia de este meacutetodo sedebe a que con eacutel los programas Java pueden utilizar el meacutetodo readNext() para acceder a los registrosdel archivo

v positionCursorToFirst() - Situacutea el cursor en el primer registrov positionCursorToLast() - Situacutea el cursor en el uacuteltimo registrov positionCursorToNext() - Mueve el cursor al siguiente registrov positionCursorToPrevious() - Mueve el cursor al registro anterior

El ejemplo siguiente muestra coacutemo se utiliza el meacutetodo positionCursorToFirst() para situar el cursor Cree un objeto AS400 el archivo existe en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)

Supongamos que se ha empleado la clase AS400FileRecordDescription para generar el coacutedigo de una subclase de RecordFormat que representa el formato de registro del archivo MYFILE de la biblioteca MYLIB El coacutedigo se ha compilado y estaacute disponible para que lo utilice el programa JavaRecordFormat recordFormat = new MYFILEFormat()

Establezca el formato de registro para myFile Esto se debe realizar antes de invocar el meacutetodo open()myFilesetRecordFormat(recordFormat)

Abra el archivomyFileopen(AS400FileREAD_WRITE 1 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Suprima el primer registro del archivomyFilepositionCursorToFirst()myFiledeleteCurrentRecord()

Cierre el archivo porque ya ha terminado de usarlomyFileclose()

Desconecte puesto que ya ha terminado de utilizar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

Informacioacuten relacionadaJavadoc AS400File

178 IBM Toolbox para Java IBM Toolbox para Java

Control de compromiso

Mediante el control de compromiso el programa Java dispone de otro nivel de control sobre larealizacioacuten de cambios en un archivo Si el control de compromiso estaacute activado las transaccionesefectuadas en un archivo quedan pendientes mientras no se comprometan o se retrotraigan Si secomprometen todos los cambios se ponen en el archivo Si se retrotraen todos los cambios quedandescartados La transaccioacuten puede consistir en cambiar un registro existente antildeadir un registro suprimirun registro o incluso leer un registro que dependa del nivel de bloqueo de control de compromisoespecificado en el meacutetodo open()

Los niveles de control de compromiso son los siguientes Para ver maacutes detalles acerca de cada nivelconsulte el Javadoc de AS400Filev Todos - Todos los registros del archivo a los que se accede quedan bloqueados hasta que la transaccioacuten

se comprometa o se retrotraigav Cambio - Los registros del archivo que se actualizan antildeaden y suprimen quedan bloqueados hasta que

la transaccioacuten se comprometa o se retrotraigav Estabilidad de cursor - Los registros del archivo que se actualizan antildeaden y suprimen quedan

bloqueados hasta que la transaccioacuten se comprometa o se retrotraiga Los registros a los que se accedesin que se realice cambios en ellos solo quedan bloqueados hasta que se acceda a otro registro

v Ninguno - No se realiza ninguacuten control de compromiso en el archivo Los cambios se poneninmediatamente en el archivo y no pueden retrotraerse

Puede utilizar el meacutetodo startCommitmentControl() para iniciar el control de compromiso Dicho controlse aplica a la conexioacuten de AS400 El control de compromiso una vez que se ha iniciado para unaconexioacuten se aplica a todos los archivos abiertos bajo esa conexioacuten a partir del momento en que se inicioacuteel control de compromiso Los archivos que se han abierto antes de iniciar el control de compromiso nose encuentran bajo dicho control El nivel de control de compromiso para archivos individuales seespecifica en el meacutetodo open() Especifique COMMIT_LOCK_LEVEL_DEFAULT para utilizar el mismonivel de control de compromiso que el especificado en el meacutetodo startCommitmentControl()

Por ejemplo Cree un objeto AS400 los archivos existen en este servidorAS400 sys = new AS400(mySystemmyCompanycom)

Cree tres objetos archivoSequentialFile myFile = new SequentialFile(sys QSYSLIBMYLIBLIBMYFILEFILEFILEMBR)SequentialFile yourFile = new SequentialFile(sys QSYSLIBYOURLIBLIBYOURFILEFILEFILEMBR)SequentialFile ourFile = new SequentialFile(sys QSYSLIBOURLIBLIBOURFILEFILEFILEMBR)

Abra el archivo yourFile antes de iniciar el control de compromiso A este archivo no se le aplica ninguacuten control de compromiso El paraacutemetro nivel de bloqueo de compromiso no se tiene en cuenta porque el control de compromiso no se ha iniciado para la conexioacutenyourFilesetRecordFormat(new YOURFILEFormat())yourFileopen(AS400FileREAD_WRITE 0 AS400FileCOMMIT_LOCK_LEVEL_DEFAULT)

Inicie el control de compromiso para la conexioacuten Nota se puede usar cualquiera de los tres archivos para esta llamada a startCommitmentControl()myFilestartCommitmentControl(AS400FileCOMMIT_LOCK_LEVEL_CHANGE)

Abra myFile y ourFilemyFilesetRecordFormat(new MYFILEFormat())

Use el mismo nivel de bloqueo de compromiso que el especificado al iniciar el control de compromisomyFileopen(AS400FileWRITE_ONLY 0 COMMIT_LOCK_LEVEL_DEFAULT)

IBM Toolbox para Java 179

ourFilesetRecordFormat(new OURFILEFormat()) Especifique un nivel de bloqueo de compromiso distinto del que habiacutea al iniciar el control de compromisoourFileopen(AS400FileREAD_WRITE 0 COMMIT_LOCK_LEVEL_CURSOR_STABILITY)

Escriba y actualice registros en los tres archivos

Comprometa los cambios para los archivos myFile y ourFile Observe que el compromiso compromete todos los cambios para la conexioacuten aunque solo se ha invocado en un objeto AS400FilemyFilecommit() Cierre los archivosmyFileclose()yourFileclose()ourFileclose()

Finalice el control de compromiso Ello finaliza el control de compromiso para la conexioacutenourFileendCommitmentControl()

Desconecte puesto que ya ha terminado de usar el acceso a nivel de registrosysdisconnectService(AS400RECORDACCESS)

El meacutetodo commit() compromete todas las transacciones a partir del liacutemite del uacuteltimo compromiso parala conexioacuten El meacutetodo rollback() descarta todas las transacciones a partir del liacutemite del uacuteltimocompromiso para la conexioacuten El control de compromiso para una conexioacuten se finaliza mediante elmeacutetodo endCommitmentControl() Si se cierra un archivo antes de invocar el meacutetodo commit() orollback() se retrotraen todas las transacciones que no se hayan comprometido Todos los archivos que sehan abierto bajo control de compromiso deben cerrarse antes de llamar al meacutetodoendCommitmentControl()

Los ejemplos que figuran a continuacioacuten muestran coacutemo iniciar el control de compromiso utilizar lasfunciones de compromiso o retrotraccioacuten y luego finalizar el control de compromiso

Supongamos que el objeto AS400 y el archivo ya tienen creada una instancia

Inicie el control de compromiso para CHANGEaFilestartCommitmentControl(AS400FileCOMMIT_LOCK_LEVEL_CHANGE)

Abra el archivo y realice varios cambios Por ejemplo actualice antildeada o suprima registros

Basaacutendose en un distintivo guarde o descarte las transaccionesif (saveChanges)

aFilecommit()else

aFilerollback()

Cierre el archivoaFileclose()

Finalice el control de compromiso para la conexioacutenaFileendCommitmentControl()

Informacioacuten relacionadaJavadoc AS400File

Clase SaveFileLa clase SaveFile representa un archivo de guardar en un servidorInformacioacuten relacionadaJavadoc de SaveFile

180 IBM Toolbox para Java IBM Toolbox para Java

Clase ServiceProgramCallLa clase ServiceProgramCall de IBM Toolbox para Java permite al usuario llamar a un programa deservicio IBM i ServiceProgramCall es una subclase de la clase ProgramCall que se utiliza para llamar aprogramas de IBM i Si desea llamar a un programa de IBM i haacutegalo con la clase ProgramCall

La clase ServiceProgramCall hace que sea posible llamar a un programa de servicio de IBM i pasar datosa un programa de servicio mediante paraacutemetros de entrada y acceder a los datos devueltos por elprograma de servicio mediante paraacutemetros de salida Al utilizar la clase ServiceProgramCall el objetoAS400 se conecta al servidor En Gestioacuten de conexiones encontraraacute informacioacuten acerca de coacutemo segestionan las conexiones

El comportamiento predeterminado consiste en que los programas de servicio se ejecuten en un trabajoservidor aparte aun cuando el programa Java y el programa de servicio esteacuten en el mismo servidorPuede alterar temporalmente el comportamiento predeterminado y hacer que el programa de servicio seejecute en el trabajo Java mediante el meacutetodo setThreadSafe() heredado de ProgramCall

Utilizacioacuten de la clase ServiceProgramCall

Para poder utilizar la clase ServiceProgramCall debe asegurarse de que se cumplen estos requisitosv El programa de servicio debe estar en un servidorv No puede pasar maacutes de siete paraacutemetros al programa de serviciov El valor de retorno del programa de servicio es vaciacuteo (void) o de tipo numeacuterico

Trabajar con objetos ProgramParameter

La clase ProgramParameter funciona junto con la clase ServiceProgramCall para pasar datos deparaacutemetro a un programa de servicio de IBM i o desde eacutel Para pasar datos de entrada al programa deservicio utilice setInputData()

Para solicitar la cantidad de datos de salida que desea que se devuelva utilice setOutputDataLength()Para recuperar los datos de salida una vez que el programa de servicio ha terminado de ejecutarse utilicegetOutputData() La clase ServiceProgramCall ademaacutes de conocer los datos en siacute necesita conocer coacutemoha de pasar los datos de paraacutemetro al programa de servicio El meacutetodo setParameterType() deProgramParameter permite proporcionar esta informacioacuten El tipo indica si el paraacutemetro se pasa por valoro por referencia En los dos casos los datos se enviacutean desde el cliente al servidor Una vez que los datosesteacuten en el servidor eacuteste utiliza el tipo de paraacutemetro para llamar correctamente al programa de servicio

Todos los paraacutemetros tendraacuten el formato de una matriz de bytes Por lo tanto para realizar la conversioacutenentre los formatos de IBM i y Java se utilizan las clases de conversioacuten y descripcioacuten de datos

Javadoc ServiceProgramCallJavadoc ProgramCallJavadoc ProgramParameter

Clase SubsystemLa clase Subsystem representa un subsistema en el servidorInformacioacuten relacionadaJavadoc de Subsystem

Clases SystemStatusLas clases SystemStatus permiten recuperar informacioacuten sobre el estado del sistema asiacute como recuperar ycambiar informacioacuten de agrupacioacuten del sistema

El objeto SystemStatus le permite recuperar informacioacuten sobre el estado con los siguientes meacutetodos

IBM Toolbox para Java 181

v getUsersCurrentSignedOn() devuelve el nuacutemero de usuarios que tienen iniciada una sesioacuten en elsistema en este momento

v getUsersTemporarilySignedOff() devuelve el nuacutemero de trabajos interactivos desconectadosv getDateAndTimeStatusGathered() devuelve la fecha y la hora del momento en que se recopiloacute

informacioacuten sobre el estado del sistemav getJobsInSystem() devuelve el nuacutemero total de trabajos de usuario y del sistema que se estaacuten

ejecutando en este momentov getBatchJobsRunning() devuelve el nuacutemero de trabajos por lotes que se ejecutan actualmente en el

sistemav getBatchJobsEnding() devuelve el nuacutemero de trabajos por lotes que estaacuten en proceso de finalizacioacutenv getSystemPools() devuelve una enumeracioacuten que contiene un objeto SystemPool para cada una de las

agrupaciones del sistema

Ademaacutes de los meacutetodos que hay en la clase SystemStatus tambieacuten puede acceder a SystemPool medianteSystemStatus SystemPool le permite obtener informacioacuten acerca de las agrupaciones del sistema yrealizar cambios en dicha informacioacuten

Ejemplo

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Este ejemplo muestra coacutemo se utiliza la puesta en memoria cacheacute con la clase SystemStatusAS400 system = new AS400(MyAS400)SystemStatus status = new SystemStatus(system)

Active la puesta en memoria cacheacute De forma predeterminada estaacute desactivadastatussetCaching(true)

Esto recuperaraacute el valor a partir del sistema Cada llamada ulterior utilizaraacute el valor puesto en memoria cacheacute en vez de recuperarlo del sistemaint jobs = statusgetJobsInSystem()

Realice aquiacute otras operaciones

Asiacute se averigua si la puesta en memoria cacheacute todaviacutea estaacute habilitadaif (statusisCaching())

Esto recuperaraacute el valor a partir de la memoria cacheacutejobs = statusgetJobsInSystem()

Vaya al sistema la proacutexima vez aunque la puesta en memoria cacheacute esteacute habilitadastatusrefreshCache()

Esto recuperaraacute el valor a partir del sistemajobs = statusgetJobsInSystem()

Desactive la puesta en memoria cacheacute Todas las llamadas ulteriores iraacuten al sistemastatussetCaching(false)

Esto recuperaraacute el valor a partir del sistemajobs = statusgetJobsInSystem()

Javadoc SystemStatus

182 IBM Toolbox para Java IBM Toolbox para Java

Clase SystemPool

La clase SystemPool permite recuperar y cambiar informacioacuten de agrupacioacuten del sistema

La clase SystemPool incluye estos meacutetodosv El meacutetodo getPoolSize() que devuelve el tamantildeo de la agrupacioacuten y el meacutetodo setPoolSize() que lo

establecev El meacutetodo getPoolName() que recupera el nombre de la agrupacioacuten y el meacutetodo setPoolName() que

lo establecev El meacutetodo getReservedSize() que devuelve la cantidad de almacenamiento de la agrupacioacuten reservado

para uso del sistemav El meacutetodo getDescription() que devuelve la descripcioacuten de la agrupacioacuten del sistemav El meacutetodo getMaximumActiveThreads() que devuelve el nuacutemero maacuteximo de hebras que pueden estar

activas en la agrupacioacuten en cualquier momentov El meacutetodo setMaximumFaults() que establece la directriz de maacuteximo de faltas por segundo que se

utilizaraacute para esta agrupacioacuten del sistemav El meacutetodo setPriority() que establece la prioridad de esta agrupacioacuten del sistema en relacioacuten con las

demaacutes agrupaciones del sistema

Ejemplo

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree un objeto AS400AS400 as400 = new AS400(nombre del sistema)

Construya un objeto agrupacioacuten del sistemaSystemPool systemPool = new SystemPool(as400SPOOL)

Obtenga la opcioacuten de paginacioacuten de la agrupacioacuten del sistemaSystemoutprintln(Opcioacuten de paginacioacuten +systemPoolgetPagingOption())

Informacioacuten relacionadaJavadoc SystemPool

Valores del sistemaLas clases de valores del sistema permiten a un programa Java recuperar y cambiar valores del sistema yatributos de red Tambieacuten puede definir su propio grupo para contener los valores del sistema que desee

Un objeto SystemValue principalmente contiene la informacioacuten siguientev Nombrev Descripcioacutenv Releasev Valor

Mediante la clase SystemValue recupere un uacutenico valor del sistema con el meacutetodo getValue() y cambieun valor del sistema con el meacutetodo setValue()

Asimismo puede recuperar informacioacuten de grupo sobre un valor del sistema determinadov Para recuperar el grupo definido por el sistema al que pertenece un valor del sistema utilice el meacutetodo

getGroup()v Para recuperar el grupo definido por el usuario al que pertenece un objeto SystemValue (si existe)

utilice los meacutetodos getGroupName() y getGroupDescription()

IBM Toolbox para Java 183

El valor de un valor del sistema siempre que se recupera por primera vez se obtiene a partir delservidor y se almacena en la memoria cacheacute En las recuperaciones ulteriores el valor que se devuelve esel que estaacute en la memoria cacheacute Si en vez del valor almacenado en la memoria cacheacute se desea obtener elvalor actual se debe utilizar un meacutetodo clear() para borrar la memoria cacheacute actual

Lista de valores del sistema

SystemValueList representa una lista de valores del sistema del servidor especificado La lista sesubdivide en varios grupos definidos por el sistema que permiten al programa Java accedersimultaacuteneamente a parte de los valores del sistema

Grupo de valores del sistema

SystemValueGroup representa un conjunto definido por el usuario de valores del sistema y atributos dered No se trata de un contenedor sino de una faacutebrica para generar y mantener conjuntos exclusivos devalores del sistema

Puede crear un objeto SystemValueGroup especificando uno de los grupos definidos por el sistema (unade las constantes de la clase SystemValueList) o especificando una matriz de nombres de valores delsistema

Puede antildeadir de forma individual los nombres de valores del sistema para incluir en el grupo medianteel meacutetodo add() Asimismo puede eliminarlos mediante el meacutetodo remove()

Una vez que el objeto SystemValueGroup se haya llenado con los nombres de valores del sistemadeseados obtenga los objetos SystemValue reales del grupo llamando al meacutetodo getSystemValues() Deesta forma un objeto SystemValueGroup toma un conjunto de nombres de valores del sistema y generaun vector de objetos SystemValue todos ellos con el sistema el nombre de grupo y la descripcioacuten degrupo del objeto SystemValueGroup

Para renovar un vector de todos los objetos SystemValue a la vez utilice el meacutetodo refresh()

Ejemplos de coacutemo se utilizan las clases SystemValue y SystemValueList

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se crea y recupera un valor del sistemaCree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto valor del sistema que represente los segundos actuales en el sistemaSystemValue sysval = new SystemValue(sys QSECOND)

Recupere el valorString second = (String)sysvalgetValue()

En este momento QSECOND se pone en memoria cacheacute Borre la memoria cacheacute para recuperar elvalor maacutes actualizado del sistemasysvalclear()second = (String)sysvalgetValue()

Cree una lista de valores del sistemaSystemValueList list = new SystemValueList(sys)

Recupere la totalidad de los valores de fechahora del sistema

184 IBM Toolbox para Java IBM Toolbox para Java

Vector vec = listgetGroup(SystemValueListGROUP_DATTIM)

Desconeacutectese del sistemasysdisconnectAllServices()

Ejemplos de coacutemo se utiliza la clase SystemValueGroup

El ejemplo siguiente muestra coacutemo se construye un grupo de nombres de valores del sistema y coacutemodespueacutes se trabaja con ellosCree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un grupo de valores del sistema que inicialmente representa todos los atributos de red del sistemaString name = My GroupString description = Es uno de mis valores del sistemaSystemValueGroup svGroup = new SystemValueGroup(sys name description SystemValueListGROUP_NET)

Antildeada al grupo algunos nombres de valores del sistema maacutes y elimine algunos no deseadossvGroupadd(QDATE)svGroupadd(QTIME)svGroupremove(NETSERVER)svGroupremove(SYSNAME)

Obtenga los objetos SystemValue reales Se devuelven dentro de un vectorVector sysvals = svGroupgetSystemValues()

Observaraacute que es uno de los valores indicados como mis valores del sistemaSystemValue mySystemValue = (SystemValue)sysvalselementAt(0)Systemoutprintln(mySystemValuegetName()+ - +mySystemValuegetGroupDescription())

Podemos antildeadir al grupo otro objeto SystemValue de otro sistemaAS400 sys2 = new AS400(otherSystemmyCompanycom)SystemValue sv = new SystemValue(sys2 QDATE)sysvalsaddElement(sv)

Ahora renueve el grupo completo de todos los valores del sistema a la vezNo importa si algunos valores del sistema son de servidores System i distintosNo importa si algunos valores del sistema se han generado con SystemValueGroup y otros noSystemValueGrouprefresh(sysvals)

Desconeacutectese de los sistemassysdisconnectAllServices()sys2disconnectAllServices()

Javadoc SystemValueJavadoc SystemValueListJavadoc SystemValueGroup

Clase TraceLa clase Trace permite al programa Java anotar puntos de rastreo y mensajes de diagnoacutestico Estainformacioacuten ayuda a reproducir y a diagnosticar problemas

Nota tambieacuten puede establecer el rastreo mediante las propiedades de rastreo del sistema

La clase Trace anota las siguientes categoriacuteas de informacioacuten

Categoriacutea de informacioacuten Descripcioacuten

Conversioacuten Anota las conversiones de juego de caracteres entre laspaacuteginas de coacutedigos y Unicode Solo utilizan estacategoriacutea las clases de IBM Toolbox para Java

IBM Toolbox para Java 185

Categoriacutea de informacioacuten Descripcioacuten

Corriente de datos Anota los datos que fluyen entre el sistema y elprograma Java Solo utilizan esta categoriacutea las clases deIBM Toolbox para Java

Diagnoacutestico Anota informacioacuten sobre el estado

Error Anota errores adicionales que ocasionan una excepcioacuten

Informacioacuten Rastrea el flujo a traveacutes de un programa

PCML Esta categoriacutea se utiliza para determinar coacutemo interpretaPCML los datos que se enviacutean al servidor y que sereciben del mismo

Proxy Las clases de IBM Toolbox para Java utilizan estacategoriacutea para anotar el flujo de datos entre el cliente y elservidor proxy

Aviso Anota informacioacuten acerca de los errores de los que elprograma ha podido recuperarse

Total Esta categoriacutea permite habilitar o inhabilitar el rastreopara todas las categoriacuteas anteriores a la vez Lainformacioacuten de rastreo no se puede anotar directamenteen esta categoriacutea

Las clases de IBM Toolbox para Java tambieacuten utilizan las categoriacuteas de rastreo Cuando un programa Javahabilita las anotaciones la informacioacuten de IBM Toolbox para Java se incluye junto con la informacioacutenregistrada por la aplicacioacuten

El rastreo se puede habilitar para una sola categoriacutea o para un conjunto de categoriacuteas Una vezseleccionadas las categoriacuteas utilice el meacutetodo setTraceOn para activar y desactivar el rastreo Para escribirlos datos en las anotaciones se utiliza el meacutetodo log

Puede enviar los datos de rastreo de distintos componentes a anotaciones separadas Los datos derastreo de forma predeterminada se escriben en las anotaciones predeterminadas Utilice el rastreo decomponentes para escribir datos de rastreo especiacuteficos de la aplicacioacuten en unas anotaciones distintas o enla salida estaacutendar El rastreo de componentes permite separar faacutecilmente los datos de rastreo de unaaplicacioacuten especiacutefica de los demaacutes datos

Una cantidad excesiva de anotaciones puede afectar al rendimiento Utilice el meacutetodo isTraceOn paraconsultar el estado actual del rastreo El programa Java puede emplear este meacutetodo para determinar siconstruye el registro de rastreo antes de llamar al meacutetodo log Llamar al meacutetodo log cuando el rastreoestaacute desactivado no es un error pero se invierte maacutes tiempo

El valor predeterminado es escribir informacioacuten de anotaciones en la salida estaacutendar Para redirigir lasanotaciones a un archivo llame al meacutetodo setFileName() desde la aplicacioacuten Java En general esto solofunciona para las aplicaciones Java porque la mayoriacutea de los navegadores no dan acceso a los appletspara escribir en el sistema de archivos local

Las anotaciones estaacuten desactivadas de forma predeterminada Los programas Java proporcionan alusuario un procedimiento que le permite activar las anotaciones para que le resulte faacutecil habilitarlas Porejemplo la aplicacioacuten puede realizar un anaacutelisis para obtener un paraacutemetro de liacutenea de mandatos queindique queacute categoriacutea de datos se anota El usuario puede establecer este paraacutemetro cuando se necesiteinformacioacuten de anotaciones

186 IBM Toolbox para Java IBM Toolbox para Java

Ejemplos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase Trace

Ejemplo de coacutemo se utiliza setTraceOn() y de la escritura de datos en unas anotaciones mediante elmeacutetodo log

Habilite las anotaciones de diagnoacutestico informacioacuten y avisoTracesetTraceDiagnosticOn(true)TracesetTraceInformationOn(true)TracesetTraceWarningOn(true)

Active el rastreoTracesetTraceOn(true)

En este punto del programa Java escriba en las anotacionesTracelog(TraceINFORMATION Se acaba de entrar en la clase xxx meacutetodo xxx)

Desactive el rastreoTracesetTraceOn(false)

Ejemplo coacutemo se utiliza Trace

En el siguiente coacutedigo el meacutetodo 2 es la manera preferible de utilizar el rastreo Meacutetodo 1 - construya un registro de rastreo y luego llame al meacutetodo log y deje que la clase de rastreo determine si los datos deben anotarse Este meacutetodo funcionaraacute pero seraacute maacutes lento que el coacutedigo siguienteString traceData = new String(Se acaba de entrar en la clase xxx datos = )traceData = traceData + data + estado = + stateTracelog(TraceINFORMATION traceData)

Meacutetodo 2 - compruebe el estado de las anotaciones antes de incorporar la informacioacuten a las anotaciones Este meacutetodo es maacutes raacutepido cuando el rastreo no estaacute activoif (TraceisTraceOn() ampamp TraceisTraceInformationOn())

String traceData = new String(se acaba de entrar en la clase xxx datos = )traceData = traceData + data + estado = + stateTracelog(TraceINFORMATION traceData)

Ejemplo coacutemo se utiliza el rastreo de componentes Cree una serie de componente Es maacutes eficaz crear un objeto que muchos literales StringString myComponent1 = commyCompanyxyzComponentString myComponent2 = commyCompanyabcComponent

Enviacutee los datos de rastreo de IBM Toolbox para Java y los de componente a archivos distintos El rastreo contendraacute toda la informacioacuten de rastreo mientras que cada archivo de anotaciones de componente solo contendraacute la informacioacuten de rastreo especiacutefica de ese componente Si no se especifica un archivo de rastreo todos los datos de rastreo iraacuten a la salida estaacutendar con el componente especificado frente a cada uno de los mensajes de rastreo

TracesetFileName(cbitbucket) TracesetFileName(myComponent1 cComponent1log) TracesetFileName(myComponent2 cComponent2log)

TracesetTraceOn(true) Active el rastreoTracesetTraceInformationOn(true) Habilite los mensajes informativos

IBM Toolbox para Java 187

Anote los datos de rastreo especiacuteficos de componente o los generales de IBM Toolbox para Java

TracesetFileName(cbitbucket)TracesetFileName(myComponent1 cComponent1log)

Informacioacuten relacionadaJavadoc Trace

Clases de usuarios y gruposLas clases de usuarios y grupos de IBM Toolbox para Java permiten obtener una lista de los usuarios ygrupos de usuarios existentes en el servidor asiacute como informacioacuten acerca de cada usuario mediante unprograma Java

La informacioacuten de usuario que se puede recuperar comprende la fecha del inicio de sesioacuten anterior elestado la fecha del uacuteltimo cambio de contrasentildea la fecha de caducidad de la contrasentildea y la clase deusuario Cuando acceda al objeto User utilice el meacutetodo setSystem() para establecer el nombre delsistema y el meacutetodo setName() para establecer el nombre de usuario Tras estos pasos utilice el meacutetodoloadUserInformation() para obtener la informacioacuten del servidor

El objeto UserGroup representa un usuario especial cuyo perfil de usuario es un perfil de grupo Con elmeacutetodo getMembers() puede obtenerse una lista de los usuarios que son miembros del grupo

El programa Java puede iterar por la lista utilizando una enumeracioacuten Todos los elementos de laenumeracioacuten son objetos Usergt por ejemplo

Cree un objeto AS400AS400 system = new AS400 (mySystemmyCompanycom)

Cree el objeto UserListUserList userList = new UserList (system)

Obtenga la lista de todos los usuarios y gruposEnumeration enum = userListgetUsers ()

Itere por la listawhile (enumhasMoreElements ())

User u = (User) enumnextElement ()Systemoutprintln (u)

Recuperar informacioacuten acerca de los usuarios y grupos

Utilice un objeto UserList para obtener una lista dev Todos los usuarios y gruposv Solo gruposv Todos los usuarios que son miembros de alguacuten grupov Todos los usuarios que no son miembros de alguacuten grupo

La uacutenica propiedad del objeto UserList que debe establecerse es el objeto AS400 que representa el sistemadel que se debe recuperar la lista de usuarios

De forma predeterminada se devuelven todos los usuarios Utilice una combinacioacuten de los meacutetodos deUserList setUserInfo() y setGroupInfo() para especificar exactamente queacute usuarios se devuelven

Javadoc UserJavadoc UserGroupJavadoc UserList

188 IBM Toolbox para Java IBM Toolbox para Java

Javadoc AS400ldquoEjemplo coacutemo se utiliza UserList para listar todos los usuarios de un grupo determinadordquo en lapaacutegina 472Este coacutedigo fuente es un ejemplo de UserList de IBM Toolbox para Java Este programa lista todos losusuarios de un grupo determinado

Clase UserSpaceLa clase UserSpace representa un espacio de usuario en el servidor Los paraacutemetros obligatorios son elnombre del espacio de usuario y el objeto AS400 que representa el servidor al que pertenece el espacio deusuario

En la clase UserSpace hay meacutetodos que permiten realizar estas tareasv Crear un espacio de usuariov Suprimir un espacio de usuariov Leer en un espacio de usuariov Escribir en un espacio de usuariov Obtener los atributos de un espacio de usuario Un programa Java puede obtener los atributos de valor

inicial valor de longitud y ampliacioacuten automaacutetica de un espacio de usuariov Establecer los atributos de un espacio de usuario Un programa Java puede establecer los atributos de

valor inicial valor de longitud y ampliacioacuten automaacutetica de un espacio de usuario

El objeto UserSpace requiere el nombre de viacutea de acceso del sistema de archivos integrado del programaEn Nombres de viacutea de acceso del sistema de archivos integrado puede encontrar maacutes informacioacuten

Al utilizar la clase UserSpace el objeto AS400 se conecta al servidor En Gestioacuten de conexiones encontraraacuteinformacioacuten acerca de coacutemo se gestionan las conexiones

El siguiente ejemplo crea un espacio de usuario y luego escribe datos en eacutel

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto espacio de usuarioUserSpace US = new UserSpace(sys

QSYSLIBMYLIBLIBMYSPACEUSRSPC)

Use el meacutetodo create para crear el espacio de usuario en el servidorUScreate(10240 El tamantildeo inicial es 10 KB

true Sustituir si el espacio de usuario ya existe Ninguacuten atributo ampliado(byte) 0x00 El valor inicial es nullCreado por un programa Java Descripcioacuten del espacio de usuarioUSE) La autorizacioacuten de uso puacuteblico sobre el

espacio de usuario es USE

Use el meacutetodo write para escribir bytes en el espacio de usuarioUSwrite(Escribir esta serie en el espacio de usuario 0)

Javadoc UserSpaceJavadoc AS400

IBM Toolbox para Java 189

Clases commtraceLas clases commtrace de IBM Toolbox para Java permiten a los programas Java trabajar con los datos derastreo de comunicaciones de una descripcioacuten de liacutenea de LAN (Ethernet o Token Ring) especificada Elpaquete commtrace incluye una clase que se puede ejecutar como un programa de utilidad autoacutenomopara dar formato a los datos de rastreo de comunicaciones

Cuando se vuelca un rastreo de comunicaciones de un servidor en un archivo continuo la informacioacuten seguarda en un formato binario Las clases commtrace permiten trabajar con los diversos componentes delarchivo continuo

Nota los archivos de rastreo de comunicaciones pueden contener informacioacuten confidencial como porejemplo contrasentildeas sin cifrar Si el archivo de rastreo de comunicaciones se encuentra en el servidorsolo pueden acceder a los datos de rastreo los usuarios con la autorizacioacuten especial SERVICE Si mueveel archivo a un cliente aseguacuterese de proteger el archivo de forma adecuada Para obtener maacutesinformacioacuten sobre los rastreos de comunicaciones consulte los enlaces que encontraraacute al final de estapaacutegina

Utilice las clases commtrace para llevar a cabo las tareas siguientesv Dar formato a los datos de rastreo purosv Analizar los datos para extraer la informacioacuten deseada Puede analizar tanto los datos puros como los

datos con formato siempre que haya utilizado las clases commtrace para dar formato a los datos

Otras clases del paquete comibmas400commtrace que no aparecen aquiacute son especiacuteficas del tipo de datosde rastreo con el que se desea trabajar Para obtener maacutes informacioacuten sobre los rastreos decomunicaciones y todas las clases commtrace consulte la seccioacuten Rastreo de comunicaciones

Modelo de commtraceLa ilustracioacuten siguiente muestra coacutemo las clases commtrace se corresponden con un archivo de rastreo decomunicaciones El graacutefico tambieacuten indica los convenios de denominacioacuten que utilizan las clasescommtrace para los componentes de un rastreo de comunicaciones

Figura 1 modelo de commtrace

190 IBM Toolbox para Java IBM Toolbox para Java

Cada trama (Frame) del archivo de rastreo contiene dos secciones iniciales (que proporcionan informacioacutengeneral sobre el contenido de la trama) y el paquete que el servidor ha transmitido a otro punto de lared

La seccioacuten con los primeros 24 bytes de datos contiene informacioacuten general sobre el contenido de latrama como por ejemplo el nuacutemero de trama y la longitud de los datos Utilice la clase Frame paraprocesar esta informacioacuten

Clases Format y FormatPropertiesLa clase Format de IBM Toolbox para Java lee los datos puros y los datos con formato de un rastreo decomunicaciones FormatProperties establece las propiedades del objeto Format como las horas de inicio yfinalizacioacuten las direcciones IP y los puertos

La clase Format sirve de interfaz entre el programa llamador y las tramas del rastreo La claseFormatProperties permite establecer y recuperar propiedades que determinan coacutemo se comporta el objetoFormat cuando encuentra informacioacuten en las tramas del rastreo

Clase Format

Utilice la clase Format para leer tanto los datos de rastreo puros como los datos de rastreo a los que ya seha dado formato con las clases commtrace

Nota no puede emplear las clases commtrace para leer un rastreo de comunicaciones al que ha dadoformato mediante el control CL Imprimir rastreo de comunicaciones (PRTCMNTRC)

Utilice la clase Format para analizar y formatear la informacioacuten de un rastreo y a continuacioacuten enviaresa informacioacuten formateada a un archivo o dispositivo de impresioacuten Ademaacutes puede crear un

IBM Toolbox para Java 191

componente frontal graacutefico que visualice la informacioacuten en una aplicacioacuten autoacutenoma o en un navegadorSi desea seleccionar uacutenicamente datos especiacuteficos utilice la clase Format para proporcionar esainformacioacuten al programa Java Por ejemplo puede emplear la clase Format para leer direcciones IP de unrastreo y utilizar esos datos en su programa

Los constructores de Format aceptan argumentos que representan datos sin formato tales como un objetoIFSFileInputStream un archivo local o el archivo de rastreo binario Para visualizar un rastreo que ya haformateado utilice el constructor de Format predeterminado y despueacutes utilice FormatopenIFSFile() oFormatopenLclFile() para especificar el archivo formateado que desea mostrar

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo se puede visualizar un rastreo guardado oformatear un rastreo binario

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Ejemplo visualizar un rastreo guardadoFormat fmt = new Format()fmtopenLclFile(pathtofile)

Lea el proacutelogoSystemoutprintln(fmtgetRecFromFile()) El nuacutemero total de registros del rastreo TCP y no TCPSystemoutprintln(Total de registros + fmtgetIntFromFile())String rec Lea los registros hasta llegar al finalwhile((rec = fmtgetRecFromFile())=null) Systemoutprintln(rec)

Ejemplo formatear un rastreo binario Cree un objeto FormatProperties De forma predeterminada efectuacutee una visualizacioacuten completaFormatProperties fmtprop = new FormatProperties()

Format fmt = new Format(pathtofile) Establece las propiedades de filtrado para este formatofmtsetFilterProperties(fmtprop)fmtsetOutFile(pathtooutputfile) Formatee el proacutelogofmtformatProlog() Formatee el rastreo y enviacutee los datos al archivo especificadofmttoLclBinFile()

Ejecutar Format como un programa de utilidad autoacutenomo

tambieacuten puede ejecutar la clase Format como un programa de utilidad autoacutenomo Encontraraacute maacutesinformacioacuten en este tema

Ejecutar Format como un programa autoacutenomo

Clase FormatProperties

Utilice la clase FormatProperties para especificar y recuperar las propiedades del objeto Format Dicho deotro modo cuando utilice la clase Format para enviar la informacioacuten a un archivo utilice la claseFormatProperties para filtrar la informacioacuten que desea enviar

192 IBM Toolbox para Java IBM Toolbox para Java

Estas propiedades especifican coacutemo se desea que el objeto Format maneje la informacioacuten que encuentraen las tramas del rastreo de comunicaciones El comportamiento predeterminado establece que el objetoFormat omitiraacute las propiedades para las que no se haya especificado un valor concreto

La clase FormatProperties proporciona constantes que se utilizaraacuten para establecer las propiedades Elestablecimiento de propiedades permite al objeto Format verificar queacute filtros se desea utilizar Porejemplo el coacutedigo siguiente establece que un objeto Format visualice un diaacutelogo de progreso y novisualice las tramas de difusioacuten

FormatProperties prop = new FormatProperties()propsetProgress(FormatPropertiesTRUE)propsetBroadcast(FormatPropertiesNO)

La mayor parte de las propiedades estaacuten disponibles para el objeto Format como filtros que se establecenexpliacutecitamente para incluir datos especiacuteficos Una vez establecidos los filtros el objeto Format visualizauacutenicamente los datos que coinciden con esos filtros Por ejemplo el coacutedigo siguiente establece un filtroque visualiza las tramas producidas entre una hora de inicio y una hora de finalizacioacuten determinadas

FormatProperties prop = new FormatProperties() Establezca el filtro en las horas de inicio y finalizacioacuten 230 pm y 245 pm GMT del 22 de julio de 2002 La hora se expresa como una indicacioacuten de la hora Unix(TM) que se basa en el origen estaacutendar 000000 GMT del 01011970propsetStartTime(1027348200)propsetEndTime(1027349100)

Ejemplo

El ejemplo siguiente muestra coacutemo se pueden emplear muchas de las clases commtrace entre ellas lasclases Format y FormatProperties para visualizar informacioacuten de rastreo en el supervisor

ldquoEjemplo coacutemo se utilizan las clases commtracerdquo en la paacutegina 197Javadoc FormatJavadoc FormatProperties

Ejecutar Format como un programa autoacutenomo

Ademaacutes de utilizar la clase Format en los programas Java puede ejecutarlo como un programa deutilidad de liacutenea de mandatos autoacutenomo para dar formato a un rastreo de comunicaciones El programaconecta un objeto IFSFileOutputStream con el archivo de salida especificado y escribe los datos en elmismo

La ejecucioacuten de Format como un programa de utilidad autoacutenomo permite dar formato a archivos con lacapacidad de proceso y el espacio de almacenamiento del servidor

Ejecutar Format desde una liacutenea de mandatos

Para ejecutar el programa de utilidad Format desde una solicitud de liacutenea de mandatos utilice elmandato siguiente

java comibmas400commtraceFormat [opciones]

donde [opciones] es una o varias de las opciones disponibles Las opciones son las siguientesv El sistema al que desea conectarsev El ID de usuario y la contrasentildea del sistemav El rastreo de comunicaciones que desea analizarv El archivo en el que desea almacenar los resultados

IBM Toolbox para Java 193

Para obtener una lista completa de las opciones disponibles consulte la documentacioacuten de consulta deJavadocs correspondiente a la clase Format

Ejecutar Format de forma remota

Para ejecutar esta clase de forma remota utilice la clase JavaApplicationCall Construya un objeto JavaApplicationCalljaCall = new JavaApplicationCall(sys)

Establezca la aplicacioacuten Java que desea ejecutarjaCallsetJavaApplication(comibmas400utilcommtraceFormat)

Establezca la variable de entorno classpath que utiliza la JVM en el servidor para que pueda encontrar la clase que debe ejecutarjaCallsetClassPath(QIBMProdDataOS400JT400libJT400Nativejar)

String[] args2 = -c true -t pathtotrace -o pathtotraceextension

jaCallsetParameters(args2)

if (jaCallrun() = true) La llamada ha fallado

Informacioacuten relacionadaJavadoc Format

Clase PrologLa clase Prolog de IBM Toolbox para Java representa la seccioacuten de 256 bytes inicial de un rastreo decomunicaciones para una descripcioacuten de liacutenea de LAN Prolog contiene informacioacuten general sobre elrastreo como las horas de inicio y finalizacioacuten el nuacutemero de bytes recogidos etc Utilice la clase Prologpara recuperar informacioacuten de esta seccioacuten de rastreo que despueacutes puede imprimir visualizar filtrar oprocesar de alguacuten otro modo

La clase Prolog proporciona meacutetodos que permiten llevar a cabo diversas acciones tales como lassiguientesv Recuperar valores de los campos del proacutelogo como por ejemplo la descripcioacuten del rastreo el tipo

Ethernet el sentido de los datos la direccioacuten IP etcv Devolver una serie con formato que contiene todos los campos del proacutelogov Probar los campos del proacutelogo para ver si hay datos no vaacutelidos

Ejemplo

El ejemplo siguiente muestra coacutemo se pueden emplear muchas de las clases commtrace entre ellas laclase Prolog para visualizar informacioacuten de rastreo en el supervisor

ldquoEjemplo coacutemo se utilizan las clases commtracerdquo en la paacutegina 197Informacioacuten relacionadaJavadoc Prolog

Clase FrameLa clase Frame representa todos los datos de un registro o trama de un rastreo de comunicaciones parauna descripcioacuten de liacutenea de LAN

Cada trama contiene tres secciones de datos principales que aparecen en el orden siguiente1 Una seccioacuten de 24 bytes inicial que contiene informacioacuten general sobre la trama2 Informacioacuten general sobre la trama (que representa la clase LanHeader)

194 IBM Toolbox para Java IBM Toolbox para Java

3 Los datos del paquete (que representan las subclases de la clase abstracta IPacket)

Utilice la clase Frame para analizar y crear una representacioacuten imprimible de los datos de la trama Laclase Frame mantiene los datos del paquete en una estructura a modo de lista enlazada que utilizaformatos especiacuteficos Para obtener informacioacuten especiacutefica sobre los posibles formatos de los datos delpaquete de una trama y para obtener informacioacuten general sobre la estructura de una trama consulteldquoModelo de commtracerdquo en la paacutegina 190

La clase Frame proporciona meacutetodos que permiten llevar a cabo diversas acciones tales como lassiguientesv Recuperar el paquete de datosv Recuperar el nuacutemero el estado y el tipo de la tramav Devolver datos especiacuteficos de la trama como una serie con formato

Puede utilizar el proceso siguiente para acceder a los datos de un paquete1 Utilice FramegetPacket() para recuperar el paquete2 Acceda a los datos de la cabecera llamando a PacketgetHeader()3 Tras recuperar la cabecera llame a HeadergetType() para encontrar el tipo4 Utilice la subclase Header especiacutefica para acceder a los datos asociados con esa cabecera (la carga uacutetil)

y las cabeceras adicionales

Ejemplo

El ejemplo siguiente muestra coacutemo se pueden emplear muchas de las clases commtrace entre ellas lasclases Format y FormatProperties para visualizar informacioacuten de rastreo en el supervisor

ldquoEjemplo coacutemo se utilizan las clases commtracerdquo en la paacutegina 197

Clase LanHeaderLa clase LanHeader recupera informacioacuten de la seccioacuten de datos que se encuentra en una ocasioacuten cercadel principio de una trama en la seccioacuten inicial de 24 bytes Normalmente esta seccioacuten contieneinformacioacuten especiacutefica del hardware con datos sobre la trama tales como el nuacutemero de trama y lalongitud de los datos

Utilice la clase LanHeader para analizar e imprimir la informacioacuten de LanHeader LanHeader contiene eltipo de informacioacuten siguientev El byte que identifica el inicio de la primera cabecera de este paquetev Las direcciones de control de acceso al medio (MAC)v Las direcciones Token Ring y la informacioacuten de direccionamiento

LanHeader tambieacuten proporciona dos meacutetodos que permiten devolver una serie con formato con losiguientev Datos de direccionamiento Token Ringv Direcciones MAC de origen direcciones MAC de destino formato de la trama y tipo de tramaInformacioacuten relacionadaJavadoc LanHeader

Clase IPPacketLa clase IPPacket de IBM Toolbox para Java representa todos los paquetes de datos que la red hatransmitido para esta trama durante el rastreo de comunicaciones IPPacket es una clase abstracta por loque deberaacuten utilizarse las diversas subclases concretas para procesar las cabeceras y los datos de lospaquetes

IBM Toolbox para Java 195

Las subclases de IPPacket son las siguientesv ARPPacketv IP4Packetv IP6Packetv UnknownPacket

Las clases Packet permiten recuperar el tipo de paquete y acceder a los datos puros (la cabecera y lacarga uacutetil) que contiene el paquete Todas las subclases utilizan constructores parecidos e incluyen unmeacutetodo adicional que devuelve una versioacuten imprimible del contenido del paquete como una serie

Todos los constructores de las clases Packet toman como argumento una matriz de bytes de los datos delpaquete pero ARPPacket tambieacuten requiere un entero que especifique el tipo de trama Al crear unainstancia de una clase Packet automaacuteticamente se crea el objeto Header correspondiente

Las clases Packet proporcionan meacutetodos que permiten llevar a cabo diversas acciones tales como lassiguientesv Recuperar el nombre y el tipo del paquetev Establecer el tipo del paquetev Devolver el objeto Header de nivel superior asociado al paquetev Devolver todos los datos del paquete como una serie sin formatov Devolver datos especiacuteficos del paquete como una serie con formato

Javadoc IPPacketJavadoc ARPPacketJavadoc IP4PacketJavadoc IP6PacketJavadoc UnknownPacket

Clase HeaderLa clase Header es la superclase abstracta para crear clases que representan tipos de cabeceras depaquetes especiacuteficos Las cabeceras de paquetes incluyen los datos asociados (o carga uacutetil) que puedenser otras cabeceras y cargas uacutetiles

Las subclases de Header son las siguientesv ARPHeaderv ExtHeaderv ICMP4Headerv ICMP6Headerv IP4Headerv IP6Headerv TCPHeaderv UDPHeaderv UnknownHeader

Las clases Header permiten recuperar los datos de la cabecera y la carga uacutetil Una cabecera puedeencapsular otras cabeceras y sus cargas uacutetiles

Al crear una instancia de una clase Packet automaacuteticamente se crea el objeto Header correspondiente Lasclases Header proporcionan meacutetodos que permiten llevar a cabo diversas acciones tales como lassiguientesv Devolver la longitud el nombre y el tipo de la cabecera

196 IBM Toolbox para Java IBM Toolbox para Java

v Recuperar los datos de la cabecera como una matriz de bytesv Recuperar la siguiente cabecera del paquetev Recuperar la carga uacutetil como una matriz de bytes una serie ASCII y una serie hexadecimalv Devolver todos los datos de la cabecera como una serie sin formatov Devolver datos especiacuteficos de la cabecera como una serie con formato

Javadoc HeaderJavadoc ARPHeaderJavadoc ExtHeaderJavadoc ICMP4HeaderJavadoc ICMP6HeaderJavadoc IP4HeaderJavadoc IP6HeaderJavadoc TCPHeaderJavadoc UDPHeaderJavadoc UnknownHeader

Ejemplo coacutemo se utilizan las clases commtraceEste ejemplo utiliza las clases commtrace de IBM Toolbox para Java para imprimir datos de rastreo decomunicaciones en un supervisor mediante un archivo binario de rastreo de comunicaciones como origende los datos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de coacutemo se utilizan las clases commtrace para imprimir datos de rastreo de comunicaciones en un supervisor mediante un archivo binario de rastreo de comunicaciones como como origen de los datos Sintaxis del mandato java CommTraceExample

import comibmas400utilcommtrace

public class CommTraceExample

public CommTraceExample() Cree un objeto FormatProperties De forma predeterminada efectuacutee una visualizacioacuten completaFormatProperties fmtprop = new FormatProperties()

Format fmt = new Format(pathtofile) Establece las propiedades de filtrado para este formatofmtsetFilterProperties(fmtprop)fmtformatProlog() Deacute formato al proacutelogo

Prolog pro = fmtgetProlog()Systemoutprintln(protoString())

Si no es un rastreo vaacutelidoif (proinvalidData())

Frame rec

Obtenga los registroswhile ((rec = fmtgetNextRecord()) = null)

IBM Toolbox para Java 197

Imprima el nuacutemero de tramaSystemoutprint(Registro + recgetRecNum()) Imprima la horaSystemoutprintln( Hora + recgetTime()) Obtenga este paquete de registrosIPPacket p = recgetPacket() Obtenga la primera cabeceraHeader h = pgetHeader()

Si IPPacket IP6if (pgetType() == IPPacketIP6)

Si Header IP6if (hgetType() == HeaderIP6)

Realice la conversioacuten a IP6 para poder acceder a los meacutetodosIP6Header ip6 = (IP6Header) h

Systemoutprintln(hgetName() + src + ip6getSrcAddr() + dst + ip6getDstAddr()) Imprima la cabecera como hexadecimalSystemoutprintln(ip6printHexHeader()) Imprima una representacioacuten de tipo String de la cabeceraSystemoutprintln(Completo + hgetName() + n + ip6toString(fmtprop))

Obtenga el resto de las cabeceraswhile ((h = hgetNextHeader()) = null)

Si es una cabecera TCPif (hgetType() == HeaderTCP)

Realice la conversioacuten para poder acceder a los meacutetodosTCPHeader tcp = (TCPHeader) hSystemoutprintln(hgetName() + src + tcpgetSrcPort() + dst + tcpgetDstPort())Systemoutprintln(Completo + hgetName() + n + tcptoString(fmtprop))

Si es una cabecera UDP else if (hgetType() == HeaderUDP)

Realice la conversioacuten para poder acceder a los meacutetodosUDPHeader udp = (UDPHeader) hSystemoutprintln(hgetName() + src + udpgetSrcPort() + dst + udpgetDstPort())Systemoutprintln(Completo + hgetName() + n + udptoString(fmtprop))

public static void main(String[] args) CommTraceExample e = new CommTraceExample()

Clases HTMLLas clases HTML de IBM Toolbox para Java proporcionan representaciones para muchos de loe elementosde coacutedigo HTML habituales

Las clases HTML de IBM Toolbox para Java ayudan al usuario a llevar a cabo las acciones siguientesv Preparar formularios y tablas para paacuteginas HTMLv Alinear textov Trabajar con una gran variedad de coacutedigos HTMLv Crear datos fuente de objetos de formato (FO) XSL (Extensible Stylesheet Language)

198 IBM Toolbox para Java IBM Toolbox para Java

v Modificar el idioma y la direccioacuten del textov Crear listas ordenadas y sin ordenarv Crear listas de archivos y aacuterboles jeraacuterquicos HTML (y los elementos que contienen)v Antildeadir atributos de coacutedigo que no estaacuten definidos en las clases HTML (por ejemplo los atributos

bgcolor y style)

Las clases HTML implementan la interfaz HTMLTagElement Cada clase genera un coacutedigo HTML para untipo de elemento especiacutefico El coacutedigo se puede recuperar con el meacutetodo getTag() y luego se puedeincorporar a cualquier documento HTML Los coacutedigos que se generan con las clases HTML soncoherentes con la especificacioacuten de HTML 32

Las clases HTML pueden funcionar conjuntamente con las clases servlet para obtener datos del servidorSin embargo tambieacuten se pueden utilizar solas si se suministran los datos de la tabla o del formulario

Asimismo puede emplear la clase HTMLDocument para crear paacuteginas HTML o datos fuente FO XSL contoda facilidad Puede convertir los datos FO XSL en documentos PDF (Portable Document Format) Conel formato PDF los documentos conservan el mismo aspecto graacutefico cuando se imprimen que cuando sevisualizan electroacutenicamente

Nota el archivo jt400Servletjar incluye tanto las clases HTML como las clases Servlet Debe actualizar laCLASSPATH para que sentildeale al archivo jt400Servletjar si desea utilizar las clases del paquetecomibmas400utilhtmlInformacioacuten relacionadaJavadoc HTMLTagElementJavadoc DirFilter - Se utiliza para determinar si un objeto File es un directorioJavadoc HTMLFileFilter - Se utiliza para determinar si un objeto File es un archivoJavadoc URLEncoder - Codifica delimitadores que deben utilizarse en una serie de URLJavadoc URLParser - Permite analizar una serie de URL para examinar el identificador URI laspropiedades y la referencia

Clase BidiOrderingLa clase BidiOrdering de IBM Toolbox para Java representa un coacutedigo HTML que modifica el idioma y ladireccioacuten del texto Una serie HTML ltBDOgt requiere dos atributos uno para el idioma y otro para ladireccioacuten del texto

La clase BidiOrdering permite llevar a cabo estas accionesv Obtener y establecer el atributo de idiomav Obtener y establecer la direccioacuten del texto

Para obtener maacutes informacioacuten acerca de coacutemo se utiliza el coacutedigo HTML ltBDOgt consulte el sitio Web de

W3C

Ejemplo coacutemo se utiliza BidiOrdering

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteEn el ejemplo siguiente se crea un objeto BidiOrdering y se establece el idioma y la direccioacuten del mismo

Cree un objeto BidiOrdering y establezca el idioma y la direccioacutenBidiOrdering bdo = new BidiOrdering()bdosetDirection(HTMLConstantsRTL)bdosetLanguage(AR)

Cree un texto

IBM Toolbox para Java 199

HTMLText text = new HTMLText(Un texto en aacuterabe)textsetBold(true)

Antildeada el texto al objeto BidiOrdering y obtenga el coacutedigo HTMLbdoaddItem(text)bdogetTag()

La sentencia de imprimir genera el siguiente coacutedigo HTMLltbdo lang=AR dir=rtlgt

ltbgtTexto en aacuterabeltbgtltbdogt

Cuando se utiliza este coacutedigo en una paacutegina HTML los navegadores que entienden el coacutedigo ltBDOgtvisualizan el ejemplo de esta forma

ebaraacute ne otxet nU

Informacioacuten relacionadaJavadoc BidiOrdering

Clase HTMLAlignLa clase HTMLAlign de IBM Toolbox para Java permite alinear secciones del documento HTML en lugarde alinear elementos individuales tales como paacuterrafos o cabeceras

La clase HTMLAlign representa el coacutedigo ltDIVgt y el atributo de alineacioacuten asociado al mismo Puedeutilizar la alineacioacuten a la derecha a la izquierda o centrada

Puede emplear esta clase para llevar a cabo diversas acciones tales como las siguientesv Antildeadir o eliminar elementos de la lista de coacutedigos que desea alinearv Obtener y establecer la alineacioacutenv Obtener y establecer la direccioacuten de interpretacioacuten del textov Obtener y establecer el idioma del elemento de entradav Obtener una representacioacuten de tipo serie del objeto HTMLAlign

Ejemplo crear objetos HTMLAlign

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteEl ejemplo que sigue crea una lista sin ordenar y a continuacioacuten crea un objeto HTMLAlign para alineartoda la lista

Cree una lista sin ordenarUnorderedList uList = new UnorderedList()uListsetType(HTMLConstantsDISC)UnorderedListItem uListItem1 = new UnorderedListItem()uListItem1setItemData(new HTMLText(Lista sin ordenar centrada))uListaddListItem(uListItem1)UnorderedListItem uListItem2 = new UnorderedListItem()uListItem2setItemData(new HTMLText(Otro elemento))uListaddListItem(uListItem2)

Alinee la listaHTMLAlign align = new HTMLAlign(uList HTMLConstantsCENTER)Systemoutprintln(align)

El ejemplo anterior genera el coacutedigo siguiente

200 IBM Toolbox para Java IBM Toolbox para Java

ltdiv align=centergtltul type=discgt

ltligtLista desordenada centradaltligtltligtOtro elementoltligt

ltulgt

Este coacutedigo cuando se utiliza en una paacutegina HTML ofrece este aspectov Lista sin ordenar centradav Otro elementoInformacioacuten relacionadaJavadoc HTMLAlign

Clase HTMLDocumentLa clase HTMLDocument permite utilizar las clases HTML de IBM Toolbox para Java existentes paracrear paacuteginas HTML o documentos PDF (Portable Document Format)

Al crear un objeto HTMLDocument debe especificar si este contiene coacutedigos HTML o coacutedigos de objetosde formato (FO) XSL (Extensible Stylesheet Language)v Cuando desee crear paacuteginas HTML la clase HTMLDocument le ofrece un sencillo meacutetodo para

agrupar todos los coacutedigos HTML necesarios Sin embargo las paacuteginas HTML no siempre tienen elmismo aspecto cuando se imprimen que cuando se visualizan en un navegador Web

v Cuando desee crear documentos PDF la clase HTMLDocument le ofrece la posibilidad de crear fuenteFO XSL que contiene toda la informacioacuten necesaria para generar un documento PDF Los documentosPDF conservan el mismo aspecto graacutefico cuando se imprimen que cuando se visualizanelectroacutenicamente

Para emplear HTMLDocument debe incluir un analizador XML y un procesador XSLT en la variable deentorno CLASSPATH Encontraraacute maacutes informacioacuten en estas paacuteginasv ldquoArchivos JARrdquo en la paacutegina 8v ldquoAnalizador XML y procesador XSLTrdquo en la paacutegina 330

Puede procesar los datos fuente XSL o HTML resultantes como desee por ejemplo visualizando el coacutedigoHTML guardando el coacutedigo XSL en un archivo o empleando los datos pasados como corriente en otraparte del programa Java

Para obtener maacutes informacioacuten sobre coacutemo crear paacuteginas HTML y datos fuente FO XSL consulte laspaacuteginas siguientesv ldquoCoacutemo se utiliza HTMLDocument para crear datos HTMLrdquov ldquoCoacutemo se utiliza HTMLDocument para crear datos FO XSLrdquo en la paacutegina 202v ldquoEjemplos coacutemo se utiliza HTMLDocumentrdquo en la paacutegina 205

Javadoc HTMLDocument

Coacutemo se utiliza HTMLDocument para crear datos HTML

HTMLDocument funciona como un objeto que envuelve la informacioacuten necesaria para crear datos fuenteHTML o de objetos de formato (FO) XSL (Extensible Stylesheet Language) Cuando desee crear paacuteginasHTML la clase HTMLDocument le ofrece un sencillo meacutetodo para agrupar todos los coacutedigos HTMLnecesarios

Generar datos fuente HTML

Al crear fuente HTML HTMLDocument recupera los coacutedigos HTML de los objetos HTML que se hancreado Puede emplear HTMLDocumentgetTag() para pasar como una corriente todos los elementosdefinidos o getTag() para cada uno de los objetos HTML individuales

IBM Toolbox para Java 201

HTMLDocument genera datos HTML a medida que estos se definen en el programa Java por lo quepuede estar seguro de que el coacutedigo HTML resultante es completo y correcto

Al llamar a HTMLDocumentgetTag() el objeto HTMLDocument lleva a cabo las acciones siguientesv Genera el coacutedigo ltHTMLgt inicial Al final de los datos genera el coacutedigo ltHTMLgt finalv Convierte los objetos HTMLHead y HTMLMeta en coacutedigos HTMLv Genera el coacutedigo ltBODYgt inicial justo despueacutes del coacutedigo ltHEADgt Al final de los datos justo antes

del coacutedigo ltHTMLgt final genera el coacutedigo ltBODYgt final

Nota si no especifica ninguacuten coacutedigo ltHEADgt HTMLDocument genera el coacutedigo ltBODYgt tras elcoacutedigo ltHTMLgt

v Convierte los demaacutes objetos HTML en coacutedigos HTML seguacuten las indicaciones del programa

Nota HTMLDocument pasa como una corriente los coacutedigos HTML tal como se lo indica el programaJava por lo que debe asegurarse de que se llama a los coacutedigos en el orden correcto

Ejemplos coacutemo se utiliza HTMLDocument

El ejemplo siguiente muestra coacutemo se utiliza HTMLDocument para generar datos fuente HTML (y fuenteFO XSL)

ldquoEjemplo coacutemo se utiliza HTMLDocument para generar fuente HTML y FO XSLrdquo en la paacutegina 208

Documentacioacuten de consulta de javadocs

Para obtener maacutes informacioacuten sobre la clase HTMLDocument consulte la siguiente documentacioacuten deconsulta de javadocs

HTMLDocument

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Coacutemo se utiliza HTMLDocument para crear datos FO XSL

HTMLDocument funciona como un objeto que envuelve la informacioacuten necesaria para crear datos fuenteHTML o de objetos de formato (FO) XSL (Extensible Stylesheet Language)

El fuente FO XSL generado sigue el modelo de formato de FO XSL El modelo emplea elementosrectangulares denominados aacutereas para contener los elementos de contenido individuales que pueden serimaacutegenes texto otros FO XSL o nada En la lista siguiente se describen los cuatro tipos de aacuterea baacutesicos

202 IBM Toolbox para Java IBM Toolbox para Java

v Las regiones funcionan como el contenedor de nivel superiorv Las aacutereas de bloque representan elementos a nivel de bloque como por ejemplo paacuterrafos o elementos

de listav Las aacutereas de liacutenea representan una liacutenea de texto dentro de un bloquev Las aacutereas dentro de liacutenea representan partes de una liacutenea como por ejemplo un caraacutecter una nota a pie

de paacutegina o una ecuacioacuten matemaacutetica

Los coacutedigos FO XSL creados por IBM Toolbox para Java cumplen los estaacutendares XSL que se describen enla recomendacioacuten de W3C Para obtener maacutes informacioacuten sobre XSL los FO XSL y la recomendacioacuten deW3C consulte lo siguiente

Extensible Stylesheet Language (XSL) Version 10

Generar datos fuente FO XSL

Al crear fuente FO XSL las propiedades de HTMLDocument representan coacutedigos FO XSL que especificanel tamantildeo la orientacioacuten y los maacutergenes de la paacutegina Ademaacutes HTMLDocument recupera de muchasclases HTML los coacutedigos FO XSL correspondientes para ese elemento de contenido

Tras emplear HTMLDocument para generar el fuente FO XSL puede emplear un formateador XSL (porejemplo la clase XSLReportWriter) para colocar los elementos de contenido en las paacuteginas de undocumento

HTMLDocument genera datos fuente FO XSL en dos grandes seccionesv La primera seccioacuten contiene los coacutedigos FO XSL ltforootgt y ltfolayout-master-setgt que contienen

informacioacuten general sobre el disentildeo de la paacutegina en relacioacuten con la altura la anchura y los maacutergenesde la paacutegina Para especificar los valores de la informacioacuten de disentildeo utilice los meacutetodos set deHTMLDocument para establecer los valores de las propiedades asociadas

v La segunda seccioacuten contiene el coacutedigo FO XSL ltfopage-sequencegt que contiene los elementos decontenido individuales Para especificar elementos de contenido individuales que son instancias de lasclases HTML recupere el coacutedigo FO XSL correspondiente del objeto HTML Aseguacuterese de utilizaruacutenicamente clases HTML que tengan el meacutetodo getFoTag() para los elementos de contenido

Nota si intenta recuperar coacutedigos FO XSL de clases HTML que no tienen el meacutetodo getFoTag()obtendraacute un coacutedigo de comentario

Para obtener maacutes informacioacuten sobre las clases HTML que incluyen meacutetodos para trabajar con los coacutedigosFO XSL consulte la siguiente documentacioacuten de consulta de javadocs

ldquoClases habilitadas para FO XSLrdquo en la paacutegina 204

Tras crear una instancia de HTMLDocument y establecer las propiedades de disentildeo recupere los coacutedigosFO XSL de los objetos HTML mediante los meacutetodos setUseFO() getFoTag() y getTag()v Puede emplear setUseFO() tanto en HTMLDocument como en los objetos HTML individuales Al

utilizar setUseFO() puede recuperar coacutedigos FO XSL mediante HTMLDocumentgetTag()v Si lo prefiere tambieacuten puede emplear el meacutetodo getFoTag() tanto en HTMLDocument como en los

objetos HTML individuales Puede interesarle utilizar este otro meacutetodo cuando tenga que generarfuente HTML y FO XSL a partir de HTMLDocument o de los objetos HTML

IBM Toolbox para Java 203

Ejemplo coacutemo se utiliza HTMLDocument

Despueacutes de crear datos fuente FO XSL tendraacute que convertir esos datos FO XSL en un formato que losusuarios puedan visualizar e imprimir Los ejemplos siguientes muestran coacutemo generar datos fuente FOXSL (y fuente HTML) y convertir los datos fuente FO XSL en un documento PDF mediante las clasesXSLReportWriter y Context

ldquoEjemplo coacutemo se utiliza HTMLDocument para generar fuente HTML y FO XSLrdquo en la paacutegina 208

ldquoEjemplo convertir datos fuente FO XSL en un PDFrdquo en la paacutegina 205

Documentacioacuten de consulta de javadocs

Para obtener maacutes informacioacuten sobre la clase HTMLDocument consulte la siguiente documentacioacuten deconsulta de javadocs

HTMLDocument

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Clases habilitadas para FO XSL

Este tema describe las clases de IBM Toolbox para Java que son compatibles con la claseHTMLDocument

Muchas clases HTML de IBM Toolbox para Java ofrecen los meacutetodos siguientes que permiten a lasinstancias de estas clases trabajar con HTMLDocumentv getFoTag()v getTag()v setUseFO()

Para obtener maacutes informacioacuten sobre la clase HTMLDocument y sobre las clases HTML que incluyenmeacutetodos para trabajar con los objetos FO XSL consulte la siguiente documentacioacuten de consulta dejavadocsv HTMLDocumentv BidiOrderingv HTMLAlignv HTMLHeadv HTMLHeading

204 IBM Toolbox para Java IBM Toolbox para Java

v HTMLImagev HTMLListv HTMLListItemv HTMLTablev HTMLTableCaptionv HTMLTableCellv HTMLTableHeaderv HTMLTableRowv HTMLTagElementv OrderedListv UnorderedList

Ejemplos coacutemo se utiliza HTMLDocument

Los ejemplos siguientes muestran varios modos de emplear la clase HTMLDocument para generar datosfuente HTML y de objetos de formato (FO) XSL (Extensible Stylesheet Language)

Ejemplo coacutemo se utiliza HTMLDocument para generar fuente HTML y FO XSL

El ejemplo siguiente muestra coacutemo generar datos fuente HTML y FO XSL a la vez

ldquoEjemplo coacutemo se utiliza HTMLDocument para generar fuente HTML y FO XSLrdquo en la paacutegina 208

Ejemplo convertir datos fuente FO XSL en un PDF

Despueacutes de crear datos fuente FO XSL tendraacute que convertir esos datos FO XSL en un formato que losusuarios puedan visualizar e imprimir El ejemplo siguiente muestra coacutemo convertir un archivo quecontiene datos fuente FO XSL en un documento PDF mediante las clases XSLReportWriter y Context

ldquoEjemplo convertir datos fuente FO XSL en un PDFrdquo

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo convertir datos fuente FO XSL en un PDF

Este programa de ejemplo no debe utilizarse ya que la clase XSLReportProcessor ha dejado de estarsoportada

IBM Toolbox para Java 205

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo convertir fuente FO XSL en un PDF Este programa utiliza las clases ReportWriter de IBM Toolbox para Java para convertir datos fuente FO XSL (creados mediante HTMLDocument) en un PDF Es necesario que los siguientes archivos jar esteacuten en la classpath composerjar outputwritersjar reportwriterjar x4j400jar xslparserjar Estos archivos JAR forman parte de IBM ToolBox para Java y residen en el directorio QIBMProdDataHTTPPublicjt400lib del servidor Tambieacuten necesitaraacute la definicioacuten de clase para orgapachexercesdomNodeContainer que reside en el directorio QIBMProdDataOS400xmllib Sintaxis del mandato ProcessXslFo nombreArchivoFO nombreArchivoPDF

import javaioFileInputStreamimport javaioFileOutputStream

import javaawtprintPaperimport javaawtprintPageFormat

import orgw3cdomDocument

import comibmxslcomposerframeworkContext

import comibmas400utilreportwriterpdfwriterPDFContextimport comibmas400utilreportwriterprocessorXSLReportProcessor

public class ProcessXslFo

public static void main(String args[])

if (argslength = 2)

Systemoutprintln(Utilizacioacuten java ProcessXslFo ltnombre de archivo fogt ltnombre de archivo pdfgt)Systemexit (0)

try

String inName = args[0]String outName = args[1]

Entrada Archivo que contiene FO XML FileInputStream fin = null

Salida En este ejemplo seraacute un PDF FileOutputStream fout = null

try

206 IBM Toolbox para Java IBM Toolbox para Java

fin = new FileInputStream(inName)fout = new FileOutputStream(outName)

catch (Exception e)

eprintStackTrace()Systemexit (0)

Configure el formato de paacuteginaPaper paper = new Paper()papersetSize(612 792)papersetImageableArea(0 0 756 936)

PageFormat pageFormat = new PageFormat()pageFormatsetPaper(paper)

Cree un contexto de PDF Establezca el nombre de archivo de salidaPDFContext pdfContext = new PDFContext(fout pageFormat)

Cree la instancia de XSLReportProcessorXSLReportProcessor report = new XSLReportProcessor(pdfContext)

Abra el fuente FO XMLtry

reportsetXSLFOSource(fin)catch (Exception e)

eprintStackTrace()Systemexit (0)

Procese el informetry

reportprocessReport()catch (Exception e)

eprintStackTrace()Systemexit (0)

catch (Exception e)

eprintStackTrace()Systemexit (0)

Salida Systemexit (0)

IBM Toolbox para Java 207

Ejemplo coacutemo se utiliza HTMLDocument para generar fuente HTML y FO XSL

Este ejemplo utiliza la clase HTMLDocument para generar datos fuente HTML y FO XSL

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo coacutemo se utiliza la clase HTMLDocument de la Caja de Herramientas para generar datos fuente HTML y FO XSL Este programa utiliza la clase HTMLDocument para generar dos archivos uno con el fuente HTML y otro con el fuente FO XSL Sintaxis del mandato HTMLDocumentExample

import comibmas400utilhtmlimport javaimport javaioimport javalangimport javabeansPropertyVetoException

public class HTMLDocumentExample

public static void main (String[] args)

Cree el objeto HTMLDocument con las propiedades del documento necesariasHTMLDocument doc = new HTMLDocument()

Establezca las propiedades de la paacutegina y los maacutergenes Los nuacutemeros se dan en pulgadasdocsetPageWidth(85)docsetPageHeight(11)docsetMarginTop(1)docsetMarginBottom(1)docsetMarginLeft(1)docsetMarginRight(1)

Cree una cabecera para la paacuteginaHTMLHead head = new HTMLHead() Establezca el tiacutetulo de la cabeceraheadsetTitle(Esta es la cabecera de la paacutegina)

Cree varias cabecerasHTMLHeading h1 = new HTMLHeading(1 Cabecera 1)HTMLHeading h2 = new HTMLHeading(2 Cabecera 2)HTMLHeading h3 = new HTMLHeading(3 Cabecera 3)HTMLHeading h4 = new HTMLHeading(4 Cabecera 4)HTMLHeading h5 = new HTMLHeading(5 Cabecera 5)HTMLHeading h6 = new HTMLHeading(6 Cabecera 6)

Cree un texto que se imprimiraacute de derecha a izquierda Cree un objeto BidiOrdering y establezca la direccioacutenBidiOrdering bdo = new BidiOrdering()bdosetDirection(HTMLConstantsRTL)

Cree un textoHTMLText text = new HTMLText(Este es un texto en aacuterabe) Antildeada el texto al objeto BidiOrderingbdoaddItem(text)

Cree un objeto UnorderedList

208 IBM Toolbox para Java IBM Toolbox para Java

UnorderedList uList = new UnorderedList(HTMLConstantsSQUARE) Cree y establezca los datos de los objetos UnorderedListItemUnorderedListItem listItem1 = new UnorderedListItem()UnorderedListItem listItem2 = new UnorderedListItem()listItem1setItemData(new HTMLText(Primer elemento))listItem2setItemData(new HTMLText(Segundo elemento)) Antildeada los elementos de lista al objeto UnorderedListuListaddListItem(listItem1)uListaddListItem(listItem2)

Cree un objeto OrderedListOrderedList oList = new OrderedList(HTMLConstantsSMALL_ROMAN) Cree los objetos OrderedListItemOrderedListItem olistItem1 = new OrderedListItem()OrderedListItem olistItem2 = new OrderedListItem()OrderedListItem olistItem3 = new OrderedListItem() Establezca los datos de los objetos OrderedListItemolistItem1setItemData(new HTMLText(Primer elemento))olistItem2setItemData(new HTMLText(Segundo elemento))olistItem3setItemData(new HTMLText(Tercer elemento)) Antildeada los elementos de lista al objeto OrderedListoListaddListItem(olistItem1)oListaddListItem(olistItem2) Antildeada (anide) la lista sin ordenar a OrderedListItem2oListaddList(uList) Antildeada otro objeto OrderedListItem al objeto OrderedList despueacutes del objeto UnorderedList anidadooListaddListItem(olistItem3)

Cree un objeto HTMLTable predeterminadoHTMLTable table = new HTMLTable()try

Establezca los atributos de la tablatablesetAlignment(HTMLTableLEFT)tablesetBorderWidth(1)

Cree un objeto HTMLTableCaption predeterminado y establezca el texto del pie de tablaHTMLTableCaption caption = new HTMLTableCaption()

captionsetElement(Saldos de cuenta de cliente - 1 de enero de 2000)

Establezca el pie de tablatablesetCaption(caption)

Cree las cabeceras de la tabla y antildeaacutedalas a la mismaHTMLTableHeader account_header = new HTMLTableHeader(new HTMLText(CUENTA))HTMLTableHeader name_header = new HTMLTableHeader(new HTMLText(NOMBRE))HTMLTableHeader balance_header = new HTMLTableHeader(new HTMLText(SALDO))

tableaddColumnHeader(account_header)tableaddColumnHeader(name_header)tableaddColumnHeader(balance_header)

Antildeada filas a la tabla Cada registro de cliente corresponde a una fila de la tablaint numCols = 3for (int rowIndex=0 rowIndexlt 5 rowIndex++)

HTMLTableRow row = new HTMLTableRow()rowsetHorizontalAlignment(HTMLTableRowCENTER)

HTMLText account = new HTMLText(000 + rowIndex)HTMLText name = new HTMLText(Customer + rowIndex)HTMLText balance = new HTMLText( + (rowIndex + 1)200)

rowaddColumn(new HTMLTableCell(account))rowaddColumn(new HTMLTableCell(name))rowaddColumn(new HTMLTableCell(balance))

IBM Toolbox para Java 209

Antildeada la fila a la tablatableaddRow(row)

catch(Exception e)

Systemoutprintln(Problema durante la creacioacuten de la tabla)Systemexit (0)

Antildeada los elementos al objeto HTMLDocumentdocaddElement(head)docaddElement(h1)docaddElement(h2)docaddElement(h3)docaddElement(h4)docaddElement(h5)docaddElement(h6)docaddElement(oList)docaddElement(table)docaddElement(bdo)

Imprima los coacutedigos FO en un archivotry

FileOutputStream fout = new FileOutputStream(FOFILEfo)PrintStream pout = new PrintStream(fout)poutprintln(docgetFOTag())

catch (Exception e)

Systemoutprintln(No se han podido escribir los coacutedigos FO en FOFILEfo)

Imprima los coacutedigos HTML en un archivotry

FileOutputStream htmlout = new FileOutputStream(HTMLFILEhtml)PrintStream phtmlout = new PrintStream(htmlout)phtmloutprintln(docgetTag())

catch (Exception e)

Systemoutprintln(No se han podido escribir los coacutedigos HTML en HTMLFILEhtml)

Clases de formularios HTMLLa clase HTMLForm de IBM Toolbox para Java representa un formulario HTML Utilice estas clases paraque los formularios sean maacutes faacuteciles de crear que con los scripts CGI

Esta clase le permitev Antildeadir un elemento (por ejemplo un botoacuten un hiperenlace o una tabla HTML) a un formulariov Eliminar un elemento de un formulariov Establecer otros atributos de formulario por ejemplo queacute meacutetodo se ha de usar para enviar el

contenido del formulario al servidor la lista de paraacutemetros ocultos o la direccioacuten URL de la accioacuten

El constructor del objeto HTMLForm toma una direccioacuten de URL A esta direccioacuten la llamamos URL deaccioacuten Es la ubicacioacuten de la aplicacioacuten en el servidor que va a procesar la entrada del formulario El URL

210 IBM Toolbox para Java IBM Toolbox para Java

de accioacuten se puede especificar en el constructor tambieacuten se puede establecer la direccioacuten mediante elmeacutetodo setURL() Los atributos de formulario se establecen con los diversos meacutetodos set y se recuperancon los diversos meacutetodos get

Los elementos de coacutedigo HTML se pueden antildeadir a un objeto HTMLForm utilizando el meacutetodoaddElement() y se pueden eliminar utilizando el meacutetodo removeElement()

Obviamente puede antildeadir otros elementos de coacutedigo a un formulario tales como HTMLTextHTMLHyperlink y HTMLTable

Javadoc HTMLFormldquoClase HTMLTextrdquo en la paacutegina 228La clase HTMLText de IBM Toolbox para Java permite acceder a las propiedades del texto de lapaacutegina HTML Mediante la clase HTMLText puede obtener establecer y comprobar el estado denumerosos atributos del textoldquoClase HTMLHyperlinkrdquo en la paacutegina 220La clase HTMLHyperlink de IBM Toolbox para Java representa un coacutedigo de hiperenlace HTML Conla clase HTMLHyperlink puede crear un enlace dentro de la paacutegina HTMLldquoClases de tablas HTMLrdquo en la paacutegina 226La clase HTMLTable de IBM Toolbox para Java permite preparar de manera sencilla las tablas que sepueden utilizar en las paacuteginas HTMLldquoEjemplo coacutemo se utilizan las clases de formularios HTMLrdquo en la paacutegina 482El ejemplo siguiente de IBM Toolbox para Java muestra coacutemo se utilizan las clases de formularioHTMLldquoSalida de ejemplo de las clases HTMLrdquo en la paacutegina 492A continuacioacuten figuran algunas posibles salidas de ejemplo que se pueden obtener al ejecutar elejemplo de las clases HTML

Clases FormInput

La clase FormInput de IBM Toolbox para Java representa un elemento de entrada de un formularioHTML

La clase FormInput permite llevar a cabo estas accionesv Obtener y establecer el nombre de un elemento de entradav Obtener y establecer el tamantildeo de un elemento de entradav Obtener y establecer el valor inicial de un elemento de entrada

La clase FormInput se ampliacutea mediante las clases de la lista siguiente Estas clases permiten crear tiposespeciacuteficos de elementos de entrada de formulario y permiten obtener y establecer diversos atributos orecuperar el coacutedigo HTML del elemento de entradav ButtonFormInput representa un elemento que es un botoacuten de un formulario HTMLv FileFormInput representa un tipo de entrada de archivo de un formulario HTMLv HiddenFormInput representa un tipo de entrada oculta de un formulario HTMLv ImageFormInput representa un tipo de entrada de imagen de un formulario HTMLv ResetFormInput representa una entrada de botoacuten de restablecer de un formulario HTMLv SubmitFormInput representa una entrada de botoacuten de someter de un formulario HTMLv TextFormInput representa una entrada de texto de una sola liacutenea de un formulario HTML en la que se

define el nuacutemero maacuteximo de caracteres de una liacutenea Para un tipo de entrada de contrasentildea se utilizala clase PasswordFormInput que ampliacutea TextFormInput y representa un tipo de entrada de contrasentildeade un formulario HTML

IBM Toolbox para Java 211

v ToggleFormInput representa un tipo de entrada de conmutador de un formulario HTML El usuariopuede establecer u obtener la etiqueta de texto y especificar si el conmutador se debe marcar oseleccionar El tipo de entrada de conmutador puede ser uno de estos dosndash RadioFormInput representa un tipo de entrada de botoacuten de seleccioacuten de un formulario HTML Los

botones de seleccioacuten se pueden colocar en grupos con la clase RadioFormInputGroup esta clase creaun grupo de botones de seleccioacuten donde el usuario solo selecciona una de las opciones presentadas

ndash CheckboxFormInput representa un tipo de entrada de recuadro de seleccioacuten de un formularioHTML en que el usuario puede seleccionar maacutes de una de las opciones presentadas y en que elrecuadro de seleccioacuten se inicializa como marcado o no marcado

Javadoc FormInputJavadoc ToggleFormInputJavadoc RadioFormInputGroup

Clase ButtonFormInput

La clase ButtonFormInput representa un elemento de botoacuten de un formulario HTML

El ejemplo siguiente muestra coacutemo se crea un objeto ButtonFormInputButtonFormInput button = new ButtonFormInput(button1 Pulse aquiacute test())Systemoutprintln(buttongetTag())

Este ejemplo genera el siguiente coacutedigoltinput type=button name=button1 value=Pulse aquiacute onclick=test() gt

Informacioacuten relacionadaJavadoc ButtonFormInput

Clase FileFormInput

La clase FileFormInput de IBM Toolbox para Java representa un tipo de entrada de archivo de unformulario HTML

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto FileFormInput nuevoFileFormInput file = new FileFormInput(myFile)Systemoutprintln(filegetTag())

El coacutedigo anterior crea la siguiente salidaltinput type=file name=myFile gt

Informacioacuten relacionadaJavadoc FileFormInput

Clase HiddenFormInput

La clase HiddenFormInput de IBM Toolbox para Java representa un tipo de entrada oculto de unformulario HTML

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto HiddenFormInputHiddenFormInput hidden = new HiddenFormInput(account 123456)Systemoutprintln(hiddengetTag())

El coacutedigo anterior genera el coacutedigo siguienteltinput type=hidden name=account value=123456 gt

212 IBM Toolbox para Java IBM Toolbox para Java

En una paacutegina HTML el tipo de entrada oculta (HiddenInputType) no se visualiza Enviacutea la informacioacuten(en este caso el nuacutemero de cuenta) de regreso al servidorInformacioacuten relacionadaJavadoc HiddenFormInput

Clase ImageFormInput

La clase ImageFormInput representa un tipo de entrada de formulario HTML que es una imagen

Mediante los meacutetodos proporcionados se pueden recuperar y actualizar numerosos atributos de la claseImageFormInput por ejemplo puedev Obtener o establecer el coacutedigo fuentev Obtener o establecer la alineacioacutenv Obtener o establecer la alturav Obtener o establecer la anchura

Ejemplo crear un objeto ImageFormInput

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto ImageFormInputImageFormInput image = new ImageFormInput(myPicture myPicturegif)

imagesetAlignment(HTMLConstantsTOP)imagesetHeight(81)imagesetWidth(100)

El ejemplo de coacutedigo anterior genera el coacutedigo HTML siguienteltinput type=image name=MyPicture src=myPicturegif align=top height=81 width=100 gt

Informacioacuten relacionadaJavadoc ImageFormInput

Clase ResetFormInput

La clase ResetFormInput representa un tipo de entrada de un formulario HTML que es un botoacuten derestablecer

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto ResetFormInputResetFormInput reset = new ResetFormInput()resetsetValue(Restablecer)Systemoutprintln(resetgetTag())

El ejemplo de coacutedigo anterior genera el coacutedigo HTML siguienteltinput type=reset value=Reset gt

Informacioacuten relacionadaJavadoc ResetFormInput

Clase SubmitFormInput

La clase SubmitFormInput representa un tipo de entrada de un formulario HTML que es un botoacuten desometer

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto SubmitFormInputSubmitFormInput submit = new SubmitFormInput()submitsetValue(Someter)Systemoutprintln(submitgetTag())

IBM Toolbox para Java 213

El ejemplo de coacutedigo anterior genera la siguiente salidaltinput type=submit value=Send gt

Informacioacuten relacionadaJavadoc SubmitFormInput

Clase TextFormInput

La clase TextFormInput representa en un formulario HTML un tipo de entrada que es una sola liacutenea detexto La clase TextFormInput proporciona meacutetodos que permiten obtener y establecer el nuacutemero maacuteximode caracteres que un usuario puede entrar en el campo de texto

El ejemplo siguiente muestra coacutemo se crea un objeto TextFormInput nuevoTextFormInput text = new TextFormInput(userID)textsetSize(40)Systemoutprintln(textgetTag())

El ejemplo de coacutedigo anterior genera el siguiente coacutedigo HTMLltinput type=text name=userID size=40 gt

Informacioacuten relacionadaJavadoc TextFormInput

Clase PasswordFormInput

La clase PasswordFormInput representa un tipo de campo de entrada de contrasentildea de un formularioHTML

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto PasswordFormInput nuevoPasswordFormInput pwd = new PasswordFormInput(password)pwdsetSize(12)Systemoutprintln(pwdgetTag())

El ejemplo de coacutedigo anterior genera el siguiente coacutedigo HTMLltinput type=password name=password size=12 gt

Informacioacuten relacionadaJavadoc PasswordFormInput

Clase RadioFormInput

La clase RadioFormInput representa un tipo de entrada de formulario HTML que es un botoacuten deseleccioacuten Este en el momento de construirse se puede inicializar como seleccionado

Una serie de botones de seleccioacuten que tengan un mismo nombre de control forman un grupo de botonesde seleccioacuten La clase RadioFormInputGroup crea grupos de botones de seleccioacuten En un momento dadouacutenicamente puede seleccionarse un solo botoacuten del grupo Ademaacutes en el momento de construir el grupose puede inicializar como seleccionado un botoacuten concreto

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto RadioFormInput nuevoRadioFormInput radio = new RadioFormInput(age twentysomething Edad entre 20 y 29 true)Systemoutprintln(radiogetTag())

El ejemplo de coacutedigo anterior genera el coacutedigo HTML siguienteltinput type=radio name=age value=twentysomething checked=checked gt

Javadoc RadioFormInputJavadoc RadioFormInputGroup

214 IBM Toolbox para Java IBM Toolbox para Java

Clase CheckboxFormInput

La clase CheckboxFormInput de IBM Toolbox para Java representa un tipo de entrada de formularioHTML que corresponde a un recuadro de seleccioacuten El usuario puede seleccionar maacutes de una de laselecciones presentadas como recuadros de seleccioacuten dentro de un formulario

El ejemplo siguiente muestra coacutemo se crea un objeto CheckboxFormInput nuevoCheckboxFormInput checkbox = new CheckboxFormInput(uscitizen yes textLabel true)Systemoutprintln(checkboxgetTag())

El coacutedigo anterior genera la siguiente salidaltinput type=checkbox name=uscitizen value=yes checked=checked gt textLabel

Clase LayoutFormPanel

La clase LayoutFormPanel de IBM Toolbox para Java representa un disentildeo de los elementos de unformulario HTML Puede utilizar los meacutetodos proporcionados por LayoutFormPanel para antildeadir yeliminar elementos de un panel u obtener el nuacutemero de elementos del disentildeo

Puede optar por utilizar uno de estos dos disentildeosv GridLayoutFormPanel representa un disentildeo cuadriculado de los elementos de un formulario HTMLv LineLayoutFormPanel representa un disentildeo lineal de los elementos de un formulario HTML

Javadoc LayoutFormPanelldquoGridLayoutFormPanelrdquoLa clase GridLayoutFormPanel representa un disentildeo cuadriculado de los elementos de formularioEste disentildeo se utiliza en un formulario HTML en el que se especifica el nuacutemero de columnas de lacuadriacuteculaldquoClase LineLayoutFormPanelrdquo en la paacutegina 216La clase LineLayoutFormPanel representa un disentildeo lineal de los elementos de un formulario HTMLLos elementos del formulario se disponen en una sola fila dentro de un panel

GridLayoutFormPanel

La clase GridLayoutFormPanel representa un disentildeo cuadriculado de los elementos de formulario Estedisentildeo se utiliza en un formulario HTML en el que se especifica el nuacutemero de columnas de la cuadriacutecula

En el ejemplo que hay a continuacioacuten se crea un objeto GridLayoutFormPanel con dos columnas Cree un elemento de entrada de formulario de texto para el sistemaLabelFormElement sysPrompt = new LabelFormElement(Sistema)TextFormInput system = new TextFormInput(System)

Cree un elemento de entrada de formulario de texto para el ID de usuarioLabelFormElement userPrompt = new LabelFormElement(Usuario)TextFormInput user = new TextFormInput(User)

Cree un elemento de entrada de formulario de contrasentildea para la contrasentildeaLabelFormElement passwordPrompt = new LabelFormElement(Contrasentildea)PasswordFormInput password = new PasswordFormInput(Password)

Cree el objeto GridLayoutFormPanel con dos columnas y antildeada los elementos de formularioGridLayoutFormPanel panel = new GridLayoutFormPanel(2)paneladdElement(sysPrompt)paneladdElement(system)paneladdElement(userPrompt)paneladdElement(user)paneladdElement(passwordPrompt)paneladdElement(password)

IBM Toolbox para Java 215

Cree el botoacuten de someter para el formularioSubmitFormInput logonButton = new SubmitFormInput(logon Iniciar sesioacuten)

Cree el objeto HTMLForm y antildeaacutedale el panelHTMLForm form = new HTMLForm(servletURI)formaddElement(panel)formaddElement(logonButton)

Este ejemplo genera el siguiente coacutedigo HTMLltform action=servletURI method=getgtlttable border=0gtlttrgtlttdgtSystemlttdgtlttdgtltinput type=text name=System gtlttdgtlttrgtlttrgtlttdgtUserlttdgtlttdgtltinput type=text name=User gtlttdgtlttrgtlttrgtlttdgtPasswordlttdgtlttdgtltinput type=password name=Password gtlttdgtlttrgtlttablegtltinput type=submit name=logon value=Logon gtltformgt

Informacioacuten relacionadaJavadoc GridLayoutFormPanel

Clase LineLayoutFormPanel

La clase LineLayoutFormPanel representa un disentildeo lineal de los elementos de un formulario HTML Loselementos del formulario se disponen en una sola fila dentro de un panel

Ejemplo coacutemo se utiliza LineLayoutFormPanel

Este ejemplo crea un objeto LineLayoutFormPanel y antildeade dos elementos de formularioCheckboxFormInput privacyCheckbox =

new CheckboxFormInput(confidential yes Confidencial true)CheckboxFormInput mailCheckbox =

new CheckboxFormInput(mailingList yes Uacutenase a nuestra lista de correo false)LineLayoutFormPanel panel = new LineLayoutFormPanel()paneladdElement(privacyCheckbox)paneladdElement(mailCheckbox)String tag = panelgetTag()

El ejemplo de coacutedigo anterior genera el siguiente coacutedigo HTMLltinput type=checkbox name=confidential value=yes checked=checked gt Confidencialltinput type=checkbox name=mailingList value=yes gt Uacutenase a nuestra lista de correo ltbrgt

Informacioacuten relacionadaJavadoc LineLayoutFormPanel

Clase TextAreaFormElement

La clase TextAreaFormElement representa un elemento de formulario HTML que es un aacuterea de textoPara especificar el tamantildeo del aacuterea de texto debe establecer el nuacutemero de filas y columnas Paraaveriguar queacute tamantildeo se ha establecido para un aacuterea de texto puede utilizar los meacutetodos getRows() ygetColumns()

216 IBM Toolbox para Java IBM Toolbox para Java

Para establecer el texto inicial dentro del aacuterea de texto se utiliza el meacutetodo setText() Utilice el meacutetodogetText() para ver el texto inicial que se ha establecido

El ejemplo siguiente muestra coacutemo se crea un objeto TextAreaFormElementTextAreaFormElement textArea = new TextAreaFormElement(foo 3 40)textAreasetText(Aquiacute se especifica el valor predeterminado de TEXTAREA)Systemoutprintln(textAreagetTag())

El ejemplo de coacutedigo anterior genera el siguiente coacutedigo HTMLltformgtlttextarea name=foo rows=3 cols=40gtAquiacute se especifica el valor predeterminado de TEXTAREAlttextareagtltformgt

Javadoc TextAreaFormElement

Clase LabelFormElement

La clase LabelFormElement representa una etiqueta para un elemento de formulario HTML

La clase LabelFormElement permite etiquetar elementos de un formulario HTML como por ejemplo unaacuterea de texto o una entrada de formulario de contrasentildea La etiqueta es una liacutenea de texto que seestablece mediante el meacutetodo setLabel() Este texto no responde a la entrada de usuario y sirve para queal usuario le sea maacutes faacutecil comprender el formulario

Ejemplo coacutemo se utiliza LabelFormElement

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto LabelFormElementLabelFormElement label = new LabelFormElement(Saldo de cuenta)Systemoutprintln(labelgetTag())

Este ejemplo genera la siguiente salidaSaldo de cuenta

Informacioacuten relacionadaJavadoc LabelFormElement

Clase SelectFormElement

La clase SelectFormElement representa un tipo de entrada de seleccioacuten de un formulario HTML Puedeantildeadir y eliminar diversas opciones dentro del elemento de seleccioacuten

La clase SelectFormElement dispone de meacutetodos que le permiten ver y cambiar atributos del elemento deseleccioacutenv Utilice setMultiple() para establecer si el usuario puede o no seleccionar maacutes de una opcioacutenv Utilice getOptionCount() para averiguar cuaacutentos elementos hay en el disentildeo de la opcioacutenv Utilice setSize() para establecer el nuacutemero de opciones visibles dentro del elemento de seleccioacuten y el

meacutetodo getSize() para determinar el nuacutemero de opciones visibles

En el ejemplo siguiente se crea un objeto SelectFormElement que tiene tres opciones El objetoSelectFormElement que se llama list estaacute resaltado Las dos primeras opciones que se antildeaden especificanel texto de la opcioacuten que es el nombre y los atributos de seleccioacuten La tercera opcioacuten que se antildeade sedefine mediante un objeto SelectOption

IBM Toolbox para Java 217

SelectFormElement list = new SelectFormElement(list1)SelectOption option1 = listaddOption(Opcioacuten1 opt1)SelectOption option2 = listaddOption(Opcioacuten2 opt2 false)SelectOption option3 = new SelectOption(Opcioacuten3 opt3 true)listaddOption(option3)Systemoutprintln(listgetTag())

El ejemplo de coacutedigo anterior genera el coacutedigo HTML siguienteltselect name=list1gtltoption value=opt1gtOpcioacuten1ltoptiongtltoption value=opt2gtOpcioacuten2ltoptiongtltoption value=opt3 selected=selectedgtOpcioacuten3ltoptiongtltselectgt

Referencia relacionadaldquoClase SelectOptionrdquoLa clase SelectOption representa una opcioacuten en un objeto SelectFormElement de un formulario HTML Elelemento de formulario option se utiliza en un formulario de seleccioacutenInformacioacuten relacionadaJavadoc SelectFormElement

Clase SelectOption

La clase SelectOption representa una opcioacuten en un objeto SelectFormElement de un formulario HTML Elelemento de formulario option se utiliza en un formulario de seleccioacuten

Se proporcionan meacutetodos que permiten recuperar y establecer atributos dentro de una opcioacuten deseleccioacuten (SelectOption) Por ejemplo puede establecer si de forma predeterminada la opcioacuten debe estarseleccionada Tambieacuten puede establecer el valor de entrada que la opcioacuten utilizaraacute cuando se someta elformulario

El siguiente ejemplo crea tres objetos SelectOption dentro de un formulario de seleccioacuten Todos los objetosSelectOption que figuran maacutes abajo estaacuten resaltados Se llaman option1 option2 y option3 El objeto option3estaacute inicialmente seleccionado

SelectFormElement list = new SelectFormElement(list1)SelectOption option1 = listaddOption(Opcioacuten1 opt1)SelectOption option2 = listaddOption(Opcioacuten2 opt2 false)SelectOption option3 = new SelectOption(Opcioacuten3 opt3 true)listaddOption(option3)Systemoutprintln(listgetTag())

El ejemplo de coacutedigo anterior genera el coacutedigo HTML siguienteltselect name=list1gtltoption value=opt1gtOpcioacuten1ltoptiongtltoption value=opt2gtOpcioacuten2ltoptiongtltoption value=opt3 selected=selectedgtOpcioacuten3ltoptiongtltselectgt

Referencia relacionadaldquoClase SelectFormElementrdquo en la paacutegina 217La clase SelectFormElement representa un tipo de entrada de seleccioacuten de un formulario HTML Puedeantildeadir y eliminar diversas opciones dentro del elemento de seleccioacutenInformacioacuten relacionadaJavadoc SelectOption

Clase RadioFormInputGroup

La clase RadioFormInputGroup representa un grupo de objetos RadioFormInput Los usuarios solopueden seleccionar uno de los objetos RadioFormInput de un RadioFormInputGroup

218 IBM Toolbox para Java IBM Toolbox para Java

Los meacutetodos de la clase RadioFormInputGroup permiten trabajar con los diversos atributos de un grupode botones de seleccioacuten Con estos meacutetodos puede hacer las siguientes tareasv Antildeadir un botoacuten de seleccioacutenv Eliminar un botoacuten de seleccioacutenv Obtener o establecer el nombre del grupo de botones de seleccioacuten

En el ejemplo que hay a continuacioacuten se crea un grupo de botones de seleccioacuten Cree algunos botones de seleccioacutenRadioFormInput radio0 = new RadioFormInput(age kid 0-12 true)RadioFormInput radio1 = new RadioFormInput(age teen 13-19 false)RadioFormInput radio2 = new RadioFormInput(age twentysomething 20-29 false)RadioFormInput radio3 = new RadioFormInput(age thirtysomething 30-39 false) Cree un grupo de botones de seleccioacuten y antildeada los botones de seleccioacutenRadioFormInputGroup ageGroup = new RadioFormInputGroup(age)ageGroupadd(radio0)ageGroupadd(radio1)ageGroupadd(radio2)ageGroupadd(radio3)Systemoutprintln(ageGroupgetTag())

El ejemplo de coacutedigo anterior genera el siguiente coacutedigo HTMLltinput type=radio name=age value=kid checked=checked gt 0-12ltinput type=radio name=age value=teen gt 13-19ltinput type=radio name=age value=twentysomething gt 20-29ltinput type=radio name=age value=thirtysomething gt 30-39

Informacioacuten relacionadaJavadoc RadioFormInputGroupJavadoc RadioFormInput

Clase HTMLHeadLa clase HTMLHead de IBM Toolbox para Java representa un coacutedigo head HTML La seccioacuten head deuna paacutegina HTML contiene un coacutedigo head inicial y otro final que normalmente incluyen otros coacutedigosPor lo general el coacutedigo head contiene un coacutedigo de tiacutetulo y coacutedigos meta

Los constructores de HTMLHead permiten crear un coacutedigo head que estaacute vaciacuteo que contiene un coacutedigode tiacutetulo o que contiene un coacutedigo de tiacutetulo y un coacutedigo meta Faacutecilmente se pueden antildeadir coacutedigos detiacutetulo y meta al objeto HTMLHead vaciacuteo

Los meacutetodos de la clase HTMLHead permiten establecer y obtener los coacutedigos de tiacutetulo y meta de lapaacutegina Defina el contenido de los coacutedigos meta mediante la clase HTMLMeta

El coacutedigo siguiente muestra un modo de crear un coacutedigo HTMLHead Cree un objeto HTMLHead vaciacuteoHTMLHead head = new HTMLHead(Paacutegina principal)

Antildeada el tiacutetuloheadsetTitle(Paacutegina principal)

Defina la informacioacuten meta y antildeaacutedala al objeto HTMLHeadHTMLMeta meta = new HTMLMeta(Content-Type texthtml charset=iso-8859-1)headaddMetaInformation(meta)

Esta es la salida del coacutedigo HTMLHead de ejemploltheadgtltmeta http-equiv=Content-Type content=texthtml charset=iso-8859-1gtlttitlegtMi paacutegina principallttitlegtltheadgt

Referencia relacionada

IBM Toolbox para Java 219

ldquoClase HTMLMetardquo en la paacutegina 224La clase HTMLMeta de IBM Toolbox para Java representa informacioacuten de metadatos que se utiliza dentrode un coacutedigo HTMLHead Los atributos de los coacutedigos META se emplean al identificar indexar y definirinformacioacuten en el documento HTMLInformacioacuten relacionadaJavadoc HTMLHead

Clase HTMLHeadingLa clase HTMLHeading de IBM Toolbox para Java representa una cabecera HTML Cada una de lascabeceras puede tener su propia alineacioacuten y su propio nivel de 1 (font maacutes grande mayor importancia)a 6

Los meacutetodos de la clase HTMLHeading sonv Obtener y establecer el texto de la cabecerav Obtener y establecer el nivel de la cabecerav Obtener y establecer la alineacioacuten de la cabecerav Obtener y establecer la direccioacuten de interpretacioacuten del textov Obtener y establecer el idioma del elemento de entradav Obtener una representacioacuten de tipo String del objeto HTMLHeading

Ejemplo crear objetos HTMLHeading

El ejemplo que sigue crea tres objetos HTMLHeading Cree y visualice tres objetos HTMLHeadingHTMLHeading h1 = new HTMLHeading(1 Cabecera HTMLConstantsLEFT)HTMLHeading h2 = new HTMLHeading(2 Subcabecera HTMLConstantsCENTER)HTMLHeading h3 = new HTMLHeading(3 Elemento HTMLConstantsRIGHT)Systemoutprint(h1 + rn + h2 + rn + h3)

El ejemplo anterior genera los coacutedigos siguienteslth1 align=leftgtCabeceralth1gtlth2 align=centergtSubcabeceralth2gtlth3 align=rightgtElementolth3gt

Informacioacuten relacionadaJavadoc HTMLHeading

Clase HTMLHyperlinkLa clase HTMLHyperlink de IBM Toolbox para Java representa un coacutedigo de hiperenlace HTML Con laclase HTMLHyperlink puede crear un enlace dentro de la paacutegina HTML

Esta clase le permite obtener y establecer numerosos atributos de hiperenlaces como los que se indican acontinuacioacutenv Obtener y establecer el URI (identificador de recursos uniforme) del enlacev Obtener y establecer el tiacutetulo del enlacev Obtener 0 establecer el marco destino del enlace

La clase HTMLHyperlink puede imprimir el hiperenlace completo con las propiedades definidas parapoder utilizar la salida en la paacutegina HTML

A continuacioacuten figura un ejemplo de HTMLHyperlink Cree un hiperenlace HTML con la paacutegina de presentacioacuten de IBM Toolbox para JavaHTMLHyperlink toolbox =

new HTMLHyperlink(httpwwwibmcomas400toolboxPaacutegina de presentacioacuten de IBM Toolbox para Java)

220 IBM Toolbox para Java IBM Toolbox para Java

toolboxsetTarget(TARGET_BLANK)

Visualice el coacutedigo de enlace de la Caja de Herramientas (Toolbox)Systemoutprintln(toolboxtoString())

El coacutedigo anterior genera el coacutedigo HTML siguientelta href=httpwwwibmcomas400toolboxgtPaacutegina de presentacioacuten de IBM Toolbox para Javaltagt

Informacioacuten relacionadaJavadoc HTMLHyperlink

Clase HTMLImageLa clase HTMLImage permite crear coacutedigos de imagen para la paacutegina HTML

La clase HTMLImage proporciona meacutetodos que permiten obtener y establecer los atributos de imagentales comov Obtener o establecer la altura de la imagenv Obtener o establecer la anchura de la imagenv Obtener o establecer el nombre de la imagenv Obtener o establecer el texto alternativo de la imagenv Obtener o establecer el espacio horizontal alrededor de la imagenv Obtener o establecer el espacio vertical alrededor de la imagenv Obtener o establecer la referencia absoluta o relativa de la imagenv Recuperar una representacioacuten de tipo serie del objeto HTMLImage

El ejemplo siguiente muestra un modo de crear un objeto HTMLImage Cree un objeto HTMLImageHTMLImage image = new HTMLImage(httpmyWebSitepicturegif

Texto alternativo para este graacutefico)imagesetHeight(94)imagesetWidth(105)Systemoutprintln(image)

La sentencia de imprimir genera el siguiente coacutedigo en una sola liacutenea La acomodacioacuten de texto solo seproduce para la visualizacioacuten

ltimg src=httpmyWebSitepicturegifalt=Texto alternativo para este graacuteficoheight=94 width=105 gt

Informacioacuten relacionadaJavadoc HTMLImage

Clases HTMLListLas clases HTMLList de IBM Toolbox para Java permiten crear listas dentro de las paacuteginas HTML congran facilidad Estas clases proporcionan meacutetodos para obtener y establecer los diversos atributos de laslistas y los elementos que contienen

En concreto la clase padre HTMLList proporciona un meacutetodo para generar una lista compacta quevisualiza los elementos en vertical en el menor espacio posiblev Los meacutetodos de HTMLList permiten

ndash Compactar la listandash Antildeadir y eliminar elementos de la listandash Antildeadir y eliminar listas de la lista (posibilitando el anidamiento de listas)

v Los meacutetodos de HTMLListItem permitenndash Obtener y establecer el contenido del elemento

IBM Toolbox para Java 221

ndash Obtener y establecer la direccioacuten de interpretacioacuten del textondash Obtener y establecer el idioma del elemento de entrada

Las subclases de HTMLList y HTMLListItem permiten crear listas HTML propiasv OrderedList y OrderedListItemv UnorderedList y UnorderedListItem

Para la codificacioacuten de snippets consulte los ejemplos siguientesv Ejemplo crear listas ordenadasv Ejemplo crear listas sin ordenarv Ejemplo crear listas anidadas

OrderedList y OrderedListItem

Las clases OrderedList y OrderedListItem permiten crear listas ordenadas en las paacuteginas HTMLv Los meacutetodos de OrderedList permiten

ndash Obtener y establecer el nuacutemero inicial del primer elemento de la listandash Obtener y establecer el tipo (o estilo) de los nuacutemeros de elemento

v Los meacutetodos de OrderedListItem permitenndash Obtener y establecer el nuacutemero del elementondash Obtener y establecer el tipo (o estilo) del nuacutemero de elemento

Con los meacutetodos de OrderedListItem puede alterar temporalmente la numeracioacuten y el tipo de unelemento especiacutefico de la lista

Vea el ejemplo para crear listas ordenadas

UnorderedList y UnorderedListItem

Las clases UnorderedList y UnorderedListItem permiten crear listas sin ordenar en las paacuteginas HTMLv Los meacutetodos de UnorderedList permiten

ndash Obtener y establecer el tipo (o estilo) de los elementosv Los meacutetodos de UnorderedListItem permiten

ndash Obtener y establecer el tipo (o estilo) del elemento

Vea el ejemplo para crear listas sin ordenar

Ejemplos coacutemo se utilizan las clases HTMLList

Los ejemplos siguientes muestran coacutemo se utilizan las clases HTMLList para crear listas ordenadas listassin ordenar y listas anidadas

Ejemplo crear listas ordenadas

A continuacioacuten figura un ejemplo en el que se crea una lista ordenada Cree un objeto OrderedList

OrderedList oList = new OrderedList(HTMLConstantsSMALL_ROMAN) Cree los objetos OrderedListItem

OrderedListItem listItem1 = new OrderedListItem()OrderedListItem listItem2 = new OrderedListItem()

Establezca los datos de los objetos OrderedListItemlistItem1setItemData(new HTMLText(Primer elemento))listItem2setItemData(new HTMLText(Segundo elemento))

222 IBM Toolbox para Java IBM Toolbox para Java

Antildeada los elementos de lista al objeto OrderedListoListaddListItem(listItem1)oListaddListItem(listItem2)Systemoutprintln(oListgetTag())

El ejemplo anterior genera los coacutedigos siguientesltol type=igtltligtPrimer elementoltligtltligtSegundo elementoltligtltolgt

Ejemplo crear listas sin ordenar

A continuacioacuten figura un ejemplo en el que se crea una lista sin ordenar Cree un objeto UnorderedList

UnorderedList uList = new UnorderedList(HTMLConstantsSQUARE) Cree los objetos UnorderedListItem

UnorderedListItem listItem1 = new UnorderedListItem()UnorderedListItem listItem2 = new UnorderedListItem()

Establezca los datos de los objetos UnorderedListItemlistItem1setItemData(new HTMLText(Primer elemento))listItem2setItemData(new HTMLText(Segundo elemento))

Antildeada los elementos de lista al objeto UnorderedListuListaddListItem(listItem1)uListaddListItem(listItem2)Systemoutprintln(uListgetTag())

El ejemplo anterior genera los coacutedigos siguientesltul type=squaregtltligtPrimer elementoltligtltligtSegundo elementoltligtltulgt

Ejemplo crear listas anidadas

A continuacioacuten figura un ejemplo en el que se crea una lista anidada Cree un objeto UnorderedList

UnorderedList uList = new UnorderedList(HTMLConstantsSQUARE) Cree y establezca los datos de los objetos UnorderedListItem

UnorderedListItem listItem1 = new UnorderedListItem()UnorderedListItem listItem2 = new UnorderedListItem()listItem1setItemData(new HTMLText(Primer elemento))listItem2setItemData(new HTMLText(Segundo elemento))

Antildeada los elementos de lista al objeto UnorderedListuListaddListItem(listItem1)uListaddListItem(listItem2)

Cree un objeto OrderedListOrderedList oList = new OrderedList(HTMLConstantsSMALL_ROMAN)

Cree los objetos OrderedListItemOrderedListItem listItem1 = new OrderedListItem()OrderedListItem listItem2 = new OrderedListItem()OrderedListItem listItem3 = new OrderedListItem()

Establezca los datos de los objetos OrderedListItemlistItem1setItemData(new HTMLText(Primer elemento))listItem2setItemData(new HTMLText(Segundo elemento))listItem3setItemData(new HTMLText(Tercer elemento))

Antildeada los elementos de lista al objeto OrderedListoListaddListItem(listItem1)oListaddListItem(listItem2)

Antildeada (anide) la lista sin ordenar a OrderedListItem2oListaddList(uList)

IBM Toolbox para Java 223

Antildeada otro objeto OrderedListItem al objeto OrderedList despueacutes del objeto UnorderedList anidado

oListaddListItem(listItem3)Systemoutprintln(oListgetTag())

El ejemplo anterior genera los coacutedigos siguientesltol type=igtltligtPrimer elementoltligtltligtSegundo elementoltligtltul type=squaregtltligtPrimer elementoltligtltligtSegundo elementoltligtltulgtltligtTercer elementoltligtltolgt

Javadoc HTMLListJavadoc HTMLListItem

Clase HTMLMetaLa clase HTMLMeta de IBM Toolbox para Java representa informacioacuten de metadatos que se utiliza dentrode un coacutedigo HTMLHead Los atributos de los coacutedigos META se emplean al identificar indexar y definirinformacioacuten en el documento HTML

Los atributos del coacutedigo META sonv NAME - nombre asociado al contenido del coacutedigo METAv CONTENT - valores asociados al atributo NAMEv HTTP-EQUIV - informacioacuten recopilada por servidores HTTP para las cabeceras de los mensajes de

respuestav LANG - idiomav URL - se utiliza para redirigir a los usuarios de la paacutegina actual a otro URL

Por ejemplo para ayudar a los motores de buacutesqueda a determinar el contenido de una paacutegina podriacuteautilizar el coacutedigo META que se indica a continuacioacuten

ltMETA name=keywords lang=es-es content=games cards bridgegt

Tambieacuten puede emplear una clase HTMLMeta para redirigir a un usuario de una paacutegina a otra

Los meacutetodos de la clase HTMLMeta permitenv Obtener y establecer el atributo NAMEv Obtener y establecer el atributo CONTENTv Obtener y establecer el atributo HTTP-EQUIVv Obtener y establecer el atributo LANGv Obtener y establecer el atributo URL

Ejemplo crear coacutedigos META

En el ejemplo siguiente se crean dos coacutedigos META Cree un coacutedigo META para ayudar a los motores de buacutesqueda a determinar el contenido de la paacuteginaHTMLMeta meta1 = new HTMLMeta()meta1setName(keywords)meta1setLang(es-es)meta1setContent(games cards bridge) Cree un coacutedigo META para que las memorias cacheacute puedan determinar cuaacutendo renovar la paacuteginaHTMLMeta meta2 = new HTMLMeta(Expires Mon 01 Jun 2000 120000 GMT)Systemoutprint(meta1 + rn + meta2)

224 IBM Toolbox para Java IBM Toolbox para Java

El ejemplo anterior genera los coacutedigos siguientesltmeta name=keywords content=games cards bridgegtltmeta http-equiv=Expires content=Mon 01 Jun 2000 120000 GMTgt

Informacioacuten relacionadaJavadoc HTMLMeta

Clase HTMLParameterLa clase HTMLParameter representa los paraacutemetros que puede utilizar con la clase HTMLServlet Cadauno de los paraacutemetros tiene un nombre y un valor propios

Los meacutetodos de la clase HTMLParameter permitenv Obtener y establecer el nombre del paraacutemetrov Obtener y establecer el valor del paraacutemetro

Ejemplo crear coacutedigos HTMLParameter

En el ejemplo siguiente se crea un coacutedigo HTMLParameter Cree un objeto HTMLServletParameter

HTMLParameter parm = new HTMLParameter (age 21)Systemoutprintln(parm)

El ejemplo anterior genera el coacutedigo siguienteltparam name=age value=21gt

Informacioacuten relacionadaJavadoc HTMLParameter

Clase HTMLServletLa clase HTMLServlet representa un elemento include en el lado del servidor El objeto de servletespecifica el nombre del servlet y de forma opcional su ubicacioacuten Tambieacuten puede elegir emplear laubicacioacuten predeterminada en el sistema local

La clase HTMLServlet se utiliza con la clase HTMLParameter que especifica los paraacutemetros disponiblespara el servlet

Los meacutetodos de la clase HTMLServlet permitenv Antildeadir y eliminar HTMLParameters del coacutedigo del servletv Obtener y establecer la ubicacioacuten del servletv Obtener y establecer el nombre del servletv Obtener y establecer el texto alternativo del servlet

Ejemplo crear coacutedigos HTMLServlet

El ejemplo siguiente antildeade un coacutedigo HTMLServlet Cree un objeto HTMLServletHTMLServlet servlet = new HTMLServlet(myServlet httpserverportdir)

Cree un paraacutemetro y a continuacioacuten antildeaacutedalo al servletHTMLParameter param = new HTMLParameter(parm1 value1)servletaddParameter(param)

Cree y antildeada un segundo paraacutemetroHTMLParameter param2 = servletadd(parm2 value2)

IBM Toolbox para Java 225

Cree el texto alternativo si el servidor Web no soporta el coacutedigo de servletservletsetText(El servidor Web que proporciona esta paacutegina no da soporte al coacutedigo SERVLET)Systemoutprintln(servlet)

El ejemplo anterior genera los coacutedigos siguientesltservlet name=miServlet codebase=httpserverportdirgtltparam name=parm1 value=value1gtltparam name=parm2 value=value2gtEl servidor Web que proporciona esta paacutegina no da soporte al coacutedigo SERVLETltservletgt

Javadoc HTMLServletldquoClase HTMLParameterrdquo en la paacutegina 225La clase HTMLParameter representa los paraacutemetros que puede utilizar con la clase HTMLServletCada uno de los paraacutemetros tiene un nombre y un valor propios

Clases de tablas HTMLLa clase HTMLTable de IBM Toolbox para Java permite preparar de manera sencilla las tablas que sepueden utilizar en las paacuteginas HTML

Esta clase proporciona meacutetodos para obtener y establecer los diversos atributos de la tabla como seindica a continuacioacutenv Obtener y establecer la anchura del bordev Obtener el nuacutemero de filas de la tablav Antildeadir una columna o fila al final de la tablav Eliminar una columna o fila situada en una posicioacuten de columna o fila especificada

Ejemplo coacutemo se utilizan las clases HTMLTable

El ejemplo siguiente muestra coacutemo se utilizan las clases HTMLTable

ldquoEjemplo coacutemo se utilizan las clases HTMLTablerdquo en la paacutegina 502Informacioacuten relacionadaJavadoc HTMLTable

Clase HTMLTableCell

La clase HTMLTableCell toma como entrada cualquier objeto HTMLTagElement y crea el coacutedigo HTMLde casilla de tabla con el elemento especificado El elemento se puede establecer en el constructor omediante uno de los dos meacutetodos setElement()

Se pueden recuperar o actualizar muchos atributos de las casillas utilizando los meacutetodos proporcionadosen la clase HTMLTableCell Algunas de las acciones que se pueden realizar con estos meacutetodos sonv Obtener o establecer la distribucioacuten de filasv Obtener o establecer la altura de las casillasv Establecer si los datos de la casilla utilizaraacuten los convenios de desglose normal de liacutenea HTML

A continuacioacuten figura un ejemplo que crea un objeto HTMLTableCell y visualiza el coacutedigo HTMLCree un objeto HTMLHyperlinkHTMLHyperlink link = new HTMLHyperlink(httpwwwibmcom

Paacutegina de presentacioacuten de IBM)HTMLTableCell cell = new HTMLTableCell(link)cellsetHorizontalAlignment(HTMLConstantsCENTER)Systemoutprintln(cellgetTag())

226 IBM Toolbox para Java IBM Toolbox para Java

El meacutetodo getTag() anterior proporciona la salida del ejemplo

lttd align=centergtlta href=httpwwwibmcomgtPaacutegina de presentacioacuten de IBMltagtlttdgtJavadoc HTMLTableCellJavadoc HTMLTagElement

Clase HTMLTableRow

La clase HTMLTableRow crea una fila dentro de una tabla Esta clase proporciona diversos meacutetodos paraobtener y establecer los atributos de una fila

Los meacutetodos de la clase HTMLTableRow permiten llevar a cabo estas accionesv Antildeadir una columna a la fila o eliminar una columna de la filav Obtener datos de la columna que tiene el iacutendice especificadov Obtener el iacutendice de la columna que tiene la casilla especificadav Obtener el nuacutemero de columnas que hay en una filav Establecer la alineacioacuten horizontal y vertical

A continuacioacuten figura un ejemplo de HTMLTableRow Cree una fila y establezca la alineacioacutenHTMLTableRow row = new HTMLTableRow()rowsetHorizontalAlignment(HTMLTableRowCENTER)

Cree la informacioacuten de columna y antildeaacutedala a la filaHTMLText account = new HTMLText(customers_[rowIndex]getAccount())HTMLText name = new HTMLText(customers_[rowIndex]getName())HTMLText balance = new HTMLText(customers_[rowIndex]getBalance())

rowaddColumn(new HTMLTableCell(account))rowaddColumn(new HTMLTableCell(name))rowaddColumn(new HTMLTableCell(balance))

Antildeada la fila a un objeto HTMLTable (se presupone que ya existe la tabla)tableaddRow(row)

Informacioacuten relacionadaJavadoc HTMLTableRow

Clase HTMLTableHeader

La clase HTMLTableHeader es heredera de la clase HTMLTableCell Crea un tipo especiacutefico de casilla lacasilla de cabecera que proporciona una casilla de tipo ltthgt en vez de una casilla de tipo lttdgt Al igualque sucede con la clase HTMLTableCell se puede llamar a diversos meacutetodos con el fin de actualizar orecuperar los atributos de la casilla de cabecera

A continuacioacuten figura un ejemplo de HTMLTableHeader Cree las cabeceras de la tablaHTMLTableHeader account_header = new HTMLTableHeader(new HTMLText(CUENTA))HTMLTableHeader name_header = new HTMLTableHeader(new HTMLText(NOMBRE))HTMLTableHeader balance_header = new HTMLTableHeader()HTMLText balance = new HTMLText(SALDO)balance_headersetElement(balance)

Antildeada las cabeceras de tabla a un objeto HTMLTable (se presupone que ya existe la tabla)tableaddColumnHeader(account_header)tableaddColumnHeader(name_header)tableaddColumnHeader(balance_header)

Informacioacuten relacionada

IBM Toolbox para Java 227

Javadoc HTMLTableHeader

Clase HTMLTableCaption

La clase HTMLTableCaption crea un tiacutetulo para la tabla HTML Proporciona meacutetodos para actualizar yrecuperar los atributos del tiacutetulo Por ejemplo puede utilizar setAlignment() para especificar con queacutecomponente de la tabla se debe alinear el tiacutetulo

A continuacioacuten figura un ejemplo de HTMLTableCaption Cree unobjeto HTMLTableCaption predeterminado y establezca el texto del tiacutetulo

HTMLTableCaption caption = new HTMLTableCaption()captionsetElement(Saldos de cuenta de cliente - 1 de enero de 2000)

Antildeada el tiacutetulo de tabla a un objeto HTMLTable (se presupone que ya existe la tabla)tablesetCaption(caption)

Informacioacuten relacionadaJavadoc HTMLTableCaption

Clase HTMLTextLa clase HTMLText de IBM Toolbox para Java permite acceder a las propiedades del texto de la paacuteginaHTML Mediante la clase HTMLText puede obtener establecer y comprobar el estado de numerososatributos del texto

Estos atributos incluyen los siguientesv Obtener o establecer el tamantildeo del fontv Activar (true) o desactivar (false) el atributo de negrita o determinar si ya estaacute activadov Activar (true) o desactivar (false) el atributo de subrayado o determinar si ya estaacute activadov Obtener o establecer la alineacioacuten horizontal del texto

A continuacioacuten figura un ejemplo en el que se crea un objeto HTMLText se activa el atributo de negrita yse establece el tamantildeo del font en 5

HTMLText text = new HTMLText(IBM)textsetBold(true)textsetSize(5)Systemoutprintln(textgetTag())

La sentencia de imprimir genera el siguiente coacutedigo HTMLltfont size=5gtltbgtIBMltbgtltfontgt

Este coacutedigo cuando se utiliza en una paacutegina HTML ofrece este aspecto

IBM

Informacioacuten relacionadaJavadoc HTMLText

Clases HTMLTreeLa clase HTMLTree permite preparar de manera sencilla un aacuterbol jeraacuterquico de elementos HTML que sepuede utilizar en las paacuteginas HTML

Esta clase proporciona meacutetodos para obtener y establecer los diversos atributos del aacuterbol ademaacutes de losmeacutetodos que permiten llevar a cabo las acciones siguientesv Obtener y establecer la peticioacuten de servlet HTTPv Antildeadir un objeto HTMLTreeElement o FileTreeElement al aacuterbol

228 IBM Toolbox para Java IBM Toolbox para Java

v Eliminar un objeto HTMLTreeElement o FileTreeElement del aacuterbol

Ejemplos coacutemo se utilizan las clases HTMLTree

En los ejemplos siguientes se muestran diversas formas de utilizar las clases HTMLTreev ldquoEjemplo coacutemo se utilizan las clases HTMLTreerdquo en la paacutegina 493v ldquoEjemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrerrdquoInformacioacuten relacionadaJavadoc HTMLTree

Ejemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrer

El ejemplo siguiente consta de tres archivos que juntos muestran coacutemo crear un aacuterbol de sistema dearchivos integrado que se pueda recorrer El ejemplo utiliza marcos para visualizar un HTMLTree yFileListElement en un servletv FileTreeExamplejava - Este archivo genera los marcos HTML y arranca el servletv TreeNavjava - Este archivo construye y gestiona el aacuterbolv TreeListjava - Este archivo visualiza el contenido de las selecciones efectuadas en la clase TreeNavjava

Clase HTMLTreeElement

La clase HTMLTreeElement representa un elemento jeraacuterquico dentro de un objeto HTMLTree o de otrosobjetos HTMLTreeElement

Se pueden recuperar o actualizar muchos atributos de elementos de aacuterbol utilizando los meacutetodosproporcionados en la clase HTMLTreeElement Algunas de las acciones que se pueden realizar con estosmeacutetodos sonv Obtener o establecer el texto visible del elemento de aacuterbolv Obtener o establecer el URL del icono expandido y contraiacutedov Establecer si el elemento de aacuterbol se expandiraacute

A continuacioacuten figura un ejemplo que crea un objeto HTMLTreeElement y visualiza el coacutedigo HTML Cree un objeto HTMLTreeHTMLTree tree = new HTMLTree()

Cree el objeto HTMLTreeElement padreHTMLTreeElement parentElement = new HTMLTreeElement()parentElementsetTextUrl(new HTMLHyperlink(httpMiPaacuteginaWeb Mi paacutegina Web))

Cree el objeto HTMLTreeElement hijoHTMLTreeElement childElement = new HTMLTreeElement()childElementsetTextUrl(new HTMLHyperlink(httpOtraPaacuteginaWeb Otra paacutegina Web))parentElementaddElement(childElement)

Antildeada el elemento de aacuterbol al aacuterboltreeaddElement(parentElement)Systemoutprintln(treegetTag())

El meacutetodo getTag() del ejemplo anterior genera coacutedigos HTML como los siguienteslttable cellpadding=0 cellspacing=3gtlttrgtlttdgtltfont color=0000FFgtltugt-ltugtltfontgt lttdgtlttdgtltfont color=0000FFgtltugtMi paacutegina Webltugtltfontgtlttdgtlttrgt

lttrgt

IBM Toolbox para Java 229

lttdgt lttdgtlttdgtlttable cellpadding=0 cellspacing=3gtlttrgtlttdgtltfont color=0000FFgtltugt-ltugtltfontgt lttdgtlttdgtltfont color=0000FFgtltugtOtra paacutegina Webltugtltfontgt lttdgtlttrgtlttablegtlttdgtlttrgtlttablegt

Informacioacuten relacionadaJavadoc HTMLTreeElement

Clase FileTreeElement

La clase FileTreeElement de IBM Toolbox para Java representa el sistema de archivos integrado dentro deuna vista HTMLTree

Se pueden recuperar o actualizar muchos atributos de elementos de aacuterbol utilizando los meacutetodosproporcionados en la clase HTMLTreeElement Tambieacuten puede obtener y establecer el nombre y la viacutea deacceso de las unidades compartidas NetServer

Algunas de las acciones que estos meacutetodos permiten llevar a cabo sonv Obtener o establecer el URL del icono expandido y contraiacutedo (meacutetodo heredado)v Establecer si el elemento de aacuterbol se expandiraacute (meacutetodo heredado)v Obtener o establecer el nombre de la unidad compartida NetServerv Obtener o establecer la viacutea de acceso de la unidad compartida NetServer

Ejemplo coacutemo se utiliza FileTreeElement

A continuacioacuten figura un ejemplo que crea un objeto FileTreeElement y visualiza el coacutedigo HTML Cree un objeto HTMLTreeHTMLTree tree = new HTMLTree()

Cree un objeto URLParserURLParser urlParser = new URLParser(httpServletRequestgetRequestURI())

Cree un objeto AS400AS400 system = new AS400(mySystem myUserId myPassword)

Cree un objeto IFSJavaFileIFSJavaFile root = new IFSJavaFile(system QIBM)

Cree un objeto DirFilter y obtenga los directoriosDirFilter filter = new DirFilter()File[] dirList = rootlistFiles(filter)

for (int i=0 i lt dirListlength i++)

Cree un objeto FileTreeElementFileTreeElement node = new FileTreeElement(dirList[i])

Establezca el URL del iconoServletHyperlink sl = new ServletHyperlink(urlParsergetURI())slsetHttpServletResponse(resp)elementsetIconUrl(sl)

Antildeada el objeto FileTreeElement al aacuterbol

230 IBM Toolbox para Java IBM Toolbox para Java

treeaddElement(element)

Systemoutprintln(treegetTag())

El meacutetodo getTag() anterior proporciona la salida del ejemploInformacioacuten relacionadaJavadoc FileTreeElement

Clase FileListElement

La clase FileListElement de IBM Toolbox para Java permite crear un elemento de lista de archivos querepresenta el contenido de un directorio de sistema de archivos integrado

Puede utilizar el objeto FileListElement para representar el contenido de una unidad compartidaNetServer obteniendo y estableciendo el nombre y la viacutea de acceso de las unidades compartidasNetServer

La clase FileListElement proporciona meacutetodos que permiten llevar a cabo estas accionesv Listar y ordenar los elementos de la lista de archivosv Obtener y establecer la peticioacuten de servlet HTTPv Obtener y establecer FileListRendererv Obtener y establecer HTMLTable con el que se visualizaraacute la lista de archivosv Obtener y establecer el nombre de una unidad compartida NetServerv Obtener y establecer la viacutea de acceso de una unidad compartida NetServer

Puede utilizar la clase FileListElement con otras clases del paquete htmlv Con una clase FileListRenderer puede especificar coacutemo desea visualizar la lista de archivosv Con la clase FileTreeElement puede crear una lista que se pueda recorrer de archivos de sistema de

archivos integrado o archivos compartidos NetServer

Ejemplo Utilizar FileListElement para crear un aacuterbol de sistema de archivos integrado que se puedarecorrer

El ejemplo que sigue muestra coacutemo se puede utilizar la clase FileListElement con las clases HTMLTree(FileTreeElement y HTMLTreeElement) para crear un aacuterbol de sistema de archivos integrado que se puedarecorrer El ejemplo tambieacuten contiene coacutedigo para establecer la viacutea de acceso de una unidad compartidaNetServer

ldquoEjemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrerrdquo en la paacutegina 229Informacioacuten relacionadaJavadoc FileListElementJavadoc FileTreeElementJavadoc HTMLTreeElement

Clase FileListRenderer

La clase FileListRenderer de IBM Toolbox para Java representa cualquier campo de los objetos File(directorios y archivos) en un objeto FileListElement

La clase FileListRenderer ofrece meacutetodos que permiten llevar a cabo las acciones siguientesv Obtener el nombre del directoriov Obtener el nombre del archivo

IBM Toolbox para Java 231

v Obtener el nombre del directorio padrev Devolver la fila de datos que desea visualizar en el objeto FileListElement

En este ejemplo se crea un objeto FileListElement con un representador Cree un objeto FileListElementFileListElement fileList = new FileListElement(sys httpservletrequest)

Establezca el representador especiacutefico para este servlet que ampliacutea FileListRenderer y altera temporalmente los meacutetodos aplicablesfileListsetRenderer(new myFileListRenderer(request))

Si no desea utilizar el representador predeterminado puede ampliar FileListRenderer y alterartemporalmente los meacutetodos o crear otros nuevos Por ejemplo puede desear asegurarse de impedir quese pasen los nombres de directorios o archivos especiacuteficos con unas extensiones determinadas al objetoFileListElement Ampliando la clase y alterando temporalmente el meacutetodo correspondiente puededevolver un valor nulo para estos archivos y directorios con lo que se asegura de que no se visualicen

Para personalizar por completo las filas de un objeto FileListElement utilice el meacutetodo getRowData() Unejemplo de personalizacioacuten de datos de filas mediante getRowData() podriacutea ser antildeadir una columna a losdatos de fila o reorganizar las columnas Cuando el comportamiento predeterminado del objetoFileListRenderer sea satisfactorio no seraacute necesario que lleve a cabo ninguna programacioacuten adicional yaque la clase FileListElement crea un objeto FileListRenderer predeterminadoReferencia relacionadaldquoClase FileListElementrdquo en la paacutegina 231La clase FileListElement de IBM Toolbox para Java permite crear un elemento de lista de archivos querepresenta el contenido de un directorio de sistema de archivos integradoInformacioacuten relacionadaJavadoc FileListRenderer

Clases ReportWriterEl paquete comibmas400utilreportwriter proporciona clases que permiten acceder a datos de un archivofuente XML o datos generados por servlets o JavaServer Pages y darles formato con facilidad

El paquete reportwriter ofrece un modo coacutemodo de especificar tres paquetes distintos pero relacionadosv comibmas400utilreportwriterpclwriterv comibmas400utilreportwriterpdfwriterv comibmas400utilreportwriterprocessor

Estos paquetes contienen diversas clases que permiten dar formato a corrientes de datos XML y generarinformes en esos formatos Compruebe que tiene los archivos JAR necesarios en la CLASSPATH entre losque debe haber un analizador XML y un procesador XSLT Encontraraacute maacutes informacioacuten en estas paacuteginasv Archivos JAR

Las clases Context (de los paquetes pclwriter y pdfwriter) definen meacutetodos que las clases ReportProcessornecesitan para representar datos XML y JSP en el formato elegidov Utilice PCLContext junto con una clase ReportWriter para generar un informe en el formato PCL

(Printer Control Language) de Hewlett Packardv Utilice PDFContext junto con una clase ReportWriter para generar un informe en el formato PDF

(Portable Document Format) de Adobe

Las clases ReportProcessor (del paquete processor) permiten generar informes con formato a partir de lainformacioacuten que la aplicacioacuten recoge de los datos fuente XML servlets Java y JavaServer Pages (JSP)

232 IBM Toolbox para Java IBM Toolbox para Java

v Utilice la clase JSPReportProcessor para recuperar datos de servlets y paacuteginas JSP para generarinformes en los formatos disponibles (contextos)

Clases ContextLas clases Context de IBM Toolbox para Java soportan formatos de datos especiacuteficos que en combinacioacutencon las clases OutputQueue y SpooledFileOutputStream permiten a las clases ReportWriter generarinformes en ese formato y colocar esos informes en un archivo en spool

La aplicacioacuten solo tiene que crear una instancia de la clase Context que las clases ReportWriterposteriormente utilizan para generar los informes La aplicacioacuten nunca llama directamente a ninguno delos meacutetodos de ninguna clase Context Los meacutetodos PCLContext y PDFContext estaacuten pensados para eluso interno de las clases ReportWriter

Para construir una instancia de la clase Context se necesita un OutputStream (del paquete javaio) y unPageFormat (del paquete javaawtprint) El Ejemplo Utilizar JSPReportProcessor con PDFContextmuestra coacutemo se puede construir y utilizar las clases Context con otras clases ReportWriter para generarinformes

Javadoc OutputQueueJavadoc SpooledFileOutputStreamldquoClases ReportWriterrdquo en la paacutegina 232El paquete comibmas400utilreportwriter proporciona clases que permiten acceder a datos de unarchivo fuente XML o datos generados por servlets o JavaServer Pages y darles formato con facilidadldquoEjemplo coacutemo se utiliza XSLReportProcessor con PCLContextrdquo en la paacutegina 517Este ejemplo no debe utilizarse ya que la clase XSLReportProcessor ha dejado de estar soportadaldquoEjemplo coacutemo se utiliza JSPReportProcessor con PDFContextrdquo en la paacutegina 514Este ejemplo utiliza las clases JSPReportProcessor y PDFContext para obtener datos de un URLespecificado y convertir los datos a formato PDF Despueacutes los datos se convierten en un documentoPDF

Clase JSPReportProcessorLa clase JSPReportProcessor permite crear un documento o informe a partir del contenido de unaJavaServer Page (JSP) o un servlet Java

Utilice esta clase para obtener un servlet o JSP de un URL determinado y crear un documento a partir delcontenido El servlet o JSP debe proporcionar los datos del documento incluidos los objetos de formatoXSL El usuario debe especificar el contexto de salida y el origen de datos de entrada de JSP antes depoder generar las paacuteginas del documento A continuacioacuten puede convertir los datos del informe en unformato de corriente de datos de salida especiacutefico

La clase JSPReportProcessor permite llevar a cabo estas accionesv Procesar el informev Establecer un URL como plantilla

Los ejemplos que hay a continuacioacuten muestran coacutemo pueden utilizarse las clases JSPReportProcessor yPDFContext para generar un informe Los ejemplos contienen el coacutedigo Java y JSP que puede vermediante los enlaces siguientes Tambieacuten puede bajar un archivo zip que contiene los archivos fuente JSPXML y XSL de ejemplo para los ejemplos de JSPReportProcessorv ldquoEjemplo coacutemo se utiliza JSPReportProcessor con PDFContextrdquo en la paacutegina 514v ldquoEjemplo archivo JSP de ejemplo de JSPReportProcessorrdquo en la paacutegina 515

Tecnologiacutea Java Server Pages

Clase XSLReportProcessorLa clase XSLReportProcessor ya no estaacute soportada y no debe utilizarse

IBM Toolbox para Java 233

La clase XSLReportProcessor permite crear un documento o informe transformando los datos fuente XMLy daacutendoles formato con una hoja de estilo XSL Utilice esta clase para crear el informe empleando unahoja de estilo XSL que contenga los objetos de formato (FO) XSL que deben cumplir la especificacioacutenXSL A continuacioacuten utilice una clase Context para convertir los datos del informe en un formato decorriente de datos de salida especiacutefico

La clase XSLReportProcessor permite llevar a cabo estas accionesv Establecer la hoja de estilo XSLv Establecer el origen de datos XMLv Establecer el fuente FO XSLv Procesar un informe

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo pueden utilizarse las clases XSLReportProcessor yPCLContext para generar un informe Los ejemplos contienen el coacutedigo Java XML y XSL que puede vermediante los enlaces siguientes Tambieacuten puede bajar un archivo zip con los archivos fuente XML XSL yJSP de ejemplo para los ejemplos de XSLReportProcessor y JSPReportProcessorv Ejemplo coacutemo se utiliza XSLReportProcessor con PCLContextv Ejemplo archivo XML de ejemplo de XSLReportProcessorv Ejemplo archivo XSL de ejemplo de XSLReportProcessor

Para obtener maacutes informacioacuten sobre XML y XSL consulte el tema XML Toolkit que se encuentra enInformation Center

Clases de seguridadUtilice las clases de seguridad de IBM Toolbox para Java para proporcionar conexiones protegidas con unservidor verificar la identidad de un usuario y asociar un usuario a la hebra de sistema operativo cuandose esteacute ejecutando en el servidor local

Los servicios de seguridad incluidos sonv Una infraestructura de comunicaciones que utiliza Java Secure Socket Extension (JSSE) proporciona

conexiones seguras tanto mediante el cifrado de los datos intercambiados entre un cliente y una sesioacutende servidor como mediante la autenticacioacuten de servidor

v Los servicios de autenticacioacuten proporcionan la posibilidad dendash Autenticar una identidad de usuario y su contrasentildea en relacioacuten con el registro de usuarios de IBM

indash Capacidad de asignar una identidad a la hebra de IBM i actual

SSL (capa de sockets segura)SSL (capa de sockets segura) proporciona conexiones seguras mediante tanto mediante el cifrado de losdatos intercambiados entre un cliente y una sesioacuten de servidor como mediante la autenticacioacuten deservidor

La utilizacioacuten de SSL incide de forma negativa en el rendimiento ya que las conexiones SSL son maacuteslentas que las que no tienen cifrado Utilice conexiones SSL cuando la seguridad de los datos transferidossea maacutes importante que el rendimiento (por ejemplo al transferir informacioacuten de tarjetas de creacutedito o deestado de cuentas bancarias)

Poacutengase en contacto con el representante de IBM para obtener maacutes informacioacuten

Utilizacioacuten del cifrado entre las clases de IBM Toolbox para Java y los servidores IBM i

234 IBM Toolbox para Java IBM Toolbox para Java

Utilizacioacuten de SSL para cifrar datos entre IBM Toolbox para Java y los servidores IBM i

Puede utilizar SSL para cifrar los datos que se intercambian entre las clases de IBM Toolbox para Java ylos servidores IBM i

En el lado del cliente utilice JSSE para cifrar los datos En el lado del servidor debe utilizar el gestor decertificados digitales de IBM i a fin de configurar los servidores IBM i para intercambiar los datoscifrados

Configuracioacuten del cliente y del servidor para utilizar SSL

Para cifrar los datos que fluyen entre las clases de IBM Toolbox para Java y los servidores IBM i lleve acabo estas tareas1 Configure los servidores para intercambiar datos cifrados2 Utilice el objeto SecureAS400 para forzar a IBM Toolbox para Java a cifrar datos

Nota con la realizacioacuten de los dos primeros pasos anteriores solo se crea una viacutea de acceso seguraentre el cliente y el servidor La aplicacioacuten debe utilizar el objeto SecureAS400 para indicar a IBMToolbox para Java queacute datos debe cifrar Los datos que fluyen por el objeto SecureAS400 son losuacutenicos datos que se cifran Si emplea un objeto AS400 los datos no se cifraraacuten y se utilizaraacute la viacutea deacceso normal hasta el servidor

Configuracioacuten de IBM i para utilizar SSL

Para configurar el sistema para utilizar SSL con IBM Toolbox para Java siga estos pasos1 Obtenga y configure el certificado de servidor2 Aplique el certificado a los siguientes sistemas utilizados por IBM Toolbox para Java

v QIBM_OS400_QZBS_SVR_CENTRALv QIBM_OS400_QZBS_SVR_DATABASEv QIBM_OS400_QZBS_SVR_DTAQv QIBM_OS400_QZBS_SVR_NETPRTv QIBM_OS400_QZBS_SVR_RMTCMDv QIBM_OS400_QZBS_SVR_SIGNONv QIBM_OS400_QZBS_SVR_FILEv QIBM_OS400_QRW_SVR_DDM_DRDA

Obtener y configurar certificados de servidor

Antes de obtener y configurar el certificado de servidor debe instalar los productos siguientes

v Programa bajo licencia IBM HTTP Server (5770-DG1)v Opcioacuten 34 del sistema operativo base (Gestor de Certificados Digitales)

El proceso que siga para obtener y configurar el certificado de servidor depende del tipo de certificadoque utilicev Si obtiene un certificado de una autoridad de confianza (como por ejemplo VeriSign Inc o RSA Data

Security Inc) instale el certificado en el sistema y a continuacioacuten apliacutequelo a los servidores de hostv Si opta por no utilizar un certificado de una autoridad de confianza puede construir su propio

certificado para ser utilizado en el sistema Construya el certificado mediante el Gestor de CertificadosDigitales1 Cree la autoridad certificadora en el sistema Consulte el tema correspondiente de Information

Center Actuar como CA propia

IBM Toolbox para Java 235

2 Cree un certificado del sistema a partir de la autoridad certificadora que ha creado3 Asigne queacute servidores de host van a utilizar el certificado del sistema que ha creado

Servicios de autenticacioacutenIBM Toolbox para Java proporciona clases que interactuacutean con los servicios de seguridad proporcionadospor IBM i

Concretamente se proporciona soporte para autenticar una identidad de usuario al que a veces se hacereferencia como principal y una contrasentildea en relacioacuten con el registro de usuarios de IBM i Entonces sepuede establecer una credencial que represente al usuario autenticado La credencial permite alterar laidentidad de la hebra de IBM i actual para que trabaje bajo las autorizaciones y los permisos del usuarioautenticado En efecto este intercambio de identidad hace que la hebra actuacutee como si el usuarioautenticado hubiese realizado un inicio de sesioacuten

Visioacuten general del soporte proporcionado

El objeto AS400 proporciona autenticacioacuten para un determinado perfil de usuario y su contrasentildea enrelacioacuten con el servidor Tambieacuten se pueden recuperar para el sistema tickets de kerberos y siacutembolos deperfil que representen perfiles de usuario y contrasentildeas autenticados

Nota para utilizar los tickets de kerberos debe configurarse la interfaz de programacioacuten de aplicacionesJava General Security Services (JGSS) Para obtener maacutes informacioacuten sobre JGSS consulte la

Documentacioacuten de seguridad de Java

Para utilizar los tickets de kerberos establezca uacutenicamente el nombre de sistema (y no la contrasentildea) enel objeto AS400 La identidad de usuario se recupera mediante la infraestructura de JGSS Solo puedeestablecer un meacutetodo de autenticacioacuten en un objeto AS400 a la vez Al establecer la contrasentildea se borranlos tickets de kerberos o los siacutembolos de perfil

Para utilizar los siacutembolos de perfil utilice los meacutetodos getProfileToken() para recuperar instancias de laclase ProfileTokenCredential El siacutembolo de perfil puede describirse como la representacioacuten de un perfilde usuario y una contrasentildea autenticados para un servidor especiacutefico Los siacutembolos de perfil caducan conel tiempo (duran como maacuteximo una hora) pero en algunos casos se pueden renovar para que su tiempode vida sea maacutes largo

Nota si utiliza la clase ProfileTokenCredential no olvide consultar la informacioacuten situada al final de estapaacutegina sobre los meacutetodos para establecer siacutembolos

El ejemplo siguiente crea un objeto sistema y utiliza ese objeto para generar un siacutembolo de perfil Acontinuacioacuten el ejemplo utiliza el siacutembolo de perfil para crear otro objeto sistema y emplea el segundoobjeto sistema para conectar con el servicio de mandatos

AS400 system = new AS400(mySystemName MYUSERID MYPASSWORD)ProfileTokenCredential myPT = systemgetProfileToken()AS400 system2 = new AS400(mySystemName myPT)system2connectService(AS400COMMAND)

Establecer identidades de hebra

Una credencial se puede establecer ya sea en un contexto remoto o en un contexto local Una vez creadase puede serializar o distribuir seguacuten lo requiera la aplicacioacuten llamadora Se puede utilizar unacredencial cuando se pasa a un proceso en ejecucioacuten en el servidor asociado para modificar ointercambiar (swap) la identidad de la hebra de IBM i y llevar a cabo tareas en nombre del usuariopreviamente autenticado

Una aplicacioacuten praacutectica de este soporte seriacutea en una aplicacioacuten de dos niveles en el primer nivel (porejemplo un PC) una interfaz graacutefica de usuario realizariacutea la autenticacioacuten de un perfil de usuario y una

236 IBM Toolbox para Java IBM Toolbox para Java

contrasentildea y en el segundo nivel (el servidor) se llevariacutea a cabo el trabajo de ese usuario Al utilizarcredenciales de siacutembolo de perfil (clases ProfileTokenCredential) la aplicacioacuten puede evitar el tener quepasar directamente los ID de usuario y las contrasentildeas a traveacutes de la red Entonces el siacutembolo de perfilse puede distribuir al programa del segundo nivel que puede realizar el intercambio swap() y operar bajolas autorizaciones y los permisos de IBM i asignados al usuario

Nota los siacutembolos de perfil son inherentemente maacutes seguros que pasar un perfil de usuario y unacontrasentildea debido a su tiempo de vida limitado sin embargo la aplicacioacuten auacuten los debe considerar comoinformacioacuten delicada y manejarlos como tal Debido a que el siacutembolo representa a un usuario autenticadoy su contrasentildea una aplicacioacuten hostil podriacutea aprovecharse de eacutel para trabajar en nombre de ese usuarioLa aplicacioacuten es en uacuteltima instancia la que debe encargarse de que el acceso a las credenciales se realicede manera segura

Meacutetodos para establecer siacutembolos de ProfileTokenCredential

Si desea emplear los meacutetodos para establecer siacutembolos de la clase ProfileTokenCredential debe distinguirentre los diferentes modos de especificar contrasentildeasv Como un valor especial como por ejemplo NOPWD o NOPWDCHK utilizando un entero de valor

especial definidov Como la contrasentildea del perfil de usuario utilizando una serie que representa la contrasentildea

Nota en la V5R3 IBM Toolbox para Java establece como obsoletos los meacutetodos setToken que no precisanla distincioacuten del modo de especificar la contrasentildea

Asimismo los meacutetodos setToken permiten a los usuarios remotos especificar valores especiales decontrasentildea y admiten contrasentildeas de perfil de usuario maacutes largas de hasta 128 caracteres

Para especificar un entero de valor especial de contrasentildea como por ejemplo NOPWD o NOPWDCHKutilice uno de los meacutetodos siguientesv setToken(AS400Principal principal int passwordSpecialValue)v setToken(String name int passwordSpecialValue)

La clase ProfileTokenCredential incluye las siguientes constantes estaacuteticas para los enteros de valorespecial de contrasentildeav ProfileTokenCredentialPW_NOPWD indica NOPWDv ProfileTokenCredentialPW_NOPWDCHK indica NOPWDCHK

Para especificar una contrasentildea de perfil de usuario como una serie emplee uno de los meacutetodossiguientesv setTokenExtended(AS400Principal principal String password)v setTokenExtended(String name String password)

Los meacutetodos setTokenExended no permiten pasar series de valor especial de contrasentildea como paraacutemetrode contrasentildea Por ejemplo estos meacutetodos no admiten la serie de contrasentildea NOPWD

Encontraraacute maacutes detalles en la informacioacuten de consulta del Javadoc ProfileTokenCredential

Ejemplo

En este coacutedigo encontraraacute un ejemplo de coacutemo se utiliza una credencial de siacutembolo de perfil paraintercambiar la identidad de la hebra de IBM i y llevar a cabo tareas en nombre de un determinadousuario

Javadoc AS400

IBM Toolbox para Java 237

Javadoc ProfileTokenCredential

Clases de servletsLas clases de servlets que se proporcionan con IBM Toolbox para Java funcionan con las clases de accesoque se encuentran en el servidor Web para ofrecerle acceso a la informacioacuten ubicada en el servidorUsted es quien decide de queacute manera va a utilizar las clases de servlets como ayuda para sus propiosproyectos de servlets

En el siguiente diagrama se ve coacutemo las clases de servlets funcionan entre el navegador el servidor Weby los datos de IBM i Un navegador se conecta al servidor Web que estaacute ejecutando el servlet Losarchivos jt400Servletjar y jt400jar residen en el servidor Web porque las clases de servlets utilizanalgunas de las clases de acceso para recuperar los datos y las clases HTML para presentar los datos Elservidor Web se conecta al servidor en el que estaacuten los datos

Figura 1 coacutemo funcionan los servlets

ldquoDescripcioacutenexhaustiva de la figura 1 coacutemo funcionan los servlets (rzahh585gif)rdquo

Nota el archivo jt400Servletjar incluye tanto las clases HTML como las clases de servlets Debe actualizarla CLASSPATH para que sentildeale a los dos archivos (jt400Servletjar y jt400jar) si desea utilizar las clasesde los paquetes comibmas400utilhtml y comibmas400utilservlet

Encontraraacute maacutes informacioacuten sobre los servlets en general en la seccioacuten Consulta o referencia

Descripcioacuten exhaustiva de la figura 1 coacutemo funcionan los servlets (rzahh585gif)que se encuentra en IBM Toolbox para Java clases de servlet

Esta figura muestra de forma general coacutemo funcionan los servlets

Descripcioacuten

La figura consta de los elementos siguientesv Una imagen situada a la izquierda de un PC con la etiqueta Navegador que representa una instancia

de un navegador que se ejecuta en un PCv Una imagen de un servidor IBM i a la derecha con la etiqueta Datos de IBM i que representa la

ubicacioacuten de los datos a los que desea que acceda el servletv Una imagen de un servidor IBM i en el medio (entre las otras dos imaacutegenes) con la etiqueta Servidor

Web que representa el servidor Web Varios elementos con etiqueta situados en la imagen del servidorWeb indican archivos o funciones que residen en el servidor Webndash Un oacutevalo verde (Servlet) que representa la ubicacioacuten del coacutedigo del servletndash Un ciacuterculo de color canela (jt400Servlet) que indica la ubicacioacuten del archivo jt400Servletjarndash Un ciacuterculo de color canela (jt400) que indica la ubicacioacuten del archivo jt400jar

238 IBM Toolbox para Java IBM Toolbox para Java

Nota el servidor Web no tiene que estar en un servidor IBM i pero puede estarlo e incluso puede serel mismo servidor que el indicado por la imagen Datos de IBM i

v Diversas liacuteneas que conectan las imaacutegenes entre siacute

Una liacutenea etiquetada con HTML conecta el navegador (la imagen de la izquierda) con un servlet (el oacutevaloverde) en el servidor Web (la imagen del medio) La liacutenea tiene la etiqueta HTML ya que habitualmentelos servlets utilizan HTML para servir datos al navegador

El servidor Web ejecuta dos archivos JAR de IBM Toolbox para Java (los ciacuterculos de color canela)jt400Servletjar y jt400jar Las clases de jt400Servletjar junto con las clases de jt400jar permiten alservidor Web ejecutar un servlet que conecta faacutecilmente con servidores que contienen datos de IBM i (laimagen de la derecha) La liacutenea con puntas de flecha en ambos extremos que conecta las dos imaacutegenesindica esta conexioacuten

Clases de autenticacioacutenDos clases del paquete de servlets llevan a cabo la autenticacioacuten de servlets AuthenticationServlet yAS400Servlet

Clase AuthenticationServlet

AuthenticationServlet es una implementacioacuten de HttpServlet que lleva a cabo la autenticacioacuten baacutesica deservlets Las subclases de AuthenticationServlet alteraraacuten temporalmente uno o varios de los meacutetodossiguientesv Altere temporalmente el meacutetodo validateAuthority() para realizar la autenticacioacuten (obligatorio)v Altere temporalmente el meacutetodo bypassAuthentication() para que la subclase autentique uacutenicamente

determinadas peticionesv Altere temporalmente el meacutetodo postValidation() para permitir el proceso adicional de la peticioacuten tras

la autenticacioacuten

La clase AuthenticationServlet proporciona meacutetodos que permiten llevar a cabo estas accionesv Inicializar el servletv Obtener el ID de usuario autenticadov Establecer un ID de usuario tras eludir la autenticacioacutenv Anotar excepciones y mensajes

Clase AS400Servlet

La clase AS400Servlet es una subclase abstracta de AuthenticationServlet que representa un servletHTML Puede utilizar una agrupacioacuten de conexiones para compartir conexiones y gestionar el nuacutemero deconexiones que un usuario de servlet puede tener con el servidor

La clase AS400Servlet proporciona meacutetodos que permiten llevar a cabo estas accionesv Validar la autoridad de usuario (alterando temporalmente el meacutetodo validateAuthority() de la clase

AuthenticationServlet)v Conectarse a un sistemav Obtener objetos de agrupacioacuten de conexiones de la agrupacioacuten y devolver objetos de agrupacioacuten de

conexiones a la agrupacioacutenv Cerrar una agrupacioacuten de conexionesv Obtener y establecer los coacutedigos head de documentos HTMLv Obtener y establecer los coacutedigos end de documentos HTML

Encontraraacute maacutes informacioacuten sobre los servlets en general en la seccioacuten Consulta o referencia

IBM Toolbox para Java 239

Javadoc AuthenticationServletJavadoc AS400Servlet

Clase RowDataLa clase RowData es una clase abstracta que proporciona una manera de describir una lista de datos yacceder a ella

Las clases RowData le permiten realizar estas tareasv Obtener y establecer la posicioacuten actualv Obtener los datos de fila situados en una columna dada utilizando el meacutetodo getObject()v Obtener los metadatos de la filav Obtener o establecer las propiedades de un objeto situado en una columna dadav Obtener el nuacutemero de filas de la lista mediante el meacutetodo length()

Posicioacuten de RowData

Hay varios meacutetodos que permiten obtener y establecer la posicioacuten actual dentro de una lista La tablasiguiente indica los meacutetodos para establecer y obtener correspondientes a las clases RowData

Meacutetodos para establecer Meacutetodos para obtener

absolute() next() getCurrentPosition()

afterLast() previous() isAfterLast()

beforeFirst() relative() isBeforeFirst()

first() isFirst()

last() isLast()

Informacioacuten relacionadaJavadoc RowData

Clase ListRowData

La clase ListRowData de IBM Toolbox para Java representa una lista de datos en formato de tabla En latabla cada fila contiene un nuacutemero finito de columnas determinado por el objeto ListMetaData y cadacolumna dentro de una fila contiene un elemento de datos individual Los datos pueden corresponder aun directorio del sistema de archivos integrado a una lista de trabajos a una lista de impresoras o a otrosdiversos datos

La clase ListRowData le permite llevar a cabo estas tareasv Antildeadir y eliminar filas de la lista de resultadosv Obtener y establecer la filav Obtener informacioacuten sobre las columnas de la lista con el meacutetodo getMetaData()v Establecer informacioacuten de columna con el meacutetodo setMetaData()

La clase ListRowData representa una lista de datos Mediante las clases de acceso de IBM Toolbox paraJava la clase ListRowData puede representar numerosos tipos de informacioacuten entre ellos los siguientesv Un directorio del sistema de archivos integradov Una lista de trabajosv Una lista de mensajes de una cola de mensajesv Una lista de usuariosv Una lista de impresoras

240 IBM Toolbox para Java IBM Toolbox para Java

Ejemplo

El ejemplo siguiente muestra coacutemo funcionan las clases ListRowData y HTMLTableConverter El ejemplomuestra el coacutedigo Java el coacutedigo HTML y el aspecto HTML

ldquoEjemplo coacutemo se utiliza ListRowDatardquo en la paacutegina 533Javadoc ListRowData

Clase RecordListRowData

La clase RecordListRowData de IBM Toolbox para Java permite realizar las siguientes accionesv Antildeadir y eliminar filas de la lista de registrosv Obtener y establecer la filav Establecer el formato de registro con el meacutetodo setRecordFormatv Obtener el formato de registro

La clase RecordListRowData representa una lista de registros Los registros se pueden obtener delservidor con distintos formatos tales comov Un registro que deba leerse de un archivo del servidor o escribirse en eacutelv Una entrada de una cola de datosv Los datos de paraacutemetro de una llamada a programav Los datos que se devuelvan y necesiten convertirse entre el formato del servidor y el formato Java

Este ejemplo muestra coacutemo funcionan las clases RecordListRowData y HTMLTableConverter Muestra elcoacutedigo Java el coacutedigo HTML y el aspecto HTMLInformacioacuten relacionadaJavadoc RecordListRowData

Clase ResourceListRowData

La clase ResourceListRowData de IBM Toolbox para Java representa una lista de recursos de datosUtilice objetos ResourceListRowData para representar cualquier implementacioacuten de la interfazResourceList

A las listas de recursos se les da el formato de una serie de filas y cada una de las filas contiene unnuacutemero finito de columnas que viene determinado por la cantidad de ID de atributo de columna Cadacolumna de una fila contiene un elemento de datos individual

La clase ResourceListRowData proporciona meacutetodos que permiten llevar a cabo las acciones siguientesv Obtener y establecer los ID de atributo de columnav Obtener y establecer la lista de recursosv Recuperar el nuacutemero de filas de la listav Obtener los datos de columna de la fila actualv Obtener la lista de propiedades del objeto de datosv gtObtener los metadatos de la lista

Ejemplo visualizar una lista de recursos en un servlet

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

IBM Toolbox para Java 241

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Informacioacuten relacionadaJavadoc ResourceListRowData

Clase QLResultSetRowData

La clase SQLResultSetRowData representa un conjunto de resultados de SQL en forma de lista de datosEstos datos los genera una sentencia SQL mediante JDBC Con los meacutetodos proporcionados puedeobtener y establecer los metadatos del conjunto de resultados

Este ejemplo muestra coacutemo funcionan las clases ListRowData y HTMLTableConverter Muestra el coacutedigoJava el coacutedigo HTML y el aspecto HTMLReferencia relacionadaldquoClases JDBCrdquo en la paacutegina 62JDBC es una interfaz de programas de aplicacioacuten (API) incluida en la plataforma Java que permite a losprogramas Java conectar con una gran variedad de bases de datosInformacioacuten relacionadaJavadoc SQLResultSetRowData

Clases RowMetaDataLa clase RowMetaData define una interfaz que se utiliza para obtener informacioacuten acerca de las columnasde un objeto RowData

Con las clases RowMetaData puede hacer estas tareasv Obtener el nuacutemero de columnasv Obtener el nombre tipo o tamantildeo de la columnav Obtener o establecer la etiqueta de columnav Obtener la precisioacuten o la escala de los datos de columnav Determinar si los datos de una columna son datos de textoInformacioacuten relacionadaJavadoc RowMetaData

Clase ListMetaData

La clase ListMetaData de IBM Toolbox para Java permite obtener informacioacuten acerca de las columnas deuna clase ListRowData y cambiar sus valores Utiliza el meacutetodo setColumns() para establecer el nuacutemerode columnas borrando la informacioacuten de columna que pudiera haber antes Alternativamente tambieacutenpuede usted pasar el nuacutemero de columnas cuando establezca los paraacutemetros del constructor

Ejemplo

El ejemplo siguiente muestra coacutemo funcionan las clases ListMetaData ListRowData yHTMLTableConverter Muestra el coacutedigo Java el coacutedigo HTML y el aspecto HTML

242 IBM Toolbox para Java IBM Toolbox para Java

ldquoEjemplo coacutemo se utiliza ListRowDatardquo en la paacutegina 533Javadoc ListMetaDataldquoClase ListRowDatardquo en la paacutegina 240La clase ListRowData de IBM Toolbox para Java representa una lista de datos en formato de tabla Enla tabla cada fila contiene un nuacutemero finito de columnas determinado por el objeto ListMetaData ycada columna dentro de una fila contiene un elemento de datos individual Los datos puedencorresponder a un directorio del sistema de archivos integrado a una lista de trabajos a una lista deimpresoras o a otros diversos datos

Clase RecordFormatMetaData

La clase RecordFormatMetaData utiliza la clase RecordFormat de IBM Toolbox para Java Le permiteproporcionar el formato de registro cuando establezca los paraacutemetros del constructor o bien utilizar losmeacutetodos get y set para acceder al formato de registro

El ejemplo siguiente muestra coacutemo se crea un objeto RecordFormatMetaData Cree un objeto RecordFormatMetaData a partir de un formato de registro de un archivo secuencialRecordFormat recordFormat = sequentialFilegetRecordFormat()RecordFormatMetaData metadata = new RecordFormatMetaData(recordFormat)

Visualice los nombres de las columnas del archivoint numberOfColumns = metadatagetColumnCount()for (int column=0 column lt numberOfColumns column++)

Systemoutprintln(metadatagetColumnName(column))

Informacioacuten relacionadaJavadoc RecordFormatMetaDataJavadoc RecordFormat

Clase SQLResultSetMetaData

La clase SQLResultSetMetaData devuelve informacioacuten acerca de las columnas de un objetoSQLResultSetRowData Puede proporcionar el conjunto de resultados cuando establezca los paraacutemetrosdel constructor o bien utilizar los meacutetodos get y set para acceder a los metadatos del conjunto deresultados

El ejemplo de coacutedigo siguiente muestra coacutemo se crea un objeto SQLResultSetMetaData Cree un objeto SQLResultSetMetaData a partir de los metadatos del conjunto de resultadosSQLResultSetRowData rowdata = new SQLResultSetRowData(resultSet)SQLResultSetMetaData sqlMetadata = rowdatagetMetaData()

Visualice la precisioacuten de las columnas que no sean de textoString name = nullint numberOfColumns = sqlMetadatagetColumnCount()for (int column=0 column lt numberOfColumns column++)

name = sqlMetadatagetColumnName(column)if (sqlMetadataisTextData(column))

Systemoutprintln(La columna + name + contiene datos de texto)else

Systemoutprintln(La columna + name + tiene una precisioacuten igual a +sqlMetadatagetPrecision(column))

Javadoc SQLResultSetMetaData

IBM Toolbox para Java 243

ldquoClase QLResultSetRowDatardquo en la paacutegina 242La clase SQLResultSetRowData representa un conjunto de resultados de SQL en forma de lista dedatos Estos datos los genera una sentencia SQL mediante JDBC Con los meacutetodos proporcionadospuede obtener y establecer los metadatos del conjunto de resultados

Clases conversorasLas clases conversoras de IBM Toolbox para Java permiten convertir los datos de las filas en matrices detipo serie con formato

El resultado tiene formato HTML y estaacute preparado para presentarse en una paacutegina HTML Las clases quese encargan de convertir son las siguientes

Clase StringConverter

La clase StringConverter es una clase abstracta que representa un conversor de tipo serie de los datos deuna fila Proporciona un meacutetodo convert() para convertir los datos de la fila Este meacutetodo devuelve unarepresentacioacuten en forma de matriz de series de los datos de esa filaInformacioacuten relacionadaJavadoc StringConverter

Clase HTMLFormConverter

Las clases HTMLFormConverter de IBM Toolbox para Java ampliacutean la clase StringConverterproporcionando un meacutetodo de conversioacuten adicional llamado convertToForms() Este meacutetodo convierte losdatos de las filas en una matriz de tablas HTML de una sola fila Estos coacutedigos de tabla le permitenvisualizar la informacioacuten formateada en un navegador

Para adaptar el aspecto del formulario HTML puede utilizar los diversos meacutetodos get y set a fin de ver ocambiar los atributos del formulario Por ejemplo entre los atributos que puede establecer se encuentranlos siguientesv Alineacioacutenv Espaciado de casillasv Hiperenlaces de cabecerav Anchura

Ejemplo coacutemo se utiliza HTMLFormConverter

El ejemplo siguiente muestra coacutemo se utiliza HTMLFormConverter (Puede compilar y ejecutar esteejemplo con un servidor Web en ejecucioacuten)

Coacutemo se utiliza HTMLFormConverterReferencia relacionadaldquoClase StringConverterrdquoLa clase StringConverter es una clase abstracta que representa un conversor de tipo serie de los datos deuna fila Proporciona un meacutetodo convert() para convertir los datos de la fila Este meacutetodo devuelve unarepresentacioacuten en forma de matriz de series de los datos de esa filaInformacioacuten relacionadaJavadoc HTMLFormConverter

Clase HTMLTableConverter

La clase HTMLTableConverter ampliacutea la clase StringConverter proporcionando un meacutetodoconvertToTables() Este meacutetodo convierte los datos de las filas en una matriz de tablas HTML que unservlet puede utilizar para visualizar la lista en un navegador

244 IBM Toolbox para Java IBM Toolbox para Java

Los meacutetodos getTable() y setTable() le permiten elegir una tabla predeterminada que se utilizaraacute durantela conversioacuten Puede establecer cabeceras de tabla dentro del objeto tabla HTML o puede utilizar losmetadatos para la informacioacuten de cabecera estableciendo para ello el valor true en el meacutetodosetUseMetaData()

El meacutetodo setMaximumTableSize() le permite limitar el nuacutemero de filas de una sola tabla Si todos losdatos de las filas no caben en el tamantildeo de tabla especificado el conversor generaraacute otro objeto tablaHTML en la matriz de salida Este proceso continuaraacute hasta que se hayan convertido los datos de todaslas filas

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase HTMLTableConverterv Ejemplo coacutemo se utiliza ListRowDatav Ejemplo coacutemo se utiliza RecordListRowDatav Ejemplo coacutemo se utiliza SQLResultSetRowDatav Ejemplo presentar un objeto ResourceList en un servlet

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Javadoc HTMLTableConverter

Clases de utilidadesLas clases de utilidades permiten realizar tareas administrativas por ejemplo utilizar la claseAS400JarMaker

IBM Toolbox para Java ofrece las siguientes utilidades

Clases de instalacioacuten y actualizacioacuten en clientePara la mayoriacutea de objetivos de instalacioacuten y actualizacioacuten se puede hacer referencia a las clases de IBMToolbox para Java en la ubicacioacuten que tienen en el sistema de archivos integrado en el servidor

Dado que se aplican arreglos temporales de programa (PTF) a esta ubicacioacuten los programas Java queacceden directamente a estas clases en el servidor reciben estas actualizaciones de modo automaacutetico Peroel acceso a las clases desde el servidor no siempre funciona en concreto en las situaciones siguientesv Si el enlace de comunicaciones que conecta el servidor y el cliente es de baja velocidad el rendimiento

que supone cargar las clases desde el servidor puede ser inaceptable

IBM Toolbox para Java 245

v Si las aplicaciones Java utilizan la variable de entorno CLASSPATH para acceder a las clases que hayen el sistema de archivos del cliente es necesario que IBM i Access para Windows redirija al servidorlas llamadas al sistema de archivos Tal vez no sea posible que IBM i Access para Windows resida en elcliente

En estos casos instalar las clases en el cliente es una solucioacuten mejor

AS400ToolboxJarMakerMientras que el formato de archivo JAR se disentildeoacute para agilizar la bajada de los archivos de programaJava AS400ToolboxJarMaker genera una carga auacuten maacutes raacutepida de un archivo JAR de IBM Toolbox paraJava mediante su capacidad de crear un archivo JAR maacutes pequentildeo a partir de uno maacutes grande

Ademaacutes la clase AS400ToolboxJarMaker puede descomprimir un archivo JAR para que asiacute sea posibleacceder a los archivos de contenido individuales para uso baacutesico

Flexibilidad de AS400ToolboxJarMaker

Todas las funciones de AS400ToolboxJarMaker se llevan a cabo con la clase JarMaker y la subclaseAS400ToolboxJarMakerv La herramienta JarMaker geneacuterica funciona en cualquier archivo JAR o Zip subdivide un archivo JAR

o reduce el tamantildeo de un archivo JAR eliminando las clases que no se usanv AS400ToolboxJarMaker personaliza y ampliacutea las funciones de JarMaker para facilitar su uso con los

archivos JAR de IBM Toolbox para Java

En funcioacuten de sus necesidades puede invocar los meacutetodos de AS400ToolboxJarMaker desde dentro delprograma Java o desde una liacutenea de mandatos Para efectuar una llamada a AS400ToolboxJarMaker desdela liacutenea de mandatos utilice la sintaxis que se indica a continuacioacuten

java utilitiesJarMaker [opciones]

dondev opciones = una o varias de las opciones disponibles

Si desea obtener un conjunto completo de las opciones disponibles para ejecutarse en una solicitud deliacutenea de mandatos consulte lo siguiente en el Javadocv Opciones para la clase base JarMakerv Opciones ampliadas para la subclase AS400ToolboxJarMaker

Utilizacioacuten de AS400ToolboxJarMaker

Puede emplear AS400ToolboxJarMaker para trabajar con los archivos JAR de varios modosv Descomprimir un archivo empaquetado dentro de un archivo JARv Subdividir un archivo JAR grande en varios archivos JAR maacutes pequentildeosv Excluir los archivos de IBM Toolbox para Java que la aplicacioacuten no necesita ejecutar

Descompresioacuten de un archivo JAR

Suponga que desea descomprimir un uacutenico archivo empaquetado dentro de un archivo JARAS400ToolboxJarMaker le permite expandir el archivo en uno de estos directoriosv Directorio actual extract(jarFile)v Otro directorio extract(jarFile outputDirectory)

Por ejemplo el coacutedigo siguiente hace que del archivo jt400jar se extraigan AS400class y todas sus clasesdependientes

246 IBM Toolbox para Java IBM Toolbox para Java

java utilitiesAS400ToolboxJarMaker -source jt400jar-extract outputDir-requiredFile comibmas400accessAS400class

Subdivisioacuten de un archivo JAR individual en varios archivos JAR maacutes pequentildeos

Suponga que desea subdividir un archivo JAR de gran tamantildeo en archivos JAR maacutes pequentildeos enfuncioacuten de su preferencia para el tamantildeo maacuteximo de archivo JAR AS400ToolboxJarMaker de acuerdocon ello le proporciona la funcioacuten split(jarFile splitSize)

En el coacutedigo que figura a continuacioacuten jt400jar se subdivide en una serie de archivos JAR maacutes pequentildeosninguno de los cuales tiene maacutes de 300 KB

java utilitiesAS400ToolboxJarMaker -split 300

Eliminacioacuten de archivos no utilizados de un archivo JAR

Con AS400ToolboxJarMaker puede excluir todos los archivos de IBM Toolbox para Java que su aplicacioacutenno necesite para ello basta con que seleccione uacutenicamente los componentes idiomas y CCSID de IBMToolbox para Java necesarios para que se ejecute la aplicacioacuten AS400ToolboxJarMaker tambieacuten leproporciona la opcioacuten de incluir o excluir los archivos de JavaBean asociados a los componentes que haelegido

Por ejemplo el mandato siguiente crea un archivo JAR que contiene uacutenicamente las clases de IBMToolbox para Java necesarias para que funcionen los componentes CommandCall y ProgramCall de IBMToolbox para Java

java utilitiesAS400ToolboxJarMaker -component CommandCallProgramCall

Ademaacutes si no es necesario hacer que las series de texto se conviertan entre Unicode y las tablas deconversioacuten del juego de caracteres de doble byte (DBCS) se puede crear un archivo JAR cuyo tamantildeotenga 400 KB menos tan solo con omitir las tablas de conversioacuten innecesarias con la opcioacuten -ccsid

java utilitiesAS400ToolboxJarMaker -component CommandCallProgramCall -ccsid 61952

Nota las clases conversoras no se incluyen junto con las clases de llamada a programa Al incluir lasclases de llamada a programa tambieacuten deberaacute incluir expliacutecitamente las clases conversoras utilizadas porel programa por medio de la opcioacuten -ccsid

Javadoc JarMakerJavadoc AS400ToolboxJarMaker

Componentes soportados en IBM Toolbox para Java

En la tabla siguiente figuran los ID de componente que puede especificar al invocar la herramientaAS400ToolboxJarMakerv La columna Componente muestra el nombre comuacuten del componentev La columna Palabra clave indica la palabra clave que debe especificar al utilizar el coacutedigo de opcioacuten

-componentv La columna Constante muestra el valor de Integer que debe especificar en setComponents() y

getComponents()

Componente Palabra clave Constante

Objeto de servidor AS400 AS400ToolboxJarMakerAS400

Llamada amandato

CommandCall AS400ToolboxJarMakerCOMMAND_CALL

Agrupacioacuten deconexiones

ConnectionPool AS400ToolboxJarMakerCONNECTION_POOL

IBM Toolbox para Java 247

Componente Palabra clave Constante

Aacutereas de datos DataArea AS400ToolboxJarMakerDATA_AREA

Conversioacuten ydescripcioacuten dedatos

DataDescription AS400ToolboxJarMakerDATA_DESCRIPTION

Colas de datos DataQueue AS400ToolboxJarMakerDATA_QUEUE

Certificadosdigitales

DigitalCertificate AS400ToolboxJarMakerDIGITAL_CERTIFICATE

FTP FTP AS400ToolboxJarMakerFTP

Sistema dearchivos integrado

IntegratedFileSystem AS400ToolboxJarMakerINTEGRATED_FILE_SYSTEM

JAAS JAAS AS400ToolboxJarMakerJAAS

Llamada aaplicacioacuten Java

JavaApplicationCall AS400ToolboxJarMakerJAVA_APPLICATION_CALL

JDBC JDBC AS400ToolboxJarMakerJDBC

Trabajos y colas detrabajos

Job AS400ToolboxJarMakerJOB

Mensajes y colasde mensajes

Message AS400ToolboxJarMakerMESSAGE

Tipos de datosnumeacutericos

NumericDataTypes AS400ToolboxJarMakerNUMERIC_DATA_TYPES

NetServer NetServer AS400ToolboxJarMakerNETSERVER

Impresioacuten de red Print AS400ToolboxJarMakerPRINT

Llamada aprograma

ProgramCall AS400ToolboxJarMakerPROGRAM_CALL

Acceso a nivel deregistro

RecordLevelAccess AS400ToolboxJarMakerRECORD_LEVEL_ACCESS

Servidor seguro SecureAS400 AS400ToolboxJarMakerSECURE_AS400

Llamada aprograma deservicio

ServiceProgramCall AS400ToolboxJarMakerSERVICE_PROGRAM_CALL

Estado del sistema SystemStatus AS400ToolboxJarMakerSYSTEM_STATUS

Valores del sistema SystemValue AS400ToolboxJarMakerSYSTEM_VALUE

Rastreo yanotaciones

Rastreo AS400ToolboxJarMakerTRACE

Usuarios y grupos User AS400ToolboxJarMakerUSER

Espacios deusuario

UserSpace AS400ToolboxJarMakerUSER_SPACE

Objeto de servidorvisual

AS400Visual AS400ToolboxJarMakerAS400_VISUAL

Llamada amandato visual

CommandCallVisual AS400ToolboxJarMakerCOMMAND_CALL_VISUAL

Colas de datosvisuales

DataQueueVisual AS400ToolboxJarMakerDATA_QUEUE_VISUAL

Sistema dearchivos integradovisual

IntegratedFileSystemVisual AS400ToolboxJarMakerINTEGRATED_FILE_SYSTEM_VISUAL

248 IBM Toolbox para Java IBM Toolbox para Java

Componente Palabra clave Constante

Llamada aaplicacioacuten Javavisual

JavaApplicationCallVisual AS400ToolboxJarMakerJAVA_APPLICATION_CALL_VISUAL

JDBC visual JDBCVisual AS400ToolboxJarMakerJDBC_VISUAL

Trabajos y colas detrabajos visuales

JobVisual AS400ToolboxJarMakerJOB_VISUAL

Mensajes y colasde mensajesvisuales

MessageVisual AS400ToolboxJarMakerMESSAGE_VISUAL

Impresioacuten de redvisual

PrintVisual AS400ToolboxJarMakerPRINT_VISUAL

Llamada aprograma visual

ProgramCallVisual AS400ToolboxJarMakerPROGRAM_CALL_VISUAL

Acceso a nivel deregistro visual

RecordLevelAccessVisual AS400ToolboxJarMakerRECORD_LEVEL_ACCESS_VISUAL

Usuarios y gruposvisuales

UserVisual AS400ToolboxJarMakerUSER_VISUAL

Valores de CCSID y codificacioacuten soportados por IBM Toolbox para Java

IBM Toolbox para Java se suministra con un conjunto de tablas de conversioacuten denominadas seguacuten elCCSID

Las clases de IBM Toolbox para Java (como por ejemplo CharConverter) utilizan internamente estas tablasal convertir los datos transferidos a o desde un sistema IBM i Por ejemplo la tabla de conversioacutencorrespondiente al CCSID 1027 estaacute en el archivo comibmas400accessConvTable1027class Las tablasde conversioacuten de los CCSID siguientes se incluyen en el archivo JAR de IBM Toolbox para Java con elJDK se da soporte a otras codificaciones El servidor central del servidor ya no se utiliza para bajar tablasen tiempo de ejecucioacuten Cualquier CCSID especificado para el que no se encuentre una tabla deconversioacuten o una codificacioacuten de JDK haraacute que se genere una excepcioacuten Algunas de estas tablas puedenser redundantes respecto a las tablas incluidas en JDK IBM Toolbox para Java da soporte actualmente alos 122 CCSID de IBM i siguientes

Encontraraacute maacutes informacioacuten acerca de los CCSID asiacute como una lista completa de los CCSID reconocidosen la plataforma IBM i en el tema Globalizacioacuten

CCSID soportados en IBM Toolbox para Java

CCSID Formato Descripcioacuten

37 EBCDIC de un solo byte Estados Unidos y otros

273 EBCDIC de un solo byte Austria Alemania

277 EBCDIC de un solo byte Dinamarca Noruega

278 EBCDIC de un solo byte Finlandia Suecia

280 EBCDIC de un solo byte Italia

284 EBCDIC de un solo byte Espantildea Latinoameacuterica

285 EBCDIC de un solo byte Reino Unido

290 EBCDIC de un solo byte Japoneacutes Katakana (uacutenicamente de unsolo byte)

297 EBCDIC de un solo byte Francia

IBM Toolbox para Java 249

CCSID Formato Descripcioacuten

300 EBCDIC de doble byte Japoneacutes graacutefico (subconjunto de16684)

367 ASCIIISOWindows ASCII (estaacutendar ANSI X34)

420 EBCDIC de un solo byte(bidireccional)

Aacuterabe EBCDIC ST4

423 EBCDIC de un solo byte Griego (para compatibilidad veacutease875)

424 EBCDIC de un solo byte(bidireccional)

Hebreo EBCDIC ST4

437 ASCIIISOWindows ASCII (Datos de PC EEUU)

500 EBCDIC de un solo byte Latino 1 (MNCS)

720 ASCIIISOWindows Aacuterabe (MS-DOS)

737 ASCIIISOWindows Griego (MS-DOS)

775 ASCIIISOWindows Baacuteltico (MS-DOS)

813 ASCIIISOWindows ISO 8859-7 (Grecolatino)

819 ASCIIISOWindows ISO 8859-1 (Latino 1)

833 EBCDIC de un solo byte Coreano (uacutenicamente de un solobyte)

834 EBCDIC de doble byte Coreano graacutefico (subconjunto de4930)

835 EBCDIC de doble byte Chino tradicional graacutefico

836 EBCDIC de un solo byte Chino simplificado (uacutenicamente deun solo byte)

837 EBCDIC de doble byte Chino simplificado graacutefico

838 EBCDIC de un solo byte Tailandeacutes

850 ASCIIISOWindows Latino 1

851 ASCIIISOWindows Griego

852 ASCIIISOWindows Latino 2

855 ASCIIISOWindows Ciriacutelico

857 ASCIIISOWindows Turco

860 ASCIIISOWindows Portugueacutes

861 ASCIIISOWindows Islandeacutes

862 ASCIIISOWindows (bidireccional) Hebreo ASCII ST4

863 ASCIIISOWindows Canadaacute

864 ASCIIISOWindows (bidireccional) Aacuterabe ASCII ST5

865 ASCIIISOWindows DinamarcaNoruega

866 ASCIIISOWindows CiriacutelicoRuso

869 ASCIIISOWindows Griego

870 EBCDIC de un solo byte Latino 2

871 EBCDIC de un solo byte Islandeacutes

874 ASCIIISOWindows Tailandeacutes (subconjunto de 9066)

875 EBCDIC de un solo byte Griego

878 ASCIIISOWindows Ruso

250 IBM Toolbox para Java IBM Toolbox para Java

CCSID Formato Descripcioacuten

880 EBCDIC de un solo byte Ciriacutelico multilinguumle (paracompatibilidad veacutease 1025)

912 ASCIIISOWindows ISO 8859-2 (Latino 2)

914 ASCIIISOWindows ISO 8859-4 (Latino 4)

915 ASCIIISOWindows ISO 8859-5 (ciriacutelico de 8 bits)

916 ASCIIISOWindows (bidireccional) ISO 8859-8 (hebreo) ST5

920 ASCIIISOWindows ISO 8859-9 (Latino 5)

921 ASCIIISOWindows ISO 8859-13 (baacuteltico de 8 bits)

922 ASCIIISOWindows Estonia ISO-8

923 ASCIIISOWindows ISO 8859-15 (Latino 9)

930 EBCDIC de byte mixto Japoneacutes (subconjunto de 5026)

933 EBCDIC de byte mixto Coreano (subconjunto de 1364)

935 EBCDIC de byte mixto Chino simplificado (subconjunto de1388)

937 EBCDIC de byte mixto Chino tradicional

939 EBCDIC de byte mixto Japoneacutes (subconjunto de 5035)

1025 EBCDIC de un solo byte Ciriacutelico

1026 EBCDIC de un solo byte Turco

1027 EBCDIC de un solo byte Japoneacutes latino (uacutenicamente de unsolo byte)

1046 ASCIIISOWindows (bidireccional) Windows Aacuterabe ST5

1089 ASCIIISOWindows (bidireccional) ISO 8859-6 (Aacuterabe) ST5

1112 EBCDIC de un solo byte Baacuteltico multilinguumle

1122 EBCDIC de un solo byte Estonio

1123 EBCDIC de un solo byte Ucrania

1125 ASCIIISOWindows Ucrania

1129 ASCIIISOWindows Vietnamita

1130 EBCDIC de un solo byte Vietnamita

1131 ASCIIISOWindows Bielorrusia

1132 EBCDIC de un solo byte Lao

1140 EBCDIC de un solo byte Estados Unidos y otros (con soportepara Euro)

1141 EBCDIC de un solo byte Austria Alemania (con soporte paraEuro)

1142 EBCDIC de un solo byte Dinamarca Noruega (con soportepara Euro)

1143 EBCDIC de un solo byte Finlandia Suecia (con soporte paraEuro)

1144 EBCDIC de un solo byte Italia (con soporte para Euro)

1145 EBCDIC de un solo byte Espantildea Latinoameacuterica (con soportepara Euro)

1146 EBCDIC de un solo byte Reino Unido (con soporte para Euro)

1147 EBCDIC de un solo byte Francia (con soporte para Euro)

IBM Toolbox para Java 251

CCSID Formato Descripcioacuten

1148 EBCDIC de un solo byte Latino 1 (MNCS) (soporte para Euro)

1149 EBCDIC de un solo byte Islandia (con soporte para Euro)

1200 Unicode Unicode UCS-2 (little-endian)

1250 ASCIIISOWindows Windows Latin-2

1251 ASCIIISOWindows Windows Ciriacutelico

1252 ASCIIISOWindows Windows Latin-1

1253 ASCIIISOWindows Windows Griego

1254 ASCIIISOWindows Windows Turquiacutea

1255 ASCIIISOWindows (bidireccional) Windows Hebreo ST5

1256 ASCIIISOWindows (bidireccional) Windows Aacuterabe ST5

1257 ASCIIISOWindows Windows Baacuteltico

1258 ASCIIISOWindows Windows Vietnam

1364 EBCDIC de byte mixto Japoneacutes

1388 EBCDIC de byte mixto Chino simplificado

1399 EBCDIC de byte mixto Japoneacutes (en V4R5 y superior)

4396 EBCDIC de doble byte Japoneacutes (subconjunto de 300)

4930 EBCDIC de doble byte Coreano

4931 EBCDIC de doble byte Chino tradicional (subconjunto de835)

4933 EBCDIC de doble byte Chino simplificado GBK graacutefico

4948 ASCIIISOWindows Latino 2 (subconjunto de 852)

4951 ASCIIISOWindows Ciriacutelico (subconjunto de 855)

5026 EBCDIC de byte mixto Japoneacutes

5035 EBCDIC de byte mixto Japoneacutes

5123 EBCDIC de un solo byte Japoneacutes (uacutenicamente de un solo bytecon soporte para Euro)

5351 ASCIIISOWindows (bidireccional) Windows Hebreo (soporte para Euro)ST5

8492 EBCDIC de doble byte Japoneacutes (subconjunto de 300)

8612 EBCDIC de un solo byte Aacuterabe EBCDIC ST5

9026 EBCDIC de doble byte Coreano (subconjunto de 834)

9029 EBCDIC de doble byte Chino simplificado (subconjunto de4933)

9066 ASCIIISOWindows Tailandeacutes (SBCS ampliado)

12588 EBCDIC de doble byte Japoneacutes (subconjunto de 300)

13122 EBCDIC de doble byte Coreano (subconjunto de 834)

16684 EBCDIC de doble byte Japoneacutes (disponible en V4R5)

17218 EBCDIC de doble byte Coreano (subconjunto de 834)

12708 EBCDIC de un solo byte Aacuterabe EBCDIC ST7

13488 Unicode Unicode UCS-2 (big-endian)

28709 EBCDIC de un solo byte Chino tradicional (uacutenicamente de unsolo byte)

252 IBM Toolbox para Java IBM Toolbox para Java

CCSID Formato Descripcioacuten

61952 Unicode IBM i Unicode (utilizadoprincipalmente en el sistema dearchivos integrado)

62211 EBCDIC de un solo byte Hebreo EBCDIC ST5

62224 EBCDIC de un solo byte Aacuterabe EBCDIC ST6

62235 EBCDIC de un solo byte Hebreo EBCDIC ST6

62245 EBCDIC de un solo byte Hebreo EBCDIC ST10

Clase CommandHelpRetrieverLa clase CommandHelpRetriever recupera texto de ayuda para los mandatos CL (Control Language) deIBM i y genera ese texto en formato HTML o UIM (User Interface Manager) Puede ejecutarCommandHelpRetriever desde una liacutenea de mandatos o incorporar la funcioacuten al programa Java

Para utilizar CommandHelpRetriever el servidor debe tener un analizador XML y un procesador XSL enla variable de entorno CLASSPATH Para obtener maacutes informacioacuten consulte ldquoAnalizador XML yprocesador XSLTrdquo en la paacutegina 330

Asimismo el mandato CL Generar documentacioacuten de mandato (GENCMDDOC) utiliza la claseCommandHelpRetriever Asiacute puede emplear el mandato GENCMDDOC simplemente para aprovecharlas posibilidades que proporciona la clase CommandHelpRetriever Para obtener maacutes informacioacutenconsulte la seccioacuten Generar documentacioacuten de mandato (GENCMDDOC) del tema de consulta sobre CL

Ejecutar CommandHelpRetriever desde una liacutenea de mandatos

Puede ejecutar la clase CommandHelpRetriever como un programa de liacutenea de mandatos autoacutenomo Paraejecutar CommandHelpRetriever desde una liacutenea de mandatos debe pasar los siguientes paraacutemetrosmiacutenimosv La biblioteca del servidor que contiene el mandato CL Los mandatos del sistema se encuentran en la

biblioteca QSYSv El mandato CL

Tambieacuten puede pasar paraacutemetros opcionales para CommandHelpRetriever tales como el servidor el IDde usuario la contrasentildea y la ubicacioacuten del archivo generado

Para obtener maacutes informacioacuten consulte la documentacioacuten de consulta de javadocs acerca deCommandHelpRetriever

Ejemplo coacutemo se utiliza CommandHelpRetriever desde una liacutenea de mandatos

El ejemplo siguiente genera un archivo HTML denominado CRTLIBhtml en el directorio actual

Nota el mandato de ejemplo aparece en dos liacuteneas solo con fines de visualizacioacuten Escriba el mandato enuna sola liacutenea

java comibmas400utilCommandHelpRetriever -library QSYS -command CRTLIB-system MySystem -userid MyUserID -password MyPassword

Incorporar la clase CommandHelpRetriever en el programa

Tambieacuten puede utilizar la clase CommandHelpRetriever en la aplicacioacuten Java para ver la documentacioacutende ayuda referida a una serie de mandatos CL especificados Tras crear un objetoCommandHelpRetriever puede utilizar los meacutetodos generateHTML y generateUIM para generardocumentacioacuten de ayuda en ambos formatos

IBM Toolbox para Java 253

Cuando utilice generateHTML() podraacute ver el documento HTML generado en el grupo de paneles delmandato o podraacute especificar otro grupo de paneles

El ejemplo siguiente crea un objeto CommandHelpRetriever y genera objetos String que representan ladocumentacioacuten HTML y UIM correspondiente al mandato CRTLIB

CommandHelpRetriever helpGenerator = new CommandHelpRetriever()AS400 system = new AS400(MySystem MyUserID MyPassword)Command crtlibCommand = new Command(system QSYSLIBCRTLIBCMD)String html = helpGeneratorgenerateHTML(crtlibCommand)String uim = helpGeneratorgenerateUIM(crtlibCommand)

Informacioacuten relacionadaJavadoc CommandHelpRetriever

Clase CommandPrompterLa clase CommandPrompter de IBM Toolbox para Java solicita el paraacutemetro en un mandato determinado

La clase CommandPrompter ofrece funciones parecidas a la solicitud de mandatos CL de (pulsando F4)

Para utilizar CommandPrompter es necesario tener los siguientes archivos JAR en la CLASSPATHv jt400jarv jui400jarv util400jarv jhalljar

Tambieacuten debe tener un analizador XML en la CLASSPATH Para obtener maacutes informacioacuten sobre el uso deun analizador XML adecuado consulte la paacutegina siguiente

ldquoAnalizador XML y procesador XSLTrdquo en la paacutegina 330

Todos los archivos JAR excepto jhalljar se incluyen en IBM Toolbox para Java Para obtener maacutesinformacioacuten acerca de los archivos JAR de IBM Toolbox para Java consulte la seccioacuten Archivos Jar Para

obtener maacutes informacioacuten sobre coacutemo bajar jhalljar consulte el sitio Web de Sun JavaHelp

Para construir un objeto CommandPrompter se le pasan paraacutemetros para el marco padre que inicia elprograma de solicitud el objeto AS400 en el que se solicitaraacute el mandato y la serie del mandato La seriedel mandato puede ser un nombre de mandato una serie de mandato completa o un nombre de mandatoparcial como por ejemplo crt

La visualizacioacuten de CommandPrompter es un diaacutelogo modal que el usuario debe cerrar antes de volveral marco padre CommandPrompter maneja los errores encontrados durante la solicitud En la paacuteginasiguiente encontraraacute un ejemplo de programacioacuten que muestra un modo de utilizar CommandPrompter

ldquoEjemplo coacutemo se utiliza CommandPrompterrdquo en la paacutegina 576

RunJavaApplicationLas clases RunJavaApplication y VRunJavaApplication son programas de utilidad que permiten ejecutarprogramas Java en la JVM de IBM i

A diferencia de las clases JavaApplicationCall y VJavaApplicationCall a las que se llama desde elprograma Java las clases RunJavaApplication y VRunJavaApplication son programas completos

La clase RunJavaApplication es un programa de utilidad de liacutenea de mandatos Permite establecer elentorno (por ejemplo la variable CLASSPATH y las propiedades) del programa Java Primero seespecifica el nombre del programa Java y sus paraacutemetros y despueacutes se inicia el programa Una vez

254 IBM Toolbox para Java IBM Toolbox para Java

iniciado se puede enviar una entrada al programa Java que la recibe por medio de la entrada estaacutendarEl programa Java escribe la salida en la salida estaacutendar y en la salida de errores estaacutendar

El programa de utilidad VRunJavaApplication tiene las mismas posibilidades La diferencia es queVJavaApplicationCall utiliza una interfaz graacutefica de usuario mientras que JavaApplicationCall es unainterfaz de liacutenea de mandatos

Javadoc RunJavaApplicationJavadoc VRunJavaApplicationldquoClase JavaApplicationCallrdquo en la paacutegina 61La clase JavaApplicationCall proporciona la posibilidad de que el cliente utilice la JVM del servidorpara ejecutar un programa Java que reside en el servidor

JPingLa clase JPing es un programa de utilidad de la liacutenea de mandatos que permite consultar los servidorespara ver queacute servicios estaacuten en ejecucioacuten y queacute puertos estaacuten en servicio Para consultar los servidoresdesde dentro de una aplicacioacuten Java utilice la clase AS400JPing

En el Javadoc de JPing encontraraacute maacutes informacioacuten acerca de coacutemo se utiliza JPing desde dentro de unaaplicacioacuten Java

Para efectuar una llamada a JPing desde la liacutenea de mandatos utilice la sintaxis que se indica acontinuacioacuten

java utilitiesJPing Sistema [opciones]

dondev System = el sistema que desea consultarv [opciones] = una o varias de las opciones disponibles

Opciones

Puede utilizar una o varias de las opciones siguientes En el caso de las opciones que tienen abreviaturasla abreviatura se indica entre pareacutentesis

-help (-h o -)Visualiza el texto de ayuda

-service i_Service (-s i_Service)Especifica un servicio especiacutefico para realizar un ping La accioacuten predeterminada consiste enrealizar un ping de todos los servicios Puede utilizar esta opcioacuten para especificar uno de losservicios siguientes as-file as-netprt as-rmtcmd as-dtaq as-database as-ddm as-central yas-signon

-ssl Especifica si se realizaraacute un ping de los puertos ssl o no La accioacuten predeterminada consiste en norealizar un ping de los puertos ssl

-timeout (-t)Especifica el tiempo de espera en milisegundos El valor predeterminado es 20000 (o 20segundos)

Ejemplo coacutemo se utiliza JPing desde la liacutenea de mandatos

Por ejemplo utilice el mandato siguiente para realizar un ping del servicio as-dtaq incluyendo lospuertos ssl y con un tiempo de espera de 5 segundos

java utilitiesJPing myServer -s as-dtaq -ssl -t 5000

Informacioacuten relacionadaJavadoc JPing

IBM Toolbox para Java 255

Javadoc AS400JPing

Beans de IBM Toolbox para JavaLos JavaBeans son componentes de software reutilizables que estaacuten escritos en Java El componente es unfragmento de coacutedigo de programa que proporciona una unidad funcional bien definida puede ser tanpequentildeo como una etiqueta para un botoacuten de una ventana o tan grande como toda una aplicacioacuten

Los JavaBeans pueden ser componentes visuales o no visuales Aun asiacute los JavaBeans no visualesdisponen de una representacioacuten visual (por ejemplo un icono o un nombre) que permite unamanipulacioacuten visual

Muchas clases puacuteblicas de IBM Toolbox para Java tambieacuten son JavaBeans Estas clases se construyeronseguacuten los estaacutendares JavaBean de Javasoft funcionan como componentes reutilizables Las propiedades ylos meacutetodos correspondientes a un bean de IBM Toolbox para Java son iguales a las propiedades y losmeacutetodos de la clase

Los JavaBeans pueden emplearse dentro de un programa de aplicacioacuten o pueden manipularsevisualmente en las herramientas constructoras como el producto IBM VisualAge para Java

Ejemplos

Los ejemplos siguientes muestran coacutemo utilizar JavaBeans en el programa y coacutemo crear un programa apartir de JavaBeans mediante un constructor visual de beans

ldquoEjemplo coacutedigo de bean de IBM Toolbox para Javardquo en la paacutegina 473

ldquoEjemplo crear beans con un constructor visual de beansrdquo en la paacutegina 475

JDBCJDBC es una interfaz de programas de aplicacioacuten (API) incluida en la plataforma Java que permite a losprogramas Java conectar con una gran variedad de bases de datos

El controlador JDBC de IBM Toolbox para Java permite utilizar interfaces API JDBC para emitirsentencias SQL (Structured Query Language) a las bases de datos del servidor y procesar los resultadosprocedentes de las bases de datos del servidor Tambieacuten puede emplear el controlador JDBC de IBMDeveloper Kit para Java denominado controlador JDBC nativov Utilice el controlador JDBC de IBM Toolbox cuando el programa Java esteacute en un sistema y los archivos

de base de datos se encuentren en otro sistema como en un entorno de clienteservidorv Utilice el controlador JDBC nativo cuando tanto el programa Java como los archivos de base de datos

esteacuten en el mismo servidor

Diferentes versiones de JDBC

Existen distintas versiones de la API JDBC el controlador JDBC de IBM Toolbox para Java da soporte alas versiones siguientesv La API JDBC 30 (los paquetes javasql y javaxsql) se incluye en J2SE Versioacuten 14 y 50v La API JDBC 40 API se incluye en Java SE Versioacuten 6v La API JDBC 41 API se incluye en Java SE Versioacuten 7

Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Javapara IBM i 72En IBM i 72 se han realizado numerosas adiciones al soporte de JDBC

256 IBM Toolbox para Java IBM Toolbox para Java

|

|

|

|

Las mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java se detallan en las seccionessiguientesv ldquoAumentar el soporte de indicacioacuten de fecha y hora de precisioacutenrdquov ldquoPropiedad de conexioacuten JDBC QueryTimeoutMechanism nuevardquo

Aumentar el soporte de indicacioacuten de fecha y hora de precisioacuten

En IBM i 72 la precisioacuten maacutexima de una indicacioacuten de fecha y hora aumenta de 6 a 12 El controladorJDBC de Toolbox se ha mejorado para recuperar estos valores de indicacioacuten de fecha y hora maacutes grandesComo la clase javasqlTimestamp solo soporta 9 diacutegitos de precisioacuten se a creado la claseAS400JDBCTimestamp para manejar aquellos casos en los que los datos del servidor incluyan maacutes de 9diacutegitos de precisioacuten

Propiedad de conexioacuten JDBC QueryTimeoutMechanism nueva

El controlador JDBC de Toolbox implementaba originalmente la caracteriacutestica queryTimeout mediante lacaracteriacutestica QQRYTIMLMT del motor de base de datos Sin embargo este mecanismo no permitefinalizar correctamente las operaciones de larga ejecucioacuten

La propiedad de conexioacuten QueryTimeoutMechanism permite implementar queryTimeout mediante unCANCEL de base de datos Los valores posibles son qqrytimlmt y cancel Si se especifica qqrytimlmt lacaracteriacutestica QQRYTIMLMT del motor de base de datos se utilizaraacute para limitar la ejecucioacuten de lasconsultas Si se especifica cancel la sentencia SQL en ejecucioacuten se cancelaraacute una vez transcurra el tiempode espera especificado

Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Javapara IBM i 71En IBM i 71 se han realizado numerosas adiciones al soporte de JDBC

Las mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java se detallan en las seccionessiguientesv ldquoSoporte de tipo de datos XMLrdquov ldquoActualizaciones de metadatos de base de datosrdquo en la paacutegina 258v ldquoSoporte comprometido actualmenterdquo en la paacutegina 259v ldquoSoporte de tipo de matrizrdquo en la paacutegina 259v ldquoSoporte de nombre de esquema largordquo en la paacutegina 260

Soporte de tipo de datos XML

La especificacioacuten de interfaz de JDBC 40 antildeade nuevos meacutetodos y clases para el soporte de tipo de datosXML IBM Toolbox para Java implementa el soporte XML en su controlador JDBC 40 Esto permite a losclientes JDBC acceder faacutecilmente al soporte XML de IBM i 71

Puede establecer los datos en el objeto JDBC SQLXML pasando varios tipos de datos como por ejemplouna serie Java Como ocurre con los demaacutes tipos de datos de columna de texto IBM Toolbox para Java oel Sistema de gestioacuten de bases de datos (DBMS) realiza las conversiones necesarias de datos XML paraque coincidan con el CCSID de la columna XML

DBMS lee y graba los datos XML utilizando ubicadores SQL

Los datos XML que se enviacutean como entrada al DBMS deben manejarse con algunas reglas especiales parapoder corregir la conversioacuten de CCSID Los datos XML de entrada que tienen una declaracioacuten XML conuna codificacioacuten especificada deben codificar correctamente los datos XML con la codificacioacuten

IBM Toolbox para Java 257

||

|

|

|

|||||

|

|||

|||||

especificada Por ejemplo los datos XML codificados en UTF-16 (serie Java) que tienen especificadoUTF-8 en la codificacioacuten de la declaracioacuten XML son incorrectos Si los datos XML de entrada no tienenninguna declaracioacuten el DBMS espera que la corriente de datos se enviacutee en UTF-8 En este caso IBMToolbox para Java convierte primero los datos XML a UTF-8 antes de enviarlos al DBMS para su proceso

Nota las columnas XML en la base de datos se almacenan sin la declaracioacuten XML Cuando se recuperanlos datos XML la declaracioacuten XML se genera dinaacutemicamente lo que puede hacer que los datos XML nosea ideacutenticos a los datos XML enviados como entrada

El DBMS puede optimizar los datos XML cuando sea necesario Por ejemplo un coacutedigo vaciacuteolttaggtlttaggt se convierte en lttaggt Generalmente si los datos XML de entrada no estaacuten en UTF-16 ytienen una declaracioacuten XML con una codificacioacuten especificada no se pasaraacuten a JDBC a traveacutes dePreparedStatementsetString Esto se debe a que los datos en la serie estaacuten en UTF-16 y no coinciden conla codificacioacuten especificada

Existen algunas reglas que determinan coacutemo se devuelven las declaraciones XML desde una consultaJDBC maneja la visibilidad de la declaracioacuten dependiendo de queacute meacutetodo de obtencioacuten de tipo ResultSetse invoque Los meacutetodos que devuelven caracteres como por ejemplo getString() y getClob() nodevuelven la declaracioacuten XML con los datos Los meacutetodos que devuelven datos binarios como porejemplo getBytes() y getBlob() devolveraacuten la declaracioacuten XML Esto se debe a la diferencia en lacodificacioacuten de la declaracioacuten XML y al CCSID de la columna XML real en la tabla Tenga en cuenta quesi se invoca getString() se devolveraacute una serie Unicode que seraacute distinta del CCSID especificado en lacodificacioacuten de la declaracioacuten XML Debido a esta anomaliacutea la declaracioacuten se descarta a menos que seacceda con meacutetodos de obtencioacuten binarios La recuperacioacuten de coacutedigos XML con meacutetodos como getStringpermitiraacute concatenar faacutecilmente los datos XML con otros datos XML porque ya tendraacuten la declaracioacuteneliminada

El soporte JDBC de XML se implementa en los siguientes meacutetodos JDBC de IBM Toolbox para Javav AS400JDBCConnectioncreateSQLXML()v AS400JDBCSQLXML - todos los meacutetodos en esta nueva clasev AS400JDBCPreparedStatementsetSQLXML(int parameterIndex SQLXML xmlObject)v AS400JDBCCallableStatementsetSQLXML(String parameterName SQLXML xmlObject)v AS400JDBCCallableStatementgetSQLXML(int parameterIndex)v AS400JDBCCallableStatementgetSQLXML(String parameterName)v AS400JDBCResultSetgetSQLXML(int columnIndex)v AS400JDBCResultSetgetSQLXML(String columnLabel)v AS400JDBCResultSetupdateSQLXML(int columnIndex SQLXML xmlObject)v AS400JDBCResultSetupdateSQLXML(String columnLabel SQLXML xmlObject)v AS400JDBCRowSetsetSQLXML(int parameterIndex SQLXML xmlObject)v AS400JDBCRowSetsetSQLXML(String parameterName SQLXML xmlObject)

Actualizaciones de metadatos de base de datos

Los metadatos de base de datos se obtienen invocando los distintos meacutetodos de la claseAS400JDBCDatabaseMetaData A partir de IBM i 71 el comportamiento predeterminado de JDBC de IBMToolbox para Java es obtener estos metadatos a partir de un conjunto de procedimientos almacenadosestaacutendar del sistema Esto alinea IBM Toolbox para Java con el soporte JDBC nativo de IBM i ademaacutes decon los controladores JDBC en otras plataformas Anteriormente a IBM i 71 IBM Toolbox para Javaobteniacutea los metadatos del servidor de datos ROI de los servidores de host Este enfoque ha funcionadocorrectamente y tambieacuten ha mantenido IBM Toolbox para Java alineado con ODBC net y otros clientesde IBM i No obstante el problema con este enfoque es que en IBM todos los controladores JDBC de DB2deben funcionar de la misma forma Para ello se utiliza un conjunto de procedimientos almacenados del

258 IBM Toolbox para Java IBM Toolbox para Java

sistema que son comunes en todas las plataformas DB2 Estos procedimientos almacenados del sistema seinvocan para obtener metadatos de base de datos del sistema

Para proporcionar la compatibilidad con versiones anteriores de la funcionalidad de los metadatos puedeutilizarse una nueva propiedad de conexioacuten metadata source para obligar a JDBC de IBM Toolboxpara Java a utilizar el meacutetodo anterior de recuperacioacuten de metadatos de base de datos

Soporte comprometido actualmente

Pueden producirse puntos muertos y tiempos de espera de bloqueo con los niveles de aislamiento queejecutan el bloqueo a nivel de fila especialmente en las aplicaciones que no estaacuten disentildeadas para evitareste tipo de problemas Algunas aplicaciones de base de datos de alto rendimiento no toleran la espera delos bloqueos que se emiten durante el proceso de transaccioacuten y algunas aplicaciones no toleran elproceso de datos no comprometidos pero continuacutean necesitando un comportamiento de no bloqueo paralas transacciones de lectura

Con la nueva semaacutentica de comprometido actualmente si se habilita el soporte comprometido actualmentesoacutelo se devuelven los datos comprometidos como ocurriacutea anteriormente pero ahora los lectores notienen que esperar a que los grabadores liberen los bloqueos de fila En su lugar los datos devueltos a loslectores se basan en la versioacuten comprometida actualmente es decir los datos anteriores al inicio de laoperacioacuten de grabacioacuten

Esta caracteriacutestica tambieacuten implementa una forma de indicar al gestor de base de datos que debe esperarel resultado cuando encuentre datos en proceso de actualizacioacuten

JDBC de IBM Toolbox para Java ha antildeadido el soporte para la semaacutentica de comprometido actualmenteen los oriacutegenes de datos y las conexiones Este soporte se ha antildeadido con las siguientes actualizaciones declasesv AS400JDBCDataSourceCONCURRENTACCESS_NOT_SETv AS400JDBCDataSourceCONCURRENTACCESS_USE_CURRENTLY_COMMITTEDv AS400JDBCDataSourceCONCURRENTACCESS_WAIT_FOR_OUTCOMEv AS400JDBCDataSourceCONCURRENTACCESS_SKIP_LOCKSv AS400JDBCDataSourcesetConcurrentAccessResolution (int)v AS400JDBCDataSourcegetConcurrentAccessResolution ()v AS400JDBCConnectionsetConcurrentAccessResolution (int)v AS400JDBCConnectiongetConcurrentAccessResolution ()

Nota el establecimiento de la resolucioacuten de acceso simultaacuteneo en la conexioacuten soacutelo afecta a las nuevassentencias creadas en las conexiones posteriores al cambio Las sentencias existentes continuacutean utilizandoel valor que se aplicaba al crear la sentencia Tambieacuten dispone de una propiedad de conexioacuten concurrentaccess resolution para establecer esta informacioacuten

Soporte de tipo de matriz

IBM Toolbox para Java da soporte al tipo de datos de matriz SQL de IBM i 71 en los paraacutemetros deprocedimiento almacenado Las matrices de todos los tipos de DB2 estaacuten soportadas excepto los datosque se devuelven en un ubicador

JDBC de IBM Toolbox para Java antildeade soporte para las matrices como paraacutemetros IN OUT e INOUT enlos procedimientos almacenados No obstante los ResultSets devueltos de los procedimientosalmacenados u otras consultas que contengan matrices no estaacuten soportados

JDBC da soporte a la invocacioacuten de procedimientos almacenados en la clase javasqlCallableStatementque IBM Toolbox para Java implementa en AS400JDBCCallableStatement

IBM Toolbox para Java 259

La especificacioacuten JDBC de Sun establece que los controladores JDBC dan soporte a las matricesimplementando la interfaz javasqlArray La implementacioacuten de IBM Toolbox para Java existe en la clasecomibmas400accessAS400JDBCArray A continuacioacuten se proporcionan las nuevas interfaces y losnuevos meacutetodos que IBM Toolbox para Java ha implementado para dar soporte a las matricesv AS400JDBCPreparedStatementsetArray (int parameterIndex Array x)v AS400JDBCCallableStatementgetArray()v AS400JDBCArraygetResultSet()v AS400JDBCArraygetBaseType()v AS400JDBCArraygetBaseTypeName()v AS400JDBCArrayResultSet - todos los meacutetodos en esta nueva clasev AS400JDBConnectioncreateArrayOf(String typeName Object[] elements)

Nota un AS400JDBCArrayResultSet es una copia local de los datos de matriz de un objeto de interfaz deResultSet

Soporte de nombre de esquema largo

DBMS de IBM i 71 ha antildeadido soporte para los nombres de esquema de 128 bytes JDBC de IBM Toolboxpara Java tambieacuten ha antildeadido soporte para los nombres de esquema largos

IBM Toolbox para Java convierte los esquemas de series Java en CCSID del sistema antes de enviar losdatos al DBMS del host IBM Toolbox para Java permite un nombre de esquema largo como esquemapredeterminado No obstante los nombres de esquema largos en la lista de bibliotecas no estaacutensoportados Si se especifica un nombre de esquema largo en la propiedad libraries se emitiraacute un avisodel host y el rastreo indicando que no se ha antildeadido la biblioteca Si se especifica un nombre de esquemalargo como nombre propio en la propiedad libraries IBM Toolbox para Java continuaraacute estableciendo elnombre como esquema predeterminado pero no se antildeadiraacute a la lista de bibliotecas Los clientes quenecesiten utilizar nombres de esquema largos en la lista de bibliotecas deberaacute utilizar el mandato SETPATH de DB2

Los metadatos de base de datos tambieacuten dan soporte a nombres de esquema largos para los paraacutemetros ylos ResultSets devueltos

Los siguientes meacutetodos de metadatos dan soporte a los nombres de esquema largosv AS400JDBCDatabaseMetadatagetMaxSchemaNameLength()v AS400JDBCDatabaseMetadatagetProcedures(String catalog String schemaPattern String

procedureNamePattern)v AS400JDBCDatabaseMetadatagetProcedureColumns(String catalog String schemaPattern String

procedureNamePattern String columnNamePattern)v AS400JDBCDatabaseMetadatagetTables(String catalog String schemaPattern String tableNamePattern

String types[])v AS400JDBCDatabaseMetadatagetSchemas()v AS400JDBCDatabaseMetadatagetColumns(String catalog String schemaPattern String

tableNamePattern String columnNamePattern)v AS400JDBCDatabaseMetadatagetColumnPrivileges(String catalog String schema String table String

columnNamePattern)v AS400JDBCDatabaseMetadatagetTablePrivileges(String catalog String schemaPattern String

tableNamePattern)v AS400JDBCDatabaseMetadatagetBestRowIdentifier(String catalog String schema String table int

scope boolean nullable)v AS400JDBCDatabaseMetadatagetVersionColumns(String catalog String schema String table)

260 IBM Toolbox para Java IBM Toolbox para Java

v AS400JDBCDatabaseMetadatagetPrimaryKeys(String catalog String schema String table)v AS400JDBCDatabaseMetadatagetImportedKeys(String catalog String schema String table)v AS400JDBCDatabaseMetadatagetCrossReference( String parentCatalog String parentSchema String

parentTable String foreignCatalog String foreignSchema String foreignTable)v AS400JDBCDatabaseMetadatagetIndexInfo(String catalog String schema String table boolean unique

boolean approximate)v AS400JDBCDatabaseMetadatagetUDTs(String catalog String schemaPattern String typeNamePattern

int[] types)v AS400JDBCDatabaseMetadatagetSuperTypes(String catalog String schemaPattern String

typeNamePattern)v AS400JDBCDatabaseMetadatagetSuperTables(String catalog String schemaPattern String

tableNamePattern)v AS400JDBCDatabaseMetadatagetAttributes(String catalog String schemaPattern String

typeNamePattern String attributeNamePattern)v AS400JDBCDatabaseMetadatagetSchemas(String catalog String schemaPattern)v AS400JDBCDatabaseMetadatagetFunctions(String catalog String schemaPattern String

functionNamePattern)v AS400JDBCDatabaseMetadatagetFunctionColumns(String catalog String schemaPattern String

functionNamePattern String columnNamePattern)

Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Javapara IBM i 61En IBM i 61 se han realizado numerosas adiciones al soporte de JDBC

Las mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java se detallan en las seccionessiguientesv ldquoSoporte para JDBC 40rdquov ldquoLiacutemite de almacenamiento de consultardquov ldquoTipo de datos flotante decimal (DECFLOAT)rdquo en la paacutegina 262v ldquoPasar el tipo de cliente y el nombre de la aplicacioacuten al servidorrdquo en la paacutegina 263v ldquoLongitud maacutexima de nombres de cursor ampliadardquo en la paacutegina 264v ldquoSoporte de claves generadasrdquo en la paacutegina 264v ldquoSoporte de valores predeterminados mejoradordquo en la paacutegina 264v ldquoMaacuteximo aumentado en la claacuteusula GROUP BYrdquo en la paacutegina 264v ldquoSoporte de actualizacioacuten por lotesrdquo en la paacutegina 264

Soporte para JDBC 40

El soporte para la API JDBC 40 con Java SE Versioacuten 6 estaacute disponible utilizando uno de los siguientesarchivos JARv QIBMProdDataHTTPPublicjt400libjava6jt400jar

v QIBMProdDataOS400jt400libjava6jt400Nativejar

Liacutemite de almacenamiento de consulta

Puede utilizar la propiedad de liacutemite de almacenamiento de consulta para limitar el almacenamientoutilizado por una consulta Esta propiedad compara el liacutemite de almacenamiento especificado con laestimacioacuten de utilizacioacuten de almacenamiento de la consulta Si la estimacioacuten de utilizacioacuten dealmacenamiento sobrepasa el liacutemite de almacenamiento especificado la consulta no puede ejecutarse

IBM Toolbox para Java 261

A partir de V6R1 el controlador JDBC de IBM Toolbox para Java antildeadiraacute los meacutetodos siguientes a laclase AS400JDBCDataSource

setQueryStorageLimit()public void setQueryStorageLimit(int limit)

Especifica el valor de liacutemite de almacenamiento de consulta que debe utilizarse al ejecutar sentencias enuna conexioacuten Los valores vaacutelidos van de -1 a 2 147 352 578 El valor predeterminado es -1 que indica unvalor especial NOMAX

getQueryStorageLimit()public int getQueryStorageLimit()

Devuelve el valor de liacutemite de almacenamiento de consulta utilizado al ejecutar sentencias en unaconexioacuten El valor predeterminado es -1 que indica un valor especial NOMAX

Los sistemas que ejecutan releases de IBM i anteriores a V6R1 ignoraraacuten la propiedadgetQueryStorageLimit

Tipo de datos flotante decimal (DECFLOAT)

DECFLOAT (flotante decimal) hereda propiedades favorables de los tipos de datos float y decimal Losvalores de datos de DECFLOAT se almacenan de forma que los ceros finales sean significativos porejemplo 20 y 200 son representaciones binarias diferentes Sin embargo en comparaciones SQL losvalores se tratan como iguales

El controlador JDBC de IBM Toolbox para Java ha antildeadido los meacutetodos siguientes a la claseAS400JDBCDataSource

setDecfloatRoundingMode()public void setDecfloatRoundingMode(int String mode)

Especifica la modalidad de redondeo que debe utilizarse para nuacutemeros DECFLOAT

getDecfloatRoundingMode()public intString getDecfloatRoundingMode()

Devuelve la modalidad de redondeo utilizada para nuacutemeros DECFLOAT

Los valores vaacutelidos para estos meacutetodos son los siguientes

half even (valor predeterminado)Se redondea en el diacutegito maacutes cercano Si es equidistante entre dos diacutegitos se redondea en eldiacutegito par maacutes cercano El valor numeacuterico de esta constante es 0

half upSe redondea en el diacutegito maacutes cercano Si es equidistante entre dos diacutegitos se redondea haciaarriba El valor numeacuterico de esta constante es 1

down Se redondea en el diacutegito inferior maacutes cercano El valor numeacuterico de esta constante es 2

ceilingSe redondea hacia infinito positivo El valor numeacuterico de esta constante es 3

floor Se redondea hacia infinito negativo El valor numeacuterico de esta constante es 4

half downSe redondea en el diacutegito maacutes cercano Si es equidistante entre dos diacutegitos se redondea haciaabajo El valor numeacuterico de esta constante es 5

262 IBM Toolbox para Java IBM Toolbox para Java

up Se redondea en el diacutegito superior maacutes cercano El valor numeacuterico de esta constante es 6

Pasar el tipo de cliente y el nombre de la aplicacioacuten al servidor

Las aplicaciones Web necesitan un modo de pasar informacioacuten de cliente usuario final al servidor debases de datos a fin de que pueda anotarse informacioacuten maacutes detallada El controlador JDBC de IBMToolbox para Java JDBC permite a una aplicacioacuten alterar temporalmente esta informacioacuten llamando a lossiguientes meacutetodos javasqlConnectionsetClientInfo()

void AS400JDBCConnectionsetClientInfo(javalangString namejavalangString value)

Este meacutetodo establece el valor de la propiedad de informacioacuten de cliente especificada por name en elvalor especificado por value Consulte la descripcioacuten del meacutetodoDatabaseMetadatagetClientInfoProperties para conocer las propiedades de informacioacuten de clientesoportadas por el controlador JDBC de IBM Toolbox para Java

void AS400JDBCConnectionsetClientInfo(javautilProperties properties)

Este meacutetodo establece el valor de las propiedades de informacioacuten de cliente de la conexioacuten El objetoProperties contiene los nombres y valores de las propiedades de informacioacuten de cliente que debenestablecerse El conjunto de propiedades de informacioacuten de cliente contenidas en la lista de propiedadessustituye al conjunto actual de propiedades de informacioacuten de cliente de la conexioacuten Si una propiedadestablecida actualmente en la conexioacuten no estaacute presente en la lista de propiedades dicha propiedad seelimina Si se especifica una lista de propiedades vaciacutea se eliminaraacuten todas las propiedades de laconexioacuten

String AS400JDBCConnectiongetClientInfo(javalangString name)

Este meacutetodo devuelve el valor de la propiedad de informacioacuten de cliente especificada por name Estemeacutetodo puede devolver null si la propiedad de informacioacuten de cliente especificada no se ha establecidoy no tiene un valor predeterminado

Properties AS400JDBCConnectiongetClientInfo()

Este meacutetodo devuelve una lista que contiene el nombre y el valor actual de cada propiedad deinformacioacuten de cliente soportada por el controlador El valor de una propiedad de informacioacuten de clientepuede ser null si la propiedad no se ha establecido y no tiene un valor predeterminado

ResultSet AS400JDBCDatabaseMetaDatagetClientInfoProperties()

Este meacutetodo recupera una lista de las propiedades de informacioacuten de cliente soportadas por elcontrolador El controlador JDBC de IBM Toolbox para Java devuelve un conjunto de resultados con lainformacioacuten siguiente

Tabla 2 Conjunto de resultados para getClientInfoProperties

Nombre Longitud maacutexima valor predeterminado Descripcioacuten

ApplicationName 255 Nombre de la aplicacioacutenque utiliza actualmente laconexioacuten

ClientAccounting 255 Informacioacuten de cuentas

ClientHostname 255 Nombre de host del sistemaen el que se ejecuta laaplicacioacuten que utiliza laconexioacuten

IBM Toolbox para Java 263

Tabla 2 Conjunto de resultados para getClientInfoProperties (continuacioacuten)

Nombre Longitud maacutexima valor predeterminado Descripcioacuten

ClientProgramID 255 Identificacioacuten del programacliente

ClientUser 255 Nombre del usuario para elque trabaja la aplicacioacutenque utiliza la conexioacuten Puede no ser el mismousuario que el utilizado alestablecer la conexioacuten

Longitud maacutexima de nombres de cursor ampliada

A partir de V6R1 la longitud maacutexima de los cursores seraacute de 128 caracteres La longitud maacutexima anteriorera de 8 caracteres Una aplicacioacuten puede establecer el nombre de un cursor llamando al meacutetodojavasqlStatementsetCursorName()

Soporte de claves generadas

En releases anteriores soacutelo podiacutea devolverse una fila de informacioacuten desde una operacioacuten de insercioacuten devarias filas A partir de V6R1 podraacute acceder a maacutes informacioacuten relativa a una operacioacuten de insercioacuten devarias filas Esto permitiraacute recuperar informacioacuten de columnas generada como por ejemplo ROWIDcolumna de identidad secuencia o expresiones generadas El soporte de claves generadas seimplementaraacute en los siguientes meacutetodos JDBC de IBM Toolbox para Javav AS400JDBCStatementgetGeneratedKeys()v AS400JDBCStatementexecute(String sql int autoGeneratedKeys)v AS400JDBCStatementexecute (String sql int[] columnIndexes)v AS400JDBCStatementexecute (String sql String[] columnNames)v AS400JDBCStatementexecuteUpdate(String sql int[] autoGeneratedKeys)v AS400JDBCStatementexecuteUpdate (String sql int[] columnIndexes)v AS400JDBCStatementexecuteUpdate (String sql String[] columnNames)v AS400JDBCConnectionprepareStatement(String sql int autoGeneratedKeys)v AS400JDBCConnectionprepareStatement(String sql int[] columnIndexes)v AS400JDBCConnectionprepareStatement(String sql String[] columnNames)

Soporte de valores predeterminados mejorado

A partir de V6R1 el controlador JDBC de IBM Toolbox para Java devolveraacute un valor predeterminado decolumna en forma de serie por medio del meacutetodo DatabaseMetaDatagetColumns() Si el valorpredeterminado es nulo se devolveraacute una serie con el valor NULL

Maacuteximo aumentado en la claacuteusula GROUP BY

El valor nuevo para DatabaseMetaData getMaxColumnsInGroupBy( ) es 8000

Soporte de actualizacioacuten por lotes

El soporte de actualizacioacuten por lotes mejorado de V6R1 suministraraacute mejor informacioacuten al usuario alejecutar una sentencia de insercioacuten por lotes de varias filas habraacute un campo en el aacuterea de diagnoacutestico ySQLCA que contendraacute el nuacutemero de sentencias satisfactorias para que el usuario pueda determinar mejorla ubicacioacuten de los errores

264 IBM Toolbox para Java IBM Toolbox para Java

El controlador JDBC de IBM Toolbox para Java utilizaraacute esta informacioacuten al crear unajavasqlBatchUpdateException AS400JDBCStatement y AS400JDBCPreparedStatement tambieacuten utilizaraacutenesta informacioacuten para devolver la informacioacuten correcta desde el meacutetodo executeBatch()

Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Javapara IBM i 54Se han mejorado varias funciones de JDBC para IBM i 54

Las mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java se detallan en las seccionessiguientesv ldquoTamantildeo de sentencia de 2 MBrdquov ldquoSoporte de nombre de columna de 128 bytesrdquov ldquoSoporte de rastreo de servidor de host de base de datosrdquov ldquoSoporte de correlacionador eWLMrdquo

Tamantildeo de sentencia de 2 MB

Antes de V5R4 el liacutemite del tamantildeo de sentencias SQL era de 65 535 bytes Esto corresponde a 65 535caracteres cuando el texto de sentencia se representa utilizando un CCSID de un solo byte y 32 767caracteres cuando el texto de sentencia se representa utilizando un CCSID de doble byte Algunos clienteespecialmente aquellos que utilizan aplicaciones que generan sentencias SQL automaacuteticamente resultanafectados por este liacutemite

En V5R4 se ha aumentado el liacutemite de tamantildeo de sentencia IBM i a dos megabytes o 2 097 152 bytes Elcontrolador JDBC de IBM Toolbox para Java siempre enviacutea el texto de sentencias en Unicode de dosbytes Por lo tanto la longitud de sentencia maacutexima en caracteres seraacute de un megabyte o 1 048 576caracteres

Soporte de nombre de columna de 128 bytes

A partir de V5R4 la base de datos daraacute soporte a nombres de columna de hasta 128 bytes para tablasSQL Antes de V5R4 estaban soportados los nombres de columna hasta 30 bytes El controlador JDBC deIBM Toolbox para Java proporcionaraacute estos nombres maacutes largos a los usuarios

Existe una excepcioacuten por la que no se devolveraacuten los nombres de columna de 128 bytes Cuando seutiliza la puesta en memoria cacheacute de paquetes locales y los nombres de columna sobrepasan los 30caracteres el servidor devolveraacute los nombres de columna como el nombre de columna del sistema

Soporte de rastreo de servidor de host de base de datos

Se ha antildeadido una nueva opcioacuten al controlador JDBC de Toolbox para Java para activar el rastreo deservidor de host de base de datos Para dar soporte a esta caracteriacutestica se ha antildeadido la opcioacuten 64 a lapropiedad de conexioacuten rastreo de servidor Para obtener maacutes detalles consulte ldquoPropiedades JDBC deIBM Toolbox para Javardquo en la paacutegina 266

Soporte de correlacionador eWLM

IBM Toolbox para Java aceptaraacute un correlacionador IBM Enterprise Workload Manager (eWLM) y lopasaraacute al host como un correlacionador de atributo de conexioacuten para utilizarlo con las API de Medicioacutende respuestas de aplicacioacuten (ARM) Este correlacionador puede enviarse al host en cualquier momentotras realizarse una conexioacuten utilizando el siguiente meacutetodo en la clase AS400JDBCConnection

setDB2eWLMCorrelator

IBM Toolbox para Java 265

public void setDB2eWLMCorrelator(byte[] bytes)throws SQLException

Establece el correlacionador eWLM Se supone que se utiliza un valor de correlacionador vaacutelido Si elvalor es nulo se desactivaraacute toda la implementacioacuten de ARMeWLM Los correlacionadores eWLMrequieren servidores i5OS V5R3 o posteriores Esta peticioacuten se ignora al ejecutar en servidores V5R2 oanteriores

Paraacutemetrosv bytes El valor del correlacionador eWLM

v SQLException Consulte el Javadoc Clase SQLException

Propiedades JDBC de IBM Toolbox para JavaPueden especificarse muchas propiedades al conectar con una base de datos de servidor utilizando JDBCTodas las propiedades son opcionales y pueden especificarse como parte del URL o en un objetojavautilProperties Si se establece una propiedad tanto en el URL como en un objeto Properties seemplearaacute el valor del URL

Nota la lista siguiente no incluye las propiedades de origen de datos

Las tablas siguientes muestran las distintas propiedades de conexioacuten que este controlador reconoceAlgunas de estas propiedades afectan al rendimiento y otras son atributos de trabajo servidor Las tablasorganizan las propiedades en las categoriacuteas siguientesv ldquoPropiedades generalesrdquov ldquoPropiedades de servidorrdquo en la paacutegina 267v ldquoPropiedades de formatordquo en la paacutegina 271v ldquoPropiedades de rendimientordquo en la paacutegina 272v ldquoPropiedades de ordenacioacutenrdquo en la paacutegina 276v ldquoOtras propiedadesrdquo en la paacutegina 277

Propiedades generales

Las propiedades generales son atributos del sistema que especifican el usuario la contrasentildea y si senecesita una solicitud para conectarse al servidor

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

password Especifica la contrasentildea para conectarse al servidorSi no se especifica ninguna se le solicitaraacute al usuariosalvo que se haya establecido la propiedad prompten false en cuyo caso el intento de conexioacuten fallaraacute

no contrasentildea delsistema

(se solicitaraacute alusuario)

prompt Especifica si debe presentarse al usuario una solicituden el caso de que sea necesario un nombre deusuario o una contrasentildea para conectarse al servidorSi no puede establecerse una conexioacuten sin solicitar alusuario y esta propiedad se establece en false elintento de conexioacuten fallaraacute

no true

false

true

user Especifica el nombre de usuario para conectarse alservidor Si no se especifica ninguno se le solicitaraacuteal usuario salvo que se haya establecido lapropiedad prompt en false en cuyo caso elintento de conexioacuten fallaraacute

no usuario delservidor

(se solicitaraacute alusuario)

266 IBM Toolbox para Java IBM Toolbox para Java

Propiedades de servidor

Las propiedades de servidor especifican atributos que rigen las transacciones las bibliotecas y las basesde datos

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

auto commit Especifica si la modalidad de compromisoautomaacutetico es la modalidad de conexioacutenpredeterminada para las nuevas conexionesSi invocaAS400JDBCConnectionsetAutoCommit()alteraraacute temporalmente esta propiedad paracada conexioacutenNota para poder utilizar niveles deaislamiento de transaccioacuten distintos aNONE cuando se utiliza la modalidad decompromiso automaacutetico la propiedad trueautocommit debe establecerse en true

no true

false

true

concurrentaccess resolution

Especifica si se utiliza el acceso currentlycommitted en la conexioacuten Un valor 1indica que se utilizaraacute currentlycommitted Un valor 2 indica que seutilizaraacute wait for outcome Un valor 3indica que se utilizaraacute skip locks

no 1

2

3

(valorpredeterminado delsistema)

cursor hold Especifica si se debe retener el cursor entretransacciones Si esta propiedad se estableceen true los cursores no se cierran cuandose compromete o retrotrae una transaccioacutenTodos los recursos obtenidos durante launidad de trabajo se retienen pero losbloqueos sobre filas y objetos especiacuteficosobtenidos impliacutecitamente durante la unidadde trabajo se liberan

no true

false

true

cursorsensitivity

Especifica la sensibilidad de cursor que sesolicita desde la base de datos Elcomportamiento depende del resultSetType

v ResultSetTYPE_FORWARD_ONLY oResultSetTYPE_SCROLL_SENSITIVEindican que el valor de esta propiedadcontrola la sensibilidad de cursor que elprograma Java solicita desde la base dedatos

v ResultSetTYPE_SCROLL_INSENSITIVEhace que se ignore esta propiedad

no asensitive

sensitive

insensitive

asensitive

IBM Toolbox para Java 267

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

database name Especifica la base de datos que debeutilizarse para la conexioacuten con unaagrupacioacuten de almacenamiento auxiliar(ASP) independiente Esta propiedad soloes vaacutelida cuando se conecta con un servidorIBM i Cuando especifique un nombre debase de datos el nombre debe existir en eldirectorio de bases de datos relacionales delservidor y debe corresponder a una ASPindependiente o a la base de datospredeterminada del sistema Los criteriossiguientes determinan a queacute base de datosse accede

v Cuando se utiliza esta propiedad paraespecificar una base de datoscorrespondiente a una ASPindependiente la conexioacuten se realiza conla ASP independiente Si la base de datosno existe la conexioacuten falla

v Cuando se utiliza esta propiedad paraespecificar SYSBAS como nombre debase de datos se utiliza la base de datospredeterminada del sistema

v Cuando se omite esta propiedad seutiliza el grupo de ASP inicialespecificado en la descripcioacuten de trabajodel perfil de usuario Cuando ladescripcioacuten de trabajo no especifica ungrupo de ASP inicial se utiliza la base dedatos predeterminada del sistema

no Nombre de basede datosSYSBAS

Se utiliza elnombre de base dedatos especificadoen la descripcioacutende trabajo delperfil de usuarioCuando ladescripcioacuten detrabajo noespecifica ninguacutennombre de base dedatos se utiliza labase de datospredeterminada delsistema

decfloatrounding mode

Especifica la modalidad de redondeo quedebe utilizarse al trabajar con el tipo dedatos decfloat Esta propiedad se ignora enlas conexiones con sistemas que ejecutanIBM i 54 y anteriores

no half even

half up

down

ceiling

floor

half down

up

half even

268 IBM Toolbox para Java IBM Toolbox para Java

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

libraries Especifica una o varias bibliotecas quedesea antildeadir o sustituir por la lista debibliotecas del trabajo servidor y puedeestablecer el esquema SQL predet(biblioteca predet) Tenga en cuenta que lasbibliotecas no pueden tener maacutes de 10caracteres Debe utilizar la sentencia SETPATH SQL si tiene bibliotecas con maacutes de10 caracteres

Lista de bibliotecas El servidor utiliza lasbibliotecas especificadas para resolver losnombres de procedimientos almacenados nocalificados y los procedimientosalmacenados las utilizan para resolvernombres no calificados Para especificarvarias bibliotecas utilice comas o espaciospara separar las distintas entradas Puedeutilizar LIBL para indicar la lista debibliotecas actual del trabajo del servidorv Cuando la primera entrada es LIBL las

bibliotecas especificadas se antildeaden a lalista de bib actual del trabajo servidor

v Si no indica LIBL las bibliotecasespecificadas sustituyen a la lista debibliotecas actual del trabajo del servidor

Para obtener maacutes informacioacuten sobre laspropiedades de lista de bibliotecas consultela propiedad LibraryList de JDBC

Esquema SQL predeterminado El servidorutiliza el esquema SQL predet pararesolver los nombres no calificados ensentencias SQL Por ejemplo en la sentenciaSELECT FROM MITABLA el servidorsolo buscaraacute MITABLA en el esquema SQLpredet Puede especificar el esquema SQLpredet en el URL de conexioacuten Si noespecifica el esquema SQL predet en elURL de conexioacuten son aplicables lassiguientes condiciones dependiendo delconvenio de denominacioacuten SQL que seutilicev Al utilizar Denominaciones SQL

ndash La primera entrada (si no es LIBL)pasa a ser esquema SQLpredeterminado

ndash Si la primera entrada es LIBL lasegunda pasa a esquema SQL predet

ndash Si no establece esta propiedad o si solocontiene LIBL el perfil usuario pasa aesquema SQL predet

v Al utilizar Denominaciones del sistemandash No se establece ninguacuten esquema SQL

predet y el servidor utiliza lasbibliotecas especificadas para labuacutesqueda de los nombres nocalificados

ndash Si no establece esta propiedad o sisolamente contiene LIBL el servidorutiliza la lista de bibliotecas actual deltrabajo del servidor para buscar enellas los nombres no calificados

no Lista de bibliotecasdel servidorseparadas porcomas o espacios

LIBL

IBM Toolbox para Java 269

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

maximumprecision

Especifica la precisioacuten decimal maacutexima quepuede emplear la base de datos

no 31

63

31

maximum scale Especifica la escala maacutexima que puedeemplear la base de datos

no 0-63 31

minimum dividescale

Especifica el valor de escala miacutenimo para elresultado de la divisioacuten decimal

no 0

1

2

3

4

5

6

7

8

9

0

package ccsid Especifica la codificacioacuten de caracteres quese utilizaraacute para el paquete SQL y lassentencias que se enviacuteen al servidor

no 1200 (UCS-2)

13488(UTF-16)

13488

transactionisolation

Especifica el aislamiento de transaccioacutenpredeterminado

no none

readuncommitted

read committed

repeatableread

serializable

readuncommitted

translate hex Especifica coacutemo se interpretan los literaleshexadecimales

no character(Interpretarliteraleshexadecimalescomo datos detipo caraacutecter)

binary(Interpretarliteraleshexadecimaldecimalescomo datosbinarios)

character

trueautocommit

Especifica si la conexioacuten debe utilizar elsoporte de compromiso automaacuteticoverdadero El compromiso automaacuteticoverdadero significa que el compromisoautomaacutetico estaacute activo y ejecutaacutendose en unnivel de aislamiento distinto de NONE Deforma predeterminada el controladormaneja el compromiso automaacuteticoejecutando en el nivel de aislamientoNONE

no true (Utilizarcompromisoautomaacuteticoverdadero)

false (Noutilizarcompromisoautomaacuteticoverdadero)

false

270 IBM Toolbox para Java IBM Toolbox para Java

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

xa looselycoupled support

Especifica si estaacute permitido elcompartimiento de bloqueo para ramas detransaccioacuten no muy emparejadasNota este valor se ignora al ejecutarse enIBM i 53 o anteriores

no 0 = Nopuedencompartirsebloqueos

1 = Puedencompartirsebloqueos

0

Propiedades de formato

Las propiedades de formato especifican los formatos de fecha y hora los separadores de fecha ydecimales y los convenios de denominacioacuten de tablas empleados en las sentencias SQL

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

date format Especifica el formato de fecha utilizadoen los literales de fecha dentro de lassentencias SQL

no mdy

dmy

ymd

usa

iso

eur

jis

julian

(trabajo servidor)

date separator Especifica el separador de fechautilizado en los literales de fechadentro de las sentencias SQL Estapropiedad no surte ninguacuten efecto salvoque la propiedad date format se hayaestablecido en julian mdy dmy oymd

no (barrainclinada)

- (guioacuten)

(punto)

(coma)

b (espacio)

(trabajo servidor)

decimalseparator

Especifica el separador decimalutilizado en los literales numeacutericosdentro de las sentencias SQL

no (punto)

(coma)

(trabajo servidor)

naming Especifica el convenio de denominacioacutenutilizado al hacer referencia a lastablas

no sql (como enesquematabla)system (como enesquematabla)

sql

time format Especifica el formato de hora utilizadoen los literales de hora dentro de lassentencias SQL

no hms

usa

iso

eur

jis

(trabajo servidor)

time separator Especifica el separador de horautilizado en los literales de hora dentrode las sentencias SQL Esta propiedadno surte ninguacuten efecto salvo que lapropiedad time format se hayaestablecido en hms

no (dos puntos)

(punto)

(coma)

b (espacio)

(trabajo servidor)

IBM Toolbox para Java 271

Propiedades de rendimiento

Las propiedades de rendimiento son atributos que incluyen el almacenamiento en memoria cacheacute laconversioacuten de datos la compresioacuten de datos y la prebuacutesqueda que afectan al rendimiento

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

big decimal Especifica si se utiliza un objetojavamathBigDecimal intermedio paraconversiones de decimal empaquetado ycon zona Si esta propiedad se estableceen true se utiliza un objetojavamathBigDecimal intermedio paraconversiones de decimal empaquetado ycon zona tal como describe laespecificacioacuten de JDBC Si estapropiedad se establece en false no seutiliza ninguacuten objeto intermedio paraconversiones de decimal empaquetado ycon zona En su lugar estos valores seconvierten directamente desde y avalores dobles Java Estas conversionesseraacuten maacutes raacutepidas pero puede que nosigan todas las reglas de conversioacuten ytruncamiento de datos documentadas enla especificacioacuten de JDBC

no true

false

true

block criteria Especifica los criterios para recuperardatos del servidor en bloques deregistros Si se especifica un valordistinto de cero para esta propiedad sereduciraacute la frecuencia de comunicacioacutencon el servidor lo que mejoraraacute elrendimiento

Compruebe que la funcioacuten de bloquesde registros esteacute desactivada si se va autilizar el cursor para posterioresoperaciones de actualizacioacuten (UPDATE)de lo contrario la fila que se actualiceno seraacute necesariamente la fila actual

no 0 (sinbloques deregistros)

1 (conbloques si seespecificaFOR FETCHONLY)

2 (conbloques salvoque seespecifiqueFORUPDATE)

2

block size Especifica el tamantildeo de bloque (enkilobytes) que debe recuperarse delservidor y colocarse en la memoriacacheacute del cliente Esta propiedad nosurte ninguacuten efecto salvo que lapropiedad block criteria se hayaestablecido en un valor distinto de ceroSi se especifican grandes tamantildeos debloque se reduciraacute la frecuencia decomunicacioacuten con el servidor lo quemejoraraacute el rendimiento

no 0

8

16

32

64

128

256

512

32

272 IBM Toolbox para Java IBM Toolbox para Java

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

data compression Especifica si los datos del conjunto deresultados se comprimen Si estapropiedad se establece en true losdatos del conjunto de resultados secomprimen Si esta propiedad seestablece en false los datos delconjunto de resultados no secomprimen La compresioacuten de datospuede mejorar el rendimiento alrecuperar conjuntos de resultados degran tamantildeo

no true

false

true

extended dynamic Especifica si debe utilizarse soportedinaacutemico ampliado El soporte dinaacutemicoampliado proporciona un mecanismopara poner en memoria cacheacute en elservidor las sentencias SQL dinaacutemicasLa primera vez que se prepara unasentencia SQL concreta se almacena enun paquete SQL en el servidor Si elpaquete no existe se creaautomaacuteticamente En posteriorespreparaciones de la misma sentenciaSQL el servidor puede saltarse unaparte notable del proceso utilizando lainformacioacuten almacenada en el paqueteSQL Si esta propiedad se establece entrue debe establecerse un nombre depaquete con la propiedad package

no true

false

false

lazy close Especifica si hay que diferir el cierre delos cursores hasta las peticionesulteriores Esto mejoraraacute el rendimientoglobal al reducir el nuacutemero total depeticiones

no true

false

false

lob threshold Especifica el tamantildeo maacuteximo de LOB(objeto de gran tamantildeo) en bytes quepuede recuperarse como parte de unconjunto de resultados Los LOB cuyotamantildeo sobrepase este umbral serecuperaraacuten en fragmentos utilizandouna comunicacioacuten adicional con elservidor Los umbrales de LOB demayor tamantildeo reduciraacuten la frecuenciade la comunicacioacuten con el servidor perobajaraacuten maacutes datos de LOB aunquedichos datos no se utilicen Losumbrales de LOB de menor tamantildeopueden incrementar la frecuencia de lacomunicacioacuten con el servidor perouacutenicamente bajaraacuten los datos de LOBseguacuten se necesiten

no 0 - 16777216 32768

IBM Toolbox para Java 273

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

package Especifica el nombre base del paqueteSQL Observe que solo se utilizan losseis primeros caracteres para generar elnombre del paquete SQL en el servidorEsta propiedad no surte ninguacuten efectosalvo que la propiedad extendeddynamic se haya establecido entrueAdemaacutes esta propiedad debeestablecerse si se ha establecido lapropiedad extended dynamic entrue

no Paquete SQL

package add Especifica si deben antildeadirse las nuevassentencias preparadas al paquete SQLespecificado en la propiedad packageEsta propiedad no surte ninguacuten efectosalvo que la propiedad extendeddynamic se haya establecido en true

no true

false

true

package cache Especifica si debe almacenarse enmemoria cacheacute un subconjunto de lainformacioacuten del paquete SQL en lamemoria del cliente Al almacenarpaquetes SQL en la memoria cacheacutelocal se reduce la cantidad decomunicacioacuten con el servidor para laspreparaciones y descripciones Estapropiedad no surte ninguacuten efecto salvoque la propiedad extended dynamic sehaya establecido en true

no true

false

false

package criteria Especifica el tipo de sentencias SQL quedeben almacenarse en el paquete SQLEsto puede resultar de utilidad paramejorar el rendimiento de lascondiciones de unioacuten complejas Estapropiedad no surte ninguacuten efecto salvoque la propiedad extended dynamic sehaya establecido en true

no default(almacenaruacutenicamentelas sentenciasSQL conmarcadoresde paraacutemetrosen el paquete)

select(almacenartodas lassentenciasSQL SELECTen el paquete)

default

package error Especifica la accioacuten que debe efectuarsecuando se producen errores de paqueteSQL Cuando se produce un error depaquete SQL el controlador puedelanzar una SQLException o enviar unaviso al objeto Connection seguacuten elvalor de esta propiedad Esta propiedadno surte ninguacuten efecto salvo que lapropiedad extended dynamic se hayaestablecido en true

no exception

warning

none

warning

package library Especifica la biblioteca para el paqueteSQL Esta propiedad no surte ninguacutenefecto salvo que la propiedad extendeddynamic se haya establecido en true

no Biblioteca para elpaquete SQL

QGPL

274 IBM Toolbox para Java IBM Toolbox para Java

|

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

prefetch Especifica si deben prebuscarse datos alejecutar una sentencia SELECT Estomejoraraacute el rendimiento al acceder a lasfilas iniciales del conjunto de resultados(ResultSet)

no true

false

true

qaqqinilib Especifica un nombre de bibliotecaQAQQINI Permite especificar labiblioteca que contiene el archivoqaqqini que se utilizaraacute Un archivoqaqqini contiene todos los atributos quepueden afectar al rendimiento del motorde base de datos DB2 para i

no Nombre debibliotecaQAQQINI

(valorpredeterminadodel servidor)

query optimize goal Especifica el objetivo que el servidordeberaacute utilizar con la optimizacioacuten deconsultas Este valor corresponde a laopcioacuten QAQQINI del servidordenominada OPTIMIZATION_GOALNota esta propiedad se ignora en lasconexiones con sistemas que se ejecutanen IBM i 53 y anteriores

no 0 =Optimizar laconsulta parael primerbloque dedatos(FIRSTIO)cuando seutilizanpaquetesdinaacutemicosampliadosOptimizar laconsulta paratodo elconjunto deresultados(ALLIO)cuando no seutilizanpaquetes

1 =Optimizar laconsulta parael primerbloque dedatos(FIRSTIO)

2 =Optimizar laconsulta paratodo elconjunto deresultados(ALLIO)

0

query storage limit Limita el almacenamiento utilizado poruna consulta Esta propiedad comparael liacutemite de almacenamientoespecificado con la estimacioacuten deutilizacioacuten de almacenamiento de laconsulta Si la estimacioacuten de utilizacioacutende almacenamiento sobrepasa el liacutemitede almacenamiento especificado laconsulta no puede ejecutarse

no -1 (NOMAX)hasta 2 147 352578

-1 que indicael valorespecialNOMAX

IBM Toolbox para Java 275

Propiedad Descripcioacuten Obligatoria Opciones Valor predet

query timeoutmechanism

Especifica el mecanismo paraimplementar la caracteriacutesticaqueryTimeout

no qqrytimlmt= LacaracteriacutesticaqueryTimeoututiliza lacaracteriacutesticaQQRYTIMLMTdel motor debase de datos

cancel = LacaracteriacutesticaqueryTimeoututiliza unasolicitudCANCEL paracancelar unasentencia SQLen ejecucioacutenuna vezsobrepasadoel tiempo deespera

qqrytimlmt

receive buffer size Especifica el tamantildeo delalmacenamiento intermedio utilizadopara recibir datos a traveacutes de laconexioacuten de socket entre el controladorfrontal y el sistemaNota no especifica el tamantildeo real delalmacenamiento intermedio derecepcioacuten Soacutelo se utiliza comoorientacioacuten para el coacutedigo de socketsubyacente

no 1 - tamantildeomaacuteximo

(dependientede laplataforma)

send buffer size Especifica el tamantildeo delalmacenamiento intermedio utilizadopara enviar datos a traveacutes de laconexioacuten de socket entre el controladorfrontal y el sistemaNota no especifica el tamantildeo real delalmacenamiento intermedio de enviacuteoSoacutelo se utiliza como orientacioacuten para elcoacutedigo de socket subyacente

no 1 - tamantildeomaacuteximo

(dependientede laplataforma)

variable fieldcompression

Especifica si los campos de longitudvariable deben comprimirse

no true

false

true

Propiedades de ordenacioacuten

Las propiedades de ordenacioacuten especifican coacutemo lleva a cabo el servidor las operaciones de almacenar yordenar

276 IBM Toolbox para Java IBM Toolbox para Java

|||||

||||||||||

|||||||||||||

|

Propiedad deordenacioacuten Descripcioacuten Obligatoria Opciones

Valorpredet

sort Especifica coacutemo ordena el servidor losregistros antes de enviarlos al cliente

no hex (basar elorden en valoreshexadeci-males)

language (basar elorden en el idiomaestablecido en lapropiedad sortlanguage)

table (basar elorden en la tabla desecuencia deordenacioacutenestablecida en lapropiedad sorttable)

hex

sort language Especifica un ID de idioma de trescaracteres que debe utilizarse para laseleccioacuten de una secuencia de ordenacioacutenEsta propiedad no surte ninguacuten efectosalvo que la propiedad sort se hayaestablecido en language

no ID de idioma ENU

sort table Especifica la biblioteca y el nombre dearchivo de una tabla de secuencia deordenacioacuten almacenada en el servidorEsta propiedad no surte ninguacuten efectosalvo que la propiedad sort se hayaestablecido en table

no Nombre calificado detabla de ordenacioacuten

sort weight Especifica coacutemo trata el servidor lasmayuacutesculasminuacutesculas al ordenarregistros Esta propiedad no surte ninguacutenefecto salvo que la propiedad sort sehaya establecido en language

no shared (loscaracteres enmayuacutesculas y enminuacutesculas seordenan como elmismo caraacutecter)

unique (loscaracteres enmayuacutesculas y enminuacutesculas seordenan comocaracteres distintos)

shared

Otras propiedades

Otras propiedades son las que no pueden incluirse faacutecilmente en categoriacuteas Estas propiedadesdeterminan queacute controlador JDBC se utiliza y especifican opciones relacionadas con el nivel de acceso ala base de datos el tipo de serie bidireccional el truncamiento de datos etc

IBM Toolbox para Java 277

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

access Especifica el nivel de acceso a base de datospara la conexioacuten

no all (permitidastodas las sentenciasSQL)

read call(permitidassentencias SELECTy CALL)

read only (soacutelosentencias SELECT)

all

autocommitexception

Especifica si debe lanzarse una excepcioacuten detipo SQLException cuando se llama aConnectioncommit() o Connectionrollback() siel compromiso automaacutetico estaacute habilitado

no true

false

false

bidi stringtype

Especifica el tipo de serie de salida de los datosbidireccionales En BidiStringType encontraraacutemaacutes informacioacuten

no (utilizar el CCSIDpara determinar eltipo de seriebidireccional)

0 (el tipo de seriepredeterminadopara datos nobidireccionales(LTR))

4

5

6

7

8

9

10

11

bidiimplicitreordering

Especifica si debe utilizarse la reordenacioacutenLTR-RTL bidi impliacutecita

no true

false

true

bidinumericordering

Especifica si debe utilizarse la caracteriacutesticacircular de ordenacioacuten numeacuterica

no true

false

false

278 IBM Toolbox para Java IBM Toolbox para Java

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

datatruncation

Especifica si el truncamiento de datos de tipocaraacutecter genera avisos y excepciones Cuandoesta propiedad es true se aplican las reglassiguientes

v Al escribir datos de tipo caraacutecter truncadosen la base de datos se lanza una excepcioacuten

v Al utilizar datos de tipo caraacutecter truncadosen una consulta se enviacutea un aviso

Cuando esta propiedad es false al escribirdatos truncados en la base de datos o utilizaresos datos en una consulta no se generan niexcepciones ni avisos

El valor predeterminado es true

Esta propiedad no afecta a los datosnumeacutericos Al escribir datos numeacutericostruncados en la base de datos siempre se lanzaun error y al utilizar datos numeacutericostruncados en una consulta siempre se enviacutea unaviso

no true

false

true

driver Especifica la implementacioacuten del controladorJDBC El controlador JDBC de IBM Toolboxpara Java puede utilizar distintasimplementaciones del controlador JDBC enfuncioacuten del entorno Si el entorno es una JVMde IBM i situada en el mismo servidor que labase de datos a la que se conecta el programapuede utilizarse el controlador JDBC de IBMDeveloper Kit para Java nativo En cualquierotro entorno se utiliza el controlador JDBC deIBM Toolbox para Java Esta propiedad nosurte ninguacuten efecto si se ha establecido lapropiedad secondary URL

no toolbox (utilizarsoacutelo el controladorJDBC de IBMToolbox para Java)

native (se utilizaraacuteel controlador JDBCde IBM DeveloperKit para Java si seejecuta en elservidor de locontrario seutilizaraacute elcontrolador JDBC deIBM Toolbox paraJava)

toolbox

errors Especifica la cantidad de detalle que debedevolverse en el mensaje para los errores quese producen en el servidor

no basic

full

basic

IBM Toolbox para Java 279

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

extendedmetadata

Especifica si el controlador solicita metadatosampliados procedentes del servidor Alestablecer esta propiedad en true se aumenta laprecisioacuten de la informacioacuten devuelta por lossiguientes meacutetodos de ResultSetMetaData

v getColumnLabel(int)

v isReadOnly(int)

v isSearchable(int)

v isWriteable(int)

Asimismo al establecer esta propiedad en truese habilita el soporte para los meacutetodosResultSetMetaDatagetSchemaName(int) yResultSetMetaDataisAutoIncrement(int)Nota al establecer esta propiedad en true elrendimiento puede empeorar ya que es precisorecuperar maacutes informacioacuten del servidor Deje lapropiedad establecida en el valorpredeterminado (false) salvo que necesiteinformacioacuten maacutes especiacutefica de los meacutetodoslistados Por ejemplo cuando esta propiedadestaacute inactiva (false)ResultSetMetaDataisSearchable(int) siempredevuelve true ya que el controlador no tienesuficiente informacioacuten procedente del servidorpara hacer un juicio Al activar esta propiedad(true) se fuerza al controlador a obtener losdatos correctos del servidor

no true

false

false

full open Especifica si el servidor abre por completo unarchivo para cada consulta De formapredeterminada el servidor optimiza laspeticiones abiertas Esta optimizacioacuten mejora elrendimiento pero puede fallar si hay unsupervisor de base de datos activo cuando seejecuta una consulta maacutes de una vezEstablezca la propiedad en true uacutenicamente sise emiten consultas ideacutenticas cuando haysupervisores activos

no true

false

false

hold inputlocators

Especifica si los ubicadores de entrada debenasignarse como ubicadores de tipo hold o nohold Si los ubicadores son de tipo hold no seliberaraacuten cuando se realice un compromiso

no true (type hold)

false

true

holdstatements

Especifica si las sentencias deben permanecerabiertas hasta un liacutemite de transaccioacuten cuandocuando el compromiso automaacutetico esteacutedesactivado y esteacuten asociadas a un ubicadorLOB De forma predeterminada todos losrecursos asociados a una sentencia se liberancuando se cierra la sentencia Establezca estapropiedad en true solo cuando sea necesarioacceder a un ubicador LOB despueacutes de cerraruna sentencia

no true

false

false

280 IBM Toolbox para Java IBM Toolbox para Java

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

ignorewarnings

Especifica una lista de estados SQL para losque el controlador no debe crear objetos deaviso De forma predeterminada el controladorJDBC de IBM Toolbox para Java crearaacuteinternamente un objeto javasqlSQLWarningpara cada aviso devuelto por la base de datosPor ejemplo se crea un aviso con SQLSTATE0100C cada vez que se devuelve un conjuntode resultados de un procedimiento almacenadoEste aviso puede ignorarse de forma segurapara mejorar el rendimiento de las aplicacionesque llaman a procedimientos almacenados

no Una lista separada porcomas de los estadosSQL que debenomitirse

keep alive Especifica si debe comprobarse perioacutedicamenteel estado operativo de la conexioacuten de socket

no true

false

(dependientede laplataforma)

key ringname

Especifica el nombre de la clase de archivo declaves utilizada para las conexiones SSL con elservidor Esta propiedad no surte ninguacuten efectosalvo que secure se haya establecido en truey que se haya establecido una contrasentildea dearchivo de claves mediante la propiedad keyring password

no key ring name

key ringpassword

Especifica la contrasentildea para la clase de archivode claves utilizada para las comunicaciones SSLcon el servidor Esta propiedad no surte ninguacutenefecto salvo que secure se haya establecido entrue y que se haya establecido un nombre dearchivo de claves mediante la propiedad keyring name

no key ring password

metadatasource

Especifica coacutemo se recupera DatabaseMetaDataSi se establece en 0 los metadatos de base dedatos se recuperaraacuten mediante el flujo de datosde ROI (Recuperar informacioacuten de objeto)

Si se establece en 1 los metadatos de base dedatos se recuperaraacuten llamando aprocedimientos almacenados del sistema

no 0 (acceso ROI)

1 (procedimientosalmacenados SQL)

0 paraIBM i 61 yreleasesanteriores1 para losdemaacutesreleases

proxyserver

Especifica el nombre de host y el nuacutemero depuerto de la maacutequina de nuacutemero medio deniveles en la que se estaacute ejecutando el servidorproxy El formato esnombre_sistema_principal[puerto] siendo elpuerto opcional Si no se establece estapropiedad el nombre de host y el nuacutemero depuerto se recuperan de la propiedadcomibmas400accessAS400proxyServer El puertopredeterminado es 3470 (si la conexioacuten utilizaSSL el puerto predeterminado es 3471) Elservidor proxy debe estar en ejecucioacuten en lamaacutequina de nuacutemero medio de niveles

El nombre de la maacutequina de nuacutemero medio deniveles se omite en un entorno de dos niveles

no Nombre de host ynuacutemero de puerto deservidor proxy

(el valor delapropiedadproxyServero none sino estaacuteestablecida)

IBM Toolbox para Java 281

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

remarks Especifica el origen del texto para las columnasREMARKS de los objetos ResultSet devueltospor los meacutetodos de DatabaseMetaData Estapropiedad solo se utiliza si la propiedadmetadata source se establece en 0

no sql (comentario deobjeto SQL)

system(descripcioacuten deobjeto IBM i)

system

secondaryURL

Especifica el URL que se utilizaraacute para unaconexioacuten en el objeto DriverManager denuacutemero medio de niveles en un entorno devarios niveles si es distinto del que ya se haespecificado Esta propiedad permite utilizareste controlador para conectarse con otras basesde datos Emplee una barra inclinada invertidacomo caraacutecter de escape antes de los caracteresde barra inclinada invertida y punto y coma enel URL

no URL JDBC (URL JDBCactual)

secure Especifica si para comunicarse con el servidorse utiliza una conexioacuten SSL (capa de socketssegura)

no true (cifrar todaslas comunicacionesclienteservidor)

false (cifrarsolamente lacontrasentildea)

false

282 IBM Toolbox para Java IBM Toolbox para Java

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

servertrace

Especifica el nivel de rastreo del trabajoservidor JDBC Cuando el rastreo estaacutehabilitado el rastreo empieza al conectarse elcliente al servidor y finaliza al desconectarse laconexioacuten Debe iniciar el rastreo antes deconectarse al servidor ya que el cliente habilitael rastreo del servidor uacutenicamente en elmomento de la conexioacuten

no 0 (el rastreo noestaacute activo)

2 (iniciar elsupervisor de basede datos en eltrabajo de servidorJDBC)

4 (iniciardepuracioacuten en eltrabajo de servidorJDBC)

8 (guardar lasanotaciones detrabajo cuandofinalice el trabajo delservidor JDBC)

16 (iniciar rastreode trabajo en eltrabajo de servidorJDBC)

32 (guardarinformacioacuten de SQL)

64 (soporta laactivacioacuten delrastreo de servidorde host de base dedatos)

Pueden iniciarse variosrastreos agrupandoestos valores Porejemplo 6 inicia elsupervisor de base dedatos e inicia ladepuracioacuten

0

threadused

Especifica si se usan hebras en unacomunicacioacuten con los servidores de host

no true

false

true

IBM Toolbox para Java 283

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

toolboxtrace

Especifica queacute categoriacutea de un rastreo de IBMToolbox para Java debe anotarse Los mensajesde rastreo son uacutetiles para depurar programasque efectuacutean llamadas a JDBC Sin embargo laanotacioacuten de mensajes de rastreo trae aparejadoun deterioro del rendimiento por lo que estapropiedad uacutenicamente se establece para llevar acabo la depuracioacuten Los mensajes de rastreo seanotan en Systemout

no

none

datastream (seanota el flujo dedatos entre el hostlocal y el sistemaremoto)

diagnostic (seanota la informacioacutende estado de losobjetos)

error (se anotanlos errores quegeneran unaexcepcioacuten)

information (seutiliza para hacer unseguimiento delflujo de control atraveacutes del coacutedigo)

warning (seanotan los erroresrecuperables)

conversion (seanotan lasconversiones dejuego de caracteresentre las paacuteginas decoacutedigos nativas yUnicode)

proxy (se anota elflujo de datos entreel cliente y elservidor proxy)

pcml (se utilizapara determinarcoacutemo interpretaPCML los datos quese enviacutean al servidory que se reciben delmismo)

jdbc (se anota lainformacioacuten deJDBC)

all (se anotantodas las categoriacuteas)

thread (se anota lainformacioacuten dehebra)

284 IBM Toolbox para Java IBM Toolbox para Java

Otrapropiedad Descripcioacuten Obligatoria Opciones

Valorpredet

trace Especifica si se anotan los mensajes de rastreoLos mensajes de rastreo son uacutetiles para depurarprogramas que efectuacutean llamadas a JDBC Sinembargo la anotacioacuten de mensajes de rastreotrae aparejado un deterioro del rendimientopor lo que esta propiedad uacutenicamente se debeestablecer en true para llevar a cabo ladepuracioacuten Los mensajes de rastreo se anotanen Systemout

no true

false

false

translatebinary

Especifica si se convierten los datos binarios Siesta propiedad se establece en true loscampos BINARY y VARBINARY se tratan comocampos CHAR y VARCHAR

no true

false

false

translateboolean

Especifica coacutemo se interpretan los objetosbooleanos (Boolean) al establecer el valor de uncampoparaacutemetro de tipo caraacutecter mediante losmeacutetodos PreparedStatementsetObject()CallableStatementsetObject() oResultSetupdateObject() Si la propiedad seestablece en true el objeto booleano sealmacenaraacute en el campo de tipo caraacutecter comotrue o false Si la propiedad se establece enfalse el objeto booleano se almacenaraacute en elcampo de tipo caraacutecter como 1 o 0

no true

false

true

Referencia relacionadaldquoRegistro del controlador JDBCrdquo en la paacutegina 80Antes de utilizar JDBC para acceder a los datos de un archivo de base de datos del servidor es necesarioregistrar el controlador JDBC de IBM Toolbox para Java con DriverManager

Propiedad LibraryList de JDBCLa propiedad LibraryList de JDBC especifica una o varias bibliotecas que desea antildeadir a la lista debibliotecas del trabajo del servidor (o con las que desea sustituir esta lista) y opcionalmente establece labiblioteca predeterminada (esquema SQL predeterminado)

En los ejemplos de la tabla siguiente se dan por supuestas las condiciones siguientesv Una biblioteca denominada MYLIBDAW contiene MYFILE_DAWv Se ejecuta esta sentencia SQL

SELECT FROM MYFILE_DAW

IBM Toolbox para Java 285

Caso praacutectico Denominaciones SQL Denominaciones del sistema

Reglas baacutesicas Solo se busca en una biblioteca

v Si se especifica un esquema SQLpredeterminado en el URL se utiliza Estepasa a ser la biblioteca predeterminada

v Si no se especifica ninguacuten esquema SQLpredeterminado en el URL se utiliza laprimera biblioteca de la propiedad librariesEsta pasa a ser la biblioteca predeterminada

v Si no se especifica ninguacuten esquema SQLpredeterminado en el URL ni ningunapropiedad libraries se utiliza la bibliotecacon el mismo nombre que el perfil de usuarioque ha iniciado la sesioacuten

La lista de bibliotecas del trabajo se actualizacon las bibliotecas de la propiedad libraries Estevalor puede afectar al funcionamiento dealgunos desencadenantes y procedimientosalmacenados No afecta a los nombres nocalificados de las sentencias

La lista de bibliotecas del trabajo seactualiza con las bibliotecas de lapropiedad libraries Si se especifica unesquema SQL predeterminado en elURL esta pasa a ser la bibliotecapredeterminada

1 No se especificaninguacuten esquema SQLpredeterminado en elURL y no se especificala propiedad libraries

El esquema SQL predeterminado es el nombrede perfil de usuario

No hay ninguacuten esquema SQLpredeterminado Se busca en la lista debibliotecas del trabajo

2 Se especifica elesquema SQLpredeterminado en elURL y no se especificala propiedad libraries

El esquema SQL predeterminado es lo que seespecifica en el URL

El esquema SQL predeterminado es loque se especifica en el URL No sebusca en la lista de bibliotecas pararesolver un nombre no calificado en lassentencias SQL

3 No se especificaninguacuten esquema SQLpredeterminado en elURL y se especifica lapropiedad libraries

El esquema SQL predeterminado es la primerabiblioteca especificada en la propiedad

No hay ninguacuten esquema SQLpredeterminado Se busca en todas lasbibliotecas especificadas en lapropiedad

4 Se especifica elesquema SQLpredeterminado en elURL y se especifica lapropiedad libraries

El esquema SQL predeterminado es lo que seespecifica en el URL La propiedad se omite

El esquema SQL predeterminado es loque se especifica en el URL No sebusca en la lista de bibliotecas pararesolver un nombre no calificado en lassentencias SQL

5 No se especificaninguacuten esquema SQLpredeterminado en elURL se especifica lapropiedad libraries yuna biblioteca en la listano es vaacutelida

El esquema SQL predeterminado es la primerabiblioteca especificada en la propiedad

No hay ninguacuten esquema SQLpredeterminado La lista de bibliotecasno se puede modificar ya que no seencuentra una de las bibliotecas de lalista por lo que se utiliza la lista debibliotecas del trabajo

6 No se especificaninguacuten esquema SQLpredeterminado en elURL se especifica lapropiedad libraries yse ha encontrado unarchivo en la segundabiblioteca de la lista

El esquema SQL predeterminado es la primerabiblioteca especificada en la propiedad lasdemaacutes bibliotecas se omiten

Si todas las bibliotecas existen no hayninguacuten esquema SQL predeterminadose busca en todas las bibliotecas de lalista la lista sustituye a la lista debibliotecas del trabajo

Si una de las bibliotecas de la lista noexiste no se modifica la lista debibliotecas del trabajo

286 IBM Toolbox para Java IBM Toolbox para Java

Caso praacutectico Denominaciones SQL Denominaciones del sistema

7 No se especificaninguacuten esquema SQLpredeterminado en elURL se especifica lapropiedad libraries yla lista empieza con unacoma

El esquema SQL predeterminado es el perfil deusuario

No hay ninguacuten esquema SQLpredeterminado se busca en todas lasbibliotecas de la lista la lista sustituye ala lista de bibliotecas del trabajo

8 No se especificaninguacuten esquema SQLpredeterminado en elURL se especifica lapropiedad libraries yla lista empieza conLIBL

El esquema SQL predeterminado es el perfil deusuario

No hay ninguacuten esquema SQLpredeterminado se busca en todas lasbibliotecas de la lista las bibliotecasespecificadas se antildeaden al final de lalista

9 No se especificaninguacuten esquema SQLpredeterminado en elURL se especifica lapropiedad libraries yla lista termina conLIBL

El esquema SQL predeterminado es la primerabiblioteca especificada en la propiedad lasdemaacutes bibliotecas se omiten

No hay ninguacuten esquema SQLpredeterminado se busca en todas lasbibliotecas de la lista las bibliotecasespecificadas se antildeaden al principio dela lista de bibliotecas del trabajo

10 El esquema SQLpredeterminadoespecificado en el URLno es vaacutelido

No hay ninguacuten esquema SQL predeterminadose utiliza el perfil de usuario

No hay ninguacuten esquema SQLpredeterminado se utiliza la lista debibliotecas del trabajo

Nota cuando se especifica un esquema SQL predeterminado en el URL y no se utiliza la propiedadlibraries el esquema SQL predeterminado se antildeade antes de la lista de bibliotecas actual

Tipos SQL JDBCNo todos los tipos SQL descritos por la especificacioacuten de JDBC estaacuten soportados por DB2 para IBM i

Tipos SQL no soportados

En los casos en que un tipo SQL no estaacute soportado el controlador JDBC lo sustituye por un tipo SQLsimilar

La tabla siguiente muestra los tipos SQL que no estaacuten soportados y el tipo SQL por el que el controladorJDBC los sustituye en cada caso

Tipo SQL no soportado Tipo SQL de sustitucioacuten

BIT SMALLINT

TINYINT SMALLINT

LONGVARCHAR VARCHAR

LONGVARBINARY VARBINARY

Soporte de proxyIBM Toolbox para Java soporte de proxy para algunas clases El soporte de proxy es el proceso que IBMToolbox para Java necesita realizar para llevar a cabo una tarea en una maacutequina virtual Java (JVM)cuando la aplicacioacuten se encuentra en una JVM distinta

IBM Toolbox para Java 287

Las clases de proxy residen en jt400Proxyjar que se suministra con el resto de IBM Toolbox para JavaLas clases de proxy como las demaacutes clases de IBM Toolbox para Java estaacuten formadas por un conjunto declases Java independientes de la plataforma que pueden ejecutarse en cualquier sistema con una maacutequinavirtual Java Las clases de proxy despachan todas las llamadas a meacutetodo a una aplicacioacuten de servidor o aun servidor proxy Las clases del producto IBM Toolbox para Java completo estaacuten en el servidor proxyCuando un cliente utiliza una clase de proxy la peticioacuten se transfiere al servidor proxy que crea yadministra los objetos reales de IBM Toolbox para Java

La figura 1 muestra coacutemo se conectan al servidor el cliente estaacutendar y el cliente proxy El servidor proxypuede ser el servidor IBM i que contiene los datos

Figura 1 coacutemo se conectan a un servidor un cliente estaacutendar y un cliente proxy

Una aplicacioacuten que utiliza el soporte de proxy se ejecuta con mayor lentitud que al utilizar las clases deIBM Toolbox para Java estaacutendar debido a la comunicacioacuten adicional necesaria para dar soporte a lasclases de proxy maacutes pequentildeas Las aplicaciones que realizan menos llamadas a meacutetodo sufren un menordeterioro del rendimiento

Antes del soporte de proxy las clases que conteniacutean la interfaz puacuteblica todas las clases necesarias paraprocesar una peticioacuten y la propia aplicacioacuten se ejecutaban en la misma maacutequina virtual Java Al utilizar elsoporte de proxy la interfaz puacuteblica debe estar con la aplicacioacuten pero las clases para procesar laspeticiones pueden ejecutarse en una maacutequina virtual Java distinta El soporte de proxy no cambia lainterfaz puacuteblica Un mismo programa puede ejecutarse con la versioacuten de proxy de IBM Toolbox para Javao con la versioacuten estaacutendar

Coacutemo utilizar el archivo jt400Proxyjar

El objetivo del escenario proxy multinivel es conseguir que el archivo JAR de interfaz puacuteblica sea lo maacutespequentildeo posible para que el proceso de bajar este archivo de un applet dure menos tiempo Cuando seutilizan las clases de proxy no es necesario instalar en el cliente todo el producto IBM Toolbox para JavaEn su lugar utilice AS400JarMaker en el archivo jt400Proxyjar para incluir uacutenicamente los componentesnecesarios lo que hace que el archivo JAR sea lo maacutes pequentildeo posible

La figura 2 compara el tamantildeo de los archivos JAR de proxy con el de los archivos JAR estaacutendar

Figura 2 comparacioacuten del tamantildeo de los archivos JAR de proxy y los archivos JAR estaacutendar

288 IBM Toolbox para Java IBM Toolbox para Java

Una ventaja adicional es que el soporte de proxy requiere tener menos puertos abiertos a traveacutes de uncortafuegos Con IBM Toolbox para Java estaacutendar debe tener varios puertos abiertos Ello se debe a quecada servicio de IBM Toolbox para Java utiliza un puerto distinto para comunicarse con el servidor Porejemplo la llamada a mandato emplea un puerto distinto del que emplea JDBC que a su vez utiliza unpuerto distinto del que emplea la impresioacuten etc Cada uno de estos puertos debe estar permitido a traveacutesdel cortafuegos Sin embargo al utilizar el soporte de proxy todos los datos fluyen por el mismo puerto

Proxy estaacutendar y tuacuteneles HTTP

Hay disponibles dos opciones para llevar a cabo la ejecucioacuten mediante un proxy que son proxy estaacutendary tuacuteneles HTTPv La comunicacioacuten de proxy estaacutendar es aquella en que el cliente proxy y el servidor proxy se comunican

utilizando un socket en un puerto El puerto predeterminado es 3470 Para cambiar el puertopredeterminado puede elegir entre utilizar el meacutetodo setPort() en la clase ProxyServer o emplear laopcioacuten -port al iniciar el servidor proxy Por ejemplo

java comibmas400accessProxyServer -port 1234

v La comunicacioacuten de tuacuteneles HTTP es aquella en que el cliente proxy y el servidor proxy se comunicanmediante el servidor HTTP IBM Toolbox para Java proporciona un servlet que maneja la peticioacuten deproxy El cliente proxy llama al servlet mediante el servidor HTTP La ventaja de utilizar los tuacuteneles esque no es necesario abrir un puerto adicional a traveacutes de los cortafuegos ya que la comunicacioacuten seefectuacutea mediante el puerto HTTP La desventaja de la comunicacioacuten por tuacuteneles es que es maacutes lentaque la opcioacuten de proxy estaacutendar

IBM Toolbox para Java 289

IBM Toolbox para Java utiliza el nombre de servidor proxy para determinar si se utiliza la opcioacuten deproxy estaacutendar o proxy por tuacutenelesv En el caso de proxy estaacutendar utilice uacutenicamente el nombre del servidor Por ejemplo

comibmas400accessAS400proxyServer=myServer

v En el caso de proxy por tuacuteneles utilice un URL para forzar al cliente proxy a utilizar los tuacuteneles Porejemplo

comibmas400accessAS400proxyServer=httpmyServer

Cuando se ejecuta proxy estaacutendar existe una conexioacuten por socket entre el cliente y el servidor Si esaconexioacuten falla el servidor elimina los recursos asociados a ese cliente

Cuando se utilizan los tuacuteneles HTTP al utilizar el protocolo HTTP el proxy no tiene conexioacuten Estosignifica que se establece una conexioacuten nueva para cada flujo de datos Dado que el protocolo es sinconexioacuten el servidor no sabe si la aplicacioacuten de cliente ya no estaacute activa Por consiguiente el servidor nosabe cuaacutendo eliminar los recursos El servidor de comunicacioacuten por tuacuteneles resuelve este problemausando una hebra para eliminar los recursos en un intervalo predeterminado (que se basa en un valor detiempo de espera)

Una vez transcurrido el intervalo predeterminado se ejecuta la hebra que elimina los recursos que no sehan utilizado uacuteltimamente Dos propiedades del sistema rigen la hebrav comibmas400accessTunnelProxyServer clientCleanupInterval indica con queacute frecuencia en segundos

se ejecuta la hebra de limpieza El valor predeterminado es cada dos horasv comibmas400accessTunnelProxyServer clientLifetime indica cuaacutento tiempo en segundos puede estar

desocupado un recurso antes de que se elimine El valor predeterminado es 30 minutos

Coacutemo se utiliza el servidor proxy

Para utilizar la implementacioacuten de servidor proxy de las clases de IBM Toolbox para Java siga estospasos1 Ejecute AS400ToolboxJarMaker en jt400Proxyjar para descartar las clases que no necesite Este paso es

opcional pero recomendado2 Entregue jt400Proxyjar al cliente En el caso de los applets Java puede bajar el archivo JAR del

servidor HTML3 Determine queacute servidor va a utilizar para que haga de servidor proxy

v En el caso de las aplicaciones Java el servidor proxy puede ser cualquier equipov En el caso de los applets Java el servidor proxy debe ejecutarse en el mismo equipo que el servidor

HTTP4 Compruebe que haya colocado jt400jar en la variable CLASSPATH del servidor5 Inicie el servidor proxy o utilice el servlet de proxy

v Para proxy estaacutendar inicie el servidor proxy con el mandato siguientejava comibmas400accessProxyServer

v Para proxy por tuacuteneles configure el servidor HTTP para utilizar el servlet de proxy El nombre declase de servlet es comibmas400accessTunnelProxyServer y se incluye en jt400jar

6 En el cliente establezca una propiedad del sistema para identificar el servidor proxy IBM Toolboxpara Java utiliza esta propiedad del sistema para determinar si se utiliza la opcioacuten de proxy estaacutendaro proxy por tuacutenelesv Para proxy estaacutendar el valor de la propiedad es el nombre de la maacutequina que ejecuta el servidor

proxy Por ejemplocomibmas400accessAS400proxyServer=myServer

v En el caso de proxy por tuacuteneles utilice un URL para forzar al cliente proxy a utilizar los tuacutenelesPor ejemplo

290 IBM Toolbox para Java IBM Toolbox para Java

comibmas400accessAS400proxyServer=httpmyServer

7 Ejecute el programa cliente

Si desea trabajar tanto con las clases de proxy como con las clases que no estaacuten en el archivojt400Proxyjar puede hacer referencia al archivo jt400jar en vez de al archivo jt400Proxyjar El archivojt400Proxyjar es un subconjunto del archivo jt400jar y por eso todas las clases de proxy estaacuten contenidasen el archivo jt400jar

Ejemplos coacutemo se utilizan los servidores proxy

A continuacioacuten figuran tres ejemplos especiacuteficos de coacutemo se utiliza un servidor proxy siguiendo los pasosindicados anteriormentev Ejecutar una aplicacioacuten Java utilizando el soporte de proxyv Ejecutar un applet Java utilizando el soporte de proxyv Ejecutar una aplicacioacuten Java utilizando el soporte de proxy por tuacuteneles

Clases habilitadas para trabajar con el servidor proxy

Algunas de las clases de IBM Toolbox para Java estaacuten habilitadas para trabajar con la aplicacioacuten deservidor proxy Son las siguientesv JDBCv Acceso a nivel de registrov Sistema de archivos integradov Imprimirv Colas de datosv Llamada a mandatov Llamada a programav Llamada a programa de serviciov Espacio de usuariov Aacuterea de datosv Clase AS400v Clase SecureAS400

Por ahora las demaacutes clases no estaacuten soportadas por jt400Proxy Ademaacutes los permisos del sistema dearchivos integrado no funcionan uacutenicamente con el archivo JAR de proxy Sin embargo puede utilizar laclase JarMaker para incluir estas clases a partir del archivo jt400jar

Ejemplo ejecutar una aplicacioacuten Java utilizando el soporte de proxyEl ejemplo que figura a continuacioacuten muestra los pasos que se han de seguir para ejecutar una aplicacioacutenJava utilizando el soporte de proxy1 Elija una maacutequina que haga de servidor proxy El entorno Java y la variable CLASSPATH de la

maacutequina de servidor proxy incluyen el archivo jt400jar Esta maacutequina debe tener capacidad paraconectarse al sistema

2 Inicie el servidor proxy en esta maacutequina escribiendo lo siguiente javacomibmas400accessProxyServer -verbose El hecho de especificar la modalidad verbosa lepermitiraacute supervisar cuaacutendo el cliente se conecta y se desconecta

3 Elija una maacutequina que haga de cliente El entorno Java y la variable CLASSPATH de la maacutequinacliente incluyen el archivo jt400Proxyjar y las clases de la aplicacioacuten Esta maacutequina debe tenercapacidad para conectarse al servidor proxy pero no necesita una conexioacuten con el sistema

4 Establezca que el valor de la propiedad comibmas400accessAS400proxyServer del sistema sea elnombre del servidor proxy y ejecute la aplicacioacuten Para ello lo maacutes sencillo es utilizar la opcioacuten -D en

IBM Toolbox para Java 291

la mayoriacutea de las invocaciones a la maacutequina virtual Java java-Dcomibmas400accessAS400proxyServer=nombreMaacutequinaSp SuAplicacioacuten

5 A medida que se ejecuta la aplicacioacuten si especificoacute la modalidad verbosa en el paso 2 veraacute que laaplicacioacuten establece al menos una conexioacuten con el servidor proxy

Ejemplo ejecutar un applet Java utilizando el soporte de proxyEl ejemplo que figura a continuacioacuten muestra los pasos que hay que seguir para ejecutar un applet Javautilizando el soporte de proxy1 Elija una maacutequina que haga de servidor proxy Los applets solo pueden iniciar conexiones de red en

la maacutequina desde la que se bajaron originalmente por lo tanto esto funciona mejor cuando elservidor proxy se ejecuta en la misma maacutequina que el servidor HTTP El entorno Java y la variableCLASSPATH de la maacutequina de servidor proxy incluyen el archivo jt400jar

2 Inicie el servidor proxy en esta maacutequina escribiendo lo siguiente javacomibmas400accessProxyServer -verbose El hecho de especificar la modalidad verbosa lepermitiraacute supervisar cuaacutendo el cliente se conecta y se desconecta

3 Para poder ejecutar el applet primero es preciso bajar su coacutedigo por lo tanto conviene reducir almaacuteximo el tamantildeo del coacutedigo La clase AS400ToolboxJarMaker puede reducir notablemente el archivojt400Proxyjar al incluir solo el coacutedigo de los componentes utilizados por el applet Por ejemplo si unapplet solo utiliza JDBC y desea que el archivo jt400Proxyjar incluya la miacutenima cantidad de coacutedigopara reducir su tamantildeo ejecute el mandato siguiente

java utilitiesAS400ToolboxJarMaker -source jt400Proxyjar -destination jt400ProxySmalljar-component JDBC

4 El applet debe establecer que el valor de la propiedad del sistemacomibmas400accessAS400proxyServer sea el nombre del servidor proxy Una manera praacutectica dehacerlo en los applets es utilizar una clase Properties compilada (Ejemplo) Compile esta clase ycoloque el archivo Propertiesclass generado en el directorio comibmas400access (la misma viacutea dela que procede el archivo html) Por ejemplo si el archivo html es mystuffHelloWorldhtml elarchivo Propertiesclass estaacute en mystuffcomibmas400access

5 Ponga el archivo jt400ProxySmalljar en el mismo directorio que el archivo html (mystuff en el paso4)

6 Para hacer referencia al applet en el archivo HTML se escribiriacutealtAPPLET archive=jt400Proxyjar Propertiesclass code=SuAppletclass

width=300 height=100gt ltAPPLETgt

Ejemplo ejecutar una aplicacioacuten Java utilizando el soporte de proxypor tuacutenelesEl ejemplo que figura a continuacioacuten muestra los pasos que se han de seguir para ejecutar una aplicacioacutenJava utilizando el soporte de proxy por tuacuteneles1 Elija el servidor HTTP que desee para ejecutar el servidor proxy y a continuacioacuten configuacuterelo para

ejecutar el servlet comibmas400accessTunnelProxyServer (en jt400jar) Nota compruebe que elservidor HTTP tenga una conexioacuten con el sistema que contiene los datos o el recurso que la aplicacioacutenutiliza ya que el servlet se conecta a ese sistema para llevar a cabo las peticiones

2 Elija una maacutequina para actuar como cliente y compruebe que la variable CLASSPATH de la maacutequinacliente incluya el archivo jt400Proxyjar y las clases de la aplicacioacuten El cliente debe tener capacidadpara conectarse al servidor HTTP pero no necesita una conexioacuten con el sistema

3 Establezca que el valor de la propiedad comibmas400accessAS400proxyServer sea el nombre delservidor HTTP en formato de URL

4 Ejecute la aplicacioacuten estableciendo que el valor de la propiedadcomibmas400accessAS400proxyServer sea el nombre del servidor HTTP en formato de URL Paraello lo maacutes sencillo es utilizar la opcioacuten -D que estaacute disponible en la mayoriacutea de las maacutequinasvirtuales Java

java -Dcomibmas400accessAS400proxyServer=httppsMachineName YourApplication

292 IBM Toolbox para Java IBM Toolbox para Java

Nota el coacutedigo de cliente proxy crea el URL de servlet correcto concatenando servlet y el nombrede servlet al nombre de servidor En este ejemplo convierte httppsMachineName enhttppsMachineNameservletTunnelProxyServer

Capa de Sockets Segura y Extensioacuten de sockets seguros JavaIBM Toolbox para Java soporta el uso de Extensioacuten de sockets seguros Java (JSSE) para las conexiones deCapa de Sockets Segura (SSL) Java JSSE estaacute integrado en J2SE versioacuten 14 y versiones posteriores

Para obtener maacutes informacioacuten sobre JSSE consulte el sitio Web de JSSE de Sun

JSSE ofrece la posibilidad de llevar a cabo la autenticacioacuten de servidor permitir las comunicacionesseguras y cifrar datos Con JSSE puede hacer posible un intercambio de datos seguro entre los clientes yservidores que ejecutan cualquier protocolo de aplicaciones (por ejemplo HTTP y FTP) a traveacutes deTCPIP

Si ya ha utilizado sslight anteriormente deberaacute migrar a JSSE A partir de IBM i 54 JSSE es el uacutenicopaquete soportado y ya no se suministra sslight

Componentes XML (Extensible Markup Language)IBM Toolbox para Java consta de diversos componentes XML (Extensible Markup Language) entre ellosun analizador XML

Los componentes XML facilitan la realizacioacuten de muacuteltiples tareasv Crear interfaces de usuario graacuteficasv Llamar a programas del sistema y recuperar los resultadosv Especificar formatos de datos en el sistema

PCML (Program Call Markup Language)PCML (Program Call Markup Language) es un lenguaje de coacutedigos que permite llamar a programas delservidor escribiendo menos coacutedigo Java

El lenguaje PCML se basa en el lenguaje XML (Extensible Markup Language) una sintaxis de coacutedigosque se utiliza para describir los paraacutemetros de entrada y salida para los programas del servidor PCML lepermite definir coacutedigos que describen de forma completa los programas del servidor llamados por laaplicacioacuten Java

Nota si le interesa utilizar PCML o ya lo utiliza piense en la posibilidad de emplear XPCML (ExtensibleProgram Call Markup Language) XPCML mejora las funciones y la capacidad de utilizacioacuten de PCML alofrecer soporte para los esquemas XML Para obtener maacutes informacioacuten acerca de los componentes XMLde IBM Toolbox para Java entre ellos XPCML consulte Componentes XML (Extensible MarkupLanguage)

Una de las enormes ventajas de PCML es que no se tiene que escribir tanto coacutedigo Normalmente senecesita coacutedigo adicional para conectar recuperar y convertir datos entre un servidor y los objetos deIBM Toolbox para Java No obstante con el lenguaje PCML las llamadas al servidor con las clases deIBM Toolbox para Java se manejan de forma automaacutetica Los objetos de las clases PCML se generan apartir de los coacutedigos PCML y ayudan a minimizar la cantidad de coacutedigo que se necesita escribir parallamar a los programas del servidor desde una aplicacioacuten

IBM Toolbox para Java 293

Si bien el lenguaje PCML se ha disentildeado para dar soporte a las llamadas a programa distribuidas que serealizan a objetos de programas del servidor desde una plataforma Java de cliente tambieacuten se puedeutilizar el lenguaje PCML para efectuar llamadas a un programa del servidor desde dentro del entornodel servidor

Requisitos para utilizar PCMLEl componente PCML tiene los mismos requisitos de maacutequina virtual Java de la estacioacuten de trabajo que elresto de IBM Toolbox para Java

Ademaacutes para analizar PCML en tiempo de ejecucioacuten la CLASSPATH de la aplicacioacuten debe incluir unanalizador XML El analizador XML debe ampliar la clase orgapachexercesparsersSAXParser

Nota si preserializa el archivo PCML no es necesario que incluya un analizador XML en la CLASSPATHde la aplicacioacuten para ejecutar la aplicacioacutenReferencia relacionadaldquoRequisitos de estacioacuten de trabajo para IBM Toolbox para Javardquo en la paacutegina 6Aseguacuterese de que la estacioacuten de trabajo cumple con los siguientes requisitosldquoAnalizador XML y procesador XSLTrdquo en la paacutegina 330Algunos paquetes o funciones de IBM Toolbox para Java requieren que en tiempo de ejecucioacuten haya unanalizador XML (Extensible Markup Language) o un procesador XSLT (Extensible Stylesheet LanguageTransformations) en la variable de entorno CLASSPATH

Construir llamadas a programa IBM i con PCMLPara construir llamadas a programa IBM i con PCML debe empezar por crear una aplicacioacuten Java y unarchivo fuente PCML

En funcioacuten del proceso de su disentildeo debe escribir uno o varios archivos fuente PCML en los quedescriba las interfaces para los programas IBM i a los que va a llamar su aplicacioacuten Java Si deseaconsultar una descripcioacuten detallada de este lenguaje vaya a Sintaxis de PCML

A continuacioacuten la aplicacioacuten Java interactuacutea con las clases PCML (en este caso la claseProgramCallDocument) La clase ProgramCallDocument utiliza el archivo fuente PCML para pasarinformacioacuten entre la aplicacioacuten Java y los programas IBM i La figura 1 muestra coacutemo interactuacutean lasaplicaciones Java con las clases PCML

Figura 1 Realizacioacuten de llamadas a programa en el servidor mediante PCML

294 IBM Toolbox para Java IBM Toolbox para Java

Cuando la aplicacioacuten construye el objeto ProgramCallDocument el analizador XML lee y analiza elarchivo fuente PCML Para obtener maacutes informacioacuten sobre el uso de un analizador XML con IBM Toolboxpara Java consulte Analizador XML y procesador XSLT

Una vez creada la clase ProgramCallDocument el programa de aplicacioacuten utiliza los meacutetodos de la claseProgramCallDocument para recuperar la informacioacuten necesaria del servidor mediante el servidor DPC(llamadas a programa distribuidas) de IBM i

Para mejorar el rendimiento en tiempo de ejecucioacuten puede serializarse la clase ProgramCallDocumentdurante el tiempo de construccioacuten del producto Luego el documento de llamada a programa(ProgramCallDocument) se construye mediante el archivo serializado En este caso no se utiliza elanalizador XML en tiempo de ejecucioacuten Consulte el apartado Utilizacioacuten de archivos PCML serializados

Utilizacioacuten de los archivos fuente PCML

La aplicacioacuten Java utiliza el lenguaje PCML construyendo un objeto ProgramCallDocument con unareferencia al archivo fuente PCML El objeto ProgramCallDocument trata el archivo fuente PCML como sifuese un recurso Java La aplicacioacuten Java localiza el archivo fuente PCML mediante la CLASSPATH Java

El coacutedigo Java siguiente construye un objeto ProgramCallDocumentAS400 as400 = new AS400()ProgramCallDocument pcmlDoc = new ProgramCallDocument(as400 myPcmlDoc)

El objeto ProgramCallDocument buscaraacute el fuente PCML en un archivo llamado myPcmlDocpcmlObserve que no se especifica la extensioacuten pcml en el constructor

Si va a desarrollar una aplicacioacuten Java en un paquete Java puede calificar por paquete el nombre delrecurso PCML

IBM Toolbox para Java 295

AS400 as400 = new AS400()ProgramCallDocument pcmlDoc = new ProgramCallDocument(as400 comcompanypackagemyPcmlDoc)

Utilizacioacuten de los archivos PCML serializados

Para mejorar el rendimiento en tiempo de ejecucioacuten puede utilizar un archivo PCML serializado Unarchivo PCML serializado contiene objetos Java serializados que representan el PCML Los objetosserializados son los mismos objetos que se crean al construir el objeto ProgramCallDocument a partir deun archivo fuente tal como se ha descrito antes

La utilizacioacuten de archivos PCML serializados supone una mejora en el rendimiento porque no se necesitael analizador XML en tiempo de ejecucioacuten para procesar los coacutedigos PCML

El PCML se puede serializar mediante uno de estos procedimientosv Desde la liacutenea de mandatos

java comibmas400dataProgramCallDocument -serialize mypcml

Este procedimiento resulta de gran utilidad para construir la aplicacioacuten mediante procesos por lotesv Desde un programa Java

ProgramCallDocument pcmlDoc Inicializado en alguacuten otro lugarpcmlDocserialize()

Si el coacutedigo PCML se encuentra en un archivo fuente denominado myDocpcml el resultado de laserializacioacuten es un archivo denominado myDocpcmlser

Los archivos fuente PCML frente a los archivos PCML serializados

Tome en consideracioacuten el siguiente coacutedigo para construir un objeto ProgramCallDocumentAS400 as400 = new AS400()ProgramCallDocument pcmlDoc = new ProgramCallDocument(as400 commycompanymypackagemyPcmlDoc)

El constructor de ProgramCallDocument intentaraacute en primer lugar encontrar un archivo PCMLserializado cuyo nombre sea myPcmlDocpcmlser en el paquete commycompanymypackage de laCLASSPATH Java Si no existe un archivo PCML serializado el constructor intentaraacute encontrar un archivofuente PCML denominado myPcmlDocpcml en el paquete commycompanymypackage de laCLASSPATH Java Si tampoco existe ese archivo fuente PCML se lanzaraacute una excepcioacuten

Nombres calificados

La aplicacioacuten Java utiliza ProgramCallDocumentsetValue() para establecer los valores de entrada para elprograma de IBM i al que se llama Del mismo modo la aplicacioacuten utilizaProgramCallDocumentgetValue() para recuperar los valores de salida del programa IBM i

Cuando acceda a los valores desde la clase ProgramCallDocument debe especificar el nombre totalmentecalificado del elemento documento o del coacutedigo ltdatagt El nombre calificado es una concatenacioacuten de losnombres de todos los coacutedigos continentes en la que los nombres se separan mediante un punto

Por ejemplo si suponemos el siguiente fuente PCML el nombre calificado del elemento nbrPolygonsseriacutea polytestparm1nbrPolygons El nombre calificado para acceder al valor x de uno de los puntosde uno de los poliacutegonos seriacutea polytestparm1polygonpointx

Si alguno de los elementos necesarios para formar el nombre calificado no tiene nombre losdescendientes de ese elemento no tendriacutean un nombre calificado Desde el programa Java no puedeaccederse a ninguacuten elemento que no tenga un nombre calificado

296 IBM Toolbox para Java IBM Toolbox para Java

ltpcml version=10gtltprogram name=polytest path=QSYSlibMYLIBlibPOLYTESTpgmgt

lt-- El paraacutemetro 1 contiene una cuenta de poliacutegonos junto con una matriz de poliacutegonos --gtltstruct name=parm1 usage=inputoutputgt

ltdata name=nbrPolygons type=int length=4 init=5 gtlt-- Cada poliacutegono contiene una cuenta del nuacutemero de puntos junto con una matriz de puntos --gtltstruct name=polygon count=nbrPolygonsgt

ltdata name=nbrPoints type=int length=4 init=3 gtltstruct name=point count=nbrPoints gt

ltdata name=x type=int length=4 init=100 gtltdata name=y type=int length=4 init=200 gt

ltstructgtltstructgt

ltstructgtltprogramgt

ltpcmlgt

Acceso a los datos de las matrices

Cualquier elemento ltdatagt o ltstructgt se puede definir como una matriz mediante el atributo count Obien un elemento ltdatagt o ltstructgt puede estar contenido dentro de otro elemento ltstructgt que esteacutedefinido como una matriz

Ademaacutes un elemento ltdatagt o ltstructgt puede estar en una matriz multidimensional si maacutes de unelemento continente tiene especificado un atributo count

Para que su aplicacioacuten establezca u obtenga valores definidos como una matriz o definidos dentro de unamatriz debe especificar el iacutendice de matriz para cada una de las dimensiones de la matriz Los iacutendices dematriz se pasan en forma de una matriz de valores int Siguiendo con el fuente anterior de la matriz depoliacutegonos puede utilizarse el siguiente coacutedigo Java para recuperar la informacioacuten sobre los poliacutegonos

ProgramCallDocument polytest Inicializado en alguacuten otro lugarInteger nbrPolygons nbrPoints pointX pointYnbrPolygons = (Integer) polytestgetValue(polytestparm1nbrPolygons)Systemoutprintln(Nuacutemero de poliacutegonos + nbrPolygons)indices = new int[2]for (int polygon = 0 polygon lt nbrPolygonsintValue() polygon++)

indices[0] = polygonnbrPoints = (Integer) polytestgetValue(polytestparm1polygonnbrPoints indices )Systemoutprintln( Nuacutemero de puntos + nbrPoints)

for (int point = 0 point lt nbrPointsintValue() point++)

indices[1] = pointpointX = (Integer) polytestgetValue(polytestparm1polygonpointx indices )pointY = (Integer) polytestgetValue(polytestparm1polygonpointy indices )Systemoutprintln( X + pointX + Y + pointY)

Depuracioacuten

Al utilizar el lenguaje PCML para llamar a programas que tengan estructuras de datos complejas es faacutecilque el PCML contenga errores que provoquen excepciones de la clase ProgramCallDocument Si loserrores estaacuten relacionados con una descripcioacuten incorrecta de los desplazamientos y longitudes de losdatos la depuracioacuten de las excepciones puede resultar complicada

Utilice el meacutetodo siguiente de la clase Trace para activar el rastreo PCMLTracesetTraceOn(true) Active la funcioacuten de rastreoTracesetTracePCMLOn(true) Active el rastreo PCML

IBM Toolbox para Java 297

Nota todos los meacutetodos puacuteblicos de la clase PcmlMessageLog incluido el de rastreo quedaronobsoletos en la versioacuten V5R2

El meacutetodo setFileName() de Trace permite enviar los siguientes tipos de informacioacuten a archivos deanotaciones especiacuteficos o de forma predeterminada a Systemoutv Un vuelco de los datos hexadecimales que se esteacuten transfiriendo entre la aplicacioacuten Java y el programa

IBM i Este tipo de informacioacuten muestra los paraacutemetros de entrada del programa despueacutes de que losdatos de tipo caraacutecter se hayan convertido a EBCDIC y de que los enteros se hayan convertido abig-endian Tambieacuten muestra los paraacutemetros de salida antes de que se hayan convertido al entornoJavaLos datos aparecen en un formato tiacutepico de vuelco hexadecimal con los diacutegitos hexadecimales a laizquierda y una interpretacioacuten de tipo caraacutecter a la derecha A continuacioacuten figura un ejemplo de esteformato de vuelco (El ejemplo siguiente se ha modificado para adaptarlo a las restricciones deanchura)qgyolobj[6]Offset 0 4 8 C 0 4 8 C

048C048C0 5CE4E2D9 D7D9C640 4040

USRPRF

En el ejemplo anterior el vuelco indica que el seacuteptimo paraacutemetro tiene 10 bytes de datos establecidosen USRPRF

v En el caso de los paraacutemetros de salida a continuacioacuten del vuelco hexadecimal hay una descripcioacuten decoacutemo se han interpretado los datos para el documento (El ejemplo siguiente se ha modificado paraadaptarlo a las restricciones de anchura)

QSYSlibQGYlibQGYOLOBJpgm[2]Offset 0 4 8 C 0 4 8 C

048C048C0 0000000A 0000000A 00000001 00000068 D7F0F9F9 F0F1F1F5 F1F4F2F6 F2F5F400

P0990115142625420 00000410 00000001 00000000 00000000 00000000 00000000 00000000 00000000

40 00000000 00000000 00000000 00000000

Reading data -- Offset 0 Length 4 Name qgyolobjlistInfototalRcdsByte data 0000000A

Reading data -- Offset 4 Length 4 Name qgyolobjlistInforcdsReturnedByte data 0000000A

Reading data -- Offset 8 Length 4 Name qgyolobjlistInforqsHandleByte data 00000001

Reading data -- Offset c Length 4 Name qgyolobjlistInforcdLengthByte data 00000068

Reading data -- Offset 10 Length 1 Name qgyolobjlistInfoinfoCompleteByte data D7

Reading data -- Offset 11 Length 7 Name qgyolobjlistInfodateCreatedByte data F0F9F9F0F1F1F5

Reading data -- Offset 18 Length 6 Name qgyolobjlistInfotimeCreatedByte data F1F4F2F6F2F5

Reading data -- Offset 1e Length 1 Name qgyolobjlistInfolistStatusByte data F4

Reading data -- Offset 1f Length 1 Name qgyolobjlistInfo[8]Byte data 00

Reading data -- Offset 20 Length 4 Name qgyolobjlistInfolengthOfInfoByte data 00000410

Reading data -- Offset 24 Length 4 Name qgyolobjlistInfofirstRecordByte data 00000001

Reading data -- Offset 28 Length 40 Name qgyolobjlistInfo[11]Byte data 00000000000000000000000000000000000000000000000000000000000000000000000000000000

Los mensajes anteriores pueden resultar de gran utilidad para diagnosticar los casos en que los datos desalida procedentes del programa IBM i no coinciden con el fuente PCML Estos errores pueden

298 IBM Toolbox para Java IBM Toolbox para Java

producirse faacutecilmente cuando se utilizan longitudes y desplazamientos dinaacutemicos

Sintaxis de PCMLEl lenguaje PCML consta de los coacutedigos siguientes cada uno de ellos con sus propios coacutedigos deatributosv El coacutedigo program sentildeala el principio y el final del coacutedigo que describe un programav El coacutedigo struct define una estructura con nombre que puede especificarse como argumento en un

programa o como campo dentro de otra estructura con nombre Un coacutedigo de estructura contiene uncoacutedigo de datos o de estructura para cada uno de los campos de la estructura

v El coacutedigo data define un campo dentro de un programa o de una estructura

En el ejemplo siguiente la sintaxis de PCML describe un programa con una categoriacutea de datos y algunosdatos aisladosltprogramgt

ltstructgtltdatagt ltdatagt

ltstructgt

ltdatagt ltdatagt

ltprogramgt

Coacutedigo PCML program

El coacutedigo PCML program puede ampliarse con los elementos siguientesltprogram name=nombre

[ entrypoint=nombre-punto-entrada ][ epccsid=ccsid ][ path=nombre-viacutea ][ parseorder=lista-nombres ][ returnvalue= void | integer ][ threadsafe= true | false ]gt

ltprogramgt

En la siguiente tabla figuran los atributos del coacutedigo program Cada entrada contiene el nombre deatributo los valores vaacutelidos posibles y una descripcioacuten del atributo

Atributo Valor Descripcioacuten

entrypoint= nombre-punto-entrada Especifica el nombre del punto deentrada dentro de un objeto deprograma de servicio que es eldestino de esta llamada a programa

epccsid= ccsid Especifica el CCSID del punto deentrada dentro de un programa deservicio Para obtener maacutesinformacioacuten consulte las notas de lasentradas de programa de servicio enel javadoc de ServiceProgramCall

name= nombre Especifica el nombre del programa

IBM Toolbox para Java 299

Atributo Valor Descripcioacuten

path= nombre-viacutea Especifica la viacutea de acceso al objetoprograma El valor predeterminadoes presuponer que el programa estaacuteen la biblioteca QSYS

La viacutea debe ser un nombre vaacutelido deviacutea de acceso del sistema de archivosintegrado a un objeto PGM oSRVPGM Si se llama a un objetoSRVPGM se debe especificar elatributo de punto de entrada(entrypoint) para indicar el nombredel punto de entrada al que se ha dellamar

Si no se especifica el atributoentrypoint el valor predeterminadode este atributo consiste enpresuponer que se trata de un objetoPGM de la biblioteca QSYS Si seespecifica el atributo entrypoint elvalor predeterminado de este atributoconsiste en presuponer que se tratade un objeto SRVPGM de labiblioteca QSYS

El nombre de la viacutea se debeespecificar con todos los caracteres enmayuacutesculas

No utilice el atributo path cuando laaplicacioacuten tenga que establecer la viacuteade acceso en tiempo de ejecucioacutencomo por ejemplo cuando un usuarioespecifica queacute biblioteca se utilizapara la instalacioacuten En este casoutilice el meacutetodoProgramCallDocumentsetPath()

300 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

parseorder= lista-nombres Especifica el orden en que seprocesaraacuten los paraacutemetros de salidaEl valor especificado es una lista denombres de paraacutemetros separadosmediante espacios en blanco yescritos en el orden en que se han deprocesar Los nombres de la listadeben ser ideacutenticos a losespecificados en el atributo name delos coacutedigos que pertenecen al coacutedigoltprogramgt El valor predeterminadoconsiste en procesar los paraacutemetrosde salida en el orden en que aparecenlos coacutedigos en el documento

Algunos programas devuelveninformacioacuten en un paraacutemetro quedescribe informacioacuten de unparaacutemetro anterior Por ejemploimagine que un programa devuelveuna matriz de estructuras en elprimer paraacutemetro y el nuacutemero deentradas de la matriz en el segundoparaacutemetro En este caso es precisoprocesar primero el segundoparaacutemetro para queProgramCallDocument puedaaveriguar cuaacutentas estructuras se hande procesar en el primer paraacutemetro

returnvalue= void El programa no devuelve ninguacutenvalor

integer El programa devuelve unentero de 4 bytes con signo

Especifica el tipo de valor que sedevuelve (si es que se devuelvealguacuten valor) desde una llamada aprograma de servicio Este atributono estaacute permitido para llamadas aobjetos PGM

threadsafe= true El programa se considera seguroen ejecucioacuten multihebra

false El programa no es seguro enejecucioacuten multihebra

Si llama a un programa Java y a unprograma de IBM i que se encuentranen el mismo servidor utilice estapropiedad para especificar si deseallamar al programa IBM i en elmismo trabajo y en la misma hebraque utiliza el programa Java Si sabeque el programa es seguro enejecucioacuten multihebra al establecer lapropiedad en true obtendraacute un mejorrendimiento

Para mantener la seguridad delentorno de forma predeterminada sellama a los programas en trabajosservidores aparte El valorpredeterminado es false

Coacutedigo PCML struct

El coacutedigo PCML struct puede ampliarse con los elementos siguientes

IBM Toolbox para Java 301

ltstruct name=nombre[ count= nuacutemero | nombre-datos ][ maxvrm=serie-versioacuten ][ minvrm=serie-versioacuten ][ offset= nuacutemero | nombre-datos ][ offsetfrom= nuacutemero | nombre-datos | nombre-estructura ][ outputsize= nuacutemero | nombre-datos ][ usage= inherit | input | output | inputoutput ]gt

ltstructgt

En la siguiente tabla figuran los atributos del coacutedigo struct Cada entrada contiene el nombre de atributolos valores vaacutelidos posibles y una descripcioacuten del atributo

Atributo Valor Descripcioacuten

name= nombre Especifica el nombre del elementoltstructgt

count= nuacutemero donde nuacutemero define unamatriz dimensionada fija

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten el nuacutemero de elementos dela matriz El nombre-datos especificadopuede ser un nombre totalmentecalificado o un nombre relativo alelemento actual En los dos casos elnombre debe hacer referencia a unelemento ltdatagt que se hayadefinido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica que el elemento es unamatriz e identifica el nuacutemero deentradas de la matriz

Si se omite este atributo el elementono estaacute definido como una matrizaunque puede encontrarse dentro deotro elemento que esteacute definido comomatriz

maxvrm= serie-versioacuten Especifica la versioacuten de IBM i maacutesactual en la que existe el elemento Sila versioacuten de IBM i es superior a laespecificada en el atributo elelemento y sus hijos si es queexisten no se procesaraacuten duranteuna llamada a un programa Elelemento maxvrm resulta de utilidadpara definir interfaces de programaque difieren entre releases de IBM i

La sintaxis de la serie de versioacutendebe ser VvRrMm donde lasmayuacutesculas V R y M soncaracteres literales y las minuacutesculasv r y m son uno o variosdiacutegitos que representan la versioacuten elrelease y el nivel de modificacioacuten Elvalor de v debe estar comprendidoentre 1 y 255 ambos inclusive Elvalor de r y m debe estarcomprendido entre 0 y 255 ambosinclusive

302 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

minvrm= serie-versioacuten Especifica la versioacuten de IBM i maacutesantigua en la que existe esteelemento Si la versioacuten de IBM i esinferior a la especificada en esteatributo este elemento y sus hijos sies que existen no se procesaraacutendurante una llamada a un programaEste atributo resulta de utilidad paradefinir interfaces de programa quedifieren entre releases de IBM i

La sintaxis de la serie de versioacutendebe ser VvRrMm donde lasmayuacutesculas V R y M soncaracteres literales y las minuacutesculasv r y m son uno o variosdiacutegitos que representan la versioacuten elrelease y el nivel de modificacioacuten Elvalor de v debe estar comprendidoentre 1 y 255 ambos inclusive Elvalor de r y m debe estarcomprendido entre 0 y 255 ambosinclusive

IBM Toolbox para Java 303

Atributo Valor Descripcioacuten

offset= nuacutemero donde nuacutemero define undesplazamiento fijo

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten el desplazamiento para elelemento El nombre-datosespecificado puede ser un nombretotalmente calificado o un nombrerelativo al elemento actual En los doscasos el nombre debe hacerreferencia a un elemento ltdatagt quese haya definido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica el desplazamiento para elelemento ltstructgt dentro de unparaacutemetro de salida

Algunos programas devuelveninformacioacuten con una estructura fijaseguida de uno o maacutes campos oestructuras de longitud variable Eneste caso la ubicacioacuten de unelemento de longitud variable seespecifica normalmente comodesplazamiento o desplazamientoentre estructuras dentro delparaacutemetro El atributo offset seutiliza para describir eldesplazamiento para este elementoltstructgt

El atributo offset se utiliza junto conel atributo offsetfrom Si no seespecifica el atributo offsetfrom laubicacioacuten base para eldesplazamiento especificado en elatributo offset es el padre delelemento Si desea obtener maacutesinformacioacuten sobre coacutemo se utilizanlos atributos offset y offsetfromconsulte Especificacioacuten dedesplazamientos

Los atributos offset y offsetfrom solose utilizan para procesar los datos desalida de un programa Estosatributos no controlan eldesplazamiento ni el desplazamientoentre estructuras de los datos deentrada

Si se omite este atributo la ubicacioacutende los datos de este elemento siguede inmediato al elemento anterior delparaacutemetro si existe

304 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

offsetfrom= nuacutemero donde nuacutemero define unaubicacioacuten base fija El atributo nuacutemerose utiliza normalmente paraespecificar number=0 lo cualindica que se trata de undesplazamiento absoluto contado apartir del principio del paraacutemetro

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt que se utilizaraacute comoubicacioacuten base para eldesplazamiento El nombre deelemento especificado debe ser elpadre o un ancestro de este elementoEl valor del atributo offset seraacuterelativo a la ubicacioacuten del elementoque se especifica en este atributo Elnombre-datos especificado puede serun nombre totalmente calificado o unnombre relativo al elemento actualEn los dos casos el nombre debehacer referencia a un ancestro de esteelemento Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

nombre-estructura dondenombre-estructura define el nombre deun elemento ltstructgt que se utilizaraacutecomo ubicacioacuten base para eldesplazamiento El nombre deelemento especificado debe ser elpadre o un ancestro de este elementoEl valor del atributo offset seraacuterelativo a la ubicacioacuten del elementoque se especifica en este atributo Elnombre-estructura especificado puedeser un nombre totalmente calificado oun nombre relativo al elementoactual En los dos casos el nombredebe hacer referencia a un ancestrode este elemento Si desea maacutesinformacioacuten sobre coacutemo se resuelvenlos nombres relativos consulte elapartado Resolucioacuten de nombresrelativos

Especifica la ubicacioacuten base que elatributo offset toma como referencia

Si no se especifica el atributooffsetfrom la ubicacioacuten base deldesplazamiento especificado en elatributo offset es el padre de esteelemento Si desea obtener maacutesinformacioacuten sobre coacutemo se utilizanlos atributos offset y offsetfromconsulte Especificacioacuten dedesplazamientos

Los atributos offset y offsetfrom solose utilizan para procesar los datos desalida de un programa Estosatributos no controlan eldesplazamiento ni el desplazamientoentre estructuras de los datos deentrada

IBM Toolbox para Java 305

Atributo Valor Descripcioacuten

outputsize= nuacutemero donde nuacutemero define unnuacutemero fijo de bytes que se han dereservar

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten el nuacutemero de bytes que sehan de reservar para los datos desalida El nombre-datos especificadopuede ser un nombre totalmentecalificado o un nombre relativo alelemento actual En los dos casos elnombre debe hacer referencia a unelemento ltdatagt que se hayadefinido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica el nuacutemero de bytes que sehan de reservar para los datos desalida del elemento En el caso de losparaacutemetros de salida de longitudvariable se necesita el atributooutputsize para especificar cuaacutentosbytes deben reservarse para los datosque se han de devolver desde elprograma del servidor Puedeespecificarse un atributo outputsizeen todos los campos de longitudvariable y en todas las matrices detamantildeo variable o bien puedeespecificarse para un paraacutemetrocompleto que contenga uno o maacutescampos de longitud variable

El atributo outputsize no esnecesario y no debe especificarse enel caso de los paraacutemetros de salidade tamantildeo fijo

El valor especificado en este atributose utiliza como tamantildeo total delelemento incluidos todos sus hijosPor consiguiente el atributooutputsize no se tiene en cuenta enlos hijos ni en los descendientes delelemento

Si se omite este atributo el nuacutemerode bytes que se han de reservar paralos datos de salida se determina entiempo de ejecucioacuten sumando elnuacutemero de bytes que se han dereservar para todos los hijos delelemento ltstructgt

usage= inherit La utilizacioacuten se hereda del elementopadre Si la estructura no tiene padrese supone que la utilizacioacuten esinputoutput

input La estructura es un valor de entradadirigido al programa del host Si losdatos son de tipo caraacutecter onumeacuterico se efectuacutea la conversioacutenadecuada

output La estructura es un valor de salidaprocedente del programa del host Silos datos son de tipo caraacutecter onumeacuterico se efectuacutea la conversioacutenadecuada

inputoutput La estructura es tanto un valor deentrada como uno de salida

306 IBM Toolbox para Java IBM Toolbox para Java

Especificacioacuten de desplazamientos

Algunos programas devuelven informacioacuten con una estructura fija seguida de uno o maacutes campos oestructuras de longitud variable En este caso la ubicacioacuten de un elemento de longitud variable seespecifica normalmente como desplazamiento o desplazamiento entre estructuras dentro del paraacutemetro

Un desplazamiento es la distancia en bytes desde el principio de un paraacutemetro hasta el principio de uncampo o de una estructura Un desplazamiento entre estructuras es la distancia en bytes desde elprincipio de una estructura hasta el principio de otra estructura

En el caso de los primeros dado que la distancia se cuenta desde el principio del paraacutemetro especifiqueoffsetfrom=0 A continuacioacuten se muestra un ejemplo de desplazamiento desde el principio delparaacutemetroltpcml version=10gt

ltprogram name=myprog path=QSYSlibMYLIBlibMYPROGpgmgtlt-- la variable receiver contiene una viacutea de acceso --gtltstruct name=receiver usage=output outputsize=2048gt

ltdata name=pathType type=int length=4 gtltdata name=offsetToPathName type=int length=4 gtltdata name=lengthOfPathName type=int length=4 gtltdata name=pathName type=char length=lengthOfPathName

offset=offsetToPathName offsetfrom=0gtltstructgt

ltprogramgtltpcmlgt

En el caso de los desplazamientos entre estructuras puesto que la distancia se cuenta desde el principiode otra estructura se especifica el nombre de la estructura que es el punto de partida del desplazamientoA continuacioacuten se muestra un ejemplo de un desplazamiento entre estructuras desde el principio de unaestructura determinadaltpcml =10gt

ltprogram name=myprog path=QSYSlibMYLIBlibMYPROGpgmgtlt-- la variable receiver contiene un objeto --gtltstruct name=receiver usage=output gt

ltdata name=objectName type=char length=10 gtltdata name=libraryName type=char length=10 gtltdata name=objectType type=char length=10 gtltstruct name=pathInfo usage=output outputsize=2048 gt

ltdata name=pathType type=int length=4 gtltdata name=offsetToPathName type=int length=4 gtltdata name=lengthOfPathName type=int length=4 gtltdata name=pathName type=char length=lengthOfPathName

offset=offsetToPathName offsetfrom=pathInfogtltstructgt

ltstructgtltprogramgt

ltpcmlgt

Coacutedigo PCML data

El coacutedigo PCML data puede tener los atributos que se indican maacutes abajo

Los atributos delimitados por corchetes [] son opcionales Si especifica un atributo opcional no incluyalos corchetes en el fuente A continuacioacuten se facilita una lista con algunos valores de atributos delimitadospor llaves y las opciones posibles separadas por barras verticales | Cuando especifique uno de estosatributos no incluya las llaves en el fuente y especifique uacutenicamente una de las opciones que semuestranltdata type= char | int | packed | zoned | float | byte | struct

[ bidistringtype= ST4 | ST5 | ST6 | ST7 | ST8 | ST9 | ST10 | ST11 | DEFAULT ][ ccsid= nuacutemero | nombre-datos ][ chartype= onebyte | twobyte ]

IBM Toolbox para Java 307

[ count= nuacutemero | nombre-datos ][ init=serie ][ length= nuacutemero | nombre-datos ][ maxvrm=serie-versioacuten ][ minvrm=serie-versioacuten ][ name=nombre ][ offset= nuacutemero | nombre-datos ][ offsetfrom= nuacutemero | nombre-datos | nombre-estructura ][ outputsize= nuacutemero | nombre-datos | nombre-estructura ][ passby= reference | value ][ precision=nuacutemero ][ struct=nombre-estructura ][ trim= right | left | both | none ][ usage= inherit | input | output | inputoutput ]gt

ltdatagt

En la siguiente tabla figuran los atributos del coacutedigo data Cada entrada contiene el nombre de atributolos valores vaacutelidos posibles y una descripcioacuten del atributo

308 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

type= char donde char indica un valor detipo caraacutecter Un valor de datos detipo char se devuelve comojavalangString Para obtener maacutesinformacioacuten consulte los valores charpara la longitud

int donde int es un valor entero Unvalor de datos int se devuelve comojavalangLong Para obtener maacutesinformacioacuten consulte los valores intpara la longitud y la precisioacuten

packed donde packed es un valordecimal empaquetado Un valor dedatos packed se devuelve comojavamathBigDecimal Para obtenermaacutes informacioacuten consulte los valorespacked para la longitud y la precisioacuten

zoned donde zoned es un valordecimal con zona Un valor de datoszoned se devuelve comojavamathBigDecimal Para obtenermaacutes informacioacuten consulte los valoreszoned para la longitud y la precisioacuten

float donde float es un valor de comaflotante El atributo length especificael nuacutemero de bytes 4 u 8 Unentero de 4 bytes se devuelve comojavalangFloat Un entero de 8 bytesse devuelve como javalangDoublePara obtener maacutes informacioacutenconsulte los valores float para lalongitud

byte donde byte es un valor de tipobyte No se efectuacutea ningunaconversioacuten de los datos Un valor dedatos byte se devuelve como unamatriz de valores byte (byte[]) Paraobtener maacutes informacioacuten consulte losvalores byte para la longitud

struct donde struct especifica elnombre del elemento ltstructgt Unvalor struct permite definir unaestructura una vez y volver autilizarla varias veces dentro delmismo documento Cuandotype=struct es como si laestructura especificada apareciera enese lugar del documento Un valorstruct no permite un valor delongitud y no tiene ninguacuten valor parala precisioacuten

Indica el tipo de datos que se utiliza(caraacutecter entero empaquetado conzona coma flotante o estructura)

Los valores de los atributos delongitud y precisioacuten variacutean seguacuten losdiferentes tipos de datos Paraobtener maacutes informacioacuten consulte losvalores de longitud y precisioacuten

IBM Toolbox para Java 309

Atributo Valor Descripcioacuten

bidistringtype= DEFAULT donde DEFAULT es el tipode serie predeterminado para datosno bidireccionales (LTR)

ST4 donde ST4 es el tipo de serie 4

ST5 donde ST5 es el tipo de serie 5

ST6 donde ST6 es el tipo de serie 6

ST7 donde ST7 es el tipo de serie 7

ST8 donde ST8 es el tipo de serie 8

ST9 donde ST9 es el tipo de serie 9

ST10 donde ST10 es el tipo de serie10

ST11 donde ST11 es tipo de serie 11

Especifica el tipo de seriebidireccional para los elementosltdatagt que tengan type=char Si seomite este atributo el tipo de seriepara este elemento vienedeterminado por el CCSID(especificado expliacutecitamente o elCCSID predeterminado del entornode host)

Los tipos de serie estaacuten definidos enel javadoc correspondiente a la claseBidiStringType

ccsid= nuacutemero donde nuacutemero define unCCSID fijo que no cambia nunca

nombre-datos donde nombre-datosdefine el nombre que contendraacute entiempo de ejecucioacuten el CCSID de losdatos de tipo caraacutecter El nombre-datosespecificado puede ser un nombretotalmente calificado o un nombrerelativo al elemento actual En losdos casos el nombre debe hacerreferencia a un elemento ltdatagt quese haya definido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica el CCSID (ID de juego decaracteres codificados) de los datosde tipo caraacutecter para el elementoltdatagt El atributo ccsid solo sepuede especificar para los elementosltdatagt que tengan type=char

Si se omite este atributo sepresupone que los datos de tipocaraacutecter de este elemento tienen elCCSID predeterminado del entornode host

chartype= onebyte donde onebyte especifica eltamantildeo de cada caraacutecter

twobyte donde twobyte especifica eltamantildeo de cada caraacutecter

Cuando se utiliza chartype el atributolength=nuacutemero especifica elnuacutemero de caracteres no el nuacutemerode bytes

Especifica el tamantildeo de cada caraacutecter

310 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

count= nuacutemero donde nuacutemero define unnuacutemero fijo de elementos de unamatriz dimensionada

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten el nuacutemero de elementos dela matriz El nombre-datos especificadopuede ser un nombre totalmentecalificado o un nombre relativo alelemento actual En los dos casos elnombre debe hacer referencia a unelemento ltdatagt que se hayadefinido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica que el elemento es unamatriz e identifica el nuacutemero deentradas de la matriz

Si se omite el atributo count elelemento no estaacute definido comomatriz aunque puede encontrarsedentro de otro elemento que esteacutedefinido como matriz

init= serie Especifica un valor inicial para elelemento ltdatagt Se utiliza el valorinit si el programa de aplicacioacuten noestablece de forma expliacutecita ninguacutenvalor inicial al utilizar elementosltdatagt con la especificacioacutenusage=input o usage=inputoutput

El valor inicial especificado se utilizapara inicializar los valores escalaresSi el elemento estaacute definido comomatriz o se encuentra dentro de unaestructura definida como matriz elvalor inicial especificado se utilizacomo valor inicial para todas lasentradas de la matriz

IBM Toolbox para Java 311

Atributo Valor Descripcioacuten

length= nuacutemero donde nuacutemero define elnuacutemero de bytes que requieren losdatos Sin embargo al utilizar elatributo chartypenuacutemero especifica elnuacutemero de caracteres no el nuacutemerode bytes

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten la longitud Uacutenicamentepuede especificarse un nombre-datospara los elementos ltdatagt quetengan type=char o type=byte Elnombre-datos especificado puede serun nombre totalmente calificado o unnombre relativo al elemento actualEn los dos casos el nombre debehacer referencia a un elementoltdatagt que se haya definido con laespecificacioacuten type=int Si deseamaacutes informacioacuten sobre coacutemo seresuelven los nombres relativosconsulte el apartado Resolucioacuten denombres relativos

Especifica la longitud del elementode datos El uso de este atributo variacuteaen funcioacuten del tipo de datos Paraobtener maacutes informacioacuten consulte losvalores de longitud y precisioacuten

maxvrm= serie-versioacuten Especifica la versioacuten de IBM i maacutesactual en la que existe este elementoSi la versioacuten de IBM i es superior a laespecificada en este atributo esteelemento y sus hijos en caso de queexistan no se procesaraacuten durante unallamada a un programa Este atributoresulta de utilidad para definirinterfaces de programa que difierenentre releases de IBM i

La sintaxis de la serie de versioacutendebe ser VvRrMm donde lasmayuacutesculas V R y M soncaracteres literales y las minuacutesculasv r y m son uno o varios diacutegitosque representan la versioacuten el releasey el nivel de modificacioacuten El valorde v debe estar comprendido entre1 y 255 ambos inclusive El valor der y m debe estar comprendidoentre 0 y 255 ambos inclusive

312 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

minvrm= serie-versioacuten Especifica la versioacuten de IBM i maacutesantigua en la que existe esteelemento Si la versioacuten de IBM i esinferior a la especificada en esteatributo este elemento y sus hijos encaso de que existan no se procesaraacutendurante una llamada a un programaEste atributo resulta de utilidad paradefinir interfaces de programa quedifieren entre releases de IBM i

La sintaxis de la serie de versioacutendebe ser VvRrMm donde lasmayuacutesculas V R y M soncaracteres literales y las minuacutesculasv r y m son uno o varios diacutegitosque representan la versioacuten el releasey el nivel de modificacioacuten El valorde v debe estar comprendido entre1 y 255 ambos inclusive El valor der y m debe estar comprendidoentre 0 y 255 ambos inclusive

name= nombre Especifica el nombre del elementoltdatagt

IBM Toolbox para Java 313

Atributo Valor Descripcioacuten

offset= nuacutemero donde nuacutemero define undesplazamiento fijo

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten el desplazamiento paraeste elemento El nombre-datosespecificado puede ser un nombretotalmente calificado o un nombrerelativo al elemento actual En losdos casos el nombre debe hacerreferencia a un elemento ltdatagt quese haya definido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica el desplazamiento para elelemento ltdatagt dentro de unparaacutemetro de salida

Algunos programas devuelveninformacioacuten con una estructura fijaseguida de uno o maacutes campos oestructuras de longitud variable Eneste caso la ubicacioacuten de unelemento de longitud variable seespecifica normalmente comodesplazamiento o desplazamientoentre estructuras dentro delparaacutemetro

El atributo offset se utiliza junto conel atributo offsetfrom Si no seespecifica el atributo offsetfrom laubicacioacuten base del desplazamientoespecificado en el atributo offset es elpadre de este elemento Si deseaobtener maacutes informacioacuten sobre coacutemose utilizan los atributos offset yoffsetfrom consulte Especificacioacuten dedesplazamientos

Los atributos offset y offsetfrom solose utilizan para procesar los datos desalida de un programa Estosatributos no controlan eldesplazamiento ni el desplazamientoentre estructuras de los datos deentrada

Si se omite este atributo la ubicacioacutende los datos de este elemento siguede inmediato al elemento anterior enel paraacutemetro si existe

314 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

offsetfrom= nuacutemero donde nuacutemero define unaubicacioacuten base fija Nuacutemero se utilizanormalmente para especificarnumber=0 lo cual indica que setrata de un desplazamiento absolutocontado a partir del principio delparaacutemetro

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt que se utilizaraacute comoubicacioacuten base para eldesplazamiento El nombre deelemento especificado debe ser elpadre o un ancestro de este elementoEl valor del atributo offset seraacuterelativo a la ubicacioacuten del elementoque se especifica en este atributo Elnombre-datos especificado puede serun nombre totalmente calificado o unnombre relativo al elemento actualEn los dos casos el nombre debehacer referencia a un ancestro de esteelemento Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

nombre-estructura dondenombre-estructura define el nombre deun elemento ltstructgt que se utilizaraacutecomo ubicacioacuten base para eldesplazamiento El nombre deelemento especificado debe ser elpadre o un ancestro de este elementoEl valor del atributo offset seraacuterelativo a la ubicacioacuten del elementoque se especifica en este atributo Elnombre-estructura especificado puedeser un nombre totalmente calificado oun nombre relativo al elementoactual En los dos casos el nombredebe hacer referencia a un ancestrode este elemento Si desea maacutesinformacioacuten sobre coacutemo se resuelvenlos nombres relativos consulte elapartado Resolucioacuten de nombresrelativos

Especifica la ubicacioacuten base que elatributo offset toma como referencia

Si no se especifica el atributooffsetfrom la ubicacioacuten base deldesplazamiento especificado en elatributo offset es el padre de esteelemento Si desea obtener maacutesinformacioacuten sobre coacutemo se utilizanlos atributos offset y offsetfromconsulte Especificacioacuten dedesplazamientos

Los atributos offset y offsetfrom solose utilizan para procesar los datos desalida de un programa Estosatributos no controlan eldesplazamiento ni el desplazamientoentre estructuras de los datos deentrada

IBM Toolbox para Java 315

Atributo Valor Descripcioacuten

outputsize= nuacutemero donde nuacutemero define unnuacutemero fijo de bytes que se han dereservar

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documento PCMLque contendraacute en tiempo deejecucioacuten el nuacutemero de bytes que sehan de reservar para los datos desalida El nombre-datos especificadopuede ser un nombre totalmentecalificado o un nombre relativo alelemento actual En los dos casos elnombre debe hacer referencia a unelemento ltdatagt que se hayadefinido con la especificacioacutentype=int Si desea maacutes informacioacutensobre coacutemo se resuelven los nombresrelativos consulte el apartadoResolucioacuten de nombres relativos

Especifica el nuacutemero de bytes que sehan de reservar para los datos desalida del elemento En el caso de losparaacutemetros de salida de longitudvariable se necesita el atributooutputsize para especificar cuaacutentosbytes deben reservarse para los datosque se han de devolver desde elprograma IBM i Puede especificarseun atributo outputsize en todos loscampos de longitud variable y entodas las matrices de dimensioacutenvariable o bien puede especificarsepara un paraacutemetro completo quecontenga uno o maacutes campos delongitud variable

El atributo outputsize no es necesarioy no debe especificarse en el caso delos paraacutemetros de salida de tamantildeofijo

El valor especificado en este atributose utiliza como tamantildeo total delelemento incluidos todos los hijosdel elemento Por consiguiente elatributo outputsize no se tiene encuenta en los hijos ni en losdescendientes del elemento

Si se omite outputsize el nuacutemero debytes que se han de reservar para losdatos de salida se determina entiempo de ejecucioacuten sumando elnuacutemero de bytes que se han dereservar para todos los hijos delelemento ltstructgt

passby= reference donde reference indica que elparaacutemetro se pasaraacute por referenciaCuando se llame al programa se lepasaraacute un puntero que sentildeale al valordel paraacutemetro

value donde value indica un valorentero Este valor solo estaacute permitidocuando se especifica type=int ylength=4

Especifica si el paraacutemetro se pasa porreferencia o por valor Este atributosolo estaacute permitido cuando esteelemento es hijo de un elementoltprogramgt que define una llamada aun programa de servicio

precision= nuacutemero Especifica el nuacutemero de bytes deprecisioacuten para algunos tipos de datosnumeacutericos Para obtener maacutesinformacioacuten consulte los valores delongitud y precisioacuten

struct= nombre Especifica el nombre de un elementoltstructgt para el elemento ltdatagt Unatributo struct solo se puedeespecificar para los elementos ltdatagtque tengan type=struct

316 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

trim= right donde right es el valorpredeterminado que significa que serecortaraacuten los espacios en blanco decola

left donde left significa que serecortaraacuten los espacios en blancoprecedentes

both donde both significa que serecortaraacuten los espacios en blancoprecedentes y de cola

none donde none significa que no serecortaraacuten los espacios en blanco

Especifica coacutemo se recortaraacute elespacio en blanco de los datos detipo caraacutecter

usage= inherit La utilizacioacuten se hereda del elementopadre Si la estructura no tiene padrese supone que la utilizacioacuten esinputoutput

input Define un valor de entrada para elprograma del host Si los datos sonde tipo caraacutecter o numeacuterico seefectuacutea la conversioacuten adecuada

output Define un valor de salida desde elprograma del host Si los datos sonde tipo caraacutecter o numeacuterico seefectuacutea la conversioacuten adecuada

inputoutput Define tanto un valor de entradacomo uno de salida

Especificacioacuten de desplazamientos

Algunos programas devuelven informacioacuten con una estructura fija seguida de uno o maacutes campos oestructuras de longitud variable En este caso la ubicacioacuten de un elemento de longitud variable seespecifica normalmente como desplazamiento o desplazamiento entre estructuras dentro del paraacutemetro

Un desplazamiento es la distancia en bytes desde el principio de un paraacutemetro hasta el principio de uncampo o de una estructura Un desplazamiento entre estructuras es la distancia en bytes desde elprincipio de una estructura hasta el principio de otra estructura

En el caso de los primeros dado que la distancia se cuenta desde el principio del paraacutemetro se debeespecificar offsetfrom=0 A continuacioacuten se muestra un ejemplo de desplazamiento desde el principiodel paraacutemetroltpcml version=10gt

ltprogram name=myprog path=QSYSlibMYLIBlibMYPROGpgmgtlt-- la variable receiver contiene una viacutea de acceso --gtltstruct name=receiver usage=output outputsize=2048gt

ltdata name=pathType type=int length=4 gtltdata name=offsetToPathName type=int length=4 gtltdata name=lengthOfPathName type=int length=4 gtltdata name=pathName type=char length=lengthOfPathName

offset=offsetToPathName offsetfrom=0gtltstructgt

ltprogramgtltpcmlgt

IBM Toolbox para Java 317

En el caso de los desplazamientos entre estructuras puesto que la distancia se cuenta desde el principiode otra estructura se especifica el nombre de la estructura que es el punto de partida del desplazamientoA continuacioacuten se muestra un ejemplo de un desplazamiento entre estructuras desde el principio de unaestructura determinadaltpcml version=10gt

ltprogram name=myprog path=QSYSlibMYLIBlibMYPROGpgmgtlt-- la variable receiver contiene un objeto --gtltstruct name=receiver usage=output gt

ltdata name=objectName type=char length=10 gtltdata name=libraryName type=char length=10 gtltdata name=objectType type=char length=10 gtltstruct name=pathInfo usage=output outputsize=2048 gt

ltdata name=pathType type=int length=4 gtltdata name=offsetToPathName type=int length=4 gtltdata name=lengthOfPathName type=int length=4 gtltdata name=pathName type=char length=lengthOfPathName

offset=offsetToPathName offsetfrom=pathInfogtltstructgt

ltstructgtltprogramgt

ltpcmlgt

Valores de longitud y precisioacuten

Los valores de los atributos de longitud y precisioacuten variacutean seguacuten los diferentes tipos de datos

En la tabla siguiente se indica cada tipo de datos con una descripcioacuten de los valores posibles de longitudy precisioacuten

Tipo de datos Longitud Precisioacuten

type=char Nuacutemero de bytes de datos de esteelemento que puede ser distinto delnuacutemero de caracteres Debeespecificar un nuacutemero literal o unnombre de datos

No vaacutelido

type=int Nuacutemero de bytes de datos de esteelemento 2 4 o 8 Debe especificarun nuacutemero literal

Indica el nuacutemero de bits de precisioacuteny si el entero es con signo o sinsigno

v Para length=2

ndash Utilice precision=15 para unentero de 2 bytes con signo Estees el valor predeterminado

ndash Utilice precision=16 para unentero de 2 bytes sin signo

v Para length=4

ndash Utilice precision=31 para unentero de 4 bytes con signo

ndash Utilice precision=32 para unentero de 4 bytes sin signo

v Para length=8 utiliceprecision=63 para un entero de8 bytes con signo

type=packed o zoned Nuacutemero de diacutegitos numeacutericos dedatos de este elemento Debeespecificar un nuacutemero literal

Nuacutemero de diacutegitos decimales delelemento Este nuacutemero debe sersuperior o igual a cero e inferior oigual al nuacutemero total de diacutegitosespecificado en el atributo length

318 IBM Toolbox para Java IBM Toolbox para Java

Tipo de datos Longitud Precisioacuten

type=float Nuacutemero de bytes 4 o 8 de datos deeste elemento Debe especificar unnuacutemero literal

No vaacutelido

type=byte Nuacutemero de bytes de datos de esteelemento Debe especificar un nuacutemeroliteral o un nombre de datos

No vaacutelido

type=struct No permitido No vaacutelido

Resolucioacuten de nombres relativos

Hay varios atributos que permiten especificar como valor de atributo el nombre de otro elemento ocoacutedigo dentro del documento El nombre especificado puede ser un nombre totalmente calificado o unnombre relativo al coacutedigo actual

Para resolver un nombre se mira si el nombre corresponde al nombre de un hijo o un descendiente delcoacutedigo que contiene el coacutedigo actual Si el nombre no puede resolverse a este nivel la buacutesqueda continuacuteaen el coacutedigo continente que le sigue en la jerarquiacutea Este proceso de resolucioacuten continuacutea hasta que sellega en uacuteltima instancia a una coincidencia con un coacutedigo que esteacute contenido en el coacutedigo ltpcmlgt o elcoacutedigo ltrfmlgt en cuyo caso el nombre se considera absoluto no relativo

A continuacioacuten se muestra un ejemplo de PCMLltpcml version=10gt

ltprogram name=polytest path=QSYSlibMYLIBlibPOLYTESTpgmgtlt-- El paraacutemetro 1 contiene una cuenta de poliacutegonos junto con una matriz de poliacutegonos --gtltstruct name=parm1 usage=inputoutputgt

ltdata name=nbrPolygons type=int length=4 init=5 gtlt-- Cada poliacutegono contiene una cuenta del nuacutemero de puntos junto con una matriz de puntos --gtltstruct name=polygon count=nbrPolygonsgt

ltdata name=nbrPoints type=int length=4 init=3 gtltstruct name=point count=nbrPoints gt

ltdata name=x type=int length=4 init=100 gtltdata name=y type=int length=4 init=200 gt

ltstructgtltstructgt

ltstructgtltprogramgt

ltpcmlgt

A continuacioacuten se muestra un ejemplo de RFMLltrfml version=40gt

ltstruct name=polygongtlt-- Cada poliacutegono contiene una cuenta del nuacutemero de puntos junto con una matriz de puntos --gtltdata name=nbrPoints type=int length=4 init=3 gtltdata name=point type=struct struct=point count=nbrPoints gt

ltstructgtltstruct name=point gt

ltdata name=x type=int length=4 init=100 gtltdata name=y type=int length=4 init=200 gt

ltstructgtltrecordformat name=polytestgt

lt-- Este formato contiene una cuenta de poliacutegonos junto con una matriz de poliacutegonos --gtltdata name=nbrPolygons type=int length=4 init=5 gtltdata name=polygon type=struct struct=polygon count=nbrPolygons gt

ltrecordformatgtltrfmlgt

IBM Toolbox para Java 319

Record Format Markup LanguageRFML (Record Format Markup Language) es una extensioacuten de XML para especificar formatos de registro

El componente RFML de IBM Toolbox para Java permite a las aplicaciones Java utilizar documentosRFML para especificar y manipular campos dentro de determinados tipos de registros

Los documentos RFML llamados archivos fuente RFML representan un subconjunto de los tipos dedatos de especificacioacuten de descripcioacuten de datos (DDS) de utilidad definidos para los archivos fiacutesicos yloacutegicos de IBM i Puede utilizar documentos RFML para gestionar la informacioacuten de los elementossiguientesv Registros de archivov Entradas de cola de datosv Espacios de usuariov Almacenamientos intermedios de datos arbitrarios

Nota para obtener maacutes informacioacuten sobre coacutemo se utiliza DDS para describir atributos de datosconsulte la referencia de DDS

RFML guarda un enorme parecido con Program Call Markup Language (PCML) otra extensioacuten de XMLsoportada por IBM Toolbox para Java RFML no es un subconjunto ni un superconjunto de PCML sinoun tipo de lenguaje similar que antildeade varios elementos y atributos nuevos y omite otros

PCML proporciona una alternativa orientada a XML al uso de las clases ProgramCall yProgramParameter Del mismo modo RFML ofrece una alternativa de faacutecil manejo y mantenimiento a lasclases Record RecordFormat y FieldDescriptionInformacioacuten relacionadaDDS (Especificaciones de descripcioacuten de datos)

Requisitos para utilizar RFMLEl componente RFML tiene los mismos requisitos de maacutequina virtual Java de la estacioacuten de trabajo que elresto de IBM Toolbox para Java

Ademaacutes para analizar RFML en tiempo de ejecucioacuten la CLASSPATH de la aplicacioacuten debe incluir unanalizador XML El analizador XML debe ampliar la clase orgapachexercesparsersSAXParser Paraobtener maacutes informacioacuten consulte ldquoAnalizador XML y procesador XSLTrdquo en la paacutegina 330

Nota RFML tiene los mismos requisitos de analizador que PCML Como sucede con PCML sipreserializa el archivo RFML no es necesario que incluya un analizador XML en la CLASSPATH de laaplicacioacuten para ejecutar la aplicacioacutenReferencia relacionadaldquoRequisitos de estacioacuten de trabajo para IBM Toolbox para Javardquo en la paacutegina 6Aseguacuterese de que la estacioacuten de trabajo cumple con los siguientes requisitos

Ejemplo coacutemo se utiliza RFML en comparacioacuten con el uso de las clases Recordde IBM Toolbox para JavaEste ejemplo muestra las diferencias entre el uso de RFML y el uso de las clases Record de IBM Toolboxpara Java

Al utilizar las clases Record tradicionales se intercalan las especificaciones de formato de datos con laloacutegica de empresa de la aplicacioacuten Antildeadir cambiar o suprimir un campo significa tener que editar yvolver a compilar el coacutedigo Java Sin embargo al utilizar RFML se aiacuteslan las especificaciones de formatode datos en los archivos fuente RFML que estaacuten completamente aparte de la loacutegica de empresaAcomodar un campo significa modificar el archivo RFML a menudo sin tener que cambiar ni volver acompilar la aplicacioacuten Java

320 IBM Toolbox para Java IBM Toolbox para Java

En el ejemplo se supone que la aplicacioacuten maneja registros de cliente que ha definido en un archivofuente RFML y que ha denominado qcustcdtrfml El archivo fuente representa los campos que componencada registro de cliente

El listado que figura a continuacioacuten muestra coacutemo una aplicacioacuten Java puede interpretar un registro decliente utilizando las clases Record RecordFormat y FieldDescription de IBM Toolbox para Java Almacenamiento intermedio que contiene la representacioacuten binaria de un registro de informacioacuten

byte[] bytes

Lea los datos del registro en el almacenamiento intermedio

Configure un objeto RecordFormat para representar un registro de clienteRecordFormat recFmt1 = new RecordFormat(cusrec)recFmt1addFieldDescription(new ZonedDecimalFieldDescription(new AS400ZonedDecimal(6 0) cusnum))recFmt1addFieldDescription(new CharacterFieldDescription(new AS400Text(8 37) lstnam))recFmt1addFieldDescription(new CharacterFieldDescription(new AS400Text(3 37) init))recFmt1addFieldDescription(new CharacterFieldDescription(new AS400Text(13 37) street))recFmt1addFieldDescription(new CharacterFieldDescription(new AS400Text(6 37) city))recFmt1addFieldDescription(new CharacterFieldDescription(new AS400Text(2 37) state))recFmt1addFieldDescription(new ZonedDecimalFieldDescription(new AS400ZonedDecimal(5 0) zipcod))recFmt1addFieldDescription(new ZonedDecimalFieldDescription(new AS400ZonedDecimal(4 0) cdtlmt))recFmt1addFieldDescription(new ZonedDecimalFieldDescription(new AS400ZonedDecimal(1 0) chgcod))recFmt1addFieldDescription(new ZonedDecimalFieldDescription(new AS400ZonedDecimal(6 2) baldue))recFmt1addFieldDescription(new ZonedDecimalFieldDescription(new AS400ZonedDecimal(6 2) cdtdue))

Lea el almacenamiento intermedio de bytes en el objeto RecordFormatDocumentRecord rec1 = new Record(recFmt1 bytes)

Obtenga los valores de los camposSystemoutprintln(cusnum + rec1getField(cusnum))Systemoutprintln(lstnam + rec1getField(lstnam))Systemoutprintln(init + rec1getField(init))Systemoutprintln(street + rec1getField(street))Systemoutprintln(city + rec1getField(city))Systemoutprintln(state + rec1getField(state))Systemoutprintln(zipcod + rec1getField(zipcod))Systemoutprintln(cdtlmt + rec1getField(cdtlmt))Systemoutprintln(chgcod + rec1getField(chgcod))Systemoutprintln(baldue + rec1getField(baldue))Systemoutprintln(cdtdue + rec1getField(cdtdue))

Por comparacioacuten aquiacute se muestra coacutemo se podriacutea interpretar el mismo registro utilizando RFML

El coacutedigo Java para interpretar el contenido del registro de datos de cliente utilizando RFML podriacutea tenerel siguiente aspecto

Almacenamiento intermedio que contiene la representacioacuten binaria de un registro de informacioacuten

byte[] bytes

Lea los datos del registro en el almacenamiento intermedio

Analice el archivo RFML en un objeto RecordFormatDocument El archivo fuente RFML se llama qcustcdtrfmlRecordFormatDocument rfml1 = new RecordFormatDocument(qcustcdt)

Lea el almacenamiento intermedio de bytes en el objeto RecordFormatDocumentrfml1setValues(cusrec bytes)

Obtenga los valores de los campos

IBM Toolbox para Java 321

Systemoutprintln(cusnum + rfml1getValue(cusreccusnum))Systemoutprintln(lstnam + rfml1getValue(cusreclstnam))Systemoutprintln(init + rfml1getValue(cusrecinit))Systemoutprintln(street + rfml1getValue(cusrecstreet))Systemoutprintln(city + rfml1getValue(cusreccity))Systemoutprintln(state + rfml1getValue(cusrecstate))Systemoutprintln(zipcod + rfml1getValue(cusreczipcod))Systemoutprintln(cdtlmt + rfml1getValue(cusreccdtlmt))Systemoutprintln(chgcod + rfml1getValue(cusrecchgcod))Systemoutprintln(baldue + rfml1getValue(cusrecbaldue))Systemoutprintln(cdtdue + rfml1getValue(cusreccdtdue))

Clase RecordFormatDocumentLa clase RecordFormatDocument permite a los programas Java efectuar la conversioacuten entrerepresentaciones de datos RFML y objetos Record y RecordFormat para su uso con otros componentes deIBM Toolbox para Java

Clase RecordFormatDocument

La clase RecordFormatDocument representa un archivo fuente RFML y proporciona meacutetodos quepermiten al programa Java llevar a cabo las acciones siguientesv Componer archivos fuente RFML a partir de objetos Record objetos RecordFormat y matrices de bytesv Generar objetos Record objetos RecordFormat y matrices de bytes que representan la informacioacuten que

contiene el objeto RecordFormatDocumentv Obtener y establecer los valores de distintos objetos y tipos de datosv Generar XML (RFML) que representa los datos que contiene el objeto RecordFormatDocumentv Serializar el archivo fuente RFML que representa el objeto RecordFormatDocument

Para obtener maacutes informacioacuten sobre los meacutetodos disponibles consulte el resumen de meacutetodos de Javadocde la clase RecordFormatDocument

Utilizacioacuten de la clase RecordFormatDocument con otras clases de IBM Toolbox para Java

Utilice la clase RecordFormatDocument con las siguientes clases de IBM Toolbox para Javav Las clases orientadas a registros que incluyen las clases de archivo de acceso a nivel de registro

(AS400File SequentialFile y KeyedFile) que leen manipulan y escriben objetos Record Esta categoriacuteatambieacuten incluye la clase LineDataRecordWriter

v Las clases orientadas a bytes que incluyen determinadas clases DataQueue UserSpace e IFSFile queleen y escriben una matriz de bytes de datos cada vez

No utilice la clase RecordFormatDocument con las siguientes clases de IBM Toolbox para Java que leen yescriben datos en formatos que RecordFormatDocument no manejav Las clases DataArea ya que los meacutetodos de lectura y escritura solo manejan los tipos de datos String

boolean y BigDecimalv IFSTextFileInputStream e IFSTextFileOutputStream ya que estos meacutetodos de lectura y escritura solo

manejan el tipo de datos Stringv Las clases JDBC ya que RFML se centra uacutenicamente en los datos descritos por la especificacioacuten de

descripcioacuten de datos (DDS) de IBM iInformacioacuten relacionadaJavadoc RecordFormatDocument

322 IBM Toolbox para Java IBM Toolbox para Java

Documentos RFML y sintaxis RFMLLos documentos RFML denominados archivos fuente RFML contienen coacutedigos que definen laespecificacioacuten de un formato de datos determinado

Como RFML se basa en PCML la sintaxis resulta conocida a los usuarios de PCML Como RFML es unaextensioacuten de XML los archivos fuente RFML son faacuteciles de leer y sencillos de crear Por ejemplo puedecrear un archivo fuente RFML mediante un simple editor de texto Ademaacutes los archivos fuente RFMLpresentan la estructura de los datos de un modo que resulta maacutes sencilla de entender que en un lenguajede programacioacuten como Java

El ejemplo de RFML Coacutemo se utiliza RFML en comparacioacuten con el uso de las clases Record de IBMToolbox para Java contiene un archivo fuente RFML de muestra

DTD RFML

La definicioacuten de tipo de documento (DTD) RFML define la sintaxis y los elementos RFML vaacutelidos Paraasegurarse de que un analizador XML pueda validar el archivo fuente RFML en el momento de laejecucioacuten declare la DTD RFML en el archivo fuenteltDOCTYPE rfml SYSTEM rfmldtdgt

La DTD RFML reside en el archivo jt400jar (comibmas400datarfmldtd)

Sintaxis de RFML

La DTD RFML define coacutedigos cada uno de ellos con sus propios coacutedigos de atributos Utilice los coacutedigosRFML para declarar y definir los elementos en los archivos RFML

En el ejemplo siguiente la sintaxis de RFML describe un formato de registro y una estructuraltrfmlgt

ltrecordformatgtltdatagt ltdatagt

ltrecordformatgt

ltstructgtltdatagt ltdatagt

ltstructgt

ltrfmlgt

Definicioacuten de tipo de documento RFML (DTD)

Esta es la DTD RFML Observe que la versioacuten es 40 La DTD RFML reside en el archivo jt400jar(comibmas400datarfmldtd)lt--Definicioacuten de tipo de documento RFML (Record Format Markup Language)

RFML es un lenguaje XML El uso habitual esltxml version=10gtltDOCTYPE rfml SYSTEM rfmldtdgtltrfml version=40gtltrfmlgt

(C) Copyright IBM Corporation 20012002Reservados todos los derechos Material con licencia propiedad de IBMDerechos restringidos de los usuarios del Gobierno de Estados UnidosEl uso la duplicacioacuten o la divulgacioacuten estaacuten restringidospor el GSA ADP Schedule Contract con IBM Corp

IBM Toolbox para Java 323

--gt

lt-- Entidades de conveniencia --gtltENTITY string CDATAgt lt-- una serie de longitud 0 o superior --gtltENTITY nonNegativeInteger CDATAgt lt-- un entero no negativo --gtltENTITY binary2 CDATAgt lt-- un entero del rango 0-65535 --gtltENTITY boolean (true|false)gtltENTITY datatype (char | int | packed | zoned | float | byte | struct)gtltENTITY biditype (ST4 | ST5 | ST6 | ST7 | ST8 | ST9 | ST10 | ST11 | DEFAULT)gt

lt-- El elemento raiacutez del documento --gtltELEMENT rfml (struct | recordformat)+gtltATTLIST rfml

version string FIXED 40ccsid binary2 IMPLIED

gtlt-- Nota el ccsid es el valor predeterminado que se utilizaraacute para --gt

lt-- los elementos ltdata type=chargt incluidos que no especifiquen un ccsid --gt

lt-- Nota RFML no soporta declaraciones struct anidadas --gtlt-- Todos los elementos struct son hijos directos del nodo raiacutez --gtltELEMENT struct (data)+gtltATTLIST struct

name ID REQUIREDgt

lt-- ltELEMENT recordformat (data | struct)gt --gtltELEMENT recordformat (data)gtltATTLIST recordformat

name ID REQUIREDdescription string IMPLIED

gtlt-- Nota en el servidor el campo text description de Record solo puede tener 50 bytes --gt

ltELEMENT data EMPTYgtltATTLIST data

name string REQUIRED

count nonNegativeInteger IMPLIED

type datatype REQUIREDlength nonNegativeInteger IMPLIEDprecision nonNegativeInteger IMPLIEDccsid binary2 IMPLIEDinit CDATA IMPLIEDstruct IDREF IMPLIED

bidistringtype biditype IMPLIEDgtlt-- Nota el atributo rsquonamersquo debe ser exclusivo dentro de un recordformat determinado --gtlt-- Nota en el servidor los nombres del campo Record solo pueden tener 10 bytes de longitud --gtlt-- Nota el atributo rsquolengthrsquo es obligatorio excepto si se especifica type=struct --gtlt-- Nota si type=struct el atributo rsquostructrsquo es obligatorio --gtlt-- Nota los atributos rsquoccsidrsquo y rsquobidistringtypersquo solo son vaacutelidos si se especifica type=char --gtlt-- Nota el atributo rsquoprecisionrsquo solo es vaacutelido para los tipos int packed y zoned --gt

lt-- Entidades de caracteres predefinidas estaacutendar --gtltENTITY quot amp34gt lt-- comillas --gtltENTITY amp amp3838gt lt-- signo de unioacuten --gtltENTITY apos amp39gt lt-- apoacutestrofo --gtltENTITY lt amp3860gt lt-- menor que --gtltENTITY gt amp62gt lt-- mayor que --gtltENTITY nbsp amp160gt lt-- espacio de no separacioacuten --gt

324 IBM Toolbox para Java IBM Toolbox para Java

ltENTITY shy amp173gt lt-- guioacuten virtual (guioacuten discrecional) --gtltENTITY mdash amp38x2014gtltENTITY ldquo amp38x201CgtltENTITY rdquo amp38x201Dgt

Coacutedigo RFML data

El coacutedigo RFML data define un campo dentro de un formato de registro o una estructura

A continuacioacuten se listan los atributos del coacutedigo data Los atributos delimitados por corchetes [] sonopcionales Si especifica un atributo opcional no incluya los corchetes en el fuente A continuacioacuten sefacilita una lista con algunos valores de atributos delimitados por llaves y las opciones posiblesseparadas por barras verticales | Cuando especifique uno de estos atributos no incluya las llaves en elfuente y especifique uacutenicamente una de las opciones que se muestranltdata type= char | int | packed | zoned | float | byte | struct ]

[ bidistringtype= ST4 | ST5 | ST6 | ST7 | ST8 | ST9 | ST10 | ST11 | DEFAULT ][ ccsid= nuacutemero | nombre-datos ][ count= nuacutemero | nombre-datos ][ init=serie ][ length= nuacutemero | nombre-datos ][ name=nombre ][ precision=nuacutemero ][ struct=nombre-estructura ]gt

ltdatagt

En la siguiente tabla figuran los atributos del coacutedigo data Cada entrada contiene el nombre de atributolos valores vaacutelidos posibles y una descripcioacuten del atributo

IBM Toolbox para Java 325

Atributo Valor Descripcioacuten

type= char Un valor de tipo caraacutecter Unvalor de datos de tipo char sedevuelve como javalangStringPara obtener maacutes informacioacutenconsulte los valores char para lalongitud

int Un valor entero Un valor dedatos int se devuelve comojavalangLong Para obtener maacutesinformacioacuten consulte los valoresint para la longitud y la precisioacuten

packed Un valor decimalempaquetado Un valor de datospacked se devuelve comojavamathBigDecimal Para obtenermaacutes informacioacuten consulte losvalores packed para la longitud y laprecisioacuten

zoned Un valor decimal con zonaUn valor de datos zoned sedevuelve comojavamathBigDecimal Para obtenermaacutes informacioacuten consulte losvalores zoned para la longitud y laprecisioacuten

float Un valor de coma flotante Elatributo length especifica elnuacutemero de bytes 4 u 8 Un enterode 4 bytes se devuelve comojavalangFloat Un entero de 8bytes se devuelve comojavalangDouble Para obtener maacutesinformacioacuten consulte los valoresfloat para la longitud

byte Un valor de tipo byte No seefectuacutea ninguna conversioacuten de losdatos Un valor de datos byte sedevuelve como una matriz devalores byte (byte[]) Para obtenermaacutes informacioacuten consulte losvalores byte para la longitud

struct El nombre del elementoltstructgt Un valor struct permitedefinir una estructura una vez yvolver a utilizarla varias vecesdentro del mismo documento Siutiliza type=struct es como sila estructura especificadaapareciera en ese lugar deldocumento Un valor struct nopermite un valor de longitud y notiene ninguacuten valor para laprecisioacuten

Indica el tipo de datos que se utiliza(caraacutecter entero empaquetado con zonacoma flotante o estructura)

Los valores de los atributos de longitud yprecisioacuten variacutean seguacuten los diferentes tiposde datos Para obtener maacutes informacioacutenconsulte los valores de longitud yprecisioacuten

326 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

bidistringtype= DEFAULT donde DEFAULT es eltipo de serie predeterminada paradatos no bidireccionales (LTR)

ST4 donde ST4 es el tipo de serie4

ST5 donde ST5 es el tipo de serie5

ST6 donde ST6 es el tipo de serie6gt

ST7 donde ST7 es el tipo de serie7

ST8 donde ST8 es el tipo de serie8

ST9 donde ST9 es el tipo de serie9

ST10 donde ST10 es el tipo deserie 10

ST11 donde ST11 es tipo de serie11

Especifica el tipo de serie bidireccionalpara los elementos ltdatagt que tengantype=char Si se omite este atributo eltipo de serie para este elemento vienedeterminado por el CCSID (especificadoexpliacutecitamente o el CCSID predeterminadodel entorno de host)

Los tipos de serie estaacuten definidos en elJavadoc correspondiente a la claseBidiStringType

ccsid= nuacutemero donde nuacutemero define unCCSID fijo que no cambia nunca

nombre-datos donde nombre-datosdefine el nombre que contendraacuteen tiempo de ejecucioacuten el CCSIDde los datos de tipo caraacutecter Elnombre-datos especificado puedeser un nombre totalmentecalificado o un nombre relativo alelemento actual En los dos casosel nombre debe hacer referencia aun elemento ltdatagt que se hayadefinido con la especificacioacutentype=int Si desea maacutesinformacioacuten sobre coacutemo seresuelven los nombres relativosconsulte el apartado Resolucioacuten denombres relativos

Especifica el CCSID (ID de juego decaracteres codificados) de los datos de tipocaraacutecter para el elemento ltdatagt Elatributo ccsid solo se puede especificarpara los elementos ltdatagt que tengantype=char

Si se omite este atributo se presupone quelos datos de tipo caraacutecter de este elementotienen el CCSID predeterminado delentorno de host

IBM Toolbox para Java 327

Atributo Valor Descripcioacuten

count= nuacutemero donde nuacutemero define unnuacutemero fijo de elementos de unamatriz dimensionada

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documentoRFML que contendraacute en tiempode ejecucioacuten el nuacutemero deelementos de la matriz Elnombre-datos especificado puedeser un nombre totalmentecalificado o un nombre relativo alelemento actual En los dos casosel nombre debe hacer referencia aun elemento ltdatagt que se hayadefinido con la especificacioacutentype=int Si desea maacutesinformacioacuten sobre coacutemo seresuelven los nombres relativosconsulte el apartado Resolucioacuten denombres relativos

Especifica que el elemento es una matriz eidentifica el nuacutemero de entradas de lamatriz

Si se omite el atributo count el elementono estaacute definido como matriz aunquepuede encontrarse dentro de otro elementoque esteacute definido como matriz

init= serie Especifica un valor inicial para el elementoltdatagt

El valor inicial especificado se utiliza parainicializar los valores escalares Si elelemento estaacute definido como matriz o seencuentra dentro de una estructuradefinida como matriz el valor inicialespecificado se utiliza como valor inicialpara todas las entradas de la matriz

length= nuacutemero donde nuacutemero define unalongitud fija

nombre-datos donde nombre-datosdefine el nombre de un elementoltdatagt dentro del documentoRFML que contendraacute en tiempode ejecucioacuten la longitudUacutenicamente puede especificarseun nombre-datos para los elementosltdatagt que tengan type=char otype=byte El nombre-datosespecificado puede ser un nombretotalmente calificado o un nombrerelativo al elemento actual En losdos casos el nombre debe hacerreferencia a un elemento ltdatagtque se haya definido con laespecificacioacuten type=int Si deseamaacutes informacioacuten sobre coacutemo seresuelven los nombres relativosconsulte el apartado Resolucioacuten denombres relativos

Especifica la longitud del elemento dedatos El uso de este atributo variacutea enfuncioacuten del tipo de datos Para obtener maacutesinformacioacuten consulte los valores delongitud y precisioacuten

name= nombre Especifica el nombre del elemento ltdatagt

328 IBM Toolbox para Java IBM Toolbox para Java

Atributo Valor Descripcioacuten

precision= nuacutemero Especifica el nuacutemero de bytes de precisioacutenpara algunos tipos de datos numeacutericosPara obtener maacutes informacioacuten consulte losvalores de longitud y precisioacuten

struct= nombre Especifica el nombre de un elementoltstructgt para el elemento ltdatagt Unatributo struct solo se puede especificarpara los elementos ltdatagt que tengantype=struct

Informacioacuten relacionadaJavadoc BidiStringType

Coacutedigo RFML rfml

El coacutedigo rfml empieza y termina el archivo fuente RFML que describe el formato de datos

A continuacioacuten se listan los atributos del coacutedigo rfml Los atributos delimitados por corchetes [] sonopcionales Si especifica un atributo opcional no incluya los corchetes en el fuenteltrfml version=serie-versioacuten

[ ccsid=nuacutemero ]gtltrfmlgt

En la siguiente tabla figuran los atributos del coacutedigo rfml Cada entrada contiene el nombre de atributolos valores vaacutelidos posibles y una descripcioacuten del atributo

Atributo Valor Descripcioacuten

version= serie-versioacuten Una versioacuten fija de laDTD RFML Para la versioacuten V5R340 es el uacutenico valor vaacutelido

Especifica la versioacuten de la DTDRFML que puede emplear paraverificar el valor correcto

ccsid= nuacutemero Un CCSID (ID de juego decaracteres codificados) fijo einvariable

Especifica el CCSID de host que esvaacutelido para todas los elementosltdata type=chargt incluidos que noespecifiquen ninguacuten CCSID Paraobtener maacutes informacioacuten consulte elcoacutedigo ltdatagt RFML Si omite esteatributo se utilizaraacute el CCSIDpredeterminado del entorno del host

Coacutedigo RFML recordformat

El coacutedigo RFML recordformat define un formato de registro que contiene elementos de datos oreferencias a elementos de estructura

A continuacioacuten se listan los atributos del coacutedigo recordformat Los atributos delimitados por corchetes []son opcionales Si especifica un atributo opcional no incluya los corchetes en el fuenteltrecordformat name=nombre

[ description=descripcioacuten ]gtltrecordformatgt

En la siguiente tabla figuran los atributos del coacutedigo recordformat Cada entrada contiene el nombre deatributo los valores vaacutelidos posibles y una descripcioacuten del atributo

IBM Toolbox para Java 329

Atributo Valor Descripcioacuten

name= nombre Especifica el nombre del formato de registro

description= descripcioacuten Especifica la descripcioacuten del formato de registro

Coacutedigo RFML struct

El coacutedigo RFML struct define una estructura con nombre que puede reutilizar en el archivo fuente RFMLLa estructura contiene un coacutedigo de datos para cada uno de los campos de la estructura

A continuacioacuten se listan los atributos del coacutedigo struct Los atributos delimitados por corchetes [] sonopcionales Si especifica un atributo opcional no incluya los corchetes en el fuenteltstruct name=nombregtltstructgt

En la siguiente tabla figuran los atributos del coacutedigo struct Cada entrada contiene el nombre de atributolos valores vaacutelidos posibles y una descripcioacuten del atributo

Atributo Valor Descripcioacuten

name= nombre Especifica el nombre del elemento ltstructgt

Analizador XML y procesador XSLTAlgunos paquetes o funciones de IBM Toolbox para Java requieren que en tiempo de ejecucioacuten haya unanalizador XML (Extensible Markup Language) o un procesador XSLT (Extensible Stylesheet LanguageTransformations) en la variable de entorno CLASSPATH

Consulte la informacioacuten siguiente para determinar queacute analizador y procesador desea utilizar

Si desea informacioacuten sobre los paquetes y las funciones de IBM Toolbox para Java que precisan unanalizador XML o procesador XSLT vea la paacutegina siguiente

ldquoArchivos JARrdquo en la paacutegina 8

Analizador XML

Si el paquete o la funcioacuten requiere un analizador XML deberaacute incluir un analizador XML en laCLASSPATH en tiempo de ejecucioacuten El analizador XML debe cumplir los requisitos siguientesv Debe ser compatible con JAXPv Debe ampliar la clase orgapachexercesparsersSAXParserv Debe dar soporte a la plena validacioacuten de esquemas

Nota el analizador solo tiene que dar soporte a la plena validacioacuten de esquemas si se va a utilizarXPCML Si solo se utiliza PCML no es necesaria la plena validacioacuten de esquemas

Java 2 Software Developer Kit (J2SDK) versioacuten 14 incluye un analizador XML adecuado Si utiliza unaversioacuten anterior de J2SDK emplee cualquiera de los meacutetodos siguientes para acceder a un analizadorXML apropiadov Utilice x4j400jar (una versioacuten de IBM del analizador XML Xerces de Apache)

v Baje el analizador XML Xerces del sitio Web de Apachev Utilice cualquier analizador XML compatible del directorio QIBMProdDataOS400xmllib del sistema

330 IBM Toolbox para Java IBM Toolbox para Java

Nota planteacuteese la conveniencia de emplear las uacuteltimas versiones de los analizadores que se encuentranen QIBMProdDataOS400xmllib Por ejemplo xmlapis11jar y xerces411jar son analizadores de plenavalidacioacuten

Puede utilizar estos analizadores en el servidor o copiarlos en una estacioacuten de trabajo

Nota cualquier analizador XML que cumpla los requisitos para ejecutar XPCML podraacute ejecutar PCML yRFML Tenga en cuenta que XPCML no admite la serializacioacuten

Procesador XSLT

Si el paquete o la funcioacuten requiere un procesador XSLT deberaacute incluir un procesador XSLT en laCLASSPATH en tiempo de ejecucioacuten El procesador XSLT debe cumplir los requisitos siguientesv Debe ser compatible con JAXPv Debe contener la clase javaxxmltransformTransformer

Java 2 Software Developer Kit (J2SDK) versioacuten 14 incluye un procesador XSLT adecuado Si utiliza unaversioacuten anterior de J2SDK emplee cualquiera de los meacutetodos siguientes para acceder a un procesadorXSLT apropiadov Utilice xslparserjar (una versioacuten de IBM del procesador XSLT Xalan de Apache)

v Baje el procesador XSLT Xalan del sitio Web de Apachev Utilice cualquier procesador XSLT compatible del directorio QIBMProdDataOS400xmllib del sistema

Puede utilizar estos procesadores en el sistema o copiarlos en una estacioacuten de trabajo

XPCML (Extensible Program Call Markup Language)XPCML (Extensible Program Call Markup Language) mejora las funciones y la capacidad de utilizacioacutende PCML (Program Call Markup Language) al ofrecer soporte para los esquemas XML XPCML noadmite la serializacioacuten por lo que a diferencia de lo que sucede con PCML no podraacute serializar undocumento XPCML

Sin embargo XPCML ofrece valiosas mejoras en comparacioacuten con PCMLv Especificar y pasar valores de paraacutemetros de programasv Recuperar los resultados de una llamada de programa al servidor en XPCMLv Transformar un documento PCML existente en el documento XPCML equivalentev Ampliar y personalizar el esquema XPCML para definir nuevos elementos y atributos simples y

complejos

Encontraraacute maacutes informacioacuten sobre XPCML en estas paacuteginasReferencia relacionadaldquoComponentes XML (Extensible Markup Language)rdquo en la paacutegina 293IBM Toolbox para Java consta de diversos componentes XML (Extensible Markup Language) entre ellosun analizador XMLInformacioacuten relacionadaXML Toolkit

Dominio de arquitectura W3C esquema XML

Ventajas de XPCML respecto de PCMLXPCML (Extensible Program Call Markup Language) ofrece valiosas mejoras sobre PCMLv Especificar y pasar valores de paraacutemetros de programasv Recuperar los resultados de una llamada de programa al servidor IBM i en XPCML

IBM Toolbox para Java 331

v Transformar un documento PCML existente en el documento XPCML equivalentev Ampliar y personalizar el esquema XPCML para definir nuevos elementos y atributos simples y

complejos

Especificar y pasar valores de paraacutemetros de programas

XPCML utiliza un esquema XML para definir tipos de paraacutemetros de programas PCML utiliza unadefinicioacuten de tipos de datos (DTD) En el momento de realizar el anaacutelisis el analizador XML valida losvalores de datos especificados como paraacutemetros cotejaacutendolos con los paraacutemetros adecuados seguacuten sudefinicioacuten en el esquema Existen tipos de datos para paraacutemetros de muchos tipos series enteros largosetc La posibilidad de especificar y pasar valores de paraacutemetros de programas es una notable mejorarespecto de PCML En PCML solo se pueden verificar los valores de los paraacutemetros tras analizar eldocumento PCML Asimismo la verificacioacuten de los valores de paraacutemetros en PCML a menudo requierecodificar la aplicacioacuten para efectuar la validacioacuten

Recuperar los resultados de una llamada a programa en XPCML

XPCML tambieacuten ofrece la posibilidad de recuperar los resultados de una llamada a programa en formatoXPCML En PCML los resultados de una llamada a programa se obtienen llamando a uno de losmeacutetodos getValue de la clase ProgramCallDocument despueacutes de efectuar la llamada al programa EnXPCML se pueden emplear los meacutetodos getValue pero tambieacuten se puede hacer que XPCML llame a unmeacutetodo generateXPCML que devuelve los resultados de una llamada a programa en formato XPCML

Transformar documentos PCML existentes en XPCML

Un nuevo meacutetodo de la clase ProgramCallDocument transformPCMLToXPCML permite transformar losdocumentos PCML existentes en documentos XPCML equivalentes Asiacute se puede aprovechar la nuevafuncioacuten de XPCML sin escribir fuente XPCML para los documentos de llamada de programa de IBM iexistentes

Ampliar y personalizar el esquema XPCML

XPCML es ampliable lo que significa que se pueden definir nuevos tipos de paraacutemetros que ampliacuteen losespecificados por el esquema XPCML Al condensar XPCML se ampliacutea el esquema XPCML para crearnuevas definiciones de tipos de datos que simplifican y mejoran las posibilidades de lectura y uso de losdocumentos XPCML

Requisitos de uso de XPCMLXPCML (Extensible Program Call Markup Language) tiene los mismos requisitos de maacutequina virtual Javade la estacioacuten de trabajo que el resto de IBM Toolbox para Java

Encontraraacute maacutes informacioacuten en esta paacutegina

ldquoRequisitos de estacioacuten de trabajo para ejecutar aplicaciones de IBM Toolbox para Javardquo en la paacutegina6

Ademaacutes el uso de XPCML trae aparejados requisitos de archivo de esquema XML analizador XML yprocesador XSLT (Extensible Stylesheet Language Transformation)

Archivo de esquema XML

Los documentos XPCML deben conocer la ubicacioacuten del archivo que contiene el esquema El esquemapredeterminado de IBM Toolbox para Java es xpcmlxsd que se encuentra dentro del archivo jt400jar

332 IBM Toolbox para Java IBM Toolbox para Java

Para emplear el esquema predeterminado extraiga xpcmlxsd de jt400jar y coloque el archivo en unaubicacioacuten adecuada El procedimiento siguiente muestra un modo de extraer el archivo xsd en unaestacioacuten de trabajo

Extraer el archivo de esquema xpcmlxsd

v Inicie una sesioacuten de liacutenea de mandatos en el directorio que contiene jt400jarv Utilice el mandato siguiente para extraer el archivo xsd

jar xvf jt400jar comibmas400dataxpcmlxsd

Nota si no ejecuta el mandato anterior desde el directorio que contiene jt400jar puede especificar unaviacutea de acceso totalmente calificada para jt400jar

Puede colocar el archivo de esquema predeterminado (o cualquier archivo de esquema) en el directorioque desee El uacutenico requisito es que especifique la ubicacioacuten del archivo de esquema mediante el atributoxsinoNamespaceSchemaLocation en el coacutedigo ltxpcmlgt

Puede especificar la ubicacioacuten del esquema como una viacutea de acceso de archivo o como un URL

Nota aunque en los ejemplos siguientes se utiliza xpcmlxsd como el archivo de esquema puedeespecificar cualquier esquema que ampliacutee xpcmlxsdv Para especificar el mismo directorio que el del archivo XPCML utilice

xsinoNamespaceSchemaLocation=xpcmlxsdv Para especificar una viacutea de acceso totalmente calificada xsinoNamespaceSchemaLocation=cmyDir

xpcmlxsdv Para especificar un URL xsinoNamespaceSchemaLocation=httpmyServerxpcmlxsd

Para ver una versioacuten HTML del archivo xpcmlxsd consulte la paacutegina siguiente

ldquoArchivo xpcmlxsd de esquemardquo en la paacutegina 335

Analizador XML y procesador XSLT

En tiempo de ejecucioacuten debe incluir un analizador XML y un procesador XSLT en la variable de entornoCLASSPATH Encontraraacute maacutes informacioacuten en esta paacutegina

ldquoAnalizador XML y procesador XSLTrdquo en la paacutegina 330

Esquema y sintaxis XPCMLLos documentos XPCML denominados archivos fuente XPCML contienen coacutedigos y datos que describenpor completo las llamadas a programas del sistema

Como XPCML utiliza esquemas XML en lugar de una definicioacuten de tipo de documento (DTD) haymodos de emplear XPCML que no son posibles con PCMLv Pasar valores de paraacutemetros de entrada al programa como elementos XMLv Recibir valores de paraacutemetros de salida del programa como elementos XMLv Hacer que el analizador XML valide automaacuteticamente los valores pasados al programav Ampliar el esquema para definir nuevos elementos simples y complejos

Encontraraacute maacutes informacioacuten sobre el esquema XPCML y la sintaxis de este lenguaje en estas paacuteginas

Comparacioacuten del fuente XPCML con el fuente PCML

XPCML difiere de PCML en diversos aspectos pero una de las principales diferencias es que XPCMLpermite especificar los valores de los paraacutemetros de entrada dentro del archivo fuente XPCML

IBM Toolbox para Java 333

PCML permite utilizar el atributo init del coacutedigo ltdatagt para especificar el valor inicial de un elementode datos en el fuente PCML Sin embargo el uso de PCML para especificar valores estaacute sujeto a lasrestricciones siguientesv No se puede emplear el atributo init para establecer valores de matricesv La validacioacuten del valor de init solo se efectuacutea tras analizar el documento PCML

Para especificar valores de matrices en PCML primero es preciso leer y analizar el documento PCML y acontinuacioacuten efectuar una serie de llamadas a ProgramCallDocumentsetValue()

El uso de XPCML facilita la especificacioacuten de valores de elementos uacutenicos y matricesv Especificacioacuten de valores de elementos escalares y de matrices en el archivo fuente XPCMLv Validacioacuten de los valores de matrices especificados durante el anaacutelisis

Las sencillas comparaciones que figuran a continuacioacuten permiten observar varias diferencias entreXPCML y PCML Cada ejemplo define una llamada a programa para un programa de IBM i

Ejemplo llamar a un programa de IBM i

En los ejemplos siguientes se llama a un programa de IBM i denominado prog1

Coacutedigo fuente XPCMLltxml version=10 encoding=UTF-8gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=rsquoxpcmlxsdrsquo version=40gtltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgt

ltparameterListgtltstringParm name=parm1 passDirection=in length=10gtParm1ltstringParmgtltintParm name=parm2 passDirection=ingt5ltintParmgtltshortParm name=parm3 passDirection=ingt3ltshortParmgt

ltparameterListgtltprogramgt

ltxpcmlgt

Coacutedigo fuente PCMLltpcml version=40gt

ltprogram name=prog1 path=QSYSLIBMYLIBLIBPROG1PGMgtltdata name=parm1 type=char usage=input length=10 init=Parm1gtltdata name=parm2 type=int usage=input length=4 init=5gtltdata name=parm3 type=int usage=input length=2 precision=16 init=3gt

ltprogramgtltpcmlgt

Ejemplo llamar a un programa de IBM i utilizando una matriz de paraacutemetros de tipo serie

En los ejemplos siguientes se llama a un programa del IBM i denominado prog2 y se define parm1 comouna matriz de paraacutemetros de tipo serie Observe las caracteriacutesticas de XPCMLv Inicializa el valor de cada uno de los elementos de la matrizv Especifica los valores de entrada como contenido de elementos que un analizador XML de plena

validacioacuten puede verificar

Puede aprovechar estas funciones de XPCML sin tener que escribir ninguacuten coacutedigo Java

PCML no puede igualar las posibilidades que ofrece XPCML PCML no puede inicializar el valor de cadauno de los elementos de la matriz PCML no puede validar los valores iniciales durante el anaacutelisis Paraobtener las funciones de XPCML tendriacutea que leer y analizar el documento PCML y despueacutes codificar laaplicacioacuten Java para establecer el valor de cada uno de los elementos de la matriz Asimismo tendriacutea queescribir coacutedigo para validar los paraacutemetros

334 IBM Toolbox para Java IBM Toolbox para Java

Coacutedigo fuente XPCMLltxml version=10 encoding=UTF-8gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=xpcmlxsd version=40gt

ltprogram name=prog2 path=QSYSLIBW95LIBLIBPROG2PGMgtltparameterListgt

ltarrayOfStringParm name=parm1 passDirection=inlength=10 count=3gtltigtParm1-First valueltigtltigtParm1-Second valueltigtltigtParm1-Third valueltigt

ltarrayOfStringParmgtltlongParm name=parm2 passDirection=ingt5ltlongParmgtltzonedDecimalParm name=parm3 passDirection=in

totalDigits=5 fractionDigits=2gt3256ltzonedDecimalParmgtltparameterListgt

ltprogramgtltxpcmlgt

Coacutedigo fuente PCMLltpcml version=40gt

ltprogram name=prog2 path=QSYSLIBMYLIBLIBPROG2PGMgtltdata name=parm1 type=char usage=input length=20 count=3gtltdata name=parm2 type=int usage=input length=8 init=5gtltdata name=parm3 type=zoned usage=input length=5 precision=2 init=3256gt

ltprogramgtltpcmlgt

Archivo xpcmlxsd de esquema

Para facilitar la visualizacioacuten e impresioacuten algunas liacuteneas de esta versioacuten HTML de xpcmlxsd seacomodan en una segunda liacutenea Las mismas liacuteneas del archivo xsd fuente aparecen en una sola liacutenea

Para obtener maacutes informacioacuten acerca de coacutemo se utiliza el archivo xpcmlxsd consulte Requisitos de usode XPCML

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteltxml version=10 encoding=UTF-8gt

lt-- JTOpen (IBM Toolbox para Java - versioacuten de OSS) Nombre de archivo xpcmlxsd El coacutedigo fuente que aquiacute se proporciona estaacute sujeto a la Licencia puacuteblica de IBM Versioacuten 10 aprobada por Open Source Initiative Copyright (C) 1997-2008 International Business Machines Corporation y otros Reservados todos los derechos--gt

ltxsschema xmlnsxs=rsquohttpwwww3org2001XMLSchemarsquogt

ltxsannotationgtltxsdocumentationgtEsquema XPCML (Extended Program Call Markup Language)ltxsdocumentationgtltxsannotationgt

ltxselement name=xpcmlgt

IBM Toolbox para Java 335

ltxscomplexTypegtltxssequencegt

ltxselement ref=structOrProgram minOccurs=1 maxOccurs=unbounded gtltxssequencegtltxsattribute name=version use=requiredgtltxssimpleTypegt

ltxsrestriction base=xsstringgtltxsenumeration value=40gt

ltxsrestrictiongtltxssimpleTypegt

ltxsattributegtltxscomplexTypegt

lt-- Defina el enlace keykeyref entre el nombre de una estructura --gtlt-- y el atributo de estructura de un campo de paraacutemetro --gtltxskey name=StructKeygt

ltxsselector xpath=structgtltxsfield xpath=namegt

ltxskeygtltxskeyref name=spRef refer=StructKeygt

ltxsselector xpath=structParm gtltxsfield xpath=struct gt

ltxskeyrefgtltxselementgt

lt-- Coacutedigo program y atributos --gtltxselement name=program substitutionGroup=structOrProgramgt

ltxscomplexTypegtltxssequencegt

ltxselement ref=parameterList minOccurs=1 maxOccurs=1gtlt-- Se utiliza como un coacutedigo de envoltura de la lista de paraacutemetros del programa --gt

ltxssequencegtlt-- Nombre del programa al que se llamaraacute --gtltxsattribute name=name type=string50 use=required gtlt-- Viacutea de acceso del objeto programa De forma predeterminada se da por supuesta la biblioteca QSYS --gtltxsattribute name=path type=xsstringgtlt-- Especifica el orden en que deben analizarse los paraacutemetros --gtlt-- El valor es una lista de nombres de paraacutemetros separados por espacios --gtltxsattribute name=parseOrder type=xsstringgtlt-- El nombre del punto de entrada dentro de un programa de servicio --gtltxsattribute name=entryPoint type=xsstringgtlt-- El tipo de valor devuelto (si existe) de una llamada a programa de servicio --gtltxsattribute name=returnValue type=returnValueTypegtlt-- Al llamar a un programa Java si el programa System i --gtlt-- estaacute en el mismo servidor --gtlt-- y es seguro en ejecucioacuten multihebra establezca true para llamar allt-- programa System i en el mismo trabajo --gtlt-- y la misma hebra que el programa Java --gtltxsattribute name=threadSafe type=xsboolean gtlt-- El CCSID del nombre del punto de entrada dentro de un programa de servicio --gtltxsattribute name=epccsid type=ccsidTypegt

ltxscomplexTypegtltxselementgt

lt-- Una lista de paraacutemetros consta de uno o varios paraacutemetros --gtltxselement name=parameterListgt

ltxscomplexTypegtltxsgroup ref=programParameter minOccurs=1 maxOccurs=unboundedgt

ltxscomplexTypegtltxselementgt

lt-- Todos los tipos de paraacutemetros de programas que entendemos --gtltxsgroup name=programParametergt

ltxschoicegtltxselement ref=stringParmGroupgtltxselement ref=stringParmArrayGroupgtltxselement ref=intParmGroupgt

336 IBM Toolbox para Java IBM Toolbox para Java

ltxselement ref=intParmArrayGroupgtltxselement ref=unsignedIntParmGroupgtltxselement ref=unsignedIntParmArrayGroupgt

ltxselement ref=shortParmGroupgtltxselement ref=shortParmArrayGroupgtltxselement ref=unsignedShortParmGroupgtltxselement ref=unsignedShortParmArrayGroupgtltxselement ref=longParmGroupgtltxselement ref=longParmArrayGroupgtltxselement ref=zonedDecimalParmGroupgtltxselement ref=zonedDecimalParmArrayGroupgtltxselement ref=packedDecimalParmGroupgt

ltxselement ref=packedDecimalParmArrayGroupgtltxselement ref=floatParmGroupgtltxselement ref=floatParmArrayGroupgtltxselement ref=doubleParmGroupgtltxselement ref=doubleParmArrayGroupgtltxselement ref=hexBinaryParmGroupgtltxselement ref=hexBinaryParmArrayGroupgt

ltxselement ref=structParmGroupgtltxselement ref=structParmArrayGroupgtltxselement ref=structArrayGroupgtltxselement ref=structgt

ltxschoicegt

ltxsgroupgt

lt-- Tipo abstracto para todos los tipos de paraacutemetros de datos --gtltxselement name=stringParmGroup type=stringParmType abstract=true gtltxselement name=stringParmArrayGroup type=stringParmArrayType abstract=true gtltxselement name=intParmGroup type=intParmType abstract=true gtltxselement name=intParmArrayGroup type=intParmArrayType abstract=true gtltxselement name=unsignedIntParmGroup type=unsignedIntParmType abstract=true gtltxselement name=unsignedIntParmArrayGroup type=unsignedIntParmArrayType abstract=true gtltxselement name=shortParmGroup type=shortParmType abstract=true gtltxselement name=shortParmArrayGroup type=shortParmArrayType abstract=true gtltxselement name=unsignedShortParmGroup type=unsignedShortParmType abstract=true gtltxselement name=unsignedShortParmArrayGroup type=unsignedShortParmArrayType abstract=true gtltxselement name=longParmGroup type=longParmType abstract=true gtltxselement name=longParmArrayGroup type=longParmArrayType abstract=true gtltxselement name=zonedDecimalParmGroup type=zonedDecimalParmType abstract=true gtltxselement name=zonedDecimalParmArrayGroup type=zonedDecimalParmArrayType abstract=true gtltxselement name=packedDecimalParmGroup type=packedDecimalParmType abstract=true gtltxselement name=packedDecimalParmArrayGroup type=packedDecimalParmArrayType abstract=true gtltxselement name=floatParmGroup type=floatParmType abstract=true gtltxselement name=floatParmArrayGroup type=floatParmArrayType abstract=true gtltxselement name=doubleParmGroup type=doubleParmType abstract=true gtltxselement name=doubleParmArrayGroup type=doubleParmArrayType abstract=true gtltxselement name=hexBinaryParmGroup type=hexBinaryParmType abstract=true gtltxselement name=hexBinaryParmArrayGroup type=hexBinaryParmArrayType abstract=true gtltxselement name=structParmGroup type=structParmType abstract=true gtltxselement name=structParmArrayGroup type=structParmArrayType abstract=true gtltxselement name=structArrayGroup type=structArrayType abstract=true

substitutionGroup=structOrProgram gt

lt-- Paraacutemetro de tipo serie --gtltxselement name=stringParm type=stringParmType substitutionGroup=stringParmGroup

nillable=truegtltxscomplexType name=stringParmTypegt

ltxssimpleContentgtltxsextension base=stringFieldTypegt

ltxsattributeGroup ref=commonParmAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Matriz de paraacutemetros de tipo serie --gt

IBM Toolbox para Java 337

ltxselement name=arrayOfStringParm type=stringParmArrayTypesubstitutionGroup=stringParmArrayGroup nillable=true gt

ltxscomplexType name=stringParmArrayTypegtltxssequencegt

ltxselement name=i type=stringElementType minOccurs=0 maxOccurs=unboundedgtltxssequencegtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgtlt-- El nuacutemero de elementos de la matriz --gtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtlt-- El nuacutemero de caracteres de cada serie --gtltxsattribute name=length type=xsstringgtlt-- El CCSID de host de cada serie --gtltxsattribute name=ccsid type=xsstringgtlt-- Especifica coacutemo recortar los espacios en blanco (left right both none) --gtltxsattribute name=trim type=trimType gtlt-- El tamantildeo de cada caraacutecter (rsquochartypersquo en PCML) --gtltxsattribute name=bytesPerChar type=charType gtlt-- El tipo de serie bidireccional --gtltxsattribute name=bidiStringType type=bidiStringTypeType gt

ltxscomplexTypegt

ltxscomplexType name=stringElementTypegtltxssimpleContentgt

ltxsextension base=xsstringgtlt-- El iacutendice de la matriz --gtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgtltxscomplexTypegt

lt-- Paraacutemetro entero (4 bytes en el servidor) --gtltxselement name=intParm type=intParmType nillable=true substitutionGroup=intParmGroup gt

ltxscomplexType name=intParmType gtltxssimpleContentgt

ltxsextension base=intFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz intParm --gtltxselement name=arrayOfIntParm type=intParmArrayType substitutionGroup=intParmArrayGroup

nillable=true gtltxscomplexType name=intParmArrayTypegt

ltxssequencegtlt-- rsquoirsquo es el coacutedigo utilizado para elementos de matrices que no son de estructura --gtltxselement name=i type=intElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=intElementTypegtltxssimpleContentgt

ltxsextension base=xsintgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro entero sin signo (4 bytes en el servidor) --gt

338 IBM Toolbox para Java IBM Toolbox para Java

ltxselement name=unsignedIntParm type=unsignedIntParmType nillable=truesubstitutionGroup=unsignedIntParmGroup gt

ltxscomplexType name=unsignedIntParmTypegtltxssimpleContentgt

ltxsextension base=unsignedIntFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz intParm sin signo --gtltxselement name=arrayOfUnsignedIntParm type=unsignedIntParmArrayType

substitutionGroup=unsignedIntParmArrayGroup nillable=true gtltxscomplexType name=unsignedIntParmArrayTypegt

ltxssequencegtltxselement name=i type=unsignedIntElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=unsignedIntElementTypegtltxssimpleContentgt

ltxsextension base=xsunsignedIntgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro entero corto (2 bytes en el servidor) --gtltxselement name=shortParm type=shortParmType nillable=true substitutionGroup=shortParmGroupgt

ltxscomplexType name=shortParmTypegtltxssimpleContentgt

ltxsextension base=shortFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz shortParm --gtltxselement name=arrayOfShortParm type=shortParmArrayType substitutionGroup=shortParmArrayGroup

nillable=true gtltxscomplexType name=shortParmArrayTypegt

ltxssequencegtltxselement name=i type=shortElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=shortElementTypegtltxssimpleContentgt

ltxsextension base=xsshortgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro entero corto sin signo (2 bytes en el servidor) --gtltxselement name=unsignedShortParm type=unsignedShortParmType nillable=true

substitutionGroup=unsignedShortParmGroup gt

IBM Toolbox para Java 339

ltxscomplexType name=unsignedShortParmTypegtltxssimpleContentgt

ltxsextension base=unsignedShortFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz unsignedShortParm --gtltxselement name=arrayOfUnsignedShortParm type=unsignedShortParmArrayType

substitutionGroup=unsignedShortParmArrayGroup nillable=true gtltxscomplexType name=unsignedShortParmArrayTypegt

ltxssequencegtltxselement name=i type=unsignedShortElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=unsignedShortElementTypegtltxssimpleContentgt

ltxsextension base=xsunsignedShortgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro entero largo (8 bytes en el servidor) --gtltxselement name=longParm type=longParmType nillable=true substitutionGroup=longParmGroup gt

ltxscomplexType name=longParmTypegtltxssimpleContentgt

ltxsextension base=longFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz longParm --gtltxselement name=arrayOfLongParm type=longParmArrayType substitutionGroup=longParmArrayGroup

nillable=true gtltxscomplexType name=longParmArrayTypegt

ltxssequencegtltxselement name=i type=longElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=longElementTypegtltxssimpleContentgt

ltxsextension base=xslonggtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro ZonedDecimal --gtltxselement name=zonedDecimalParm type=zonedDecimalParmType nillable=true

substitutionGroup=zonedDecimalParmGroup gtltxscomplexType name=zonedDecimalParmTypegt

ltxssimpleContentgt

340 IBM Toolbox para Java IBM Toolbox para Java

ltxsextension base=zonedDecimalFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz zonedDecimalParm --gtltxselement name=arrayOfZonedDecimalParm type=zonedDecimalParmArrayType

substitutionGroup=zonedDecimalParmArrayGroup nillable=true gtltxscomplexType name=zonedDecimalParmArrayTypegt

ltxssequencegtltxselement name=i type=zonedDecimalElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtlt-- El nuacutemero total de diacutegitos del campo (rsquolengthrsquo en PCML) --gtltxsattribute name=totalDigits type=xspositiveIntegergtlt-- El nuacutemero de diacutegitos fraccionarios (rsquoprecisionrsquo en PCML) --gtltxsattribute name=fractionDigits type=xsnonNegativeIntegergt

ltxscomplexTypegt

ltxscomplexType name=zonedDecimalElementTypegtltxssimpleContentgt

ltxsextension base=xsdecimalgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro packedDecimal --gtltxselement name=packedDecimalParm type=packedDecimalParmType nillable=true

substitutionGroup=packedDecimalParmGroup gtltxscomplexType name=packedDecimalParmTypegt

ltxssimpleContentgtltxsextension base=packedDecimalFieldTypegt

ltxsattributeGroup ref=commonParmAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Tipo de matriz packedDecimalParm --gtltxselement name=arrayOfPackedDecimalParm type=packedDecimalParmArrayType

substitutionGroup=packedDecimalParmArrayGroup nillable=true gtltxscomplexType name=packedDecimalParmArrayTypegt

ltxssequencegtltxselement name=i type=packedDecimalElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattribute name=totalDigits type=xspositiveIntegergtltxsattribute name=fractionDigits type=xsnonNegativeIntegergt

ltxscomplexTypegt

ltxscomplexType name=packedDecimalElementTypegtltxssimpleContentgt

ltxsextension base=xsdecimalgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro Float (4 bytes en el servidor) --gtltxselement name=floatParm type=floatParmType nillable=true substitutionGroup=floatParmGroupgt

IBM Toolbox para Java 341

ltxscomplexType name=floatParmTypegtltxssimpleContentgt

ltxsextension base=floatFieldTypegtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz floatParm --gtltxselement name=arrayOfFloatParm type=floatParmArrayType substitutionGroup=floatParmArrayGroup

nillable=true gtltxscomplexType name=floatParmArrayTypegt

ltxssequencegtltxselement name=i type=floatElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=floatElementTypegtltxssimpleContentgt

ltxsextension base=xsfloatgtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro Double (8 bytes en el servidor) --gtltxselement name=doubleParm type=doubleParmType nillable=true

substitutionGroup=doubleParmGroup gtltxscomplexType name=doubleParmTypegt

ltxssimpleContentgtltxsextension base=doubleFieldTypegt

ltxsattributeGroup ref=commonParmAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Tipo de matriz doubleParm --gtltxselement name=arrayOfDoubleParm type=doubleParmArrayType

substitutionGroup=doubleParmArrayGroup nillable=true gtltxscomplexType name=doubleParmArrayTypegt

ltxssequencegtltxselement name=i type=doubleElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=doubleElementTypegtltxssimpleContentgt

ltxsextension base=xsdoublegtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Paraacutemetro binario hexadecimal (cualquier nuacutemero de bytes sin signo) --gtltxselement name=hexBinaryParm type=hexBinaryParmType substitutionGroup=hexBinaryParmGroup gt

ltxscomplexType name=hexBinaryParmTypegtltxssimpleContentgt

342 IBM Toolbox para Java IBM Toolbox para Java

ltxsextension base=hexBinaryFieldTypegtlt-- La longitud del campo en bytes (rsquolengthrsquo en PCML) --gtltxsattribute name=totalBytes type=xsstringgtltxsattributeGroup ref=commonParmAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de matriz hexBinaryParm --gtltxselement name=arrayOfHexBinaryParm type=hexBinaryParmArrayType

substitutionGroup=hexBinaryParmArrayGroup nillable=true gtltxscomplexType name=hexBinaryParmArrayTypegt

ltxssequencegtltxselement name=i type=hexBinaryElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtltxsattribute name=totalBytes type=xsstringgtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgt

ltxscomplexTypegt

ltxscomplexType name=hexBinaryElementTypegtltxssimpleContentgt

ltxsextension base=xshexBinarygtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Tipo de paraacutemetro de estructura --gtltxselement name=structParm type=structParmType substitutionGroup=structParmGroup gt

ltxscomplexType name=structParmTypegtltxscomplexContentgt

ltxsextension base=structureParmArraygtltxsattribute name=struct type=string50gtlt-- Especifica si el paraacutemetro se pasa por referencia o por valor (rsquopassbyrsquo en PCML) --gtlt-- El valor solo estaacute permitido para paraacutemetros de entero --gtltxsattribute name=passMode type=passModeTypegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstringgt

ltxsextensiongtltxscomplexContentgt

ltxscomplexTypegt

lt-- Tipo de matriz de paraacutemetro de estructura --gtltxselement name=arrayOfStructParm type=structParmArrayType

substitutionGroup=structParmArrayGroup nillable=true gtltxscomplexType name=structParmArrayTypegt

ltxssequencegtlt-- El coacutedigo struct_i representa elementos struct o de matriz de paraacutemetro de estructura --gtltxselement name=struct_i type=structElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtltxsattributeGroup ref=commonParmAttrsgtltxsattributeGroup ref=commonFieldAttrsgtltxsattribute name=struct type=string50gt

ltxscomplexTypegt

ltxscomplexType name=structElementTypegtltxscomplexContentgt

ltxsextension base=structureParmArraygtltxsattribute name=index type=xsnonNegativeInteger gt

ltxsextensiongtltxscomplexContentgt

ltxscomplexTypegt

IBM Toolbox para Java 343

lt-- Elemento Struct --gtltxselement name=struct type=structureParmArray substitutionGroup=structOrProgram gt

lt-- Tipo de matriz Struct --gtltxselement name=arrayOfStruct type=structArrayType substitutionGroup=structArrayGroup

nillable=true gtltxscomplexType name=structArrayTypegt

ltxssequencegtlt-- El coacutedigo struct_i representa elementos struct de una matriz --gtltxselement name=struct_i type=structElementType minOccurs=0 maxOccurs=unboundedgt

ltxssequencegtlt-- El nombre de la estructura --gtltxsattribute name=name type=string50gtlt-- El nuacutemero de elementos de la matriz --gtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstring gtlt-- Especifica si es una estructura de entrada salida o entradasalida (rsquousagersquo en PCML) --gtltxsattribute name=passDirection type=passDirectionTypegtlt-- El desplazamiento de la estructura dentro de un paraacutemetro de salida --gtltxsattribute name=offset type=xsstring gtlt-- La ubicacioacuten base a la que hace referencia el atributo rsquooffsetrsquo --gtltxsattribute name=offsetFrom type=xsstring gtlt-- El nuacutemero de bytes que se han de reservar para los datos de salida del elemento --gtltxsattribute name=outputSize type=xsstring gtlt-- La versioacuten de IBM i inferior en la que existe este elemento --gtltxsattribute name=minvrm type=string10 gtlt-- La versioacuten de IBM i superior en la que existe este elemento --gtltxsattribute name=maxvrm type=string10 gt

ltxscomplexTypegt

lt-- Atributos comunes a todos los tipos de campos de datos --gtltxsattributeGroup name=commonParmAttrsgt

lt-- Especifica si es un paraacutemetro de entrada salida o entradasalida (rsquousagersquo en PCML) --gtlt-- El valor predeterminado si se ha especificado none es rsquoinheritrsquo --gtltxsattribute name=passDirection type=passDirectionTypegtlt-- Especifica si el paraacutemetro se pasa por referencia o valor (rsquopassbyrsquo en PCML) --gtlt-- El valor predeterminado si se ha especificado none es rsquoreferencersquo --gtltxsattribute name=passMode type=passModeType gtlt-- El desplazamiento del elemento dentro de un paraacutemetro de salida --gtlt-- The default value if none is specified is 0 --gtltxsattribute name=offset type=xsstring gtlt-- La ubicacioacuten base a la que hace referencia el atributo rsquooffsetrsquo --gtltxsattribute name=offsetFrom type=xsstring gtlt-- El nuacutemero de bytes que se han de reservar para los datos de salida del elemento --gtltxsattribute name=outputSize type=xsstring gtlt-- La versioacuten de IBM i inferior para la que este campo es vaacutelido --gtlt-- Si no se especifica se supone que este campo es vaacutelido para todas las versiones --gtltxsattribute name=minvrm type=string10 gtlt-- La versioacuten de IBM i superior para la que este campo es vaacutelido --gtlt-- Si no se especifica se supone que este campo es vaacutelido para todas las versiones --gtltxsattribute name=maxvrm type=string10 gt

ltxsattributeGroupgt

ltxssimpleType name=passDirectionTypegtltxsrestriction base=xsstringgt

ltxsenumeration value=ingtltxsenumeration value=inoutgtltxsenumeration value=outgtltxsenumeration value=inheritgt

ltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=passModeTypegtltxsrestriction base=xsstringgt

344 IBM Toolbox para Java IBM Toolbox para Java

ltxsenumeration value=valuegtltxsenumeration value=referencegt

ltxsrestrictiongtltxssimpleTypegt

lt-- Los tipos siguientes permiten mantener la compatibilidad con PCML --gtltxssimpleType name=bidiStringTypeTypegt

ltxsrestriction base=xsstringgtltxsenumeration value=ST4gtltxsenumeration value=ST5gtltxsenumeration value=ST6gtltxsenumeration value=ST7gtltxsenumeration value=ST8gtltxsenumeration value=ST9gtltxsenumeration value=ST10gtltxsenumeration value=ST11gtltxsenumeration value=DEFAULTgt

ltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=charTypegtltxsrestriction base=xsstringgt

ltxsenumeration value=onebytegtltxsenumeration value=twobytegt

ltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=trimTypegtltxsrestriction base=xsstringgt

ltxsenumeration value=nonegtltxsenumeration value=leftgtltxsenumeration value=rightgtltxsenumeration value=bothgt

ltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=returnValueTypegtltxsrestriction base=xsstringgt

ltxsenumeration value=voidgtltxsenumeration value=integergt

ltxsrestrictiongtltxssimpleTypegt

ltxscomplexType name=structureParmArraygtltxssequencegt

ltxsgroup ref=structureParm minOccurs=0 maxOccurs=unboundedgtltxssequencegtltxsattribute name=name type=string50gtltxsattribute name=passDirection type=passDirectionTypegtltxsattribute name=offset type=xsstring gtltxsattribute name=offsetFrom type=xsstring gtltxsattribute name=outputSize type=xsstring gtltxsattribute name=minvrm type=string10 gtltxsattribute name=maxvrm type=string10 gt

ltxscomplexTypegt

lt-- Un structureParm es exactamente uno de los siguientes stringParm intParmshortParm longParm zonedDecimalParm packedDecimalParm floatParmdoubleParm o hexBinaryParm --gtltxsgroup name=structureParmgt

ltxschoicegtltxselement ref=stringParmGroup gtltxselement ref=stringParmArrayGroup gtltxselement ref=intParmGroup gtltxselement ref=intParmArrayGroup gt

IBM Toolbox para Java 345

ltxselement ref=unsignedIntParmGroup gtltxselement ref=unsignedIntParmArrayGroup gtltxselement ref=shortParmGroup gtltxselement ref=shortParmArrayGroup gtltxselement ref=unsignedShortParmGroup gtltxselement ref=unsignedShortParmArrayGroup gtltxselement ref=longParmGroup gtltxselement ref=longParmArrayGroup gtltxselement ref=zonedDecimalParmGroup gtltxselement ref=zonedDecimalParmArrayGroup gtltxselement ref=packedDecimalParmGroup gtltxselement ref=packedDecimalParmArrayGroup gtltxselement ref=floatParmGroup gtltxselement ref=floatParmArrayGroup gtltxselement ref=doubleParmGroup gtltxselement ref=doubleParmArrayGroup gtltxselement ref=hexBinaryParmGroup gtltxselement ref=hexBinaryParmArrayGroup gtltxselement ref=structParmGroup gtltxselement ref=structParmArrayGroupgtltxselement ref=structArrayGroupgtltxselement ref=structgt

ltxschoicegtltxsgroupgt

lt-- Esquema de definicioacuten de campo --gt

lt-- Defina los tipos de datos nativos de IBM i baacutesicos --gt

ltxscomplexType name=zonedDecimalgtltxssimpleContentgt

ltxsextension base=xsdecimalgtltxsattribute name=totalDigits type=xspositiveInteger gtltxsattribute name=fractionDigits type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

ltxscomplexType name=packedDecimalgtltxssimpleContentgt

ltxsextension base=xsdecimalgtltxsattribute name=totalDigits type=xspositiveInteger gtltxsattribute name=fractionDigits type=xsnonNegativeInteger gt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

ltxscomplexType name=structureFieldArraygtltxssequencegt

ltxsgroup ref=structureField minOccurs=1 maxOccurs=unboundedgtltxssequencegtltxsattribute name=name type=string50gtlt-- rsquocountrsquo es obligatorio si los datos de la matriz de entrada yo salida deben ser XPCML --gtltxsattribute name=count type=xsstringgt

ltxscomplexTypegt

lt-- Tipo abstracto para struct o program --gtltxselement name=structOrProgram abstract=true gt

lt-- Tipo abstracto para todos los tipos de campos de datos --gtltxselement name=stringFieldGroup type=stringFieldType abstract=true gt

346 IBM Toolbox para Java IBM Toolbox para Java

ltxselement name=intFieldGroup type=intFieldType abstract=true gtltxselement name=unsignedIntFieldGroup type=unsignedIntFieldType abstract=true gtltxselement name=shortFieldGroup type=shortFieldType abstract=true gtltxselement name=unsignedShortFieldGroup type=unsignedShortFieldType abstract=true gtltxselement name=longFieldGroup type=longFieldType abstract=true gtltxselement name=zonedDecimalFieldGroup type=zonedDecimalFieldType abstract=true gtltxselement name=packedDecimalFieldGroup type=packedDecimalFieldType abstract=true gtltxselement name=floatFieldGroup type=floatFieldType abstract=true gtltxselement name=doubleFieldGroup type=doubleFieldType abstract=true gtltxselement name=hexBinaryFieldGroup type=hexBinaryFieldType abstract=true gtltxselement name=structFieldGroup type=structFieldType abstract=true gt

lt-- Declare cada elemento de campo como un tipo de campo especiacutefico --gtltxselement name=stringField type=stringFieldType substitutionGroup=stringFieldGroup

nillable=truegtltxselement name=intField type=intFieldType nillable=true

substitutionGroup=intFieldGroup gtltxselement name=unsignedIntField type=unsignedIntFieldType

substitutionGroup=unsignedIntFieldGroup nillable=truegtltxselement name=shortField type=shortFieldType nillable=true

substitutionGroup=shortFieldGroup gtltxselement name=unsignedShortField type=unsignedShortFieldType nillable=true

substitutionGroup=unsignedShortFieldGroup gtltxselement name=longField type=longFieldType nillable=true

substitutionGroup=longFieldGroup gtltxselement name=hexBinaryField type=hexBinaryFieldType nillable=true

substitutionGroup=hexBinaryFieldGroup gtltxselement name=zonedDecimalField type=zonedDecimalFieldType nillable=true

substitutionGroup=zonedDecimalFieldGroup gtltxselement name=packedDecimalField type=packedDecimalFieldType nillable=true

substitutionGroup=packedDecimalFieldGroup gtltxselement name=doubleField type=doubleFieldType nillable=true

substitutionGroup=doubleFieldGroup gtltxselement name=floatField type=floatFieldType nillable=true

substitutionGroup=floatFieldGroup gt

ltxselement name=structField type=structFieldType nillable=truesubstitutionGroup=structFieldGroup gt

lt-- Un StructureField es exactamente uno de los siguientes stringField intFieldshortField longField zonedDecimalField packedDecimalField floatFielddoubleField o hexBinaryField --gtltxsgroup name=structureFieldgt

ltxschoicegtltxselement ref=stringFieldGroupgtltxselement ref=intFieldGroupgtltxselement ref=unsignedIntFieldGroupgtltxselement ref=shortFieldGroupgtltxselement ref=unsignedShortFieldGroupgtltxselement ref=longFieldGroupgtltxselement ref=zonedDecimalFieldGroupgtltxselement ref=packedDecimalFieldGroupgtltxselement ref=floatFieldGroupgtltxselement ref=doubleFieldGroupgtltxselement ref=hexBinaryFieldGroupgtltxselement ref=structParmGroupgtltxselement ref=structgt

ltxschoicegtltxsgroupgt

lt-- Campo de caraacutecter --gtlt-- Se correlaciona con AS400Text --gtltxscomplexType name=stringFieldTypegt

ltxssimpleContentgt

IBM Toolbox para Java 347

ltxsextension base=xsstringgtlt-- Nuacutemero de caracteres --gtltxsattribute name=length type=xsstringgtlt-- Indica la codificacioacuten del campo (CCSID) en el servidor --gtltxsattribute name=ccsid type=xsstringgtltxsattribute name=trim type=trimType gtltxsattribute name=bytesPerChar type=charType gtltxsattribute name=bidiStringType type=bidiStringTypeType gtltxsattributeGroup ref=commonFieldAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Campo hexBinary --gtlt-- Se correlaciona con AS400ByteArray --gtltxscomplexType name=hexBinaryFieldTypegt

ltxssimpleContentgtltxsextension base=xshexBinarygt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo Float --gtlt-- Se correlaciona con AS400Float4 --gtltxscomplexType name=floatFieldTypegt

ltxssimpleContentgtltxsextension base=xsfloatgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo zonedDecimal --gtlt-- Se correlaciona con AS400ZonedDecimal --gtltxscomplexType name=zonedDecimalFieldTypegt

ltxssimpleContentgtltxsextension base=zonedDecimalgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo packedDecimal --gtlt-- Se correlaciona con AS400PackedDecimal --gtltxscomplexType name=packedDecimalFieldTypegt

ltxssimpleContentgtlt-- En DDS los valores binarios tienen 1-18 diacutegitos si la longitud del campo es

superior a 9 el valor de posiciones decimales debe ser 0 --gtltxsextension base=packedDecimalgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo int --gtlt-- Se correlaciona con AS400Bin4 --gtltxscomplexType name=intFieldTypegt

ltxssimpleContentgtltxsextension base=xsintgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

348 IBM Toolbox para Java IBM Toolbox para Java

lt-- Campo int sin signo --gtlt-- Se correlaciona con AS400Bin4 --gtltxscomplexType name=unsignedIntFieldTypegt

ltxssimpleContentgtltxsextension base=xsunsignedIntgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo short --gtlt-- Se correlaciona con AS400Bin2 --gtltxscomplexType name=shortFieldTypegt

ltxssimpleContentgtltxsextension base=xsshortgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo short sin signo --gtlt-- Se correlaciona con AS400Bin2 --gtltxscomplexType name=unsignedShortFieldTypegt

ltxssimpleContentgtltxsextension base=xsunsignedShortgt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo long --gtlt-- Se correlaciona con AS400Bin8 --gtltxscomplexType name=longFieldTypegt

ltxssimpleContentgtltxsextension base=xslonggt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo double --gtlt-- Se correlaciona con AS400Float8 --gtltxscomplexType name=doubleFieldTypegt

ltxssimpleContentgtltxsextension base=xsdoublegt

ltxsattributeGroup ref=commonFieldAttrsgtltxsextensiongt

ltxssimpleContentgtltxscomplexTypegt

lt-- Campo struct --gtltxscomplexType name=structFieldTypegt

ltxssimpleContentgtltxsextension base=xsstringgt

ltxsattribute name=struct type=string50gtltxsattributeGroup ref=commonFieldAttrsgt

ltxsextensiongtltxssimpleContentgt

ltxscomplexTypegt

lt-- Atributos comunes a todos los tipos de campos de datos --gtltxsattributeGroup name=commonFieldAttrsgt

ltxsattribute name=name type=string50gt

IBM Toolbox para Java 349

ltxsattribute name=columnHeading1 type=string20gtltxsattribute name=columnHeading2 type=string20gtltxsattribute name=columnHeading3 type=string20gtltxsattribute name=description type=string50gtltxsattribute name=defaultValue type=xsstringgtlt-- La longitud maacutexima de la serie es de 65535 caracteres --gtltxsattribute name=nullable type=xsbooleangtltxsattribute name=isEmptyString type=xsbooleangtlt-- Indica que se trata de una serie vaciacutea --gt

ltxsattributeGroupgt

lt-- Tipos de utilidades --gt

ltxssimpleType name=ccsidTypegtltxsrestriction base=xsnonNegativeIntegergtltxsmaxInclusive value=65535gtltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=string10gtltxsrestriction base=xsstringgtltxsmaxLength value=10gtltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=string20gtltxsrestriction base=xsstringgtltxsmaxLength value=20gtltxsrestrictiongtltxssimpleTypegt

ltxssimpleType name=string50gtltxsrestriction base=xsstringgtltxsmaxLength value=50gtltxsrestrictiongtltxssimpleTypegt

ltxsschemagt

Sintaxis de XPCML

El esquema XPCML define varios coacutedigos de elementos y cada coacutedigo de elemento contiene coacutedigos deatributos

La tabla siguiente contiene los distintos elementos que se pueden declarar y definir en los archivos fuenteXPCML Cada entrada de la primera columna enlaza con la seccioacuten adecuada del esquema XPCML

Coacutedigo XPCML Descripcioacuten Coacutedigo PCML equivalente

doubleParm Define un paraacutemetro doble data (type=float length=8)

arrayOfDoubleParm Define un paraacutemetro que es unamatriz de dobles

floatParm Define un paraacutemetro flotante data (type=float length=4)

arrayOfFloatParm Define un paraacutemetro que es unamatriz de datos flotantes

hexBinaryParm Define un paraacutemetro de byterepresentado de modo hexadecimal

byte (equivalente aproximado enrepresentacioacuten hexadecimal)

arrayOfHexBinaryParm Define un paraacutemetro que es unamatriz de datos hexBinary

intParm Define un paraacutemetro entero data (type=int length=4)

arrayOfIntParm Define un paraacutemetro que es unamatriz de enteros

longParm Define un paraacutemetro largo data (type=int length=8)

350 IBM Toolbox para Java IBM Toolbox para Java

Coacutedigo XPCML Descripcioacuten Coacutedigo PCML equivalente

arrayOfLongParm Define un paraacutemetro que es unamatriz de datos largos

packedDecimalParm Define un paraacutemetro decimalempaquetado

data (type=packed)

arrayOfPackedDecimalParm Define un paraacutemetro que es unamatriz de decimales empaquetados

parameterList Indica que el coacutedigo delimitadorrepresenta todas las definiciones deparaacutemetros del programa

program Inicia y finaliza el fuente XML quedescribe una llamada a programa

program

shortParm Define un paraacutemetro corto data (type int length 2)

arrayOfShortParm Define un paraacutemetro que es unamatriz de datos cortos

stringParm Define un paraacutemetro de tipo serie

arrayOfStringParm Define un paraacutemetro que es unamatriz de series

struct Define una estructura con nombreque puede especificarse como unargumento para un programa o comoun campo dentro de otra estructuracon nombre

struct

arrayOfStruct Define una matriz de estructuras

structParm Representa una referencia a uncoacutedigo struct situado en alguacuten otrolugar del documento XPCML que sedesea incluir en una ubicacioacutenespeciacutefica del documento

data (type=struct)

arrayOfStructParm Define un paraacutemetro que es unamatriz de paraacutemetros de estructura

unsignedIntParm Define un paraacutemetro entero sin signo data (type=int length=4precision=32)

arrayOfUnsignedIntParm Define un paraacutemetro que es unamatriz de enteros sin signo

unsignedShortParm Define un paraacutemetro corto sin signo data (type=int length=2precision=16)

arrayOfUnsignedShortParm Define un paraacutemetro que es unamatriz de datos cortos sin signo

xpcml Inicia y finaliza el archivo fuenteXPCML que describe el formato de lallamada a programa

zonedDecimalParm Define un paraacutemetro decimal conzona

data (type zoned)

arrayOfZonedDecimalParm Define un paraacutemetro que es unamatriz de decimales con zona

IBM Toolbox para Java 351

Atributos de coacutedigos XPCML

El esquema XPCML define varios coacutedigos de elementos y cada coacutedigo de elemento contiene coacutedigos deatributos La tabla siguiente lista y describe los distintos atributos de cada elemento

Para obtener informacioacuten maacutes especiacutefica sobre los coacutedigos XPCML y sus atributos consulte EsquemaXPCML

Coacutedigo XPCML Atributo Descripcioacuten

hexBinaryParm Rellenar las 2 uacuteltimas columnas condatos y decidir el formato

arrayOfHexBinaryParm

doubleParm Define un paraacutemetro doble float (length 8)

arrayOfDoubleParm Define un paraacutemetro que es unamatriz de dobles

floatParm Define un paraacutemetro flotante data (type float length 4)

arrayOfFloatParm Define un paraacutemetro que es unamatriz de datos flotantes

intParm Define un paraacutemetro entero data (type int length 4)

arrayOfIntParm Define un paraacutemetro que es unamatriz de enteros

longParm Define un paraacutemetro largo data (type int length 8)

arrayOfLongParm Define un paraacutemetro que es unamatriz de datos largos

packedDecimalParm Define un paraacutemetro decimalempaquetado

data (type packed)

arrayOfPackedDecimalParm Define un paraacutemetro que es unamatriz de decimales empaquetados

parameterList Indica que el coacutedigo delimitadorrepresenta todas las definiciones deparaacutemetros del programa

program Inicia y finaliza el fuente XML quedescribe una llamada a programa

shortParm Define un paraacutemetro corto data (type int length 2)

arrayOfShortParm Define un paraacutemetro que es unamatriz de datos cortos

stringParm Define un paraacutemetro de tipo serie

arrayOfStringParm Define un paraacutemetro que es unamatriz de series

struct Define una estructura con nombreque puede especificarse como unargumento para un programa o comoun campo dentro de otra estructuracon nombre

arrayOfStruct Define una matriz de estructuras

structParm Representa una referencia a uncoacutedigo struct situado en alguacuten otrolugar del documento XPCML que sedesea incluir en una ubicacioacutenespeciacutefica del documento

data (type struct)

352 IBM Toolbox para Java IBM Toolbox para Java

Coacutedigo XPCML Atributo Descripcioacuten

arrayOfStructParm Define un paraacutemetro que es unamatriz de paraacutemetros de estructura

unsignedIntParm Define un paraacutemetro entero sin signo data (type int length 4 precision 32)

arrayOfUnsignedIntParm Define un paraacutemetro que es unamatriz de enteros sin signo

unsignedShortParm Define un paraacutemetro corto sin signo data (type int length 2 precision 16)

arrayOfUnsignedShortParm Define un paraacutemetro que es unamatriz de datos cortos sin signo

xpcml Inicia y finaliza el archivo fuenteXPCML que describe el formato de lallamada a programa

zonedDecimalParm Define un paraacutemetro decimal conzona

data (type zoned)

arrayOfZonedDecimalParm Define un paraacutemetro que es unamatriz de decimales con zona

Utilizacioacuten de XPCMLLa utilizacioacuten de XPCML es parecida a la de PCML Los pasos siguientes enumeran con caraacutecter generallas acciones que se deben llevar a cabo para utilizar XPCML1 Utilice XPCML para describir la especificacioacuten de la llamada a programa2 Cree un objeto ProgramCallDocument3 Utilice ProgramCallDocumentcallProgram() para ejecutar el programa

Pese a las similitudes con el uso de PCML el uso de XPCML ofrece diversas funciones mejoradasv Permitir que el analizador valide automaacuteticamente los valores de paraacutemetrosv Especificar y pasar valores de paraacutemetros de programasv Recuperar los resultados de una llamada de programa al servidor en XPCMLv Transformar un documento PCML existente en el documento XPCML equivalentev Ampliar el esquema XPCML para definir nuevos elementos y atributos simples y complejos

Por ejemplo IBM Toolbox para Java permite ampliar el esquema XPCML para crear nuevos tipos deparaacutemetros y datos Se puede utilizar esta funcioacuten de XPCML para condensar los archivos fuenteXPCML lo que facilita la lectura de los archivos y el uso del coacutedigo

Encontraraacute maacutes informacioacuten sobre el uso de XPCML en estas paacuteginas

Convertir fuente PCML existente en XPCML

La clase ProgramCallDocument contiene el meacutetodo transformPCMLToXPCML que permite transformarlos documentos PCML existentes en documentos XPCML equivalentes

XPCML tiene definiciones comparables para todos los elementos y atributos que se pueden definir enPCML Al utilizar transformPCMLToXPCML() la representacioacuten PCML de los elementos y atributos seconvierte en la representacioacuten XPCML equivalente

Tenga en cuenta que en algunos casos los atributos XPCML equivalentes tienen un nombre distinto alempleado en PCML Por ejemplo el atributo usage de PCML se corresponde con el atributopassDirection de XPCML Para obtener maacutes informacioacuten sobre coacutemo utilizar el fuente XPCML encomparacioacuten con PCML consulte Esquema y sintaxis XPCML

IBM Toolbox para Java 353

El meacutetodo toma el documento PCML existente que se pasa como un objeto InputStream y genera elfuente XPCML equivalente como un objeto OutputStream Como transformPCMLToXPCML() es unmeacutetodo estaacutetico se puede efectuar una llamada al mismo sin tener que crear primero un objetoProgramCallDocument

Ejemplo convertir un documento PCML en un documento XPCML

El ejemplo siguiente muestra coacutemo se puede convertir un documento PCML (denominadomyPCMLpcml) en un documento XPCML (denominado myXPCMLxpcml)

Nota debe especificar xpcml como la extensioacuten de archivo de los archivos XPCML Con el uso de laextensioacuten de archivo xpcml se garantiza que la clase ProgramCallDocument reconoceraacute el archivo comoXPCML De no especificarse ninguna extensioacuten ProgramCallDocument supondraacute que el archivo esPCML

Documento PCML myPCMLpcmllt-- myPCMLpcml --gtltpcml version=40gt

ltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgtltdata type=char name=parm1 usage=in passby=reference

minvrm=V5R2M0 ccsid=37 length=10 init=Value 1gtltprogramgt

ltpcmlgt

Coacutedigo Java para convertir myPCMLpcml en myPCMLxpcmltry

InputStream pcmlStream = new FileInputStream(myPCMLpcml)OutputStream xpcmlStream = new FileOutputStream(myXPCMLxpcml)ProgramCallDocumenttransformPCMLToXPCML(pcmlStream xpcmlStream)

catch (Exception e)

Systemoutprintln(error - +egetMessage())eprintStackTrace()

Documento XPCML final myXPCMLxpcmlltxml version=10 encoding=UTF-8gt

lt-- myXPCMLxpcml --gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=xpcmlxsd version=40gtltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgt

ltparameterListgtltstringParm name=parm1 passDirection=in passMode=reference

minvrm=V5R2M0 ccsid=37 length=10gtValue 1ltstringParmgt

ltparameterListgtltprogramgt

ltxpcmlgt

Para obtener maacutes informacioacuten sobre transformPCMLToXPCML() y la clase ProgramCallDocumentconsulte la paacutegina siguiente

Informacioacuten de javadocs acerca de ProgramCallDocument

Utilizar XPCML para llamar a un programa del servidor

Tras crear el archivo XPCML debe crear un objeto ProgramCallDocument que pueda emplear lasespecificaciones XPCML y los valores de datos para llamar a un programa del servidor IBM i

354 IBM Toolbox para Java IBM Toolbox para Java

Cree un objeto ProgramCallDocument XPCML pasando el nombre del archivo XPCML en el constructorProgramCallDocument Al crear un objeto ProgramCallDocument XPCML de este modo primero seanaliza y valida el documento XPCML y despueacutes se crea el objeto ProgramCallDocument

Para analizar y validar el documento XPCML aseguacuterese de que la CLASSPATH contiene un analizadorXML de plena validacioacuten Encontraraacute maacutes informacioacuten sobre los requisitos para ejecutar XPCML en estapaacutegina

ldquoRequisitos de uso de XPCMLrdquo en la paacutegina 332

El ejemplo siguiente muestra coacutemo se crea un objeto ProgramCallDocument para el archivo XPCMLmyXPCMLxpcml

system = new AS400() Cree un objeto ProgramCallDocument en el que se analizaraacute el archivoProgramCallDocument xpcmlDoc =

new ProgramCallDocument(system myXPCMLxpcml)

La uacutenica diferencia entre crear un objeto ProgramCallDocument XPCML y un objetoProgramCallDocument PCML es que se pasa al constructor un documento XPCML en lugar de undocumento PCML

Nota debe especificar xpcml como la extensioacuten de archivo de los archivos XPCML Con el uso de laextensioacuten de archivo xpcml se garantiza que la clase ProgramCallDocument reconoceraacute el archivo comoXPCML De no especificarse ninguna extensioacuten ProgramCallDocument supondraacute que el archivo esPCML

Utilizar XPCML para llamar a un programa del servidor

Tras crear el objeto ProgramCallDocument utilice cualquiera de los meacutetodos de la claseProgramCallDocument para trabajar con el documento XPCML Por ejemplo llame a un programa deIBM i mediante ProgramCallDocumentcallProgram() o cambie el valor de un paraacutemetro de entradaXPCML antes de llamar al programa del servidor mediante el meacutetodo ProgramCallDocumentsetValuecorrespondiente

El ejemplo siguiente muestra coacutemo se crea un objeto ProgramCallDocument para un archivo XPCML(denominado myXPCMLxpcml) Tras crear el objeto ProgramCallDocument el ejemplo llama a unprograma (PROG1) especificado en el documento XPCML En este caso la uacutenica diferencia entre utilizarXPCML y PCML es que el ejemplo pasa un archivo XPCML al constructor ProgramCallDocument

Una vez que la aplicacioacuten lee y analiza un documento XPCML el documento XPCML funcionaexactamente igual que un documento PCML En este momento XPCML puede emplear cualquiera de losmeacutetodos existentes que utiliza PCML

system = new AS400()

Cree un objeto ProgramCallDocument en el que se analizaraacute el archivoProgramCallDocument xpcmlDoc = new ProgramCallDocument(system myXPCMLxpcml)

Llame a PROG1boolean rc = xpcmlDoccallProgram(PROG1)

Obtener los resultados de una llamada a programa en formato de XPCML

Tras llamar a un programa del servidor puede emplear los meacutetodos ProgramCallDocumentgetValue pararecuperar los objetos Java que representan los valores de paraacutemetros del programa

Asimismo los siguientes meacutetodos generateXPCML permiten a ProgramCallDocument devolver losresultados de una llamada a programa en formato de XPCML

IBM Toolbox para Java 355

v generateXPCML(String fileName) genera resultados en formato de XPCML para todo el archivo fuenteXPCML empleado para construir el objeto ProgramCallDocument Almacena el fuente XPCML en unarchivo con el nombre de archivo especificado

v generateXPCML(String pgmName String fileName) genera resultados en formato de XPCMLuacutenicamente para el programa especificado y sus paraacutemetros Almacena el fuente XPCML en un archivocon el nombre de archivo especificado

v generateXPCML(javaioOutputStream outputStream) genera resultados en formato de XPCML paratodo el archivo fuente XPCML Almacena el fuente XPCML en el objeto OutputStream especificado

v generateXPCML(String pgmName javaioOutputStream outputStream) genera resultados en formatode XPCML uacutenicamente para el programa especificado y sus paraacutemetros Almacena el fuente XPCML enel objeto OutputStream especificado

Para obtener maacutes informacioacuten sobre la clase ProgramCallDocument consulte la informacioacuten del JavadocProgramCallDocument

El ejemplo siguiente muestra coacutemo se puede construir un objeto ProgramCallDocument XPCML llamar aun programa de IBM i y recuperar los resultados de la llamada a programa en formato de XPCML

ldquoEjemplo recuperar los resultados de una llamada a programa en formato de XPCMLrdquo en la paacutegina577

Informacioacuten relacionadaJavadoc ProgramCallDocument

Pasar valores de paraacutemetros como XPCML

Puede establecer los valores de los paraacutemetros de programas en el archivo fuente XPCML y pasar losvalores de paraacutemetros como XPCML

Cuando el objeto ProgramCallDocument lee y analiza el documento XPCML automaacuteticamente llama almeacutetodo setValue adecuado para cada paraacutemetro especificado en el fuente XPCML

El uso de XPCML para pasar valores de paraacutemetros hace innecesario tener que escribir coacutedigo Java queestablezca los valores de complejas estructuras y matrices

En los ejemplos siguientes se muestran diversas formas de construir matrices y pasar valores deparaacutemetros como XPCML

ldquoEjemplo pasar valores de paraacutemetros como XPCMLrdquo en la paacutegina 580

ldquoEjemplos pasar matrices de valores de paraacutemetros como XPCMLrdquo en la paacutegina 581

Coacutemo se utiliza fuente XPCML condensado

Como XPCML es ampliable se pueden definir nuevos tipos de paraacutemetros que ampliacuteen los especificadospor el esquema XPCML Al condensar XPCML se ampliacutea el esquema XPCML para crear nuevasdefiniciones de tipos de datos que simplifican y mejoran las posibilidades de lectura y uso de losdocumentos XPCML

En la informacioacuten siguiente se supone que el lector entiende el esquema XPCML Encontraraacute maacutesinformacioacuten sobre el esquema XPCML en esta paacutegina

ldquoEsquema y sintaxis XPCMLrdquo en la paacutegina 333

Para condensar fuente XPCML ya existente debe utilizar el meacutetodoProgramCallDocumentcondenseXPCML que genera lo siguiente

356 IBM Toolbox para Java IBM Toolbox para Java

v Un esquema ampliado que contiene nuevas definiciones de tipo para cada uno de los paraacutemetros delfuente XPCML existente

v Nuevo fuente XPCML que utiliza las definiciones de tipo proporcionadas en el esquema ampliado

Encontraraacute maacutes informacioacuten sobre coacutemo condensar el fuente XPCML en estas paacuteginas

ldquoCondensar documentos XPCML existentesrdquo

ldquoEjemplo coacutemo se utiliza fuente XPCML condensado para crear un objeto ProgramCallDocumentrdquoen la paacutegina 586

ldquoEjemplo obtener los resultados de una llamada a programa en formato de XPCML condensadordquo enla paacutegina 586

Condensar documentos XPCML existentes

Al condensar documentos XPCML ya existentes se obtiene un fuente XPCML maacutes faacutecil de leer y utilizarPara crear fuente XPCML condensado utilice el meacutetodo ProgramCallDocumentcondenseXPCML

Para llamar a condenseXPCML() proporcione los siguientes paraacutemetros al meacutetodov Una corriente de entrada que representa el fuente XPCML existentev Una corriente de salida que representa el fuente XPCML condensadov Una corriente de salida que representa el nuevo esquema ampliadov Un nombre para el nuevo esquema en el formato adecuado (por ejemplo mySchemaxsd)

Para obtener maacutes informacioacuten sobre condenseXPCML() y la clase ProgramCallDocument consulte lainformacioacuten del Javadoc ProgramCallDocument

ProgramCallDocumentcondenseXPCML() es un meacutetodo estaacutetico lo que significa que no es necesariocrear una instancia de un objeto ProgramCallDocument para llamar al meacutetodo

Ejemplos

Los ejemplos siguientes muestran coacutemo se puede condensar un documento XPCML existente

El primer ejemplo es sencillo y contiene el fuente XPCML original el fuente XPCML condensadoobtenido y el esquema ampliado El segundo ejemplo es maacutes largo y complejo y contiene el coacutedigo Javaque llama a condenseXPCML() y a algunas de las nuevas definiciones de tipo generadas del esquemaampliado

ldquoEjemplo condensar un documento XPCML existenterdquo en la paacutegina 583

ldquoEjemplo condensar un documento XPCML existente con coacutedigo Java incluidordquo en la paacutegina 583Informacioacuten relacionadaJavadoc ProgramCallDocument

Identificar errores de anaacutelisis en XPCML

Al validar documentos de esquemas XPCML un analizador XML de plena validacioacuten puede generaravisos errores de anaacutelisis no graves y errores de anaacutelisis graves

Los avisos y errores de anaacutelisis no graves no impiden la ejecucioacuten del anaacutelisis Puede resultarle uacutetilexaminar los avisos y errores de anaacutelisis no graves para determinar los problemas existentes en el fuenteXPCML Los errores de anaacutelisis graves hacen que el anaacutelisis se interrumpa con una excepcioacuten

IBM Toolbox para Java 357

Para ver los avisos y errores del analizador no graves al analizar un documento XPCML active el rastreoen la aplicacioacuten y establezca la categoriacutea de rastreo en PCML

Ejemplo

Un analizador XML de plena validacioacuten genera un error para los tipos de paraacutemetros numeacutericos que notienen ninguacuten valor El ejemplo siguiente muestra un fuente XPCML de ejemplo y el error de anaacutelisis nograve obtenido

Fuente XPCMLltprogram name=prog1gt

ltparameterListgtltintParm name=parm1gt

ltparameterListgtltprogramgt

Error obtenidoTue Mar 25 152144 CST 2003 [Error] cvc-complex-type22 El elementorsquointParmrsquo no puede tener ninguacuten elemento [hijo] y el valor debe ser vaacutelido

Para evitar que se anote este tipo de error antildeada el atributo nil=true al elemento intParm El atributonil=true indica al analizador que el elemento se ha dejado vaciacuteo deliberadamente Vea el fuente XPCMLanterior una vez antildeadido el atributo nil=true

ltprogram name=prog1gtltparameterListgt

ltintParm xsinil=true name=parm1gtltparameterListgt

ltprogramgt

Preguntas habituales (FAQ)Las preguntas habituales (FAQ) de IBM Toolbox para Java dan respuesta a cuestiones relacionadas con laoptimizacioacuten del rendimiento de IBM Toolbox para Java la resolucioacuten de problemas la utilizacioacuten deJDBC y otros temas

v Preguntas frecuentes de IBM Toolbox para Java encuentre la respuesta a muchos tipos depreguntas entre ellas coacutemo mejorar el rendimiento utilizar IBM i solucionar los problemas etc

v Preguntas frecuentes de JDBC de IBM Toolbox para Java Encuentre respuestas relativas a lautilizacioacuten de JDBC con IBM Toolbox para Java

Consejos para la programacioacutenEn este apartado se ofrecen diversos consejos que pueden ayudarle a utilizar IBM Toolbox para Java

Coacutemo concluir el programa JavaPara asegurarse de que el programa concluye de manera adecuada emita Systemexit(0) como uacuteltimainstruccioacuten antes de que finalice el programa Java

Nota evite utilizar Systemexit(0) con servlets ya que ello concluye toda la maacutequina virtual Java

IBM Toolbox para Java se conecta al servidor con hebras de usuario Por ello de no emitirseSystemexit(0) puede que el programa Java no concluya debidamente

Utilizar Systemexit(0) no es un requisito imprescindible sino una precaucioacuten En ocasiones deberaacuteutilizar este mandato para salir de un programa Java y en cambio no es problemaacutetico utilizarSystemexit(0) cuando no es necesario

358 IBM Toolbox para Java IBM Toolbox para Java

Nombres de viacutea de acceso del sistema de archivos integrado paraobjetos de servidorEl programa Java debe utilizar nombres del sistema de archivos integrado para hacer referencia a objetosdel servidor como pueden ser programas bibliotecas mandatos o archivos en spool El nombre desistema de archivos integrado es el nombre de un objeto de servidor tal como se podriacutea acceder a eacutel en elsistema de archivos de biblioteca del sistema de archivos integrado en IBM i

El nombre de viacutea de acceso puede constar de los siguientes componentes

Componente del nombre de viacutea de acceso Descripcioacuten

biblioteca La biblioteca en la que reside el objeto La biblioteca esuna parte obligatoria de un nombre de viacutea de acceso delsistema de archivos integrado El nombre de la bibliotecadebe tener 10 caracteres como maacuteximo seguidos de lib

objeto El nombre del objeto representado por el nombre de laviacutea de acceso del sistema de archivos integrado El objetoes una parte obligatoria de un nombre de viacutea de accesodel sistema de archivos integrado El nombre del objetodebe tener 10 caracteres como maacuteximo seguidos de tiposiendo tipo el tipo del objeto Para encontrar los valoresposibles de tipo pulse la tecla Solicitud para elparaacutemetro OBJTYPE en los mandatos CL (lenguaje decontrol) como por ejemplo en el mandato Trabajar conobjetos (WRKOBJ)

tipo El tipo del objeto El tipo se ha de especificar a la vezque el objeto (Veacutease objeto maacutes arriba) El nombre deltipo debe tener 6 caracteres como maacuteximo

miembro El nombre del miembro representado por este nombre deviacutea de acceso del sistema de archivos integrado Elmiembro es una parte opcional de un nombre de viacutea deacceso del sistema de archivos integrado Uacutenicamentepuede especificarse cuando el tipo de objeto es FILE Elnombre del miembro debe tener 10 caracteres comomaacuteximo seguidos de mbr

Al determinar y especificar el nombre del sistema de archivos integrado tenga en cuenta estascondicionesv El caraacutecter separador de la viacutea de acceso es la barra inclinada hacia delante ()v El directorio de nivel raiacutez llamado QSYSLIB contiene la estructura de bibliotecas del servidorv Los objetos que residen en la biblioteca QSYS del servidor tienen este formato

QSYSLIBobjetotipo

v Los objetos que residen en otras bibliotecas tienen este formatoQSYSLIBbibliotecaLIBobjetotipo

v La extensioacuten del tipo de objeto es la abreviatura del servidor que se utiliza para ese tipo de objeto

Si desea ver una lista de estos tipos entre un mandato CL que tenga el paraacutemetro de tipo de objeto ypulse F4 (Solicitud) para obtener los valores de tipo Por ejemplo el mandato Trabajar con objetos(WRKOBJ) tiene un paraacutemetro de tipo de objeto

La tabla siguiente muestra una lista de los tipos de objeto maacutes utilizados y la abreviatura correspondientea cada tipo

IBM Toolbox para Java 359

Tipo de objeto Abreviatura

mandato CMD

cola de datos DTAQ

archivo FILE

recurso de fonts FNTRSC

definicioacuten de formulario FORMDF

biblioteca LIB

miembro MBR

preformato OVL

definicioacuten de paacutegina PAGDFN

segmento de paacutegina PAGSET

programa PGM

cola de salida OUTQ

archivo en spool SPLF

Las descripciones siguientes pueden ayudarle a determinar coacutemo se especifican los nombres de viacutea deacceso del sistema de archivos integrado

Nombre de sistema de archivos integrado Descripcioacuten

QSYSLIBMI_BIBLLIBMI_PROGPGM Programa MI_PROG de la biblioteca MI_BIBL delservidor

QSYSLIBMI_BIBLLIBMI_COLADTAQ Cola de datos MI_COLA de la biblioteca MI_BIBL delservidor

QSYSLIBANtildeO1998LIBMESFILEJULIOMBR Miembro JULIO del archivo MES de la bibliotecaANtildeO1998 del servidor

Valores especiales del sistema de archivos integrado

Diversas clases de IBM Toolbox para Java reconocen valores especiales en los nombres de viacutea de accesodel sistema de archivos integrado El formato tradicional de estos valores especiales (tal como se utilizanen una liacutenea de mandatos de IBM i) empieza con un asterisco (ALL) Sin embargo en un programa Javaque utiliza las clases de IBM Toolbox para Java el formato de estos valores especiales empieza y terminacon signos de porcentaje (ALL)

Nota en el sistema de archivos integrado un asterisco es un caraacutecter comodiacuten

La tabla siguiente muestra cuaacuteles de estos valores especiales reconocen las clases de IBM Toolbox paraJava para componentes especiacuteficos del nombre de viacutea de acceso Asimismo la tabla indica coacutemo variacutea elformato tradicional de estos valores especiales respecto del formato empleado en las clases de IBMToolbox para Java

360 IBM Toolbox para Java IBM Toolbox para Java

Componente del nombre de viacutea deacceso Formato tradicional Formato de IBM Toolbox para Java

Nombre de biblioteca ALL ALL

ALLUSR ALLUSR

CURLIB CURLIB

LIBL LIBL

USRLIBL USRLIBL

Nombre de objeto ALL ALL

Nombre de miembro ALL ALL

FILE FILE

FIRST FIRST

LAST LAST

En la clase QSYSObjectPathName encontraraacute informacioacuten sobre coacutemo se construyen y analizan losnombres del sistema de archivos integrado

Para obtener maacutes informacioacuten sobre los conceptos del sistema de archivos integrado consulte losconceptos del sistema de archivos integrado

Gestionar conexiones en programas JavaEs importante poder crear iniciar y finalizar conexiones con el servidor La informacioacuten siguiente describeconceptos fundamentales para la gestioacuten de las conexiones con el servidor y facilita tambieacuten algunosejemplos de coacutedigo

Para conectarse a un servidor IBM i el programa Java debe crear un objeto AS400 El objeto AS400contiene como maacuteximo una conexioacuten por socket para cada tipo de servidor IBM i Un serviciocorresponde a un trabajo del servidor y hace de interfaz con los datos del servidor

Nota cuando cree Enterprise JavaBeans (EJB) debe cumplir la especificacioacuten EJB que no permite hebrasdurante la conexioacuten Aunque al desactivar el soporte para hebras de IBM Toolbox para Java la aplicacioacutenpuede ir maacutes lenta es necesario cumplir la especificacioacuten EJB

Toda conexioacuten con cada uno de los servidores tiene su propio trabajo en el sistema Hay un servidordistinto para cada uno de estos elementosv JDBCv Llamada a programa y llamada a mandatov Sistema de archivos integradov Imprimirv Cola de datosv Acceso a nivel de registro

Nota

v Las clases de impresioacuten utilizan una conexioacuten por socket por objeto AS400 si la aplicacioacuten no intentarealizar dos tareas que requieran el servidor de impresioacuten de red a la vez

v Una clase de impresioacuten crea de ser necesario conexiones por socket adicionales con el servidor deimpresioacuten de red Las conversaciones adicionales se desconectan si no se utilizan durante 5 minutos

IBM Toolbox para Java 361

El programa Java puede controlar el nuacutemero de conexiones con el sistema Para optimizar el rendimientode las comunicaciones un programa Java puede crear varios objetos AS400 para el mismo servidor talcomo se muestra en la figura 1 De este modo se crean varias conexiones por socket con el sistema

Figura 1 programa Java que crea muacuteltiples objetos AS400 y conexiones por socket para el mismosistema

Para conservar los recursos del servidor cree uacutenicamente un objeto AS400 tal como se muestra en lafigura 2 Este procedimiento reduce el nuacutemero de conexiones lo que a su vez reduce la cantidad derecursos utilizados en el servidor

Figura 2 programa Java que crea un solo objeto AS400 y una uacutenica conexioacuten por socket para el mismosistema

362 IBM Toolbox para Java IBM Toolbox para Java

Nota aunque al crear maacutes conexiones aumenta la cantidad de recursos utilizados en el servidor elhecho de crear maacutes conexiones puede aportar una ventaja Al tener maacutes conexiones el programa Javapuede efectuar varios procesos en paralelo lo que permite conseguir una mejor productividad (nuacutemerode transacciones por segundo) y una mayor velocidad de la aplicacioacuten

Tambieacuten puede elegir utilizar una agrupacioacuten de conexiones para gestionar las conexiones como semuestra en la figura 3 Este enfoque reduce la cantidad de tiempo que se tarda en conectarse al reutilizaruna conexioacuten establecida anteriormente para el usuario

Figura 3 programa Java que obtiene una conexioacuten de un objeto AS400ConnectionPool a un servidor

IBM Toolbox para Java 363

Los ejemplos que hay a continuacioacuten muestran coacutemo se crean y utilizan los objetos AS400

Ejemplo 1 en este ejemplo se crean dos objetos CommandCall que enviacutean mandatos al mismo servidorComo los objetos CommandCall utilizan el mismo objeto AS400 solamente se crea una conexioacuten con elservidor

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree dos objetos llamada a mandato que utilicen el mismo objeto AS400CommandCall cmd1 = new CommandCall(sysmyCommand1)CommandCall cmd2 = new CommandCall(sysmyCommand2)

Ejecute los mandatos Se establece una conexioacuten cuando se ejecuta el primer mandato Como los dos mandatos emplean el mismo objeto AS400 el segundo objeto mandato emplearaacute la conexioacuten establecida por el primerocmd1run()cmd2run()

Ejemplo 2 en este ejemplo se crean dos objetos CommandCall que enviacutean mandatos al mismo sistemaComo los objetos CommandCall utilizan distintos objetos AS400 se crean dos conexiones con el servidor

Cree dos objetos AS400 para el mismo servidorAS400 sys1 = new AS400(mySystemmyCompanycom)AS400 sys2 = new AS400(mySystemmyCompanycom)

Cree dos objetos llamada a mandato Utilizan distintos objetos AS400CommandCall cmd1 = new CommandCall(sys1myCommand1)CommandCall cmd2 = new CommandCall(sys2myCommand2)

Ejecute los mandatos Se establece una conexioacuten cuando se ejecuta el primer mandato Como el segundo objeto mandato utiliza un objeto AS400 distinto se establece una segunda conexioacuten cuando se ejecuta el segundo mandatocmd1run()cmd2run()

364 IBM Toolbox para Java IBM Toolbox para Java

Ejemplo 3 en este ejemplo se crean un objeto CommandCall y un objeto IFSFileInputStream que utilizanun mismo objeto AS400 Dado que el objeto CommandCall y el objeto IFSFileInputStream empleandistintos servicios del servidor se crean dos conexiones

Cree un objeto AS400AS400 newConn1 = new AS400(mySystemmyCompanycom)

Cree un objeto de llamada a mandatoCommandCall cmd = new CommandCall(newConn1myCommand1)

Cree el objeto de archivo Por el hecho de crearlo el objeto AS400 se conecta al servicio de archivosIFSFileInputStream file = new IFSFileInputStream(newConn1myfile)

Ejecute el mandato Se establece una conexioacuten con el servicio de mandatos al ejecutarse el mandatocmdrun()

Ejemplo 4 en este ejemplo se utiliza un objeto AS400ConnectionPool para obtener una conexioacuten de IBMi Este ejemplo (como el ejemplo 3 anterior) no especifica ninguacuten servicio por lo que la conexioacuten con elservicio de mandatos se establece cuando se ejecuta el mandato

Cree una AS400ConnectionPoolAS400ConnectionPool testPool1 = new AS400ConnectionPool()

Cree una conexioacutenAS400 newConn1 = testPool1getConnection(myAS400 myUserID myPassword)

Cree un objeto de llamada a mandato que utilice el objeto AS400CommandCall cmd = new CommandCall(newConn1myCommand1)

Ejecute el mandato Se establece una conexioacuten con el servicio de mandatos al ejecutarse el mandatocmdrun()

Devuelva la conexioacuten a la agrupacioacutentestPool1returnConnectionToPool(newConn1)

Ejemplo 5en este ejemplo se utiliza AS400ConnectionPool para conectarse a un servicio concreto alsolicitar la conexioacuten de la agrupacioacuten Esto elimina el tiempo necesario para conectarse al servicio cuandose ejecuta el mandato (veacutease el ejemplo 4 anterior) Si la conexioacuten se devuelve a la agrupacioacuten lasiguiente llamada para obtener una conexioacuten puede devolver el mismo objeto de conexioacuten Esto significaque no es necesario ninguacuten tiempo de conexioacuten adicional ni de creacioacuten ni de uso

Cree una AS400ConnectionPoolAS400ConnectionPool testPool1 = new AS400ConnectionPool()

Cree una conexioacuten con el servicio AS400COMMAND (Emplee las constantes de nuacutemero de servicio definidas en la clase AS400 (FILE PRINT COMMAND DATAQUEUE etceacutetera))AS400 newConn1 = testPool1getConnection(myAS400 myUserID myPassword AS400COMMAND)

Cree un objeto de llamada a mandato que utilice el objeto AS400CommandCall cmd = new CommandCall(newConn1myCommand1)

Ejecute el mandato Ya se ha establecido una conexioacuten con el servicio de mandatoscmdrun()

Devuelva la conexioacuten a la agrupacioacutentestPool1returnConnectionToPool(newConn1)

Obtenga otra conexioacuten con el servicio de mandatos En este caso devolveraacute la misma conexioacuten que anteriormente con lo que se evita el tiempo de conexioacuten adicional tanto ahora como cuando se utiliza el servicio de mandatosAS400 newConn2 = testPool1getConnection(myAS400 myUserID myPassword AS400COMMAND)

IBM Toolbox para Java 365

Inicio y finalizacioacuten de las conexiones

El programa Java puede controlar cuaacutendo se inicia una conexioacuten y cuaacutendo se finaliza De formapredeterminada el inicio de una conexioacuten se lleva a cabo en el momento en que se necesita informacioacutendel servidor Para controlar exactamente cuaacutendo se establece la conexioacuten puede efectuar una llamada almeacutetodo connectService() en el objeto AS400 para preconectarse al servidor

Con un objeto AS400ConnectionPool puede crear una conexioacuten preconectada a un servicio sin efectuarninguna llamada al meacutetodo connectService() como se muestra en el Ejemplo 5 anterior

Los ejemplos que figuran a continuacioacuten muestran programas Java que se conectan al sistema y sedesconectan de eacutel

Ejemplo 1 este ejemplo muestra coacutemo se hace la preconexioacuten con el sistema Cree un objeto AS400AS400 system1 = new AS400(mySystemmyCompanycom)

Coneacutectese al servicio de mandatos Haacutegalo ahora en lugar de en el momento de enviar por primera vez los datos al servicio de mandatos Es una accioacuten opcional porque el objeto AS400 se conectaraacute cuando sea necesariosystem1connectService(AS400COMMAND)

Ejemplo 2 una vez iniciada una conexioacuten el programa Java es responsable de la desconexioacutenefectuaacutendola impliacutecitamente el objeto AS400 o expliacutecitamente el propio programa Java Un programaJava efectuacutea la desconexioacuten realizando una llamada al meacutetodo disconnectService() en el objeto AS400Para aumentar el rendimiento el programa Java deberaacute desconectarse uacutenicamente cuando hayaterminado de utilizar un servicio Si el programa Java se desconecta antes de haber terminado de utilizarun servicio el objeto AS400 se reconecta si es posible la reconexioacuten cuando se necesitan datos delservicio

La figura 4 muestra coacutemo la accioacuten de desconectar la conexioacuten correspondiente a la primera conexioacuten delobjeto de sistema de archivos integrado solo finaliza esa instancia individual de la conexioacuten del objetoAS400 no todas las conexiones de objeto de sistema de archivos integrado

Figura 4 se desconecta un objeto individual que utiliza su propio servicio de una instancia de unobjeto AS400

366 IBM Toolbox para Java IBM Toolbox para Java

Este ejemplo muestra coacutemo el programa Java desconecta una conexioacuten Cree un objeto AS400AS400 system1 = new AS400(mySystemmyCompanycom)

Utilice la llamada a mandato para enviar varios mandatos al servidor Debido a que no se ha llamado a connectService() el objeto AS400 se conecta automaacuteticamente al ejecutarse el primer mandato

Al terminar de enviar todos los mandatos desconecte la conexioacutensystem1disconnectService(AS400COMMAND)

Ejemplo 3 varios objetos que utilizan el mismo servicio y comparten el mismo objeto AS400 compartenuna conexioacuten La desconexioacuten finaliza la conexioacuten para todos los objetos que utilizan el mismo serviciode cada instancia de un objeto AS400 como se muestra en la figura 5

Figura 5 se desconectan todos los objetos que utilizan el mismo servicio de una instancia de un objetoAS400

IBM Toolbox para Java 367

Por ejemplo supongamos que dos objetos CommandCall utilizan el mismo objeto AS400 Cuando sellama a disconnectService() la conexioacuten finaliza para los dos objetos CommandCall Cuando se llama almeacutetodo run() para el segundo objeto CommandCall el objeto AS400 debe reconectarse al servicio

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree dos objetos llamada a mandatoCommandCall cmd1 = new CommandCall(sysmyCommand1)CommandCall cmd2 = new CommandCall(sysmyCommand2)

Ejecute el primer mandatocmd1run()

Desconeacutectese del servicio de mandatossysdisconnectService(AS400COMMAND)

Ejecute el segundo mandato El objeto AS400 debe volver a conectarse al servidorcmd2run()

Desconeacutectese del servicio de mandatos Este es el lugar correcto para desconectarsysdisconnectService(AS400COMMAND)

Ejemplo 4 no todas las clases de IBM Toolbox para Java se reconectan automaacuteticamente Algunasllamadas a meacutetodo en las clases del sistema de archivos integrado no se reconectan porque el archivopuede haber cambiado Mientras el archivo estaba desconectado alguacuten otro proceso puede habersuprimido el archivo o cambiado su contenido En este ejemplo hay dos objetos archivo que utilizan elmismo objeto AS400 Cuando se llama a disconnectService() la conexioacuten finaliza para los dos objetosarchivo El meacutetodo read() para el segundo objeto IFSFileInputStream falla porque ha dejado de tener unaconexioacuten con el servidor

368 IBM Toolbox para Java IBM Toolbox para Java

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree dos objetos archivo Se crea una conexioacuten con el servidor cuando se crea el primer objeto El segundo objeto utiliza la conexioacuten creada por el primer objetoIFSFileInputStream file1 = new IFSFileInputStream(sysfile1)IFSFileInputStream file2 = new IFSFileInputStream(sysfile2)

Lea en el primer archivo y despueacutes cieacuterreloint i1 = file1read()file1close()

Desconeacutectese del servicio de archivossysdisconnectService(AS400FILE)

Intente leer en el segundo archivo Este intento falla debido a que la conexioacuten con el servicio de archivos ha dejado de existir El programa deberiacutea haber desconectado maacutes tarde o hacer que el segundo archivo utilizase otro objeto AS400 (y asiacute el archivo tendriacutea su propia conexioacuten)int i2 = file2read()

Cierre el segundo archivofile2close()

Desconeacutectese del servicio de archivos Este es el lugar correcto para desconectarsysdisconnectService(AS400FILE)

Maacutequina virtual Java de IBM iLas clases de IBM Toolbox para Java se ejecutan en la maacutequina virtual Java (JVM) de IBM Developer Kitpara Java (IBM i)

En realidad las clases se ejecutan en cualquier plataforma que deacute soporte a las especificaciones Java 2Software Development Kit (J2SDK)

Para obtener maacutes informacioacuten acerca del soporte de IBM i para las distintas plataformas Java consulteSoporte para varios JDK

Comparacioacuten de la maacutequina virtual Java de IBM i y las clases de IBM Toolbox paraJavaSiempre dispone de al menos dos maneras de acceder a un recurso del servidor cuando el programa Javase ejecuta en IBM Developer Kit para Java maacutequina virtual Java (JVM) de IBM i)

Puede utilizar una de estas dos interfacesv Servicios integrados en Javav Una clase IBM Toolbox para Java

A la hora de decidir queacute interfaz debe utilizar tenga en cuenta estos factoresv Ubicacioacuten - El lugar de la ejecucioacuten del programa es el factor maacutes importante a la hora de decidir queacute

conjunto de interfaces se ha de utilizar El programandash iquestSolo se ejecuta en el clientendash iquestSolo se ejecuta en el servidorndash iquestSe ejecuta en el cliente y en el servidor pero el recurso es en los dos casos un recurso de IBM indash iquestSe ejecuta en una JVM de IBM i y accede a los recursos de otro servidor IBM indash iquestSe ejecuta en servidores de distinto tipo

IBM Toolbox para Java 369

Si el programa se ejecuta en el cliente y en el servidor (incluido el caso en que un servidor IBM i seacliente de un segundo servidor IBM i) y solo accede a recursos del IBM i puede ser mejor utilizar lasinterfaces de IBM Toolbox para JavaSi el programa debe acceder a datos existentes en servidores de muchos tipos puede ser mejor utilizarlas interfaces Java nativas

v Coherencia Portabilidad - La capacidad de ejecutar clases de IBM Toolbox para Java en el servidorIBM i significa que pueden utilizarse las mismas interfaces para los programas clientes y los programasservidores Cuando uacutenicamente se tiene que aprender coacutemo funciona una sola interfaz para losprogramas clientes y los programas servidores se puede ser maacutes productivoSin embargo escribir en interfaces de IBM Toolbox para Java hace que el programa sea menos portableentre servidoresSi el programa debe conectarse a un servidor IBM i ademaacutes de a otros servidores tal vez sea mejorutilizar los servicios integrados en Java

v Complejidad - La interfaz de IBM Toolbox para Java se ha construido especialmente para proporcionarun acceso faacutecil a un recurso de IBM i Con frecuencia el uso de la interfaz de IBM Toolbox para Javatiene como uacutenica alternativa la escritura de un programa que acceda al recurso y se comunique con eseprograma mediante la interfaz Java nativa (JNI)Debe decidir queacute es maacutes importante gozar de una mayor neutralidad Java y escribir un programa paraacceder al recurso o utilizar la interfaz de IBM Toolbox para Java que es menos portable

v Funciones - La interfaz de IBM Toolbox para Java suele proporcionar maacutes funciones que la interfaz deJava Por ejemplo la clase IFSFileOutputStream de IBM Toolbox para Java tiene maacutes funciones que laclase FileOutputStream de javaio No obstante la portabilidad entre servidores seraacute menor si se utilizala clase de IBM Toolbox para JavaDebe decidir si es maacutes importante la portabilidad o si prefiere beneficiarse de las funciones adicionales

v Recursos - Al ejecutarse en la JVM de IBM i muchas de las clases de IBM Toolbox para Java siguenefectuando peticiones mediante los servidores de host Por lo tanto hay un segundo trabajo (el trabajoservidor) que lleva a cabo la peticioacuten de acceder a un recursoEsta peticioacuten puede emplear maacutes recursos que una interfaz Java nativa que se ejecute bajo el trabajodel programa Java

v Servidor IBM i como cliente - Si el programa se ejecuta en un servidor IBM i y accede a los datosexistentes en un segundo servidor IBM i la mejor solucioacuten seriacutea utilizar las clases de IBM Toolbox paraJava Estas clases proporcionan un acceso faacutecil al recurso existente en el segundo servidor IBM iEjemplo de ello es el acceso a las colas de datos Las interfaces DataQueue de IBM Toolbox para Javaproporcionan un acceso faacutecil al recurso de cola de datos

Ejecutar las clases de IBM Toolbox para Java en la maacutequina virtual Java de IBM iA continuacioacuten figuran algunas consideraciones especiales que deben tenerse en cuenta al ejecutar lasclases de IBM Toolbox para Java en la maacutequina virtual Java (JVM) de IBM Developer Kit para Java (IBMi)

Llamada a mandato

Una llamada a un mandato se puede realizar de estas dos maneras comunesv La clase CommandCall de IBM Toolbox para Javav El meacutetodo javalangRuntimeexec

La clase CommandCall genera una lista de los mensajes que estaacuten disponibles para el programa Java unavez completado el mandato Mediante javalangRuntimeexec() la lista de mensajes no estaacute disponible

El meacutetodo javalangRuntimeexec es portable entre muchas plataformas de modo que si el programadebe acceder a archivos existentes en servidores de distintos tipos javalangRuntimeexec() es una mejorsolucioacuten

370 IBM Toolbox para Java IBM Toolbox para Java

Sistema de archivos integrado

Formas comunes de acceder a un archivo del sistema de archivos integrado de IBM iv Las clases IFSFile de IBM Toolbox para Javav Con las clases archivo que forman parte de javaio

Las clases del sistema de archivos integrado de IBM Toolbox para Java tienen la ventaja de queproporcionan maacutes funciones que las clases de javaio Las clases de IBM Toolbox para Java tambieacutenfuncionan en los applets y no necesitan un meacutetodo de redireccioacuten (como IBM i Access para Windows)para acceder al servidor desde una estacioacuten de trabajo

Las clases de javaio son portables entre muchas plataformas lo que es una ventaja Si el programa debeacceder a archivos existentes en servidores de distintos tipos javaio es una solucioacuten mejor

Si utiliza las clases de javaio en un cliente necesitaraacute un meacutetodo de redireccioacuten (como IBM i Access paraWindows) para acceder al sistema de archivos del servidor

JDBC

Estaacuten disponibles dos controladores JDBC suministrados por IBM para los programas que se ejecutan enla JVM de IBM iv El controlador JDBC de IBM Toolbox para Javav El controlador JDBC de IBM Developer Kit para Java

Es mejor utilizar el controlador JDBC de IBM Toolbox para Java cuando el programa se ejecuta en unentorno de clienteservidor

Es mejor utilizar el controlador JDBC de IBM Developer Kit para Java cuando el programa se ejecuta enel servidor

Si un mismo programa se ejecuta en la estacioacuten de trabajo y en el servidor debe cargar el controladorcorrecto mediante una propiedad del sistema en vez de codificar el nombre del controlador en elprograma

Llamada a programa

Una llamada a programa se puede realizar de estas dos maneras comunesv La clase ProgramCall de IBM Toolbox para Javav Mediante una llamada a JNI (Java Native Interface)

La clase ProgramCall de IBM Toolbox para Java tiene la ventaja de que puede efectuar llamadas acualquier programa del servidor

Mediante JNI tal vez no pueda efectuar una llamada al programa del servidor Una ventaja de JNI es queofrece maacutes portabilidad entre plataformas de servidor

Establecer el nombre del sistema el ID de usuario y la contrasentildea con un objetoAS400 en la maacutequina virtual Java de IBM iEl objeto AS400 admite valores especiales para el nombre del sistema el ID de usuario y la contrasentildeacuando el programa Java se ejecuta en la maacutequina virtual Java (JVM) de IBM Toolbox para Java (IBM i)

Cuando ejecute un programa en la JVM de IBM i tenga en cuenta algunos valores especiales y otrasconsideraciones

IBM Toolbox para Java 371

v La solicitud de ID de usuario y contrasentildea queda inhabilitada cuando el programa se ejecuta en elservidor Para obtener maacutes informacioacuten acerca de los valores de ID de usuario y contrasentildea en elentorno servidor veacutease Resumen de los valores de ID de usuario y contrasentildea en un objeto AS400

v Si no se ha establecido el nombre del sistema el ID de usuario o la contrasentildea en el objeto AS400 estese conecta al servidor actual mediante el ID de usuario y la contrasentildea del trabajo que inicioacute elprograma Java Al conectarse a una maacutequina cuyo release sea igual o posterior a v4r4 el objeto AS400puede extender la contrasentildea del usuario conectado al igual que el resto de los componentes de IBMToolbox para Java

v Como nombre del sistema se puede utilizar el valor especial localhost En este caso el objeto AS400 seconecta al servidor actual

v El valor especial current puede utilizarse como ID de usuario o contrasentildea en el objeto AS400 Eneste caso se utiliza el ID de usuario o la contrasentildea (o ambos) del trabajo que inicioacute el programa Java

v El valor especial current puede utilizarse como ID de usuario o contrasentildea en el objeto AS400cuando el programa Java se ejecuta en la JVM de IBM i de un servidor y el programa accede a losrecursos existentes en otro servidor IBM i En este caso al conectarse al sistema destino se utiliza el IDde usuario y la contrasentildea del trabajo que inicioacute el programa Java en el sistema origen

Ejemplos

Los ejemplos siguientes muestran coacutemo se utiliza el objeto AS400 con la JVM de IBM i

Ejemplo crear un objeto AS400 cuando la JVM de IBM i ejecuta un programa Java

Cuando un programa Java se ejecuta en la JVM de IBM i el programa no tiene que suministrar unnombre de sistema un ID de usuario o una contrasentildea

Nota es preciso suministrar una contrasentildea cuando se utiliza el acceso a nivel de registro

Si no se suministran estos valores el objeto AS400 se conecta al sistema local utilizando el ID de usuarioy la contrasentildea del trabajo que inicioacute el programa Java

Cuando el programa se ejecuta en la JVM de IBM i establecer el nombre del sistema en localhostequivale a no establecer el nombre del sistema El siguiente ejemplo muestra coacutemo conectarse al servidoractual

Cree dos objetos AS400 Si el programa Java se ejecuta en la JVM de IBM i el comportamiento de ambos objetos es el mismo Se conectaraacuten al servidor actual con el ID de usuario y la contrasentildea del trabajo que inicioacute el programa JavaAS400 sys = new AS400()AS400 sys2 = new AS400(localhost)

Ejemplo conectarse al servidor actual con un ID de usuario y una contrasentildea diferentes de los delprograma que ha iniciado el trabajo El programa Java puede establecer un ID de usuario y unacontrasentildea incluso cuando se ejecuta en la JVM de IBM i Estos valores alteran temporalmente el ID deusuario y la contrasentildea del trabajo que inicioacute el programa Java

En el siguiente ejemplo el programa Java se conecta al servidor actual pero utiliza un ID de usuario yuna contrasentildea distintos de los del trabajo que inicioacute el programa Java

Cree un objeto AS400 Coneacutectese al servidor actual pero no utilice el ID de usuario y la contrasentildea del trabajo que inicioacute el programa Se emplean los valores suministradosAS400 sys = new AS400(localhost USR2 PSWRD2)

Ejemplo conectarse a otro servidor con el ID de usuario y la contrasentildea del trabajo que ha iniciado elprograma Java

372 IBM Toolbox para Java IBM Toolbox para Java

Un programa Java que se ejecuta en un servidor puede conectarse a otros sistemas y utilizar sus recursos

Si se indica current para el ID de usuario y la contrasentildea cuando el programa Java se conecte alservidor destino se utilizaraacute el ID de usuario y la contrasentildea del trabajo que inicioacute el programa Java

En el ejemplo que figura a continuacioacuten el programa Java se ejecuta en un servidor pero utiliza losrecursos de otro servidor Cuando el programa se conecta al segundo servidor se utiliza el ID de usuarioy la contrasentildea del trabajo que inicioacute el programa Java

Cree un objeto AS400 Este programa se ejecutaraacute en un servidor pero se conectaraacute a un segundo servidor (que se llama target) Como se utiliza current para el ID de usuario y la contrasentildea se emplearaacuten el ID de usuario y la contrasentildea del trabajo que inicioacute el programa al conectarse al segundo servidorAS400 target = new AS400(target current current)

Resumen de los valores de ID de usuario y contrasentildea en un objeto AS400

La tabla siguiente muestra un resumen de coacutemo un programa Java que se ejecuta en un servidor manejalos valores de ID de usuario y contrasentildea en un objeto AS400 en comparacioacuten con coacutemo los maneja unprograma Java que se ejecuta en un cliente

Valores en el objeto AS400Programa Java que se ejecuta en unservidor

Programa Java que se ejecuta en uncliente

Nombre del sistema ID de usuario ycontrasentildea no establecidos

Coneacutectese al servidor actualutilizando el ID de usuario y lacontrasentildea del trabajo que inicioacute elprograma

Se solicita el nombre del sistema elID de usuario y la contrasentildea

Nombre del sistema = localhost

Coneacutectese al servidor actualutilizando el ID de usuario y lacontrasentildea del trabajo que inicioacute elprograma

Error localhost no es vaacutelido cuandoel programa Java se estaacute ejecutandoen un cliente

Nombre del sistema = localhost ID deusuario = current

Nombre del sistema = localhost ID deusuario = current ID de contrasentildea =current

Nombre del sistema = sys Coneacutectese al servidor sys utilizandoel ID de usuario y la contrasentildea deltrabajo que inicioacute el programa syspuede ser el servidor actual u otroservidor

Se solicita el ID de usuario y lacontrasentildea

Nombre del sistema = localhost ID deusuario = UID ID de contrasentildea =PWD

Coneacutectese al servidor actualutilizando el ID de usuario y lacontrasentildea especificados por elprograma Java en vez del ID deusuario y la contrasentildea del trabajoque inicioacute el programa

Error localhost no es vaacutelido cuandoel programa Java no se estaacuteejecutando en un cliente

Agrupacioacuten de almacenamiento auxiliar (ASP) independienteUna agrupacioacuten de almacenamiento auxiliar (ASP) independiente es un conjunto de unidades de discosque puede activar o desactivar con independencia del resto del almacenamiento de un sistema

Las ASP independientes pueden contener cualquiera de los elementos siguientesv Uno o varios sistemas de archivos definidos por el usuariov Una o varias bibliotecas externas

IBM Toolbox para Java 373

Cada ASP independiente contiene toda la informacioacuten del sistema necesaria asociada a los datos queposee De este modo mientras el sistema estaacute activo puede desactivar la ASP independiente activarla oconmutar entre sistemas

Para obtener maacutes informacioacuten consulte la informacioacuten acerca de las ASP independientes y las ASP deusuario

Puede emplear la propiedad JDBC database name o el meacutetodo setDatabaseName() de la claseAS400JDBCDataSource para especificar la ASP a la que desea conectarse

Todas las demaacutes clases de IBM Toolbox para Java (IFSFile Print DataQueues etc) utilizan la ASPindependiente especificada por la descripcioacuten de trabajo del perfil de usuario que se conecta al servidor

ExcepcionesLas clases de acceso de IBM Toolbox para Java lanzan excepciones cuando se producen errores dedispositivo limitaciones fiacutesicas errores de programacioacuten o errores de entrada de usuario Las clases deexcepcioacuten se basan en el tipo de error que se produce en vez de basarse en la ubicacioacuten origen del error

La mayor parte de las excepciones contiene la informacioacuten siguientev Tipo de error El objeto de excepcioacuten lanzado indica queacute tipo de error se ha producido Los errores del

mismo tipo se agrupan en una clase de excepcioacutenv Detalles del error La excepcioacuten contiene un coacutedigo de retorno para identificar con maacutes precisioacuten la

causa del error producido Los valores del coacutedigo de retorno son constantes dentro de la clase deexcepcioacuten

v Texto del error La excepcioacuten contiene una serie de caracteres descriptiva del error que se haproducido La serie se traduce al idioma del entorno local de la maacutequina virtual Java del cliente

Ejemplo capturar una excepcioacuten lanzada

El siguiente ejemplo muestra coacutemo capturar una excepcioacuten lanzada recuperar el coacutedigo de retorno yvisualizar el texto de la excepcioacuten

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Todo el trabajo de configuracioacuten para suprimir un archivo en el servidor mediante la clase IFSFile ya se ha terminado Ahora intente suprimir el archivotry

aFiledelete()

La supresioacuten ha falladocatch (ExtendedIOException e)

Visualice la serie traducida que indica la razoacuten por la que ha fallado la supresioacutenSystemoutprintln(e)

Obtenga el coacutedigo de retorno de la excepcioacuten y visualice informacioacuten adicional basada en el coacutedigo de retornoint rc = egetReturnCode()

switch (rc)

case ExtendedIOExceptionFILE_IN_USESystemoutprintln(Supresioacuten anoacutemala archivo en uso )break

374 IBM Toolbox para Java IBM Toolbox para Java

case ExtendedIOExceptionPATH_NOT_FOUNDSystemoutprintln(Supresioacuten anoacutemala viacutea no encontrada )break

Para cada error especiacutefico del que desea efectuar un seguimiento

defaultSystemoutprintln(Supresioacuten anoacutemala rc = )Systemoutprintln(rc)

Clase TraceLa clase Trace permite al programa Java anotar puntos de rastreo y mensajes de diagnoacutestico Estainformacioacuten ayuda a reproducir y a diagnosticar problemas

Nota tambieacuten puede establecer el rastreo mediante las propiedades de rastreo del sistema

La clase Trace anota las siguientes categoriacuteas de informacioacuten

Categoriacutea de informacioacuten Descripcioacuten

Conversioacuten Anota las conversiones de juego de caracteres entre laspaacuteginas de coacutedigos y Unicode Solo utilizan estacategoriacutea las clases de IBM Toolbox para Java

Corriente de datos Anota los datos que fluyen entre el sistema y elprograma Java Solo utilizan esta categoriacutea las clases deIBM Toolbox para Java

Diagnoacutestico Anota informacioacuten sobre el estado

Error Anota errores adicionales que ocasionan una excepcioacuten

Informacioacuten Rastrea el flujo a traveacutes de un programa

PCML Esta categoriacutea se utiliza para determinar coacutemo interpretaPCML los datos que se enviacutean al servidor y que sereciben del mismo

Proxy Las clases de IBM Toolbox para Java utilizan estacategoriacutea para anotar el flujo de datos entre el cliente y elservidor proxy

Aviso Anota informacioacuten acerca de los errores de los que elprograma ha podido recuperarse

Total Esta categoriacutea permite habilitar o inhabilitar el rastreopara todas las categoriacuteas anteriores a la vez Lainformacioacuten de rastreo no se puede anotar directamenteen esta categoriacutea

Las clases de IBM Toolbox para Java tambieacuten utilizan las categoriacuteas de rastreo Cuando un programa Javahabilita las anotaciones la informacioacuten de IBM Toolbox para Java se incluye junto con la informacioacutenregistrada por la aplicacioacuten

El rastreo se puede habilitar para una sola categoriacutea o para un conjunto de categoriacuteas Una vezseleccionadas las categoriacuteas utilice el meacutetodo setTraceOn para activar y desactivar el rastreo Para escribirlos datos en las anotaciones se utiliza el meacutetodo log

Puede enviar los datos de rastreo de distintos componentes a anotaciones separadas Los datos derastreo de forma predeterminada se escriben en las anotaciones predeterminadas Utilice el rastreo de

IBM Toolbox para Java 375

componentes para escribir datos de rastreo especiacuteficos de la aplicacioacuten en unas anotaciones distintas o enla salida estaacutendar El rastreo de componentes permite separar faacutecilmente los datos de rastreo de unaaplicacioacuten especiacutefica de los demaacutes datos

Una cantidad excesiva de anotaciones puede afectar al rendimiento Utilice el meacutetodo isTraceOn paraconsultar el estado actual del rastreo El programa Java puede emplear este meacutetodo para determinar siconstruye el registro de rastreo antes de llamar al meacutetodo log Llamar al meacutetodo log cuando el rastreoestaacute desactivado no es un error pero se invierte maacutes tiempo

El valor predeterminado es escribir informacioacuten de anotaciones en la salida estaacutendar Para redirigir lasanotaciones a un archivo llame al meacutetodo setFileName() desde la aplicacioacuten Java En general esto solofunciona para las aplicaciones Java porque la mayoriacutea de los navegadores no dan acceso a los appletspara escribir en el sistema de archivos local

Las anotaciones estaacuten desactivadas de forma predeterminada Los programas Java proporcionan alusuario un procedimiento que le permite activar las anotaciones para que le resulte faacutecil habilitarlas Porejemplo la aplicacioacuten puede realizar un anaacutelisis para obtener un paraacutemetro de liacutenea de mandatos queindique queacute categoriacutea de datos se anota El usuario puede establecer este paraacutemetro cuando se necesiteinformacioacuten de anotaciones

Ejemplos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Los ejemplos que hay a continuacioacuten muestran coacutemo se utiliza la clase Trace

Ejemplo de coacutemo se utiliza setTraceOn() y de la escritura de datos en unas anotaciones mediante elmeacutetodo log

Habilite las anotaciones de diagnoacutestico informacioacuten y avisoTracesetTraceDiagnosticOn(true)TracesetTraceInformationOn(true)TracesetTraceWarningOn(true)

Active el rastreoTracesetTraceOn(true)

En este punto del programa Java escriba en las anotacionesTracelog(TraceINFORMATION Se acaba de entrar en la clase xxx meacutetodo xxx)

Desactive el rastreoTracesetTraceOn(false)

Ejemplo coacutemo se utiliza Trace

En el siguiente coacutedigo el meacutetodo 2 es la manera preferible de utilizar el rastreo Meacutetodo 1 - construya un registro de rastreo y luego llame al meacutetodo log y deje que la clase de rastreo determine si los datos deben anotarse Este meacutetodo funcionaraacute pero seraacute maacutes lento que el coacutedigo siguienteString traceData = new String(Se acaba de entrar en la clase xxx datos = )traceData = traceData + data + estado = + stateTracelog(TraceINFORMATION traceData)

Meacutetodo 2 - compruebe el estado de las anotaciones antes de incorporar la informacioacuten a las anotaciones Este meacutetodo es maacutes raacutepido cuando el rastreo no estaacute activoif (TraceisTraceOn() ampamp TraceisTraceInformationOn())

376 IBM Toolbox para Java IBM Toolbox para Java

String traceData = new String(se acaba de entrar en la clase xxx datos = )traceData = traceData + data + estado = + stateTracelog(TraceINFORMATION traceData)

Ejemplo coacutemo se utiliza el rastreo de componentes Cree una serie de componente Es maacutes eficaz crear un objeto que muchos literales StringString myComponent1 = commyCompanyxyzComponentString myComponent2 = commyCompanyabcComponent

Enviacutee los datos de rastreo de IBM Toolbox para Java y los de componente a archivos distintos El rastreo contendraacute toda la informacioacuten de rastreo mientras que cada archivo de anotaciones de componente solo contendraacute la informacioacuten de rastreo especiacutefica de ese componente Si no se especifica un archivo de rastreo todos los datos de rastreo iraacuten a la salida estaacutendar con el componente especificado frente a cada uno de los mensajes de rastreo

TracesetFileName(cbitbucket) TracesetFileName(myComponent1 cComponent1log) TracesetFileName(myComponent2 cComponent2log)

TracesetTraceOn(true) Active el rastreoTracesetTraceInformationOn(true) Habilite los mensajes informativos

Anote los datos de rastreo especiacuteficos de componente o los generales de IBM Toolbox para Java

TracesetFileName(cbitbucket)TracesetFileName(myComponent1 cComponent1log)

Informacioacuten relacionadaJavadoc Trace

Optimizacioacuten de IBM iExisten dos versiones del software de IBM Toolbox para Java una que se optimiza cuando se ejecuta enla JVM de IBM i y otra que se ejecuta de la misma informa independientemente de doacutende se ejecute IBMToolbox para Java

El comportamiento de inicio de sesioacuten y el rendimiento mejoran cuando se utiliza la versioacuten optimizadadel software de IBM Toolbox para Java se ejecuta en la JVM de IBM i y la conexioacuten se establece con elmismo servidor

Habilitar la optimizacioacuten

IBM Toolbox para Java se suministra como parte del programa bajo licencia 5770-SS1 (opcioacuten 3) en dosdirectoriosv QIBMProdDatahttppublicjt400lib contiene la versioacuten de IBM Toolbox para Java que no incluye

las optimizaciones de IBM i Utilice estos archivos si desea obtener un comportamiento coherente conla ejecucioacuten de IBM Toolbox para Java en un cliente

v QIBMProdDataOS400jt400lib contiene la versioacuten de IBM Toolbox para Java que incluye lasoptimizaciones de IBM i cuando se ejecuta en la JVM de IBM i

Nota a partir de IBM i 71 el directorio QIBMProdDatahttppublicjt400 es realmente un enlacesimboacutelico con QIBMProdDataOS400jt400 El enlace QIBMProdDatahttppublicjt400 se conservapara mantener la compatibilidad con las versiones anteriores de IBM i

Para obtener maacutes informacioacuten consulte la nota 1 en la informacioacuten acerca de los Archivos JAR

IBM Toolbox para Java 377

Consideraciones sobre el inicio de sesioacuten

La versioacuten de IBM Toolbox para Java que contiene optimizaciones antildeade opciones adicionales parasuministrar la informacioacuten de nombre del servidor (sistema) ID de usuario y contrasentildea a IBM Toolboxpara Java

Al acceder a un recurso de IBM i las clases de IBM Toolbox para Java deben tener un nombre delsistema un ID de usuario y una contrasentildeav Al ejecutarse en un cliente el programa Java es el que proporciona el nombre del sistema el ID de

usuario y la contrasentildea o bien IBM Toolbox para Java recupera estos valores del usuario mediante undiaacutelogo de inicio de sesioacuten

v Al ejecutarse en la maacutequina virtual Java de IBM i IBM Toolbox para Java tiene una opcioacuten adicionalPuede enviar peticiones al servidor actual (local) utilizando el ID de usuario y la contrasentildea del trabajoque inicioacute el programa Java

Con la versioacuten de IBM Toolbox para Java que contiene optimizaciones tambieacuten se puede utilizar el ID deusuario y la contrasentildea del trabajo actual cuando un programa Java que se ejecuta en un servidor IBM iaccede a los recursos existentes en otro servidor IBM i En este caso el programa Java establece el nombredel sistema y luego utiliza el valor especial current para el ID de usuario y la contrasentildea

El programa Java solo puede establecer la contrasentildea en current si se utiliza V4R4 o posterior para elacceso a nivel de registro En caso contrario cuando se utiliza el acceso a nivel de registro localhost esvaacutelido para el nombre del sistema y current es vaacutelido para el ID de usuario sin embargo el programaJava debe suministrar la contrasentildea

Un programa Java establece los valores de nombre del sistema ID de usuario y contrasentildea en el objetoAS400

Para utilizar el ID de usuario y la contrasentildea del trabajo el programa Java puede usar current como IDde usuario y contrasentildea o bien puede usar el constructor que no tiene los paraacutemetros de ID de usuario ycontrasentildea

Para utilizar el servidor actual el programa Java puede utilizar localhost como nombre del sistema obien emplear el constructor predeterminado Es decir

AS400 system = new AS400()

equivale aAS400 system = new AS400(localhost current current)

Ejemplos

Los ejemplos que hay a continuacioacuten muestran coacutemo iniciar la sesioacuten en un servidor mediante las clasesoptimizadas

Ejemplo iniciar la sesioacuten cuando se utilizan distintos constructores de AS400

En el siguiente ejemplo se crean dos objetos AS400 El comportamiento de los dos objetos es ideacutentico losdos ejecutan un mandato en el servidor actual utilizando el ID de usuario y la contrasentildea del trabajoUno de los objetos emplea el valor especial para el ID de usuario y la contrasentildea mientras que el otroemplea el constructor predeterminado y no establece el ID de usuario ni la contrasentildea

Cree un objeto AS400 Debido a que se utiliza el constructor predeterminado y el nombre

del sistema el ID de usuario y la contrasentildea no se establecen en ninguacuten momento el objeto AS400 enviacutea peticiones al servidor local usando el ID de usuario y la contrasentildea del trabajo Si este programa se

378 IBM Toolbox para Java IBM Toolbox para Java

ejecutase en un cliente se pediriacutea al usuario el nombre del sistema el ID de usuario y la contrasentildeaAS400 sys1 = new AS400()

Cree un objeto AS400 Este objeto enviacutea peticiones al sistema local usando el ID de usuario y la contrasentildea del trabajo Este objeto no funcionaraacute en un

clienteAS400 sys2 = new AS400(localhost current current)

Cree dos objetos llamada a mandato que utilizan los objetos AS400CommandCall cmd1 = new CommandCall(sys1myCommand1)CommandCall cmd2 = new CommandCall(sys2myCommand2)

Ejecute los mandatoscmd1run()cmd2run()

Ejemplo iniciar la sesioacuten con el ID de usuario y la contrasentildea del trabajo actual

En el siguiente ejemplo se crea un objeto AS400 que representa un segundo servidor IBM i Dado que seutiliza el valor current en el segundo servidor (destino) se utiliza el ID de usuario y la contrasentildea deldel servidor que ejecuta el programa Java

Cree un objeto AS400 Este objeto enviacutea peticiones a un segundo sistema usando el ID de usuario y la contrasentildea del trabajo del servidor actual (current)AS400 sys = new AS400(mySystemmyCompanycom current current)

Cree un objeto de llamada a mandato que ejecute un mandato en el servidor destinoCommandCall cmd = new CommandCall(sysmyCommand1)

Ejecute el mandatocmdrun()

Mejoras en el rendimientoCon las clases adicionales proporcionadas por IBM i mejora el rendimiento de los programas Java que seejecutan en la maacutequina virtual Java de IBM i En algunos casos el rendimiento mejora porque se utilizanmenos funciones de comunicacioacuten y en otros casos porque se utiliza una API en vez de una llamada alprograma servidor

Tiempo de bajada maacutes corto

Para bajar el nuacutemero miacutenimo de archivos de clase de IBM Toolbox para Java utilice el servidor proxy conla herramienta AS400ToolboxJarMaker

Comunicacioacuten maacutes raacutepida

Para todas las funciones de IBM Toolbox para Java salvo para JDBC y para el acceso al sistema dearchivos integrado los programas Java que se ejecutan en la maacutequina virtual Java de IBM i tendraacuten unaejecucioacuten maacutes raacutepida Ello se debe a que se utiliza menos coacutedigo de comunicacioacuten cuando esta se efectuacuteaentre el programa Java y el programa servidor en el servidor que realiza la peticioacuten

JDBC y el acceso al sistema de archivos integrado no se han optimizado porque ya existen servicios queagilizan la ejecucioacuten de estas funciones En caso de ejecutarse en el servidor IBM i se puede utilizar elcontrolador JDBC de IBM i en vez del controlador JDBC que se suministra junto con IBM Toolbox paraJava Para acceder a los archivos existentes en el servidor puede utilizarse javaio en vez de las clases deacceso al sistema de archivos integrado que se suministran junto con IBM Toolbox para Java

IBM Toolbox para Java 379

Llamada directa a las API de IBM i

La mejora en el rendimiento de las siguientes clases de IBM Toolbox para Java se debe a que estas clasesllaman directamente a las API de IBM i en vez de llamar a un programa servidor para llevar a cabo lapeticioacutenv Clases AS400Certificatev CommandCallv DataQueuev ProgramCallv Clases de acceso a base de datos a nivel de registrov ServiceProgramCallv UserSpace

La llamada directa a las API solo se efectuacutea si el ID de usuario y la contrasentildea coinciden con el ID deusuario y la contrasentildea del trabajo que ejecuta el programa Java Para obtener una mejora en elrendimiento el ID de usuario y la contrasentildea deben coincidir con los del trabajo que inicia el programaJava Para obtener unos resultados oacuteptimos utilice localhost para el nombre del sistema current parael ID de usuario y current para la contrasentildea

Cambios en la correlacioacuten de puertos

Se han realizado cambios en el sistema de correlacioacuten de puertos de modo que se ha agilizado el accesoa un puerto Antes de estos cambios las peticiones de puerto se enviaban al correlacionador de puertosDesde este el servidor determinaba queacute puerto estaba disponible y devolviacutea dicho puerto al usuario paraque lo aceptase Ahora puede elegir entre indicar al servidor cuaacutel es el puerto que se ha de utilizar oespecificar que se tiene que usar el puerto predeterminado Esta opcioacuten evita que el servidor tenga queinvertir tiempo en averiguar queacute puerto se ha de emplear Utilice el mandato WRKSRVTBLE para ver ocambiar la lista de puertos del servidor

Para mejorar la correlacioacuten de puertos se han antildeadido varios meacutetodos a la clase AS400v getServicePortv setServicePortv setServicePortsToDefault

Cambios en las series especiacuteficas de idiomas

Ahora los archivos de series especiacuteficas de idiomas se suministran dentro del programa IBM Toolboxpara Java como archivos de clase en vez de como archivos de propiedades El servidor encuentra losmensajes maacutes deprisa en los archivos de clase que en los archivos de propiedades Ahora el meacutetodoResourceBundlegetString() se ejecuta maacutes raacutepidamente porque los archivos estaacuten almacenados en elprimer lugar en el que el sistema realiza la buacutesqueda Otra ventaja de cambiar a archivos de clase es queel servidor puede localizar con mayor rapidez la versioacuten traducida de una serie

Conversores

Dos clases permiten una conversioacuten maacutes raacutepida y eficaz entre Java y el sistemav Conversor binario realiza una conversioacuten entre las matrices de bytes Java y los tipos de datos simples

Javav Conversor de caracteres realiza una conversioacuten entre los objetos de tipo serie Java y las paacuteginas de

coacutedigos de IBM i

380 IBM Toolbox para Java IBM Toolbox para Java

Ademaacutes ahora IBM Toolbox para Java incorpora sus propias tablas de conversioacuten para maacutes de 100CCSID de uso habitual Anteriormente IBM Toolbox para Java remitiacutea a Java casi toda la conversioacuten detexto Si Java no teniacutea la tabla de conversioacuten correcta IBM Toolbox para Java bajaba la tabla deconversioacuten del servidor

IBM Toolbox para Java lleva a cabo toda la conversioacuten de texto para cualquier CCSID que conozcaCuando encuentra un CCSID desconocido intenta dejar que Java maneje la conversioacuten En ninguacutenmomento IBM Toolbox para Java intenta bajar una tabla de conversioacuten del servidor Este meacutetodo reducede forma notable el tiempo que tarda una aplicacioacuten de IBM Toolbox para Java en llevar a cabo laconversioacuten de texto No es necesaria ninguna accioacuten del usuario para utilizar esta nueva conversioacuten detexto todas las mejoras en el rendimiento se producen en las tablas conversoras subyacentesInformacioacuten relacionadaJavadoc AS400Javadoc BinaryConverterJavadoc CharacterConverter

Clases de instalacioacuten y actualizacioacuten en clientePara la mayoriacutea de objetivos de instalacioacuten y actualizacioacuten se puede hacer referencia a las clases de IBMToolbox para Java en la ubicacioacuten que tienen en el sistema de archivos integrado en el servidor

Dado que se aplican arreglos temporales de programa (PTF) a esta ubicacioacuten los programas Java queacceden directamente a estas clases en el servidor reciben estas actualizaciones de modo automaacutetico Peroel acceso a las clases desde el servidor no siempre funciona en concreto en las situaciones siguientesv Si el enlace de comunicaciones que conecta el servidor y el cliente es de baja velocidad el rendimiento

que supone cargar las clases desde el servidor puede ser inaceptablev Si las aplicaciones Java utilizan la variable de entorno CLASSPATH para acceder a las clases que hay

en el sistema de archivos del cliente es necesario que IBM i Access para Windows redirija al servidorlas llamadas al sistema de archivos Tal vez no sea posible que IBM i Access para Windows resida en elcliente

En estos casos instalar las clases en el cliente es una solucioacuten mejor

AS400ToolboxJarMakerMientras que el formato de archivo JAR se disentildeoacute para agilizar la bajada de los archivos de programaJava AS400ToolboxJarMaker genera una carga auacuten maacutes raacutepida de un archivo JAR de IBM Toolbox paraJava mediante su capacidad de crear un archivo JAR maacutes pequentildeo a partir de uno maacutes grande

Ademaacutes la clase AS400ToolboxJarMaker puede descomprimir un archivo JAR para que asiacute sea posibleacceder a los archivos de contenido individuales para uso baacutesico

Flexibilidad de AS400ToolboxJarMaker

Todas las funciones de AS400ToolboxJarMaker se llevan a cabo con la clase JarMaker y la subclaseAS400ToolboxJarMakerv La herramienta JarMaker geneacuterica funciona en cualquier archivo JAR o Zip subdivide un archivo JAR

o reduce el tamantildeo de un archivo JAR eliminando las clases que no se usanv AS400ToolboxJarMaker personaliza y ampliacutea las funciones de JarMaker para facilitar su uso con los

archivos JAR de IBM Toolbox para Java

En funcioacuten de sus necesidades puede invocar los meacutetodos de AS400ToolboxJarMaker desde dentro delprograma Java o desde una liacutenea de mandatos Para efectuar una llamada a AS400ToolboxJarMaker desdela liacutenea de mandatos utilice la sintaxis que se indica a continuacioacuten

java utilitiesJarMaker [opciones]

IBM Toolbox para Java 381

dondev opciones = una o varias de las opciones disponibles

Si desea obtener un conjunto completo de las opciones disponibles para ejecutarse en una solicitud deliacutenea de mandatos consulte lo siguiente en el Javadocv Opciones para la clase base JarMakerv Opciones ampliadas para la subclase AS400ToolboxJarMaker

Utilizacioacuten de AS400ToolboxJarMaker

Puede emplear AS400ToolboxJarMaker para trabajar con los archivos JAR de varios modosv Descomprimir un archivo empaquetado dentro de un archivo JARv Subdividir un archivo JAR grande en varios archivos JAR maacutes pequentildeosv Excluir los archivos de IBM Toolbox para Java que la aplicacioacuten no necesita ejecutar

Descompresioacuten de un archivo JAR

Suponga que desea descomprimir un uacutenico archivo empaquetado dentro de un archivo JARAS400ToolboxJarMaker le permite expandir el archivo en uno de estos directoriosv Directorio actual extract(jarFile)v Otro directorio extract(jarFile outputDirectory)

Por ejemplo el coacutedigo siguiente hace que del archivo jt400jar se extraigan AS400class y todas sus clasesdependientes

java utilitiesAS400ToolboxJarMaker -source jt400jar-extract outputDir-requiredFile comibmas400accessAS400class

Subdivisioacuten de un archivo JAR individual en varios archivos JAR maacutes pequentildeos

Suponga que desea subdividir un archivo JAR de gran tamantildeo en archivos JAR maacutes pequentildeos enfuncioacuten de su preferencia para el tamantildeo maacuteximo de archivo JAR AS400ToolboxJarMaker de acuerdocon ello le proporciona la funcioacuten split(jarFile splitSize)

En el coacutedigo que figura a continuacioacuten jt400jar se subdivide en una serie de archivos JAR maacutes pequentildeosninguno de los cuales tiene maacutes de 300 KB

java utilitiesAS400ToolboxJarMaker -split 300

Eliminacioacuten de archivos no utilizados de un archivo JAR

Con AS400ToolboxJarMaker puede excluir todos los archivos de IBM Toolbox para Java que su aplicacioacutenno necesite para ello basta con que seleccione uacutenicamente los componentes idiomas y CCSID de IBMToolbox para Java necesarios para que se ejecute la aplicacioacuten AS400ToolboxJarMaker tambieacuten leproporciona la opcioacuten de incluir o excluir los archivos de JavaBean asociados a los componentes que haelegido

Por ejemplo el mandato siguiente crea un archivo JAR que contiene uacutenicamente las clases de IBMToolbox para Java necesarias para que funcionen los componentes CommandCall y ProgramCall de IBMToolbox para Java

java utilitiesAS400ToolboxJarMaker -component CommandCallProgramCall

Ademaacutes si no es necesario hacer que las series de texto se conviertan entre Unicode y las tablas deconversioacuten del juego de caracteres de doble byte (DBCS) se puede crear un archivo JAR cuyo tamantildeotenga 400 KB menos tan solo con omitir las tablas de conversioacuten innecesarias con la opcioacuten -ccsid

382 IBM Toolbox para Java IBM Toolbox para Java

java utilitiesAS400ToolboxJarMaker -component CommandCallProgramCall -ccsid 61952

Nota las clases conversoras no se incluyen junto con las clases de llamada a programa Al incluir lasclases de llamada a programa tambieacuten deberaacute incluir expliacutecitamente las clases conversoras utilizadas porel programa por medio de la opcioacuten -ccsid

Javadoc JarMakerJavadoc AS400ToolboxJarMaker

Soporte de idiomas nacionales para JavaJava da soporte a un conjunto de idiomas nacionales pero es un subconjunto de los idiomas soportadospor el servidor

Cuando se produce una discrepancia entre los idiomas por ejemplo cuando se trabaja en una estacioacuten detrabajo local que utiliza un idioma no soportado por Java el programa bajo licencia IBM Toolbox paraJava puede emitir algunos mensajes de error en Ingleacutes

Servicio y soporte para IBM Toolbox para JavaPara obtener servicio y soporte puede utilizar los recursos siguientes

Informacioacuten acerca de la resolucioacuten de problemas relacionados IBM Toolbox para JavaUtilice esta informacioacuten a modo de ayuda para la resolucioacuten de los problemas que surjan al utilizarIBM Toolbox para Java

Foro de JTOpenIBM Toolbox para Java Uacutenase a la comunidad de programadores de Java queutilizan IBM Toolbox para Java Este foro es un meacutetodo eficaz de obtener ayuda y recomendacionesde otros programadores de Java y en ocasiones de los propios desarrolladores de IBM Toolbox paraJava

Soporte de servidor Utilice el sitio Web de soporte de servidor de IBM para obtenerinformacioacuten sobre las herramientas y los recursos que le ayudaraacuten a perfeccionar la planificacioacuten yel soporte teacutecnico del sistema

Soporte de software Utilice el sitio Web de servicios de soporte de software de IBM paraobtener informacioacuten sobre la amplia gama de servicios de soporte de software que ofrece IBM

Los servicios de soporte para IBM Toolbox para Java se proporcionan bajo los teacuterminos y condicioneshabituales en los productos de software Los servicios de soporte incluyen servicios de programa soportepor conversacioacuten y servicios de consulta Poacutengase en contacto con el representante local de IBM paraobtener maacutes informacioacuten

Los servicios de programa y el soporte por conversacioacuten permiten resolver defectos de programa de IBMToolbox para Java mientras que los servicios de consulta permiten resolver problemas de programacioacutende aplicaciones y de depuracioacuten

Los servicios de consulta admiten llamadas de interfaz de programas de aplicacioacuten (API) de IBM Toolboxpara Java a menos quev Se trate claramente de un defecto de la API de Java defecto que debe demostrarse mediante su

reproduccioacuten en un programa relativamente simplev Se trate de una consulta en que se solicitan aclaraciones de la documentacioacutenv Se trate de una consulta acerca de la ubicacioacuten de ejemplos o de documentacioacuten

IBM Toolbox para Java 383

Los servicios de consulta admiten toda clase de ayuda para la programacioacuten incluidos los ejemplos deprograma proporcionados en el programa bajo licencia IBM Toolbox para Java En Internet en la paacutegina

de presentacioacuten de IBM i puede encontrar ejemplos adicionales sin soporte

Junto con el producto de programa bajo licencia IBM Toolbox para Java se proporciona informacioacuten deresolucioacuten de problemas Si cree que hay un defecto potencial en la API de IBM Toolbox para Java senecesitaraacute un programa simple que demuestre el error

Ejemplos de coacutedigoEn la lista siguiente se proporcionan enlaces con los puntos de entrada de muchos de los ejemplosempleados en la informacioacuten de IBM Toolbox para Java

Clases de acceso Beans Clases commtraceClases HTML PCML Clases ReportWriterRFML Clases de seguridad Clases de servletsEjemplos simples Consejos para la

programacioacutenClases de utilidades

XPCML

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

SUJETO A LAS GARANTIacuteAS ESTATUTARIAS QUE NO PUEDAN EXCLUIRSE IBM LOSDESARROLLADORES Y LOS SUMINISTRADORES DE PROGRAMAS NO OFRECEN NINGUNAGARANTIacuteA NI CONDICIOacuteN YA SEA IMPLIacuteCITA O EXPLIacuteCITA INCLUIDAS PERO SIN LIMITARSE AELLAS LAS GARANTIacuteAS O CONDICIONES IMPLIacuteCITAS DE COMERCIALIZACIOacuteN ADECUACIOacuteNA UN PROPOacuteSITO DETERMINADO Y NO VULNERACIOacuteN CON RESPECTO AL PROGRAMA O ALSOPORTE TEacuteCNICO SI EXISTE

BAJO NINGUNA CIRCUNSTANCIA IBM LOS DESARROLLADORES O SUMINISTRADORES DEPROGRAMAS SE HACEN RESPONSABLES DE NINGUNA DE LAS SIGUIENTES SITUACIONES NISIQUIERA EN CASO DE HABER SIDO INFORMADOS DE TAL POSIBILIDAD1 PEacuteRDIDA O DANtildeO DE LOS DATOS2 DANtildeOS ESPECIALES ACCIDENTALES DIRECTOS O INDIRECTOS O DANtildeOS ECONOacuteMICOS

DERIVADOS3 PEacuteRDIDAS DE BENEFICIOS COMERCIALES DE INGRESOS CLIENTELA O AHORROS

ANTICIPADOS

ALGUNAS JURISDICCIONES NO PERMITEN LA EXCLUSIOacuteN O LA LIMITACIOacuteN DE LOS DANtildeOSDIRECTOS ACCIDENTALES O DERIVADOS POR LO QUE PARTE DE LAS LIMITACIONES OEXCLUSIONES ANTERIORES O TODAS ELLAS PUEDE NO SER PROCEDENTE EN SU CASO

Ejemplos clases de accesoEn esta seccioacuten figura una lista de los ejemplos de coacutedigo que se proporcionan en la documentacioacuten delas clases de acceso de IBM Toolbox para Java

AS400JPingv Ejemplo Utilizar AS400JPing dentro de un programa Java

BidiTransformv Ejemplo coacutemo se utiliza la clase AS400BidiTransform para transformar texto bidireccional

384 IBM Toolbox para Java IBM Toolbox para Java

CommandCallv Ejemplo coacutemo se utiliza CommandCall para ejecutar un mandato en el servidorv Ejemplo coacutemo se utiliza CommandCall para solicitar el nombre del servidor y el mandato que se ha

de ejecutar e imprimir el resultado

ConnectionPoolv Ejemplo coacutemo se utiliza AS400ConnectionPool para crear conexiones con el servidor

DataAreav Ejemplo crear y escribir en un aacuterea de datos decimales

Conversioacuten y descripcioacuten de datosv Ejemplos coacutemo se utilizan las clases FieldDescription RecordFormat y Recordv Ejemplo poner datos en una colav Ejemplo leer datos de una colav Ejemplo coacutemo se utilizan las clases AS400DataType con ProgramCall

DataQueuev Ejemplo crear un objeto DataQueue leer datos y desconectarv Ejemplo poner datos en una colav Ejemplo leer datos de una colav Ejemplo coacutemo se utiliza KeyedDataQueue para poner elementos en una colav Ejemplo coacutemo se utiliza KeyedDataQueue para sacar elementos de una cola

Certificado digitalv Ejemplo listar los certificados digitales pertenecientes a un usuario

EnvironmentVariablev Ejemplo crear establecer y obtener variables de entorno

Excepcionesv Ejemplo capturar una excepcioacuten lanzada recuperar el coacutedigo de retorno y visualizar el texto de la

excepcioacuten

FTPv Ejemplo coacutemo se utiliza la clase FTP para copiar un conjunto de archivos de un directorio del servidorv Ejemplo coacutemo se utiliza la clase AS400FTP para copiar un conjunto de archivos de un directorio

Sistema de archivos integradov Ejemplos coacutemo se utiliza IFSFilev Ejemplo coacutemo se utiliza el meacutetodo IFSFilelistFiles() para listar el contenido de un directoriov Ejemplo coacutemo se utilizan las clases IFSFile para copiar archivosv Ejemplo coacutemo se utilizan las clases IFSFile para listar el contenido de un directoriov Ejemplo coacutemo se utiliza IFSJavaFile en lugar de javaioFilev Ejemplo coacutemo se utilizan las clases IFSFile para listar el contenido de un directorio en el servidor

JavaApplicationCallv Ejemplo ejecutar en el servidor un programa desde el cliente cuya salida es iexclHola a todos

IBM Toolbox para Java 385

JDBCv Ejemplo coacutemo se utiliza el controlador JDBC para crear y llenar con datos una tablav Ejemplo coacutemo se utiliza el controlador JDBC para consultar una tabla y enviar su contenido a la salida

Trabajosv Ejemplo recuperar y cambiar la informacioacuten de trabajo utilizando la memoria cacheacutev Ejemplo listar todos los trabajos activosv Ejemplo imprimir todos los mensajes de las anotaciones de trabajo correspondientes a un usuario

especiacuteficov Ejemplo listar la informacioacuten de identificacioacuten de trabajo correspondiente a un usuario especiacuteficov Ejemplo obtener una lista de los trabajos existentes en el servidor y listar el estado del trabajo y el

identificador del mismov Ejemplo visualizar los mensajes de las anotaciones de trabajo correspondientes a un trabajo

perteneciente al usuario actual

Cola de mensajesv Ejemplo coacutemo se utiliza el objeto cola de mensajesv Ejemplo imprimir el contenido de la cola de mensajesv Ejemplo coacutemo recuperar e imprimir un mensajev Ejemplo listar el contenido de la cola de mensajesv Ejemplo coacutemo se utiliza AS400Message con CommandCallv Ejemplo coacutemo se utiliza AS400Message con ProgramCall

NetServerv Ejemplo Utilizar un objeto NetServer para cambiar el nombre de NetServer

Imprimirv Ejemplo listar asiacutencronamente todos los archivos en spool utilizando la interfaz PrintObjectListListenerv Ejemplo listar asiacutencronamente todos los archivos en spool sin utilizar la interfaz PrintObjectListListenerv Ejemplo copiar un archivo en spool con SpooledFilecopy()v Ejemplo crear un archivo en spool a partir de una corriente de entradav Ejemplo generar una corriente de datos SCS utilizando la clase SCS3812Writerv Ejemplo leer un archivo en spool existentev Ejemplo leer y transformar archivos en spoolv Ejemplo listar siacutencronamente todos los archivos en spool

Permisov Ejemplo establecer la autorizacioacuten de un objeto de AS400

Llamada a programav Ejemplo coacutemo se utiliza ProgramCallv Ejemplo coacutemo se utiliza ProgramCall para recuperar el estado del sistemav Ejemplo pasar datos de paraacutemetro con un objeto Programparameter

QSYSObjectPathNamev Ejemplo construir un nombre de sistema de archivos integradov Ejemplo coacutemo se utiliza QSYSObjectPathNametoPath() para construir un nombre de objeto AS400

386 IBM Toolbox para Java IBM Toolbox para Java

v Ejemplo coacutemo se utiliza QSYSObjectPathName para analizar el nombre de viacutea de acceso del sistemade archivos integrado

Acceso a nivel de registrov Ejemplo acceder secuencialmente a un archivov Ejemplo coacutemo se utilizan las clases de acceso a nivel de registro para leer un archivov Ejemplo coacutemo se utilizan las clases de acceso a nivel de registro para leer registros por clavev Ejemplo coacutemo se utiliza la clase LineDataRecordWriter

Llamada a programa de serviciov Ejemplo coacutemo se utiliza ServiceProgramCall para llamar a un procedimiento

SystemStatusv Ejemplo coacutemo se utiliza la puesta en memoria cacheacute con la clase SystemStatus

SystemPoolv Ejemplo establecer el tamantildeo maacuteximo de faltas para una agrupacioacuten del sistema

SystemValuev Ejemplo coacutemo se utiliza SystemValue y SystemValueList

Rastreov Ejemplo coacutemo se utiliza el meacutetodo TracesetTraceOn()v Ejemplo procedimiento preferido de uso del rastreov Ejemplo coacutemo se utiliza el rastreo de componentes

UserGroupv Ejemplo recuperar una lista de usuariosv Ejemplo listar todos los usuarios de un grupo

UserSpacev Ejemplo coacutemo se crea un espacio de usuario

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo coacutemo se utiliza CommandCallEste programa de ejemplo de IBM Toolbox para Java solicita al usuario el nombre del servidor y elmandato que debe ejecutarse y luego imprime el resultado del mandato

IBM Toolbox para Java 387

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de llamada a mandato Este programa solicita al usuario el nombre del servidor y el mandato que se debe ejecutar y a continuacioacuten imprime el resultado del mandato Este coacutedigo fuente es un ejemplo de CommandCall

import javaioimport javautilimport comibmas400access

public class CommandCallExample extends Object

public static void main(String[] parmeters)

Se ha creado un lector para obtener datos de entrada del usuarioBufferedReader inputStream = new BufferedReader(new InputStreamReader(Systemin)1)

Declare variables para contener el nombre del sistema y el mandato que se ejecutaraacuteString systemString = nullString commandString = null

Systemoutprintln( )

Obtenga el nombre del sistema y el mandato que se ejecutaraacute a partir del usuariotry

Systemoutprint(Nombre del sistema )systemString = inputStreamreadLine()

Systemoutprint(Mandato )commandString = inputStreamreadLine()

catch (Exception e)

Systemoutprintln( )

Cree un objeto AS400 Es el sistema al que se enviacutea el mandatoAS400 as400 = new AS400(systemString)

Cree un objeto de llamada a mandato especificando el servidor que recibiraacute el mandatoCommandCall command = new CommandCall( as400 )

try

Ejecute el mandatoif (commandrun(commandString))

388 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprint( Mandato satisfactorio )else

Systemoutprint( Mandato anoacutemalo )

Si se generan mensajes a partir del mandato impriacutemalosAS400Message[] messagelist = commandgetMessageList()

if (messagelistlength gt 0)

Systemoutprintln( mensajes del mandato )Systemoutprintln( )

for (int i=0 i lt messagelistlength i++)

Systemoutprint ( messagelist[i]getID() )Systemoutprint ( )Systemoutprintln( messagelist[i]getText() )

catch (Exception e)

Systemoutprintln( El mandato + commandgetCommand() + no se ha ejecutado )

Systemexit (0)

Ejemplo coacutemo se utiliza AS400ConnectionPoolEste programa de ejemplo de IBM Toolbox para Java utiliza una AS400ConnectionPool para crearconexiones con un sistema

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de AS400ConnectionPooling Este programa utiliza una AS400ConnectionPool para crear conexiones con un sistema IBM i Sintaxis del mandato AS400ConnectionPooling sistema miIdUsuario miContrasentildea Por ejemplo AS400ConnectionPooling MySystem MyUserId MyPassword

import comibmas400access

public class AS400ConnectionPooling

public static void main (String[] parameters)

Compruebe los paraacutemetros de entradaif (parameterslength = 3)

Systemoutprintln()Systemoutprintln(Utilizacioacuten)Systemoutprintln()Systemoutprintln( AS400ConnectionPooling system userId password)Systemoutprintln()Systemoutprintln()

IBM Toolbox para Java 389

Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln()Systemoutprintln( AS400ConnectionPooling MySystem MyUserId MyPassword)Systemoutprintln()return

String system = parameters[0]String userId = parameters[1]String password = parameters[2]

try

Cree una AS400ConnectionPoolAS400ConnectionPool testPool = new AS400ConnectionPool()

Establezca un maacuteximo de 128 conexiones para esta agrupacioacutentestPoolsetMaxConnections(128)

Establezca un tiempo maacuteximo de vida de 30 minutos para las conexionestestPoolsetMaxLifetime(10006030) 30 min de tiempo maacuteximo de vida desde que se creen

Preconectar 5 conexiones con el servicio AS400COMMANDtestPoolfill(system userId password AS400COMMAND 1)Systemoutprintln()Systemoutprintln(1 conexioacuten preconectada con el servicio AS400COMMAND)

Llame a getActiveConnectionCount y getAvailableConnectionCount para ver cuaacutentas conexiones estaacuten en uso y disponibles para un sistema concretoSystemoutprintln(Nuacutemero de conexiones activas

+ testPoolgetActiveConnectionCount(system userId))Systemoutprintln(Nuacutemero de conexiones disponibles para utilizar

+ testPoolgetAvailableConnectionCount(system userId))

Cree una conexioacuten con el servicio AS400COMMAND (Emplee las constantes de nuacutemero de servicio definidas en la clase AS400 (FILE PRINT COMMAND DATAQUEUE etceacutetera)) Dado que ya se han llenado las conexiones el tiempo que suele dedicarse a conectar con el servicio de mandatos se evitaAS400 newConn1 = testPoolgetConnection(system userId password AS400COMMAND)

Systemoutprintln()Systemoutprintln(getConnection proporciona una conexioacuten existente al usuario)Systemoutprintln(Nuacutemero de conexiones activas

+ testPoolgetActiveConnectionCount(system userId))Systemoutprintln(Nuacutemero de conexiones disponibles para utilizar

+ testPoolgetAvailableConnectionCount(system userId))

Cree un nuevo objeto de llamada a mandato y ejecute un mandatoCommandCall cmd1 = new CommandCall(newConn1)cmd1run(CRTLIB FRED)

Devuelva la conexioacuten a la agrupacioacutentestPoolreturnConnectionToPool(newConn1)

Systemoutprintln()Systemoutprintln(Se ha devuelto una conexioacuten a la agrupacioacuten)Systemoutprintln(Nuacutemero de conexiones activas

+ testPoolgetActiveConnectionCount(system userId))Systemoutprintln(Nuacutemero de conexiones disponibles para reutilizar

+ testPoolgetAvailableConnectionCount(system userId))

Cree una conexioacuten con el servicio AS400COMMAND Esto devolveraacute el mismo objeto que se ha indicado anteriormente para reutilizarAS400 newConn2 = testPoolgetConnection(system userId password AS400COMMAND)

Systemoutprintln()

390 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln(getConnection proporciona una conexioacuten existente al usuario)Systemoutprintln(Nuacutemero de conexiones activas

+ testPoolgetActiveConnectionCount(system userId))Systemoutprintln(Nuacutemero de conexiones disponibles para reutilizar

+ testPoolgetAvailableConnectionCount(system userId))

Cree una conexioacuten con el servicio AS400COMMAND Esto crearaacute una nueva conexioacuten ya que no hay ninguna conexioacuten en la agrupacioacuten para reutilizarAS400 newConn3 = testPoolgetConnection(system userId password AS400COMMAND)

Systemoutprintln()Systemoutprintln(getConnection crea una nueva conexioacuten ya que no hay

conexiones disponibles)Systemoutprintln(Nuacutemero de conexiones activas

+ testPoolgetActiveConnectionCount(system userId))Systemoutprintln(Nuacutemero de conexiones disponibles para reutilizar

+ testPoolgetAvailableConnectionCount(system userId))

Cierre la agrupacioacuten de pruebatestPoolclose()

catch (Exception e)

Si alguna de ha fallado indique que las operaciones de la agrupacioacuten han fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(Las operaciones de la agrupacioacuten han fallado)Systemoutprintln(e)eprintStackTrace()

Ejemplos coacutemo se utiliza la claseAS400JDBCManagedConnectionPoolDataSourceEstos ejemplos ilustran la utilizacioacuten de la clase AS400JDBCManagedConnectionPoolDataSource La claseAS400JDBCManagedConnectionPoolDataSource simplifica el mantenimiento de agrupaciones deconexiones eliminando la necesidad de que las aplicaciones de usuario implementen su propio coacutedigo degestioacuten

Nota al utilizar los ejemplos de coacutedigo acepta los teacuterminos del ldquoInformacioacuten sobre licencia de coacutedigo yexencioacuten de responsabilidadrdquo en la paacutegina 590

Ejemplo 1

Este breve ejemplo muestra la utilizacioacuten baacutesica de la claseAS400JDBCManagedConnectionPoolDataSourceimport javaxnamingContextimport javaxnamingInitialContextimport javaxsqlDataSource

import comibmas400accessAS400JDBCManagedConnectionPoolDataSourceimport comibmas400accessAS400JDBCManagedDataSource

public class TestJDBCConnPoolSnippet

void test()

AS400JDBCManagedConnectionPoolDataSource cpds0 = new AS400JDBCManagedConnectionPoolDataSource()

Establecer propiedades generales de origen de datos Tenga en cuenta que tanto el origen de datos de agrupacioacuten de conexiones (CPDS) como el origen de datos gestionado (MDS) tienen estas propiedades y pueden tener valores diferentescpds0setServerName(host)cpds0setDatabaseName(host)iasp puede especificarse aquiacutecpds0setUser(userid)

IBM Toolbox para Java 391

cpds0setPassword(password)

cpds0setSavePasswordWhenSerialized(true)

Establecer propiedades especiacuteficas de agrupacioacuten de conexionescpds0setInitialPoolSize(initialPoolSize_)cpds0setMinPoolSize(minPoolSize_)cpds0setMaxPoolSize(maxPoolSize_)cpds0setMaxLifetime((int)(maxLifetime_1000)) convertir a segundoscpds0setMaxIdleTime((int)(maxIdleTime_1000)) convertir a segundoscpds0setPropertyCycle((int)(propertyCycle_1000)) convertir a segundoscpds0setReuseConnections(false) no reutilizar conexiones

Establecer la faacutebrica de contexto inicial que debe utilizarseSystemsetProperty(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory)

Obtener el contexto inicial JNDIContext ctx = new InitialContext()

Nota a continuacioacuten figura un procedimiento alternativo para establecer las propiedades de contexto localmente Properties env = new Properties() envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory) Contexto ctx = new InitialContext(env)

ctxrebind(mydatasource cpds0) Ahora pueden realizarse buacutesquedas en cpds por el nombre mydatasource

Crear un objeto DataSource estaacutendar que haga referencia a eacutel

AS400JDBCManagedDataSource mds0 = new AS400JDBCManagedDataSource()mds0setDescription(DataSource que da soporte a la agrupacioacuten de conexiones)mds0setDataSourceName(mydatasource)ctxrebind(ConnectionPoolingDataSource mds0)

DataSource dataSource_ = (DataSource)ctxlookup(ConnectionPoolingDataSource)

AS400JDBCManagedDataSource mds_ = (AS400JDBCManagedDataSource)dataSource_

boolean isHealthy = mds_checkPoolHealth(false) comprobar el estado de la agrupacioacuten

Connection c = dataSource_getConnection()

Ejemplo 2

Este ejemplo muestra maacutes detalles acerca de la utilizacioacuten de la claseAS400JDBCManagedConnectionPoolDataSourceimport javaawtTextAreaimport javaioBufferedReaderimport javaioFileimport javaioFileReaderimport javaioFileInputStreamimport javaioFileOutputStreamimport javaioOutputStreamimport javaioPrintStreamimport javautilVectorimport javautilProperties

import javasqlConnectionimport javaxsqlDataSourceimport javasqlResultSetimport javasqlStatementimport javaxnamingimport javautilDateimport javautilArrayListimport javautilRandomimport comibmas400accessAS400import comibmas400accessAS400JDBCManagedConnectionPoolDataSourceimport comibmas400accessAS400JDBCManagedDataSourceimport comibmas400accessTrace

392 IBM Toolbox para Java IBM Toolbox para Java

public class TestJDBCConnPool

private static final boolean DEBUG = false

Si activa este indicador aseguacuterese de activar tambieacuten el indicador siguiente AS400JDBCConnectionTESTING_THREAD_SAFETYprivate static final boolean TESTING_THREAD_SAFETY = false

private static String useridprivate static String passwordprivate static String host

Nota a efectos de coherencia todos los valores de tiempo se almacenan en unidades de milisegundosprivate int initialPoolSize_ inicial de conexiones en la agrupacioacutenprivate int minPoolSize_ miacuten de conexiones en la agrupacioacutenprivate int maxPoolSize_ maacutex de conexiones en la agrupacioacutenprivate long maxLifetime_ maacutex de tiempo de vida (msegs) de conexiones en la agrupacioacutenprivate long maxIdleTime_ maacutex de tiempo de desocupacioacuten (msegs) de conexiones disponibles en la agrupacioacutenprivate long propertyCycle_ frecuencia de mantenimiento de agrupacioacuten (msegs)

private int numDaemons_ de daemons de peticionario que deben crearseprivate static long timeToRunDaemons_ duracioacuten total (msegs) de ejecucioacuten de los daemonsprivate long daemonMaxSleepTime_ tiempo maacutex (msegs) para latencia de daemons de peticionario en cada cicloprivate long daemonMinSleepTime_ tiempo miacuten (msegs) para latencia de daemons de peticionario en cada cicloprivate long poolHealthCheckCycle_ de msegs entre llamadas a checkPoolHealth()

private boolean keepDaemonsAlive_ = true Si es false los daemons se cierran

private DataSource dataSource_private AS400JDBCManagedDataSource mds_

private final Object daemonSleepLock_ = new Object()

private Random random_ = new Random()

static

try ClassforName(comibmas400accessAS400JDBCDriver)

catch ( Exception e)

Systemoutprintln(Imposible registrar el controlador JDBC)Systemexit (0)

public static void main(String[] args)

host = args[0]userid = args[1]password = args[2]timeToRunDaemons_ = (new Integer(args[3]))intValue() 1000 milisegundosargs[3]=tiempo de ejecucioacuten en segundosTestJDBCConnPool cptest = new TestJDBCConnPool()

cptestsetup()cptestrunTest()

public void setup()

try

if (DEBUG)Systemoutprintln(iquestel distintivo TESTING_THREAD_SAFETY

+ (es TESTING_THREAD_SAFETY true false))

if (TESTING_THREAD_SAFETY)

Ajustar los valores para realizar pruebas de utilizacioacuten intensiva de hebras NOTA se presupone que la clase AS400JDBCConnection tambieacuten se ha modificado para

no establecer conexiones reales con un servidorreal

Para ello edite AS400JDBCConnectionjava cambiando su indicador TESTING_THREAD_SAFETY a rsquofalsersquo y vuelva a compilar

minPoolSize_ = 100maxPoolSize_ = 190initialPoolSize_ = 150 este valor debe restablecerse en maxPoolSize_

IBM Toolbox para Java 393

numDaemons_ = 75if (timeToRunDaemons_ == 0)

timeToRunDaemons_ = 1801000 180 segundos == 3 minutos

else Establecer valores maacutes conservadores ya que van a establecerse conexiones reales con un

servidor real y no deseamos monopolizar el servidorminPoolSize_ = 5maxPoolSize_ = 15initialPoolSize_ = 9numDaemons_ = 4if (timeToRunDaemons_ == 0)

timeToRunDaemons_ = 151000 15 segundos

maxLifetime_ = (int)timeToRunDaemons_ 3maxIdleTime_ = (int)timeToRunDaemons_ 4propertyCycle_ = timeToRunDaemons_ 4poolHealthCheckCycle_ = Mathmin(timeToRunDaemons_ 4 20601000) como miacutenimo una vez cada 20 minutos (maacutes frecuentemente si el tiempo de ejecucioacuten es maacutes corto)daemonMaxSleepTime_ = Mathmin(timeToRunDaemons_ 3 101000) como maacuteximo 10 segundos (menos si el tiempo de ejecucioacuten es maacutes corto)daemonMinSleepTime_ = 20 milisegundos

if (DEBUG)Systemoutprintln(setup Construyendo

+ AS400JDBCManagedConnectionPoolDataSource (cpds0))AS400JDBCManagedConnectionPoolDataSource cpds0 =

new AS400JDBCManagedConnectionPoolDataSource()

Establecer propiedades de origen de datos Tenga en cuenta que tanto CPDS como MDS tienen estas propiedades y pueden tener valores diferentescpds0setServerName(host)cpds0setDatabaseName(host)iasp puede especificarse aquiacutecpds0setUser(userid)cpds0setPassword(password)

cpds0setSavePasswordWhenSerialized(true)

Establecer propiedades especiacuteficas de agrupacioacuten de conexionescpds0setInitialPoolSize(initialPoolSize_)cpds0setMinPoolSize(minPoolSize_)cpds0setMaxPoolSize(maxPoolSize_)cpds0setMaxLifetime((int)(maxLifetime_1000)) convertir a segundoscpds0setMaxIdleTime((int)(maxIdleTime_1000)) convertir a segundoscpds0setPropertyCycle((int)(propertyCycle_1000)) convertir a segundoscpds0setReuseConnections(false) no reutilizar conexiones

Establecer la faacutebrica de contexto inicial que debe utilizarseSystemsetProperty(ContextINITIAL_CONTEXT_FACTORY

comsunjndifscontextRefFSContextFactory)

Obtener el contexto inicial JNDIContext ctx = new InitialContext()

Nota a continuacioacuten figura un procedimiento alternativo para establecer las propiedades de contexto localmente Properties env = new Properties() envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory) Contexto ctx = new InitialContext(env)

ctxrebind(mydatasource cpds0) Ahora pueden realizarse buacutesquedas en cpds por el

nombre mydatasource

if (DEBUG)Systemoutprintln(setup lookup(mydatasource + ))

AS400JDBCManagedConnectionPoolDataSource cpds1 = (AS400JDBCManagedConnectionPoolDataSource)ctxlookup(mydatasource) if (DEBUG) Systemoutprintln(setup cpds1getUser() == | + cpds1getUser() + |)

Crear un objeto DataSource estaacutendar que haga referencia a eacutel

if (DEBUG)Systemoutprintln(setup Constructing AS400JDBCManagedDataSource (mds0))

AS400JDBCManagedDataSource mds0 = new AS400JDBCManagedDataSource()mds0setDescription(DataSource que da soporte a la agrupacioacuten de conexiones)mds0setDataSourceName(mydatasource)

394 IBM Toolbox para Java IBM Toolbox para Java

ctxrebind(ConnectionPoolingDataSource mds0)

if (DEBUG)Systemoutprintln(setup lookup(ConnectionPoolingDataSource + ))

dataSource_ = (DataSource)ctxlookup(ConnectionPoolingDataSource)dataSource_setLogWriter(output_)if (DEBUG)Systemoutprintln(setup dataSource_getUser() == | +

((AS400JDBCManagedDataSource)dataSource_)getUser() + |)

mds_ = (AS400JDBCManagedDataSource)dataSource_catch (Exception e)

eprintStackTrace()Systemoutprintln(Error de configuracioacuten durante la creacioacuten del archivo de rastreo)

void displayConnectionType(Connection conn boolean specifiedDefaultId)

if (conn instanceof comibmas400accessAS400JDBCConnectionHandle)Systemoutprint((+ (specifiedDefaultId + -) + P))

elseSystemoutprint((+ (specifiedDefaultId + -) + NP))

Obtiene y devuelve conexiones desde y hacia una agrupacioacuten de conexiones durante un tiempopublic void runTest()

boolean ok = truetry

Systemoutprintln(Pruebe iniciada ejecutada en + new Date())

if (DEBUG)Systemoutprintln(Comprobacioacuten de estado justo despueacutes de la

creacioacuten del origen de datos+ (se espera que la agrupacioacuten auacuten no exista) )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten existe antes del primer getConnection())

Comprobar algunos meacutetodos getset para propiedades JDBCSystemoutprintln(Comprobando meacutetodos getset )

mds_setAccess(soacutelo lectura)if (mds_getAccess()equals(soacutelo lectura))

ok = falseSystemoutprintln(nERROR getAccess() ha devuelto un valor inesperado

+ | + mds_getAccess()+|)

boolean oldBool = mds_isBigDecimal()boolean newBool = (oldBool false true)mds_setBigDecimal(newBool)if (mds_isBigDecimal() = newBool)

ok = falseSystemoutprintln(nERROR isBigDecimal() ha devuelto un valor

inesperado + |+mds_isBigDecimal()+|)

mds_setBigDecimal(oldBool)

int oldInt = mds_getBlockCriteria()int newInt = (oldInt == 2 1 2)mds_setBlockCriteria(newInt)if (mds_getBlockCriteria() = newInt)

ok = falseSystemoutprintln(nERROR getBlockCriteria() ha devuelto un valor

inesperado + |+mds_getBlockCriteria()+|)

mds_setBlockCriteria(oldInt)

IBM Toolbox para Java 395

Comprobar algunos meacutetodos getset para propiedades de socket

oldBool = mds_isKeepAlive()newBool = (oldBool false true)mds_setKeepAlive(newBool)if (mds_isKeepAlive() = newBool)

ok = falseSystemoutprintln(nERROR isKeepAlive() ha devuelto un valor

inesperado + |+mds_isKeepAlive()+|)

mds_setKeepAlive(oldBool)

oldInt = mds_getReceiveBufferSize()newInt = (oldInt == 256 512 256)mds_setReceiveBufferSize(newInt)if (mds_getReceiveBufferSize() = newInt)

ok = falseSystemoutprintln(nERROR getReceiveBufferSize() ha devuelto un valor

inesperado + |+mds_getReceiveBufferSize()+|)

mds_setReceiveBufferSize(oldInt)

Systemoutprintln(CONNECTION 1)Object o = dataSource_getConnection()Systemoutprintln(ogetClass())Systemoutprintln(LOOK ABOVE)Connection c1 = dataSource_getConnection()

if (DEBUG)displayConnectionType(c1 true)

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes del primer getConnection() )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del primer getConnection())

if (TESTING_THREAD_SAFETY)

try

c1setAutoCommit(false)if (DEBUG)Systemoutprintln(SELECT FROM QIWSQCUSTCDT)

Statement s = c1createStatement()ResultSet rs = sexecuteQuery(SELECT FROM QIWSQCUSTCDT)while (rsnext ())

if (DEBUG)Systemoutprintln(rsgetString(2))

rsclose()sclose()

catch (Exception e)

eprintStackTrace()if (DEBUG)Systemoutprintln(Comprobacioacuten de estado despueacutes de un

error de conexioacuten muy grave )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado

despueacutes del error muy + grave)

Systemoutprintln(CONNECTION 2)Connection c2 = dataSource_getConnection(userid password)if (DEBUG)displayConnectionType(c2 false)

Systemoutprintln(CONNECTION 3)Connection c3 = dataSource_getConnection()if (DEBUG)

396 IBM Toolbox para Java IBM Toolbox para Java

displayConnectionType(c3 true)c1close()

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes del primer close())

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del primer close())

Systemoutprintln(CONNECTION 4)Connection c4 = dataSource_getConnection()if (DEBUG) displayConnectionType(c4 true)

c1close() cerrar de nuevoc2close()c3close()c4close()

if (DEBUG) Systemoutprintln(Comprobando estado despueacutes del uacuteltimo close())if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del uacuteltimo close())

Iniciar los daemons de pruebaSystemoutprintln(Iniciando daemons de prueba)startThreads()

Ejecutar los daemons de prueba durante un tiempo comprobar el estado de la agrupacioacuten perioacutedicamente

long startTime = SystemcurrentTimeMillis()long endTime = startTime + timeToRunDaemons_while (SystemcurrentTimeMillis() lt endTime)

Systemoutprint(h) Permitir que los daemons se ejecuten durante un tiempo y luego comprobar el estado de la agrupacioacutentry

Threadsleep(poolHealthCheckCycle_)catch (InterruptedException ie) if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de iniciar los daemons de prueba)

Detener los daemons de pruebaSystemoutprintln(Deteniendo daemons de prueba)stopThreads()

if (DEBUG)Systemoutprintln(Comprobacioacuten de estado despueacutes de ejecutar

daemons connectionGetter)

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de detener los daemons de prueba)

if (TESTING_THREAD_SAFETY)

Systemoutprintln(CONNECTION 5)Connection c = dataSource_getConnection()if (DEBUG) displayConnectionType(c true)csetAutoCommit(false)if (DEBUG) Systemoutprintln(SELECT FROM QIWSQCUSTCDT)Statement s = ccreateStatement()ResultSet rs = sexecuteQuery(SELECT FROM QIWSQCUSTCDT)while (rsnext ())

if (DEBUG) Systemoutprintln(rsgetString(2))rsclose()sclose()cclose()

Systemoutprintln(nCerrando la agrupacioacuten)mds_closePool()

IBM Toolbox para Java 397

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes de cerrar la agrupacioacuten)

TracesetTraceJDBCOn(true) aseguacuterese de que se imprima el estado finalTracesetTraceOn(true)if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de cerrar la agrupacioacuten)

Systemoutprintln()if(ok==true)

Systemoutprintln(prueba ejecutada satisfactoriamente)else

Systemoutprintln(prueba anoacutemala)catch (Exception e)

Systemoutprintln(e)eprintStackTrace()

finally

Systemoutprintln(Prueba finalizada en + new Date())

void startThreads()

Crear un grupo de hebras que llaman a getConnection()Thread[] threads = new Thread[numDaemons_]for (int i=0 iltnumDaemons_ i++)

ConnectionGetter getter Elegir aleatoriamente si este daemon especificaraacute el uid predeterminado o un uid exclusivoif (random_nextBoolean())

getter = new ConnectionGetter(useridpassword)if (TESTING_THREAD_SAFETY) puede utilizarse un userid ficticio

getter = new ConnectionGetter(Thread+i Pwd+i)else debe utilizarse un userid real

getter = new ConnectionGetter(useridpassword)

else

getter = new ConnectionGetter(null null)

threads[i] = new Thread(getter [+i+])threads[i]setDaemon(true)

Iniciar las hebrasfor (int i=0 iltnumDaemons_ i++)

threads[i]start()

void stopThreads()

Indicar a las hebras que se detengankeepDaemonsAlive_ = falsesynchronized (daemonSleepLock_)

daemonSleepLock_notifyAll()

Esperar a que los daemons se detengantry

Threadsleep(3000)catch (InterruptedException ie)

ConnectionGetter --------------------------------------------------------------------

Clase de ayuda Este daemon se activa a intervalos aleatorios y obtieneotra conexioacuten de la agrupacioacuten de conexiones o devuelve una conexioacuten obtenida

398 IBM Toolbox para Java IBM Toolbox para Java

anteriormente a la agrupacioacutenprivate final class ConnectionGetter implements Runnable

private String uid_private String pwd_private boolean useDefaultUid_private long maxSleepTime_private String threadName_private boolean firstConnection_ = trueArrayList connections_ = new ArrayList() lista de conexiones que actualmente son rsquopropiedadrsquo de este meacutetodo de obtencioacuten

ConnectionGetter(String uid String pwd) uid_ = uidpwd_ = pwdif (uid_ == null) useDefaultUid_ = trueelse useDefaultUid_ = falsemaxSleepTime_ = daemonMaxSleepTime_ copia propia que puede ajustarse

public void run()

threadName_ = ThreadcurrentThread()getName()if (DEBUG) Systemoutprintln(ConnectionGetter(+threadName_+) Starting up)

try

while (keepDaemonsAlive_)

try

Elegir un tiempo de latencia aleatorio entre los valores miacutenimo y maacuteximolong sleepTime = Mathmax((long)(maxSleepTime_ random_nextFloat())

daemonMinSleepTime_) Nota nunca debe llamarse a wait(0) porque esperariacutea indefinidamentesynchronized (daemonSleepLock_)

try daemonSleepLock_wait(sleepTime)Systemoutprint()

catch (InterruptedException ie)

if (keepDaemonsAlive_) break

Decidir aleatoriamente si debe solicitarse otra conexioacuten o devolver una conexioacuten obtenida anteriormenteConnection connif (random_nextBoolean()) Dejar la decisioacuten a la suerte Solicitar otra conexioacuten

if (useDefaultUid_)

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) - get())

conn = dataSource_getConnection()else

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) -

+ get(+uid_+))conn = dataSource_getConnection(uid_ pwd_)

if (conn == null) Systemoutprintln(ConnectionGetter(+threadName_+) ERROR

+ getConnection() ha devuelto null)else

Ocasionalmente olvidar que somos propietarios de una conexioacuten y olvidar cerrarla Las conexiones hueacuterfanas deben en uacuteltimo teacutermino sobrepasar su tiempo de vida maacuteximo y el gestor de conexiones las repetiraacutefloat val = random_nextFloat()if (firstConnection_ || val lt 01)

convierta en rsquohueacuterfanasrsquo algunas de las conexiones obtenidasfirstConnection_ = false

IBM Toolbox para Java 399

else connections_add(conn)

if (DEBUG) displayConnectionType(conn useDefaultUid_)if (conn instanceof comibmas400accessAS400JDBCConnectionHandle) Hemos colocado una conexioacuten en una agrupacioacuten Intente aumentar el tiempo de ciclo

if (maxSleepTime_ gt 100)maxSleepTime_--

elsemaxSleepTime_ = 100

else No hemos colocado una conexioacuten en una agrupacioacuten Eso significa que la agrupacioacuten

debe estar al maacuteximo de capacidad Reduzca un poco el tiempo de ciclomaxSleepTime_ = maxSleepTime_ + 50

else Cerrar una conexioacuten de la que actualmente somos propietarios

if (connections_size() = 0) conn = (Connection)connections_remove(0)connclose()

inner trycatch (Exception e)

eprintStackTrace()

outer while outer tryfinally

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) Stopping)

Devolver todas las conexiones que todaviacutea estaacuten en la listafor (int i=0 iltconnections_size() i++)

Connection conn = (Connection)connections_remove(0)try connclose() catch (Exception e) eprintStackTrace()

clase interna rsquoConnectionGetterrsquo

Ejemplos coacutemo se utilizan las clases FieldDescription RecordFormat y RecordLos ejemplos que hay a continuacioacuten muestran coacutemo se utilizan las clases FieldDescription RecordFormaty Record de IBM Toolbox para Java con colas de datos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Ejemplo coacutemo se utilizan las clases FieldDescription

Puede utilizar las clases FieldDescription para describir los distintos tipos de datos que forman unaentrada de una cola de datos En estos ejemplos se presupone el siguiente formato para las entradas de lacola de datos

Nuacutemero mensaje Remitente Hora enviacuteo Texto mensaje Respuesta necesaria| | | | |

bin(4) char(50) char(8) char(1024) char(1)

Cree descripciones de campo para los datos de entradaBinaryFieldDescription msgNumber = new BinaryFieldDescription(new AS400Bin4()

msgnum)CharacterFieldDescription sender = new CharacterFieldDescription(new AS400Text(50)

sender)CharacterFieldDescription timeSent = new CharacterFieldDescription(new AS400Text(8)

timesent)

400 IBM Toolbox para Java IBM Toolbox para Java

CharacterFieldDescription msgText = new CharacterFieldDescription(new AS400Text(1024)msgtext)

CharacterFieldDescription replyRequired = new CharacterFieldDescription(new AS400Text(1)replyreq)

Utilizacioacuten de la clase RecordFormat

Puede utilizar la clase RecordFormat para describir los datos que forman la entrada de la cola de datos

Ejemplo definir un objeto RecordFormat y utilizarlo dinaacutemicamente

El ejemplo siguiente utiliza la clase RecordFormat para describir el formato de la entrada de la cola dedatos y a continuacioacuten utiliza este elemento para recuperar un registro

RecordFormat entryFormat = new RecordFormat() Describa los campos de una entrada de la cola de datosentryFormataddFieldDescription(msgNumber)entryFormataddFieldDescription(sender)entryFormataddFieldDescription(timeSent)entryFormataddFieldDescription(msgText)entryFormataddFieldDescription(replyRequired)

Obtenga un registro seguacuten el formato de las entradas de la cola de datosRecord rec = entryFormatgetNewRecord()

Ejemplo definir RecordFormat estaacuteticamente

El ejemplo siguiente define el formato de registro estaacuteticamente lo que permite a muchos programasutilizar el formato sin codificar el formato de registro varias veces

public class MessageEntryFormat extends RecordFormat

Las descripciones de campo se incluyen en la clasestatic BinaryFieldDescription msgNumber = new BinaryFieldDescription(new AS400Bin4()

msgnum)static CharacterFieldDescription sender = new CharacterFieldDescription(new AS400Text(50)

sender)static CharacterFieldDescription timeSent = new CharacterFieldDescription(new AS400Text(8)

timesent)static CharacterFieldDescription msgText = new CharacterFieldDescription(new AS400Text(1024)

msgtext)static CharacterFieldDescription replyRequired = new CharacterFieldDescription(new AS400Text(1)

replyreq)

public MessageEntryFormat()

Daremos un nombre a este formato para su uso posteriorsuper(MessageEntryFormat) Antildeada las descripciones de campoaddFieldDescription(msgNumber)addFieldDescription(sender)addFieldDescription(timeSent)addFieldDescription(msgText)addFieldDescription(replyRequired)

Ejemplo coacutemo se utiliza RecordFormat estaacuteticamente

El ejemplo siguiente muestra coacutemo un programa Java puede utilizar un objeto RecordFormat definidoestaacuteticamente

MessageEntryFormat entryFormat = new MessageEntryFormat() Obtenga un registro seguacuten el formato de las entradas de la cola de datosRecord rec = entryFormatgetNewRecord()

IBM Toolbox para Java 401

Utilizacioacuten de la clase Record

Puede utilizar la clase Record para acceder a campos individuales de entradas de la cola de datos

Ejemplo coacutemo se utiliza un objeto Record geneacuterico Cree una instancia del objeto cola de datosDataQueue dq = new DataQueue(new AS400() qsyslibmyliblibmyqdtaq)

Lea una entradaDataQueueEntry dqEntry = nulltry

dqEntry = dqread()catch(Exception e)

Maneje las excepciones

Obtenga un objeto registro del formato de registro inicializaacutendolo con los datos de la entrada que acabamos de leerRecord rec = entryFormatgetNewRecord(dqEntrygetData())

Enviacutee a la salida la entrada completa como serie El contenido del registro se convierte a objeto Java seguacuten el formato de registro de la entradaSystemoutprintln(rectoString()) Obtenga el contenido de los campos individuales de la entrada El contenido de cada campo se convierte a un objeto JavaInteger num = (Integer)recgetField(0) Recupere el contenido por iacutendiceString s = (String)recgetField(sender) Recupere el contenido por nombre de campoString text = (String)recgetField(3) Recupere el texto del mensaje Enviacutee los datos a la salidaSystemoutprintln(num + + s + + text)

Ejemplo coacutemo se utiliza un objeto Record especiacutefico

Tambieacuten puede definir estaacuteticamente y utilizar un objeto Record especiacutefico del formato de esta cola dedatos lo que le permite proporcionar meacutetodos get() y set() para los campos denominados de forma maacutessignificativa que getField() y setField() Ademaacutes al utilizar el objeto Record especiacutefico definidoestaacuteticamente puede devolver tipos Java baacutesicos en lugar de objetos y puede identificar el tipo deretorno para el usuario

Tenga en cuenta que este ejemplo debe convertir expliacutecitamente el objeto Java correctopublic class MessageEntryRecord extends Record

static private RecordFormat format = new MessageEntryFormat()

public MessageEntryRecord()

super(format)

public int getMessageNumber()

Devuelva el nuacutemero de mensaje como int Nota conocemos el formato de registro y por ello sabemos los nombres de los campos Es maacutes seguro obtener el campo por nombre por si se ha insertado un campo en el formato sin saberloreturn ((Integer)getField(msgnum))intValue()

public String getMessageText()

Devuelva el texto del mensaje

402 IBM Toolbox para Java IBM Toolbox para Java

return (String)getField(msgtext)

public String getSender()

Devuelva el remitente del mensajereturn (String)getField(sender)

public String getTimeSent()

Devuelva el remitente del mensajereturn (String)getField(timesent)

Aquiacute podriacuteamos antildeadir establecedores

Ejemplo devolver un nuevo objeto MessageEntryRecord

Necesitamos alterar temporalmente el meacutetodo getNewRecord() de la clase MessageEntryFormat (en elejemplo anterior) a fin de devolver un nuevo objeto MessageEntryRecord Para alterar temporalmente elmeacutetodo antildeada lo siguiente a la clase MessageEntryFormat

public Record getNewRecord(byte[] data)

Record r = new MessageEntryRecord()rsetContents(data)return r

Tras antildeadir el nuevo meacutetodo getNewRecord() puede utilizar el objeto MessageEntryRecord parainterpretar la entrada de la cola de datos

Obtenga un objeto registro del formato de registro inicializaacutendolo con los datos de la entrada que acabamos de leer Observe el uso del nuevo meacutetodo getNewRecord() alteradoMessageEntryRecord rec = (MessageEntryRecord)entryFormatgetNewRecord(dqEntrygetData())

Enviacutee a la salida la entrada completa como serie El contenido del registro se convierte a objeto Java seguacuten el formato de registro de la entradaSystemoutprintln(rectoString()) Obtenga el contenido de los campos individuales de la entrada El contenido de cada campo se convierte a un objeto Javaint num = recgetMessageNumber() Recupere el nuacutemero de mensaje como intString s = recgetSender() Recupere el remitenteString text = recgetMessageText() Recupere el texto del mensaje Enviacutee los datos a la salidaSystemoutprintln(num + + s + + text)

Ejemplo coacutemo se utilizan las clases DataQueue para poner datos en una colaEste ejemplo utiliza las clases de registro (Record) y de formato de registro (Record format) para colocardatos en la cola Los datos de tipo serie se convierten desde Unicode a EBCDIC y los nuacutemeros seconvierten de formato Java a formato del sistema Dado que los datos se convierten en la cola de datoslas entradas de cola de datos pueden ser leiacutedas por un programa servidor un programa IBM i u otroprograma Java

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de cola de datos Este programa utiliza la clase DataQueue para poner registros en una cola de datos Este ejemplo utiliza las clases de registro y de formato de registro para

IBM Toolbox para Java 403

poner datos en la cola Los datos de serie se convierten de Unicode a ebcdic y los nuacutemeros se convierten de formato Java a formato del servidor Dado que los datos se convierten las entradas pueden ser leiacutedas por un programa de servidor un programa de Access para Windows u otro programa Java Este es el lado del productor del ejemplo de productorconsumidor Coloca elementos de trabajo en la cola para que el consumidor los procese Sintaxis del mandato DQProducerExample sistema

import javaioimport javautilimport javanetimport comibmas400access

public class DQProducerExample extends Object

Cree un lector para obtener entrada del usuariostatic BufferedReader inputStream =

new BufferedReader(new InputStreamReader(Systemin)1)

public static void main(String[] parameters)

Systemoutprintln( )

Si no se ha especificado el nombre del sistema visualizar texto de ayuda y salirif (parameterslength gt= 1)

try

El primer paraacutemetro es el sistema que contiene la cola de datosString system = parameters[0]

Cree un objeto AS400 para el servidor que tiene la cola de datosAS400 as400 = new AS400(system)

Construya un formato de registro para el formato de la entrada de cola de datos Este formato coincide con el formato de la clase DQConsumer Un registro estaacute formado por los elementos siguientes - un nuacutemero de cuatro bytes -- el nuacutemero de cliente - un nuacutemero de cuatro bytes -- el nuacutemero de pieza - una serie de 20 caracteres -- la descripcioacuten de la pieza - un nuacutemero de cuatro bytes -- el nuacutemero de piezas de este pedido Primero cree los tipos de datos baseBinaryFieldDescription customerNumber =

new BinaryFieldDescription(new AS400Bin4() CUSTOMER_NUMBER)

BinaryFieldDescription partNumber =new BinaryFieldDescription(new AS400Bin4() PART_NUMBER)

CharacterFieldDescription partName =new CharacterFieldDescription(new AS400Text(20 as400) PART_NAME)

BinaryFieldDescription quantity =new BinaryFieldDescription(new AS400Bin4() QUANTITY)

Construya un formato de registro y lleacutenelo con los tipos de datos baseRecordFormat dataFormat = new RecordFormat()dataFormataddFieldDescription(customerNumber)dataFormataddFieldDescription(partNumber)dataFormataddFieldDescription(partName)dataFormataddFieldDescription(quantity)

404 IBM Toolbox para Java IBM Toolbox para Java

Cree la biblioteca que contiene la cola de datos con CommandCallCommandCall crtlib = new CommandCall(as400)crtlibrun(CRTLIB JAVADEMO)

Cree el objeto cola de datosDataQueue dq = new DataQueue(as400 QSYSLIBJAVADEMOLIBPRODCONSDTAQ)

Cree la cola de datos por si esta es la primera vez que este programa se ejecuta La excepcioacuten de La cola ya existe se captura y no se tiene en cuentatry

dqcreate(96)catch (Exception e)

Obtenga el primer campo de datos del usuarioSystemoutprint(Especifique el nuacutemero de cliente (o 0 para salir) )int customer = getInt()

Mientras haya datos para colocar en la colawhile (customer gt 0)

Obtenga los demaacutes datos de este pedido del usuarioSystemoutprint(Especifique el nuacutemero de pieza )int part = getInt()

Systemoutprint(Especifique la cantidad )int quantityToOrder = getInt()

String description = pieza + part

Cree un registro basado en el formato de registro El registro ahora estaacute vaciacuteo pero al final contendraacute los datosRecord data = new Record(dataFormat)

Establezca los valores recibidos del usuario en el registrodatasetField(CUSTOMER_NUMBER new Integer(customer))datasetField(PART_NUMBER new Integer(part))datasetField(QUANTITY new Integer(quantityToOrder))datasetField(PART_NAME description)

Convierta el registro a una matriz de bytes La matriz de bytes es lo que se coloca realmente en la cola de datosbyte [] byteData = datagetContents()

Systemoutprintln()Systemoutprintln(Escribiendo el registro en el servidor)Systemoutprintln()

Escriba el registro en la cola de datosdqwrite(byteData)

Obtenga el valor siguiente del usuarioSystemoutprint(Especifique el nuacutemero de cliente (o 0 para salir) )customer = getInt()

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de cola de datos ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(La operacioacuten de cola de datos ha fallado)Systemoutprintln(e)

IBM Toolbox para Java 405

Visualice texto de ayuda si los paraacutemetros son incorrectoselse

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( DQProducter sistema)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( sistema = Servidor que tiene la cola de datos)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( DQProducerExample miSistema)Systemoutprintln()Systemoutprintln()

Systemexit (0)

Esta es la subrutina que obtiene una serie de caracteres del usuario y la convierte a intstatic int getInt()

int i = 0boolean Continue = true

while (Continue)

try

String s = inputStreamreadLine()

i = (new Integer(s))intValue()Continue = false

catch (Exception e)

Systemoutprintln(e)Systemoutprint(Especifique un nuacutemero ==gt)

return i

Ejemplo coacutemo se utilizan las clases DataQueue para leer entradas en una cola dedatosEste programa utiliza las clases DataQueue para leer entradas de una cola de datos del servidor Lasentradas se habiacutean colocado en la cola con el programa de ejemplo DQProducer

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de cola de datos Este programa utiliza las clases de cola de datos para leer entradas de una cola de datos en el servidor Las entradas se colocaron en la cola con el programa de ejemplo DQProducer

406 IBM Toolbox para Java IBM Toolbox para Java

Este es el lado del consumidor del ejemplo de productorconsumidor Lee entradas de la cola y las procesa Sintaxis del mandato DQConsumerExample sistema

import javaioimport javautilimport javanetimport comibmas400access

public class DQConsumerExample extends Object

public static void main(String[] parameters)

Systemoutprintln( )

Si no se ha especificado un nombre de sistema visualizar texto de ayuda y salirif (parameterslength gt= 1)

try

El primer paraacutemetro es el sistema que contiene la cola de datosString system = parameters[0]

Cree un objeto AS400 para el servidor que tiene la cola de datosAS400 as400 = new AS400(system)

Construya un formato de registro para el formato de la entrada de cola de datos Este formato coincide con el formato de la clase DQProducer Un registro estaacute formado por los elementos siguientes - un nuacutemero de cuatro bytes -- el nuacutemero de cliente - un nuacutemero de cuatro bytes -- el nuacutemero de pieza - una serie de 20 caracteres -- la descripcioacuten de la pieza - un nuacutemero de cuatro bytes -- el nuacutemero de piezas de este pedido

Primero cree los tipos de datos baseBinaryFieldDescription customerNumber =

new BinaryFieldDescription(new AS400Bin4() CUSTOMER_NUMBER)

BinaryFieldDescription partNumber =new BinaryFieldDescription(new AS400Bin4() PART_NUMBER)

CharacterFieldDescription partName =new CharacterFieldDescription(new AS400Text(20 as400) PART_NAME

BinaryFieldDescription quantity =new BinaryFieldDescription(new AS400Bin4() QUANTITY

Construya un formato de registro y lleacutenelo con los tipos de datos baseRecordFormat dataFormat = new RecordFormat()

dataFormataddFieldDescription(customerNumber)dataFormataddFieldDescription(partNumber)dataFormataddFieldDescription(partName)dataFormataddFieldDescription(quantity)

Cree el objeto cola de datos que representa la cola de datos en el servidorDataQueue dq = new DataQueue(as400 QSYSLIBJAVADEMOLIBPRODCONSDTAQ)

IBM Toolbox para Java 407

boolean Continue = true

Lea la primera entrada de la cola El valor de tiempo de espera es -1 por lo que este programa esperaraacute indefinidamente a que llegue una entradaSystemoutprintln( Esperando una entrada para procesar )

DataQueueEntry DQData = dqread(-1)

while (Continue)

Se acaba de leer una entrada de la cola Ponga los datos en un objeto registro para que el programa pueda acceder a los campos de los datos por nombre El objeto registro tambieacuten convertiraacute los datos del formato del servidor al formato JavaRecord data = dataFormatgetNewRecord(DQDatagetData())

Obtenga dos valores del registro y visualiacutecelosInteger amountOrdered = (Integer) datagetField(QUANTITY)String partOrdered = (String) datagetField(PART_NAME)

Systemoutprintln(Se necesita + amountOrdered + de + partOrdered)

Systemoutprintln( )Systemoutprintln( Esperando una entrada para procesar )

Espere la entrada siguienteDQData = dqread(-1)

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de cola de datos ha fallado y enviacutee la excepcioacuten a la salidaSystemoutprintln(La operacioacuten de cola de datos ha fallado)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectoselse

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( DQConsumerExample sistema)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( sistema = Servidor que tiene la cola de datos)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( DQConsumerExample miSistema)Systemoutprintln()Systemoutprintln()

Systemexit (0)

408 IBM Toolbox para Java IBM Toolbox para Java

Utilizacioacuten de ejemplo de tipos de datosPuede emplear las clases AS400DataType de IBM Toolbox para Java con ProgramCall tanto paraproporcionar datos para los paraacutemetros de programa como para interpretar los datos devueltos en losparaacutemetros de programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Ejemplo coacutemo se utilizan las clases AS400DataType con ProgramCall

El ejemplo siguiente muestra coacutemo emplear las clases AS400DataType con ProgramCall para hacer unallamada a la API del sistema QUSRMBRD Recuperar descripcioacuten de miembro La API QUSRMBRDrecupera la descripcioacuten de un miembro especiacutefico en un archivo de base de datos Las tablas que figurana continuacioacuten del ejemplo contienen los paraacutemetros de QUSRMBRD necesarios y los tipos deinformacioacuten que recupera el ejemplo

Cree un objeto ProgramCall Estableceremos el nombre de programa y la lista de paraacutemetros maacutes adelanteProgramCall qusrmbrd = new ProgramCall(new AS400())

Cree una lista de paraacutemetros de programa vaciacuteaProgramParameter[] parms = new ProgramParameter[6]

Cree AS400DataTypes para convertir los paraacutemetros de entrada de tipos Java a datos del servidorAS400Bin4 bin4 = new AS400Bin4()

Necesitamos un objeto AS400Text aparte para cada paraacutemetro con una longitud distinta ya que la clase AS400Text requiere que la longitud esteacute especificadaAS400Text char8Converter = new AS400Text(8)AS400Text char20Converter = new AS400Text(20)AS400Text char10Converter = new AS400Text(10)AS400Text char1Converter = new AS400Text(1)

Rellene la lista de paraacutemetros utilizaremos los objetos AS400DataType para convertir los valores Java a matrices de bytes que contengan datos del servidor

Para el paraacutemetro de salida solo necesitamos especificar cuaacutentos bytes se devolveraacutenparms[0] = new ProgramParameter(135)parms[1] = new ProgramParameter(bin4toBytes(new Integer(135)))parms[2] = new ProgramParameter(char8ConvertertoBytes(MBRD0100))parms[3] = new ProgramParameter(char20ConvertertoBytes(MYFILE MYLIB ))parms[4] = new ProgramParameter(char10COnvertertoBytes(MYMEMBER ))parms[5] = new ProgramParameter(char1ConvertertoBytes(0))

Establezca el nombre de programa y la lista de paraacutemetrosqusrmbrdsetProgram(qsyslibqusrmbrdpgm parms)

Llame al programatry

qusrmbrdrun()catch(Exception e)

Maneje las excepciones

Obtenga la informacioacuten recuperada Observe que son datos de servidor en brutobyte[] receiverVar = parms[0]getOutputData()

Esto es necesario para convertir los datos de hora y fecha

IBM Toolbox para Java 409

AS400Text char13Converter = new AS400Text(13)

Esto es necesario para convertir los datos de texto descriptivoAS400Text char50Converter = new AS400Text(50)

Cree un objeto AS400Structure para manejar la informacioacuten devueltaAS400DataType[] dataTypeArray = new AS400DataType[11]dataTypeArray[0] = bin4dataTypeArray[1] = bin4dataTypeArray[2] = char10ConverterdataTypeArray[3] = char10ConverterdataTypeArray[4] = char10ConverterdataTypeArray[5] = char10ConverterdataTypeArray[6] = char10ConverterdataTypeArray[7] = char13ConverterdataTypeArray[8] = char13ConverterdataTypeArray[9] = char50ConverterdataTypeArray[10] = char1ConverterAS400Structure returnedDataConverter = new AS400Structure(dataTypeArray)

Convierta los datos devueltos a una matriz de objetos Java utilizando returnedDataConverterObject[] qusrmbrdInfo = dataConvertertoObject(receiverVar 0)

Obtenga el nuacutemero de bytes devueltosInteger bytesReturned = (Integer)qusrmbrdInfo[0]Integer bytesAvailable = (Integer)qusrmbrdInfo[1]if (bytesReturnedintValue() = 135)

Systemoutprintln(La cantidad de informacioacuten devuelta es incorrecta)Systemexit (0)

String fileName = (String)qusrmbrdInfo[2]String libName = (String)qusrmbrdInfo[3]String mbrName = (String)qusrmbrdInfo[4]String fileAttribute = (String)qusrmbrdInfo[5]String sourceType = (String)qusrmbrdInfo[6]String created = (String)qusrmbrdInfo[7]String lastChanged = (String)qusrmbrdInfo[8]String textDesc = (String)qusrmbrdInfo[9]String isSourceFile = (String)qusrmbrdInfo[10]

Enviaremos toda la informacioacuten a la pantallaSystemoutprintln(fileName + + libName + + mbrName + +

fileAttribute + sourceType + + created + +lastChanged + + textDesc + + isSourceFile)

En la tabla siguiente se indican los paraacutemetros necesarios para la API QUSRMBRD tal como se indica enel ejemplo anterior

Paraacutemetro de QUSRMBRD Entrada o salida Tipo Descripcioacuten

Variable receiver Salida Char() Almacenamientointermedio de caracteresque contendraacute lainformacioacuten recuperada

Longitud de la variablereceiver

Entrada Bin(4) Longitud delalmacenamiento intermediode caracteres proporcionadopara la variable receiver

410 IBM Toolbox para Java IBM Toolbox para Java

Paraacutemetro de QUSRMBRD Entrada o salida Tipo Descripcioacuten

Nombre de formato Entrada Char(8) Formato que especifica eltipo de informacioacuten que serecuperaraacute Debe ser unode los valores siguientes

v MBRD0100

v MBRD0200

v MBRD0300

El ejemplo siguienteespecifica MBRD0100

Nombre de archivo de basede datos calificado

Entrada Char(20) Nombre de archivocalificado Es el nombre dearchivo en blanco rellenadohasta 10 caracteres seguidosdel nombre de biblioteca enblanco rellenado hasta 10caracteres Se permiten losvalores especiales deCURLIB y LIBL para elnombre de biblioteca

Nombre de miembro debase de datos

Entrada Char(10) Nombre en blanco delmiembro rellenado hasta 10caracteres Se permiten losvalores especiales deFIRST y LAST

Proceso de alteracionestemporales

Entrada Char(1) Indica si las alteracionestemporales debenprocesarse 0 indica que lasalteraciones temporales nose procesaraacuten Este es elvalor que especificaremos

La tabla siguiente muestra el tipo de informacioacuten que recupera el ejemplo (seguacuten el formato MBRD0100tal como se indica en el ejemplo anterior)

Informacioacuten recuperada Tipo

Bytes devueltos Bin(4)

Bytes disponibles Bin(4)

Nombre de archivo de base de datos Char(10)

Nombre de biblioteca de archivo de base de datos Char(10)

Nombre de miembro Char(10)

Atributo de archivo (tipo de archivo PF LF DDMF) Char(10)

Tipo de fuente (tipo del miembro de archivo fuente si esun archivo fuente)

Char(10)

Fecha y hora de creacioacuten Char(13)

Fecha y hora de uacuteltimo cambio de fuente Char(13)

Descripcioacuten de texto del miembro Char(50)

Archivo fuente (si el archivo es un archivo fuente0=archivo de datos 1=archivo fuente)

Char(1)

IBM Toolbox para Java 411

Ejemplo coacutemo se utiliza KeyedDataQueueEste programa utiliza la clase KeyedDataQueue para colocar registros en una cola de datos

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de cola de datos Este programa utiliza la clase KeyedDataQueue para poner registros en una cola de datos La clave es un nuacutemero y los datos son una serie Unicode Este programa muestra una forma de convertir un objeto int en una matriz de bytes y de convertir una serie Java en una matriz de bytes para que pueda escribirse en la cola Este es el lado del productor del ejemplo de productorconsumidor Coloca elementos de trabajo en la cola para que el consumidor los procese Sintaxis del mandato DQKeyedProducer sistema

import javaioimport javautilimport javanetimport comibmas400access

public class DQKeyedProducer extends Object

Cree un lector para obtener entrada del usuario

static BufferedReader inputStream =new BufferedReader(new InputStreamReader(Systemin)1)

public static void main(String[] parameters)

Systemoutprintln( )

Si no se ha especificado el nombre del sistema visualizar texto de ayuda y salir

if (parameterslength gt= 1)

El primer paraacutemetro es el sistema que contiene la cola de datos

String system = parameters[0]

Systemoutprintln(La prioridad es un valor numeacuterico Los rangos de valores son)Systemoutprintln( 0 - 49 = prioridad baja)Systemoutprintln( 50 - 100 = prioridad media)Systemoutprintln(100 + = prioridad alta)Systemoutprintln( )

try

Cree un objeto AS400 para el servidor que tiene la cola de datos

412 IBM Toolbox para Java IBM Toolbox para Java

AS400 as400 = new AS400(system)

Utilice CommandCall para crear la biblioteca que contiene la cola de datos

CommandCall crtlib = new CommandCall(as400)crtlibrun(CRTLIB JAVADEMO)

Cree el objeto cola de datos

QSYSObjectPathName name = new QSYSObjectPathName(JAVADEMO PRODCON2 DTAQ)

KeyedDataQueue dq = new KeyedDataQueue(as400 namegetPath())

Cree la cola de datos por si esta es la primera vez que este programa se ejecuta La excepcioacuten de La cola ya existe se captura y no se tiene en cuenta La longitud de la clave es de cuatro bytes la longitud de una entrada es de 96 bytes

try

dqcreate(4 96)catch (Exception e)

Obtenga los datos del usuario

Systemoutprint(Especifique el mensaje )String message = inputStreamreadLine()

Systemoutprint(Especifique la prioridad )int priority = getInt()

Mientras haya datos para colocar en la cola

while (priority gt 0)

Queremos escribir una serie Java como entrada en la cola La entrada de la cola de datos es una matriz de bytes por ello convierta la serie a una matriz de bytes

byte [] byteData = messagegetBytes(UnicodeBigUnmarked)

La clave es un nuacutemero La entrada de la cola de datos es una matriz de bytes por lo que debe convertir el objeto int a una matriz de bytes

byte [] byteKey = new byte[4]byteKey[0] = (byte) (priority gtgtgt 24)byteKey[1] = (byte) (priority gtgtgt 16)byteKey[2] = (byte) (priority gtgtgt 8)byteKey[3] = (byte) (priority)

Systemoutprintln()

IBM Toolbox para Java 413

Systemoutprintln(Escribiendo el registro en el servidor)Systemoutprintln()

Escriba el registro en la cola de datos

dqwrite(byteKey byteData)

Obtenga el valor siguiente del usuario

Systemoutprint(Especifique el mensaje )message = inputStreamreadLine()

Systemoutprint(Especifique la prioridad )priority = getInt()

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de cola de datos ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(La operacioacuten de cola de datos ha fallado)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectos

else

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( DQKeyedProducter sistema)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( sistema = servidor que tiene la cola de datos)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( DQKeyedProducer miSistema)Systemoutprintln()Systemoutprintln()

Systemexit (0)

Esta es la subrutina que obtiene una serie de caracteres del usuario y la convierte a int

static int getInt()

int i = 0boolean Continue = true

414 IBM Toolbox para Java IBM Toolbox para Java

while (Continue)

try

String s = inputStreamreadLine()

i = (new Integer(s))intValue()Continue = false

catch (Exception e)

Systemoutprintln(e)Systemoutprint(Especifique un nuacutemero ==gt)

return i

Ejemplo coacutemo se utilizan las clases KeyedDataQueue para leer entradas de unacola de datosEste programa utiliza las clases KeyedDataQueue para leer entradas de una cola de datos del servidorLas entradas se habiacutean colocado en la cola con el programa de ejemplo DQKeyedProducer

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de cola de datos por clave Este programa utiliza las clases KeyedDataQueue para leer entradas de una cola de datos en el servidor Las entradas se colocaron en la cola con el programa de ejemplo DQKeyedProducer La clave es un nuacutemero y los datos son una serie unicode Este programa muestra muestra una forma de convertir la matriz de bytes en un objeto int Java y leer una matriz de bytes y convertirla a una serie Java Este es el lado del consumidor del ejemplo de productorconsumidor Lee entradas de la cola y las procesa Sintaxis del mandato DQKeyedConsumer sistema

import javaioimport javautilimport javanetimport comibmas400access

public class DQKeyedConsumer extends Object

public static void main(String[] parameters)

Systemoutprintln( )

Si no se ha especificado un nombre de sistema visualizar texto de ayuda y salirif (parameterslength gt= 1)

El primer paraacutemetro es el sistema que contiene la cola de datosString system = parameters[0]

IBM Toolbox para Java 415

Cree matrices de bytes para los liacutemites de prioridad 100 + = prioridad alta 50 - 100 = prioridad media 0 - 49 = prioridad baja

byte [] key0 = new byte[4]key0[0] = 0key0[1] = 0key0[2] = 0key0[3] = 0

byte [] key50 = new byte[4]key50[0] = (byte) (50 gtgtgt 24)key50[1] = (byte) (50 gtgtgt 16)key50[2] = (byte) (50 gtgtgt 8)key50[3] = (byte) (50)

byte [] key100 = new byte[4]key100[0] = (byte) (100 gtgtgt 24)key100[1] = (byte) (100 gtgtgt 16)key100[2] = (byte) (100 gtgtgt 8)key100[3] = (byte) (100)

try

Cree un objeto AS400 para el servidor que tiene la cola de datosAS400 as400 = new AS400(system)

Cree el objeto cola de datos que representa la cola de datos en el servidor

QSYSObjectPathName name = new QSYSObjectPathName(JAVADEMOPRODCON2DTAQ)

KeyedDataQueue dq = new KeyedDataQueue(as400 namegetPath())KeyedDataQueueEntry DQData = null

try

boolean Continue = true

Seguir hasta que el usuario finalice la operacioacutenwhile (Continue)

Busque un elemento de prioridad alta en la cola Si encuentra uno proceacuteselo Observe que el meacutetodo peek no elimina el elemento si encuentra uno Observe tambieacuten que el tiempo de espera es 0 Si no encuentra ninguacuten elemento se recuperaraacute el control con una entrada de cola de datos nulaDQData = dqread(key100 0 GE)

if (DQData = null)

processEntry(DQData)

Si no se ha encontrado ninguacuten elemento de prioridad alta busque un valor medio para el elemento de prioridadelse

DQData = dqread(key50 0 GE)

if (DQData = null)

processEntry(DQData)

416 IBM Toolbox para Java IBM Toolbox para Java

Si no se ha encontrado ninguacuten elemento de prioridad media busque un valor bajo para el elemento de prioridadelse

DQData = dqread(key0 0 GE)

if (DQData = null)

processEntry(DQData)

else

Systemoutprintln(No hay nada para procesar se comprobaraacutede nuevo en 30 segundos)

Threadsleep(30000)

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de cola de datos ha fallado y enviacutee la excepcioacuten a la salidaSystemoutprintln(No es posible leer en la cola de datos)Systemoutprintln(e)

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de cola de datos ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(La operacioacuten de cola de datos ha fallado)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectoselse

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( DQKeyedConsumer sistema)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( sistema = Servidor que tiene la cola de datos)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln()Systemoutprintln( DQKeyedConsumer miSistema)Systemoutprintln()Systemoutprintln()

Systemexit (0)

static void processEntry(KeyedDataQueueEntry DQData)

IBM Toolbox para Java 417

try

Los datos son una serie Obtenga la serie de la entrada de cola de datos En la entrada de cola de datos los datos son una matriz de bytes por ello convierta la entrada de una matriz de bytes a una serieString message = new String(DQDatagetData() UnicodeBig)

La clave es una matriz de bytes Obtenga la clave de la entrada de cola de datos y convieacutertala a un nuacutemerobyte [] keyData = DQDatagetKey()

int keyValue = ((keyData[0] amp 0xFF) ltlt 24) +((keyData[1] amp 0xFF) ltlt 16) +((keyData[2] amp 0xFF) ltlt 8) +(keyData[3] amp 0xFF)

Enviacutee la entrada a la salidaSystemoutprintln(Prioridad + keyValue + mensaje + message)

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de cola de datos ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(No es posible leer en la cola de datos)Systemoutprintln(e)

Ejemplos coacutemo se utiliza IFSFileLos ejemplos que figuran a continuacioacuten muestran coacutemo se utiliza la clase IFSFile de IBM Toolbox paraJava

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importantev Ejemplo crear un directoriov Ejemplo coacutemo se utilizan las excepciones de IFSFile para hacer seguimiento de erroresv Ejemplo listar archivos con la extensioacuten txtv ldquoEjemplo coacutemo se utiliza el meacutetodo de IFSFile listFiles() para listar el contenido de un directoriordquo en la

paacutegina 420

Ejemplo crear un directorio Cree un objeto AS400 El

nuevo directorio se crearaacute en este sistemaAS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el directorioIFSFile aDirectory = new IFSFile(sys mydir1mydir2newdir)

Cree el directorioif (aDirectorymkdir())

Systemoutprintln(Crear directorio ha sido satisfactorio)else

La creacioacuten del directorio ha fallado Si el objeto ya existe determine si es un directorio o un archivo y a continuacioacuten muestre un mensajeif (aDirectoryexists())

if (aDirectoryisDirectory())

418 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln(El directorio ya existe)else

Systemoutprintln(Ya existe un archivo con ese nombre)else

Systemoutprintln(Crear directorio ha fallado)

Desconecte puesto que ya ha terminado de acceder a los archivossysdisconnectService(AS400FILE)

Ejemplo coacutemo se utilizan las excepciones de IFSFile para hacer seguimiento de errores

Cuando se produce un error la clase IFSFile lanza la excepcioacuten ExtendedIOException Esta excepcioacutencontiene un coacutedigo de retorno que indica la causa de la anomaliacutea La clase IFSFile lanza la excepcioacutenincluso cuando no la lance la clase javaio que la clase IFSFile duplica Por ejemplo el meacutetodo delete(suprimir) de javaioFile devuelve un booleano para indicar que la operacioacuten ha sido satisfactoria o queha fallado El meacutetodo delete de IFSFile devuelve un booleano pero si la supresioacuten falla se lanza unaexcepcioacuten ExtendedIOException La excepcioacuten ExtendedIOException proporciona al programa Javainformacioacuten detallada acerca de por queacute ha fallado la supresioacuten

Cree un objeto AS400AS400 sys = new AS400(mySystemmyCompanycom)

Cree un objeto de archivo que represente el archivoIFSFile aFile = new IFSFile(sys mydir1mydir2myfile)

Suprima el archivotry

aFiledelete()

Systemoutprintln(Supresioacuten satisfactoria )catch (ExtendedIOException e)

La supresioacuten ha fallado Obtenga el coacutedigo de retorno de la excepcioacuten y muestre por queacute ha fallado la supresioacutenint rc = egetReturnCode()

switch (rc)

case ExtendedIOExceptionFILE_IN_USESystemoutprintln(Supresioacuten anoacutemala archivo en uso )break

case ExtendedIOExceptionPATH_NOT_FOUNDSystemoutprintln(Supresioacuten anoacutemala viacutea no encontrada )break

para cada error especiacutefico que desee rastrear

defaultSystemoutprintln(Supresioacuten anoacutemala rc = )Systemoutprintln(rc)

Ejemplo listar archivos con la extensioacuten txt

El programa Java puede especificar opcionalmente criterios de coincidencia al listar los archivos deldirectorio Los criterios de coincidencia reducen el nuacutemero de archivos devueltos por el servidor al objetoIFSFile y asiacute el rendimiento aumenta El ejemplo que hay a continuacioacuten muestra coacutemo se listan losarchivos que tienen la extensioacuten txt

IBM Toolbox para Java 419

Cree el objeto AS400AS400 system = new AS400(mySystemmyCompanycom)

Cree el objeto de archivoIFSFile directory = new IFSFile(system )

Genere una lista de todos los archivos que tengan la extensioacuten txtString[] names = directorylist(txt)

Visualice los nombresif (names = null)

for (int i = 0 i lt nameslength i++)Systemoutprintln(names[i])

elseSystemoutprintln(No hay archivos txt)

Ejemplo coacutemo se utiliza el meacutetodo de IFSFile listFiles() para listar el contenido deun directorioEste programa de ejemplo utiliza las clases IFS de IBM Toolbox para Java para listar el contenido de undirectorio en el servidor

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de IFSListFiles Este programa utiliza las clases de IFS para listar el contenido de un directorio en el servidor Sintaxis del mandato IFSListFiles sistema directorio Por ejemplo IFSListFiles MySystem path1

import javaioimport javautilimport comibmas400access

public class IFSListFiles extends Object

public static void main(String[] parameters)

Systemoutprintln( )

String directoryName = String system =

Si no se han especificado ambos paraacutemetros visualizar texto de ayuda y salir

if (parameterslength gt= 2)

Supongamos que el primer paraacutemetro es el nombre de sistema y el segundo paraacutemetro es el nombre de directorio

system = parameters[0]directoryName = parameters[1]

try

Cree un objeto AS400 para el servidor que contiene los archivos

420 IBM Toolbox para Java IBM Toolbox para Java

AS400 as400 = new AS400(system)

Cree el objeto IFSFile para el directorio

IFSFile directory = new IFSFile(as400 directoryName)

Genere una lista de elementos IFSFile Pase al meacutetodo listFiles el objeto filtro de directorio y los criterios de coincidencia buacutesqueda Este meacutetodo almacena en la memoria cacheacute informacioacuten de atributos Por ejemplo cuando se llama a isDirectory() en un objeto IFSFile de la matriz de archivos devuelta en el coacutedigo siguiente no se necesita ninguna llamada al servidor Sin embargo con el uso del meacutetodo listFiles la informacioacuten de atributos no se renovaraacute automaacuteticamente desde el servidor Esto significa que la informacioacuten de atributos se puede volver incoherente con la informacioacuten relacionada con el servidor

IFSFile[] directoryFiles = directorylistFiles(new MyDirectoryFilter())

Si el directorio no existe o estaacute vaciacuteo informe de ello al usuario

if (directoryFiles == null)

Systemoutprintln(El directorio no existe)return

else if (directoryFileslength == 0)

Systemoutprintln(El directorio estaacute vaciacuteo)return

for (int i=0 ilt directoryFileslength i++)

Imprima informacioacuten acerca de la lista Imprima el nombre del archivo actual

Systemoutprint(directoryFiles[i]getName())

Rellene la salida para que las columnas queden alineadas

for (int j = directoryFiles[i]getName()length() j lt18 j++)Systemoutprint( )

Imprima la fecha en que el archivo se ha cambiado por uacuteltima vez

long changeDate = directoryFiles[i]lastModified()Date d = new Date(changeDate)Systemoutprint(d)Systemoutprint( )

Imprima si la entrada es un archivo o un directorio

Systemoutprint( )

if (directoryFiles[i]isDirectory())Systemoutprintln()

elseSystemoutprintln(directoryFiles[i]length())

IBM Toolbox para Java 421

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de listar ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(La operacioacuten de listar ha fallado)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectos

else

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( IFSListFiles as400 directorio)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( as400 = sistema que contiene los archivos)Systemoutprintln( directorio = directorio que se listaraacute)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( IFSListFiles miSistema dir1dir2)Systemoutprintln()Systemoutprintln()

Systemexit (0)

La clase de filtro de directorio imprime informacioacuten del objeto de archivo Otra forma de emplear el filtro es simplemente devolver true o false seguacuten la informacioacuten del objeto de archivo Esto permite que la funcioacuten principal decida queacute hacer con la lista de archivos que cumplen los criterios de buacutesqueda

class MyDirectoryFilter implements IFSFileFilter

public boolean accept(IFSFile file)

try

Conserve esta entrada El retorno de true indica al objeto IFSList que devuelva este archivo en la lista de entradas devueltas al meacutetodo list()

return true

422 IBM Toolbox para Java IBM Toolbox para Java

catch (Exception e)

return false

Ejemplo coacutemo se utilizan las clases del sistema de archivos integrado (IFS) paracopiar un archivo de un directorio en otroEste programa utiliza las clases del sistema de archivos instalable para copiar un archivo de un directorioen otro del servidor

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de IFSCopyFile Este programa utiliza las clases de IFS instalables para copiar un archivo de un directorio en otro del servidor Sintaxis del mandato IFSCopyFile sistema nombreOrigen nombreDestino Por ejemplo IFSCopyFile MySystem path1path2fileext path3path4path5fileext

import javaioimport javautilimport comibmas400access

public class IFSCopyFile extends Object

public static void main(String[] parameters)

Systemoutprintln( )

String sourceName = String targetName = String system = byte[] buffer = new byte[1024 64]

IFSFileInputStream source = nullIFSFileOutputStream target = null

Si no se han especificado los tres paraacutemetros visualizar texto de ayuda y salir

if (parameterslength gt 2)

Supongamos que el primer paraacutemetro es el nombre de sistema el segundo paraacutemetro es el nombre del origen y el tercer paraacutemetro es el nombre del destino

system = parameters[0]sourceName = parameters[1]targetName = parameters[2]

try

Cree un objeto AS400 para el servidor que contiene los archivos

IBM Toolbox para Java 423

AS400 as400 = new AS400(system)

Abra el archivo origen para acceso exclusivo

source = new IFSFileInputStream(as400 sourceName IFSFileInputStreamSHARE_NONE)

Systemoutprintln(El archivo origen se ha abierto correctamente)

Abra el archivo destino para acceso exclusivo

target = new IFSFileOutputStream(as400 targetName IFSFileOutputStreamSHARE_NONE false)

Systemoutprintln(El archivo destino se ha abierto correctamente)

Lea los primeros 64K bytes del archivo origen

int bytesRead = sourceread(buffer)

Mientras haya datos en el archivo origen copie los datos del archivo origen en el archivo destino

while (bytesRead gt 0)

targetwrite(buffer 0 bytesRead)bytesRead = sourceread(buffer)

Systemoutprintln(Los datos se han copiado correctamente)

Cierre los archivos origen y destino

sourceclose()targetclose()

Obtenga la fechahora de uacuteltimo cambio del archivo origen y estableacutezcala en el archivo destino

IFSFile src = new IFSFile(as400 sourceName)long dateTime = srclastModified()

IFSFile tgt = new IFSFile(as400 targetName)tgtsetLastModified(dateTime)

Systemoutprintln(La fechahora se ha establecido correctamente en el archivo destino)Systemoutprintln(La copia se ha efectuado correctamente)

catch (Exception e)

Si alguna de las operaciones anteriores ha fallado indique que la copia ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(La copia ha fallado)Systemoutprintln(e)

424 IBM Toolbox para Java IBM Toolbox para Java

Visualice texto de ayuda si los paraacutemetros son incorrectos

else

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( IFSCopyFile as400 origen destino)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( as400 = sistema que contiene los archivos)Systemoutprintln( origen = archivo origen con el formato viacuteaviacuteanombre)Systemoutprintln( destino = archivo destino con el formato viacuteaviacuteanombre)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( IFSCopyFile myAS400 dir1dir2atxt dir3btxt)Systemoutprintln()Systemoutprintln()

Systemexit (0)

Ejemplo coacutemo se utilizan las clases del sistema de archivos integrado (IFS) paralistar el contenido de un directorioEste programa utiliza las clases del sistema de archivos integrado para listar el contenido de un directorioen el servidor

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de IFSListFile Este programa utiliza las clases de IFS para listar el contenido de un directorio en el servidor Sintaxis del mandato IFSList sistema directorio Por ejemplo IFSList MySystem path1

import javaioimport javautilimport comibmas400access

public class IFSList extends Object

public static void main(String[] parameters)

Systemoutprintln( )

String directoryName = String system =

Si no se han especificado ambos paraacutemetros visualizar texto de ayuda y salir

IBM Toolbox para Java 425

if (parameterslength gt= 2)

Supongamos que el primer paraacutemetro es el nombre de sistema y el segundo paraacutemetro es el nombre de directorio

system = parameters[0]directoryName = parameters[1]

try

Cree un objeto AS400 para el servidor que contiene los archivos

AS400 as400 = new AS400(system)

Cree el objeto IFSFile para el directorio

IFSFile directory = new IFSFile(as400 directoryName)

Genere la lista de nombre Pase al meacutetodo list el objeto filtro de directorio y los criterios de coincidencia de buacutesqueda Nota este ejemplo procesa el objeto filtro Otra solucioacuten es procesar la lista despueacutes de volver de la llamada al meacutetodo list

String[] directoryNames = directorylist(new MyDirectoryFilter())

Si el directorio no existe o estaacute vaciacuteo informe de ello al usuario

if (directoryNames == null)Systemoutprintln(El directorio no existe)

else if (directoryNameslength == 0)Systemoutprintln(El directorio estaacute vaciacuteo)

catch (Exception e)

Si alguna de las operaciones ha fallado indique que la operacioacuten de listar ha fallado y enviacutee la excepcioacuten a la salida

Systemoutprintln(La operacioacuten de listar ha fallado)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectos

else

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( IFSList as400 directorio)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()

426 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln( as400 = sistema que contiene los archivos)Systemoutprintln( directorio = directorio que se listaraacute)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( IFSCopyFile miSistema dir1dir2)Systemoutprintln()Systemoutprintln()

Systemexit (0)

La clase de filtro de directorio imprime informacioacuten del objeto de archivo Otra forma de emplear el filtro es simplemente devolver true o false seguacuten la informacioacuten del objeto de archivo Esto permite que la funcioacuten principal decida queacute hacer con la lista de archivos que cumplen los criterios de buacutesqueda

class MyDirectoryFilter implements IFSFileFilter

public boolean accept(IFSFile file)

try

Imprima el nombre del archivo actual

Systemoutprint(filegetName())

Rellene la salida para que las columnas queden alineadas

for (int i = filegetName()length() i lt 18 i++)Systemoutprint( )

Imprima la fecha en que el archivo se ha cambiado por uacuteltima vez

long changeDate = filelastModified()Date d = new Date(changeDate)Systemoutprint(d)Systemoutprint( )

Imprima si la entrada es un archivo o un directorio

Systemoutprint( )

if (fileisDirectory())Systemoutprintln(ltDIRgt)

elseSystemoutprintln(filelength())

IBM Toolbox para Java 427

Conserve esta entrada El retorno de true indica al objeto IFSList que devuelva este archivo en la lista de entradas devueltas al meacutetodo list()

return true

catch (Exception e)

return false

Ejemplo coacutemo se utiliza JDBCPopulate para crear y llenar con datos una tablaEste programa utiliza el controlador JDBC de IBM Toolbox para Java para crear y llenar una tabla

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de JDBCPopulate Este programa utiliza el controlador JDBC de IBM Toolbox para Java para crear una tabla y llenarla con datos Sintaxis del mandato JDBCPopulate sistema nombreColeccioacuten nombreTabla Por ejemplo JDBCPopulate MySystem MyLibrary MyTable

import javasql

public class JDBCPopulate

Series que se antildeadiraacuten a la columna WORD de la tablaprivate static final String words[]

= Uno Dos Tres Cuatro CincoSeis Siete Ocho Nueve DiezOnce Doce Trece Catorce QuinceDieciseacuteis Diecisiete Dieciocho Diecinueve Veinte

public static void main (String[] parameters)

Compruebe los paraacutemetros de entradaif (parameterslength = 3)

Systemoutprintln()Systemoutprintln(Utilizacioacuten)Systemoutprintln()Systemoutprintln( JDBCPopulate system collectionName tableName)Systemoutprintln()Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln()Systemoutprintln( JDBCPopulate MySystem MyLibrary MyTable)Systemoutprintln()return

428 IBM Toolbox para Java IBM Toolbox para Java

String system = parameters[0]String collectionName = parameters[1]String tableName = parameters[2]

Connection connection = null

try

Cargue el controlador JDBC de IBM Toolbox para JavaDriverManagerregisterDriver(new comibmas400accessAS400JDBCDriver())

Obtenga una conexioacuten con la base de datos Debido a que no proporcionamos un ID de usuario ni una contrasentildea apareceraacute una solicitud Observe que aquiacute proporcionamos un esquema SQL predeterminado por lo que no es necesario calificar el nombre de tabla en las sentencias SQLconnection = DriverManagergetConnection (jdbcas400 + system + + collectionName)

Elimine la tabla si ya existetry

Statement dropTable = connectioncreateStatement ()dropTableexecuteUpdate (DROP TABLE + tableName)

catch (SQLException e)

Hacer caso omiso

Cree la tablaStatement createTable = connectioncreateStatement ()createTableexecuteUpdate (CREATE TABLE + tableName

+ (I INTEGER WORD VARCHAR(20) SQUARE INTEGER + SQUAREROOT DOUBLE))

Prepare una sentencia para insertar filas Dado que la ejecutamos varias veces es mejor emplear una PreparedStatement y marcadores de paraacutemetrosPreparedStatement insert = connectionprepareStatement (INSERT INTO

+ tableName + (I WORD SQUARE SQUAREROOT) + VALUES ( ))

Llene con datos la tablafor (int i = 1 i lt= wordslength ++i)

insertsetInt (1 i)insertsetString (2 words[i-1])insertsetInt (3 ii)insertsetDouble (4 Mathsqrt(i))insertexecuteUpdate ()

Enviacutee un mensaje de finalizacioacuten a la salidaSystemoutprintln (La tabla + collectionName + + tableName + se ha llenado

con datos)

catch (Exception e) Systemoutprintln ()Systemoutprintln (ERROR + egetMessage())

finally

Borretry

if (connection = null)connectionclose ()

IBM Toolbox para Java 429

catch (SQLException e) Hacer caso omiso

Systemexit (0)

Ejemplos coacutemo se utiliza la claseAS400JDBCManagedConnectionPoolDataSourceEstos ejemplos ilustran la utilizacioacuten de la clase AS400JDBCManagedConnectionPoolDataSource La claseAS400JDBCManagedConnectionPoolDataSource simplifica el mantenimiento de agrupaciones deconexiones eliminando la necesidad de que las aplicaciones de usuario implementen su propio coacutedigo degestioacuten

Nota al utilizar los ejemplos de coacutedigo acepta los teacuterminos del ldquoInformacioacuten sobre licencia de coacutedigo yexencioacuten de responsabilidadrdquo en la paacutegina 590

Ejemplo 1

Este breve ejemplo muestra la utilizacioacuten baacutesica de la claseAS400JDBCManagedConnectionPoolDataSourceimport javaxnamingContextimport javaxnamingInitialContextimport javaxsqlDataSource

import comibmas400accessAS400JDBCManagedConnectionPoolDataSourceimport comibmas400accessAS400JDBCManagedDataSource

public class TestJDBCConnPoolSnippet

void test()

AS400JDBCManagedConnectionPoolDataSource cpds0 = new AS400JDBCManagedConnectionPoolDataSource()

Establecer propiedades generales de origen de datos Tenga en cuenta que tanto el origen de datos de agrupacioacuten de conexiones (CPDS) como el origen de datos gestionado (MDS) tienen estas propiedades y pueden tener valores diferentescpds0setServerName(host)cpds0setDatabaseName(host)iasp puede especificarse aquiacutecpds0setUser(userid)cpds0setPassword(password)

cpds0setSavePasswordWhenSerialized(true)

Establecer propiedades especiacuteficas de agrupacioacuten de conexionescpds0setInitialPoolSize(initialPoolSize_)cpds0setMinPoolSize(minPoolSize_)cpds0setMaxPoolSize(maxPoolSize_)cpds0setMaxLifetime((int)(maxLifetime_1000)) convertir a segundoscpds0setMaxIdleTime((int)(maxIdleTime_1000)) convertir a segundoscpds0setPropertyCycle((int)(propertyCycle_1000)) convertir a segundoscpds0setReuseConnections(false) no reutilizar conexiones

Establecer la faacutebrica de contexto inicial que debe utilizarseSystemsetProperty(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory)

Obtener el contexto inicial JNDIContext ctx = new InitialContext()

Nota a continuacioacuten figura un procedimiento alternativo para establecer las propiedades de contexto localmente Properties env = new Properties() envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory)

430 IBM Toolbox para Java IBM Toolbox para Java

Contexto ctx = new InitialContext(env)

ctxrebind(mydatasource cpds0) Ahora pueden realizarse buacutesquedas en cpds por el nombre mydatasource

Crear un objeto DataSource estaacutendar que haga referencia a eacutel

AS400JDBCManagedDataSource mds0 = new AS400JDBCManagedDataSource()mds0setDescription(DataSource que da soporte a la agrupacioacuten de conexiones)mds0setDataSourceName(mydatasource)ctxrebind(ConnectionPoolingDataSource mds0)

DataSource dataSource_ = (DataSource)ctxlookup(ConnectionPoolingDataSource)

AS400JDBCManagedDataSource mds_ = (AS400JDBCManagedDataSource)dataSource_

boolean isHealthy = mds_checkPoolHealth(false) comprobar el estado de la agrupacioacuten

Connection c = dataSource_getConnection()

Ejemplo 2

Este ejemplo muestra maacutes detalles acerca de la utilizacioacuten de la claseAS400JDBCManagedConnectionPoolDataSourceimport javaawtTextAreaimport javaioBufferedReaderimport javaioFileimport javaioFileReaderimport javaioFileInputStreamimport javaioFileOutputStreamimport javaioOutputStreamimport javaioPrintStreamimport javautilVectorimport javautilProperties

import javasqlConnectionimport javaxsqlDataSourceimport javasqlResultSetimport javasqlStatementimport javaxnamingimport javautilDateimport javautilArrayListimport javautilRandomimport comibmas400accessAS400import comibmas400accessAS400JDBCManagedConnectionPoolDataSourceimport comibmas400accessAS400JDBCManagedDataSourceimport comibmas400accessTrace

public class TestJDBCConnPool

private static final boolean DEBUG = false

Si activa este indicador aseguacuterese de activar tambieacuten el indicador siguiente AS400JDBCConnectionTESTING_THREAD_SAFETYprivate static final boolean TESTING_THREAD_SAFETY = false

private static String useridprivate static String passwordprivate static String host

Nota a efectos de coherencia todos los valores de tiempo se almacenan en unidades de milisegundosprivate int initialPoolSize_ inicial de conexiones en la agrupacioacutenprivate int minPoolSize_ miacuten de conexiones en la agrupacioacutenprivate int maxPoolSize_ maacutex de conexiones en la agrupacioacutenprivate long maxLifetime_ maacutex de tiempo de vida (msegs) de conexiones en la agrupacioacutenprivate long maxIdleTime_ maacutex de tiempo de desocupacioacuten (msegs) de conexiones disponibles en la agrupacioacutenprivate long propertyCycle_ frecuencia de mantenimiento de agrupacioacuten (msegs)

private int numDaemons_ de daemons de peticionario que deben crearseprivate static long timeToRunDaemons_ duracioacuten total (msegs) de ejecucioacuten de los daemonsprivate long daemonMaxSleepTime_ tiempo maacutex (msegs) para latencia de daemons de peticionario en cada ciclo

IBM Toolbox para Java 431

private long daemonMinSleepTime_ tiempo miacuten (msegs) para latencia de daemons de peticionario en cada cicloprivate long poolHealthCheckCycle_ de msegs entre llamadas a checkPoolHealth()

private boolean keepDaemonsAlive_ = true Si es false los daemons se cierran

private DataSource dataSource_private AS400JDBCManagedDataSource mds_

private final Object daemonSleepLock_ = new Object()

private Random random_ = new Random()

static

try ClassforName(comibmas400accessAS400JDBCDriver)

catch ( Exception e)

Systemoutprintln(Imposible registrar el controlador JDBC)Systemexit (0)

public static void main(String[] args)

host = args[0]userid = args[1]password = args[2]timeToRunDaemons_ = (new Integer(args[3]))intValue() 1000 milisegundosargs[3]=tiempo de ejecucioacuten en segundosTestJDBCConnPool cptest = new TestJDBCConnPool()

cptestsetup()cptestrunTest()

public void setup()

try

if (DEBUG)Systemoutprintln(iquestel distintivo TESTING_THREAD_SAFETY

+ (es TESTING_THREAD_SAFETY true false))

if (TESTING_THREAD_SAFETY)

Ajustar los valores para realizar pruebas de utilizacioacuten intensiva de hebras NOTA se presupone que la clase AS400JDBCConnection tambieacuten se ha modificado para

no establecer conexiones reales con un servidorreal

Para ello edite AS400JDBCConnectionjava cambiando su indicador TESTING_THREAD_SAFETY a rsquofalsersquo y vuelva a compilar

minPoolSize_ = 100maxPoolSize_ = 190initialPoolSize_ = 150 este valor debe restablecerse en maxPoolSize_numDaemons_ = 75if (timeToRunDaemons_ == 0)

timeToRunDaemons_ = 1801000 180 segundos == 3 minutos

else Establecer valores maacutes conservadores ya que van a establecerse conexiones reales con un

servidor real y no deseamos monopolizar el servidorminPoolSize_ = 5maxPoolSize_ = 15initialPoolSize_ = 9numDaemons_ = 4if (timeToRunDaemons_ == 0)

timeToRunDaemons_ = 151000 15 segundos

maxLifetime_ = (int)timeToRunDaemons_ 3maxIdleTime_ = (int)timeToRunDaemons_ 4propertyCycle_ = timeToRunDaemons_ 4poolHealthCheckCycle_ = Mathmin(timeToRunDaemons_ 4 20601000) como miacutenimo una vez cada 20 minutos (maacutes frecuentemente si el tiempo de ejecucioacuten es maacutes corto)daemonMaxSleepTime_ = Mathmin(timeToRunDaemons_ 3 101000) como maacuteximo 10 segundos (menos si el tiempo de ejecucioacuten es maacutes corto)daemonMinSleepTime_ = 20 milisegundos

432 IBM Toolbox para Java IBM Toolbox para Java

if (DEBUG)Systemoutprintln(setup Construyendo

+ AS400JDBCManagedConnectionPoolDataSource (cpds0))AS400JDBCManagedConnectionPoolDataSource cpds0 =

new AS400JDBCManagedConnectionPoolDataSource()

Establecer propiedades de origen de datos Tenga en cuenta que tanto CPDS como MDS tienen estas propiedades y pueden tener valores diferentescpds0setServerName(host)cpds0setDatabaseName(host)iasp puede especificarse aquiacutecpds0setUser(userid)cpds0setPassword(password)

cpds0setSavePasswordWhenSerialized(true)

Establecer propiedades especiacuteficas de agrupacioacuten de conexionescpds0setInitialPoolSize(initialPoolSize_)cpds0setMinPoolSize(minPoolSize_)cpds0setMaxPoolSize(maxPoolSize_)cpds0setMaxLifetime((int)(maxLifetime_1000)) convertir a segundoscpds0setMaxIdleTime((int)(maxIdleTime_1000)) convertir a segundoscpds0setPropertyCycle((int)(propertyCycle_1000)) convertir a segundoscpds0setReuseConnections(false) no reutilizar conexiones

Establecer la faacutebrica de contexto inicial que debe utilizarseSystemsetProperty(ContextINITIAL_CONTEXT_FACTORY

comsunjndifscontextRefFSContextFactory)

Obtener el contexto inicial JNDIContext ctx = new InitialContext()

Nota a continuacioacuten figura un procedimiento alternativo para establecer las propiedades de contexto localmente Properties env = new Properties() envput(ContextINITIAL_CONTEXT_FACTORY comsunjndifscontextRefFSContextFactory) Contexto ctx = new InitialContext(env)

ctxrebind(mydatasource cpds0) Ahora pueden realizarse buacutesquedas en cpds por el

nombre mydatasource

if (DEBUG)Systemoutprintln(setup lookup(mydatasource + ))

AS400JDBCManagedConnectionPoolDataSource cpds1 = (AS400JDBCManagedConnectionPoolDataSource)ctxlookup(mydatasource) if (DEBUG) Systemoutprintln(setup cpds1getUser() == | + cpds1getUser() + |)

Crear un objeto DataSource estaacutendar que haga referencia a eacutel

if (DEBUG)Systemoutprintln(setup Constructing AS400JDBCManagedDataSource (mds0))

AS400JDBCManagedDataSource mds0 = new AS400JDBCManagedDataSource()mds0setDescription(DataSource que da soporte a la agrupacioacuten de conexiones)mds0setDataSourceName(mydatasource)ctxrebind(ConnectionPoolingDataSource mds0)

if (DEBUG)Systemoutprintln(setup lookup(ConnectionPoolingDataSource + ))

dataSource_ = (DataSource)ctxlookup(ConnectionPoolingDataSource)dataSource_setLogWriter(output_)if (DEBUG)Systemoutprintln(setup dataSource_getUser() == | +

((AS400JDBCManagedDataSource)dataSource_)getUser() + |)

mds_ = (AS400JDBCManagedDataSource)dataSource_catch (Exception e)

eprintStackTrace()Systemoutprintln(Error de configuracioacuten durante la creacioacuten del archivo de rastreo)

void displayConnectionType(Connection conn boolean specifiedDefaultId)

if (conn instanceof comibmas400accessAS400JDBCConnectionHandle)Systemoutprint((+ (specifiedDefaultId + -) + P))

else

IBM Toolbox para Java 433

Systemoutprint((+ (specifiedDefaultId + -) + NP))

Obtiene y devuelve conexiones desde y hacia una agrupacioacuten de conexiones durante un tiempopublic void runTest()

boolean ok = truetry

Systemoutprintln(Pruebe iniciada ejecutada en + new Date())

if (DEBUG)Systemoutprintln(Comprobacioacuten de estado justo despueacutes de la

creacioacuten del origen de datos+ (se espera que la agrupacioacuten auacuten no exista) )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten existe antes del primer getConnection())

Comprobar algunos meacutetodos getset para propiedades JDBCSystemoutprintln(Comprobando meacutetodos getset )

mds_setAccess(soacutelo lectura)if (mds_getAccess()equals(soacutelo lectura))

ok = falseSystemoutprintln(nERROR getAccess() ha devuelto un valor inesperado

+ | + mds_getAccess()+|)

boolean oldBool = mds_isBigDecimal()boolean newBool = (oldBool false true)mds_setBigDecimal(newBool)if (mds_isBigDecimal() = newBool)

ok = falseSystemoutprintln(nERROR isBigDecimal() ha devuelto un valor

inesperado + |+mds_isBigDecimal()+|)

mds_setBigDecimal(oldBool)

int oldInt = mds_getBlockCriteria()int newInt = (oldInt == 2 1 2)mds_setBlockCriteria(newInt)if (mds_getBlockCriteria() = newInt)

ok = falseSystemoutprintln(nERROR getBlockCriteria() ha devuelto un valor

inesperado + |+mds_getBlockCriteria()+|)

mds_setBlockCriteria(oldInt)

Comprobar algunos meacutetodos getset para propiedades de socket

oldBool = mds_isKeepAlive()newBool = (oldBool false true)mds_setKeepAlive(newBool)if (mds_isKeepAlive() = newBool)

ok = falseSystemoutprintln(nERROR isKeepAlive() ha devuelto un valor

inesperado + |+mds_isKeepAlive()+|)

mds_setKeepAlive(oldBool)

oldInt = mds_getReceiveBufferSize()newInt = (oldInt == 256 512 256)mds_setReceiveBufferSize(newInt)if (mds_getReceiveBufferSize() = newInt)

ok = falseSystemoutprintln(nERROR getReceiveBufferSize() ha devuelto un valor

inesperado + |+mds_getReceiveBufferSize()+|)

mds_setReceiveBufferSize(oldInt)

434 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln(CONNECTION 1)Object o = dataSource_getConnection()Systemoutprintln(ogetClass())Systemoutprintln(LOOK ABOVE)Connection c1 = dataSource_getConnection()

if (DEBUG)displayConnectionType(c1 true)

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes del primer getConnection() )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del primer getConnection())

if (TESTING_THREAD_SAFETY)

try

c1setAutoCommit(false)if (DEBUG)Systemoutprintln(SELECT FROM QIWSQCUSTCDT)

Statement s = c1createStatement()ResultSet rs = sexecuteQuery(SELECT FROM QIWSQCUSTCDT)while (rsnext ())

if (DEBUG)Systemoutprintln(rsgetString(2))

rsclose()sclose()

catch (Exception e)

eprintStackTrace()if (DEBUG)Systemoutprintln(Comprobacioacuten de estado despueacutes de un

error de conexioacuten muy grave )

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado

despueacutes del error muy + grave)

Systemoutprintln(CONNECTION 2)Connection c2 = dataSource_getConnection(userid password)if (DEBUG)displayConnectionType(c2 false)

Systemoutprintln(CONNECTION 3)Connection c3 = dataSource_getConnection()if (DEBUG)displayConnectionType(c3 true)

c1close()

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes del primer close())

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del primer close())

Systemoutprintln(CONNECTION 4)Connection c4 = dataSource_getConnection()if (DEBUG) displayConnectionType(c4 true)

c1close() cerrar de nuevoc2close()c3close()c4close()

if (DEBUG) Systemoutprintln(Comprobando estado despueacutes del uacuteltimo close())if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes del uacuteltimo close())

IBM Toolbox para Java 435

Iniciar los daemons de pruebaSystemoutprintln(Iniciando daemons de prueba)startThreads()

Ejecutar los daemons de prueba durante un tiempo comprobar el estado de la agrupacioacuten perioacutedicamente

long startTime = SystemcurrentTimeMillis()long endTime = startTime + timeToRunDaemons_while (SystemcurrentTimeMillis() lt endTime)

Systemoutprint(h) Permitir que los daemons se ejecuten durante un tiempo y luego comprobar el estado de la agrupacioacutentry

Threadsleep(poolHealthCheckCycle_)catch (InterruptedException ie) if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de iniciar los daemons de prueba)

Detener los daemons de pruebaSystemoutprintln(Deteniendo daemons de prueba)stopThreads()

if (DEBUG)Systemoutprintln(Comprobacioacuten de estado despueacutes de ejecutar

daemons connectionGetter)

if (mds_checkPoolHealth(true)) ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de detener los daemons de prueba)

if (TESTING_THREAD_SAFETY)

Systemoutprintln(CONNECTION 5)Connection c = dataSource_getConnection()if (DEBUG) displayConnectionType(c true)csetAutoCommit(false)if (DEBUG) Systemoutprintln(SELECT FROM QIWSQCUSTCDT)Statement s = ccreateStatement()ResultSet rs = sexecuteQuery(SELECT FROM QIWSQCUSTCDT)while (rsnext ())

if (DEBUG) Systemoutprintln(rsgetString(2))rsclose()sclose()cclose()

Systemoutprintln(nCerrando la agrupacioacuten)mds_closePool()

if (DEBUG)Systemoutprintln(Comprobando estado despueacutes de cerrar la agrupacioacuten)

TracesetTraceJDBCOn(true) aseguacuterese de que se imprima el estado finalTracesetTraceOn(true)if (mds_checkPoolHealth(true))

ok = falseSystemoutprintln(nERROR La agrupacioacuten no tiene un buen estado despueacutes de cerrar la agrupacioacuten)

Systemoutprintln()if(ok==true)

Systemoutprintln(prueba ejecutada satisfactoriamente)else

Systemoutprintln(prueba anoacutemala)catch (Exception e)

Systemoutprintln(e)eprintStackTrace()

finally

Systemoutprintln(Prueba finalizada en + new Date())

436 IBM Toolbox para Java IBM Toolbox para Java

void startThreads()

Crear un grupo de hebras que llaman a getConnection()Thread[] threads = new Thread[numDaemons_]for (int i=0 iltnumDaemons_ i++)

ConnectionGetter getter Elegir aleatoriamente si este daemon especificaraacute el uid predeterminado o un uid exclusivoif (random_nextBoolean())

getter = new ConnectionGetter(useridpassword)if (TESTING_THREAD_SAFETY) puede utilizarse un userid ficticio

getter = new ConnectionGetter(Thread+i Pwd+i)else debe utilizarse un userid real

getter = new ConnectionGetter(useridpassword)

else

getter = new ConnectionGetter(null null)

threads[i] = new Thread(getter [+i+])threads[i]setDaemon(true)

Iniciar las hebrasfor (int i=0 iltnumDaemons_ i++)

threads[i]start()

void stopThreads()

Indicar a las hebras que se detengankeepDaemonsAlive_ = falsesynchronized (daemonSleepLock_)

daemonSleepLock_notifyAll()

Esperar a que los daemons se detengantry

Threadsleep(3000)catch (InterruptedException ie)

ConnectionGetter --------------------------------------------------------------------

Clase de ayuda Este daemon se activa a intervalos aleatorios y obtieneotra conexioacuten de la agrupacioacuten de conexiones o devuelve una conexioacuten obtenidaanteriormente a la agrupacioacuten

private final class ConnectionGetter implements Runnable

private String uid_private String pwd_private boolean useDefaultUid_private long maxSleepTime_private String threadName_private boolean firstConnection_ = trueArrayList connections_ = new ArrayList() lista de conexiones que actualmente son rsquopropiedadrsquo de este meacutetodo de obtencioacuten

ConnectionGetter(String uid String pwd) uid_ = uidpwd_ = pwdif (uid_ == null) useDefaultUid_ = trueelse useDefaultUid_ = falsemaxSleepTime_ = daemonMaxSleepTime_ copia propia que puede ajustarse

public void run()

threadName_ = ThreadcurrentThread()getName()

IBM Toolbox para Java 437

if (DEBUG) Systemoutprintln(ConnectionGetter(+threadName_+) Starting up)

try

while (keepDaemonsAlive_)

try

Elegir un tiempo de latencia aleatorio entre los valores miacutenimo y maacuteximolong sleepTime = Mathmax((long)(maxSleepTime_ random_nextFloat())

daemonMinSleepTime_) Nota nunca debe llamarse a wait(0) porque esperariacutea indefinidamentesynchronized (daemonSleepLock_)

try daemonSleepLock_wait(sleepTime)Systemoutprint()

catch (InterruptedException ie)

if (keepDaemonsAlive_) break

Decidir aleatoriamente si debe solicitarse otra conexioacuten o devolver una conexioacuten obtenida anteriormenteConnection connif (random_nextBoolean()) Dejar la decisioacuten a la suerte Solicitar otra conexioacuten

if (useDefaultUid_)

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) - get())

conn = dataSource_getConnection()else

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) -

+ get(+uid_+))conn = dataSource_getConnection(uid_ pwd_)

if (conn == null) Systemoutprintln(ConnectionGetter(+threadName_+) ERROR

+ getConnection() ha devuelto null)else

Ocasionalmente olvidar que somos propietarios de una conexioacuten y olvidar cerrarla Las conexiones hueacuterfanas deben en uacuteltimo teacutermino sobrepasar su tiempo de vida maacuteximo y el gestor de conexiones las repetiraacutefloat val = random_nextFloat()if (firstConnection_ || val lt 01)

convierta en rsquohueacuterfanasrsquo algunas de las conexiones obtenidasfirstConnection_ = false

else

connections_add(conn)if (DEBUG) displayConnectionType(conn useDefaultUid_)if (conn instanceof comibmas400accessAS400JDBCConnectionHandle) Hemos colocado una conexioacuten en una agrupacioacuten Intente aumentar el tiempo de ciclo

if (maxSleepTime_ gt 100)maxSleepTime_--

elsemaxSleepTime_ = 100

else No hemos colocado una conexioacuten en una agrupacioacuten Eso significa que la agrupacioacuten

debe estar al maacuteximo de capacidad Reduzca un poco el tiempo de ciclomaxSleepTime_ = maxSleepTime_ + 50

else Cerrar una conexioacuten de la que actualmente somos propietarios

if (connections_size() = 0) conn = (Connection)connections_remove(0)connclose()

438 IBM Toolbox para Java IBM Toolbox para Java

inner trycatch (Exception e)

eprintStackTrace()

outer while outer tryfinally

if (DEBUG)Systemoutprintln(ConnectionGetter(+threadName_+) Stopping)

Devolver todas las conexiones que todaviacutea estaacuten en la listafor (int i=0 iltconnections_size() i++)

Connection conn = (Connection)connections_remove(0)try connclose() catch (Exception e) eprintStackTrace()

clase interna rsquoConnectionGetterrsquo

Ejemplo coacutemo se utiliza JDBCQuery para consultar una tablaEste programa utiliza el controlador JDBC de IBM Toolbox para Java para consultar una tabla y enviar sucontenido a la salida

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de JDBCQuery Este programa utiliza el controlador JDBC de IBM Toolbox para Java para consultar una tabla y enviar su contenido a la salida Sintaxis del mandato JDBCQuery sistema nombreColeccioacuten nombreTabla Por ejemplo JDBCQuery MySystem qiws qcustcdt

import javasql

public class JDBCQuery

Deacute formato a una serie (String) para que tenga la anchura especificadaprivate static String format (String s int width)

String formattedString

La serie es maacutes corta que la anchura especificada por lo que tenemos que rellenarla con blancosif (slength() lt width)

StringBuffer buffer = new StringBuffer (s)for (int i = slength() i lt width ++i)

bufferappend ( )formattedString = buffertoString()

En caso contrario tendremos que truncar la serieelse

formattedString = ssubstring (0 width)

return formattedString

IBM Toolbox para Java 439

public static void main (String[] parameters)

Compruebe los paraacutemetros de entradaif (parameterslength = 3)

Systemoutprintln()Systemoutprintln(Utilizacioacuten)Systemoutprintln()Systemoutprintln( JDBCQuery system collectionName tableName)Systemoutprintln()Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln()Systemoutprintln( JDBCQuery mySystem qiws qcustcdt)Systemoutprintln()return

String system = parameters[0]String collectionName = parameters[1]String tableName = parameters[2]

Connection connection = null

try

Cargue el controlador JDBC de IBM Toolbox para JavaDriverManagerregisterDriver(new comibmas400accessAS400JDBCDriver())

Obtenga una conexioacuten con la base de datos Debido a que no proporcionamos un ID de usuario ni una contrasentildea apareceraacute una solicitudconnection = DriverManagergetConnection (jdbcas400 + system)DatabaseMetaData dmd = connectiongetMetaData ()

Ejecute la consultaStatement select = connectioncreateStatement ()ResultSet rs = selectexecuteQuery (

SELECT FROM + collectionName + dmdgetCatalogSeparator() + tableName)

Obtenga informacioacuten sobre el conjunto de resultados Establezca que la anchura de la columna sea la longitud mayor de las dos la longitud de la etiqueta o la longitud de los datosResultSetMetaData rsmd = rsgetMetaData ()int columnCount = rsmdgetColumnCount ()String[] columnLabels = new String[columnCount]int[] columnWidths = new int[columnCount]for (int i = 1 i lt= columnCount ++i)

columnLabels[i-1] = rsmdgetColumnLabel (i)columnWidths[i-1] = Mathmax (columnLabels[i-1]length() rsmdgetColumnDisplaySize (i))

Enviacutee las cabeceras de columna a la salidafor (int i = 1 i lt= columnCount ++i)

Systemoutprint (format (rsmdgetColumnLabel(i) columnWidths[i-1]))Systemoutprint ( )

Systemoutprintln ()

Enviacutee una liacutenea de guiones a la salidaStringBuffer dashedLinefor (int i = 1 i lt= columnCount ++i)

for (int j = 1 j lt= columnWidths[i-1] ++j)Systemoutprint (-)

Systemoutprint ( )

440 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln ()

Itere a traveacutes de las filas del conjunto de resultados y enviacutee las columnas que hay en cada fila a la salidawhile (rsnext ())

for (int i = 1 i lt= columnCount ++i) String value = rsgetString (i)if (rswasNull ())

value = ltnullgtSystemoutprint (format (value columnWidths[i-1]))Systemoutprint ( )

Systemoutprintln ()

catch (Exception e) Systemoutprintln ()Systemoutprintln (ERROR + egetMessage())

finally

Borretry

if (connection = null)connectionclose ()

catch (SQLException e)

Hacer caso omiso

Systemexit (0)

Ejemplo coacutemo se utiliza JobList para listar informacioacuten de identificacioacuten detrabajoEste programa es un ejemplo del soporte de trabajos de IBM Toolbox para Java Lista informacioacuten deidentificacioacuten de trabajo para un usuario especiacutefico del sistema

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este programa es un ejemplo del soporte de trabajos de IBM Toolbox para Java Lista informacioacuten de identificacioacuten de trabajo para un usuario especiacutefico del sistema Sintaxis del mandato listJobs2 sistema idUsuario contrasentildea

import javaioimport javalangimport javautilimport comibmas400access

IBM Toolbox para Java 441

public class listJobs2 extends Object

Cree un objeto por si queremos llamar a meacutetodos no estaacuteticos

public static void main(String[] parameters)

listJobs2 me = new listJobs2()meMain(parameters)

Systemexit (0)

void Main(String[] parameters)

Si no se ha especificado un sistema visualizar texto de ayuda y salirif (parameterslength == 0)

showHelp()return

Asigne los paraacutemetros a las variables El primer paraacutemetro se supone que es el nombre del sistema el segundo es un ID de usuario y el tercero es una contrasentildea

String systemName = parameters[0]String userID = nullString password = null

if (parameterslength gt 1)userID = parameters[1]toUpperCase()

if (parameterslength gt= 2)password = parameters[2]toUpperCase()

Systemoutprintln( )

try

Cree un objeto AS400 con el nombre de sistema especificado por el usuario Establezca el ID de usuario y la contrasentildea si el usuario los especifica

AS400 as400 = new AS400(parameters[0])

if (userID = null)as400setUserId(userID)

if (password = null)as400setPassword(password)

Systemoutprintln(recuperando lista )

Cree un objeto jobList Este objeto se emplea para recuperar la lista de trabajos activos en el servidor

JobList jobList = new JobList(as400)

442 IBM Toolbox para Java IBM Toolbox para Java

Obtenga la lista de trabajos activosEnumeration list = jobListgetJobs()

Para cada trabajo de la listawhile (listhasMoreElements())

Obtenga un trabajo de la lista Si hay un ID de usuario especificado imprima informacioacuten de identificacioacuten solo si el usuario del trabajo coincide con el ID de usuario Si no se ha especificado un ID de usuario imprima informacioacuten para todos los trabajos del sistema

Job j = (Job) listnextElement()

if (userID = null)

if (jgetUser()trim()equalsIgnoreCase(userID))

Systemoutprintln(jgetName()trim() + +jgetUser()trim() + +jgetNumber())

else

Systemoutprintln(jgetName()trim() + +jgetUser()trim() + +jgetNumber())

catch (Exception e)

Systemoutprintln(Error inesperado)eprintStackTrace()

Visualice texto de ayuda si los paraacutemetros son incorrectosvoid showHelp()

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( listJobs2 sistema idUsuario contrasentildea)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( sistema = servidor al que debe conectarse)Systemoutprintln( idUsuario = ID de usuario vaacutelido en ese sistema )Systemoutprintln( contrasentildea = contrasentildea para el ID de usuario (opcional))Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( listJobs2 MYAS400 JavaUser pwd1)Systemoutprintln()Systemoutprintln()

IBM Toolbox para Java 443

Ejemplo coacutemo se utiliza JobList para obtener una lista de trabajosEste ejemplo obtiene una lista de trabajos del servidor y genera como salida el estado del trabajo seguidodel identificador del trabajo mediante las clases Job de IBM Toolbox para Java

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este programa es un ejemplo de las clases de trabajo de IBM Toolbox para Java Obtiene una lista de trabajos existentes en el servidor y enviacutea a la salida el estado del trabajo seguido del identificador de trabajo Sintaxis del mandato listJobs sistema idUsuario contrasentildea (El ID de usuario y la contrasentildea son opcionales)

import javaioimport javautilimport comibmas400access

public class listJobs extends Object

public static void main(String[] parameters)

listJobs me = new listJobs()meMain(parameters)

Systemexit (0)

void Main(String[] parameters)

Si no se ha especificado un sistema visualizar texto de ayuda y salirif (parameterslength == 0)

showHelp()return

Configure los paraacutemetros de objeto AS400 El primero es el nombre del sistema y debe especificarlo el usuario El segundo y el tercero son opcionales Son el ID de usuario y la contrasentildea Convierta el ID de usuario y la contrasentildea a mayuacutesculas antes de establecerlos en el objeto AS400String userID = nullString password = null

if (parameterslength gt 1)userID = parameters[1]toUpperCase()

if (parameterslength gt= 2)password = parameters[2]toUpperCase()

Systemoutprintln( )

try

Cree un objeto AS400 con el nombre de sistema especificado por el usuario

444 IBM Toolbox para Java IBM Toolbox para Java

AS400 as400 = new AS400(parameters[0])

Si se ha especificado un ID de usuario yo una contrasentildea estableacutezcalos en el objeto AS400if (userID = null)

as400setUserId(userID)

if (password = null)as400setPassword(password)

Cree un objeto lista de trabajos El paraacutemetro de entrada es el AS400 del que queremos obtener informacioacuten de trabajoJobList jobList = new JobList(as400)

Obtenga una lista de los trabajos que se ejecutan en el servidorEnumeration listOfJobs = jobListgetJobs()

Para cada trabajo de la lista imprima informacioacuten sobre el trabajowhile (listOfJobshasMoreElements())

printJobInfo((Job) listOfJobsnextElement() as400)

catch (Exception e)

Systemoutprintln(Error inesperado)Systemoutprintln(e)

void printJobInfo(Job job AS400 as400)

Cree los diversos conversores necesariosAS400Bin4 bin4Converter = new AS400Bin4( )AS400Text text26Converter = new AS400Text(26 as400)AS400Text text16Converter = new AS400Text(16 as400)AS400Text text10Converter = new AS400Text(10 as400)AS400Text text8Converter = new AS400Text(8 as400)AS400Text text6Converter = new AS400Text(6 as400)AS400Text text4Converter = new AS400Text(4 as400)

Tenemos el nombrenuacutemeroetc del trabajo a partir de la peticioacuten de lista Ahora cree una llamada de API del servidor para obtener el estado del trabajotry

Cree un objeto de llamada a programaProgramCall pgm = new ProgramCall(as400)

El programa servidor al que llamamos tiene 5 paraacutemetrosProgramParameter[] parmlist = new ProgramParameter[5]

El primer paraacutemetro es una matriz de bytes que contiene los datos de salida Asignaremos 1 K de almacenamiento intermedio para los datos de salidaparmlist[0] = new ProgramParameter( 1024 )

El segundo es el tamantildeo del almacenamiento intermedio de datos de salida (1 K)Integer iStatusLength = new Integer( 1024 )byte[] statusLength = bin4ConvertertoBytes( iStatusLength )parmlist[1] = new ProgramParameter( statusLength )

El tercero es el nombre del formato de los datos Usaremos el formato JOBI0200 porque tiene el estado del trabajo

IBM Toolbox para Java 445

byte[] statusFormat = text8ConvertertoBytes(JOBI0200)parmlist[2] = new ProgramParameter( statusFormat )

El cuarto es el nombre de trabajo con el formato nombre usuario nuacutemero El nombre debe tener 10 caracteres el usuario debe tener 10 caracteres y el nuacutemero debe tener 6 caracteres Usaremos un conversor de texto para la conversioacuten y el rellenobyte[] jobName = text26ConvertertoBytes(jobgetName())

int i = text10ConvertertoBytes(jobgetUser()jobName10)

i = text6ConvertertoBytes(jobgetNumber()jobName20)

parmlist[3] = new ProgramParameter( jobName )

El uacuteltimo paraacutemetro es el identificador de trabajo Lo dejaremos en blancobyte[] jobID = text16ConvertertoBytes( )parmlist[4] = new ProgramParameter( jobID )

Ejecute el programaif (pgmrun( QSYSLIBQUSRJOBIPGM parmlist )==false)

Si el programa ha fallado visualice el mensaje de errorAS400Message[] msgList = pgmgetMessageList()Systemoutprintln(msgList[0]getText())

else

De lo contrario el programa ha funcionado Enviacutee a la salida el estado seguido de nombreTrabajoUsuarioidTrabajobyte[] as400Data = parmlist[0]getOutputData()Systemoutprint( + text4ConvertertoObject(as400Data 107) + )

Systemoutprintln(jobgetName()trim() + +jobgetUser()trim() + +jobgetNumber() + )

catch (Exception e)

Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectosvoid showHelp()

Systemoutprintln( )Systemoutprintln( )Systemoutprintln( )Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln( )Systemoutprintln( listJobs sistema idUsuario contrasentildea)Systemoutprintln( )Systemoutprintln(Donde)Systemoutprintln( )Systemoutprintln( sistema = servidor al que debe conectarse)Systemoutprintln( idUsuario = ID de usuario vaacutelido en ese sistema (opcional))

446 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln( contrasentildea = contrasentildea para el ID de usuario (opcional))Systemoutprintln( )Systemoutprintln(Por ejemplo)Systemoutprintln( )Systemoutprintln( listJobs MYAS400 JavaUser pwd1)Systemoutprintln( )Systemoutprintln( )

Ejemplo coacutemo se utiliza JobLog para visualizar los mensajes de las anotacionesde trabajoEste programa es un ejemplo de la funcioacuten de anotaciones de trabajo de IBM Toolbox para JavaVisualizaraacute los mensajes de las anotaciones de trabajo correspondientes a un trabajo perteneciente alusuario actual

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este programa es un ejemplo de la funcioacuten de anotaciones de trabajo de IBM Toolbox para Java Visualizaraacute los mensajes de las anotaciones de un trabajo que pertenezca al usuario actual Sintaxis del mandato jobLogExample sistema idUsuario contrasentildea (La contrasentildea es opcional)

import javalangimport javautilimport comibmas400access

public class jobLogExample

public static void main (String[] args)

Si no se ha especificado un sistema y un usuario visualizar texto de ayuda y salirif (argslength lt 2)

Systemoutprintln(Utilizacioacuten jobLogExample sistema idUsuario ltcontrasentildeagt)return

String userID = null

try

Cree un objeto AS400 El nombre del sistema se ha pasado como primer argumento de liacutenea de mandatos Si un ID de usuario y una contrasentildea se han pasado en la liacutenea de mandatos estableacutezcalos tambieacutenAS400 system = new AS400 (args[0])

if (argslength gt 1)

userID = args[1]systemsetUserId(userID)

if (argslength gt 2)

IBM Toolbox para Java 447

systemsetPassword(args[2])

Cree un objeto lista de trabajos Este objeto se usaraacute para obtener la lista de trabajos activos del sistema Una vez que la lista de trabajos se haya recuperado el programa localizaraacute un trabajo para el usuario actualJobList jobList = new JobList(system)

Obtenga la lista de trabajos activos en el AS400Enumeration list = jobListgetJobs()

boolean Continue = true

Busque en la lista para localizar un trabajo para el usuario actualwhile (listhasMoreElements() ampamp Continue)

Job j = (Job) listnextElement()

if (jgetUser()trim()equalsIgnoreCase(userID))

Se ha encontrado un trabajo correspondiente al usuario actual Cree un objeto anotaciones de trabajo para este trabajoJobLog jlog = new JobLog(system jgetName() jgetUser() jgetNumber())

Enumere los mensajes de las anotaciones de trabajo e impriacutemalosEnumeration messageList = jloggetMessages()

while (messageListhasMoreElements())

AS400Message message = (AS400Message) messageListnextElement()Systemoutprintln(messagegetText())

Se ha encontrado un trabajo correspondiente al usuario actual por lo tanto salgaContinue = false

catch (Exception e)

Systemoutprintln (Error + egetMessage ())

Systemexit (0)

Ejemplo crear archivos en spoolEste ejemplo muestra coacutemo se crea un archivo en spool en un servidor a partir de una corriente deentrada

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo que muestra coacutemo crear un archivo en spool en un servidor a partir de una corriente de entrada

import javaioimport javautil

import comibmas400access

448 IBM Toolbox para Java IBM Toolbox para Java

class NPExampleCreateSplf

Meacutetodo para crear el archivo en spool en el servidor especificado y en la cola de salida especificada a partir de la corriente de entrada dadapublic SpooledFile createSpooledFile(AS400 system OutputQueue outputQueue InputStream in)

SpooledFile spooledFile = nulltry

byte[] buf = new byte[2048]int bytesReadSpooledFileOutputStream outPrintParameterList parms = new PrintParameterList()

Cree un objeto PrintParameterList con los valores que deseamos modificar del archivo de impresora predeterminado Modificaremos la cola de salida y el valor de copiasparmssetParameter(PrintObjectATTR_COPIES 4)if (outputQueue = null)

parmssetParameter(PrintObjectATTR_OUTPUT_QUEUE outputQueuegetPath())out = new SpooledFileOutputStream(system

parmsnullnull)

Lea los datos de la corriente de entrada hasta el final de la corriente pasando todos los datos a la corriente de salida del archivo en spooldo

bytesRead = inread(buf)if (bytesRead = -1)

outwrite(buf 0 bytesRead)

while (bytesRead = -1)

outclose() Cierre el archivo en spool

spooledFile = outgetSpooledFile() Obtenga una referencia al nuevo archivo en spool

catch (Exception e)

Maneje la excepcioacutenreturn spooledFile

Ejemplo crear archivos en spool SCSEste ejemplo utiliza la clase SCS3812Writer para generar una corriente de datos SCS y escribirla en unarchivo en spool del servidor

Esta aplicacioacuten puede tomar los argumentos indicados maacutes abajo o utilizar los valores predeterminadosdefinidosv Nombre del servidor que recibiraacute el archivo en spoolv Nombre de la cola de salida del servidor que recibiraacute el archivo en spool

IBM Toolbox para Java 449

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este fuente es un ejemplo de SCS3812Writer de IBM Toolbox para Java

import comibmas400access

class NPExampleCreateSCSSplf

private static final String DEFAULT_SYSTEM = new String(RCHAS1)private static final String DEFAULT_OUTQ = new String(QSYSLIBQUSRSYSLIBPRT01OUTQ)

public static void main(String [] args)

try

AS400 systemSpooledFileOutputStream outPrintParameterList parms = new PrintParameterList()SCS3812Writer scsWtr

Procese los argumentosif (argslength gt= 1)

system = new AS400(args[0]) Cree un objeto AS400 else

system = new AS400(DEFAULT_SYSTEM)

if (argslength gt= 2) Establezca la cola de salida

parmssetParameter(PrintObjectATTR_OUTPUT_QUEUE args[1]) else

parmssetParameter(PrintObjectATTR_OUTPUT_QUEUE DEFAULT_OUTQ)

out = new SpooledFileOutputStream(system parms null null)

scsWtr = new SCS3812Writer(out 37)

Escriba el contenido del archivo en spoolscsWtrsetLeftMargin(10)scsWtrabsoluteVerticalPosition(6)scsWtrsetFont(scsWtrFONT_COURIER_BOLD_5)scsWtrwrite( Impresioacuten en Java)scsWtrnewLine()scsWtrnewLine()scsWtrsetCPI(10)scsWtrwrite(Este documento se ha creado con IBM Toolbox para Java)scsWtrnewLine()scsWtrwrite(El resto de este documento muestra algunas tareas que)scsWtrnewLine()scsWtrwrite(pueden realizarse con la clase SCS3812Writer)scsWtrnewLine()scsWtrnewLine()scsWtrsetUnderline(true) scsWtrwrite(Estableciendo fonts) scsWtrsetUnderline(false)scsWtrnewLine()scsWtrsetFont(scsWtrFONT_COURIER_10) scsWtrwrite(Font Courier )scsWtrsetFont(scsWtrFONT_COURIER_BOLD_10) scsWtrwrite( Font Courier negrita )scsWtrsetFont(scsWtrFONT_COURIER_ITALIC_10) scsWtrwrite( Font Courier cursiva )scsWtrnewLine()scsWtrsetBold(true) scsWtrwrite(Font Courier negrita cursiva )scsWtrsetBold(false)

450 IBM Toolbox para Java IBM Toolbox para Java

scsWtrsetCPI(10)scsWtrnewLine()scsWtrnewLine()scsWtrsetUnderline(true) scsWtrwrite(Liacuteneas por pulgada) scsWtrsetUnderline(false)scsWtrnewLine()scsWtrwrite(Las liacuteneas siguientes deben imprimirse a 8 liacuteneas por pulgada)scsWtrnewLine()scsWtrnewLine()scsWtrsetLPI(8)scsWtrwrite(Liacutenea uno) scsWtrnewLine()scsWtrwrite(Liacutenea dos) scsWtrnewLine()scsWtrwrite(Liacutenea tres) scsWtrnewLine()scsWtrwrite(Liacutenea cuatro) scsWtrnewLine()scsWtrwrite(Liacutenea cinco) scsWtrnewLine()scsWtrwrite(Liacutenea seis) scsWtrnewLine()scsWtrwrite(Liacutenea siete) scsWtrnewLine()scsWtrwrite(Liacutenea ocho) scsWtrnewLine()scsWtrendPage()scsWtrsetLPI(6)scsWtrsetSourceDrawer(1)scsWtrsetTextOrientation(0)scsWtrabsoluteVerticalPosition(6)scsWtrwrite(Esta paacutegina debe imprimirse con orientacioacuten vertical de la bandeja 1)scsWtrendPage()scsWtrsetSourceDrawer(2)scsWtrsetTextOrientation(90)scsWtrabsoluteVerticalPosition(6)scsWtrwrite(Esta paacutegina debe imprimirse con orientacioacuten horizontal de la bandeja 2)scsWtrendPage()scsWtrclose()Systemoutprintln(Se ha creado el archivo en spool de ejemplo)Systemexit (0)

catch (Exception e)

Maneje el errorSystemoutprintln(Se ha producido una excepcioacuten al crear el archivo en spool + e)Systemexit (0)

Ejemplo leer archivos en spoolEste ejemplo muestra la utilizacioacuten de la clase PrintObjectInputStream para leer un archivo en spoolexistente

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo que lee un archivo en spool existente en el servidor Este fuente es un ejemplo de PrintObjectInputStream de IBM Toolbox para Java

trybyte[] buf = new byte[2048]int bytesReadAS400 sys = new AS400()SpooledFile splf = new SpooledFile( sys AS400

MICR nombre de archivo en spool17 nuacutemero de archivo en spoolQPRTJOB nombre de trabajoQUSER usuario del trabajo020791 ) nuacutemero de trabajo

IBM Toolbox para Java 451

Abra el archivo en spool para lectura y obtenga la corriente de entrada para leer en ellaInputStream in = splfgetInputStream(null)

do

Lea hasta buflength bytes de datos de spool en bruto en el almacenamiento intermedio Se devolveraacuten los bytes reales leiacutedos Los datos seraacuten una corriente de datos binarios de impresora que son el contenido del archivo en spoolbytesRead = inread( buf )if( bytesRead = -1 )

Procese los datos del archivo en spoolSystemoutprintln( Se han leiacutedo + bytesRead + bytes )

while( bytesRead = -1 )

inclose()catch( Exception e )

Excepcioacuten

Ejemplo leer y transformar archivos en spoolLos ejemplos siguientes muestran coacutemo configurar un objeto PrintParameterList para obtener diferentestransformaciones al leer datos de archivo en spool En los segmentos de coacutedigo que figuran acontinuacioacuten se supone que ya existe un archivo en spool en un servidor y el meacutetodo createSpooledFile()crea una instancia de la clase SpooledFile que representa el archivo en spool

Ejemplo de PrintObjectPageInputStream

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se crea un objeto PrintObjectPageInputStream para leer paacuteginas dedatos con el formato de imaacutegenes GIF En este caso cada una de las paacuteginas del archivo en spool setransformaraacute en una imagen GIF Se emplea un objeto de personalizacioacuten de estacioacuten de trabajo GIF paraespecificar la transformacioacuten de datos Cree un archivo en spoolSpooledFile splF = createSpooledFile()

Configure una lista de paraacutemetrosPrintParameterList printParms = new PrintParameterList()printParmssetParameter(PrintObjectATTR_WORKSTATION_CUST_OBJECT QSYSLIBQWPGIFWSCST)printParmssetParameter(PrintObjectATTR_MFGTYPE WSCST) q

Cree una corriente de entrada de paacutegina a partir del archivo en spoolPrintObjectPageInputStream is = splFgetPageInputStream(printParms)

Ejemplo de PrintObjectTransformedInputStream

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se crea un objeto PrintObjectTransformedInputStream para leer datoscon el formato de imaacutegenes TIFF Se emplea un objeto de personalizacioacuten de estacioacuten de trabajo TIFF(compresioacuten G4) para especificar la transformacioacuten de datos

452 IBM Toolbox para Java IBM Toolbox para Java

Cree un archivo en spoolSpooledFile splF = createSpooledFile()

Configure una lista de paraacutemetrosPrintParameterList printParms = new PrintParameterList()printParmssetParameter(PrintObjectATTR_WORKSTATION_CUST_OBJECT QSYSLIBQWPTIFFG4WSCST)printParmssetParameter(PrintObjectATTR_MFGTYPE WSCST) q

Cree una corriente de entrada transformada a partir del archivo en spoolPrintObjectTransformedInputStream is = splFgetTransformedInputStream(printParms)

Ejemplo de PrintObjectTransformedInputStream con el tipo y modelo de fabricante

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

El ejemplo siguiente muestra coacutemo se crea un objeto PrintObjectTransformedInputStream para leer datoscon el formato de salida a una impresora ASCII Se emplea el tipo y modelo de fabricante HP4 paraespecificar la transformacioacuten de datos Cree un archivo en spoolSpooledFile splF = createSpooledFile()

Configure una lista de paraacutemetrosPrintParameterList printParms = new PrintParameterList()printParmssetParameter(PrintObjectATTR_MFGTYPE HP4)

Cree una corriente de entrada transformada a partir del archivo en spoolPrintObjectTransformedInputStream is = splFgetTransformedInputStream(printParms)

Ejemplo listar archivos en spool asiacutencronamente (utilizando escuchas)Este ejemplo muestra coacutemo se listan de modo asiacutencrono todos los archivos en spool de un servidor ymediante la interfaz PrintObjectListListener para obtener informacioacuten de retorno a medida que la lista seva construyendo El listado asiacutencrono permite que el llamante inicie el proceso de los objetos de la listaantes de que se construya toda la lista para lograr un tiempo de respuesta maacutes raacutepido de cara al usuario

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo que muestra coacutemo listar todos los archivos en spool de un servidor asiacutencronamente usando la interfaz PrintObjectListListener para obtener informacioacuten de retorno a medida que se construye la lista Listar asiacutencronamente permite al llamador empezar a procesar los objetos de la lista antes de que se construya toda la lista para lograr un tiempo de respuesta maacutes raacutepido para el usuario

import comibmas400accessAS400import comibmas400accessSpooledFileListimport comibmas400accessSpooledFileimport comibmas400accessExtendedIllegalStateExceptionimport comibmas400accessPrintObjectListListenerimport comibmas400accessPrintObjectListEvent

public class NPExampleListSplfAsynch extends Object implements PrintObjectListListener

private AS400 system_private boolean fListErrorprivate boolean fListClosedprivate boolean fListCompletedprivate Exception listExceptionprivate int listObjectCount

IBM Toolbox para Java 453

public NPExampleListSplfAsynch(AS400 system)

system_ = system

Liste todos los archivos en spool del servidor asiacutencronamente usando un escuchapublic void listSpooledFiles()

fListError = falsefListClosed = falsefListCompleted = falselistException = nulllistObjectCount = 0

try

String strSpooledFileNameboolean fCompleted = falseint listed = 0 size

if( system_ == null )

system_ = new AS400()

Systemoutprintln( Se estaacuten recibiendo todos los archivos en spool asiacutencronamenteusando un escucha)

SpooledFileList splfList = new SpooledFileList(system_)

Establezca filtros todos los usuarios en todas las colassplfListsetUserFilter(ALL)splfListsetQueueFilter(QSYSLIBALLLIBALLOUTQ)

Antildeada el escuchasplfListaddPrintObjectListListener(this)

Abra la lista openAsynchronously vuelve de inmediatosplfListopenAsynchronously()

do

Espere a que la lista tenga al menos 25 objetos o a que se completewaitForWakeUp()

fCompleted = splfListisCompleted()size = splfListsize()

Enviacutee a la salida el nombre de todos los objetos antildeadidos a la lista desde la uacuteltima activacioacutenwhile (listed lt size)

if (fListError)

Systemoutprintln( Excepcioacuten en lista - + listException)break

if (fListClosed)

Systemoutprintln( La lista se ha cerrado antes de completarse)break

SpooledFile splf = (SpooledFile)splfListgetObject(listed++)if (splf = null)

454 IBM Toolbox para Java IBM Toolbox para Java

Enviacutee a la salida el nombre de este archivo en spoolstrSpooledFileName = splfgetStringAttribute(SpooledFileATTR_SPOOLFILE)Systemoutprintln( archivo en spool = + strSpooledFileName)

while (fCompleted)

Borre despueacutes de haber terminado con la listasplfListclose()splfListremovePrintObjectListListener(this)

catch( ExtendedIllegalStateException e )

Systemoutprintln( La lista se ha cerrado antes de completarse)

catch( Exception e )

Maneje las demaacutes excepciones que existaneprintStackTrace()

Aquiacute es donde la hebra de primer plano espera a que la hebra de fondo la active cuando la lista se actualice o finaliceprivate synchronized void waitForWakeUp() throws InterruptedException

No vuelva al estado en reposo si el escucha indica que se ha completado la listaif (fListCompleted)

wait()

Los meacutetodos siguientes implementan la interfaz PrintObjectListListener

Se invoca este meacutetodo cuando se cierra la listapublic void listClosed(PrintObjectListEvent event)

Systemoutprintln(La lista se ha cerrado)fListClosed = truesynchronized(this)

Establezca el distintivo para indicar que la lista se ha completado y active la hebra de primer planofListCompleted = truenotifyAll()

Se invoca este meacutetodo cuando se ha completado la listapublic void listCompleted(PrintObjectListEvent event)

Systemoutprintln(La lista se ha completado)synchronized (this)

Establezca el distintivo para indicar que la lista se ha completado y active la hebra de primer planofListCompleted = truenotifyAll()

Se invoca este meacutetodo cuando se produce un error al recuperar

IBM Toolbox para Java 455

la listapublic void listErrorOccurred(PrintObjectListEvent event)

Systemoutprintln(La lista contiene un error)fListError = truelistException = eventgetException()synchronized(this)

Establezca el distintivo para indicar que la lista se ha completado y active la hebra de primer planofListCompleted = truenotifyAll()

Se invoca este meacutetodo cuando se abre la listapublic void listOpened(PrintObjectListEvent event)

Systemoutprintln(Se ha abierto la lista)listObjectCount = 0

Se invoca este meacutetodo cuando se antildeade un objeto a la listapublic void listObjectAdded(PrintObjectListEvent event)

Cada 25 objetos activaremos la hebra de primer plano para obtener los objetos maacutes recientesif( (++listObjectCount 25) == 0 )

Systemoutprintln(Se han antildeadido 25 objetos maacutes a la lista)synchronized (this)

Active la hebra de primer planonotifyAll()

public static void main( String args[] )

NPExampleListSplfAsynch list = new NPExampleListSplfAsynch(new AS400())try

listlistSpooledFiles()catch( Exception e )

eprintStackTrace()Systemexit (0)

Ejemplo listar archivos en spool asiacutencronamente (sin utilizar escuchas)Este ejemplo muestra coacutemo listar de forma asiacutencrona todos los archivos en spool del sistema sin utilizarla interfaz PrintObjectListListener

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este ejemplo muestra coacutemo listar todos los archivos en spool de un sistema asiacutencronamente sin usar la interfaz PrintObjectListListener Tras abrir la lista el llamador puede realizar alguacuten trabajo adicional antes de esperar a que se complete la lista

456 IBM Toolbox para Java IBM Toolbox para Java

Este fuente es un ejemplo de PrintObjectList de IBM Toolbox para Java

import javautilEnumeration

import comibmas400accessAS400import comibmas400accessSpooledFileListimport comibmas400accessSpooledFile

public class NPExampleListSplfAsynch2 extends Object

private AS400 system_

public NPExampleListSplfAsynch2(AS400 system)

system_ = system

Liste todos los archivos en spool del sistema asiacutencronamentepublic void listSpooledFiles()

try

String strSpooledFileNameint listed size

if( system_ == null )

system_ = new AS400()

Systemoutprintln(Se estaacuten recibiendo todos los archivos en spool asiacutencronamente sin usar un escucha)

SpooledFileList splfList = new SpooledFileList(system_)

Establezca filtros todos los usuarios en todas las colassplfListsetUserFilter(ALL)splfListsetQueueFilter(QSYSLIBALLLIBALLOUTQ)

Abra la lista openAsynchronously() vuelve inmediatamente No hemos antildeadido ninguacuten escuchasplfListopenAsynchronously()

Systemoutprintln( Realice alguacuten proceso antes de esperar)

Realice alguacuten proceso aquiacute mientras se construye la lista

Systemoutprintln( Ahora espere a que se complete la lista)

Espere a que se complete la listasplfListwaitForListToComplete()

Enumeration enum = splfListgetObjects()

Enviacutee a la salida el nombre de todos los objetos de la listawhile( enumhasMoreElements() )

SpooledFile splf = (SpooledFile)enumnextElement()if (splf = null)

Enviacutee a la salida el nombre de este archivo en spoolstrSpooledFileName = splfgetStringAttribute(SpooledFileATTR_SPOOLFILE)Systemoutprintln( archivo en spool = + strSpooledFileName)

IBM Toolbox para Java 457

Borre despueacutes de haber terminado con la listasplfListclose()

catch( Exception e )

Maneje las excepcioneseprintStackTrace()

public static void main( String args[] )

NPExampleListSplfAsynch2 list = new NPExampleListSplfAsynch2(new AS400())try

listlistSpooledFiles()catch( Exception e )

eprintStackTrace()Systemexit (0)

Ejemplo listar archivos en spool siacutencronamenteEste ejemplo muestra coacutemo se listan todos los archivos en spool de un servidor siacutencronamente El listadosiacutencrono no vuelve al llamador hasta que se ha construido toda la lista El usuario obtiene un tiempo derespuesta maacutes lento en comparacioacuten con el listado asiacutencrono

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo que muestra coacutemo se listan todos los archivos en spool de un servidor siacutencronamente Listar siacutencronamente no vuelve al llamador hasta que se construye la lista completa El usuario obtiene un tiempo de respuesta maacutes lento que al listar asiacutencronamente Este fuente es un ejemplo de PrintObjectList de IBM Toolbox para Java

import javautilEnumeration

import comibmas400accessAS400import comibmas400accessSpooledFileListimport comibmas400accessSpooledFile

public class NPExampleListSplfSynch

private AS400 system_ = new AS400()

public NPExampleListSplfSynch(AS400 system)

system_ = system

public void listSpooledFiles()

tryString strSpooledFileName

458 IBM Toolbox para Java IBM Toolbox para Java

if( system_ == null )

system_ = new AS400()

Systemoutprintln( Se estaacuten recibiendo todos los archivos en spool siacutencronamente)

SpooledFileList splfList = new SpooledFileList( system_ )

Establezca filtros todos los usuarios en todas las colassplfListsetUserFilter(ALL)splfListsetQueueFilter(QSYSLIBALLLIBALLOUTQ)

Abra la lista openSynchronously() vuelve cuando se completa la listasplfListopenSynchronously()Enumeration enum = splfListgetObjects()

while( enumhasMoreElements() )

SpooledFile splf = (SpooledFile)enumnextElement()if ( splf = null )

Enviacutee a la salida el nombre de este archivo en spoolstrSpooledFileName = splfgetStringAttribute(SpooledFileATTR_SPOOLFILE)Systemoutprintln( archivo en spool = + strSpooledFileName)

Borre despueacutes de haber terminado con la listasplfListclose()

catch( Exception e )

Maneje las excepcioneseprintStackTrace()

public static void main( String args[] )

NPExampleListSplfSynch list = new NPExampleListSplfSynch(new AS400())try

listlistSpooledFiles()catch( Exception e )

eprintStackTrace()Systemexit (0)

Ejemplo coacutemo se utiliza ProgramCallEste programa llama al programa servidor QWCRSSTS para recuperar el estado del sistema

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de llamada a programa Este programa llama al programa QWCRSSTS del servidor para recuperar el estado del sistema Sintaxis del mandato PCSystemStatusExample sistema Este fuente es un ejemplo de ProgramCall de IBM Toolbox para Java

IBM Toolbox para Java 459

import javaioimport javautilimport javamathimport javalangThreadimport comibmas400access

public class PCSystemStatusExample extends Object

public static void main(String[] parameters)

Systemoutprintln( )

Si no se ha especificado un sistema visualizar texto de ayuda y salir

if (parameterslength gt= 1)

try

Cree un objeto AS400 para el servidor que contiene el programa Supongamos que el primer paraacutemetro es el nombre de sistema

AS400 as400 = new AS400(parameters[0])

Cree la viacutea de acceso al programa

QSYSObjectPathName programName = new QSYSObjectPathName(QSYS QWCRSSTS PGM)

Cree el objeto de llamada a programa Asocie el objeto al objeto AS400 que representa el servidor del que se obtiene el estado

ProgramCall getSystemStatus = new ProgramCall(as400)

Cree la lista de paraacutemetros del programa Este programa tiene cinco paraacutemetros que se antildeadiraacuten a esta lista

ProgramParameter[] parmlist = new ProgramParameter[5]

El programa del servidor devuelve datos en el paraacutemetro 1 Es un paraacutemetro de entradasalida Asigne 64 bytes para este paraacutemetro

parmlist[0] = new ProgramParameter( 64 )

El paraacutemetro 2 es el tamantildeo de almacenamiento intermedio del paraacutemetro 1 Es un paraacutemetro de entradasalida Establezca su valor en 64 convieacutertalo al formato del servidor y antildeada el paraacutemetro a la lista de paraacutemetros

AS400Bin4 bin4 = new AS400Bin4( )Integer iStatusLength = new Integer( 64 )

460 IBM Toolbox para Java IBM Toolbox para Java

byte[] statusLength = bin4toBytes( iStatusLength )parmlist[1] = new ProgramParameter( statusLength )

El paraacutemetro 3 es el paraacutemetro de formato de estado Es un paraacutemetro de entradasalida Establezca el valor de serie convieacutertalo al formato del servidor y antildeada el paraacutemetro a la lista de paraacutemetros

AS400Text text1 = new AS400Text(8 as400)byte[] statusFormat = text1toBytes(SSTS0200)parmlist[2] = new ProgramParameter( statusFormat )

El paraacutemetro 4 es el paraacutemetro de estadiacutesticas de restablecimiento Es un paraacutemetro de entradasalida Establezca el valor de serie convieacutertalo al formato del servidor y antildeada el paraacutemetro a la lista de paraacutemetros

AS400Text text3 = new AS400Text(10 as400)byte[] resetStats = text3toBytes(NO )parmlist[3] = new ProgramParameter( resetStats )

El paraacutemetro 5 es el paraacutemetro de informacioacuten de error Es un paraacutemetro de entradasalida Antildeaacutedalo a la lista de paraacutemetros

byte[] errorInfo = new byte[32]parmlist[4] = new ProgramParameter( errorInfo 0 )

Establezca el programa al que se llamaraacute y la lista de paraacutemetros para el objeto de llamada a programa

getSystemStatussetProgram(programNamegetPath() parmlist )

Ejecute el programa y estableacutezcalo en reposo Ejecutamos dos veces el programa porque el primer conjunto de resultados estaacute inflado Si descartamos el primer conjunto de resultados y volvemos a ejecutar el mandato cinco segundos despueacutes el nuacutemero seraacute maacutes preciso

getSystemStatusrun()Threadsleep(5000)

Ejecute el programa

if (getSystemStatusrun()=true)

Si no se ejecuta el programa obtenga la lista de mensajes de error del objeto programa y visualice los mensajes El error seriacutea similar a programa no encontrado o usuario no autorizado para el programa

AS400Message[] msgList = getSystemStatusgetMessageList()

Systemoutprintln(No se ha ejecutado el programa Mensajes del servidor)

for (int i=0 iltmsgListlength i++)

Systemoutprintln(msgList[i]getText())

IBM Toolbox para Java 461

De lo contrario el programa se ha ejecutado

else

Cree un conversor numeacuterico de servidor a Java Este conversor se usaraacute en la seccioacuten siguiente para convertir la salida numeacuterica del formato de servidor al formato Java

AS400Bin4 as400Int = new AS400Bin4( )

Obtenga los resultados del programa Los datos de salida estaacuten en una matriz de bytes en el primer paraacutemetro

byte[] as400Data = parmlist[0]getOutputData()

La utilizacioacuten de la CPU es un campo numeacuterico que empieza en el byte 32 del almacenamiento intermedio de salida Convierta este nuacutemero del formato de servidor al formato Java y enviacutee el nuacutemero a la salida

Integer cpuUtil = (Integer)as400InttoObject( as400Data 32 )cpuUtil = new Integer(cpuUtilintValue()10)Systemoutprint(Utilizacioacuten de CPU )Systemoutprint(cpuUtil)Systemoutprintln()

La utilizacioacuten de DASD es un campo numeacuterico que empieza en el byte 52 del almacenamiento intermedio de salida Convierta este nuacutemero del formato de servidor al formato Java y enviacutee el nuacutemero a la salida

Integer dasdUtil = (Integer)as400InttoObject( as400Data 52 )dasdUtil = new Integer(dasdUtilintValue()10000)Systemoutprint(Utilizacioacuten de DASD )Systemoutprint(dasdUtil)Systemoutprintln()

El nuacutemero de trabajos es un campo numeacuterico que empieza en el byte 36 del almacenamiento intermedio de salida Convierta este nuacutemero del formato de servidor al formato Java y enviacutee el nuacutemero a la salida

Integer nj = (Integer)as400InttoObject( as400Data 36 )Systemoutprint(Trabajos activos )Systemoutprintln(nj)

Este programa ha terminado de ejecutar el programa desconecte del servidor de mandatos en el servidor La llamada a programa y la llamada a mandato utilizan el mismo servidor en el servidor

as400disconnectService(AS400COMMAND)catch (Exception e)

Si alguna de las operaciones anteriores ha fallado indique que el programa ha fallado

462 IBM Toolbox para Java IBM Toolbox para Java

y enviacutee la excepcioacuten a la salida

Systemoutprintln(La llamada a programa ha fallado)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectos

else

Systemoutprintln( )Systemoutprintln( )Systemoutprintln( )Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln( )Systemoutprintln( PCSystemStatusExample myServer)Systemoutprintln( )Systemoutprintln(Donde)Systemoutprintln( )Systemoutprintln( myServer = obtener el estado de este servidor )Systemoutprintln( )Systemoutprintln(Por ejemplo)Systemoutprintln( )Systemoutprintln( PCSystemStatusExample mySystem)Systemoutprintln( )Systemoutprintln( )

Systemexit (0)

Ejemplo coacutemo se utilizan las clases de acceso a nivel de registroEste programa de ejemplo de IBM Toolbox para Java solicitaraacute al usuario el nombre del servidor y elarchivo que se debe visualizar El archivo debe existir y ha de contener registros Cada registro delarchivo se visualizaraacute en Systemout

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de acceso a nivel de registro Este programa solicitaraacute el nombre del servidor y el archivo que se debe visualizar El archivo debe existir y ha de contener registros Cada registro del archivo se visualizaraacute en la salida del sistema (Systemout) Sintaxis de la llamada java RLSequentialAccessExample Este fuente es un ejemplo de RecordLevelAccess de IBM Toolbox para Java

import javaioimport javautilimport comibmas400access

public class RLSequentialAccessExample

public static void main(String[] parameters)

Se ha creado un lector para obtener datos de entrada del usuarioBufferedReader inputStream = new BufferedReader(new InputStreamReader(Systemin)1)

IBM Toolbox para Java 463

Declare variables para los nombres de sistema biblioteca archivo y miembroString systemName = String library = String file = String member =

Obtenga el nombre del sistema y el archivo que se visualizaraacute del usuarioSystemoutprintln()try

Systemoutprint(Nombre del sistema )systemName = inputStreamreadLine()

Systemoutprint(Biblioteca en la que existe el archivo )library = inputStreamreadLine()

Systemoutprint(Nombre de archivo )file = inputStreamreadLine()

Systemoutprint(Nombre de miembro (pulse Intro para el primer miembro) )member = inputStreamreadLine()if (memberequals())

member = FIRST

Systemoutprintln()catch (Exception e)

Systemoutprintln(Error al obtener entrada de usuario)eprintStackTrace()Systemexit (0)

Cree un objeto AS400 y establezca conexioacuten para el servicio de acceso a nivel de registroAS400 system = new AS400(systemName)try

systemconnectService(AS400RECORDACCESS)catch(Exception e)

Systemoutprintln(No ha sido posible conectar para acceso a nivel de registro)Systemoutprintln(Vea si en el archivo readme hay instrucciones especiales relacionadas con el

acceso a nivel de registro)eprintStackTrace()Systemexit (0)

Cree un objeto QSYSObjectPathName para obtener el formato del nombre de viacutea del sistema de archivos integrado del archivo que se visualizaraacuteQSYSObjectPathName filePathName = new QSYSObjectPathName(library file member MBR)

Cree un objeto SequentialFile que represente el archivo que se visualizaraacuteSequentialFile theFile = new SequentialFile(system filePathNamegetPath())

Recupere el formato de registro correspondiente al archivoAS400FileRecordDescription recordDescription =

new AS400FileRecordDescription(system filePathNamegetPath())try

RecordFormat[] format = recordDescriptionretrieveRecordFormat()

Establezca el formato de registro del archivotheFilesetRecordFormat(format[0])

464 IBM Toolbox para Java IBM Toolbox para Java

Abra el archivo para lectura Lea 100 registros en una sola vez si es posibletheFileopen(AS400FileREAD_ONLY 100 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Visualice cada uno de los registros del archivoSystemoutprintln(Se va a visualizar el archivo + librarytoUpperCase() +

+ filetoUpperCase() + ( + theFilegetMemberName()trim() + ))

Record record = theFilereadNext()while (record = null)

Systemoutprintln(record)record = theFilereadNext()

Systemoutprintln()

Cierre el archivotheFileclose()

Desconecte del servicio de acceso a nivel de registrosystemdisconnectService(AS400RECORDACCESS)

catch (Exception e)

Systemoutprintln(Se produjo un error al intentar visualizar el archivo)eprintStackTrace()

try

Cierre el archivotheFileclose()

catch(Exception x)

Desconecte del servicio de acceso a nivel de registrosystemdisconnectService(AS400RECORDACCESS)Systemexit (0)

Aseguacuterese de que finaliza la aplicacioacuten en el readme encontraraacute detallesSystemexit (0)

Ejemplo coacutemo se utilizan las clases de acceso a nivel de registro para leerregistros de un archivoEste programa utiliza las clases de acceso a nivel de registro para leer registros de un archivo delservidor

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de acceso a nivel de registro Este programa utiliza las clases de acceso a nivel de registro para leer registros de un archivo del servidor Sintaxis del mandato java RLReadFile sistema Este programa lee los registros del archivo de base de datos de ejemplo de CA400 (QCUSTCDT en la biblioteca QIWS) Si cambia este ejemplo para actualizar registros debe hacer una copia de QCUSTCDT y actualizar la copia

IBM Toolbox para Java 465

Este fuente es un ejemplo de acceso a nivel de registro de IBM Toolbox para Java

import javaioimport javautilimport javamathimport comibmas400access

public class RLReadFile extends Object

public static void main(String[] parameters)

String system =

Continuacutee uacutenicamente si se ha especificado un nombre de sistema

if (parameterslength gt= 1)

try

Supongamos que el primer paraacutemetro es el nombre de sistema

system = parameters[0]

Cree un objeto AS400 para el servidor que tiene el archivo

AS400 as400 = new AS400(system)

Cree una descripcioacuten de registro para el archivo El archivo es QCUSTCDT de la biblioteca QIWS

ZonedDecimalFieldDescription customerNumber =new ZonedDecimalFieldDescription(new AS400ZonedDecimal(60)

NUacuteMCLI)CharacterFieldDescription lastName =

new CharacterFieldDescription(new AS400Text(8 as400) APELLIDO)

CharacterFieldDescription initials =new CharacterFieldDescription(new AS400Text(3 as400) INIC)

CharacterFieldDescription street =new CharacterFieldDescription(new AS400Text(13 as400) CALLE)

CharacterFieldDescription city =new CharacterFieldDescription(new AS400Text(6 as400) CIUDAD)

CharacterFieldDescription state =new CharacterFieldDescription(new AS400Text(2 as400) ESTADO)

ZonedDecimalFieldDescription zipCode =new ZonedDecimalFieldDescription(new AS400ZonedDecimal(50)

COacuteDPOST)ZonedDecimalFieldDescription creditLimit =

new ZonedDecimalFieldDescription(new AS400ZonedDecimal(40)LMTCDT)

ZonedDecimalFieldDescription chargeCode =new ZonedDecimalFieldDescription(new AS400ZonedDecimal(10)

COacuteDCARG)ZonedDecimalFieldDescription balanceDue =

new ZonedDecimalFieldDescription(new AS400ZonedDecimal(62)SALDO)

466 IBM Toolbox para Java IBM Toolbox para Java

ZonedDecimalFieldDescription creditDue =new ZonedDecimalFieldDescription(new AS400ZonedDecimal(62)

CDTVENC)

El nombre de formato de registro debe especificarse para un archivo DDM En el caso del archivo QCUSTCDT su formato de registro se llama CUSREC

RecordFormat qcustcdt = new RecordFormat(CUSREC)

qcustcdtaddFieldDescription(customerNumber)qcustcdtaddFieldDescription(lastName)qcustcdtaddFieldDescription(initials)qcustcdtaddFieldDescription(street)qcustcdtaddFieldDescription(city)qcustcdtaddFieldDescription(state)qcustcdtaddFieldDescription(zipCode)qcustcdtaddFieldDescription(creditLimit)qcustcdtaddFieldDescription(chargeCode)qcustcdtaddFieldDescription(balanceDue)qcustcdtaddFieldDescription(creditDue)

Cree el objeto de archivo secuencial que representa el archivo en el servidor Utilizaremos un objeto QSYSObjectPathName para obtener el nombre del archivo con el formato correcto

QSYSObjectPathName fileName = new QSYSObjectPathName(QIWSQCUSTCDTFILE)

SequentialFile file = new SequentialFile(as400 fileNamegetPath())

Permita que el objeto de archivo sepa el formato de los registros

filesetRecordFormat(qcustcdt)

Abra el archivo para acceso solo de lectura Especifique un factor de bloques igual a 10 (el objeto de archivo obtendraacute 10 registros cuando acceda al servidor para los datos) No utilice el control de compromiso

fileopen(SequentialFileREAD_ONLY10SequentialFileCOMMIT_LOCK_LEVEL_NONE)

Lea el primer registro del archivo

Record data = filereadNext()

Itere en bucle mientras haya registros en el archivo (mientras no se haya llegado al final del archivo)

while (data = null)

Visualice el registro uacutenicamente si el saldo es superior a cero En ese caso visualice el nombre del cliente y el saldo El coacutedigo siguiente obtiene campos del registro por nombre de campo Al recuperarse el campo del registro el campo se convierte del formato de servidor al formato Java

IBM Toolbox para Java 467

if (((BigDecimal)datagetField(BALDUE))floatValue() gt 00)

Systemoutprint((String) datagetField(INIC) + )Systemoutprint((String) datagetField(APELLIDO) + )Systemoutprintln((BigDecimal) datagetField(SALDO))

Lea el registro siguiente del archivo

data = filereadNext()

Cuando no haya maacutes registros para leer desconeacutectese del servidor

as400disconnectAllServices()

catch (Exception e)

Si alguna de las operaciones anteriores ha fallado imprima un mensaje de error y enviacutee la excepcioacuten a la salida

Systemoutprintln(No se ha podido leer el archivo)Systemoutprintln(e)

Visualice texto de ayuda si los paraacutemetros son incorrectos

else

Systemoutprintln()Systemoutprintln()Systemoutprintln()Systemoutprintln(Los paraacutemetros no son correctos La sintaxis del mandato es)Systemoutprintln()Systemoutprintln( RLReadFile as400)Systemoutprintln()Systemoutprintln(Donde)Systemoutprintln()Systemoutprintln( as400 = sistema que contiene el archivo)Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln( RLReadFile miSistema)Systemoutprintln()Systemoutprintln()Systemoutprintln(Nota este programa lee el archivo de base de datos QIWSQCUSTCDT )Systemoutprintln()Systemoutprintln()

Systemexit (0)

Ejemplo coacutemo se utilizan las clases de acceso a nivel de registro para leerregistros por claveEste programa utiliza las clases de acceso a nivel de registro para leer registros por clave de un archivodel servidor Se pediraacute al usuario el nombre del servidor en el que se ejecutaraacute y la biblioteca en la que secrearaacute el archivo QCUSTCDTKY

468 IBM Toolbox para Java IBM Toolbox para Java

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de acceso a nivel de registro Este programa utiliza las clases de acceso a nivel de registro para leer registros por clave de un archivo del servidor Se pediraacute al usuario el nombre del servidor para el que se haraacute la ejecucioacuten y la biblioteca en que se crearaacute el archivo QCUSTCDTKY Sintaxis del mandato java RLKeyedFileExample Este programa copiaraacute los registros del archivo de base de datos de ejemplo de IBM i Access para Windows (QCUSTCDT en la biblioteca QIWS) en el archivo QCUSTCDTKY con el mismo formato que QIWSQCUSTCDT pero que tiene establecido el campo NUacuteMCLI como clave del archivo Este fuente es un ejemplo de acceso a nivel de registro de IBM Toolbox para Java

import javaioimport javautilimport javamathimport comibmas400access

public class RLKeyedFileExample

public static void main(String[] parameters)

Se ha creado un lector para obtener entrada del usuarioBufferedReader inputStream = new BufferedReader(new InputStreamReader(Systemin)1)

Declare variables para los nombres de sistema biblioteca archivo y miembroString systemName = String library =

Obtenga el nombre de sistema del usuarioSystemoutprintln()try

Systemoutprint(Nombre del sistema )systemName = inputStreamreadLine()

Systemoutprint(Biblioteca en la que se crearaacute el archivo QCUSTCDTKY )library = inputStreamreadLine()

catch(Exception e)

Systemoutprintln(Error al obtener entrada de usuario)eprintStackTrace()Systemexit (0)

Cree un objeto AS400 y establezca conexioacuten para el servicio de acceso a nivel de registroAS400 system = new AS400(systemName)try

systemconnectService(AS400RECORDACCESS)catch(Exception e)

Systemoutprintln(No ha sido posible conectar para acceso a nivel de registro)Systemoutprintln(Vea si en el archivo readme hay instrucciones especiales relacionadas con el

IBM Toolbox para Java 469

acceso a nivel de registro)eprintStackTrace()Systemexit (0)

RecordFormat qcustcdtFormat = nulltry

Cree el objeto RecordFormat para crear el archivo El formato de registro del nuevo archivo seraacute el mismo que el del archivo QIWSQCUSTCDT Sin embargo haremos que el campo NUacuteMCLI sea un campo claveAS400FileRecordDescription recordDescription =

new AS400FileRecordDescription(system QSYSLIBQIWSLIBQCUSTCDTFILE)

Solo hay un formato de registro para el archivo por lo que debe tomar el primer (y uacutenico) elemento de la matriz RecordFormat devuelta como RecordFormat para el archivoSystemoutprintln(Se estaacute recuperando formato de registro de QIWSQCUSTCDT)qcustcdtFormat = recordDescriptionretrieveRecordFormat()[0] Indique que NUacuteMCLI es un campo claveqcustcdtFormataddKeyFieldDescription(CUSNUM)

catch(Exception e)

Systemoutprintln(No ha sido posible recuperar el formato de registro de QIWSQCUSTCDT)eprintStackTrace()Systemexit (0)

Cree el objeto de archivo por clave que representa el archivo que crearemos en el servidor Utilizaremos un objeto QSYSObectPathName para obtener el nombre del archivo con el formato correctoQSYSObjectPathName fileName = new QSYSObjectPathName(library

QCUSTCDTKYFILEMBR)

KeyedFile file = new KeyedFile(system fileNamegetPath())

try

Systemoutprintln(Se estaacute creando el archivo + library + QCUSTCDTKY) Cree el archivo con el objeto qcustcdtFormatfilecreate(qcustcdtFormat Archivo QCUSTCDT por clave)

Llene el archivo con los registros incluidos en QIWSQCUSTCDTcopyRecords(system library)

Abra el archivo para acceso solo de lectura Dado que accederemos al archivo de forma aleatoria especifique el factor de bloques 1 El paraacutemetro nivel de bloqueo de compromiso no se tendraacute en cuenta porque el control de compromiso no se ha iniciadofileopen(AS400FileREAD_ONLY

1AS400FileCOMMIT_LOCK_LEVEL_NONE)

Suponga que deseamos visualizar la informacioacuten de los clientes 192837 392859 y 938472 El campo NUacuteMCLI es un campo decimal con zona de longitud 6 sin posiciones decimales Por consiguiente el valor del campo clave se representa con un BigDecimalBigDecimal[] keyValues = new BigDecimal(192837)

new BigDecimal(392859)new BigDecimal(938472)

Cree la clave para leer los registros La clave para un objeto KeyedFile se especifica con Object[]Object[] key = new Object[1]

470 IBM Toolbox para Java IBM Toolbox para Java

Record data = nullfor (int i = 0 i lt keyValueslength i++)

Configure la clave para lecturakey[0] = keyValues[i]

Lea el registro correspondiente al nuacutemero de cliente keyValues[i]data = fileread(key)if (data = null)

Visualice el registro uacutenicamente si el saldo es superior a cero En ese caso visualice el nombre del cliente y el saldo El coacutedigo siguiente obtiene campos del registro por nombre de campo Al recuperarse el campo del registro el campo se convierte del formato de servidor al formato Javaif (((BigDecimal)datagetField(BALDUE))floatValue() gt 00)

Systemoutprint((String) datagetField(INIC) + )Systemoutprint((String) datagetField(APELLIDO) + )Systemoutprintln((BigDecimal) datagetField(SALDO))

Todas las operaciones con el archivo han terminadofileclose()

Elimine el archivo del sistema del usuariofiledelete()

catch(Exception e)

Systemoutprintln(No se ha podido crearleer en QTEMPQCUSTCDT)eprintStackTrace()try

fileclose() Elimine el archivo del sistema del usuariofiledelete()

catch(Exception x)

Todas las operaciones con el acceso a nivel de registro han terminado desconecte del servidor de acceso a nivel de registrosystemdisconnectService(AS400RECORDACCESS)Systemexit (0)

public static void copyRecords(AS400 system String library)

Utilice la clase CommandCall para ejecutar el mandato CPYF para copiar los registros de QIWSQCUSTCDT en QTEMPQCUSTCDTCommandCall c = new CommandCall(system CPYF FROMFILE(QIWSQCUSTCDT) TOFILE(

+ library + QCUSTCDTKY) MBROPT(REPLACE))try

Systemoutprintln(Se estaacuten copiando registros de QIWSQCUSTCDT en + library + QCUSTCDTKY)

crun()AS400Message[] msgs = cgetMessageList()if (msgs[0]getID()equals(CPC2955))

Systemoutprintln(No se ha podido llenar con datos + library + QCUSTCDTKY)

IBM Toolbox para Java 471

for (int i = 0 i lt msgslength i++)

Systemoutprintln(msgs[i])Systemexit (0)

catch(Exception e)

Systemoutprintln(No se ha podido llenar con datos + library + QCUSTCDTKY)Systemexit (0)

Ejemplo coacutemo se utiliza UserList para listar todos los usuarios de un grupodeterminadoEste coacutedigo fuente es un ejemplo de UserList de IBM Toolbox para Java Este programa lista todos losusuarios de un grupo determinado

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de lista de usuarios Este programa lista todos los usuarios de un grupo determinado Sintaxis del mandato UserListExample sistema grupo Este fuente es un ejemplo de UserList de IBM Toolbox para Java

import comibmas400accessimport comibmas400vaccessimport javautilEnumeration

public class UserListExample

public static void main (String[] args)

Si no se ha especificado un sistema y un grupo visualizar texto de ayuda y salirif (argslength = 2)

Systemoutprintln(Utilizacioacuten UserListExample sistema grupo)return

try

Cree un objeto AS400 El nombre del sistema se ha pasado como primer argumento de liacutenea de mandatosAS400 system = new AS400 (args[0])

El nombre de grupo se ha pasado como segundo argumento de liacutenea de mandatosString groupName = args[1]

Cree el objeto lista de usuariosUserList userList = new UserList (system)

472 IBM Toolbox para Java IBM Toolbox para Java

Obtenga una lista de los usuarios del grupo especificadouserListsetUserInfo (UserListMEMBER)userListsetGroupInfo (groupName)Enumeration enum = userListgetUsers ()

Itere por la lista e imprima los nombres y las descripciones de los usuarioswhile (enumhasMoreElements ())

User u = (User) enumnextElement ()Systemoutprintln (Nombre de usuario + ugetName ())Systemoutprintln (Descripcioacuten + ugetDescription ())Systemoutprintln ()

catch (Exception e)

Systemoutprintln (Error + egetMessage ())

Systemexit (0)

Ejemplos JavaBeansEn esta seccioacuten figura una lista de los ejemplos de coacutedigo que se proporcionan en la informacioacuten de beande IBM Toolbox para Java

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo coacutedigo de bean de IBM Toolbox para JavaEl siguiente ejemplo crea un objeto AS400 y un objeto CommandCall y luego registra escuchas en losobjetos Los escuchas de los objetos imprimen un comentario cuando el servidor se conecta o desconectay cuando el objeto CommandCall completa la ejecucioacuten de un mandato

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de beans Este programa utiliza el soporte de JavaBeans en las clases de IBM Toolbox para Java

IBM Toolbox para Java 473

Sintaxis del mandato BeanExample

import comibmas400accessAS400import comibmas400accessCommandCallimport comibmas400accessConnectionListenerimport comibmas400accessConnectionEventimport comibmas400accessActionCompletedListenerimport comibmas400accessActionCompletedEvent

class BeanExample

AS400 as400_ = new AS400()CommandCall cmd_ = new CommandCall( as400_ )

BeanExample()

Siempre que el sistema se conecte o desconecte imprima un comentario Para ello antildeada un escucha al objeto AS400 Cuando un sistema se conecte o desconecte el objeto AS400 llamaraacute a este coacutedigo

as400_addConnectionListener(new ConnectionListener()

public void connected(ConnectionEvent event)

Systemoutprintln( Sistema conectado )public void disconnected(ConnectionEvent event)

Systemoutprintln( Sistema desconectado )

)

Siempre que un mandato se ejecute hasta completarse imprima un comentario Para ello antildeada un escucha al objeto commandCall El objeto commandCall llamaraacute a este coacutedigo cuando ejecute un mandato

cmd_addActionCompletedListener(new ActionCompletedListener()

public void actionCompleted(ActionCompletedEvent event)

Systemoutprintln( Mandato completado )

)

void runCommand()

try

Ejecute un mandato Los escuchas imprimiraacuten comentarios cuando el sistema se conecte y cuando el mandato se haya ejecutado hasta completarsecmd_run( TESTCMD PARMS )

catch (Exception ex)

Systemoutprintln( ex )

474 IBM Toolbox para Java IBM Toolbox para Java

public static void main(String[] parameters)

BeanExample be = new BeanExample()

berunCommand()

Systemexit (0)

Ejemplo crear beans con un constructor visual de beansEn este ejemplo se utiliza el editor de composicioacuten de IBM VisualAge para Java Enterprise Edition V20pero los demaacutes constructores visuales de beans son similares Este ejemplo crea un applet para un botoacutenque cuando se pulsa ejecuta un mandato en el servidorv Arrastre un botoacuten y sueacuteltelo en el applet (El bean Button se halla en el constructor de beans en la

parte izquierda de la pestantildea Composicioacuten visual en la figura 1)v Suelte un bean CommandCall y un bean AS400 fuera del applet (Los beans se hallan en el constructor

de beans en la parte izquierda de la pestantildea Composicioacuten visual en la figura 1)

Figura 1 Ventana del Editor de composicioacuten visual de VisualAge - guiBeanExample

v Edite las propiedades del bean (Para editarlas seleccione el bean y luego pulse el botoacuten derecho delratoacuten para visualizar una ventana una de cuyas opciones es Propiedades)ndash Cambie la etiqueta del bean Button por Run command (Ejecutar mandato) como se muestra en la

figura 2Figura 2 cambiar la etiqueta del botoacuten por Run command o Ejecutar mandato

IBM Toolbox para Java 475

ndash Cambie el nombre de sistema del bean AS400 por TestSysndash Cambie el ID de usuario del bean AS400 por TestUser como se muestra en la figura 3

Figura 3 cambiar el nombre del ID de usuario por TestUser

ndash Cambie el mandato del bean CommandCall por SNDMSG MSG(Testing) TOUSR(TESTUSER)como se muestra en la figura 4Figura 4 cambiar el mandato del bean CommandCall

476 IBM Toolbox para Java IBM Toolbox para Java

v Conecte el bean AS400 al bean CommandCall El meacutetodo que se utiliza para ello variacutea en funcioacuten delos constructores de beans Para este ejemplo realice estos pasosndash Seleccione el bean CommandCall y luego pulse el botoacuten derecho del ratoacutenndash Seleccione Conectar

ndash Seleccione Caracteriacutesticas conectables

ndash Seleccione system en la lista de caracteriacutesticas como se muestra en la figura 5ndash Seleccione el bean AS400ndash Seleccione this en el menuacute emergente que aparece sobre el bean AS400

Figura 5 conectar el bean AS400 al bean CommandCall

IBM Toolbox para Java 477

v Conecte el botoacuten al bean CommandCallndash Seleccione el bean Button y luego pulse el botoacuten derecho del ratoacutenndash Seleccione Conectar

ndash Seleccione actionPerformed

ndash Seleccione el bean CommandCallndash Seleccione Caracteriacutesticas conectables en el menuacute emergente que aparecendash Seleccione run() en la lista de meacutetodos como se muestra en la figura 6

Figura 6 conectar un meacutetodo a un botoacuten

478 IBM Toolbox para Java IBM Toolbox para Java

Cuando haya terminado la ventana del Editor de composicioacuten visual de VisualAge puede tener elaspecto de la figura 7

Figura 7 Ventana del Editor de composicioacuten visual de VisualAge - Ejemplo de bean finalizado

IBM Toolbox para Java 479

Ejemplos clases commtraceEste tema enlaza con el ejemplo de coacutedigo proporcionado en la documentacioacuten de las clases commtracede IBM Toolbox para Javav ldquoEjemplo coacutemo se utilizan las clases commtracerdquo en la paacutegina 197

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplos de las clases HTMLLos ejemplos que figuran a continuacioacuten muestran algunas maneras de coacutemo se pueden utilizar las clasesHTML de IBM Toolbox para Javav Ejemplo coacutemo se utiliza la clase BidiOrderingv Ejemplo crear objetos HTMLAlignv Ejemplos de la clase HTMLDocument

ndash Ejemplo coacutemo se utiliza HTMLDocument para crear datos HTMLndash Ejemplo coacutemo se utiliza HTMLDocument para crear datos FO XSL

480 IBM Toolbox para Java IBM Toolbox para Java

v Ejemplo coacutemo se utilizan las clases de formularios HTMLv Ejemplos de clases de entrada de formulario

ndash Ejemplo crear un objeto ButtonFormInputndash Ejemplo crear un objeto FileFormInputndash Ejemplo crear un objeto HiddenFormInputndash Ejemplo crear un objeto ImageFormInputndash Ejemplo crear un objeto ResetFormInputndash Ejemplo crear un objeto SubmitFormInputndash Ejemplo crear un objeto TextFormInputndash Ejemplo crear un objeto PasswordFormInputndash Ejemplo crear un objeto RadioFormInputndash Ejemplo crear un objeto CheckboxFormInput

v Ejemplo crear objetos HTMLHeadingv Ejemplo coacutemo se utiliza la clase HTMLHyperlinkv Ejemplo coacutemo se utiliza la clase HTMLImagev Ejemplos de HTMLList

ndash Ejemplo crear listas ordenadasndash Ejemplo crear listas sin ordenarndash Ejemplo crear listas anidadas

v Ejemplo crear coacutedigos HTMLMetav Ejemplo crear coacutedigos HTMLParameterv Ejemplo crear coacutedigos HTMLServletv Ejemplo coacutemo se utiliza la clase HTMLTextv Ejemplos de HTMLTree

ndash Ejemplo coacutemo se utiliza la clase HTMLTreendash Ejemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrer

v Clases de formulario con disentildeondash Ejemplo coacutemo se utiliza la clase GridLayoutFormPanelndash Ejemplo coacutemo se utiliza la clase LineLayoutFormPanel

v Ejemplo coacutemo se utiliza la clase TextAreaFormElementv Ejemplo coacutemo se utiliza la clase LabelFormOutputv Ejemplo coacutemo se utiliza la clase SelectFormElementv Ejemplo coacutemo se utiliza la clase SelectOptionv Ejemplo coacutemo se utiliza la clase RadioFormInputGroupv Ejemplo coacutemo se utiliza la clase RadioFormInputv Ejemplo coacutemo se utilizan las clases HTMLTable

ndash Ejemplo coacutemo se utiliza la clase HTMLTableCellndash Ejemplo coacutemo se utiliza la clase HTMLTableRowndash Ejemplo coacutemo se utiliza la clase HTMLTableHeaderndash Ejemplo coacutemo se utiliza la clase HTMLTableCaption

Tambieacuten se pueden utilizar juntas las clases HTML y las clases servlet como en este ejemplo

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

IBM Toolbox para Java 481

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo coacutemo se utilizan las clases de formularios HTMLEl ejemplo siguiente de IBM Toolbox para Java muestra coacutemo se utilizan las clases de formulario HTML

Tambieacuten puede ver una salida de ejemplo a partir de la ejecucioacuten de este coacutedigo Las clases HTMLusadas en el meacutetodo showHTML estaacuten en negrita

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este coacutedigo fuente es un ejemplo de utilizacioacuten de las clases de paquete HTML que le permiten crear formularios HTML con facilidad

package customer

import javaioimport javaawtColor

import javaxservletimport javaxservlethttp

import comibmas400accessimport comibmas400utilhtml

public class HTMLExample extends HttpServlet

Determina si el usuario ya existe en la lista de registradosprivate static boolean found = false

La informacioacuten de registro se almacenaraacute aquiacuteString regPath = cregistrationtxt

public void init(ServletConfig config)

try

superinit(config)

catch(Exception e)

eprintStackTrace()

482 IBM Toolbox para Java IBM Toolbox para Java

Procesar la peticioacuten GET param req La peticioacuten param res La respuestapublic void doGet (HttpServletRequest req HttpServletResponse res)

throws ServletException IOException

ressetContentType(texthtml)ServletOutputStream out = resgetOutputStream()

Visualizar la Web utilizando las nuevas clases HTMLoutprintln(showHTML())outclose()

public void doPost (HttpServletRequest req HttpServletResponse res)throws ServletException IOException

String nameStr = reqgetParameter(name)String emailStr = reqgetParameter(email)String errorText =

Corriente de salida para escribir en el servletServletOutputStream out = resgetOutputStream()

ressetContentType(texthtml)

Comprobar si los paraacutemetros name y e-mail tienen valores vaacutelidosif (nameStrlength() == 0)

errorText += Nombre de cliente no entrado if (emailStrlength() == 0)

errorText += Correo electroacutenico no entrado

Si se han proporcionado los paraacutemetros name y e-mail continuarif (errorTextlength() == 0)

try

Cree el archivo registrationtxtFileWriter f = new FileWriter(regPath true)BufferedWriter output = new BufferedWriter(f)

Lector puesto en almacenamiento intermedio para buscar en el archivoBufferedReader in = new BufferedReader(new FileReader(regPath))

String line = inreadLine()

Restablezca el distintivo de encontradofound = false

Compruebe si este cliente ya se ha registrado o si ya ha utilizado la misma direccioacuten de correo electroacutenicowhile (found)

Si el archivo estaacute vaciacuteo o se ha llegado al final del archivoif (line == null)

break

Si el cliente ya estaacute registradoif ((lineequals(Nombre de cliente + nameStr)) ||

(lineequals(Direccioacuten de correo electroacutenico + emailStr)))

IBM Toolbox para Java 483

Enviacutee como salida un mensaje al cliente que diga que ya estaacute registradooutprintln (ltHTMLgt +

ltTITLEgt Registro de la Caja de herramientasltTITLEgt +ltMETA HTTP-EQUIV=pragma content=no-cachegt +ltBODY BGCOLOR=blanchedalmond TEXT=blackgt )

outprintln (ltPgtltHRgt +ltPgt + nameStr +ltBgt ya estaacute registrado con ese +ltBgtNombreltBgt o ltBgtDireccioacuten de correo electroacutenicoltBgt +ltPgt GraciasltPgtltHRgt)

Cree un objeto HTMLHyperlink y visualiacutecelooutprintln (ltULgtltLIgt +

new HTMLHyperlink(customerHTMLExampleVolver al formulario de registro) +

ltULgtltBODYgtltHTMLgt)found = truebreak

else Lea la liacutenea siguiente

line = inreadLine()

Objeto String para contener los datos sometidos desde el formulario HTMLString data

Si el nombre o el correo electroacutenico no estaacuten en nuestro archivo de texto continuarif (found)

------------------------------------------------------------ Inserte la nueva informacioacuten de cliente en un archivooutputnewLine()outputwrite(Nombre de cliente + nameStr)outputnewLine()outputwrite(Direccioacuten de correo electroacutenico + emailStr)outputnewLine()------------------------------------------------------------

------------------------------------------------------------ Obtener el recuadro de seleccioacuten USE a partir del formulariodata = reqgetParameter(use)if(data = null)

outputwrite(Utiliza actualmente la Caja de Herramientas + data)outputnewLine()

------------------------------------------------------------

------------------------------------------------------------ Obtener el recuadro de seleccioacuten Maacutes informacioacuten a partir del formulariodata = reqgetParameter(contact)if (data = null)

outputwrite(Ha solicitado maacutes informacioacuten + data)outputnewLine()

------------------------------------------------------------

------------------------------------------------------------ Obtener Versioacuten de AS400 a partir del formulario

484 IBM Toolbox para Java IBM Toolbox para Java

data = reqgetParameter(version)if (data = null)

if (dataequals(multiple versions))

data = reqgetParameter(MultiList)outputwrite(Muacuteltiples versiones + data)

else

outputwrite(Versioacuten de AS400 + data)

outputnewLine()------------------------------------------------------------

------------------------------------------------------------ Obtener Proyectos actuales a partir del formulariodata = reqgetParameter(interest)if (data = null)

outputwrite(Utiliza Java o estaacute interesado en + data)outputnewLine()

------------------------------------------------------------

------------------------------------------------------------ Obtener Plataformas a partir del formulariodata = reqgetParameter(platform)if (data = null)

outputwrite(Plataformas + data)outputnewLine()if (dataindexOf(Other) gt= 0)

outputwrite(Otras plataformas + reqgetParameter(OtherPlatforms))outputnewLine()

------------------------------------------------------------

------------------------------------------------------------Obtener Nuacutemero de servidores IBM i del formulariodata = reqgetParameter(list1)if (data = null)

outputwrite(Nuacutemero de servidores IBM i + data)outputnewLine()

------------------------------------------------------------

------------------------------------------------------------ Obtener Comentarios a partir del formulariodata = reqgetParameter(comments)if (data = null ampamp datalength() gt 0)

outputwrite(Comentarios + data)outputnewLine()

------------------------------------------------------------

------------------------------------------------------------ Obtener el archivo adjunto

IBM Toolbox para Java 485

data = reqgetParameter(myAttachment)if (data = null ampamp datalength() gt 0)

outputwrite(Archivo adjunto + data)outputnewLine()

------------------------------------------------------------

------------------------------------------------------------ Obtener informacioacuten de Copyright ocultadata = reqgetParameter(copyright)if (data = null)

outputwrite(data)outputnewLine()

------------------------------------------------------------

outputflush()outputclose()

Imprimir un agradecimiento al clienteoutprintln(ltHTMLgt)outprintln(ltTITLEgtGraciasltTITLEgt)outprintln(ltMETA HTTP-EQUIV=pragma content=no-cachegt )outprintln(ltBODY BGCOLOR=blanchedalmondgt)outprintln(ltHRgtltPgtGracias por registrarse ltBgt + nameStr + ltBgtltPgtltHRgt)

Cree un objeto HTMLHyperlink y visualiacutecelooutprintln(ltULgtltLIgt +

new HTMLHyperlink(customerHTMLExampleVolver al formulario de registro))

outprintln(ltULgtltBODYgtltHTMLgt)

catch (Exception e)

Mostrar error en el navegadoroutprintln(ltHTMLgt)outprintln(ltTITLEgtERRORltTITLEgt)outprintln(ltMETA HTTP-EQUIV=pragma content=no-cachegt )outprintln(ltBODY BGCOLOR=blanchedalmondgt)outprintln(ltBRgtltBgtMensaje de errorltBgtltPgt)outprintln(e + ltPgt)

Cree un objeto HTMLHyperlink y visualiacutecelooutprintln(ltULgtltLIgt +

new HTMLHyperlink(customerHTMLExampleVolver al formulario de registro))

outprintln(ltULgtltBODYgtltHTMLgt)

eprintStackTrace()

else

Enviacutee como salida un mensaje al cliente que diga que no ha entrado el nombre ni la direccioacuten de correo electroacutenico Inteacutentelo de nuevooutprintln (ltHTMLgt +

ltTITLEgtFormulario de registro no vaacutelidoltTITLEgt +ltMETA HTTP-EQUIV=pragma content=no-cachegt +ltBODY BGCOLOR=blanchedalmond TEXT=blackgt )

486 IBM Toolbox para Java IBM Toolbox para Java

outprintln (ltHRgtltBgtERRORltBgt en datos de cliente - ltPgtltBgt +errorText +ltBgtltPgtInteacutentelo de nuevo ltHRgt)

Cree un objeto HTMLHyperlink y visualiacutecelooutprintln(ltULgtltLIgt +

new HTMLHyperlink(customerHTMLExampleVolver al formulario de registro) +ltULgtltBODYgtltHTMLgt)

Cierre el transcriptoroutclose()

public void destroy(ServletConfig config)

No haga nada

public String getServletInfo()

return Registro de mi producto

private String showHTML()

Almacenamiento intermedio de tipo String para contener la paacutegina HTMLStringBuffer page = new StringBuffer()

Cree el objeto formulario HTMLHTMLForm form = new HTMLForm(servletcustomerHTMLExample)HTMLText txt

Construya el principio de la paacutegina HTML y antildeaacutedalo al almacenamiento intermedio de tipo Stringpageappend(ltHTMLgtn)pageappend(ltTITLEgt BienvenidoltTITLEgtn)pageappend(ltHEADgtltSCRIPT LANGUAGE=JavaScriptgt

function test()alert(Esto es un script de ejemplo ejecutado con unButtonFormInput)ltSCRIPTgtltHEADgt)

pageappend(ltMETA HTTP-EQUIV=pragma content=no-cachegtn)pageappend(ltBODY BGCOLOR=blanchedalmond TEXT=blackgtltBRgtn)

try

-------------------------------------------------------------------- Cree un tiacutetulo de paacutegina con texto HTMLtxt = new HTMLText(Registro de producto)txtsetSize(5)txtsetBold(true)txtsetColor(new Color(199 21 133))txtsetAlignment(HTMLConstantsCENTER)

Antildeada texto HTML al almacenamiento intermedio de tipo Stringpageappend(txtgetTag(true) + ltHRgtltBRgtn)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo linealLineLayoutFormPanel line = new LineLayoutFormPanel()txt = new HTMLText(Entre su nombre y direccioacuten de correo electroacutenico)txtsetSize(4)lineaddElement(txt)

IBM Toolbox para Java 487

Antildeada el disentildeo lineal al almacenamiento intermedio de tipo Stringpageappend(linetoString())pageappend(ltBRgt)--------------------------------------------------------------------

-------------------------------------------------------------------- Establezca el METHOD del formulario HTMLformsetMethod(HTMLFormMETHOD_POST)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree una entrada de texto para el nombreTextFormInput user = new TextFormInput(name)usersetSize(25)usersetMaxLength(40)

Cree una entrada de texto para la direccioacuten de correo-eTextFormInput email = new TextFormInput(email)emailsetSize(30)emailsetMaxLength(40)

Cree una ImageFormInputImageFormInput img =

new ImageFormInput(Someter formulario imagesmyPiimagescgif)imgsetAlignment(HTMLConstantsRIGHT)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un objeto LineLayoutFormPanel para el nombre y la direccioacuten de correo-eLineLayoutFormPanel line2 = new LineLayoutFormPanel()

Antildeada elementos al formulario de liacutenealine2addElement(new LabelFormElement(Nombre))line2addElement(user) Cree y antildeade un elemento etiqueta al disentildeo linealline2addElement(new LabelFormElement(Correo electroacutenico))line2addElement(email)line2addElement(img)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo lineal para hacer preguntasLineLayoutFormPanel line3 = new LineLayoutFormPanel()

Antildeada elementos al disentildeo linealline3addElement(new LineLayoutFormPanel())line3addElement(new

CheckboxFormInput(useyesiquestUtiliza actualmente la Caja de Herramientasfalse))

line3addElement(new LineLayoutFormPanel())line3addElement(new CheckboxFormInput(

contactyesiquestDesea informacioacuten sobre los futuros releases de la Caja de Herramientastrue))

line3addElement(new LineLayoutFormPanel())--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un grupo de botones de seleccioacuten de versioacutenRadioFormInputGroup group = new RadioFormInputGroup(version)

Antildeada al grupo entradas de formulario que sean botones de seleccioacutengroupadd(new RadioFormInput(version v3r2 V3R2 false))

488 IBM Toolbox para Java IBM Toolbox para Java

groupadd(new RadioFormInput(version v4r1 V4R1 false))groupadd(new RadioFormInput(version v4r2 V4R2 false))groupadd(new RadioFormInput(version v4r3 V4R3 false))groupadd(new RadioFormInput(version v4r4 V4R4 false))groupadd(new

RadioFormInput(versionmultiple versionsiquestMuacuteltiples versiones Cuaacutelesfalse))

Cree un elemento de formulario de seleccioacutenSelectFormElement mlist = new SelectFormElement(MultiList)mlistsetMultiple(true)mlistsetSize(3)

Cree las opciones para el elemento de formulario de seleccioacutenSelectOption option1 = mlistaddOption(V3R2 v3r2)SelectOption option2 = mlistaddOption(V4R1 v4r1)SelectOption option3 = mlistaddOption(V4R2 v4r2)SelectOption option4 = mlistaddOption(V4R3 v4r3)SelectOption option5 = mlistaddOption(V4R4 v4r4)

Cree texto HTMLtxt = new HTMLText(Nivel actual del servidor)txtsetSize(4)

Cree un disentildeo cuadriculadoGridLayoutFormPanel grid1 = new GridLayoutFormPanel(3)

Antildeada el grupo de botones de seleccioacuten y el elemento de formulario de seleccioacuten a la cuadriacuteculagrid1addElement(txt)grid1addElement(group)grid1addElement(mlist)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo cuadriculado para los interesesGridLayoutFormPanel grid2 = new GridLayoutFormPanel(1)txt = new HTMLText(Proyectos actuales o aacuterea de intereacutes +

(marque todo lo que crea oportuno))txtsetSize(4)

Antildeada elementos al disentildeo cuadriculadogrid2addElement(new LineLayoutFormPanel())grid2addElement(txt) Cree y antildeada un recuadro de seleccioacuten al disentildeo cuadriculadogrid2addElement(new

CheckboxFormInput(interest applications Aplicaciones true))grid2addElement(new

CheckboxFormInput(interest applets Applets false))grid2addElement(new

CheckboxFormInput(interest servlets Servlets false))--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo lineal para las plataformasLineLayoutFormPanel line4 = new LineLayoutFormPanel()txt = new HTMLText(Plataformas de cliente utilizadas +

(marque todo lo que crea oportuno))txtsetSize(4)

Antildeada elementos al disentildeo linealline4addElement(new LineLayoutFormPanel())line4addElement(txt)line4addElement(new LineLayoutFormPanel())line4addElement(new CheckboxFormInput(platform

IBM Toolbox para Java 489

95Windows95false))

line4addElement(new CheckboxFormInput(platform98Windows98false))

line4addElement(new CheckboxFormInput(platformNTWindowsNTfalse))

line4addElement(new CheckboxFormInput(platformOS2OS2false))

line4addElement(new CheckboxFormInput(platformAIXAIXfalse))

line4addElement(new CheckboxFormInput(platformLinuxLinuxfalse))

line4addElement(new CheckboxFormInput(platformAS400System ifalse))

line4addElement(new CheckboxFormInput(platformOtherOtrasfalse))

TextFormInput other = new TextFormInput(OtherPlatforms)othersetSize(20)othersetMaxLength(50)

line4addElement(other)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo lineal para el nuacutemero de servidoresLineLayoutFormPanel grid3 = new LineLayoutFormPanel()

txt = new HTMLText(iquestCuaacutentos servidores System i tiene)

txtsetSize(4)

Cree un elemento de formulario de seleccioacuten para el nuacutemero de servidores poseiacutedosSelectFormElement list = new SelectFormElement(list1) Cree y antildeada las opciones de seleccioacuten a la lista de elementos de formulario de seleccioacutenSelectOption opt0 = listaddOption(0 cero)SelectOption opt1 = listaddOption(1 uno true)SelectOption opt2 = listaddOption(2 dos)SelectOption opt3 = listaddOption(3 tres)SelectOption opt4 = listaddOption(4 cuatro)SelectOption opt5 = new SelectOption(5+ CincoOMaacutes false)listaddOption(opt5)

Antildeada elementos al disentildeo cuadriculadogrid3addElement(new LineLayoutFormPanel())grid3addElement(txt)grid3addElement(list)--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo cuadriculado para los comentarios de productoGridLayoutFormPanel grid4 = new GridLayoutFormPanel(1)

490 IBM Toolbox para Java IBM Toolbox para Java

txt = new HTMLText(Comentarios de producto)txtsetSize(4)

Antildeada elementos al disentildeo cuadriculadogrid4addElement(new LineLayoutFormPanel())grid4addElement(txt) Cree un formulario de aacuterea de textogrid4addElement(new TextAreaFormElement(comments 5 75))grid4addElement(new LineLayoutFormPanel())--------------------------------------------------------------------

-------------------------------------------------------------------- Cree un disentildeo cuadriculadoGridLayoutFormPanel grid5 = new GridLayoutFormPanel(2)txt = new HTMLText(iquestDesea iniciar la sesioacuten en un servidor)txtsetSize(4)

Cree una entrada de texto y una etiqueta para el nombre del sistemaTextFormInput sys = new TextFormInput(system)LabelFormElement sysLabel = new LabelFormElement(System)

Cree una entrada de texto y una etiqueta para el ID de usuarioTextFormInput uid = new TextFormInput(uid)LabelFormElement uidLabel = new LabelFormElement(ID de usuario)

Cree una entrada de contrasentildea y una etiqueta para la contrasentildeaPasswordFormInput pwd = new PasswordFormInput(pwd)LabelFormElement pwdLabel = new LabelFormElement(Contrasentildea)

Antildeada las entradas de texto las entradas de contrasentildea y las etiquetas a la cuadriacuteculagrid5addElement(sysLabel)grid5addElement(sys)grid5addElement(uidLabel)grid5addElement(uid)grid5addElement(pwdLabel)grid5addElement(pwd)--------------------------------------------------------------------

-------------------------------------------------------------------- Antildeada los diversos paneles creados al formulario HTML en el orden en que han de aparecerformaddElement(line2)formaddElement(line3)formaddElement(grid1)formaddElement(grid2)formaddElement(line4)formaddElement(grid3)formaddElement(grid4)formaddElement(txt)formaddElement(new LineLayoutFormPanel())formaddElement(grid5)formaddElement(new LineLayoutFormPanel())formaddElement(

new HTMLText(Someter un archivo adjunto aquiacute ltbr gt)) Antildeada una entrada de archivo al formularioformaddElement(new FileFormInput(myAttachment))formaddElement(new ButtonFormInput(button

iexclPULSE AQUIacutetest()))

Antildeada un disentildeo de liacutenea vaciacuteo que a su vez antildeada un salto de liacutenea ltbr gt al formularioformaddElement(new LineLayoutFormPanel())formaddElement(new LineLayoutFormPanel())formaddElement(new SubmitFormInput(submit Registrar))formaddElement(new LineLayoutFormPanel())formaddElement(new LineLayoutFormPanel())formaddElement(new ResetFormInput(reset Restablecer))

IBM Toolbox para Java 491

Antildeada una entrada oculta al formularioformaddElement(new

HiddenFormInput(copyright(C) Copyright IBM Corp 1999 1999))

--------------------------------------------------------------------

Antildeada todo el formulario HTML al almacenamiento intermedio de tipo Stringpageappend(formtoString())

catch(Exception e)

eprintStackTrace()

Antildeada los coacutedigos HTML de final al almacenamiento intermediopageappend(ltBODYgtn)pageappend(ltHTMLgtn)

Devuelva toda la paacutegina HTML de tipo seriereturn pagetoString()

Salida de ejemplo de las clases HTMLA continuacioacuten figuran algunas posibles salidas de ejemplo que se pueden obtener al ejecutar el ejemplode las clases HTMLv Nombre de cliente Fred Flinstone

Direccioacuten de correo electroacutenico flinstonebedrockcomUtiliza actualmente la Caja de Herramientas siacuteHa solicitado maacutes informacioacuten siacuteMuacuteltiples versiones v4r2v4r4Utiliza Java o estaacute interesado en aplicacionesservletsPlataformas NTLinuxNuacutemero de servidores IBM i tresComentarios iexclNuestro departamento de programacioacuten utiliza la Caja de Herramientas

para construir aplicaciones de clienteArchivo adjunto Uwiedrichservlettemphtml(C) Copyright IBM Corp 1999 1999

v Nombre de cliente Barney RubbleDireccioacuten de correo electroacutenico rubblebedrockcomUtiliza actualmente la Caja de Herramientas siacuteVersioacuten de AS400 v4r4Utiliza Java o estaacute interesado en servletsPlataformas OS2Nuacutemero de servidoresIBM i CincoOMaacutes(C) Copyright IBM Corp 1999 1999

v Nombre de cliente George JetsonDireccioacuten de correo electroacutenico jetsonsprocketcomHa solicitado maacutes informacioacuten siacuteVersioacuten de AS400 v4r2Utiliza Java o estaacute interesado en aplicacionesPlataformas NTOtrasOtras plataformas SolarisNuacutemero de servidores IBM i unoComentarios iexclEs la primera vez que utilizo esto iexclQueacute gozada(C) Copyright IBM Corp 1999 1999

492 IBM Toolbox para Java IBM Toolbox para Java

v Nombre de cliente Clark KentDireccioacuten de correo electroacutenico supermankryptoncomVersioacuten de AS400 v4r2Nuacutemero de servidores IBM i uno(C) Copyright IBM Corp 1999 1999

Referencia relacionadaldquoEjemplo coacutemo se utilizan las clases de formularios HTMLrdquo en la paacutegina 482El ejemplo siguiente de IBM Toolbox para Java muestra coacutemo se utilizan las clases de formulario HTML

Ejemplo coacutemo se utilizan las clases HTMLTreeEste ejemplo muestra coacutemo crear aacuterboles HTML y de archivos mediante las clases de paquete HTML deIBM Toolbox para Java

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este fuente es un ejemplo de coacutemo se usan las clases del paquete HTML de IBM Toolbox para Java que permiten construir faacutecilmente aacuterboles de archivo y HTML

import javaioFileimport javaioPrintWriterimport javaioIOException

import javautilVectorimport javautilProperties

import javaxservletimport javaxservlethttp

import comibmas400accessAS400import comibmas400accessTraceimport comibmas400accessIFSJavaFileimport comibmas400utilhtmlHTMLMetaimport comibmas400utilhtmlHTMLTreeimport comibmas400utilhtmlHTMLTreeElementimport comibmas400utilhtmlURLParserimport comibmas400utilhtmlDirFilterimport comibmas400utilhtmlFileTreeElementimport comibmas400utilservletServletHyperlink

Ejemplo de coacutemo se usan las clases HTMLTree y FileTreeElement en un servletpublic class TreeNav extends HttpServlet

public void init(ServletConfig config)throws ServletException

superinit(config)

La Caja de Herramientas emplea un conjunto de iconos predeterminado para representar elementos expandidos contraiacutedos y documentos dentro del objeto HTMLTree Para mejorar estos iconos la Caja de Herramientas proporciona tres archivos gif (expandedgif collapsedgif y bulletgif) en el archivo jt400Servletjar Los navegadores no encuentran archivos gif en un archivo JAR o zip por lo que es necesario extraer estas imaacutegenes del archivo JAR y ponerse en el directorio de servidor Web adecuado (de forma predeterminada es el directorio html) Despueacutes descomente las siguientes liacuteneas de coacutedigo y especifique la ubicacioacuten correcta en estos meacutetodos set La ubicacioacuten puede ser absoluta o relativa

IBM Toolbox para Java 493

HTMLTreeElementsetExpandedGif(imagesexpandedgif)HTMLTreeElementsetCollapsedGif(imagescollapsedgif)HTMLTreeElementsetDocGif(imagesbulletgif)

Procesar la peticioacuten GET param req La peticioacuten param res La respuestapublic void doGet (HttpServletRequest req HttpServletResponse resp)

throws ServletException IOException

HttpSession session = reqgetSession(true)HTMLTree fileTree = (HTMLTree)sessiongetValue(filetree)

Si esta sesioacuten todaviacutea no tiene ninguacuten aacuterbol de archivo cree el aacuterbol inicialif (fileTree == null)

fileTree = createTree(req resp reqgetRequestURI())

Establezca la peticioacuten de servlet HTTP en HTMLTreefileTreesetHttpServletRequest(req)

respsetContentType(texthtml)

PrintWriter out = respgetWriter()outprintln(lthtmlgtn)outprintln(new HTMLMeta(Expires Mon 03 Jan 1990 130000 GMT))outprintln(ltbodygtn)

Obtenga el coacutedigo de HTMLTreeoutprintln(fileTreegetTag())

outprintln(ltbodygtn)outprintln(lthtmlgtn)outclose()

Establezca el valor de aacuterbol de la sesioacuten para que al entrar en este servlet por segunda vez se reutilice el objeto FileTreesessionputValue(filetree fileTree)

Procesar la peticioacuten POST param req La peticioacuten param res La respuestapublic void doPost (HttpServletRequest req HttpServletResponse res)

throws ServletException IOException

ressetContentType(texthtml)ServletOutputStream out = resgetOutputStream()

Este meacutetodo crearaacute el objeto HTMLTree inicialprivate HTMLTree createTree(HttpServletRequest req HttpServletResponse resp String uri)

Cree un objeto HTMLTreeHTMLTree tree = new HTMLTree(req)

try

Cree un objeto URLParserURLParser urlParser = new URLParser(uri)

494 IBM Toolbox para Java IBM Toolbox para Java

AS400 sys = new AS400(CPUStatussystemName_ javactl jteam1)

Cree un objeto de archivo (File) y establezca el directorio de IFS raiacutezIFSJavaFile root = new IFSJavaFile(sys QIBM)

Cree un filtro y liste todos los directoriosDirFilter filter = new DirFilter()File[] dirList = rootlistFiles(filter)

Obtenga la lista de archivos que se adecuan al filtro de directoriosString[] list = rootlist(filter)

File[] dirList = new File[listlength]

No queremos obligar a los servidores Web a utilizar JDK12 ya que la mayoriacutea de las JVM de servidor Web son maacutes lentas de actualizar al uacuteltimo nivel de JDK Lo maacutes eficaz para crear estos objetos de archivo es utilizar el meacutetodo listFiles(filter) de JDK12 lo que se hariacutea como se indica a continuacioacuten en lugar de utilizar el meacutetodo list(filter) y despueacutes convertir la matriz de series devuelta a la correspondiente matriz de archivos (File[]) File[] dirList = rootlistFiles(filter)

for (int j=0 jltdirListlength ++j)

if (root instanceof IFSJavaFile)dirList[j] = new IFSJavaFile((IFSJavaFile)root list[j])

elsedirList[j] = new File(list[j])

for (int i=0 iltdirListlength i++)

Cree un objeto FileTreeElement para cada directorio de la listaFileTreeElement node = new FileTreeElement(dirList[i])

Cree un objeto ServletHyperlink para los iconos de expandircontraerServletHyperlink sl = new ServletHyperlink(urlParsergetURI())slsetHttpServletResponse(resp)nodesetIconUrl(sl)

Cree un objeto ServletHyperlink para el servlet TreeList que visualizaraacute el contenido del objeto FileTreeElement (directorio)ServletHyperlink tl = new ServletHyperlink(servletTreeList)tlsetTarget(list)

Si ServletHyperlink no tiene nombre estableacutezcalo en el nombre del directorioif (tlgetText() == null)

tlsetText(dirList[i]getName())

Establezca el TextUrl para el objeto FileTreeElementnodesetTextUrl(tl)

Antildeada el objeto FileTreeElement a HTMLTreetreeaddElement(node)

catch (Exception e)

eprintStackTrace()

return tree

IBM Toolbox para Java 495

public void destroy(ServletConfig config)

No haga nada

public String getServletInfo()

return Navegacioacuten por FileTree

Ejemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrer(archivo 1 de 3)Este coacutedigo de ejemplo de IBM Toolbox para Java junto con el coacutedigo de los dos archivos de ejemploadicionales visualiza un objeto HTMLTree y un objeto FileListElement en un servlet

Los tres archivos del ejemplo sonv FileTreeExamplejava - Este archivo genera los marcos HTML y arranca el servletv TreeNavjava - Este archivo construye y gestiona el aacuterbolv TreeListjava - Este archivo visualiza el contenido de las selecciones efectuadas en la clase TreeNavjava

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este coacutedigo fuente es un ejemplo de utilizacioacuten de las clases de paquete HTML que permiten construir faacutecilmente aacuterboles de archivo y HTML

import javaioPrintWriterimport javaioIOException

import javaxservletimport javaxservlethttp

import comibmas400utilhtmlHTMLMeta

Ejemplo de coacutemo se utilizan los marcos para visualizar un HTMLTree y un FileListElement en un servlet

public class FileTreeExample extends HttpServlet

public void init(ServletConfig config)throws ServletException

superinit(config)

Procesar la peticioacuten GET param req La peticioacuten param res La respuesta

public void doGet (HttpServletRequest req HttpServletResponse resp)throws ServletException IOException

respsetContentType(texthtml)

496 IBM Toolbox para Java IBM Toolbox para Java

Defina dos marcos El primero un marco de navegacioacuten visualizaraacute el HTMLTree que contendraacute FileTreeElements y haraacute posible la navegacioacuten del sistema de archivos El segundo visualizaraacutelistaraacute el contenido de un directorio seleccionado en el marco de navegacioacutenPrintWriter out = respgetWriter()outprintln(lthtmlgtn)outprintln(new HTMLMeta(ExpiresMon 04 Jan 1990 130000 GMT))outprintln(ltframeset cols=25gt)outprintln(ltframe frameborder=5 src=servletTreeNav name=navgt)outprintln(ltframe frameborder=3 src=servletTreeList name=listgt)outprintln(ltframesetgt)outprintln(lthtmlgtn)outclose()

Procesar la peticioacuten POST param req La peticioacuten param res La respuesta

public void doPost (HttpServletRequest req HttpServletResponse res)throws ServletException IOException

ressetContentType(texthtml)ServletOutputStream out = resgetOutputStream()

public void destroy(ServletConfig config)

No haga nada

public String getServletInfo()

return Servlet FileTree

Ejemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrer(archivo 2 de 3)Este coacutedigo de ejemplo junto con el coacutedigo de los dos archivos de ejemplo adicionales visualiza unobjeto HTMLTree y un objeto FileListElement en un servlet

Los tres archivos del ejemplo sonv FileTreeExamplejava - Este archivo genera los marcos HTML y arranca el servletv TreeNavjava - Este archivo construye y gestiona el aacuterbolv TreeListjava - Este archivo visualiza el contenido de las selecciones efectuadas en la clase TreeNavjava

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este fuente es un ejemplo de coacutemo se usan las clases del paquete HTML de IBM Toolbox para Java que permiten construir faacutecilmente aacuterboles de archivo y HTML

import javaioFileimport javaioPrintWriterimport javaioIOException

import javaxservlet

IBM Toolbox para Java 497

import javaxservlethttp

import comibmas400accessAS400import comibmas400accessIFSJavaFileimport comibmas400utilhtmlHTMLMetaimport comibmas400utilhtmlHTMLTreeimport comibmas400utilhtmlHTMLTreeElementimport comibmas400utilhtmlURLParserimport comibmas400utilhtmlDirFilterimport comibmas400utilhtmlFileTreeElementimport comibmas400utilservletServletHyperlink

Ejemplo de coacutemo se usan las clases HTMLTree y FileTreeElement en un servlet

public class TreeNav extends HttpServlet

private AS400 sys_

public void init(ServletConfig config)throws ServletException

superinit(config)

Cree un objeto AS400sys_ = new AS400(mySystem myUserID myPassword)

IBM Toolbox para Java emplea un conjunto de iconos predeterminado para representar elementos expandidos contraiacutedos y documentos dentro del objeto HTMLTree Para mejorar estos iconos IBM Toolbox para Java proporciona tres archivos gif (expandedgif collapsedgif y bulletgif) en el archivo jt400Servletjar Los navegadores no encuentran archivos gif en un archivo JAR o zip por lo que es necesario extraer estas imaacutegenes del archivo JAR y colocarlas en el directorio de servidor Web adecuado (predeterminado es el directorio html) A continuacioacuten cambie las siguientes liacuteneas de coacutedigo para especificar la ubicacioacuten correcta en los meacutetodos set La ubicacioacuten puede ser absoluta o relativa

HTMLTreeElementsetExpandedGif(httpmyServerexpandedgif)HTMLTreeElementsetCollapsedGif(httpmyServercollapsedgif)HTMLTreeElementsetDocGif(httpmyServerbulletgif)

Procesar la peticioacuten GET param req La peticioacuten param res La respuesta

public void doGet (HttpServletRequest req HttpServletResponse resp)throws ServletException IOException

Utilice los datos de sesioacuten para recordar el estado del aacuterbolHttpSession session = reqgetSession(true)HTMLTree fileTree = (HTMLTree)sessiongetValue(filetree)

Si esta sesioacuten todaviacutea no tiene ninguacuten aacuterbol de archivo cree el aacuterbol inicialif (fileTree == null)

fileTree = createTree(req resp reqgetRequestURI())

Establezca la peticioacuten de servlet HTTP en HTMLTreefileTreesetHttpServletRequest(req)

respsetContentType(texthtml)

498 IBM Toolbox para Java IBM Toolbox para Java

PrintWriter out = respgetWriter()outprintln(lthtmlgtn)outprintln(new HTMLMeta(Expires Mon 03 Jan 1990 130000 GMT))outprintln(ltbodygtn)

Obtenga el coacutedigo de HTMLTreeoutprintln(fileTreegetTag())

outprintln(ltbodygtn)outprintln(lthtmlgtn)outclose()

Establezca el valor de aacuterbol de la sesioacuten para que al entrar en este servlet por segunda vez se reutilice el objeto FileTreesessionputValue(filetree fileTree)

Procesar la peticioacuten POST param req La peticioacuten param res La respuesta

public void doPost (HttpServletRequest req HttpServletResponse res)throws ServletException IOException

ressetContentType(texthtml)ServletOutputStream out = resgetOutputStream()

Este meacutetodo crearaacute el objeto HTMLTree inicial

private HTMLTree createTree(HttpServletRequest reqHttpServletResponse resp String uri)

Cree un objeto HTMLTreeHTMLTree tree = new HTMLTree(req)

try

Cree un objeto URLParserURLParser urlParser = new URLParser(uri)

Cree un objeto de archivo (File) y establezca el directorio de IFS raiacutezIFSJavaFile root = new IFSJavaFile(sys_ QIBM)

Cree un objeto filtro (Filter)DirFilter filter = new DirFilter()

Obtenga la lista de archivos que se adecuan al filtro de directoriosString[] list = rootlist(filter)

File[] dirList = new File[listlength]

No queremos obligar a los servidores Web a utilizar JDK12 ya que la mayoriacutea de las JVM de servidor Web son maacutes lentas de actualizar al uacuteltimo nivel de JDK Lo maacutes eficaz para crear estos objetos archivo es usar el meacutetodo listFiles(filter) en JDK12 lo que se hariacutea como se indica a continuacioacuten en lugar de utilizar el meacutetodo list(filter) y despueacutes convertir la matriz de tipo serie devuelta a matriz de archivos (File[]) adecuada File[] dirList = rootlistFiles(filter)

for (int j=0 jltdirListlength ++j)

IBM Toolbox para Java 499

if (root instanceof IFSJavaFile)dirList[j] = new IFSJavaFile((IFSJavaFile)root list[j])

elsedirList[j] = new File(list[j])

for (int i=0 iltdirListlength i++)

Cree un objeto FileTreeElement para cada directorio de la listaFileTreeElement node = new FileTreeElement(dirList[i])

Cree un objeto ServletHyperlink para los iconos de expandircontraerServletHyperlink sl = new ServletHyperlink(urlParsergetURI())slsetHttpServletResponse(resp)nodesetIconUrl(sl)

Cree un objeto ServletHyperlink para el servlet TreeList que visualizaraacute el contenido del objeto FileTreeElement (directorio)ServletHyperlink tl = new ServletHyperlink(servletTreeList)tlsetTarget(list)

Si ServletHyperlink no tiene nombre estableacutezcalo en el nombre del directorioif (tlgetText() == null)

tlsetText(dirList[i]getName())

Establezca el TextUrl para el objeto FileTreeElementnodesetTextUrl(tl)

Antildeada el objeto FileTreeElement a HTMLTreetreeaddElement(node)

sys_disconnectAllServices()

catch (Exception e)

eprintStackTrace()

return tree

public void destroy(ServletConfig config)

No haga nada

public String getServletInfo()

return Navegacioacuten por FileTree

Ejemplo crear un aacuterbol de sistema de archivos integrado que se pueda recorrer(archivo 3 de 3)Este coacutedigo de ejemplo junto con el coacutedigo de los dos archivos de ejemplo adicionales visualiza unobjeto HTMLTree y un objeto FileListElement en un servlet

Los tres archivos del ejemplo sonv FileTreeExamplejava - Este archivo genera los marcos HTML y arranca el servletv TreeNavjava - Este archivo construye y gestiona el aacuterbolv TreeListjava - Este archivo visualiza el contenido de las selecciones efectuadas en la clase TreeNavjava

500 IBM Toolbox para Java IBM Toolbox para Java

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este fuente es un ejemplo de coacutemo se usan las clases del paquete HTML de IBM Toolbox para Java que permiten construir faacutecilmente listas de archivos y HTML

import javaioPrintWriterimport javaioIOExceptionimport javaioFile

import comibmas400accessAS400import comibmas400accessTraceimport comibmas400accessIFSJavaFileimport comibmas400utilhtmlHTMLMetaimport comibmas400utilhtmlHTMLHeadingimport comibmas400utilhtmlHTMLConstantsimport comibmas400utilhtmlFileListElementimport comibmas400utilhtml

import javaxservletimport javaxservlethttp

Ejemplo de coacutemo se utiliza la clase FileListElement en un servletpublic class TreeList extends HttpServlet

private AS400 sys_

Procesar la peticioacuten GET param req La peticioacuten param res La respuestapublic void doGet(HttpServletRequest req HttpServletResponse resp)throws ServletException IOException

respsetContentType(texthtml)

try

PrintWriter out = respgetWriter()outprintln(lthtmlgtn)outprintln(new HTMLMeta(Expires

Mon 02 Jan 1990 130000 GMT))outprintln(ltbodygtn)

Si el paraacutemetro de viacutea de acceso no es nulo el usuario ha seleccionado un elemento en la lista FileTreeElement del marco de navegacioacutenif (reqgetPathInfo() = null)

Cree un objeto FileListElement que pase un objeto sistema AS400 y la peticioacuten de servlet HTTP La peticioacuten contendraacute la informacioacuten de viacutea de acceso necesaria para listar el contenido del objeto FileTreeElement (directorio) seleccionadoFileListElement fileList = new FileListElement(sys_ req)

Tambieacuten puede crear un objeto FileListElement a partir de un nombre de compartimiento NetServer y una viacutea de acceso de compartimiento FileListElement fileList =

new FileListElement(sys_ req TreeShare

IBM Toolbox para Java 501

QIBMProdDataHTTPPublicjt400)

Visualice el contenido de FileListElementoutprintln(fileListlist())

Visualice este HTMLHeading si no se ha seleccionado ninguacuten objeto FileTreeElementelse

HTMLHeading heading = newHTMLHeading(1Ejemplo de lista de archivos HTML)

headingsetAlign(HTMLConstantsCENTER)

outprintln(headinggetTag())

outprintln(ltbodygtn)outprintln(lthtmlgtn)outclose()

catch (Exception e)

eprintStackTrace()

Procesar la peticioacuten POST param req La peticioacuten param res La respuesta

public void doPost (HttpServletRequest req HttpServletResponse res)throws ServletException IOException

ressetContentType(texthtml)ServletOutputStream out = resgetOutputStream()

public void init(ServletConfig config)throws ServletException

superinit(config)

Cree un objeto AS400sys_ = new AS400(mySystem myUID myPWD)

Ejemplo coacutemo se utilizan las clases HTMLTableEl ejemplo que figura a continuacioacuten muestra coacutemo funcionan las clases HTMLTable

Cree un objeto HTMLTable predeterminadoHTMLTable table = new HTMLTable()

Establezca los atributos de la tablatablesetAlignment(HTMLTableCENTER)tablesetBorderWidth(1)

Cree un objeto HTMLTableCaption predeterminado y establezca el texto del pie de tablaHTMLTableCaption caption = new HTMLTableCaption()

captionsetElement(Saldos de cuenta de cliente - 1 de enero de 2000)

Establezca el pie de tablatablesetCaption(caption)

502 IBM Toolbox para Java IBM Toolbox para Java

Cree las cabeceras de la tabla y antildeaacutedalas a la mismaHTMLTableHeader account_header = new HTMLTableHeader(new HTMLText(CUENTA))HTMLTableHeader name_header = new HTMLTableHeader(new HTMLText(NOMBRE))HTMLTableHeader balance_header = new HTMLTableHeader(new HTMLText(SALDO))

tableaddColumnHeader(account_header)tableaddColumnHeader(name_header)tableaddColumnHeader(balance_header)

Antildeada filas a la tabla Cada registro de cliente corresponde a una fila de la tablaint numCols = 3for (int rowIndex=0 rowIndexlt numCustomers rowIndex++)

HTMLTableRow row = new HTMLTableRow()rowsetHorizontalAlignment(HTMLTableRowCENTER)

HTMLText account = new HTMLText(customers[rowIndex]getAccount())HTMLText name = new HTMLText(customers[rowIndex]getName())HTMLText balance = new HTMLText(customers[rowIndex]getBalance())

rowaddColumn(new HTMLTableCell(account))rowaddColumn(new HTMLTableCell(name))rowaddColumn(new HTMLTableCell(balance))

Antildeada la fila a la tablatableaddRow(row)

Systemoutprintln(tablegetTag())

El ejemplo de coacutedigo Java anterior genera el siguiente coacutedigo HTMLlttable align=center border=1gtltcaptiongtSaldos de cuenta de cliente - 1 de enero de 2000ltcaptiongtlttrgtltthgtACCOUNTltthgtltthgtNAMEltthgtltthgtBALANCEltthgtlttrgtlttr align=centergtlttdgt0000001lttdgtlttdgtCustomer1lttdgtlttdgt10000lttdgtlttrgtlttr align=centergtlttdgt0000002lttdgtlttdgtCustomer2lttdgtlttdgt20000lttdgtlttrgtlttr align=centergtlttdgt0000003lttdgtlttdgtCustomer3lttdgtlttdgt55000lttdgtlttrgtlttablegt

La tabla que hay a continuacioacuten muestra coacutemo se visualiza el coacutedigo HTML anterior en un navegadorWeb

Tabla 3 Saldos de cuenta de cliente - 1 de enero de 2000

CUENTA NOMBRE SALDO

0000001 Cliente1 10000

0000002 Cliente2 20000

0000003 Cliente3 55000

IBM Toolbox para Java 503

Ejemplos PCML (Program Call Markup Language)Los ejemplos siguientes utilizan PCML para llamar a interfaces API de IBM i y cada uno enlaza con unapaacutegina que muestra el fuente PCML seguido de un programa Java

Nota la autorizacioacuten adecuada variacutea en cada uno de los ejemplos pero puede incluir determinadasautorizaciones sobre objeto y autorizaciones especiales Para ejecutar estos ejemplos debe iniciar la sesioacutencon un perfil de usuario que posea la autorizacioacuten adecuada para llevar a cabo las acciones siguientesv Llamar a la API de IBM i que se indica en el ejemplov Acceder a la informacioacuten que se solicita

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo ejemplo simple de recuperacioacuten de datosEste ejemplo simple muestra el fuente PCML y el programa Java necesarios para recuperar informacioacutenacerca de un perfil de usuario del servidor La API a la que se llama es la API Recuperar informacioacuten deusuario (QSYRUSRI)

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Este ejemplo simple consta de dos partesv Coacutedigo fuente PCML para llamar a QSYRUSRIv Coacutedigo fuente de programa Java para llamar a QSYRUSRI

Coacutedigo fuente PCML para llamar a QSYRUSRIltpcml version=10gt

lt-- Fuente PCML para llamar a la API Recuperar informacioacuten de usuario (QSYRUSRI) --gt

lt-- Formato USRI0150 - Hay otros formatos disponibles --gtltstruct name=usri0100gt

ltdata name=bytesReturned type=int length=4 usage=outputgtltdata name=bytesAvailable type=int length=4 usage=outputgtltdata name=userProfile type=char length=10 usage=outputgtltdata name=previousSignonDate type=char length=7 usage=outputgtltdata name=previousSignonTime type=char length=6 usage=outputgtltdata type=byte length=1 usage=outputgtltdata name=badSignonAttempts type=int length=4 usage=outputgtltdata name=status type=char length=10 usage=outputgtltdata name=passwordChangeDate type=byte length=8 usage=outputgtltdata name=noPassword type=char length=1 usage=outputgtltdata type=byte length=1 usage=outputgt

504 IBM Toolbox para Java IBM Toolbox para Java

ltdata name=passwordExpirationInterval type=int length=4 usage=outputgtltdata name=datePasswordExpires type=byte length=8 usage=outputgtltdata name=daysUntilPasswordExpires type=int length=4 usage=outputgtltdata name=setPasswordToExpire type=char length=1 usage=outputgtltdata name=displaySignonInfo type=char length=10 usage=outputgt

ltstructgt

lt-- Programa QSYRUSRI y su lista de paraacutemetros para recuperar el formato USRI0100 --gtltprogram name=qsyrusri path=QSYSlibQSYRUSRIpgmgt

ltdata name=receiver type=struct struct=usri0100 usage=outputgtltdata name=receiverLength type=int length=4 usage=input gtltdata name=format type=char length=8 usage=input init=USRI0100gtltdata name=profileName type=char length=10 usage=input init=CURRENTgtltdata name=errorCode type=int length=4 usage=input init=0gt

ltprogramgt

ltpcmlgt

Coacutedigo fuente de programa Java para llamar a QSYRUSRIimport comibmas400dataProgramCallDocumentimport comibmas400dataPcmlExceptionimport comibmas400accessAS400import comibmas400accessAS400Message

Programa de ejemplo para llamar a la API Recuperar informacioacuten de usuario (QSYRUSRI)public class qsyrusri

public qsyrusri()

public static void main(String[] argv)

AS400 as400System comibmas400accessAS400ProgramCallDocument pcml comibmas400dataProgramCallDocumentboolean rc = false Coacutedigo de retorno de ProgramCallDocumentcallProgram()String msgId msgText Mensajes devueltos desde el servidorObject value Valor de retorno de ProgramCallDocumentgetValue()

SystemsetErr(Systemout)

Construya AS400 sin paraacutemetros se solicitaraacuten al usuarioas400System = new AS400()

try

Quite la marca de comentario de la liacutenea siguiente para obtener informacioacuten de depuracioacutencomibmas400dataPcmlMessageLogsetTraceEnabled(true)

Systemoutprintln(Estaacute empezando el ejemplo PCML)Systemoutprintln( Se estaacute construyendo ProgramCallDocument para la API QSYRUSRI)

Construya ProgramCallDocument El primer paraacutemetro es el sistema al que se va a conectar El segundo paraacutemetro es el nombre del recurso PCML En este ejemplo el archivo PCML serializado qsyrusripcmlser o el archivo fuente PCML qsyrusripcml debe estar en la viacutea de acceso de clasespcml = new ProgramCallDocument(as400System qsyrusri)

Establezca paraacutemetros de entrada Varios paraacutemetros tienen valores predeterminados especificados en el fuente PCML No es necesario establecerlos mediante coacutedigo JavaSystemoutprintln( Se estaacuten estableciendo paraacutemetros de entrada)pcmlsetValue(qsyrusrireceiverLength

new Integer((pcmlgetOutputsize(qsyrusrireceiver))))

Peticioacuten para llamar a la API Se solicitaraacute al usuario que inicie la sesioacuten en el sistema

IBM Toolbox para Java 505

Systemoutprintln( Llamando a la API QSYRUSRI para pedir informacioacutendel usuario de inicio de sesioacuten)

rc = pcmlcallProgram(qsyrusri)

Si el coacutedigo de retorno es false se han recibido mensajes del servidorif(rc == false)

Recupere la lista de mensajes del servidorAS400Message[] msgs = pcmlgetMessageList(qsyrusri)

Itere a traveacutes de los mensajes y escriacutebalos en la salida estaacutendarfor (int m = 0 m lt msgslength m++)

msgId = msgs[m]getID()msgText = msgs[m]getText()Systemoutprintln( + msgId + - + msgText)

Systemoutprintln( Ha fallado la llamada a QSYRUSRI Vea los mensajes anteriores )Systemexit (0)

Si el coacutedigo de retorno ha sido true la llamada a QSYRUSRI ha sido satisfactoria Escriba parte de los resultados en la salida estaacutendarelse

value = pcmlgetValue(qsyrusrireceiverbytesReturned)Systemoutprintln( Bytes devueltos + value)value = pcmlgetValue(qsyrusrireceiverbytesAvailable)Systemoutprintln( Bytes disponibles + value)value = pcmlgetValue(qsyrusrireceiveruserProfile)Systemoutprintln( Nombre de perfil + value)value = pcmlgetValue(qsyrusrireceiverpreviousSignonDate)Systemoutprintln( Fecha de inicio de sesioacuten anterior + value)value = pcmlgetValue(qsyrusrireceiverpreviousSignonTime)Systemoutprintln( Hora de inicio de sesioacuten anterior + value)

catch (PcmlException e)

Systemoutprintln(egetLocalizedMessage())eprintStackTrace()Systemoutprintln( Ha fallado la llamada a QSYRUSRI )Systemexit (0)

Systemexit (0) Fin de main()

Ejemplo recuperar una lista de informacioacutenEste ejemplo muestra el coacutedigo fuente PCML y el programa Java necesarios para recuperar una lista deusuarios autorizados en un servidor La API a la que se llama es la API Abrir lista de usuariosautorizados (QGYOLAUS) Este ejemplo muestra coacutemo se accede a una matriz de estructuras devueltapor un programa del servidor

Este ejemplo consta de dos partesv Coacutedigo fuente PCML para llamar a QGYOLAUSv Coacutedigo fuente de programa Java para llamar a QGYOLAUS

Coacutedigo fuente PCML para llamar a QGYOLAUSltpcml version=10gt

lt-- Fuente PCML para llamar a la API Abrir lista de usuarios autorizados (QGYOLAUS) --gt

506 IBM Toolbox para Java IBM Toolbox para Java

lt-- Formato AUTU0150 - Hay otros formatos disponibles --gtltstruct name=autu0150gt

ltdata name=name type=char length=10 gtltdata name=userOrGroup type=char length=1 gtltdata name=groupMembers type=char length=1 gtltdata name=description type=char length=50 gt

ltstructgt

lt-- Estructura para listar informacioacuten (comuacuten a todas las API de tipo Abrir lista) --gtltstruct name=listInfogt

ltdata name=totalRcds type=int length=4 gtltdata name=rcdsReturned type=int length=4 gtltdata name=rqsHandle type=byte length=4 gtltdata name=rcdLength type=int length=4 gtltdata name=infoComplete type=char length=1 gtltdata name=dateCreated type=char length=7 gtltdata name=timeCreated type=char length=6 gtltdata name=listStatus type=char length=1 gtltdata type=byte length=1 gtltdata name=lengthOfInfo type=int length=4 gtltdata name=firstRecord type=int length=4 gtltdata type=byte length=40 gt

ltstructgt

lt-- Programa QGYOLAUS y su lista de paraacutemetros para recuperar el formato AUTU0150 --gtltprogram name=qgyolaus path=QSYSlibQGYlibQGYOLAUSpgm parseorder=listInfo receivergt

ltdata name=receiver type=struct struct=autu0150 usage=outputcount=listInforcdsReturned outputsize=receiverLength gt

ltdata name=receiverLength type=int length=4 usage=input init=16384 gtltdata name=listInfo type=struct struct=listInfo usage=output gtltdata name=rcdsToReturn type=int length=4 usage=input init=264 gtltdata name=format type=char length=10 usage=input init=AUTU0150 gtltdata name=selection type=char length=10 usage=input init=USER gtltdata name=member type=char length=10 usage=input init=NONE gtltdata name=errorCode type=int length=4 usage=input init=0 gt

ltprogramgt

lt-- El programa QGYGTLE ha devuelto registros adicionales de la listacreada por QGYOLAUS --gt

ltprogram name=qgygtle path=QSYSlibQGYlibQGYGTLEpgm parseorder=listInfo receivergtltdata name=receiver type=struct struct=autu0150 usage=output

count=listInforcdsReturned outputsize=receiverLength gtltdata name=receiverLength type=int length=4 usage=input init=16384 gtltdata name=requestHandle type=byte length=4 usage=input gtltdata name=listInfo type=struct struct=listInfo usage=output gtltdata name=rcdsToReturn type=int length=4 usage=input init=264 gtltdata name=startingRcd type=int length=4 usage=input gtltdata name=errorCode type=int length=4 usage=input init=0 gt

ltprogramgt

lt-- El programa QGYCLST cierra la lista liberando recursos en el servidor --gtltprogram name=qgyclst path=QSYSlibQGYlibQGYCLSTpgm gt

ltdata name=requestHandle type=byte length=4 usage=input gtltdata name=errorCode type=int length=4 usage=input init=0 gt

ltprogramgtltpcmlgt

Coacutedigo fuente de programa Java para llamar a QGYOLAUSimport comibmas400dataProgramCallDocumentimport comibmas400dataPcmlExceptionimport comibmas400accessAS400import comibmas400accessAS400Message

Programa de ejemplo para llamar a la API Recuperar lista de usuarios autorizados (QGYOLAUS)public class qgyolaus

IBM Toolbox para Java 507

public static void main(String[] argv)

AS400 as400System comibmas400accessAS400ProgramCallDocument pcml comibmas400dataProgramCallDocumentboolean rc = false Coacutedigo de retorno de ProgramCallDocumentcallProgram()String msgId msgText Mensajes devueltos desde el servidorObject value Valor de retorno de ProgramCallDocumentgetValue()

int[] indices = new int[1] Iacutendices para acceder al valor de la matrizint nbrRcds Nuacutemero de registros devueltos desde QGYOLAUS y QGYGTLE

nbrUsers Nuacutemero total de usuarios recuperadosString listStatus Estado de la lista en el servidorbyte[] requestHandle = new byte[4]

SystemsetErr(Systemout)

Construya AS400 sin paraacutemetros se solicitaraacuten al usuarioas400System = new AS400()

try

Quite la marca de comentario de la liacutenea siguiente para obtener informacioacuten de depuracioacutencomibmas400dataPcmlMessageLogsetTraceEnabled(true)

Systemoutprintln(Estaacute empezando el ejemplo PCML)Systemoutprintln( Se estaacute construyendo ProgramCallDocument para la API QGYOLAUS)

Construya ProgramCallDocument El primer paraacutemetro es el sistema al que se va a conectar El segundo paraacutemetro es el nombre del recurso PCML En este ejemplo el archivo PCML serializado qgyolauspcmlser o el archivo fuente PCML qgyolauspcml debe estar en la viacutea de acceso de clasespcml = new ProgramCallDocument(as400System qgyolaus)

Todos los paraacutemetros de entrada tienen valores predeterminados especificados en el fuente PCML No es necesario establecerlos mediante coacutedigo Java

Peticioacuten para llamar a la API Se solicitaraacute al usuario que inicie la sesioacuten en el sistemaSystemoutprintln( Llamando a la API QGYOLAUS para solicitar informacioacuten

del usuario de inicio de sesioacuten)rc = pcmlcallProgram(qgyolaus)

Si el coacutedigo de retorno es false se han recibido mensajes del servidorif(rc == false)

Recupere la lista de mensajes del servidorAS400Message[] msgs = pcmlgetMessageList(qgyolaus)

Itere a traveacutes de los mensajes y escriacutebalos en la salida estaacutendarfor (int m = 0 m lt msgslength m++)

msgId = msgs[m]getID()msgText = msgs[m]getText()Systemoutprintln( + msgId + - + msgText)

Systemoutprintln( Ha fallado la llamada a QGYOLAUS Vea los mensajes anteriores )Systemexit (0)

Si el coacutedigo de retorno ha sido true la llamada a QGYOLAUS ha sido satisfactoria Escriba parte de los resultados en la salida estaacutendarelse

boolean doneProcessingList = falseString programName = qgyolaus

508 IBM Toolbox para Java IBM Toolbox para Java

nbrUsers = 0while (doneProcessingList)

nbrRcds = pcmlgetIntValue(programName + listInforcdsReturned)requestHandle = (byte[]) pcmlgetValue(programName + listInforqsHandle)

Itere a traveacutes de la lista de usuariosfor (indices[0] = 0 indices[0] lt nbrRcds indices[0]++)

value = pcmlgetValue(programName + receivername indices)Systemoutprintln(Usuario + value)

value = pcmlgetValue(programName + receiverdescription indices)Systemoutprintln(tt + value)

nbrUsers += nbrRcds

Compruebe si se han recuperado todos los usuarios Si no seraacute necesario hacer nuevas llamadas a Obtener entradas de lista (QGYGTLE) para recuperar los demaacutes usuarios de la listalistStatus = (String) pcmlgetValue(programName + listInfolistStatus)if ( listStatusequals(2) La lista estaacute marcada como Completa

|| listStatusequals(3) ) O la lista estaacute marcada como Error al construir

doneProcessingList = trueelse

programName = qgygtle

Establezca los paraacutemetros de entrada para QGYGTLEpcmlsetValue(qgygtlerequestHandle requestHandle)pcmlsetIntValue(qgygtlestartingRcd nbrUsers + 1)

Llame a Obtener entradas de lista (QGYGTLE) para obtener maacutes usuarios de la listarc = pcmlcallProgram(qgygtle)

Si el coacutedigo de retorno es false se han recibido mensajes del servidorif(rc == false)

Recupere la lista de mensajes del servidorAS400Message[] msgs = pcmlgetMessageList(qgygtle)

Itere a traveacutes de los mensajes y escriacutebalos en la salida estaacutendarfor (int m = 0 m lt msgslength m++)

msgId = msgs[m]getID()msgText = msgs[m]getText()Systemoutprintln( + msgId + - + msgText)

Systemoutprintln( Ha fallado la llamada a QGYGTLE Vea los mensajes anteriores )Systemexit (0)

Si el coacutedigo de retorno ha sido true la llamada a QGYGTLE ha sido satisfactoria

Systemoutprintln(Nuacutemero de usuarios devueltos + nbrUsers)

Llame a la API Cerrar lista (QGYCLST)pcmlsetValue(qgyclstrequestHandle requestHandle)rc = pcmlcallProgram(qgyclst)

catch(PcmlException e)

IBM Toolbox para Java 509

Systemoutprintln(egetLocalizedMessage())eprintStackTrace()Systemoutprintln( Ha fallado la llamada a QGYOLAUS )Systemexit (0)

Systemexit (0)

Ejemplo recuperar datos multidimensionalesEste ejemplo muestra el fuente PCML y el programa Java necesarios para recuperar una lista deexportaciones NFS (sistema de archivos de red) de un servidor La API a la que se llama es la APIRecuperar exportaciones NFS (QZNFRTVE) Este ejemplo muestra coacutemo se accede a matrices deestructuras dentro de una matriz de estructuras

Este ejemplo consta de dos partesv Coacutedigo fuente PCML para llamar a QZNFRTVEv Coacutedigo fuente de programa Java para llamar a QZNFRTVE

Fuente PCML para llamar a QZNFRTVEltpcml version=10gt

ltstruct name=receivergtltdata name=lengthOfEntry type=int length=4 gtltdata name=dispToObjectPathName type=int length=4 gtltdata name=lengthOfObjectPathName type=int length=4 gtltdata name=ccsidOfObjectPathName type=int length=4 gtltdata name=readOnlyFlag type=int length=4 gtltdata name=nosuidFlag type=int length=4 gtltdata name=dispToReadWriteHostNames type=int length=4 gtltdata name=nbrOfReadWriteHostNames type=int length=4 gtltdata name=dispToRootHostNames type=int length=4 gtltdata name=nbrOfRootHostNames type=int length=4 gtltdata name=dispToAccessHostNames type=int length=4 gtltdata name=nbrOfAccessHostNames type=int length=4 gtltdata name=dispToHostOptions type=int length=4 gtltdata name=nbrOfHostOptions type=int length=4 gtltdata name=anonUserID type=int length=4 gtltdata name=anonUsrPrf type=char length=10 gtltdata name=pathName type=char length=lengthOfObjectPathName

offset=dispToObjectPathName offsetfrom=receiver gt

ltstruct name=rwAccessList count=nbrOfReadWriteHostNamesoffset=dispToReadWriteHostNames offsetfrom=receivergt

ltdata name=lengthOfEntry type=int length=4 gtltdata name=lengthOfHostName type=int length=4 gtltdata name=hostName type=char length=lengthOfHostName gtltdata type=byte length=0

offset=lengthOfEntry gtltstructgt

ltstruct name=rootAccessList count=nbrOfRootHostNamesoffset=dispToRootHostNames offsetfrom=receivergt

ltdata name=lengthOfEntry type=int length=4 gtltdata name=lengthOfHostName type=int length=4 gtltdata name=hostName type=char length=lengthOfHostName gtltdata type=byte length=0

offset=lengthOfEntry gtltstructgt

ltstruct name=accessHostNames count=nbrOfAccessHostNamesoffset=dispToAccessHostNames offsetfrom=receiver gt

ltdata name=lengthOfEntry type=int length=4 gt

510 IBM Toolbox para Java IBM Toolbox para Java

ltdata name=lengthOfHostName type=int length=4 gtltdata name=hostName type=char length=lengthOfHostName gtltdata type=byte length=0

offset=lengthOfEntry gtltstructgt

ltstruct name=hostOptions offset=dispToHostOptions offsetfrom=receiver count=nbrOfHostOptionsgtltdata name=lengthOfEntry type=int length=4 gtltdata name=dataFileCodepage type=int length=4 gtltdata name=pathNameCodepage type=int length=4 gtltdata name=writeModeFlag type=int length=4 gtltdata name=lengthOfHostName type=int length=4 gtltdata name=hostName type=char length=lengthOfHostName gtltdata type=byte length=0 offset=lengthOfEntry gt

ltstructgt

ltdata type=byte length=0 offset=lengthOfEntry gtltstructgt

ltstruct name=returnedRcdsFdbkInfogtltdata name=bytesReturned type=int length=4 gtltdata name=bytesAvailable type=int length=4 gtltdata name=nbrOfNFSExportEntries type=int length=4 gtltdata name=handle type=int length=4 gt

ltstructgt

ltprogram name=qznfrtve path=QSYSlibQZNFRTVEpgm parseorder=returnedRcdsFdbkInfo receiver gtltdata name=receiver type=struct struct=receiver usage=output

count=returnedRcdsFdbkInfonbrOfNFSExportEntries outputsize=receiverLengthgtltdata name=receiverLength type=int length=4 usage=input init=4096 gtltdata name=returnedRcdsFdbkInfo type=struct struct=returnedRcdsFdbkInfo usage=output gtltdata name=formatName type=char length=8 usage=input init=EXPE0100 gtltdata name=objectPathName type=char length=lengthObjPathName usage=input init=FIRST gtltdata name=lengthObjPathName type=int length=4 usage=input init=6 gtltdata name=ccsidObjectPathName type=int length=4 usage=input init=0 gtltdata name=desiredCCSID type=int length=4 usage=input init=0 gtltdata name=handle type=int length=4 usage=input init=0 gtltdata name=errorCode type=int length=4 usage=input init=0 gt

ltprogramgt

ltpcmlgt

Coacutedigo fuente de programa Java para llamar a QZNFRTVEimport comibmas400dataProgramCallDocumentimport comibmas400dataPcmlExceptionimport comibmas400accessAS400import comibmas400accessAS400Message

Programa de ejemplo para llamar a la API Recuperar exportaciones NFS (QZNFRTVE)public class qznfrtve

public static void main(String[] argv)

AS400 as400System comibmas400accessAS400ProgramCallDocument pcml comibmas400dataProgramCallDocumentboolean rc = false Coacutedigo de retorno de ProgramCallDocumentcallProgram()String msgId msgText Mensajes devueltos desde el servidorObject value Valor de retorno de ProgramCallDocumentgetValue()

SystemsetErr(Systemout)

Construya AS400 sin paraacutemetros se solicitaraacuten al usuarioas400System = new AS400()

int[] indices = new int[2] Iacutendices para acceder al valor de la matrizint nbrExports Nuacutemero de exportaciones devueltas

IBM Toolbox para Java 511

int nbrOfReadWriteHostNames nbrOfRWHostNames nbrOfRootHostNamesnbrOfAccessHostnames nbrOfHostOpts

try

Quite la marca de comentario de la liacutenea siguiente para obtener informacioacuten de depuracioacuten comibmas400dataPcmlMessageLogsetTraceEnabled(true)

Systemoutprintln(Estaacute empezando el ejemplo PCML)Systemoutprintln( Se estaacute construyendo ProgramCallDocument para la API QZNFRTVE)

Construya ProgramCallDocument El primer paraacutemetro es el sistema al que se va a conectar El segundo paraacutemetro es el nombre del recurso PCML En este ejemplo el archivo PCML serializado qznfrtvepcmlser o el archivo fuente PCML qznfrtvepcml debe estar en la viacutea de acceso de clasespcml = new ProgramCallDocument(as400System qznfrtve)

Establezca paraacutemetros de entrada Varios paraacutemetros tienen valores predeterminados especificados en el fuente PCML No es necesario establecerlos mediante coacutedigo JavaSystemoutprintln( Se estaacuten estableciendo paraacutemetros de entrada)pcmlsetValue(qznfrtvereceiverLength new Integer( ( pcmlgetOutputsize(qznfrtvereceiver))))

Peticioacuten para llamar a la API Se solicitaraacute al usuario que inicie la sesioacuten en el sistemaSystemoutprintln( Se estaacute llamando a la API QZNFRTVE que solicita exportaciones NFS)rc = pcmlcallProgram(qznfrtve)

if (rc == false)

Recupere la lista de mensajes del servidorAS400Message[] msgs = pcmlgetMessageList(qznfrtve)

Itere a traveacutes de los mensajes y escriacutebalos en la salida estaacutendarfor (int m = 0 m lt msgslength m++)

msgId = msgs[m]getID()msgText = msgs[m]getText()Systemoutprintln( + msgId + - + msgText)

Systemoutprintln( Ha fallado la llamada a QZNFRTVE Vea los mensajes anteriores )Systemexit (0)

El coacutedigo de retorno ha sido true la llamada a QZNFRTVE ha sido satisfactoria Escriba parte de los resultados en la salida estaacutendarelse

nbrExports = pcmlgetIntValue(qznfrtvereturnedRcdsFdbkInfonbrOfNFSExportEntries) Itere a traveacutes de la lista de exportacionesfor (indices[0] = 0 indices[0] lt nbrExports indices[0]++)

value = pcmlgetValue(qznfrtvereceiverpathName indices)Systemoutprintln(Nombre de viacutea = + value)

Itere y escriba Nombres de host de lecturaescritura para esta exportacioacutennbrOfReadWriteHostNames = pcmlgetIntValue(qznfrtvereceivernbrOfReadWriteHostNames

indices)for(indices[1] = 0 indices[1] lt nbrOfReadWriteHostNames indices[1]++)

value = pcmlgetValue(qznfrtvereceiverrwAccessListhostName indices)Systemoutprintln( Nombre de host de acceso

de lecturaescritura = + value)

Itere y escriba Nombres de host root para esta exportacioacutennbrOfRootHostNames = pcmlgetIntValue(qznfrtvereceivernbrOfRootHostNames indices)for(indices[1] = 0 indices[1] lt nbrOfRootHostNames indices[1]++)

512 IBM Toolbox para Java IBM Toolbox para Java

value = pcmlgetValue(qznfrtvereceiverrootAccessListhostName indices)Systemoutprintln( Nombre de host de acceso root = + value)

Itere y escriba Nombres de host de acceso para esta exportacioacutennbrOfAccessHostnames = pcmlgetIntValue(qznfrtvereceivernbrOfAccessHostNames

indices)for(indices[1] = 0 indices[1] lt nbrOfAccessHostnames indices[1]++)

value = pcmlgetValue(qznfrtvereceiveraccessHostNameshostName indices)Systemoutprintln( Nombre de host de acceso = + value)

Itere y escriba Opciones de host para esta exportacioacutennbrOfHostOpts = pcmlgetIntValue(qznfrtvereceivernbrOfHostOptions indices)for(indices[1] = 0 indices[1] lt nbrOfHostOpts indices[1]++)

Systemoutprintln( Opciones de host)value = pcmlgetValue(qznfrtvereceiverhostOptionsdataFileCodepage indices)Systemoutprintln( Paacutegina de coacutedigos de archivo de datos = + value)value = pcmlgetValue(qznfrtvereceiverhostOptionspathNameCodepage indices)Systemoutprintln( Paacutegina de coacutedigos de nombre de viacutea de acceso = + value)value = pcmlgetValue(qznfrtvereceiverhostOptionswriteModeFlag indices)Systemoutprintln( Distintivo de modalidad de escritura = + value)value = pcmlgetValue(qznfrtvereceiverhostOptionshostName indices)Systemoutprintln( Nombre de host = + value)

Fin de iteracioacuten en bucle por la lista de exportaciones

El fin de llamada a QZNFRTVE ha sido satisfactoriocatch(PcmlException e)

Systemoutprintln(egetLocalizedMessage())eprintStackTrace()Systemexit(-1)

Systemexit (0) Fin de main()

Ejemplos clases ReportWriterEn esta seccioacuten figura una lista de los ejemplos de coacutedigo que se proporcionan en la documentacioacuten delas clases ReportWriter de IBM Toolbox para Java

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

IBM Toolbox para Java 513

Ejemplo coacutemo se utiliza JSPReportProcessor con PDFContextEste ejemplo utiliza las clases JSPReportProcessor y PDFContext para obtener datos de un URLespecificado y convertir los datos a formato PDF Despueacutes los datos se convierten en un documento PDF

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante

Para ver el contenido de un archivo fuente JSP de ejemplo que puede emplear con JSPRunReportconsulte JSPcust_tablejsp Tambieacuten puede bajar un archivo zip con el archivo de ejemplo JSP El archivozip tambieacuten contiene los archivos de ejemplo XML y XSL que puede utilizar con el ejemplo deXSLReportProcessor (PCLRunReport) El ejemplo siguiente (JSPRunReport) utiliza las clases JSPReportProcessor y PDFContext para obtener datos de un URL especificado y convertir los datos al formato PDF Despueacutes los datos se convierten en un documento PDF Sintaxis del mandato java JSPRunReport ltUrl_jspgt ltnombre_archivo_salidagt

import javalangimport javaawtimport javaioimport javanetimport javaawtprintimport javaawteventimport javautilLinkedListimport javautilListIteratorimport javautilHashMap

import comibmxslcomposerfloimport comibmxslcomposerareasimport comibmxslcomposerframeworkimport comibmxslcomposerjava2dimport comibmxslcomposerprimimport comibmxslcomposerpropertiesimport comibmas400utilreportwriterprocessorimport comibmas400utilreportwriterpdfwriterimport javaioIOExceptionimport javaioSerializableimport orgxmlsaxSAXException

public class JSPRunReport

public static void main(String args[])

FileOutputStream fileout = null

Especifique el URL que contiene los datos que desea utilizar en el informe String JSPurl = args[0]URL jspurl = nulltry

jspurl = new URL(JSPurl)catch (MalformedURLException e)

Obtenga el nombre de archivo PDF de salida String filename = args[1]

514 IBM Toolbox para Java IBM Toolbox para Java

try fileout = new FileOutputStream(filename)catch (FileNotFoundException e)

Configure el formato de paacutegina Paper paper = new Paper()papersetSize(612792)papersetImageableArea(18 18 576 756)PageFormat pf = new PageFormat()pfsetPaper(paper)

Cree un objeto PDFContext y convierta FileOutputStream como OutputStream PDFContext pdfcontext = new PDFContext((OutputStream)fileout pf)

Systemoutprintln( Preparado para analizar documento XSL )

Cree el objeto JSPReportProcessor y establezca la plantilla en el JSP especificado JSPReportProcessor jspprocessor = new JSPReportProcessor(pdfcontext)try jspprocessorsetTemplate(jspurl)

catch (NullPointerException np)String mes = npgetMessage()Systemoutprintln(mes)Systemexit (0)

Procese el informe try jspprocessorprocessReport()catch (IOException e)

String mes = egetMessage()Systemoutprintln(mes)Systemexit (0)

catch (SAXException se) String mes = segetMessage()Systemoutprintln(mes)Systemexit (0)

Systemexit (0)

Ejemplo archivo JSP de ejemplo de JSPReportProcessorUtilice este archivo de ejemplo con el tema Ejemplo utilizacioacuten de JSPReportProcessor con PDFContext

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteltxml version=10gt

lt--Copyright (c) 1999 The Apache Software Foundation Reservados todos los derechos

--gt

lt page session=falsegtlt page language=java contentType=texthtml gtlt page import=javalang gtlt page import=javautil gt

IBM Toolbox para Java 515

lt-- ltjspuseBean id=rsquocust_tablersquo scope=rsquopagersquo class=rsquotableJSPcust_tablersquogt --gt

ltString[][] cust_data = new String [4][5]

public void jspInit()

cust_record_field [][] cust_data cust_record incluye el nombre la direccioacuten la ciudad la regioacuten administrativa y el coacutedigo postal del cliente

String [] cust_record_1 = IBM3602 4th StRochesterMn55901String [] cust_record_2 = HP400 2ndSpringfieldMo33559String [] cust_record_3 = Wolzack34 Hwy 52NLansingOr67895String [] cust_record_4 = Siems343 60thSalemTx12345

cust_data[0] = cust_record_1cust_data[1] = cust_record_2cust_data[2] = cust_record_3cust_data[3] = cust_record_4

gt

lt-- Primera prueba de anaacutelisis y composicioacuten --gtltforoot xmlnsfo=httpwwww3org1999XSLFormatgt

ltfolayout-master-setgtltfosimple-page-master master-name=theMaster gtltforegion-body region-name=theRegion margin-left=2ingtltfosimple-page-mastergtltfopage-sequence-master master-name=theMastergtltfosingle-page-master-reference master-name=thePagegtltfopage-sequence-mastergt

ltfolayout-master-setgtltfopage-sequence master-name=theMastergtltfoflow flow-name=theRegiongt

ltfoblockgtltfoblock text-align=centergt NORCAP ltfoblockgtltfoblock space-before=2in text-align=centergtPAN PACIFIC HOTEL IN SAN FRANCISCO ltfoblockgtltfoblock text-align=centergt FRIDAY DECEMBER 8-9 2000 ltfoblockgt

ltfoblockgtltfoblock space-before=5in font-size=8ptgtltfotable table-layout=fixedgt

ltfotable-column column-width=3ingtltfotable-column column-width=3ingtltfotable-column column-width=3ingtltfotable-column column-width=3ingtltfotable-column column-width=3ingtltfotable-bodygt

ltfotable-rowgtltfotable-cell column-number=1gt

ltfoblock border-bottom-style=solidgtNAMEltfoblockgtltfotable-cellgtltfotable-cell column-number=2gt

ltfoblock border-bottom-style=solidgtADDRESSltfoblockgtltfotable-cellgtltfotable-cell column-number=3gt

ltfoblock border-bottom-style=solidgtCITYltfoblockgtltfotable-cellgtltfotable-cell column-number=4gt

ltfoblock border-bottom-style=solidgtSTATEltfoblockgtltfotable-cellgtltfotable-cell column-number=5gt

ltfoblock border-bottom-style=solidgtZIP CODEltfoblockgtltfotable-cellgt

ltfotable-rowgt

516 IBM Toolbox para Java IBM Toolbox para Java

lt Antildeada fila a tablafor(int i = 0 i lt= 3 i++)

String[] _array = cust_data[i]gt

ltfotable-rowgtltfotable-cell column-number=1gt

ltfoblock space-before=1ingtlt if(_array[0]equals(IBM)) gt

ltfoinline background-color=bluegtlt outprint(_array[0]) gtltfoinlinegt

lt else gtlt outprint(_array[0]) gt

lt gtltfoblockgt

ltfotable-cellgtltfotable-cell column-number=2gt

ltfoblock space-before=1ingtlt outprint(_array[1]) gt

ltfoblockgtltfotable-cellgtltfotable-cell column-number=3gt

ltfoblock space-before=1ingtlt outprint(_array[2]) gt

ltfoblockgtltfotable-cellgtltfotable-cell column-number=4gt

ltfoblock space-before=1ingtlt outprint(_array[3]) gt

ltfoblockgtltfotable-cellgtltfotable-cell column-number=5gtltfoblock space-before=1ingt

lt outprint(_array[4]) gtltfoblockgt

ltfotable-cellgtltfotable-rowgt

lt fin de fila mientrasgt

ltfotable-bodygtltfotablegtltfoblockgt

ltfoflowgtltfopage-sequencegt

ltforootgt

Ejemplo coacutemo se utiliza XSLReportProcessor con PCLContextEste ejemplo no debe utilizarse ya que la clase XSLReportProcessor ha dejado de estar soportada

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante El ejemplo siguiente (PCLRunReport) utiliza las clases XSLPReportProcessor y PCLContext para obtener datos XML y convertir los datos al formato PCL Despueacutes los datos se pasan como una corriente a una OutputQueue de impresora Para ver el contenido de los archivos fuente XML y XSL de ejemplo que puede emplear con PCLRunReport consulte realestatexml y realestatexsl Tambieacuten puede bajar un archivo zip que contiene los archivos de ejemplo XML y XSL El archivo zip

IBM Toolbox para Java 517

tambieacuten contiene un archivo de ejemplo JSP que puede emplear con el ejemplo JSPReportProcessor (JSPRunReport) Sintaxis del mandato java PCLRunReport ltarchivo_xmlgt ltarchivo_xslgt

import javalangimport javaawtimport javaioimport javaawtprintimport javaawteventimport javautilLinkedListimport javautilListIteratorimport javautilHashMap

import comibmxslcomposerfloimport comibmxslcomposerareasimport comibmxslcomposerframeworkimport comibmxslcomposerjava2dimport comibmxslcomposerprimimport comibmxslcomposerpropertiesimport comibmas400utilreportwriterprocessorimport comibmas400utilreportwriterpclwriterimport javaioIOExceptionimport javaioSerializableimport orgxmlsaxSAXExceptionimport comibmas400access

public class PCLRunReport

public static void main(String args[])

SpooledFileOutputStream fileout = nullString xmldocumentName = args[0]String xsldocumentName = args[1]

String sys = ltsystemgt Inserte el nombre del servidor String user = ltusergt Inserte el nombre de perfil de usuario String pass = ltpasswordgt Inserte la contrasentildea

AS400 system = new AS400(sys user pass)

Inserte la cola de salida String outqname = QSYSLIBqusrsysLIBltoutqgtOUTQOutputQueue outq = new OutputQueue(system outqname)PrintParameterList parms = new PrintParameterList()parmssetParameter(PrintObjectATTR_OUTPUT_QUEUE outqgetPath())

tryfileout = new SpooledFileOutputStream(system parms null null)

catch (Exception e)

Configure el formato de paacutegina Paper paper = new Paper()papersetSize(612792)papersetImageableArea(18 36 576 720)PageFormat pf = new PageFormat()pfsetPaper(paper)

Cree un objeto PCLContext y convierta FileOutputStreamcomo OutputStream

518 IBM Toolbox para Java IBM Toolbox para Java

PCLContext pclcontext = new PCLContext((OutputStream)fileout pf)

Systemoutprintln(Preparado para analizar documento XSL)

Cree el objeto XSLReportProcessor XSLReportProcessor xslprocessor = new XSLReportProcessor(pclcontext)try xslprocessorsetXMLDataSource(xmldocumentName)catch (SAXException se)

String mes = segetMessage()Systemoutprintln(mes)Systemexit (0)

catch (IOException ioe) String mes = ioegetMessage()Systemoutprintln(mes)Systemexit (0)

catch (NullPointerException np)String mes = npgetMessage()Systemoutprintln(mes)Systemexit (0)

Establezca la plantilla en el origen de datos XML especificado try xslprocessorsetTemplate(xsldocumentName)catch (NullPointerException np)

String mes = npgetMessage()Systemoutprintln(mes)Systemexit (0)

catch (IOException e) String mes = egetMessage()Systemoutprintln(mes)Systemexit (0)

catch (SAXException se) String mes = segetMessage()Systemoutprintln(mes)Systemexit (0)

Procese el informe try xslprocessorprocessReport()catch (IOException e)

String mes = egetMessage()Systemoutprintln(mes)Systemexit (0)

catch (SAXException se) String mes = segetMessage()Systemoutprintln(mes)Systemexit (0)

Systemexit (0)

Ejemplo archivo XML de ejemplo de XSLReportProcessorEste ejemplo no debe utilizarse ya que la clase XSLReportProcessor ha dejado de estar soportada

IBM Toolbox para Java 519

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteltxml version=10gt

ltRESIDENTIAL-LISTINGS VERSION=061698gt

ltRESIDENTIAL-LISTING ID=ID1287 VERSION=061698gtltGENERALgtltTYPEgtApartmentltTYPEgtltPRICEgt$110000ltPRICEgtltSTRUCTUREgtltNUM-BEDSgt3ltNUM-BEDSgtltNUM-BATHSgt1ltNUM-BATHSgtltSTRUCTUREgtltAGE UNITS=YEARSgt15ltAGEgtltLOCATION COUNTRY=USA STATE=MA COUNTY=MIDDLESEX SECURITY=PublicgtltADDRESSgt13 Some AvenueltADDRESSgtltCITYgtDorchesterltCITYgtltZIPgt02121ltZIPgt

ltLOCATIONgtltIMAGE FORMAT=JPG WIDTH=300 HEIGHT=150 SRC=house1jpggtltMLSgt

ltMLS-CODE SECURITY=Restrictedgt30224877ltMLS-CODEgt

ltMLS-SOURCE SECURITY=PublicgtltNAMEgtBob the RealtorltNAMEgtltPHONEgt1-617-555-1212ltPHONEgtltFAXgt1-617-555-1313ltFAXgtltWEBgtltEMAILgtBobbigbuckscomltEMAILgtltSITEgtwwwbigbuckscomltSITEgtltWEBgtltMLS-SOURCEgtltMLSgtltDATESgtltLISTING-DATEgt3598ltLISTING-DATEgtltDATESgtltLAND-AREA UNITS=ACRESgt001ltLAND-AREAgt

ltGENERALgt

ltFEATURESgtltDISCLOSURESgt

In your dreamsltDISCLOSURESgt

ltUTILITIESgtYes

ltUTILITIESgtltEXTRASgt

Pest control includedltEXTRASgtltCONSTRUCTIONgt

Wallboard and glueltCONSTRUCTIONgtltACCESSgt

Front doorltACCESSgtltFEATURESgt

ltFINANCIALgtltASSUMABLEgt

I assume soltASSUMABLEgtltOWNER-CARRYgt

Too heavyltOWNER-CARRYgtltASSESMENTSgt

$150000ltASSESMENTSgtltDUESgt

$100

520 IBM Toolbox para Java IBM Toolbox para Java

ltDUESgtltTAXESgt

$2000ltTAXESgtltLENDERgt

Fly by nite mortgage coltLENDERgtltEARNESTgt

BurtltEARNESTgtltDIRECTIONSgt

North south east westltDIRECTIONSgtltFINANCIALgt

ltREMARKSgtltREMARKSgt

ltCONTACTSgtltCOMPANYgtltNAMEgt

Noplace RealtyltNAMEgtltADDRESSgt

12 Main StreetltADDRESSgtltCITYgt

Lowell MAltCITYgtltZIPgt

34567ltZIPgtltCOMPANYgtltAGENTgtltNAMEgt

Mary JonesltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltAGENTgtltOWNERgtltNAMEgtltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltOWNERgt

ltTENANTgtYes

ltTENANTgtltCOMMISIONgt15

ltCOMMISIONgtltCONTACTSgt

ltRESIDENTIAL-LISTINGgt

ltRESIDENTIAL-LISTING VERSION=061698 ID=ID1289gtltGENERALgt

IBM Toolbox para Java 521

ltIMAGE FORMAT=JPG WIDTH=300 HEIGHT=150 SRC=house2jpggtltIMAGEgt

ltMLSgtltMLS-CODE SECURITY=Restrictedgt

30298877ltMLS-CODEgt

ltMLS-SOURCE SECURITY=PublicgtltNAMEgtMary the RealtorltNAMEgtltPHONEgt1-617-555-3333ltPHONEgtltFAXgt1-617-555-4444ltFAXgtltWEBgtltEMAILgt

MarysomebuckscomltEMAILgtltSITEgt

wwwbigbuckscomltSITEgtltWEBgtltMLS-SOURCEgtltMLSgt

ltTYPEgtHomeltTYPEgt

ltPRICEgt$200000ltPRICEgt

ltAGE UNITS=MONTHSgt3ltAGEgt

ltLOCATION COUNTRY=USA STATE=CO COUNTY=MIDDLESEX SECURITY=PublicgtltADDRESSgt1 Main StreetltADDRESSgtltCITYgt

BoulderltCITYgtltZIPgt11111ltZIPgtltLOCATIONgt

ltSTRUCTUREgtltNUM-BEDSgt

2ltNUM-BEDSgt

ltNUM-BATHSgt2

ltNUM-BATHSgtltSTRUCTUREgt

ltDATESgtltLISTING-DATEgt

4398ltLISTING-DATEgt

ltDATESgt

522 IBM Toolbox para Java IBM Toolbox para Java

ltLAND-AREA UNITS=ACRESgt001ltLAND-AREAgt

ltGENERALgt

ltFEATURESgtltDISCLOSURESgt

In your dreamsltDISCLOSURESgt

ltUTILITIESgtYes

ltUTILITIESgtltEXTRASgt

Pest control includedltEXTRASgtltCONSTRUCTIONgt

Wallboard and glueltCONSTRUCTIONgtltACCESSgt

Front doorltACCESSgtltFEATURESgt

ltFINANCIALgtltASSUMABLEgt

I assume soltASSUMABLEgtltOWNER-CARRYgt

Too heavyltOWNER-CARRYgtltASSESMENTSgt

$150000ltASSESMENTSgtltDUESgt

$100ltDUESgtltTAXESgt

$2000ltTAXESgtltLENDERgt

Fly by nite mortgage coltLENDERgtltEARNESTgt

BurtltEARNESTgtltDIRECTIONSgt

North south east westltDIRECTIONSgtltFINANCIALgt

ltREMARKSgtltREMARKSgt

ltCONTACTSgtltCOMPANYgtltNAMEgt

Noplace RealtyltNAMEgtltADDRESSgt

12 Main StreetltADDRESSgtltCITYgt

Lowell MAltCITYgtltZIPgt

34567

IBM Toolbox para Java 523

ltZIPgtltCOMPANYgtltAGENTgtltNAMEgt

Mary JonesltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltAGENTgtltOWNERgtltNAMEgtltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltOWNERgt

ltTENANTgtYes

ltTENANTgtltCOMMISIONgt15

ltCOMMISIONgtltCONTACTSgt

ltRESIDENTIAL-LISTINGgtltRESIDENTIAL-LISTING VERSION=061698 ID=ID1290gt

ltGENERALgt

ltIMAGE FORMAT=JPG WIDTH=300 HEIGHT=150 SRC=house3jpggtltIMAGEgt

ltMLSgtltMLS-CODE SECURITY=Restrictedgt

20079877ltMLS-CODEgt

ltMLS-SOURCE SECURITY=PublicgtltNAMEgtBob the RealtorltNAMEgtltPHONEgt1-617-555-1212ltPHONEgtltFAXgt1-617-555-1313ltFAXgtltWEBgtltEMAILgt

BobbigbuckscomltEMAILgtltSITEgt

wwwbigbuckscomltSITEgtltWEBgtltMLS-SOURCEgtltMLSgt

ltTYPEgtApartmentltTYPEgt

524 IBM Toolbox para Java IBM Toolbox para Java

ltPRICEgt$65000ltPRICEgt

ltAGE UNITS=YEARSgt30ltAGEgt

ltLOCATION COUNTRY=USA STATE=MA COUNTY=MIDDLESEX SECURITY=PublicgtltADDRESSgt25 Which AveltADDRESSgtltCITYgt

CambridgeltCITYgtltZIPgt02139ltZIPgtltLOCATIONgt

ltSTRUCTUREgtltNUM-BEDSgt

3ltNUM-BEDSgt

ltNUM-BATHSgt1

ltNUM-BATHSgtltSTRUCTUREgt

ltDATESgtltLISTING-DATEgt

3597ltLISTING-DATEgt

ltDATESgt

ltLAND-AREA UNITS=ACRESgt005ltLAND-AREAgt

ltGENERALgt

ltFEATURESgtltDISCLOSURESgt

In your dreamsltDISCLOSURESgt

ltUTILITIESgtYes

ltUTILITIESgtltEXTRASgt

Pest control includedltEXTRASgtltCONSTRUCTIONgt

Wallboard and glueltCONSTRUCTIONgtltACCESSgt

Front doorltACCESSgtltFEATURESgt

ltFINANCIALgtltASSUMABLEgt

I assume soltASSUMABLEgtltOWNER-CARRYgt

Too heavyltOWNER-CARRYgtltASSESMENTSgt

IBM Toolbox para Java 525

$150000ltASSESMENTSgtltDUESgt

$100ltDUESgtltTAXESgt

$2000ltTAXESgtltLENDERgt

Fly by nite mortgage coltLENDERgtltEARNESTgt

BurtltEARNESTgtltDIRECTIONSgt

North south east westltDIRECTIONSgtltFINANCIALgt

ltREMARKSgtltREMARKSgt

ltCONTACTSgtltCOMPANYgtltNAMEgt

Noplace RealtyltNAMEgtltADDRESSgt

12 Main StreetltADDRESSgtltCITYgt

Lowell MAltCITYgtltZIPgt

34567ltZIPgtltCOMPANYgtltAGENTgtltNAMEgt

Mary JonesltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltAGENTgtltOWNERgtltNAMEgtltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltOWNERgt

ltTENANTgtYes

ltTENANTgtltCOMMISIONgt15

ltCOMMISIONgtltCONTACTSgt

ltRESIDENTIAL-LISTINGgt

526 IBM Toolbox para Java IBM Toolbox para Java

ltRESIDENTIAL-LISTING VERSION=061698 ID=ID1291gtltGENERALgt

ltIMAGE FORMAT=JPG WIDTH=300 HEIGHT=150 SRC=house4jpggtltIMAGEgt

ltMLSgtltMLS-CODE SECURITY=Restrictedgt

29389877ltMLS-CODEgt

ltMLS-SOURCE SECURITY=PublicgtltNAMEgtMary the RealtorltNAMEgtltPHONEgt1-617-555-3333ltPHONEgtltFAXgt1-617-555-4444ltFAXgtltWEBgtltEMAILgt

MarysomebuckscomltEMAILgtltSITEgt

wwwbigbuckscomltSITEgtltWEBgtltMLS-SOURCEgtltMLSgt

ltTYPEgtHome

ltTYPEgt

ltPRICEgt$449000ltPRICEgt

ltAGE UNITS=YEARSgt7ltAGEgt

ltLOCATION COUNTRY=USA STATE=MA COUNTY=MIDDLESEX SECURITY=PublicgtltADDRESSgt100 Any RoadltADDRESSgtltCITYgt

LexingtonltCITYgtltZIPgt02421ltZIPgtltLOCATIONgt

ltSTRUCTUREgtltNUM-BEDSgt

7ltNUM-BEDSgt

ltNUM-BATHSgt3

ltNUM-BATHSgtltSTRUCTUREgt

ltDATESgtltLISTING-DATEgt

6898

IBM Toolbox para Java 527

ltLISTING-DATEgtltDATESgt

ltLAND-AREA UNITS=ACRESgt20ltLAND-AREAgt

ltGENERALgt

ltFEATURESgtltDISCLOSURESgt

In your dreamsltDISCLOSURESgt

ltUTILITIESgtYes

ltUTILITIESgtltEXTRASgt

Pest control includedltEXTRASgtltCONSTRUCTIONgt

Wallboard and glueltCONSTRUCTIONgtltACCESSgt

Front doorltACCESSgtltFEATURESgt

ltFINANCIALgtltASSUMABLEgt

I assume soltASSUMABLEgtltOWNER-CARRYgt

Too heavyltOWNER-CARRYgtltASSESMENTSgt

$300000ltASSESMENTSgtltDUESgt

$100ltDUESgtltTAXESgt

$2000ltTAXESgtltLENDERgt

Fly by nite mortgage coltLENDERgtltEARNESTgt

BurtltEARNESTgtltDIRECTIONSgt

North south east westltDIRECTIONSgtltFINANCIALgt

ltREMARKSgtltREMARKSgt

ltCONTACTSgtltCOMPANYgtltNAMEgt

Noplace RealtyltNAMEgtltADDRESSgt

12 Main StreetltADDRESSgtltCITYgt

Lowell MA

528 IBM Toolbox para Java IBM Toolbox para Java

ltCITYgtltZIPgt

34567ltZIPgtltCOMPANYgtltAGENTgtltNAMEgt

Mary JonesltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltAGENTgtltOWNERgtltNAMEgtltNAMEgtltADDRESSgtltADDRESSgtltCITYgtltCITYgtltZIPgtltZIPgtltOWNERgt

ltTENANTgtYes

ltTENANTgtltCOMMISIONgt15

ltCOMMISIONgtltCONTACTSgt

ltRESIDENTIAL-LISTINGgt

ltRESIDENTIAL-LISTINGSgt

Ejemplo archivo XSL de ejemplo de XSLReportProcessorEste ejemplo no debe utilizarse ya que la clase XSLReportProcessor ha dejado de estar soportada

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteltxml version=10gt

lt-- Ejemplo de estilo de un documento inmobiliario imaginado --gtltxslstylesheet version=10 xmlnsxsl=httpwwww3org1999XSLTransform

xmlnsfo=httpwwww3org1999XSLFormat gt

ltxsltemplate match=RESIDENTIAL-LISTINGSgtltforootgtltfolayout-master-setgt

ltfosimple-page-master master-name=theMastergtltforegion-body region-name=theRegiongt

ltfosimple-page-mastergtltfopage-sequence-master master-name=theMastergt

ltfosingle-page-master-reference master-name=thePage gtltfopage-sequence-mastergt

ltfolayout-master-setgtltfopage-sequence master-name=theMastergtltfoflow flow-name=theRegiongt

ltxslapply-templatesgtltfoflowgtltfopage-sequencegt

ltforootgtltxsltemplategt

IBM Toolbox para Java 529

ltxsltemplate match=RESIDENTIAL-LISTINGgt

ltfoblock font-family=Times New Roman font-weight=normal font-size=24ptbackground-color=silver padding-before=5px padding-after=5pxpadding-start=5px padding-end=5px border-before-style=solidborder-before-color=blue border-after-style=solid border-after-color=blueborder-start-style=solid border-start-color=blue border-end-style=solidborder-end-color=bluegt

ltfocharacter character=y background-color=blue border-before-style=solidborder-before-color=yellow border-after-style=solid border-after-color=yellowborder-start-style=solid border-start-color=yellow border-end-style=solidborder-end-color=yellow gt

ltfoblockgt

ltxsltemplategtltxslstylesheetgt

Ejemplos RFMLEn esta seccioacuten figura una lista de los ejemplos de coacutedigo que se proporcionan en la documentacioacuten delcomponente RFML de IBM Toolbox para Javav Ejemplo Utilizacioacuten de RFML comparada con la utilizacioacuten de clases Record de IBM Toolbox para Javav Ejemplo Archivo fuente RFML

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo archivo fuente RFMLEste archivo fuente RFML de ejemplo define el formato de los registros de cliente seguacuten el uso realizadoen el ejemplo de RFML acerca de Coacutemo se utiliza RFML en comparacioacuten con el uso de las clases Recordde IBM Toolbox para Java

Este archivo fuente RFML podriacutea ser un archivo de texto denominado qcustcdtrfml

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importanteltxml version=10 encoding=UTF-8 standalone=nogtltDOCTYPE rfml SYSTEM rfmldtdgt

ltrfml version=40 ccsid=819gt

ltrecordformat name=cusrecgt

530 IBM Toolbox para Java IBM Toolbox para Java

ltdata name=cusnum type=zoned length=6 precision=0 init=0gtltdata name=lstnam type=char length=8 ccsid=37 init=Agtltdata name=init type=char length=3 ccsid=37 init=Bgtltdata name=street type=char length=13 ccsid=37 init=Cgtltdata name=city type=char length=6 ccsid=37 init=Dgtltdata name=state type=char length=2 ccsid=37 init=Egtltdata name=zipcod type=zoned length=5 init=1gtltdata name=cdtlmt type=zoned length=4 init=2gtltdata name=chgcod type=zoned length=1 init=3gtltdata name=baldue type=zoned length=6 precision=2 init=4gtltdata name=cdtdue type=zoned length=6 precision=2 init=5gt

ltrecordformatgt

ltrecordformat name=cusrec1gt

ltdata name=cusnum type=zoned length=6 precision=0 init=0gtltdata name=lstnam type=char length=8 ccsid=37 init=Agtltdata name=init type=char length=3 ccsid=37 init=Bgtltdata name=street type=char length=13 ccsid=37 init=Cgtltdata name=city type=char length=6 ccsid=37 init=Dgtltdata name=state type=char length=2 ccsid=37 init=Egtltdata name=zipcod type=zoned length=5 init=1gtltdata name=cdtlmt type=zoned length=4 init=2gtltdata name=chgcod type=zoned length=1 init=3gtltdata name=baldue type=struct struct=balancegtltdata name=cdtdue type=struct struct=balancegt

ltrecordformatgt

ltrecordformat name=cusrecAsciigt

ltdata name=cusnum type=zoned length=6 precision=0 init=0gtltdata name=lstnam type=char length=8 init=Agtltdata name=init type=char length=3 init=Bgtltdata name=street type=char length=13 init=Cgtltdata name=city type=char length=6 init=Dgtltdata name=state type=char length=2 init=Egtltdata name=zipcod type=zoned length=5 init=1gtltdata name=cdtlmt type=zoned length=4 init=2gtltdata name=chgcod type=zoned length=1 init=3gtltdata name=baldue type=zoned length=6 precision=2 init=4gtltdata name=cdtdue type=zoned length=6 precision=2 init=5gt

ltrecordformatgt

ltstruct name=balancegtltdata name=amount type=zoned length=6 precision=2 init=7gt

ltstructgt

ltrfmlgt

Referencia relacionadaldquoEjemplo coacutemo se utiliza RFML en comparacioacuten con el uso de las clases Record de IBM Toolbox paraJavardquo en la paacutegina 320Este ejemplo muestra las diferencias entre el uso de RFML y el uso de las clases Record de IBM Toolboxpara Java

Ejemplo coacutemo se utiliza una credencial de siacutembolo de perfil paraintercambiar la identidad de la hebra de IBM iEl siguiente ejemplo de coacutedigo muestra coacutemo se utiliza una credencial de siacutembolo de perfil paraintercambiar la identidad de la hebra de IBM i y trabajar en nombre de un determinado usuario

IBM Toolbox para Java 531

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Cree una ProfileTokenCredential de un solo uso con un tiempo de espera de 60 segundosAS400 system = new AS400()ProfileTokenCredential pt = new ProfileTokenCredential()ptsetSystem(system)ptsetTimeoutInterval(60)ptsetTokenType(ProfileTokenCredentialTYPE_SINGLE_USE)

Es preciso sustituir un ID de usuario y una contrasentildea vaacutelidosptsetTokenExtended(user password)

Intercambie la identidad de hebra de OS400 y recupere una credencial para maacutes adelante hacer un nuevo intercambio de regreso a la identidad originalAS400Credential cr = ptswap(true)

Cree un segundo objeto AS400AS400 system2 = new AS400()CommandCall cmd = new CommandCall(system)

Trabaje bajo la identidad intercambiada en este momento

Intercambie de nuevo para regresar a la identidad de hebra original de OS400crswap()

Borre las credencialescrdestroy()ptdestroy()systemdisconnectAllServices()system2disconnectAllServices()

Ejemplos de las clases de servletsLos ejemplos que figuran a continuacioacuten muestran algunas maneras de coacutemo se pueden utilizar las clasesde servletsv Ejemplo coacutemo se utiliza la clase ListRowDatav Ejemplo coacutemo se utiliza la clase RecordListRowDatav Ejemplo coacutemo se utiliza la clase SQLResultSetRowDatav Ejemplo coacutemo se utiliza la clase HTMLFormConverterv Ejemplo coacutemo se utiliza la clase ListMetaDatav Ejemplo coacutemo se utiliza la clase SQLResultSetMetaDatav Ejemplo visualizar una lista de recursos en un servlet

Tambieacuten se pueden utilizar juntas las clases de servlets y las clases HTML como en este ejemplo

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

532 IBM Toolbox para Java IBM Toolbox para Java

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo coacutemo se utiliza ListRowDataLas tres partes de este ejemplo ilustran la utilizacioacuten de la clase ListRowData para generar y visualizarHTML

Este ejemplo consta de tres partesv ldquoCoacutedigo fuente Java que muestra coacutemo funciona la clase ListRowDatardquov ldquoCoacutedigo fuente HTML generado a partir del fuente Java mediante HTMLTableConverterrdquov ldquoVisualizacioacuten en un navegador del HTML generadordquo en la paacutegina 534

Coacutedigo fuente Java que muestra coacutemo funciona la clase ListRowData Acceda a una cola de datos existente que no esteacute vaciacuteaKeyedDataQueue dq = new KeyedDataQueue(systemObject_ QSYSLIBMYLIBLIBMYDQDTAQ)

Cree un objeto metadatosListMetaData metaData = new ListMetaData(2)

Establezca que la primera columna sea el ID de clientemetaDatasetColumnName(0 ID de cliente)metaDatasetColumnLabel(0 ID de cliente)metaDatasetColumnType(0 RowMetaDataTypeSTRING_DATA_TYPE)

Establezca que la segunda columna sea el pedido que se ha de procesarmetaDatasetColumnName(1 Nuacutemero de pedido)metaDatasetColumnLabel(1 Nuacutemero de pedido)metaDatasetColumnType(1 RowMetaDataTypeSTRING_DATA_TYPE)

Cree un objeto ListRowDataListRowData rowData = new ListRowData()rowDatasetMetaData(metaData)

Obtenga las entradas a partir de la cola de datosKeyedDataQueueEntry data = dqread(key 0 EQ)while (data = null)

Antildeada la entrada de la cola al objeto datos de filaObject[] row = new Object[2]row[0] = new String(key)row[1] = new String(datagetData())rowDataaddRow(row)

Obtenga otra entrada de la coladata = dqread(key 0 EQ)

Cree un objeto conversor HTML y convierta los datos de fila (rowData) a HTMLHTMLTableConverter conv = new HTMLTableConverter()convsetUseMetaData(true)HTMLTable[] html = convconvertToTables(rowData)

Visualice la salida del conversorSystemoutprintln(html[0])

Coacutedigo fuente HTML generado a partir del fuente Java mediante HTMLTableConverter

Al utilizar la ldquoClase HTMLTableConverterrdquo en la paacutegina 244 en el ejemplo de fuente Java anterior segenera el siguiente coacutedigo HTML

IBM Toolbox para Java 533

lttablegtlttrgtltthgtID de clienteltthgtltthgtNuacutemero de pedidoltthgtlttrgtlttrgtlttdgt777-53-4444lttdgtlttdgt12345-XYZlttdgtlttrgtlttrgtlttdgt777-53-4444lttdgtlttdgt56789-ABClttdgtlttrgtlttablegt

Visualizacioacuten en un navegador del HTML generado

La tabla que hay a continuacioacuten muestra coacutemo se visualiza el coacutedigo fuente HTML en un navegador

ID de cliente Nuacutemero de pedido777-53-4444 12345-XYZ777-53-4444 56789-ABC

Ejemplo coacutemo se utiliza RecordListRowDataEste ejemplo muestra el funcionamiento de la clase RecordListRowData el coacutedigo fuente HTML generadomediante la utilizacioacuten de la clase HTMLTableConverted y tambieacuten coacutemo visualiza un navegador elHTML generado

Este ejemplo consta de tres partesv Fuente Java que muestra coacutemo funciona la clase RecordListRowDatav Fuente HTML generado a partir del fuente Java mediante HTMLTableConverterv Visualizacioacuten en un navegador del HTML generado

Fuente Java que muestra coacutemo funciona la clase RecordListRowData Cree un objeto servidorAS400 mySystem = new AS400 (mySystemmyCompcom UserId Password)

Obtenga el nombre de la viacutea de acceso del archivoQSYSObjectPathName file = new QSYSObjectPathName(myLibrary myFile first mbr)String ifspath = filegetPath()

Cree un objeto de archivo que represente el archivoSequentialFile sf = new SequentialFile(mySystem ifspath)

Recupere el formato de registro del archivoAS400FileRecordDescription recordDescription = new AS400FileRecordDescription(mySystem ifspath)RecordFormat recordFormat = recordDescriptionretrieveRecordFormat()[0]

Establezca el formato de registro del archivosfsetRecordFormat(recordFormat)

Obtenga los registros del archivoRecord[] records = sfreadAll()

Cree un objeto RecordListRowData y antildeaacutedale los registrosRecordListRowData rowData = new RecordListRowData(recordFormat)

for (int i=0 i lt recordslength i++)

rowDataaddRow(records[i])

534 IBM Toolbox para Java IBM Toolbox para Java

Cree un objeto conversor HTML y convierta los datos de fila (rowData) a HTMLHTMLTableConverter conv = new HTMLTableConverter()convsetMaximumTableSize(3)HTMLTable[] html = convconvertToTables(rowData)

Visualice la primera tabla HTML generada por el conversorSystemoutprintln(html[0])

Fuente HTML generado a partir del fuente Java mediante HTMLTableConverter

Al utilizar la clase HTMLTableConverter en el ejemplo de fuente Java anterior se genera el siguientecoacutedigo HTMLlttablegtlttrgtltthgtCNUMltthgtltthgtLNAMltthgtltthgtINITltthgtltthgtSTRltthgtltthgtCTYltthgtltthgtSTATEltthgtltthgtZIPltthgtltthgtCTLMTltthgtltthgtCHGCODltthgtltthgtBDUEltthgtltthgtCTDUEltthgtlttrgtlttrgtlttdgt938472lttdgtlttdgtHenning lttdgtlttdgtG Klttdgtlttdgt4859 Elm Ave lttdgtlttdgtDallaslttdgtlttdgtTXlttdgtlttd align=rightgt75217lttdgtlttd align=rightgt5000lttdgtlttd align=rightgt3lttdgtlttd align=rightgt3700lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt839283lttdgtlttdgtJones lttdgtlttdgtB Dlttdgtlttdgt21B NW 135 StlttdgtlttdgtClay lttdgtlttdgtNYlttdgtlttd align=rightgt13041lttdgtlttd align=rightgt400lttdgtlttd align=rightgt1lttdgtlttd align=rightgt10000lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt392859lttdgtlttdgtVine lttdgtlttdgtS SlttdgtlttdgtPO Box 79 lttdgtlttdgtBrotonlttdgtlttdgtVTlttdgtlttd align=rightgt5046lttdgtlttd align=rightgt700lttdgtlttd align=rightgt1lttdgt

IBM Toolbox para Java 535

lttd align=rightgt43900lttdgtlttd align=rightgt000lttdgtlttrgtlttablegt

Visualizacioacuten en un navegador del HTML generado

La tabla que hay a continuacioacuten muestra coacutemo se visualiza el coacutedigo fuente HTML en un navegador

NUacuteMCLIAPELLIDO INIC CALLE CIUDAD ESTADO COacuteDPOST LMTCDT COacuteDCARG SALDO CDTVENC

938472 Henning G K 4859 Elm Ave Dallas TX 75217 5000 3 3700 000

839283 Jones B D 21B NW 135 St Clay NY 13041 400 1 10000 000

392859 Vine S S PO Box 79 Broton VT 5046 700 1 43900 000

Ejemplo coacutemo se utiliza SQLResultSetRowDataEste ejemplo muestra el funcionamiento de la clase SQLResultSetRowData el coacutedigo fuente HTMLgenerado y tambieacuten coacutemo visualiza un navegador el HTML generado

Este ejemplo consta de tres partesv Fuente Java que muestra coacutemo funciona la clase SQLResultSetRowDatav Fuente HTML generado a partir del fuente Java mediante HTMLTableConverterv Visualizacioacuten en un navegador del HTML generado

Fuente Java que muestra coacutemo funciona la clase SQLResultSetRowData Cree un objeto servidorAS400 mySystem = new AS400 (mySystemmyCompcom UserId Password)

Registre y obtenga una conexioacuten con la base de datosDriverManagerregisterDriver(new comibmas400accessAS400JDBCDriver())Connection connection = DriverManagergetConnection(jdbcas400 + mySystemgetSystemName())

Ejecute una sentencia SQL y obtenga el conjunto de resultadosStatement statement = connectioncreateStatement()statementexecute(select from qiwsqcustcdt)ResultSet resultSet = statementgetResultSet()

Cree el objeto SQLResultSetRowData e inicialice con el conjunto de resultadosSQLResultSetRowData rowData = new SQLResultSetRowData(resultSet)

Cree un objeto tabla HTML para que lo utilice el conversorHTMLTable table = new HTMLTable()

Establezca cabeceras de columna descriptivasString[] headers = Nuacutemero cliente Apellido Iniciales

Calle Ciudad Estado Coacutedigo postalLiacutemite creacutedito Coacutedigo cargo SaldoCreacutedito vencido

tablesetHeader(headers)

Establezca varias opciones de formato dentro de la tablatablesetBorderWidth(2)tablesetCellSpacing(1)tablesetCellPadding(1)

Cree un objeto conversor HTML y convierta los datos de fila (rowData) a HTMLHTMLTableConverter conv = new HTMLTableConverter()convsetTable(table)HTMLTable[] html = convconvertToTables(rowData)

Visualice la tabla HTML generada por el conversorSystemoutprintln(html[0])

536 IBM Toolbox para Java IBM Toolbox para Java

Fuente HTML generado a partir del fuente Java mediante HTMLTableConverter

Al utilizar la clase HTMLTableConverter en el ejemplo de fuente Java anterior se genera el siguientecoacutedigo HTMLlttable border=2 cellpadding=1 cellspacing=1gtlttrgtltthgtNuacutemero de clienteltthgtltthgtApellidoltthgtltthgtInicialesltthgtltthgtDireccioacutenCalleltthgtltthgtCiudadltthgtltthgtEstadoltthgtltthgtCoacutedigo postalltthgtltthgtLiacutemite creacuteditoltthgtltthgtCoacutedigo cargoltthgtltthgtSaldoltthgtltthgtCreacutedito vencidoltthgtlttrgtlttrgtlttdgt938472lttdgtlttdgtHenning lttdgtlttdgtG Klttdgtlttdgt4859 Elm Ave lttdgtlttdgtDallaslttdgtlttdgtTXlttdgtlttd align=rightgt75217lttdgtlttd align=rightgt5000lttdgtlttd align=rightgt3lttdgtlttd align=rightgt3700lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt839283lttdgtlttdgtJones lttdgtlttdgtB Dlttdgtlttdgt21B NW 135 StlttdgtlttdgtClay lttdgtlttdgtNYlttdgtlttd align=rightgt13041lttdgtlttd align=rightgt400lttdgtlttd align=rightgt1lttdgtlttd align=rightgt10000lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt392859lttdgtlttdgtVine lttdgtlttdgtS SlttdgtlttdgtPO Box 79 lttdgtlttdgtBrotonlttdgtlttdgtVTlttdgtlttd align=rightgt5046lttdgtlttd align=rightgt700lttdgtlttd align=rightgt1lttdgtlttd align=rightgt43900lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt938485lttdgtlttdgtJohnson lttdgtlttdgtJ Alttdgtlttdgt3 Alpine Way lttdgtlttdgtHelen lttdgtlttdgtGAlttdgtlttd align=rightgt30545lttdgt

IBM Toolbox para Java 537

lttd align=rightgt9999lttdgtlttd align=rightgt2lttdgtlttd align=rightgt398750lttdgtlttd align=rightgt3350lttdgtlttrgtlttrgtlttdgt397267lttdgtlttdgtTyron lttdgtlttdgtW Elttdgtlttdgt13 Myrtle Dr lttdgtlttdgtHectorlttdgtlttdgtNYlttdgtlttd align=rightgt14841lttdgtlttd align=rightgt1000lttdgtlttd align=rightgt1lttdgtlttd align=rightgt000lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt389572lttdgtlttdgtStevens lttdgtlttdgtK Llttdgtlttdgt208 Snow PasslttdgtlttdgtDenverlttdgtlttdgtCOlttdgtlttd align=rightgt80226lttdgtlttd align=rightgt400lttdgtlttd align=rightgt1lttdgtlttd align=rightgt5875lttdgtlttd align=rightgt150lttdgtlttrgtlttrgtlttdgt846283lttdgtlttdgtAlison lttdgtlttdgtJ Slttdgtlttdgt787 Lake Dr lttdgtlttdgtIsle lttdgtlttdgtMNlttdgtlttd align=rightgt56342lttdgtlttd align=rightgt5000lttdgtlttd align=rightgt3lttdgtlttd align=rightgt1000lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt475938lttdgtlttdgtDoe lttdgtlttdgtJ Wlttdgtlttdgt59 Archer Rd lttdgtlttdgtSutterlttdgtlttdgtCAlttdgtlttd align=rightgt95685lttdgtlttd align=rightgt700lttdgtlttd align=rightgt2lttdgtlttd align=rightgt25000lttdgtlttd align=rightgt10000lttdgtlttrgtlttrgtlttdgt693829lttdgtlttdgtThomas lttdgtlttdgtA Nlttdgtlttdgt3 Dove CirclelttdgtlttdgtCasperlttdgtlttdgtWYlttdgtlttd align=rightgt82609lttdgtlttd align=rightgt9999lttdgtlttd align=rightgt2lttdgt

538 IBM Toolbox para Java IBM Toolbox para Java

lttd align=rightgt000lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt593029lttdgtlttdgtWilliamslttdgtlttdgtE Dlttdgtlttdgt485 SE 2 Ave lttdgtlttdgtDallaslttdgtlttdgtTXlttdgtlttd align=rightgt75218lttdgtlttd align=rightgt200lttdgtlttd align=rightgt1lttdgtlttd align=rightgt2500lttdgtlttd align=rightgt000lttdgtlttrgtlttrgtlttdgt192837lttdgtlttdgtLee lttdgtlttdgtF Llttdgtlttdgt5963 Oak St lttdgtlttdgtHectorlttdgtlttdgtNYlttdgtlttd align=rightgt14841lttdgtlttd align=rightgt700lttdgtlttd align=rightgt2lttdgtlttd align=rightgt48950lttdgtlttd align=rightgt050lttdgtlttrgtlttrgtlttdgt583990lttdgtlttdgtAbraham lttdgtlttdgtM Tlttdgtlttdgt392 Mill St lttdgtlttdgtIsle lttdgtlttdgtMNlttdgtlttd align=rightgt56342lttdgtlttd align=rightgt9999lttdgtlttd align=rightgt3lttdgtlttd align=rightgt50000lttdgtlttd align=rightgt000lttdgtlttrgtlttablegt

Visualizacioacuten en un navegador del HTML generado

La tabla que hay a continuacioacuten muestra coacutemo se visualiza el coacutedigo fuente HTML en un navegador

Nuacutemerocliente Apellido Iniciales Calle Ciudad Estado

Coacutedigopostal

Liacutemitecreacutedito

Coacutedigocargo Saldo

Creacuteditovencido

938472 Henning G K 4859 ElmAve

Dallas TX 75217 5000 3 3700 000

839283 Jones B D 21B NW135 St

Clay NY 13041 400 1 10000 000

392859 Vine S S PO Box 79 Broton VT 5046 700 1 43900 000

938485 Johnson J A 3 AlpineWay

Helen GA 30545 9999 2 398750 3350

397267 Tyron W E 13 MyrtleDr

Hector NY 14841 1000 1 000 000

389572 Stevens K L 208 SnowPass

Denver CO 80226 400 1 5875 150

IBM Toolbox para Java 539

Nuacutemerocliente Apellido Iniciales Calle Ciudad Estado

Coacutedigopostal

Liacutemitecreacutedito

Coacutedigocargo Saldo

Creacuteditovencido

846283 Alison J S 787 LakeDr

Isle MN 56342 5000 3 1000 000

475938 Doe J W 59 ArcherRd

Sutter CA 95685 700 2 25000 10000

693829 Thomas A N 3 DoveCircle

Casper WY 82609 9999 2 000 000

593029 Williams E D 485 SE 2Ave

Dallas TX 75218 200 1 2500 000

192837 Lee F L 5963 OakSt

Hector NY 14841 700 2 48950 050

583990 Abraham M T 392 Mill St Isle MN 56342 9999 3 50000 000

Ejemplo coacutemo se utiliza HTMLFormConverterMientras ejecuta un servidor Web con soporte para servlets compile y ejecute el ejemplo siguiente paraver coacutemo funciona la clase HTMLFormConverterimport javaawtColorimport javaioIOExceptionimport javaioPrintWriterimport javasqlDriverManagerimport javasqlConnectionimport javasqlResultSetimport javasqlStatementimport javautilEnumerationimport javautilHashtableimport javaxservletimport javaxservlethttp

import comibmas400utilhtmlGridLayoutFormPanelimport comibmas400utilhtmlHTMLConstantsimport comibmas400utilhtmlHTMLFormimport comibmas400utilhtmlHTMLTableimport comibmas400utilhtmlHTMLTableCaptionimport comibmas400utilhtmlHTMLTextimport comibmas400utilhtmlLabelFormElementimport comibmas400utilhtmlLineLayoutFormPanelimport comibmas400utilhtmlSubmitFormInputimport comibmas400utilhtmlTextFormInput

import comibmas400utilservletHTMLFormConverterimport comibmas400utilservletSQLResultSetRowData

import comibmas400accessAS400import comibmas400accessAS400JDBCDriver

Ejemplo de coacutemo se utiliza la clase HTMLFormConverter en un servlet

public class HTMLFormConverterExample extends HttpServlet

private String userId_ = myUserIdprivate String password_ = myPwdprivate AS400 system_

private Connection databaseConnection_

540 IBM Toolbox para Java IBM Toolbox para Java

Haga un borrado antes de volver al formulario HTML principalpublic void cleanup()

try

Cierre la conexioacuten con la base de datosif (databaseConnection_ = null)

databaseConnection_close()databaseConnection_ = null

catch (Exception e)

eprintStackTrace ()

Convierta los datos de fila a HTML formateadoprivate HTMLTable[] convertRowData(SQLResultSetRowData rowData)

try

Cree el conversor el cual generaraacute HTML a partir del conjunto de resultados devueltos por la consulta de base de datosHTMLFormConverter converter = new HTMLFormConverter()

Establezca los atributos del formularioconvertersetBorderWidth(3)convertersetCellPadding(2)convertersetCellSpacing(4)

Convierta los datos de fila a HTMLHTMLTable[] htmlTable = converterconvertToForms(rowData)return htmlTable

catch (Exception e)

eprintStackTrace ()return null

Devuelva la respuesta al clientepublic void doGet(HttpServletRequest request HttpServletResponse response)

throws IOException ServletException

responsesetContentType(texthtml)PrintWriter out = responsegetWriter()

outprintln(showHtmlMain())outclose()

Maneje los datos enviados al formulariopublic void doPost (HttpServletRequest request HttpServletResponse response)

throws ServletException IOException

SQLResultSetRowData rowData = new SQLResultSetRowData()HTMLTable[] htmlTable = null

Obtenga el objeto sesioacuten actual o cree uno si es necesarioHttpSession session = requestgetSession(true)

IBM Toolbox para Java 541

ServletOutputStream out = responsegetOutputStream()

responsesetContentType(texthtml)

Hashtable parameters = getRequestParameters (request)

Recupere los valores de los datos de fila y los valores de tabla HTML de esta sesioacutenrowData = (SQLResultSetRowData) sessiongetValue(sessionRowData)htmlTable = (HTMLTable[]) sessiongetValue(sessionHtmlTable)

Si es la primera vez que se pasa mostrar el primer registroif (parameterscontainsKey(getRecords))

rowData = getAllRecords(parameters out)

if (rowData = null)

Establezca el valor de los datos de fila para esta sesioacutensessionputValue(sessionRowData rowData)

Situacuteese en el primer registrorowDatafirst()

Convierta los datos de fila a HTML formateadohtmlTable = convertRowData(rowData)

if (htmlTable = null)

rowDatafirst()sessionputValue(sessionHtmlTable htmlTable)outprintln(showHtmlForRecord(htmlTable 0))

Si se ha pulsado el botoacuten Volver a principal volver al formulario HTML principalelse if (parameterscontainsKey(returnToMain))

sessioninvalidate()cleanup()outprintln(showHtmlMain())

Si se ha pulsado el botoacuten Primero mostrar el primer registroelse if (parameterscontainsKey(getFirstRecord))

rowDatafirst()outprintln(showHtmlForRecord(htmlTable 0))

Si se ha pulsado el botoacuten Anterior mostrar el registro anteriorelse if (parameterscontainsKey(getPreviousRecord))

if (rowDataprevious())

rowDatafirst()outprintln(showHtmlForRecord(htmlTable rowDatagetCurrentPosition()))

Si se ha pulsado el botoacuten Siguiente mostrar el registro siguienteelse if (parameterscontainsKey(getNextRecord))

if (rowDatanext())

rowDatalast()outprintln(showHtmlForRecord(htmlTable rowDatagetCurrentPosition()))

542 IBM Toolbox para Java IBM Toolbox para Java

Si se ha pulsado el botoacuten Uacuteltimo mostrar el uacuteltimo registroelse if (parameterscontainsKey(getLastRecord))

rowDatalast()outprintln(showHtmlForRecord(htmlTable rowDatagetCurrentPosition()))

Si no se ha producido ninguno de los casos anteriores debe haber un errorelse

outprintln(showHtmlForError(Se ha producido un error interno Paraacutemetros inesperados))

Guarde el valor de los datos de fila de esta sesioacuten para que la posicioacuten actual se actualice en el objeto asociado a esta sesioacutensessionputValue(sessionRowData rowData)

Cierre la corriente de datos de salidaoutclose()

Obtenga todos los registros del archivo entrado por el usuarioprivate SQLResultSetRowData getAllRecords(Hashtable parameters ServletOutputStream out)

throws IOException

SQLResultSetRowData records = null

try

Obtenga el nombre del sistema de la biblioteca y del archivo a partir de la lista de paraacutemetrosString sys = ((String) parametersget(System))toUpperCase()String lib = ((String) parametersget(Library))toUpperCase()String file = ((String) parametersget(File))toUpperCase()if ((sys == null || sysequals()) ||

(lib == null || libequals()) ||(file == null || fileequals()))

outprintln(showHtmlForError(No es vaacutelido el nombre del sistema

del archivo o de la biblioteca))else

Obtenga la conexioacuten con el servidorgetDatabaseConnection (sys out)if (databaseConnection_ = null)

Statement sqlStatement = databaseConnection_createStatement()

Consulte la base de datos para obtener el conjunto de resultadosString query = SELECT FROM + lib + + fileResultSet rs = sqlStatementexecuteQuery (query)

boolean rsHasRows = rsnext() situacutee el cursor en la primera fila

Mostrar un mensaje de error si el archivo no contiene ninguacuten registro en caso contrario establecer los datos de fila en los datos del conjunto de resultadosif (rsHasRows)

outprintln(showHtmlForError(No hay registros en el archivo))else

records = new SQLResultSetRowData (rs)

No cierre Statement antes de terminar de usar

IBM Toolbox para Java 543

ResultSet porque de lo contrario se produciriacutean anomaliacuteassqlStatementclose()

catch (Exception e)

eprintStackTrace ()outprintln(showHtmlForError(etoString()))

return records

Establezca una conexioacuten de base de datosprivate void getDatabaseConnection (String sysName ServletOutputStream out)

throws IOException

if (databaseConnection_ == null)

try

databaseConnection_ =DriverManagergetConnection(jdbcas400sysNameuserId_password_ )

catch (Exception e)

eprintStackTrace ()outprintln(showHtmlForError(etoString()))

Obtiene los paraacutemetros a partir de una peticioacuten de servlet HTTPprivate static Hashtable getRequestParameters (HttpServletRequest request)

Hashtable parameters = new Hashtable ()Enumeration enum = requestgetParameterNames()while (enumhasMoreElements())

String key = (String) enumnextElement()String value = requestgetParameter (key)parametersput (key value)

return parameters

Obtenga la informacioacuten de servletpublic String getServletInfo()

return HTMLFormConverterExample

Siga los pasos de inicializacioacutenpublic void init(ServletConfig config)

try

superinit(config)

Registre el controlador JDBCtry

544 IBM Toolbox para Java IBM Toolbox para Java

DriverManagerregisterDriver(new AS400JDBCDriver())catch (Exception e)

Systemoutprintln(Controlador JDBC no encontrado)

catch (Exception e)

eprintStackTrace()

Establezca la informacioacuten de cabecera de paacuteginaprivate String showHeader(String title)

StringBuffer page = new StringBuffer()pageappend(lthtmlgtltheadgtlttitlegt + title + lttitlegt)pageappend(ltheadgtltbody bgcolor=blanchedalmondgt)return pagetoString ()

Mostrar la paacutegina HTML con la debida informacioacuten de errorprivate String showHtmlForError(String message)

String title = ErrorStringBuffer page = new StringBuffer()pageappend (showHeader (title))try

Cree el objeto formulario HTMLHTMLForm errorForm = new HTMLForm(HTMLFormConverterExample)

Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formularioerrorFormsetMethod(HTMLFormMETHOD_POST)

Cree un panel de una sola columna al que se antildeadiraacuten los elementos HTMLGridLayoutFormPanel grid = new GridLayoutFormPanel()

Cree el elemento de texto para el error y antildeaacutedalo al panelHTMLText text = new HTMLText(message)textsetBold(true)textsetColor(Colorred)gridaddElement(text)

Cree el botoacuten para volver a principal y antildeaacutedalo al panelgridaddElement(new SubmitFormInput(returnToMain Volver a principal))

Antildeada el panel al formulario HTMLerrorFormaddElement(grid)

pageappend(errorFormtoString())catch (Exception e)

eprintStackTrace ()pageappend(ltbodygtlthtmlgt)return pagetoString()

Mostrar el formulario HTML para un registro individualprivate String showHtmlForRecord(HTMLTable[] htmlTable int position)

IBM Toolbox para Java 545

String title = Ejemplo de HTMLFormConverterStringBuffer page = new StringBuffer()pageappend (showHeader (title))

pageappend(lth1gt + title + lth1gt)

try

Cree el objeto formulario HTMLHTMLForm recForm = new HTMLForm(HTMLFormConverterExample)

Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formulariorecFormsetMethod(HTMLFormMETHOD_POST)

Defina un disentildeo de panel de una sola columna en el que se dispongan los elementos HTML generadosGridLayoutFormPanel grid = new GridLayoutFormPanel()

Cree y antildeada un pie de tabla que haga un seguimiento del registro actualHTMLText recNumText = new HTMLText(Nuacutemero de registro + (position + 1))recNumTextsetBold(true)gridaddElement(recNumText)

Defina un disentildeo de panel de dos columnas en el que disponer la tabla y el texto de comentario de la salida del conversorGridLayoutFormPanel tableGrid = new GridLayoutFormPanel(2)tableGridaddElement(htmlTable[position])HTMLText comment = new HTMLText( lt---- Salida de la clase HTMLFormConverter)commentsetBold(true)commentsetColor(Colorblue)tableGridaddElement(comment)

Antildeada la liacutenea de tabla al panelgridaddElement(tableGrid)

Defina un disentildeo de panel de una sola fila en el que deban disponerse los botones que permiten moverse por la lista de registrosLineLayoutFormPanel buttonLine = new LineLayoutFormPanel()buttonLineaddElement(new SubmitFormInput(getFirstRecord Primero))buttonLineaddElement(new SubmitFormInput(getPreviousRecord Anterior))buttonLineaddElement(new SubmitFormInput(getNextRecord Siguiente))buttonLineaddElement(new SubmitFormInput(getLastRecord Uacuteltimo))

Defina otro disentildeo de panel de una sola fila para el botoacuten Volver a principalLineLayoutFormPanel returnToMainLine = new LineLayoutFormPanel()returnToMainLineaddElement(new SubmitFormInput(returnToMain Volver a principal))

Antildeada al panel cuadriculado las liacuteneas que contienen los botonesgridaddElement(buttonLine)gridaddElement(returnToMainLine)

Antildeada el panel al formulariorecFormaddElement(grid)

Antildeada el formulario a la paacutegina HTMLpageappend(recFormtoString())

catch (Exception e)

eprintStackTrace ()

pageappend(ltbodygtlthtmlgt)return pagetoString()

546 IBM Toolbox para Java IBM Toolbox para Java

Mostrar el formulario HTML principal (solicite entrada para nombre de sistema archivo y biblioteca)private String showHtmlMain()

String title = Ejemplo de HTMLFormConverterStringBuffer page = new StringBuffer()pageappend (showHeader (title))

pageappend(lth1gt + title + lth1gt)

Cree el objeto formulario HTMLHTMLForm mainForm = new HTMLForm(HTMLFormConverterExample)

try

Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formulariomainFormsetMethod(HTMLFormMETHOD_POST)

Antildeada una descripcioacuten corta al formularioHTMLText desc =

new HTMLText(ltPgtEste ejemplo utiliza la clase HTMLFormConverter +para convertir los datos recuperados de un archivo de +servidor El conversor genera una matriz de tablas +HTML Cada entrada de la matriz es un registro del +archivo +Los registros se visualizan de uno en uno y hay +botones que permiten moverse hacia delante o hacia +atraacutes en la lista de registrosltPgt)

mainFormaddElement(desc)

Antildeada instrucciones al formularioHTMLText instr =

new HTMLText(ltPgtEspecifique el nombre del servidor +y el nombre del archivo y de la biblioteca +a los que desea acceder Luego pulse el botoacuten +Mostrar registros para continuarltPgt)

mainFormaddElement(instr)

Cree un panel con un disentildeo cuadriculado y antildeada los campos de entrada de sistema archivo y bibliotecaGridLayoutFormPanel panel = new GridLayoutFormPanel(2)

LabelFormElement sysPrompt = new LabelFormElement(Servidor )TextFormInput system = new TextFormInput(System)systemsetSize(10)

LabelFormElement filePrompt = new LabelFormElement(Nombre de archivo )TextFormInput file = new TextFormInput(File)filesetSize(10)

LabelFormElement libPrompt = new LabelFormElement(Nombre de biblioteca )TextFormInput library = new TextFormInput(Library)librarysetSize(10)

paneladdElement(sysPrompt)paneladdElement(system)paneladdElement(filePrompt)paneladdElement(file)paneladdElement(libPrompt)paneladdElement(library)

Antildeada el panel al formulariomainFormaddElement(panel)

IBM Toolbox para Java 547

Cree el botoacuten de someter y antildeaacutedalo al formulariomainFormaddElement(new SubmitFormInput(getRecords Mostrar registros))

catch (Exception e)

eprintStackTrace ()

pageappend(mainFormtoString())pageappend(ltbodygtlthtmlgt)

return pagetoString()

El HTML generado por el ejemplo anterior ofrece este aspectolttable border=0gtlttrgtlttdgtltbgtRecord number 1ltbgtlttdgtlttrgtlttrgtlttdgtlttable border=0gtlttrgtlttdgtlttable border=3 cellpadding=2 cellspacing=4gtlttrgtltthgtCUSNUMltthgtlttdgt839283lttdgtlttrgtlttrgtltthgtLSTNAMltthgtlttdgtJones lttdgtlttrgtlttrgtltthgtINITltthgtlttdgtB DlttdgtlttrgtlttrgtltthgtSTREETltthgtlttdgt21B NW 135 StlttdgtlttrgtlttrgtltthgtCITYltthgtlttdgtClay lttdgtlttrgtlttrgtltthgtSTATEltthgtlttdgtNYlttdgtlttrgtlttrgtltthgtZIPCODltthgtlttdgt13041lttdgtlttrgtlttrgtltthgtCDTLMTltthgtlttdgt400lttdgtlttrgtlttrgtltthgtCHGCODltthgtlttdgt1lttdgtlttrgtlttrgtltthgtBALDUEltthgtlttdgt10000lttdgtlttrgt

548 IBM Toolbox para Java IBM Toolbox para Java

lttrgtltthgtCDTDUEltthgtlttdgt000lttdgtlttrgtlttablegtlttdgtlttdgtltfont color=0000ffgt ltbgtlt-- Salida de la clase HTMLFormConverter--gtltbgtltfontgtlttdgtlttrgtlttablegtlttdgtlttrgtlttrgtltformgtlttdgtltinput type=submit name=getFirstRecord value=Primero gtltinput type=submit name=getPreviousRecord value=Anterior gtltinput type=submit name=getNextRecord value=Siguiente gtltinput type=submit name=getLastRecord value=Uacuteltimo gtltbr gtlttdgtlttrgtlttrgtlttdgtltinput type=submit name=returnToMain value=Volver a principal gtltbr gtlttdgtlttrgtlttablegtltformgt

Ejemplo de Luces encendidas para las clases HTML y servletEste ejemplo muestra coacutemo funcionan las clases HTML y servlet Es una visioacuten general Para ver esteejemplo compiacutelelo y ejecuacutetelo con un servidor Web y un navegador en marchaimport javaioIOExceptionimport javaioCharArrayWriterimport javaioPrintWriterimport javasqlimport javautilEnumerationimport javautilHashtableimport javaxservletimport javaxservlethttp

import comibmas400utilhtmlimport comibmas400utilservletimport comibmas400access

Un ejemplo de coacutemo se utilizan las clases de IBM Toolbox para Java en un servlet

Esquemas de las bases de datos SQL en el servidor

Archivo LICENSESBiblioteca LIGHTSON

Campo Tipo Longitud NulosLICENSE CHARACTER 10 NOT NULLUSER_ID CHARACTER 10 NOT NULL WITH DEFAULTE_MAIL CHARACTER 20 NOT NULLWHEN_ADDED DATE NOT NULL WITH DEFAULTTIME_STAMP TIMESTAMP NOT NULL WITH DEFAULT

Archivo REPORTSBiblioteca LIGHTSON

Campo Tipo Longitud NulosLICENSE CHARACTER 10 NOT NULL

IBM Toolbox para Java 549

REPORTER CHARACTER 10 NOT NULL WITH DEFAULTDATE_ADDED DATE NOT NULL WITH DEFAULTTIME_ADDED TIME NOT NULL WITH DEFAULTTIME_STAMP TIMESTAMP NOT NULL WITH DEFAULTLOCATION CHARACTER 10 NOT NULLCOLOR CHARACTER 10 NOT NULLCATEGORY CHARACTER 10 NOT NULL

public class LightsOn extends javaxservlethttpHttpServlet

private AS400 system_private String password_ contrasentildea del servidor y de la base de datos SQLprivate javasqlConnection databaseConnection_

public void destroy (ServletConfig config)

try if (databaseConnection_ = null)

databaseConnection_close()

catch (Exception e) eprintStackTrace ()

public void doGet (HttpServletRequest requestHttpServletResponse response)

throws IOException ServletException

HttpSession session = requestgetSession()

responsesetContentType(texthtml)PrintWriter out = responsegetWriter()

outprintln(showHtmlMain())

outclose()

public void doPost (HttpServletRequest request HttpServletResponse response)throws ServletException IOException

HttpSession session = requestgetSession(true)ServletOutputStream out = responsegetOutputStream()responsesetContentType(texthtml)

Hashtable parameters = getRequestParameters (request)

if (parameterscontainsKey(askingToReport))outprintln (showHtmlForReporting ())

else if (parameterscontainsKey(askingToRegister))outprintln (showHtmlForRegistering ())

else if (parameterscontainsKey(askingToUnregister))outprintln(showHtmlForUnregistering())

else if (parameterscontainsKey(askingToListRegistered))outprintln (showHtmlForListingAllRegistered ())

else if (parameterscontainsKey(askingToListReported))outprintln (showHtmlForListingAllReported ())

else if (parameterscontainsKey(returningToMain))outprintln (showHtmlMain ())

else Ninguno de los anteriores por lo que presupondremos que el usuario ha rellenado un formulario y estaacute sometiendo informacioacuten Tome la informacioacuten

550 IBM Toolbox para Java IBM Toolbox para Java

entrante y realice la accioacuten solicitada

if (parameterscontainsKey(submittingReport)) String acknowledgement = reportLightsOn (parameters out)outprintln (showAcknowledgement(acknowledgement))

else if (parameterscontainsKey(submittingRegistration)) String acknowledgement = registerLicense (parameters out)outprintln (showAcknowledgement(acknowledgement))

else if (parameterscontainsKey(submittingUnregistration)) String acknowledgement = unregisterLicense (parameters out)outprintln (showAcknowledgement(acknowledgement))

else outprintln (showAcknowledgement(Error (interno) +

Ni informar ni registrar +ni desregistrar ni listar registrados ni listar reportados))

outclose() Cierre la corriente de datos de salida

Obtiene los paraacutemetros a partir de una peticioacuten de servlet HTTP y los empaqueta en una tabla hash por comodidadprivate static Hashtable getRequestParameters (HttpServletRequest request)

Hashtable parameters = new Hashtable ()Enumeration enum = requestgetParameterNames()while (enumhasMoreElements())

String key = (String) enumnextElement()String value = requestgetParameter (key)parametersput (key value)

return parameters

Elimina blancos y guiones de un objeto String y lo pone todo en mayuacutesculasprivate static String normalize (String oldString)

if (oldString == null || oldStringlength() == 0) return nullStringBuffer newString = new StringBuffer ()for (int i=0 iltoldStringlength() i++)

if (oldStringcharAt(i) = rsquo rsquo ampamp oldStringcharAt(i) = rsquo-rsquo)newStringappend (oldStringcharAt(i))

return newStringtoString()toUpperCase()

Compone una lista de series entre comillas simplesprivate static String quoteList (String[] inList)

StringBuffer outList = new StringBuffer()for (int i=0 iltinListlength i++)

outListappend (rsquo + inList[i] + rsquo)if (iltinListlength-1)

outListappend ()return outListtoString()

IBM Toolbox para Java 551

public String getServletInfo ()

return Servlet Luces encendidas

private AS400 getSystem ()

try

if (system_ == null)

system_ = new AS400()

Nota seriacutea mejor obtener estos valores de un archivo de propiedadesString sysName = MYSYSTEM TBDString userId = MYUSERID TBDString password = MYPASSWD TBD

system_setSystemName(sysName)system_setUserId(userId)system_setPassword(password)password_ = password

system_connectService(AS400DATABASE)system_connectService(AS400FILE)system_addPasswordCacheEntry(sysName userId password_)

catch (Exception e) eprintStackTrace () system_ = null

return system_

public void init (ServletConfig config)

boolean rc

try superinit(config)

Registre el controlador JDBCtry

javasqlDriverManagerregisterDriver(new comibmas400accessAS400JDBCDriver())catch (Exception e)

Systemoutprintln(Controlador JDBC no encontrado)

catch (Exception e) eprintStackTrace()

private void getDatabaseConnection ()

if (databaseConnection_ == null) try

databaseConnection_ = javasqlDriverManagergetConnection(jdbcas400 + getSystem()getSystemName() + +LIGHTSON getSystem()getUserId() password_ )

552 IBM Toolbox para Java IBM Toolbox para Java

catch (Exception e) eprintStackTrace ()

private String registerLicense (Hashtable parameters ServletOutputStream out)

String licenseNum = normalize ((String)parametersget(licenseNum))String eMailAddress = (String)parametersget(eMailAddress)StringBuffer acknowledgement = new StringBuffer()

if (licenseNum == null || licenseNumlength() == 0)acknowledgementappend (Error nuacutemero de matriacutecula no especificadon)

if (eMailAddress == null || eMailAddresslength() == 0)acknowledgementappend (Error direccioacuten de correo-e para notificacioacuten no especificadan)

if (acknowledgementlength() == 0)

try

Inserte el nuevo nuacutemero de matriacutecula y la nueva direccioacuten de correo-e en la base de datosgetDatabaseConnection ()Statement sqlStatement = databaseConnection_createStatement()

Emita la peticioacutenString cmd = INSERT INTO LICENSES (LICENSE E_MAIL) VALUES ( +

quoteList(new String[] licenseNum eMailAddress) + )sqlStatementexecuteUpdate(cmd)sqlStatementclose()

Acuse el recibo de la peticioacutenacknowledgementappend (El nuacutemero de matriacutecula + licenseNum + se ha registrado)acknowledgementappend (La direccioacuten de correo-e para notificacioacuten es + eMailAddress)

catch (Exception e) eprintStackTrace ()

return acknowledgementtoString()

private String unregisterLicense (Hashtable parameters ServletOutputStream out)

String licenseNum = normalize ((String)parametersget(licenseNum))StringBuffer acknowledgement = new StringBuffer()

if (licenseNum == null || licenseNumlength() == 0)acknowledgementappend (Error nuacutemero de matriacutecula no especificadon)

if (acknowledgementlength() == 0)

try

Elimine de la base de datos el nuacutemero de matriacutecula y la direccioacuten de correo-e especificadosgetDatabaseConnection ()Statement sqlStatement = databaseConnection_createStatement()

Suprima la(s) fila(s) de la base de datos LICENSESString cmd = DELETE FROM LICENSES WHERE LICENSE = rsquo + licenseNum + rsquosqlStatementexecuteUpdate(cmd)sqlStatementclose()

Acuse el recibo de la peticioacutenacknowledgementappend (El nuacutemero de matriacutecula + licenseNum + se ha desregistrado)

catch (Exception e) eprintStackTrace ()

IBM Toolbox para Java 553

return acknowledgementtoString()

private String reportLightsOn (Hashtable parameters ServletOutputStream out)

String licenseNum = normalize ((String)parametersget(licenseNum))String location = (String)parametersget(location)String color = (String)parametersget(color)String category = (String)parametersget(category)StringBuffer acknowledgement = new StringBuffer()if (licenseNum == null || licenseNumlength() == 0)

acknowledgementappend (Error nuacutemero de matriacutecula no especificado)

if (acknowledgementlength() == 0)

try

Informe de luces encendidas para un vehiacuteculo especificadogetDatabaseConnection ()Statement sqlStatement = databaseConnection_createStatement()

Antildeada una entrada a la base de datos REPORTSString cmd = INSERT INTO REPORTS (LICENSE LOCATION COLOR CATEGORY) VALUES ( +

quoteList(new String[] licenseNum location color category) + )sqlStatementexecuteUpdate(cmd)sqlStatementclose()

Acuse el recibo de la peticioacutenacknowledgementappend (El nuacutemero de matriacutecula + licenseNum + se ha anotado en el informe iexclGracias)

catch (Exception e) eprintStackTrace ()

return acknowledgementtoString()

private String showHeader (String title)

StringBuffer page = new StringBuffer()pageappend(lthtmlgtltheadgtlttitlegt + title + lttitlegt)pageappend(ltheadgtltbody bgcolor=blanchedalmondgt)return pagetoString ()

private String showAcknowledgement (String acknowledgement)

String title = Acuse de reciboStringBuffer page = new StringBuffer()pageappend (showHeader (title))

try HTMLForm form = new HTMLForm(LightsOn)GridLayoutFormPanel grid = new GridLayoutFormPanel()HTMLText text = new HTMLText(acknowledgement)if (acknowledgementstartsWith(Error))

textsetBold(true)gridaddElement(text)gridaddElement(new SubmitFormInput(returningToMain Inicio))formaddElement(grid)pageappend(formtoString())

catch (Exception e) eprintStackTrace () pageappend(ltbodygtlthtmlgt)return pagetoString()

554 IBM Toolbox para Java IBM Toolbox para Java

private String showHtmlMain ()

String title = Herramienta Luces encendidasStringBuffer page = new StringBuffer()pageappend (showHeader (title))

pageappend(lth1gt + title + lth1gt)

Cree el objeto formulario HTMLHTMLForm mainForm = new HTMLForm(LightsOn)GridLayoutFormPanel grid = new GridLayoutFormPanel()

try Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formulariomainFormsetMethod(HTMLFormMETHOD_POST)

Cree algunos botonesgridaddElement(new SubmitFormInput(askingToReport Informe de un vehiacuteculo con luces encendidas))gridaddElement(new SubmitFormInput(askingToRegister Registrar mi nuacutemero de matriacutecula))gridaddElement(new SubmitFormInput(askingToUnregister Desregistrar mi nuacutemero de matriacutecula))gridaddElement(new SubmitFormInput(askingToListRegistered Listar todas las matriacuteculas registradas))gridaddElement(new SubmitFormInput(askingToListReported Listar todos los vehiacuteculos con luces encendidas))

mainFormaddElement(grid)catch (Exception e) eprintStackTrace ()

pageappend(mainFormtoString())pageappend(ltbodygtlthtmlgt)

return pagetoString()

private String showHtmlForReporting ()

String title = Informar de un vehiacuteculo con las luces encendidasStringBuffer page = new StringBuffer()pageappend (showHeader (title))

pageappend(lth1gt + title + lth1gt)

Cree el objeto formulario HTMLHTMLForm reportForm = new HTMLForm(LightsOn)GridLayoutFormPanel grid = new GridLayoutFormPanel(2)

try Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formularioreportFormsetMethod(HTMLFormMETHOD_POST)

TextFormInput licenseNum = new TextFormInput(licenseNum)licenseNumsetSize(10)licenseNumsetMaxLength(10)

Antildeada elementos al formulario de liacuteneagridaddElement(new LabelFormElement(Nuacutemero de matriacutecula de vehiacuteculo))gridaddElement(licenseNum)

Cree un grupo de botones de seleccioacuten y antildeada los botones de seleccioacutenRadioFormInputGroup colorGroup = new RadioFormInputGroup(color)

colorGroupadd(color white blanco true)colorGroupadd(color black negro false)colorGroupadd(color gray gris false)

IBM Toolbox para Java 555

colorGroupadd(color red rojo false)colorGroupadd(color yellow amarillo false)colorGroupadd(color green verde false)colorGroupadd(color blue azul false)colorGroupadd(color brown marroacuten false)

Cree una lista de seleccioacuten para la categoriacutea del vehiacuteculoSelectFormElement category = new SelectFormElement(category)categoryaddOption(sedan sedaacuten true)categoryaddOption(convertible convertibl) campo de 10 caracteres en DBcategoryaddOption(truck camioacuten)categoryaddOption(van furgoneta)categoryaddOption(SUV SUV)categoryaddOption(motorcycle moto)categoryaddOption(other otras)

Cree una lista de seleccioacuten para la ubicacioacuten del vehiacuteculo (nuacutemero del edificio)SelectFormElement location = new SelectFormElement(location)locationaddOption(001 001 true)locationaddOption(002 002)locationaddOption(003 003)locationaddOption(005 005)locationaddOption(006 006)locationaddOption(015 015)

gridaddElement(new LabelFormElement(Color))gridaddElement(colorGroup)

gridaddElement(new LabelFormElement(Tipo de vehiacuteculo))gridaddElement(category)

gridaddElement(new LabelFormElement(Edificio))gridaddElement(location)

gridaddElement(new SubmitFormInput(submittingReport Someter informe))gridaddElement(new SubmitFormInput(returningToMain Inicio))

reportFormaddElement(grid)catch (Exception e) eprintStackTrace ()

pageappend(reportFormtoString())

pageappend(ltbodygtlthtmlgt)

return pagetoString()

private String showHtmlForRegistering ()

String title = Registrar mi nuacutemero de matriacuteculaStringBuffer page = new StringBuffer()pageappend (showHeader (title))

pageappend(lth1gt + title + lth1gt)

Cree el objeto formulario HTMLHTMLForm registrationForm = new HTMLForm(LightsOn)

Defina un disentildeo de panel de dos columnas en el que disponer los elementos HTML generadosGridLayoutFormPanel grid = new GridLayoutFormPanel(2)

try Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formularioregistrationFormsetMethod(HTMLFormMETHOD_POST)

556 IBM Toolbox para Java IBM Toolbox para Java

TextFormInput licenseNum = new TextFormInput(licenseNum)licenseNumsetSize(10)licenseNumsetMaxLength(10)

TextFormInput eMailAddress = new TextFormInput(eMailAddress)eMailAddresssetMaxLength(20)

gridaddElement(new LabelFormElement(Nuacutemero de matriacutecula))gridaddElement(licenseNum)

gridaddElement(new LabelFormElement(Direccioacuten de notificacioacuten por correo-e))gridaddElement(eMailAddress)

gridaddElement(new SubmitFormInput(submittingRegistration Registrar))gridaddElement(new SubmitFormInput(returningToMain Inicio))

registrationFormaddElement(grid)catch (Exception e) eprintStackTrace ()

pageappend(registrationFormtoString())

pageappend(ltbodygtlthtmlgt)

return pagetoString()

private String showHtmlForUnregistering ()

String title = Desregistrar mi nuacutemero de matriacuteculaStringBuffer page = new StringBuffer()pageappend (showHeader (title))

pageappend(lth1gt + title + lth1gt)

Cree el objeto formulario HTMLHTMLForm unregistrationForm = new HTMLForm(LightsOn)GridLayoutFormPanel grid = new GridLayoutFormPanel(2)

try Configuacuterelo de tal manera que se llame a doPost() cuando se someta el formulariounregistrationFormsetMethod(HTMLFormMETHOD_POST)

Cree el objeto LineLayoutFormPanelTextFormInput licenseNum = new TextFormInput(licenseNum)licenseNumsetSize(10)licenseNumsetMaxLength(10)

gridaddElement(new LabelFormElement(Nuacutemero de matriacutecula de vehiacuteculo))gridaddElement(licenseNum)

gridaddElement(new SubmitFormInput(submittingUnregistration Desregistrar))gridaddElement(new SubmitFormInput(returningToMain Inicio))

unregistrationFormaddElement(grid)

catch (Exception e) eprintStackTrace ()CharArrayWriter cWriter = new CharArrayWriter()PrintWriter pWriter = new PrintWriter (cWriter true)eprintStackTrace (pWriter)pageappend (cWritertoString())

pageappend(unregistrationFormtoString())

IBM Toolbox para Java 557

pageappend(ltbodygtlthtmlgt)

return pagetoString()

private String showHtmlForListingAllRegistered ()

String title = Todas las matriacuteculas registradasStringBuffer page = new StringBuffer()pageappend (showHeader (title))

try

Cree el objeto formulario HTMLHTMLForm mainForm = new HTMLForm(LightsOn)

Defina un disentildeo de panel de una sola columna en el que se dispongan los elementos HTML generadosGridLayoutFormPanel grid = new GridLayoutFormPanel()

Especifique el disentildeo para la tabla generadaHTMLTable table = new HTMLTable()tablesetAlignment(HTMLConstantsLEFT)tablesetBorderWidth(3)

Cree y antildeada el pie y la cabecera de tablaHTMLTableCaption caption = new HTMLTableCaption()

captionsetAlignment(HTMLConstantsTOP)captionsetElement(title)tablesetCaption(caption)tablesetHeader(new String[] Matriacutecula Fecha de adicioacuten )

Cree el conversor que generaraacute la tabla HTML a partir del conjunto de resultados devueltos por la consulta de base de datosHTMLTableConverter converter = new HTMLTableConverter()convertersetTable(table)

getDatabaseConnection ()Statement sqlStatement = databaseConnection_createStatement()

Primero haga una preconsulta a la base de datos para verificar que no estaacute vaciacuteaString query = SELECT COUNT() FROM LICENSESResultSet rs = sqlStatementexecuteQuery (query)rsnext() situacutee el cursor en la primera filaint rowCount = rsgetInt(1)

if (rowCount == 0) pageappend (ltfont size=4 color=redgtNo se han notificado vehiacuteculosltfontgt)

else

query = SELECT LICENSEWHEN_ADDED FROM LICENSESrs = sqlStatementexecuteQuery (query)SQLResultSetRowData rowData = new SQLResultSetRowData (rs)HTMLTable[] generatedHtml = converterconvertToTables(rowData)gridaddElement(generatedHtml[0])

sqlStatementclose() Nota no se debe cerrar la sentencia mientras no se haya terminado de usar el conjunto de resultados

gridaddElement(new SubmitFormInput(returningToMain Inicio))

mainFormaddElement(grid)pageappend(mainFormtoString())

558 IBM Toolbox para Java IBM Toolbox para Java

catch (Exception e) eprintStackTrace () pageappend(ltbodygtlthtmlgt)return pagetoString()

private String showHtmlForListingAllReported ()

String title = Todos los vehiacuteculos con las luces encendidasStringBuffer page = new StringBuffer()pageappend (showHeader (title))

try

Cree el objeto formulario HTMLHTMLForm form = new HTMLForm(LightsOn)

Defina un disentildeo de panel de una sola columna en el que se dispongan los elementos HTML generadosGridLayoutFormPanel grid = new GridLayoutFormPanel()

Especifique el disentildeo para la tabla generadaHTMLTable table = new HTMLTable()tablesetAlignment(HTMLConstantsLEFT)tablesetBorderWidth(3)

Cree y antildeada el pie y la cabecera de tablaHTMLTableCaption caption = new HTMLTableCaption()

captionsetAlignment(HTMLConstantsTOP)captionsetElement(title)tablesetCaption(caption)tablesetHeader(new String[] Matriacutecula Color Categoriacutea Fecha Hora )

Cree el conversor que generaraacute la tabla HTML a partir del conjunto de resultados devueltos por la consulta de base de datosHTMLTableConverter converter = new HTMLTableConverter()convertersetTable(table)

getDatabaseConnection ()Statement sqlStatement = databaseConnection_createStatement()

Primero haga una preconsulta a la base de datos para verificar que no estaacute vaciacuteaString query = SELECT COUNT() FROM REPORTSResultSet rs = sqlStatementexecuteQuery (query)rsnext() situacutee el cursor en la primera filaint rowCount = rsgetInt(1)

if (rowCount == 0) pageappend (ltfont size=4 color=redgtNo se han notificado vehiacuteculosltfontgt)

else

query = SELECT LICENSECOLORCATEGORYDATE_ADDEDTIME_ADDED FROM REPORTSrs = sqlStatementexecuteQuery (query)SQLResultSetRowData rowData = new SQLResultSetRowData (rs)HTMLTable[] generatedHtml = converterconvertToTables(rowData)gridaddElement(generatedHtml[0])

sqlStatementclose() Nota no se debe cerrar la sentencia mientras no se haya terminado de usar el conjunto de resultados

gridaddElement(new SubmitFormInput(returningToMain Inicio))formaddElement(grid)pageappend(formtoString())

catch (Exception e) eprintStackTrace () pageappend(ltbodygtlthtmlgt)

IBM Toolbox para Java 559

return pagetoString()

Ejemplos simples de programacioacutenEstos ejemplos muestran algunas de los procedimientos por los que puede empezar a codificar suspropios programas Java utilizando las clases de IBM Toolbox para Java Estos ejemplos pensados para losprogramadores que simplemente comienzan a utilizar las clases de IBM Toolbox para Java contienendescripciones detalladas sobre las liacuteneas clave del coacutedigo

Si desea obtener ayuda sobre coacutemo empezar consulte Coacutemo escribir el primer programa de IBM Toolboxpara Java

Para obtener enlaces con muchos de los demaacutes ejemplos proporcionados en la informacioacuten de IBMToolbox para Java consulte los Ejemplos de coacutedigo

Utilice la lista siguiente para ver los ejemplos simples de programacioacutenv Llamadas a mandatosv Coacutemo se utilizan las colas de mensajesv Coacutemo se utilizan las clases de acceso a nivel de registrov Coacutemo se utilizan las clases JDBC para crear y llenar con datos una tabla

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Coacutemo escribir el primer programa de IBM Toolbox para JavaPara empezar este sencillo ejercicio debe tener instalado Java en la estacioacuten de trabajo

Puede decidir queacute versioacuten desea instalar consultando los Requisitos para ejecutar aplicaciones Java

Una vez que tenga instalado Java en el cliente lleve a cabo las tareas siguientes1 Copie jt400jar en la estacioacuten de trabajo2 Antildeada jt400jar a la CLASSPATH de la estacioacuten de trabajo especificando la viacutea de acceso completa del

archivo JAR a la CLASSPATH Por ejemplo si el archivo jt400jar reside en el directorio clib de laestacioacuten de trabajo (que ejecuta Windows) antildeada lo siguiente al final de la sentencia CLASSPATH

clibjt400jar

3 Abra un editor de texto y escriba el primer ejemplo simple de programacioacuten

560 IBM Toolbox para Java IBM Toolbox para Java

Nota aseguacuterese de no incluir el texto que hace referencia a las notas (por ejemplo Nota 1 Nota 2etc) Guarde el documento nuevo con el nombre CmdCalljava

4 Inicie una sesioacuten de mandato en la estacioacuten de trabajo y utilice el siguiente mandato para compilar elejemplo simple de programacioacuten

javac CmdCalljava

5 En la sesioacuten de mandato escriba el siguiente mandato para ejecutar el ejemplo simple deprogramacioacuten

java CmdCall

[ Ejemplos simples de programacioacuten ]

Ejemplo coacutemo se utiliza CommandCallEste ejemplo utiliza la clase de acceso de IBM Toolbox para Java CommandCall

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Este coacutedigo fuente es un ejemplo de Lista de trabajos (Job List) Las clases de acceso estaacuten en comibmas400accesspackage Importe este paquete para usar las clases de IBM Toolbox para Java

import comibmas400access

public class CmdCall

public static void main(String[] args)

Como sucede con otras clases Java las clases de IBM Toolbox para Java lanzan excepciones cuando se produce alguacuten error Estas se deben capturar mediante los programas que utilizan IBM Toolbox para Javatry Nota 1

AS400 system = new AS400()

CommandCall cc = new CommandCall(system) Nota 2

ccrun(CRTLIB MYLIB) Nota 3

AS400Message[] ml = ccgetMessageList() Nota 4

for (int i=0 iltmllength i++)

Systemoutprintln(ml[i]getText()) Nota 5

catch (Exception e)

eprintStackTrace()

Systemexit (0)

IBM Toolbox para Java 561

1 IBM Toolbox para Java utiliza el objeto AS400 para identificar el servidor destino Si construye elobjeto AS400 sin paraacutemetros IBM Toolbox para Java solicita el nombre de sistema el ID de usuario yla contrasentildea La clase AS400 tambieacuten incluye un constructor que toma el nombre de sistema el ID deusuario y la contrasentildea

2 Utilice el objeto CommandCall de IBM Toolbox para Java para enviar mandatos al servidor Al crearel objeto CommandCall le pasa un objeto AS400 para que sepa cuaacutel es el servidor destino delmandato

3 Utilice el meacutetodo run() en el objeto de llamada a mandato para ejecutar un mandato4 El resultado de ejecutar un mandato es una lista de mensajes de IBM i IBM Toolbox para Java

representa estos mensajes como objetos AS400Message Una vez completado el mandato el usuariorecibe los mensajes obtenidos del objeto CommandCall

5 Imprima el texto del mensaje Tambieacuten hay disponible otra informacioacuten como el ID de mensaje lagravedad del mensaje etc Este programa solo imprime el texto del mensaje

Ejemplo coacutemo se utilizan las colas de mensajes (parte 1 de 3)Este coacutedigo fuente es un ejemplo de cola de mensajes de IBM Toolbox para Java

[ Parte siguiente ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de coacutemo se utiliza la funcioacuten cola de mensajes de IBM Toolbox para Java Este fuente es un ejemplo de la cola de mensajes de IBM Toolbox para Java

package examples Nota 1

import javaioimport javautil

import comibmas400access Nota 2

public class displayMessages extends Object

public static void main(String[] parameters) Nota 3

displayMessages me = new displayMessages()meMain(parameters) Nota 4

Systemexit(0) Nota 5

void displayMessage()

void Main(String[] parms)

try Nota 6

562 IBM Toolbox para Java IBM Toolbox para Java

Aquiacute va el coacutedigo de IBM Toolbox para Javacatch (Exception e)

eprintStackTrace() Nota 7

1 Esta clase estaacute en el paquete examples Java utiliza paquetes para evitar que se produzcan conflictosde nombres entre los archivos de clase Java

2 Esta liacutenea pone a disposicioacuten de este programa todas las clases de IBM Toolbox para Java existentesen el paquete access Estas clases tienen en comuacuten el prefijo comibmas400 Mediante una sentenciade importacioacuten (import) el programa puede hacer referencia a una clase tan solo con utilizar sunombre no el nombre totalmente calificado Por ejemplo para hacer referencia a la clase AS400 bastacon utilizar el nombre AS400 en vez de comibmas400AS400

3 Esta clase tiene un meacutetodo main por lo tanto se puede ejecutar como aplicacioacuten Para invocar elprograma ejecute java examplesdisplayMessages Observe que las mayuacutesculasminuacutesculas debencoincidir al ejecutar el programa Debido a que se utiliza una clase de IBM Toolbox para Java elarchivo jt400zip debe estar en la variable de entorno de viacutea de acceso de clases

4 El meacutetodo main indicado en la nota 3 es estaacutetico Una de las restricciones que tienen los meacutetodosestaacuteticos es que solo pueden llamar a otros meacutetodos estaacuteticos de sus propias clases Para evitar estarestriccioacuten muchos programas Java crean un objeto y luego realizan el proceso de inicializacioacuten en unmeacutetodo llamado Main El meacutetodo Main() puede llamar a cualquier otro meacutetodo del objetodisplayMessages

5 IBM Toolbox para Java crea hebras en nombre de la aplicacioacuten para llevar a cabo la actividad de IBMToolbox para Java El programa si cuando va a terminar no emite Systemexit(0) no puede terminarcon normalidad Por ejemplo supongamos que este programa se ha ejecutado desde un indicador desolicitud del DOS de Windows 95 Sin esta liacutenea el indicador de solicitud de mandatos no retornacuando finaliza el programa El usuario tiene que pulsar las teclas Control-C para obtener unindicador de solicitud de mandatos

6 El coacutedigo de IBM Toolbox para Java lanza excepciones que deben ser capturadas por el programa7 Este programa visualiza el texto de la excepcioacuten mientras realiza el proceso de error Las excepciones

lanzadas por IBM Toolbox para Java estaacuten traducidas por lo que el texto de la excepcioacuten estaraacute en elidioma de la estacioacuten de trabajo

[ Parte siguiente ]

Ejemplo coacutemo se utilizan las colas de mensajes (parte 2 de 3)Este coacutedigo fuente es un ejemplo de cola de mensajes de IBM Toolbox para Java

[ Parte anterior | Parte siguiente ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de coacutemo se utiliza la funcioacuten cola de mensajes de IBM Toolbox para Java Este fuente es un ejemplo de la cola de mensajes de IBM Toolbox para Java

package examples

IBM Toolbox para Java 563

import javaioimport javautilimport comibmas400access

public class displayMessages extends Object

public static void main(String[] parameters)

displayMessages me = new displayMessages()

meMain(parameters)

Systemexit (0)

void displayMessage()

void Main(String[] parms)

try

AS400 system = new AS400() Nota 1

if (parmslength gt 0)systemsetSystemName(parms[0]) Nota 2

catch (Exception e)

eprintStackTrace()

1 Un programa utiliza el objeto AS400 para designar a queacute servidor debe conectarse Todos losprogramas que necesitan recursos de un servidor deben tener un objeto AS400 con una sola salvedadLa excepcioacuten es JDBC Si el programa utiliza JDBC el controlador JDBC de IBM Toolbox para Javacrea el objeto AS400 para el programa

2 Este programa supone que el primer paraacutemetro de liacutenea de mandatos es el nombre del servidor Si sepasa un paraacutemetro al programa se utiliza el meacutetodo setSystemName del objeto AS400 para establecerel nombre del sistema El objeto AS400 tambieacuten necesita informacioacuten de inicio de sesioacuten del servidorv Si el programa se estaacute ejecutando en una estacioacuten de trabajo el programa de IBM Toolbox para Java

solicita al usuario un ID de usuario y una contrasentildea Nota si no se especifica un nombre delsistema como paraacutemetro de liacutenea de mandatos el objeto AS400 tambieacuten solicita el nombre delsistema

v Si el programa se estaacute ejecutando en la JVM de IBM i se utiliza el ID de usuario y la contrasentildea delusuario que ejecuta el programa Java En este caso el usuario no especifica un nombre del sistemasino que deja que el nombre del sistema tome de forma predeterminada el nombre del sistema en elque se estaacute ejecutando el programa

[ Parte anterior | Parte siguiente ]

Ejemplo coacutemo se utilizan las colas de mensajes (parte 3 de 3)Este coacutedigo fuente es un ejemplo de cola de mensajes de IBM Toolbox para Java

[ Parte anterior ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

564 IBM Toolbox para Java IBM Toolbox para Java

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de coacutemo se utiliza la funcioacuten cola de mensajes de IBM Toolbox para Java Este fuente es un ejemplo de la cola de mensajes de IBM Toolbox para Java

package examples

import javaioimport javautilimport comibmas400access

public class displayMessages extends Object

public static void main(String[] parameters)

displayMessages me = new displayMessages()

meMain(parameters)

Systemexit (0)

void displayMessage()

void Main(String[] parms)

try

AS400 system = new AS400()

if (parmslength gt 0)systemsetSystemName(parms[0])

MessageQueue queue = new MessageQueue(system MessageQueueCURRENT) Nota 1

Enumeration e = queuegetMessages() Nota 2

while (ehasMoreElements())

QueuedMessage message = (QueuedMessage) enextElement() Nota 3Systemoutprintln(messagegetText()) Nota 4

catch (Exception e)

eprintStackTrace()

1 La finalidad de este programa es visualizar mensajes en una cola de mensajes de servidor Para estatarea se utiliza el objeto MessageQueue de IBM Toolbox para Java Cuando se construye el objeto colade mensajes los paraacutemetros son el objeto AS400 y el nombre de la cola de mensajes El objeto AS400

IBM Toolbox para Java 565

indica queacute servidor contiene el recurso y el nombre de la cola de mensajes identifica la cola demensajes del servidor En este caso se utiliza una constante que indica al objeto cola de mensajes queacceda a la cola del usuario que ha iniciado la sesioacuten

2 El objeto cola de mensajes obtiene una lista de mensajes del servidor En este momento se establece laconexioacuten con el servidor

3 Eliminar un mensaje de la lista El mensaje estaacute en el objeto QueuedMessage del programa de IBMToolbox para Java

4 Imprimir el texto del mensaje

[ Parte anterior ]

Ejemplo coacutemo se utiliza el acceso a nivel de registro (parte 1 de 2)Este programa solicitaraacute al usuario el nombre del servidor y el archivo que se debe visualizar El archivodebe existir y ha de contener registros Cada registro del archivo se visualizaraacute en Systemout

[ Parte siguiente ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de acceso a nivel de registro Este programa solicitaraacute el nombre del servidor y el archivo que se debe visualizar El archivo debe existir y ha de contener registros Cada registro del archivo se visualizaraacute en la salida del sistema (Systemout) Sintaxis de la llamada java RLSequentialAccessExample Este fuente es un ejemplo de RecordLevelAccess de IBM Toolbox para Java

import javaioimport javautilimport comibmas400access

public class RLSequentialAccessExample

public static void main(String[] parameters)

BufferedReader inputStream = new BufferedReader(new InputStreamReader(Systemin)1)

String systemName = String library = String file = String member =

Systemoutprintln()try

Systemoutprint(Nombre del sistema )systemName = inputStreamreadLine()

Systemoutprint(Biblioteca en la que existe el archivo )library = inputStreamreadLine()

Systemoutprint(Nombre de archivo )file = inputStreamreadLine()

Systemoutprint(Nombre de miembro (pulse Intro para el primer miembro) )

566 IBM Toolbox para Java IBM Toolbox para Java

member = inputStreamreadLine()if (memberequals())

member = FIRST

Systemoutprintln()catch (Exception e)

Systemoutprintln(Error al obtener entrada de usuario)eprintStackTrace()Systemexit (0)

AS400 system = new AS400(systemName) Nota 1try

systemconnectService(AS400RECORDACCESS)catch(Exception e)

Systemoutprintln(No ha sido posible conectar para acceso a nivel de registro)Systemoutprintln(Vea si en el archivo de instalacioacuten de la guiacutea del programador hay

instrucciones especiales relacionadas con el acceso a nivel de registro)eprintStackTrace()Systemexit (0)

QSYSObjectPathName filePathName = new QSYSObjectPathName(library file member MBR) Nota 2

SequentialFile theFile = new SequentialFile(system filePathNamegetPath()) Nota 3

AS400FileRecordDescription recordDescription =new AS400FileRecordDescription(system filePathNamegetPath())

try

RecordFormat[] format = recordDescriptionretrieveRecordFormat() Nota 4

theFilesetRecordFormat(format[0]) Nota 5

theFileopen(AS400FileREAD_ONLY 100 AS400FileCOMMIT_LOCK_LEVEL_NONE) Nota 6

Systemoutprintln(Se va a visualizar el archivo + librarytoUpperCase() + +filetoUpperCase() + ( + theFilegetMemberName()trim() + ))

Record record = theFilereadNext() Nota 7while (record = null)

Systemoutprintln(record)record = theFilereadNext()

Systemoutprintln()

theFileclose() Nota 8

systemdisconnectService(AS400RECORDACCESS) Nota 9catch (Exception e)

IBM Toolbox para Java 567

Systemoutprintln(Se produjo un error al intentar visualizar el archivo)eprintStackTrace()

try

Cierre el archivotheFileclose()

catch(Exception x)

systemdisconnectService(AS400RECORDACCESS)Systemexit (0)

Aseguacuterese de que finaliza la aplicacioacuten en el readme encontraraacute detallesSystemexit (0)

1 Esta liacutenea de coacutedigo crea un objeto AS400 y establece conexioacuten con el servicio de acceso a nivel deregistro

2 Esta liacutenea crea un objeto QSYSObjectPathName que obtiene el formato del nombre de viacutea de sistemade archivos integrado del objeto que se debe visualizar

3 Esta sentencia crea un objeto que representa un archivo secuencial existente en el servidor con el quese ha establecido conexioacuten Este archivo secuencial es el que se visualizaraacute

4 Estas liacuteneas recuperan el formato de registro del archivo5 Esta liacutenea establece el formato de registro del archivo6 Esta liacutenea abre para lectura el archivo seleccionado Leeraacute los registros de 100 en 100 cuando sea

posible7 Esta liacutenea de coacutedigo lee cada registro por orden8 Esta liacutenea cierra el archivo9 Esta liacutenea desconecta del servicio de acceso a nivel de registro

[ Parte siguiente ]

Ejemplo coacutemo se utiliza el acceso a nivel de registro (parte 2 de 2)Este ejemplo muestra la utilizacioacuten del acceso a nivel de registro

[ Parte anterior ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de acceso a nivel de registro Sintaxis de llamada java RLACreateExample

import javaioimport javautil

568 IBM Toolbox para Java IBM Toolbox para Java

import comibmas400access

public class RLACreateExample

public static void main(String[] args)

AS400 system = new AS400(args[0])String filePathName = QSYSLIBMYLIBLIBMYFILEFILEMBR1MBR Nota 1

try

SequentialFile theFile = new SequentialFile(system filePathName)

Inicio de nota 2CharacterFieldDescription lastNameField =

new CharacterFieldDescription(new AS400Text(20) APELLIDO)CharacterFieldDescription firstNameField =

new CharacterFieldDescription(new AS400Text(20) NOMBRE)BinaryFieldDescription yearsOld =

new BinaryFieldDescription(new AS400Bin4() EDAD)

RecordFormat fileFormat = new RecordFormat(RF)fileFormataddFieldDescription(lastNameField)fileFormataddFieldDescription(firstNameField)fileFormataddFieldDescription(yearsOld)

theFilecreate(fileFormat Un archivo de nombres y edades) Nota 2 Fin de nota 2

theFileopen(AS400FileREAD_WRITE 1 AS400FileCOMMIT_LOCK_LEVEL_NONE)

Inicio de nota 3Record newData = fileFormatgetNewRecord()newDatasetField(APELLIDO Doe)newDatasetField(NOMBRE John)newDatasetField(EDAD new Integer(63))

theFilewrite(newData) Nota 3 Fin de nota 3

theFileclose()catch(Exception e)

Systemoutprintln(Se ha producido un error )eprintStackTrace()

systemdisconnectService(AS400RECORDACCESS)

Systemexit (0)

1 (args[0]) en la liacutenea anterior y MYFILEFILE son fragmentos de coacutedigo necesarios para que se ejecuteel resto del ejemplo El programa supone que existe la biblioteca MYLIB en el servidor y que elusuario puede acceder a ella

2 El texto situado entre los comentarios Java que tienen la etiqueta Inicio de nota 2 y Fin de nota 2muestra coacutemo puede crear usted mismo un formato de registro en vez de obtenerlo de un archivoexistente La uacuteltima liacutenea de este bloque crea el archivo en el servidor

3 El texto situado entre los comentarios Java que tienen la etiqueta Inicio de nota 3 y Fin de nota 3muestra una forma de crear un registro y despueacutes escribirlo en un archivo

[ Parte anterior ]

IBM Toolbox para Java 569

Ejemplo coacutemo se utilizan las clases JDBC para crear y llenar con datos una tabla(parte 1 de 2)Este programa utiliza el controlador JDBC de IBM Toolbox para Java para crear y llenar una tabla

[ Parte siguiente ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de JDBCPopulate Este programa utiliza el controlador JDBC de IBM Toolbox para Java a fin de crear una tabla y llenarla con datos Sintaxis del mandato JDBCPopulate sistema nombreColeccioacuten nombreTabla Por ejemplo JDBCPopulate MySystem MyLibrary MyTable Este fuente es un ejemplo del controlador JDBC de IBM Toolbox para Java

import javasql

public class JDBCPopulate

private static final String words[]= Uno Dos Tres Cuatro Cinco

Seis Siete Ocho Nueve DiezOnce Doce Trece Catorce QuinceDieciseacuteis Diecisiete Dieciocho Diecinueve Veinte

public static void main (String[] parameters)

if (parameterslength = 3) Systemoutprintln()Systemoutprintln(Utilizacioacuten)Systemoutprintln()Systemoutprintln( JDBCPopulate system collectionName tableName)Systemoutprintln()Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln()Systemoutprintln( JDBCPopulate MySystem MyLibrary MyTable)Systemoutprintln()return

String system = parameters[0]String collectionName = parameters[1]String tableName = parameters[2]

Connection connection = null

try DriverManagerregisterDriver(new comibmas400accessAS400JDBCDriver()) Nota 1

connection = DriverManagergetConnection (jdbcas400+ system + + collectionName) Nota 2

570 IBM Toolbox para Java IBM Toolbox para Java

try Statement dropTable = connectioncreateStatement ()dropTableexecuteUpdate (DROP TABLE + tableName) Nota 3

catch (SQLException e)

Statement createTable = connectioncreateStatement ()createTableexecuteUpdate (CREATE TABLE + tableName

+ (I INTEGER WORD VARCHAR(20) SQUARE INTEGER + SQUAREROOT DOUBLE)) Nota 4

PreparedStatement insert = connectionprepareStatement (INSERT INTO + tableName + (I WORD SQUARE SQUAREROOT) + VALUES ( )) Nota 5

for (int i = 1 i lt= wordslength ++i) insertsetInt (1 i)insertsetString (2 words[i-1])insertsetInt (3 ii)insertsetDouble (4 Mathsqrt(i))insertexecuteUpdate () Nota 6

Systemoutprintln (La tabla + collectionName + + tableName+ se ha llenado con datos)

catch (Exception e) Systemoutprintln ()Systemoutprintln (ERROR + egetMessage())

finally

try if (connection = null)

connectionclose () Nota 7catch (SQLException e)

Hacer caso omiso

Systemexit (0)

1 Esta liacutenea carga el controlador JDBC de IBM Toolbox para Java Se necesita un controlador JDBC paraque haga de mediador entre JDBC y la base de datos con la que se trabaja

2 Esta sentencia conecta con la base de datos Apareceraacute una solicitud para el ID de usuario y lacontrasentildea Se proporciona un esquema SQL predeterminado para que no tenga usted que calificar elnombre de la tabla en las sentencias SQL

3 Estas liacuteneas suprimen la tabla si es que ya existe4 Estas liacuteneas crean la tabla5 Esta liacutenea prepara una sentencia que insertaraacute filas en la tabla Debido a que se va a ejecutar esta

sentencia varias veces debe utilizarse una sentencia preparada (PreparedStatement) y marcadores deparaacutemetro

6 Este bloque de coacutedigo llena con datos la tabla cada vez que se ejecuta el bucle el bloque inserta unafila en la tabla

IBM Toolbox para Java 571

7 Ahora que ya se ha creado la tabla y se ha llenado con datos esta sentencia cierra la conexioacuten con labase de datos

[ Parte siguiente ]

Ejemplo coacutemo se utilizan las clases JDBC para crear y llenar con datos una tabla(parte 2 de 2)Este programa utiliza el controlador JDBC de IBM Toolbox para Java para consultar una tabla y enviar sucontenido a la salida

[ Parte anterior ]

Puede utilizar el siguiente coacutedigo como ejemplo para su programa

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de JDBCQuery Este programa utiliza el controlador JDBC de IBM Toolbox para Java para consultar una tabla y enviar su contenido a la salida Sintaxis del mandato JDBCQuery sistema nombreColeccioacuten nombreTabla Por ejemplo JDBCQuery MySystem qiws qcustcdt Este fuente es un ejemplo del controlador JDBC de IBM Toolbox para Java

import javasql

public class JDBCQuery

Deacute formato a una serie (String) para que tenga la anchura especificadaprivate static String format (String s int width)

String formattedString

La serie es maacutes corta que la anchura especificada por lo que tenemos que rellenarla con blancosif (slength() lt width)

StringBuffer buffer = new StringBuffer (s)for (int i = slength() i lt width ++i)

bufferappend ( )formattedString = buffertoString()

En caso contrario tendremos que truncar la serieelse

formattedString = ssubstring (0 width)

return formattedString

public static void main (String[] parameters)

Compruebe los paraacutemetros de entradaif (parameterslength = 3)

Systemoutprintln()Systemoutprintln(Utilizacioacuten)Systemoutprintln()

572 IBM Toolbox para Java IBM Toolbox para Java

Systemoutprintln( JDBCQuery system collectionName tableName)Systemoutprintln()Systemoutprintln()Systemoutprintln(Por ejemplo)Systemoutprintln()Systemoutprintln()Systemoutprintln( JDBCQuery mySystem qiws qcustcdt)Systemoutprintln()return

String system = parameters[0]String collectionName = parameters[1]String tableName = parameters[2]

Connection connection = null

try

DriverManagerregisterDriver(new comibmas400accessAS400JDBCDriver()) Nota 1

Obtenga una conexioacuten con la base de datos Debido a que no proporcionamos un ID de usuario ni una contrasentildea apareceraacute una solicitudconnection = DriverManagergetConnection (jdbcas400 + system)DatabaseMetaData dmd = connectiongetMetaData () Nota 2

Ejecute la consultaStatement select = connectioncreateStatement ()ResultSet rs = selectexecuteQuery (SELECT FROM

+ collectionName + dmdgetCatalogSeparator() + tableName) Nota 3

Obtenga informacioacuten sobre el conjunto de resultados Establezca que la anchura de la columna sea la longitud mayor de las dos la longitud de la etiqueta o la longitud de los datosResultSetMetaData rsmd = rsgetMetaData ()int columnCount = rsmdgetColumnCount () Nota 4String[] columnLabels = new String[columnCount]int[] columnWidths = new int[columnCount]for (int i = 1 i lt= columnCount ++i)

columnLabels[i-1] = rsmdgetColumnLabel (i)columnWidths[i-1] = Mathmax (columnLabels[i-1]length()

rsmdgetColumnDisplaySize (i)) Nota 5

Enviacutee las cabeceras de columna a la salidafor (int i = 1 i lt= columnCount ++i)

Systemoutprint (format (rsmdgetColumnLabel(i) columnWidths[i-1]))Systemoutprint ( )

Systemoutprintln ()

Enviacutee una liacutenea de guiones a la salidaStringBuffer dashedLinefor (int i = 1 i lt= columnCount ++i)

for (int j = 1 j lt= columnWidths[i-1] ++j)Systemoutprint (-)

Systemoutprint ( )Systemoutprintln ()

Itere a traveacutes de las filas del conjunto de resultados y enviacutee las columnas que hay en cada fila a la salidawhile (rsnext ())

for (int i = 1 i lt= columnCount ++i) String value = rsgetString (i)if (rswasNull ())

value = ltnullgt Nota 6

IBM Toolbox para Java 573

Systemoutprint (format (value columnWidths[i-1]))Systemoutprint ( )

Systemoutprintln ()

catch (Exception e) Systemoutprintln ()Systemoutprintln (ERROR + egetMessage())

finally

Borretry

if (connection = null)connectionclose ()

catch (SQLException e)

Hacer caso omiso

Systemexit (0)

1 Esta liacutenea carga el controlador JDBC de IBM Toolbox para Java El controlador JDBC hace demediador entre JDBC y la base de datos con la que estaacute trabajando

2 Esta liacutenea recupera los metadatos de la conexioacuten los metadatos son un objeto que describe muchas delas caracteriacutesticas de la base de datos

3 Esta sentencia ejecuta la consulta en la tabla especificada4 Estas liacuteneas recuperan informacioacuten acerca de la tabla5 Estas liacuteneas establecen la anchura de la columna para que sea igual a la longitud mayor de estas dos

la longitud de la etiqueta o la longitud de los datos6 Este bloque de coacutedigo itera a traveacutes de todas las filas de la tabla y visualiza el contenido de cada

columna de cada fila

[ Parte anterior ]

Ejemplos consejos para la programacioacutenEn esta seccioacuten figura una lista de los ejemplos de coacutedigo que se proporcionan en toda la documentacioacutende sugerencias de programacioacuten de IBM Toolbox para Java

Gestioacuten de conexionesv Ejemplo Establecer una conexioacuten con el sistema con un objeto CommandCallv Ejemplo Establecer dos conexiones con el sistema con un objeto CommandCallv Ejemplo Crear los objetos CommandCall y IFSFileInputStream con un objeto AS400v Ejemplo Utilizar AS400ConnectionPool para preconectar con el sistemav Ejemplo Utilizar AS400ConnectionPool para preconectar con un servicio especiacutefico del sistema y

despueacutes reutilizar la conexioacuten

Inicio y finalizacioacuten de las conexionesv Ejemplo coacutemo se preconecta un programa Java al sistemav Ejemplo Coacutemo se desconecta un programa Java del sistema

574 IBM Toolbox para Java IBM Toolbox para Java

v Ejemplo Coacutemo se desconecta y reconecta un programa Java al sistema con disconnectService() y run()v Ejemplo Coacutemo se desconecta un programa Java del sistema y no se puede reconectar

Excepcionesv Ejemplo coacutemo se utilizan las excepciones

Rastreov Ejemplo coacutemo se utiliza el rastreov Ejemplo coacutemo se utiliza setTraceOn()v Ejemplo coacutemo se utiliza el rastreo de componente

Optimizacioacutenv Ejemplo crear dos objetos AS400v Ejemplo coacutemo se utiliza un objeto AS400 para representar un segundo servidor

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplos clases de utilidadesEn este tema figura una lista de los ejemplos de coacutedigo que se proporcionan en toda la documentacioacuten delas clases de utilidades de IBM Toolbox para Java

AS400ToolboxJarMakerv Ejemplo extraer AS400class y todas sus clases dependientes de jt400jarv Ejemplo subdividir jt400jar en un conjunto de archivos de 300 KBv Ejemplo eliminar archivos no utilizados de un archivo JARv Ejemplo crear un archivo JAR que tenga 400 KB menos a base de omitir las tablas de conversioacuten con el

paraacutemetro -ccsid

CommandPrompterv Ejemplo coacutemo se utiliza CommandPrompter para solicitar y ejecutar un mandato

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM Toolbox para Java 575

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo coacutemo se utiliza CommandPrompterEste programa de ejemplo utiliza las clases CommandPrompter CommandCall y AS400Message parasolicitar un mandato ejecutar el mandato y visualizar los mensajes devueltos si el mandato no se haejecutado

Nota lea la declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo para obtenerinformacioacuten legal importante Ejemplo de CommandPrompter Este programa utiliza CommandPrompter CommandCall y AS400Message para solicitar un mandato ejecutar el mandato y visualizar los mensajes devueltos si el mandato no se ejecuta Sintaxis del mandato Prompter serieMandato

import comibmas400uiutilCommandPrompterimport comibmas400accessAS400import comibmas400accessAS400Messageimport comibmas400accessCommandCallimport javaxswingJFrameimport javaawtFlowLayoutpublic class Prompterpublic static void main ( String args[] ) throws Exception

JFrame frame = new JFrame()framegetContentPane()setLayout(new FlowLayout())AS400 system = new AS400(mySystem myUserId myPasswd)String cmdName = args[0]

Launch the CommandPrompterCommandPrompter cp = new CommandPrompter(frame system cmdName)if (cpshowDialog() == CommandPrompterOK)

String cmdString = cpgetCommandString()Systemoutprintln(Serie del mandato + cmdString)

Ejecute el mandato construido en el programa de solicitudCommandCall cmd = new CommandCall(system cmdString)if (cmdrun())

AS400Message[] msgList = cmdgetMessageList()for (int i = 0 i lt msgListlength ++i)

Systemoutprintln(msgList[i]getText())

576 IBM Toolbox para Java IBM Toolbox para Java

Systemexit (0)

Ejemplos XPCMLEn esta seccioacuten figura una lista de los ejemplos de coacutedigo que se proporcionan en toda la documentacioacutendel componente XPCML de IBM Toolbox para Javav ldquoEjemplo condensar un documento XPCML existenterdquo en la paacutegina 583v ldquoEjemplo condensar un documento XPCML existente con coacutedigo Java incluidordquo en la paacutegina 583v ldquoEjemplo coacutemo se utiliza fuente XPCML condensado para crear un objeto ProgramCallDocumentrdquo en

la paacutegina 586v ldquoEjemplo obtener los resultados de una llamada a programa en formato de XPCML condensadordquo en la

paacutegina 586v ldquoEjemplo recuperar los resultados de una llamada a programa en formato de XPCMLrdquov ldquoEjemplo pasar valores de paraacutemetros como XPCMLrdquo en la paacutegina 580v ldquoEjemplos pasar matrices de valores de paraacutemetros como XPCMLrdquo en la paacutegina 581v ldquoEjemplo convertir un documento PCML en un documento XPCMLrdquo en la paacutegina 354

La siguiente declaracioacuten de limitacioacuten de responsabilidad es vaacutelida para todos los ejemplos de IBMToolbox para Java

Declaracioacuten de limitacioacuten de responsabilidad de ejemplos de coacutedigo

IBM le concede una licencia de copyright no exclusiva de uso de todos los ejemplos de coacutedigo deprogramacioacuten a partir de los cuales puede generar funciones similares adaptadas a sus propiasnecesidades

IBM proporciona todo el coacutedigo de ejemplo solo a efectos ilustrativos Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones IBM por lo tanto no puede garantizarni dar por sentada la fiabilidad la utilidad ni el funcionamiento de estos programas

Todos los programas contenidos aquiacute se proporcionan TAL CUAL sin garantiacuteas de ninguacuten tipoLas garantiacuteas impliacutecitas de no incumplimiento comerciabilidad y adecuacioacuten para un findeterminado se especifican expliacutecitamente como declaraciones de limitacioacuten de responsabilidad

Ejemplo recuperar los resultados de una llamada a programa en formato deXPCMLEl ejemplo siguiente muestra coacutemo se puede construir un objeto ProgramCallDocument XPCML llamar aun programa de IBM i y recuperar los resultados de la llamada a programa en formato de XPCML

El ejemplo da por supuestos los siguientes componentesv El documento XPCML qgyolausxpcml que define las especificaciones del programa y los paraacutemetros

con valores de entradav El coacutedigo Java que construye un objeto ProgramCallDocument utiliza el archivo XPCML y a

continuacioacuten llama al programa QGYOLAUSv Los resultados de la llamada a programa que el coacutedigo Java genera en formato de XPCML y almacena

en el archivo XPCMLOutxpcml

Fiacutejese en coacutemo se especifican los datos de matriz en el fuente XPCML original y el generado El elementoqgyolausreceiver un paraacutemetro de salida es un objeto XPCML arrayOfStructParm con un atributo que

IBM Toolbox para Java 577

establece el nuacutemero en listInforcdsReturned El coacutedigo de ejemplo siguiente solo contiene una parte de lasalida de QGYOLAUS Si el ejemplo incluyera toda la salida el coacutedigo podriacutea contener 89 usuarios bajoel coacutedigo XPCML ltarrayOfStructParmgt

Para las matrices de estructuras XPCML utiliza el coacutedigo XPCML ltstruct_igt para delimitar cada uno delos elementos structParm Cada uno de los coacutedigos ltstruct_igt indica que los datos que figuran en suinterior constituyen un elemento de tipo struct autu0150 El atributo de iacutendice (index) del coacutedigoltstruct_igt especifica el elemento de la matriz para el dato de tipo struct

En el caso de las matrices de tipos simples tales como arrayOfStringParm arrayOfIntParm etc el coacutedigoXPCML ltigt indica elementos de matriz

Documento XPCML qgyolausxpcmlltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=xpcmlxsd version=40gt

lt-- Fuente XPCML para llamar a la API Abrir lista de usuarios autorizados --gtlt-- (QGYOLAUS) API --gt

lt-- Formato AUTU0150 - Hay otros formatos disponibles --gtltstruct name=autu0150gt

ltstringParm name=name length=10gtltstringParm name=userOrGroup length=1gtltstringParm name=groupMembers length=1gtltstringParm name=description length=50gt

ltstructgt

lt-- Estructura para listar informacioacuten (comuacuten a todas las API de tipo Abrir lista) --gtltstruct name=listInfogt

ltintParm name=totalRcdsgtltintParm name=rcdsReturnedgt0ltrcdsReturnedgtlthexBinaryParm name=rqsHandle totalBytes=4gtltintParm name=rcdLengthgtltstringParm name=infoComplete length=1gtltstringParm name=dateCreated length=7gtltstringParm name=timeCreated length=6gtltstringParm name=listStatus length=1gtlthexBinaryParm totalBytes=1gtltunsignedIntParm name=lengthOfInfogtltintParm name=firstRecordgtlthexBinaryParm totalBytes=40gt

ltstructgt

lt-- Programa QGYOLAUS y su lista de paraacutemetros para recuperar --gtlt-- el formato AUTU0150 --gt

ltprogram name=QGYOLAUS path=QSYSlibQGYlibQGYOLAUSpgmparseOrder=listInfo receivergt

ltparameterListgt Valores de salida --- matriz del elemento struct autu0150ltarrayOfStructParm name=receiver count=listInforcdsReturned

passDirection=out outputSize=receiverLength struct=autu0150gt Valores de entradaltintParm name=receiverLength passDirection=ingt16384ltintParmgtltstructParm name=listInfo passDirection=out struct=listInfogt Valores de entradaltintParm name=rcdsToReturn passDirection=ingt264ltintParmgtltstringParm name=format passDirection=in length=10gt

AUTU0150ltstringParmgtltstringParm name=selection passDirection=in length=10gt

USERltstringParmgtltstringParm name=member passDirection=in length=10gt

578 IBM Toolbox para Java IBM Toolbox para Java

NONEltstringParmgtltintParm name=errorCode passDirection=ingt0ltintParmgt

ltparameterListgtltprogramgt

Coacutedigo Java que construye el objeto ProgramCallDocument y utiliza el fuente XPCMLpara llamar al programa QGYOLAUS

system = new AS400() Cree un objeto ProgramCallDocument en el que se analizaraacute el archivoProgramCallDocument xpcmlDoc =

new ProgramCallDocument(system QGYOLAUSxpcml)

Llame a QGYOLAUSboolean rc = xpcmlDoccallProgram(QGYOLAUS)

Obtenga los resultados de la llamada a programa en formato de XPCML y guaacuterdelos en el archivo XPCMLOutxpcmlif (rc) El programa se ha ejecutado satisfactoriamente

xpcmlDocgenerateXPCML(QGYOLAUSXPCMLOutxpcml)

Resultados de la llamada a programa generados en formato de XPCML y almacenados enel archivo XPCMLOutxpcml

ltxml version=10 gtltxpcml version=40

xmlnsxsi=httpwwww3org2001XMLSchema-instancexsinoNamespaceSchemaLocation=rsquoxpcmlxsdrsquo gt

ltprogram name=QGYOLAUS path=QSYSlibQGYlibQGYOLAUSpgmparseOrder=listInfo receivergt

ltparameterListgtltarrayOfStructParm name=receiver passDirection=out

count=listInforcdsReturned outputSize=receiverLengthstruct=autu0150gt

ltstruct_i index=0gtltstringParm name=name length=10gtJANEDOWltstringParmgtltstringParm name=userOrGroup length=1gt0ltstringParmgtltstringParm name=groupMembers length=1gt0ltstringParmgtltstringParm name=description length=50gt

Jane DoeltstringParmgtltstruct_igtltstruct_i index=1gt

ltstringParm name=name length=10gtBOBSltstringParmgtltstringParm name=userOrGroup length=1gt0ltstringParmgtltstringParm name=groupMembers length=1gt0ltstringParmgtltstringParm name=description length=50gt

Bob SmithltstringParmgtltstruct_igt

lt-- Aquiacute puede haber maacutes registros seguacuten el nuacutemero de usuarios de la salida --gtlt-- En este caso figuran 89 registros de usuario --gt

ltarrayOfStructParmgt lt-- Fin de la matriz de usuarios --gtltintParm name=receiverLength passDirection=ingt

16384ltintParmgtltstructParm name=listInfo passDirection=out

struct=listInfogtltintParm name=totalRcdsgt89ltintParmgtltintParm name=rcdsReturnedgt89ltintParmgtlthexBinaryParm name=rqsHandle totalBytes=4gt

00000001==lthexBinaryParmgtltintParm name=rcdLengthgt62ltintParmgtltstringParm name=infoComplete length=1gtCltstringParmgtltstringParm name=dateCreated length=7gt

1030321ltstringParmgtltstringParm name=timeCreated length=6gt

IBM Toolbox para Java 579

120927ltstringParmgtltstringParm name=listStatus length=1gt2ltstringParmgtlthexBinaryParm totalBytes=1gtlthexBinaryParmgtltunsignedIntParm name=lengthOfInfogt

5518ltunsignedIntParmgtltintParm name=firstRecordgt1ltintParmgt

ltstructParmgtltintParm name=rcdsToReturn passDirection=ingt264ltintParmgtltstringParm name=format passDirection=in length=10gt

AUTU0150ltstringParmgtltstringParm name=selection passDirection=in length=10gt

USERltstringParmgtltstringParm name=member passDirection=in length=10gt

NONEltstringParmgtltintParm name=errorCode passDirection=ingt0ltintParmgt

ltparameterListgtltprogramgt

ltxpcmlgt

Ejemplo pasar valores de paraacutemetros como XPCMLLos valores de paraacutemetros de programas se pueden establecer en el archivo fuente XPCML Cuando selee y se analiza el archivo XPCML automaacuteticamente se llama al meacutetodo setValue deProgramCallDocument para cada uno de los paraacutemetros cuyo valor se ha pasado como XPCML De estemodo el usuario se ahorra el tener que escribir coacutedigo Java para establecer los valores de complicadasestructuras y matrices

En los ejemplos siguientes el fuente XPCML llama a dos programas distintos prog1 y prog2 Ambosprogramas utilizan el paraacutemetro de entrada s1Ref El primer ejemplo establece valores distintos paras1Ref para cada llamada a programa El segundo ejemplo especifica el mismo valor para s1Ref para cadallamada a programa y muestra una buena forma de establecer valores de datos constantes para losparaacutemetros de entrada

Ejemplo pasar valores distintos para los paraacutemetros de entrada

En el ejemplo siguiente una vez que el analizador XML lee y analiza el documento el valor del elementoprog1s1Refs2Refs2p1[0] es prog1Val_1 y el valor del elemento prog1s1Refs2Refs2p1[1] es prog1Val_2

ltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instancexsinoNamespaceSchemaLocation=xpcmlxsd version=40gt

ltstruct name=s1gtltstringParm name=s1p1gtltstructParm name=s2Ref struct=s2gt

ltstructgt

ltstruct name=s2gtltstringParm name=s2p1 length=10gtltarrayOfStringParm name=parm1 count=2gt

ltstructgt

ltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgtltparameterListgt

ltstructParm name=s1Ref struct=s1 passDirection=in gtltstringParm name=s1p1gtprog1ValltstringParmgtltstructParm name=s2Ref struct=s2gt

ltstringParm name=s2p1 length=10gtprog1ValltstringParmgtltarrayOfStringParm name=parm1 count=2gt

ltigtprog1Val_1ltigtltigtprog1Val_2ltigt

ltarrayOfStringParmgtltstructParmgt

ltstructParmgtltparameterListgtltprogramgt

580 IBM Toolbox para Java IBM Toolbox para Java

ltprogram name=prog2 path=QSYSLIBW95LIBLIBPROG1PGMgtltparameterListgt

ltstructParm name=s1Ref struct=s1 passDirection=in gtltstringParm name=s1p1gtprog2ValltstringParmgtltstructParm name=s2Ref struct=s2gt

ltstringParm name=s2p1 length=10gtprog2ValltstringParmgtltarrayOfStringParm name=parm1 count=2gt

ltigtprog2Val_1ltigtltigtprog2Val_2ltigt

ltarrayOfStringParmgtltstructParmgt

ltstructParmgtltparameterListgtltprogramgtltxpcmlgt

Ejemplo pasar valores constantes para los paraacutemetros de entrada

En el ejemplo siguiente una vez que el analizador XML lee y analiza el documento el valor del elementoprog1s1Refs2Refs2p1[0] es constantVal_1 y el valor del elemento prog1s1Refs2Refs2p1[1] esconstantVal_2

ltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instancexsinoNamespaceSchemaLocation=xpcmlxsd version=40gt

ltstruct name=s1 gtltstringParm name=s1p1gtconstantValltstringParmgtltstructParm name=s2Ref struct=s2gt

ltstructgt

ltstruct name=s2gtltstringParm name=s2p1 length=10gtconstantValltstringParmgtltarrayOfStringParm name=parm1 count=2gt

ltigtconstantVal_1ltigtltigtconstantVal_2ltigt

ltarrayOfStringParmgtltstructgt

ltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgtltparameterListgt

ltstructParm name=s1Ref struct=s1 passDirection=in gtltparameterListgtltprogramgt

ltprogram name=prog2 path=QSYSLIBW95LIBLIBPROG1PGMgtltparameterListgt

ltstructParm name=s1Ref struct=s1 passDirection=in gtltparameterListgtltprogramgtltxpcmlgt

Ejemplos pasar matrices de valores de paraacutemetros como XPCMLEl ejemplo siguiente muestra coacutemo se pasan matrices de valores de paraacutemetros utilizando los datos dematriz structParm y una matriz de elementos struct

Si utiliza XPCML para pasar datos de matriz debe utilizar el atributo countv Especifique el atributo count en el elemento de matrizv Establezca el atributo count como el nuacutemero de elementos que contiene la matriz en el momento de

analizar el documentoltxml version=10 encoding=UTF-8gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=xpcmlxsd version=40gt

IBM Toolbox para Java 581

ltstruct name=s1 gtltstringParm name=s1p1gtltstruct name=s1Arraygt

ltstringParm name=s1Ap1gtltstructgt

ltstructgt

ltstruct name=s2gtltstringParm name=s2p1gt

ltstructgt

ltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgtltparameterListgt

ltstructParm name=s1Ref struct=s1 passDirection=in gtltstringParm name=s1p1gtValue 1ltstringParmgtltarrayOfStruct name=s1Array count=2gt

ltstruct_igtltstringParm name=s1Ap1gtValue 1ltstringParmgt

ltstruct_igtltstruct_igt

ltstringParm name=s1Ap1gtValue 2ltstringParmgtltstruct_igt

ltarrayOfStructgtltstructParmgtltarrayOfStructParm name=s2Ref struct=s2 count=2 passDirection=in gt

ltstruct_igtltstringParm name=s2p1gtValue 1ltstringParmgt

ltstruct_igtltstruct_igt

ltstringParm name=s2p1gtValue 2ltstringParmgtltstruct_igt

ltarrayOfStructParmgtltparameterListgtltprogramgtltxpcmlgt

Por ejemplo el siguiente fuente XPCML especifica una matriz de tres elementos intParm y establece elprimer elemento en 12 el segundo en 100 y el tercero en 4

ltxml version=10 gtltxpcml version=40 xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=rsquoxpcmlxsdrsquo gtltprogram name=prog1 path=QSYSlibMYLIGlibPROG1pgmgtltparameterListgt

ltarrayOfIntParm name=intArray count=3gtltigt12ltigtltigt100ltigtltigt4ltigt

ltarrayOfIntParmgtltparameterListgtltprogramgt

ltxpcmlgt

Utilizar el atributo index de los coacutedigos ltigt y ltstruct_igt para establecer valores dematrices

Puede utilizar el atributo index de los coacutedigos ltigt y ltstruct_igt para establecer valores de matrices En elejemplo siguiente el fuente XPCML establece el primer elemento de la matriz en 4 el segundo en 100 yel tercero en 12

ltxml version=10 gtltxpcml version=40 xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=rsquoxpcmlxsdrsquo gt

ltprogram name=prog1 path=QSYSlibMYLIGlibPROG1pgmgtltparameterListgt

582 IBM Toolbox para Java IBM Toolbox para Java

ltarrayOfIntParm name=intArray count=3gtlti index=2gt12ltigtlti index=1gt100ltigtlti index=0gt4ltigt

ltarrayOfIntParmgtltparameterListgtltprogramgt

ltxpcmlgt

Ejemplo condensar un documento XPCML existenteEl ejemplo siguiente muestra coacutemo se puede condensar un documento XPCML existente El ejemplocontiene el fuente XPCML original el fuente XPCML condensado final y el esquema ampliado

Fuente XPCML originalltxml version=10 encoding=UTF-8gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=xpcmlxsd version=40gtltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgt

ltparameterListgtltstringParm name=parm1 passDirection=in passMode=value

minvrm=V5R2M0 ccsid=37 length=10gtValue 1ltstringParmgtltparameterListgt

ltprogramgtltxpcmlgt

Fuente XPCML condensadoltxml version=10 encoding=UTF-8gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=myXSDxsd version=40gtltprogram name=prog1 path=QSYSLIBW95LIBLIBPROG1PGMgt

ltparameterListgtltparm1_gtValue 1ltparm1_gt

ltparameterListgtltprogramgtltxpcmlgt

Esquema generadolt-- Definicioacuten XSD de parm1 --gtltxsschema xmlnsxs=rsquohttpwwww3org2001XMLSchemarsquogtlt-- Enlace de retorno a XPCMLxsd --gtltxsinclude schemaLocation=rsquoxpcmlxsdrsquogtltxselement name=parm1_ substitutionGroup=stringParmGroup gtltxscomplexTypegt

ltxssimpleContentgtltxsrestriction base=stringParmTypegt

lt-- Atributos definidos para parm1 --gtltxsattribute name=name type=string50 fixed=parm1 gtltxsattribute name=length type=xsstring fixed=10 gtltxsattribute name=passMode type=xsstring fixed=value gtltxsattribute name=ccsid type=xsstring fixed=37 gtltxsattribute name=minvrm type=xsstring fixed=V5R2M0 gt

ltxsrestrictiongtltxssimpleContentgt

ltxscomplexTypegtltxselementgt

ltschemagt

Ejemplo condensar un documento XPCML existente con coacutedigo Java incluidoEl ejemplo siguiente muestra coacutemo se puede condensar un documento XPCML existente El ejemplocontiene el fuente XPCML original el fuente XPCML condensado final el coacutedigo Java que llama acondenseXPCML() y varias de las nuevas definiciones de tipo generadas del esquema ampliado

IBM Toolbox para Java 583

Fuente XPCML originallt-- Fuente XPCML totalmente especificado --gtltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=xpcmlxsd version=40gt

ltstruct name=qualifiedJobNamegtltstringParm name=jobName length=10gtltstringParmgtltstringParm name=userName length=10gtltstringParm name=jobNumber length=6gt

ltstructgt

ltstruct name=jobi0100gtltintParm name=numberOfBytesReturnedgtltintParm name=numberOfBytesAvailablegtltstructParm name=qualifiedJobName struct=qualifiedJobNamegtlthexBinaryParm name=internalJobIdentifier totalBytes=16gtltstringParm name=jobStatus length=10gtltstringParm name=jobType length=1gtltstringParm name=jobSubtype length=1gtltstringParm length=2gtltintParm name=runPrioritygtltintParm name=timeSlicegtltintParm name=defaultWaitgtltstringParm name=purge length=10gt

ltstructgt

ltprogram name=qusrjobi_jobi0100 path=QSYSLIBQUSRJOBIPGMgtltparameterListgt

ltstructParm name=receiverVariable passDirection=outoutputSize=lengthOfReceiverVariable struct=jobi0100gt

ltintParm name=lengthOfReceiverVariable passDirection=ingt86ltintParmgtltstringParm name=formatName passDirection=in length=8gtJOBI0100ltstringParmgtltstructParm name=qualifiedJobName passDirection=in struct=qualifiedJobNamegtlthexBinaryParm name=internalJobIdentifier

passDirection=in totalBytes=16gt lthexBinaryParmgtltintParm name=errorCode passDirection=ingt0ltintParmgt

ltparameterListgtltprogramgtltxpcmlgt

Coacutedigo Java para condensar el fuente XPCML originaltry

FileInputStream fullStream = new FileInputStream(myXPCMLxpcml)FileOutputStream condensedStream = new FileOutputStream(myCondensedXPCMLxpcml)FileOutputStream xsdStream = new FileOutputStream(myXSDxsd)ProgramCallDocumentcondenseXPCML(fullStream xsdStream condensedStream myXSDxsd)

catch (Exception e)

Systemoutprintln(error - +egetMessage())eprintStackTrace()

Fuente XPCML condensado myCondensedXPCMLxpcmlltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instance

xsinoNamespaceSchemaLocation=myXSDxsd version=40gt

ltstruct name=qualifiedJobNamegtltjobName_gtltjobName_gtltuserName_gtltjobNumber_gt

ltstructgt

ltstruct name=jobi0100gtltnumberOfBytesReturned_gt

584 IBM Toolbox para Java IBM Toolbox para Java

ltnumberOfBytesAvailable_gtltstructParm name=qualifiedJobName struct=qualifiedJobNamegtltinternalJobIdentifier_gtltjobStatus_gtltjobType_gtltjobSubtype_gtltstringParm length=2gtltrunPriority_gtlttimeSlice_gtltdefaultWait_gtltpurge_gt

ltstructgt

ltprogram name=qusrjobi_jobi0100 path=QSYSLIBQUSRJOBIPGMgtltparameterListgt

ltstructParm name=receiverVariable passDirection=outoutputSize=lengthOfReceiverVariable struct=jobi0100gt

ltlengthOfReceiverVariable_gt86ltlengthOfReceiverVariable_gtltformatName_gtJOBI0100ltformatName_gtltstructParm name=qualifiedJobName passDirection=in struct=qualifiedJobNamegtltinternalJobIdentifier_gt ltinternalJobIdentifier_gtlterrorCode_gt0lterrorCode_gt

ltparameterListgtltprogramgtltxpcmlgt

Varias definiciones de tipo del esquema generado myXSDxsdltxsschema xmlnsxs=rsquohttpwwww3org2001XMLSchemarsquogtltxsinclude schemaLocation=rsquoxpcmlxsdrsquogt

ltxselement name=jobName_ substitutionGroup=stringParmGroup gtltxscomplexTypegt

ltxssimpleContentgtltxsrestriction base=stringParmTypegt

ltxsattribute name=name type=string50 fixed=jobName gtltxsattribute name=length type=xsstring fixed=10 gt

ltxsrestrictiongtltxssimpleContentgt

ltxscomplexTypegtltxselementgt

ltxselement name=userName_ substitutionGroup=stringParmGroup gtltxscomplexTypegt

ltxssimpleContentgtltxsrestriction base=stringParmTypegt

ltxsattribute name=name type=string50 fixed=userName gtltxsattribute name=length type=xsstring fixed=10 gt

ltxsrestrictiongtltxssimpleContentgt

ltxscomplexTypegtltxselementgt

ltxselement name=jobNumber_ substitutionGroup=stringParmGroup gtltxscomplexTypegt

ltxssimpleContentgtltxsrestriction base=stringParmTypegt

ltxsattribute name=name type=string50 fixed=jobNumber gtltxsattribute name=length type=xsstring fixed=6 gt

ltxsrestrictiongtltxssimpleContentgt

ltxscomplexTypegtltxselementgt

ltxselement name=lengthOfReceiverVariable_ substitutionGroup=intParmGroup gtltxscomplexTypegt

ltxssimpleContentgt

IBM Toolbox para Java 585

ltxsrestriction base=intParmTypegtltxsattribute name=name type=string50 fixed=lengthOfReceiverVariable gtltxsattribute name=passDirection type=passDirectionType fixed=in gt

ltxsrestrictiongtltxssimpleContentgt

ltxscomplexTypegtltxselementgt

ltxselement name=formatName_ substitutionGroup=stringParmGroup gtltxscomplexTypegt

ltxssimpleContentgtltxsrestriction base=stringParmTypegt

ltxsattribute name=name type=string50 fixed=formatName gtltxsattribute name=length type=xsstring fixed=8 gtltxsattribute name=passDirection type=passDirectionType fixed=in gt

ltxsrestrictiongtltxssimpleContentgt

ltxscomplexTypegtltxselementgt

lt-- A continuacioacuten figuran maacutes definiciones de tipo para cada uno de los nuevos tipos definidos --gtltxsschemagt

Ejemplo coacutemo se utiliza fuente XPCML condensado para crear un objetoProgramCallDocumentAlgunos constructores de ProgramCallDocument aceptan un archivo fuente condensedXPCML y elesquema correspondiente (archivo xsd) Esto permite emplear fuente XPCML condensado para crear unobjeto ProgramCallDocument

Los constructores indicados anteriormente precisan que se especifiquen los paraacutemetros siguientesv Un objeto String que especifique un archivo XPCML condensadov Un objeto InputStream que contenga las definiciones de tipo creadas al ejecutar condenseXPCML()

Al utilizar estos constructores se carga y se analiza un archivo XPCML condensado Ademaacutes el procesoanota los errores de anaacutelisis que se producen Tras llevar a cabo el anaacutelisis el constructor crea un objetoProgramCallDocument

En el ejemplo de coacutedigo Java siguiente se utiliza fuente XPCML condensado para crear un objetoProgramCallDocument El coacutedigo de ejemplo da por supuesto lo siguientev El nombre del archivo XPCML condensado es myCondensedXPCMLxpcmlv El nombre del esquema ampliado es myXSDxsd

A continuacioacuten el coacutedigo utiliza el objeto ProgramCallDocument para ejecutar el programaqusrjobi_jobi0100

AS400 system = new AS400() Cree un objeto ProgramCallDocument y analice el archivoProgramCallDocument xpcmlDoc =

new ProgramCallDocument(systemmyCondensedXPCMLxpcmlnew FileInputStream(myXSDxsd))

boolean rc = xpcmlDoccallProgram(qusrjobi_jobi0100)

Nota el coacutedigo XPCML que se utiliza para llamar al programa (tras crear el objetoProgramCallDocument) es el mismo que se utilizariacutea con PCML

Ejemplo obtener los resultados de una llamada a programa en formato de XPCMLcondensadoEl procedimiento para obtener los resultados de una llamada a programa en formato de XPCMLcondensado es el mismo que para obtenerlos en formato de XPCML no condensado llamando aProgramCallDocumentgenerateXPCML()

586 IBM Toolbox para Java IBM Toolbox para Java

Utilice setXsdName() para especificar el nombre del esquema ampliado que generateXPCML() empleapara generar el atributo noNamespaceSchemaLocation del coacutedigo ltxpcmlgt en el fuente XPCMLcondensado

Es importante utilizar setXsdName() cuando se desean utilizar los resultados de la llamada a programa(en formato de XPCML condensado) como fuente para otro objeto ProgramCallDocument Debeespecificar el nombre del esquema ampliado para que el analizador sepa queacute archivo de esquema debeutilizar al efectuar el anaacutelisis

Por ejemplo el coacutedigo siguiente obtiene el resultado de una llamada a programa y genera fuente XPCMLcondensado

AS400 system = new AS400()

Cree un objeto ProgramCallDocument y analice el archivoProgramCallDocument xpcmlDoc =

new ProgramCallDocument(system myCondensedXPCMLxpcml new FileInputStream(myXSDxsd))

boolean rc = xpcmlDoccallProgram(qusrjobi_jobi0100)

if (rc) El programa se ha ejecutado satisfactoriamente

xpcmlDocsetXsdName(myXSDxsd)xpcmlDocgenerateXPCML(qusrjobi_jobi0100XPCMLOutxpcml)

El coacutedigo siguiente muestra un ejemplo de coacutemo se obtienen los resultados de una llamada a programaen formato de XPCML condensado

ltxpcml xmlnsxsi=httpwwww3org2001XMLSchema-instancexsinoNamespaceSchemaLocation=myXSDxsd version=40gt

ltprogram name=qusrjobi_jobi0100 path=QSYSLIBQUSRJOBIPGMgtltparameterListgtltstructParm name=receiverVariable passDirection=out

outputSize=lengthOfReceiverVariable struct=jobi0100gtltnumberOfBytesReturned_gt100ltnumberOfBytesReturned_gtltnumberOfBytesAvailable_gt100ltnumberOfBytesAvailable_gtltstructParm name=qualifiedJobName

struct=qualifiedJobNamegtltjobName_gtltjobName_gtltuserName_gtltjobNumber_gt

ltstructParmgtltinternalJobIdentifier_gtltjobStatus_gtACTIVEltjobStatus_gtltjobType_gtPJltjobTypegtltjobSubtype_gtltstringParm length=2gtltrunPriority_gt5ltrunPrioritygtlttimeSlice_gtltdefaultWait_gt10ltdefaultWait_gtltpurge_gt

ltstructParmgtltlengthOfReceiverVariable_gt86ltlengthOfReceiverVariable_gtltformatName_gtJOBI0100ltformatName_gtltstructParm name=qualifiedJobName passDirection=in struct=qualifiedJobNamegtltinternalJobIdentifier_gt ltinternalJobIdentifier_gtlterrorCode_gt0lterrorCode_gt

ltparameterListgtltprogramgtltxpcmlgt

IBM Toolbox para Java 587

Ejemplo visualizar una lista de recursos en un servletUtilice la clase ResourceListRowData junto con la clase HTMLFormConverter o HTMLTableConverterpara visualizar una lista de recursos en un servletv HTMLFormConverter visualiza el contenido de la lista de recursos como una serie de formularios en la

que cada formulario contiene valores de atributo para un recurso de la lista de recursosv HTMLTableConverter visualiza el contenido de la lista de recursos como una tabla en la que cada fila

contiene informacioacuten sobre un recurso de la lista de recursos

Las columnas de un objeto ResourceListRowData se especifican como una matriz de ID de atributo decolumna mientras que cada fila representa un objeto de recurso

Cree la lista de recursos Este ejemplo crea una lista de todos los mensajes de la cola de mensajes del usuario actualAS400 system = new AS400(MYSYSTEM MYUSERID MYPASSWORD)RMessageQueue messageQueue = new RMessageQueue(system RMessageQueueCURRENT)

Cree el objeto ResourceListRowData En este ejemplo hay cuatro columnas en la tabla La primera columna contiene los iconos y los nombres de cada mensaje de la cola de mensajes Las demaacutes columnas contienen el texto la gravedad y el tipo de cada mensajeResourceListRowData rowdata = new ResourceListRowData(messageQueue

new Object[] null RQueuedMessageMESSAGE_TEXT RQueuedMessageMESSAGE_SEVERITYRQueuedMessageMESSAGE_TYPE )

Cree los objetos HTMLTable y HTMLTableConverter que se usaraacuten para generar y personalizar las tablas HTMLHTMLTable table = new HTMLTable()tablesetCellSpacing(6)tablesetBorderWidth(8)

HTMLTableConverter converter = new HTMLTableConverter()convertersetTable(table)convertersetUseMetaData(true)

Genere la tabla HTMLString[] html = converterconvert(rowdata)Systemoutprintln(html[0])

Informacioacuten relacionada para IBM Toolbox para JavaLa lista siguiente contiene sitios Web y temas de Information Center relacionados con la informacioacuten deIBM Toolbox para Java

Recursos de IBM Toolbox para Java

Consulte los siguientes sitios si desea adquirir maacutes conocimientos sobre IBM Toolbox para Java

v IBM Toolbox para Java and JTOpen ofrece informacioacuten sobre paquetes de servicio consejos derendimiento ejemplos y mucho maacutes Tambieacuten puede bajar un paquete comprimido en zip de estainformacioacuten incluidos los Javadocs

v IBM Toolbox para Java Frequently Asked Questions (FAQ) da respuesta a cuestiones relacionadascon el rendimiento la resolucioacuten de problemas JDBC y otros aspectos

v IBM Toolbox para Java and JTOpen forum proporciona un meacutetodo eficaz para comunicarse conla comunidad de programadores de Java que utilizan IBM Toolbox para Java y los desarrolladores deIBM Toolbox para Java

588 IBM Toolbox para Java IBM Toolbox para Java

Java

Java es un lenguaje de programacioacuten que permite desarrollar applets y aplicaciones orientadas a objetosportables Consulte los siguientes sitios si desea adquirir maacutes conocimientos sobre Java

v IBM developerWorks Java technology zone facilita informacioacuten formacioacuten y herramientas paraayudarle a utilizar Java productos IBM y otras tecnologiacuteas destinadas a crear soluciones empresariales

v The Source for Java Developers ofrece informacioacuten sobre los diversos usos de Java incluidas lasnuevas tecnologiacuteas

Java Naming and Directory Interface

v Java Naming and Directory Interface (JNDI) ofrece una visioacuten general de JNDI informacioacutenteacutecnica ejemplos y una lista de los proveedores de servicio disponibles

v IBM i LDAP facilita informacioacuten acerca de LDAP (Lightweight Directory Access Protocol) en IBMi

Java Secure Socket Extension

v Java SE Security ofrece una breve visioacuten general de JSSE y enlaces a maacutes informacioacuten

Servlets

Los servlets son pequentildeos programas Java que se ejecutan en un servidor y actuacutean de mediadores entrelas peticiones de uno o muacuteltiples clientes (cada uno de los cuales se ejecuta en un navegador) y una ovarias bases de datos Dado que los servlets estaacuten programados en Java pueden ejecutar peticiones comovarias hebras en un solo proceso lo que permite ahorrar recursos del sistema Consulte los siguientessitios si desea adquirir maacutes conocimientos sobre los servlets

v Java Servlet technology contiene informacioacuten teacutecnica instrucciones y herramientas que leayudaraacuten a entender y utilizar los servlets

XHTML

XHTML se considera como sucesor de HTML 40 Se basa en HTML 40 pero incorpora la extensibilidadde XML Consulte los siguientes sitios si desea adquirir maacutes conocimientos sobre XHTML

v The Web Developers Virtual Library proporciona una introduccioacuten a XHTML con ejemplos yenlaces a informacioacuten adicional

v W3C proporciona informacioacuten teacutecnica sobre estaacutendares XHTML y recomendaciones

XML

XML (Extensible Markup Language) es un metalenguaje que permite describir y organizar la informacioacutende modo que sea faacutecilmente comprensible tanto para los humanos como para las maacutequinas Unmetalenguaje permite definir un lenguaje de coacutedigos de documento y su estructura Consulte lossiguientes sitios si desea adquirir maacutes conocimientos sobre XML

v IBM developerWorks XML zone ofrece un sitio dedicado al trabajo que IBM realiza con XML y acoacutemo permite facilitar el comercio electroacutenico

v W3C XML facilita recursos teacutecnicos para los desarrolladores de XML

v XMLcom facilita informacioacuten actualizada sobre XML en la industria informaacutetica

IBM Toolbox para Java 589

v XMLorg proporciona noticias e informacioacuten sobre la comunidad de XML con noticias del sectorcalendarios de eventos y mucho maacutes

v XML Cover Pages ofrece un completo trabajo de referencia en liacutenea para XML SGML yestaacutendares relacionados con XML como XSL y XSLT

Otras referencias

v IBM HTTP Server para i facilita informacioacuten recursos y consejos relativos a IBM HTTP Serverpara i

v IBM iAccess facilita informacioacuten acerca de IBM i Access con bajadas FAQs y enlaces a sitiosadicionales

v IBM WebSphere Host On-Demand ofrece informacioacuten acerca del emulador basado en navegadorque ofrece soporte para S390 IBM i y la emulacioacuten de DECUnix

v IBM Support and downloads ofrece un portal al soporte de hardware y software de IBM

Informacioacuten sobre licencia de coacutedigo y exencioacuten de responsabilidadIBM le otorga una licencia de copyright no exclusiva para utilizar todos los ejemplos de coacutedigo deprogramacioacuten a partir de los que puede generar funciones similares adaptadas a sus necesidadesespeciacuteficas

SUJETO A LAS GARANTIacuteAS ESTATUTARIAS QUE NO PUEDAN EXCLUIRSE IBM Y LOSDESARROLLADORES Y SUMINISTRADORES DE PROGRAMAS DE IBM NO OFRECEN NINGUNAGARANTIacuteA NI CONDICIOacuteN YA SEA IMPLIacuteCITA O EXPLIacuteCITA INCLUIDAS PERO SIN LIMITARSE AELLAS LAS GARANTIacuteAS O CONDICIONES IMPLIacuteCITAS DE COMERCIALIZACIOacuteN ADECUACIOacuteNA UN PROPOacuteSITO DETERMINADO Y NO VULNERACIOacuteN CON RESPECTO AL PROGRAMA O ALSOPORTE TEacuteCNICO SI EXISTE

BAJO NINGUNA CIRCUNSTANCIA IBM Y LOS DESARROLLADORES O SUMINISTRADORES DEPROGRAMAS DE IBM SE HACEN RESPONSABLES DE NINGUNA DE LAS SIGUIENTESSITUACIONES NI SIQUIERA EN CASO DE HABER SIDO INFORMADOS DE TAL POSIBILIDAD1 PEacuteRDIDA DE DATOS O DANtildeOS CAUSADOS EN ELLOS2 DANtildeOS ESPECIALES ACCIDENTALES DIRECTOS O INDIRECTOS O DANtildeOS ECONOacuteMICOS

DERIVADOS3 PEacuteRDIDAS DE BENEFICIOS COMERCIALES DE INGRESOS CLIENTELA O AHORROS

ANTICIPADOS

ALGUNAS JURISDICCIONES NO PERMITEN LA EXCLUSIOacuteN O LA LIMITACIOacuteN DE LOS DANtildeOSDIRECTOS ACCIDENTALES O DERIVADOS POR LO QUE PARTE DE LAS LIMITACIONES OEXCLUSIONES ANTERIORES O TODAS ELLAS PUEDE NO SER PROCEDENTE EN SU CASO

Teacuterminos y condicionesLos permisos para utilizar estas publicaciones estaacuten sujetos a los siguientes teacuterminos y condiciones

Uso personal puede reproducir estas publicaciones para uso personal (no comercial) siempre y cuandoincluya una copia de todos los avisos de derechos de autor No puede distribuir ni visualizar estaspublicaciones ni ninguna de sus partes como tampoco elaborar trabajos que se deriven de ellas sin elconsentimiento expliacutecito de IBM

590 IBM Toolbox para Java IBM Toolbox para Java

Uso comercial puede reproducir distribuir y visualizar estas publicaciones uacutenicamente dentro de suempresa siempre y cuando incluya una copia de todos los avisos de derechos de autor No puedeelaborar trabajos que se deriven de estas publicaciones ni tampoco reproducir distribuir ni visualizarestas publicaciones ni ninguna de sus partes fuera de su empresa sin el consentimiento expliacutecito de IBM

Aparte de la autorizacioacuten que se concede expliacutecitamente en este permiso no se otorga ninguacuten otropermiso licencia ni derecho ya sea expliacutecito o impliacutecito sobre las publicaciones la informacioacuten losdatos el software o cualquier otra propiedad intelectual contenida en ellas

IBM se reserva el derecho de retirar los permisos aquiacute concedidos siempre que seguacuten el parecer delfabricante se utilicen las publicaciones en detrimento de sus intereses o cuando tambieacuten seguacuten el parecerdel fabricante no se sigan debidamente las instrucciones anteriores

No puede bajar exportar ni reexportar esta informacioacuten si no lo hace en plena conformidad con lalegislacioacuten y normativa vigente incluidas todas las leyes y normas de exportacioacuten de Estados Unidos

IBM NO PROPORCIONA NINGUNA GARANTIacuteA SOBRE EL CONTENIDO DE ESTASPUBLICACIONES LAS PUBLICACIONES SE PROPORCIONAN TAL CUAL SIN GARANTIacuteA DENINGUNA CLASE YA SEA EXPLIacuteCITA O IMPLIacuteCITA INCLUIDAS PERO SIN LIMITARSE A ELLASLAS GARANTIacuteAS IMPLIacuteCITAS DE COMERCIALIZACIOacuteN NO VULNERACIOacuteN E IDONEIDAD PARAUN FIN DETERMINADO

IBM Toolbox para Java 591

592 IBM Toolbox para Java IBM Toolbox para Java

Avisos

Esta informacioacuten se ha escrito para productos y servicios ofrecidos en Estados Unidos de Ameacuterica

Es posible que IBM no ofrezca en otros paiacuteses los productos servicios o caracteriacutesticas que se describenen este documento Consulte con el representante local de IBM para obtener informacioacuten acerca de losproductos y servicios que actualmente estaacuten disponibles en su zona Las referencias a programasproductos o servicios de IBM no pretenden establecer ni implicar que soacutelo puedan utilizarse dichosproductos programas o servicios de IBM En su lugar se puede utilizar cualquier producto programa oservicio funcionalmente equivalente que no infrinja ninguno de los derechos intelectuales de IBM Noobstante es responsabilidad del usuario evaluar y verificar el funcionamiento de cualquier productoprograma o servicio que no sea de IBM

IBM puede tener patentes o solicitudes de patentes pendientes que cubran la materia descrita en estedocumento La posesioacuten de este documento no le otorga ninguna licencia sobre dichas patentes Puedeenviar consultas sobre licencias por escrito a

IBM Director of LicensingIBM CorporationNorth Castle DriveArmonk NY 10504-1785EEUU

Para consultas sobre licencias relacionadas con informacioacuten de doble byte (DBCS) poacutengase en contactocon el Departamento de propiedad intelectual de IBM de su paiacutes o enviacutee consultas por escrito a

Intellectual Property LicensingLegal and Intellectual Property LawIBM Japan Ltd1623-14 Shimotsuruma Yamato-shiKanagawa 242-8502 Japoacuten

El paacuterrafo siguiente no se aplica al Reino Unido ni a ninguacuten otro paiacutes donde estas disposiciones seanincompatibles con la legislacioacuten local INTERNATIONAL BUSINESS MACHINES CORPORATIONPROPORCIONA ESTA PUBLICACIOacuteN TAL CUAL SIN GARANTIacuteAS DE NINGUacuteN TIPO NIEXPLIacuteCITAS NI IMPLIacuteCITAS INCLUYENDO PERO NO LIMITAacuteNDOSE A ELLAS LAS GARANTIacuteASIMPLIacuteCITAS DE NO VULNERACIOacuteN COMERCIALIZACIOacuteN O IDONEIDAD PARA UN FINCONCRETO Algunas legislaciones no contemplan la declaracioacuten de limitacioacuten de garantiacuteas ni impliacutecitasni expliacutecitas en determinadas transacciones por lo que cabe la posibilidad de que esta declaracioacuten no seaaplicable en su caso

Esta informacioacuten puede contener imprecisiones teacutecnicas o errores tipograacuteficos La informacioacuten incluida eneste documento estaacute sujeta a cambios perioacutedicos que se incorporaraacuten en nuevas ediciones de lapublicacioacuten IBM puede realizar en cualquier momento mejoras o cambios en los productos o programasdescritos en esta publicacioacuten sin previo aviso

Las referencias hechas en esta publicacioacuten a sitios Web que no son de IBM se proporcionan uacutenicamentepor cortesiacutea y de ninguacuten modo deben interpretarse como promocioacuten de dichos sitios Web Los materialesde dichos sitios Web no forman parte de los materiales de este producto IBM y su utilizacioacuten esresponsabilidad del usuario

IBM puede utilizar o distribuir cualquier informacioacuten que se le proporcione en la forma que considereadecuada sin incurrir por ello en ninguna obligacioacuten para con el remitente

copy Copyright IBM Corp 1999 2014 593

Los licenciatarios de este programa que deseen obtener informacioacuten sobre eacutel para poder (i) intercambiarinformacioacuten entre programas creados de forma independiente y otros programas (incluidos este) y (ii) yutilizar de forma mutua la informacioacuten que se ha intercambiado deben ponerse en contacto con

IBM CorporationSoftware Interoperability Coordinator Department YBWA3605 Highway 52 NRochester MN 55901EEUU

Esta informacioacuten puede estar disponible sujeta a los teacuterminos y condiciones pertinentes e incluir enalgunos casos el pago de una cantidad

El programa bajo licencia descrito en este documento y todo el material con licencia disponible seproporcionan bajo los teacuterminos de IBM Customer Agreement IBM International Program LicenseAgreement o cualquier otro acuerdo equivalente entre IBM y el cliente

Los datos de rendimiento incluidos aquiacute se determinaron en un entorno controlado Por lo tanto losresultados que se obtengan en otros entornos operativos pueden variar significativamente Puedenhaberse realizado mediciones en sistemas que esteacuten en fase de desarrollo y no existe ninguna garantiacutea deque esas mediciones vayan a ser iguales en los sistemas disponibles en el mercado Ademaacutes es posibleque algunas mediciones se hayan estimado mediante extrapolacioacuten Los resultados reales pueden variarLos usuarios de este documento deben verificar los datos aplicables a su entorno especiacutefico

La informacioacuten concerniente a productos que no son de IBM se ha obtenido de los suministradores dedichos productos de sus anuncios publicados o de otras fuentes de informacioacuten puacuteblica disponibles IBMno ha probado esos productos y no puede confirmar la exactitud del rendimiento de la compatibilidad nide ninguna otra declaracioacuten relacionada con productos que no sean de IBM Las consultas acerca de lasprestaciones de los productos que no son de IBM deben dirigirse a los suministradores de talesproductos

Todas las declaraciones relativas a la direccioacuten o intencioacuten futura de IBM estaacuten sujetas a cambios oanulacioacuten sin previo aviso y representan uacutenicamente metas y objetivos

Todos los precios de IBM mostrados son precios de minoristas sugeridos por IBM estaacuten actualizados yestaacuten sujetos a cambios sin aviso previo Los precios de los concesionarios pueden ser diferentes

Esta documentacioacuten se suministra solo a efectos de planificacioacuten La informacioacuten que aquiacute se incluye estaacutesujeta a cambios antes de que los productos descritos esteacuten disponibles

Esta informacioacuten contiene ejemplos de datos e informes utilizados en operaciones comerciales diariasPara ilustrarlas de la forma maacutes completa posible los ejemplos incluyen nombres de personas empresasmarcas y productos Todos estos nombres son ficticios y cualquier parecido con los nombres y direccionesutilizados por una empresa real es pura coincidencia

LICENCIA DE COPYRIGHT

Esta informacioacuten contiene programas de aplicacioacuten de ejemplo en lenguaje fuente que muestran teacutecnicasde programacioacuten en diversas plataformas operativas Puede copiar modificar y distribuir estos programasde muestra de cualquier modo sin pagar a IBM con el fin de desarrollar utilizar comercializar odistribuir programas de aplicacioacuten que se ajusten a la interfaz de programacioacuten de aplicaciones para laplataforma operativa para la que se ha escrito el coacutedigo de muestra Estos ejemplos no se hancomprobado de forma exhaustiva en todas las condiciones Por lo tanto IBM no puede garantizar ni darpor supuesta la fiabilidad la capacidad de servicio ni la funcionalidad de estos programas Losprogramas de ejemplo se ofrecen TAL CUAL sin garantiacutea de ninguacuten tipo IBM no se haraacute responsablede los dantildeos derivados de la utilizacioacuten que haga el usuario de los programas de ejemplo

594 IBM Toolbox para Java IBM Toolbox para Java

Cada copia o parte de estos programas de ejemplo asiacute como todo trabajo derivado debe incluir un avisode copyright como el siguiente

copy (nombre de su empresa) (antildeo) Partes de este coacutedigo derivan de programas de ejemplo de IBM CorpSample Programs

copy Copyright IBM Corp _escriba el antildeo o antildeos_

Si estaacute viendo esta informacioacuten en copia software es posible que las fotografiacuteas y las ilustraciones encolor no aparezcan

Informacioacuten sobre interfaces de programacioacutenEsta publicacioacuten de proporciona documentacioacuten sobre las interfaces de programacioacuten previstas quepermiten al cliente escribir programas para obtener los servicios de IBM i

Marcas registradasIBM el logotipo de IBM e ibmcom son marcas registradas o marcas comerciales registradas deInternational Business Machines Corp registradas en muchas jurisdicciones de todo el mundo Otrosnombres de servicios y productos podriacutean ser marcas registradas de IBM u otras compantildeiacuteas Haydisponible una lista actual de marcas registradas de IBM en la web ldquoInformacioacuten de marca registrada ycopyrightrdquo en wwwibmcomlegalcopytradeshtml

Adobe el logotipo de Adobe PostScript y el logotipo de PostScript son marcas registradas de AdobeSystems Incorporated en los Estados Unidos yo en otros paiacuteses

IT Infrastructure Library es una marca registrada de Central Computer and Telecommunications Agencyque ahora forma parte de Office of Government Commerce

Intel el logotipo de Intel Intel Inside el logotipo de Intel Inside Intel Centrino el logotipo de IntelCentrino Celeron Intel Xeon Intel SpeedStep Itanium y Pentium son marcas registradas de IntelCorporation o de sus filiales en Estados Unidos yo en otros paiacuteses

Linux es una marca registrada de Linus Torvalds en Estados Unidos yo en otros paiacuteses

Microsoft Windows Windows NT y el logotipo de Windows con marcas registradas de MicrosoftCorporation en Estados Unidos yo en otros paiacuteses

ITIL es una marca registrada una marca registrada comunitaria de la OGC britaacutenica (Office ofGovernment Commerce) y estaacute registrada en la Oficina de Patentes y Marcas de Estados Unidos

UNIX es una marca registrada de The Open Group en Estados Unidos y en otros paiacuteses

Cell Broadband Engine es una marca registrada de Sony Computer en Estados Unidos yo en otrospaiacuteses y se utiliza bajo licencia

Java y todas las marcas y logotipos basados en Java son marcas registradas de Oracle Inc en EstadosUnidos yo en otros paiacuteses

Otros nombres de servicios y productos podriacutean ser marcas registradas de IBM u otras compantildeiacuteas

Teacuterminos y condicionesLos permisos para utilizar estas publicaciones estaacuten sujetos a los siguientes teacuterminos y condiciones

Avisos 595

Uso personal puede reproducir estas publicaciones para uso personal (no comercial) siempre y cuandoincluya una copia de todos los avisos de derechos de autor No puede distribuir ni visualizar estaspublicaciones ni ninguna de sus partes como tampoco elaborar trabajos que se deriven de ellas sin elconsentimiento expliacutecito de IBM

Uso comercial puede reproducir distribuir y visualizar estas publicaciones uacutenicamente dentro de suempresa siempre y cuando incluya una copia de todos los avisos de derechos de autor No puedeelaborar trabajos que se deriven de estas publicaciones ni tampoco reproducir distribuir ni visualizarestas publicaciones ni ninguna de sus partes fuera de su empresa sin el consentimiento expliacutecito de IBM

Aparte de la autorizacioacuten que se concede expliacutecitamente en este permiso no se otorga ninguacuten otropermiso licencia ni derecho ya sea expliacutecito o impliacutecito sobre las publicaciones la informacioacuten losdatos el software o cualquier otra propiedad intelectual contenida en ellas

IBM se reserva el derecho de retirar los permisos aquiacute concedidos siempre que seguacuten el parecer delfabricante se utilicen las publicaciones en detrimento de sus intereses o cuando tambieacuten seguacuten el parecerdel fabricante no se sigan debidamente las instrucciones anteriores

No puede bajar exportar ni reexportar esta informacioacuten si no lo hace en plena conformidad con lalegislacioacuten y normativa vigente incluidas todas las leyes y normas de exportacioacuten de Estados Unidos

IBM NO PROPORCIONA NINGUNA GARANTIacuteA SOBRE EL CONTENIDO DE ESTASPUBLICACIONES LAS PUBLICACIONES SE PROPORCIONAN TAL CUAL SIN GARANTIacuteA DENINGUNA CLASE YA SEA EXPLIacuteCITA O IMPLIacuteCITA INCLUIDAS PERO SIN LIMITARSE A ELLASLAS GARANTIacuteAS IMPLIacuteCITAS DE COMERCIALIZACIOacuteN NO VULNERACIOacuteN E IDONEIDAD PARAUN FIN DETERMINADO

596 IBM Toolbox para Java IBM Toolbox para Java

Nuacutemero de Programa 5770-SS1

Impreso en Espantildea

  • Contenido
  • IBM Toolbox para Java
    • Novedades de IBM i 72
    • Archivo PDF para IBM Toolbox para Java
    • Instalacioacuten y gestioacuten de IBM Toolbox para Java
      • Gestioacuten de la instalacioacuten de IBM Toolbox para Java
      • Instalacioacuten de IBM Toolbox para Java
        • Requisitos de IBM i para IBM Toolbox para Java
          • Opciones de IBM i necesarias
          • Coacutemo determinar si IBM Toolbox para Java estaacute instalado en el sistema
          • Comprobar el perfil QUSER
          • Cambiar el perfil de usuario QUSER
          • Dependencias de otros programas bajo licencia
          • Compatibilidad con niveles distintos de IBM i
          • Optimizaciones nativas al llevar a cabo la ejecucioacuten en la JVM de IBM i
            • Requisitos de estacioacuten de trabajo para IBM Toolbox para Java
              • Requisitos de estacioacuten de trabajo para ejecutar aplicaciones de IBM Toolbox para Java
              • Requisitos de estacioacuten de trabajo para ejecutar applets de IBM Toolbox para Java
                • Instalacioacuten de IBM Toolbox para Java en el sistema
                • Instalacioacuten de IBM Toolbox para Java en la estacioacuten de trabajo
                  • Archivos JAR
                      • Propiedades del sistema
                        • JTOpenLite
                        • Clases de IBM Toolbox para Java
                          • Clases de acceso
                            • Puntos de acceso de servidor
                            • Clase AS400
                              • Gestioacuten de identificadores de usuario predeterminado
                              • Utilizacioacuten de una memoria cacheacute de contrasentildeas
                              • Solicitud de identificadores de usuario y contrasentildeas
                              • Resumen de solicitudes ID de usuario predeterminado y colocacioacuten de contrasentildeas en memoria cacheacute
                                • Clase SecureAS400
                                • Clase AS400JPing
                                • Clase BidiTransform
                                • Clase BidiConversionProperties
                                • Clase CallStackEntry
                                • Clases ClusteredHashTable
                                • Clase CommandCall
                                • Agrupacioacuten de conexiones
                                • Aacuterea de datos
                                • Conversioacuten y descripcioacuten de datos
                                  • Clases de conversioacuten para datos numeacutericos
                                  • Conversioacuten de texto
                                  • Clases de conversioacuten para tipos compuestos
                                  • Clases de descripcioacuten de campo
                                  • Clase RecordFormat
                                  • Clase Record
                                  • Recuperacioacuten del contenido de un campo
                                  • Establecimiento del contenido de un campo
                                  • Clase LineDataRecordWriter
                                    • Colas de datos
                                      • Colas de datos secuenciales
                                      • Colas de datos por clave
                                        • Certificados digitales
                                        • Clase EnvironmentVariable
                                        • Excepciones
                                        • Clase FileAttributes
                                        • Clase FTP
                                        • Clases del sistema de archivos integrado
                                          • Clase IFSFile
                                          • Clase IFSJavaFile
                                          • IFSFileInputStream
                                          • Clase IFSTextFileInputStream
                                          • IFSFileReader
                                          • Clase IFSFileOutputStream
                                          • Clase IFSTextFileOutputStream
                                          • IFSFileWriter
                                          • IFSRandomAccessFile
                                          • Clase IFSKey
                                          • Modalidad de compartimiento de archivo
                                          • IFSSystemView
                                            • Clase ISeriesNetServer
                                            • Clase JavaApplicationCall
                                            • Clases JDBC
                                              • Clase AS400JDBCBlob
                                              • Interfaz CallableStatement
                                              • Clase AS400JDBCClob
                                              • Clase AS400JDBCConnection
                                              • AS400JDBCConnectionPool
                                              • Clase AS400JDBCManagedConnectionPoolDataSource
                                                • Ejemplos coacutemo se utiliza la clase AS400JDBCManagedConnectionPoolDataSource
                                                  • Interfaz DatabaseMetaData
                                                  • Clase AS400JDBCDataSource
                                                  • Registro del controlador JDBC
                                                  • Clase AS400JDBCParameterMetaData
                                                  • Interfaz PreparedStatement
                                                  • Clase ResultSet
                                                  • Clase AS400JDBCRowSet
                                                  • Clase AS400JDBCSavepoint
                                                  • Ejecucioacuten de sentencias SQL con objetos Statement
                                                  • Gestioacuten de transacciones distribuidas XA de JDBC
                                                    • Clases de trabajos
                                                      • Clase Job
                                                      • Clase JobList
                                                      • Clase JobLog
                                                        • Clases de mensajes
                                                        • Clase NetServer
                                                        • Clase ObjectReferences
                                                        • Clases de permisos
                                                          • Clase DLOPermission
                                                          • QSYSPermission
                                                          • RootPermission
                                                            • Clases de impresioacuten
                                                              • Listar objetos de impresioacuten
                                                              • Trabajar con objetos de impresioacuten
                                                              • Recuperar atributos de PrintObject
                                                              • Atributos de recursos AFP
                                                              • Atributos de la cola de salida
                                                              • Atributos de impresora
                                                              • Atributos de archivo de impresora
                                                              • Atributos de archivo en spool
                                                              • Atributos de trabajo de transcriptor
                                                              • Atributos de objeto de impresioacuten
                                                              • Copiar archivos en spool
                                                              • Crear archivos en spool nuevos
                                                              • Generar una corriente de datos SCS
                                                              • Leer archivos en spool y recursos AFP
                                                              • Leer archivos en spool mediante PrintObjectPageInputStream y PrintObjectTransformedInputStream
                                                                • Clase ProductLicense
                                                                • Clase ProgramCall
                                                                • Clase QSYSObjectPathName
                                                                • Acceso a nivel de registro
                                                                  • AS400File
                                                                  • KeyedFile
                                                                  • SequentialFile
                                                                  • AS400FileRecordDescription
                                                                  • Crear y suprimir archivos y miembros
                                                                  • Leer y escribir registros
                                                                  • Bloquear archivos
                                                                  • Utilizar bloques de registros
                                                                  • Fijar la posicioacuten del cursor
                                                                  • Control de compromiso
                                                                    • Clase SaveFile
                                                                    • Clase ServiceProgramCall
                                                                    • Clase Subsystem
                                                                    • Clases SystemStatus
                                                                      • Clase SystemPool
                                                                        • Valores del sistema
                                                                        • Clase Trace
                                                                        • Clases de usuarios y grupos
                                                                        • Clase UserSpace
                                                                          • Clases commtrace
                                                                            • Modelo de commtrace
                                                                            • Clases Format y FormatProperties
                                                                              • Ejecutar Format como un programa autoacutenomo
                                                                                • Clase Prolog
                                                                                • Clase Frame
                                                                                • Clase LanHeader
                                                                                • Clase IPPacket
                                                                                • Clase Header
                                                                                • Ejemplo coacutemo se utilizan las clases commtrace
                                                                                  • Clases HTML
                                                                                    • Clase BidiOrdering
                                                                                    • Clase HTMLAlign
                                                                                    • Clase HTMLDocument
                                                                                      • Coacutemo se utiliza HTMLDocument para crear datos HTML
                                                                                      • Coacutemo se utiliza HTMLDocument para crear datos FO XSL
                                                                                        • Clases habilitadas para FO XSL
                                                                                          • Ejemplos coacutemo se utiliza HTMLDocument
                                                                                            • Clases de formularios HTML
                                                                                              • Clases FormInput
                                                                                                • Clase ButtonFormInput
                                                                                                • Clase FileFormInput
                                                                                                • Clase HiddenFormInput
                                                                                                • Clase ImageFormInput
                                                                                                • Clase ResetFormInput
                                                                                                • Clase SubmitFormInput
                                                                                                • Clase TextFormInput
                                                                                                • Clase PasswordFormInput
                                                                                                • Clase RadioFormInput
                                                                                                • Clase CheckboxFormInput
                                                                                                  • Clase LayoutFormPanel
                                                                                                    • GridLayoutFormPanel
                                                                                                    • Clase LineLayoutFormPanel
                                                                                                      • Clase TextAreaFormElement
                                                                                                      • Clase LabelFormElement
                                                                                                      • Clase SelectFormElement
                                                                                                      • Clase SelectOption
                                                                                                      • Clase RadioFormInputGroup
                                                                                                        • Clase HTMLHead
                                                                                                        • Clase HTMLHeading
                                                                                                        • Clase HTMLHyperlink
                                                                                                        • Clase HTMLImage
                                                                                                        • Clases HTMLList
                                                                                                        • Clase HTMLMeta
                                                                                                        • Clase HTMLParameter
                                                                                                        • Clase HTMLServlet
                                                                                                        • Clases de tablas HTML
                                                                                                          • Clase HTMLTableCell
                                                                                                          • Clase HTMLTableRow
                                                                                                          • Clase HTMLTableHeader
                                                                                                          • Clase HTMLTableCaption
                                                                                                            • Clase HTMLText
                                                                                                            • Clases HTMLTree
                                                                                                              • Clase HTMLTreeElement
                                                                                                              • Clase FileTreeElement
                                                                                                              • Clase FileListElement
                                                                                                              • Clase FileListRenderer
                                                                                                                  • Clases ReportWriter
                                                                                                                    • Clases Context
                                                                                                                    • Clase JSPReportProcessor
                                                                                                                    • Clase XSLReportProcessor
                                                                                                                      • Clases de seguridad
                                                                                                                        • SSL (capa de sockets segura)
                                                                                                                          • Utilizacioacuten de SSL para cifrar datos entre IBM Toolbox para Java y los servidores IBM i
                                                                                                                            • Configuracioacuten de IBM i para utilizar SSL
                                                                                                                                • Servicios de autenticacioacuten
                                                                                                                                  • Clases de servlets
                                                                                                                                    • Clases de autenticacioacuten
                                                                                                                                    • Clase RowData
                                                                                                                                      • Clase ListRowData
                                                                                                                                      • Clase RecordListRowData
                                                                                                                                      • Clase ResourceListRowData
                                                                                                                                      • Clase QLResultSetRowData
                                                                                                                                        • Clases RowMetaData
                                                                                                                                          • Clase ListMetaData
                                                                                                                                          • Clase RecordFormatMetaData
                                                                                                                                          • Clase SQLResultSetMetaData
                                                                                                                                            • Clases conversoras
                                                                                                                                              • Clase StringConverter
                                                                                                                                              • Clase HTMLFormConverter
                                                                                                                                              • Clase HTMLTableConverter
                                                                                                                                                  • Clases de utilidades
                                                                                                                                                    • Clases de instalacioacuten y actualizacioacuten en cliente
                                                                                                                                                    • AS400ToolboxJarMaker
                                                                                                                                                      • Componentes soportados en IBM Toolbox para Java
                                                                                                                                                      • Valores de CCSID y codificacioacuten soportados por IBM Toolbox para Java
                                                                                                                                                        • Clase CommandHelpRetriever
                                                                                                                                                        • Clase CommandPrompter
                                                                                                                                                        • RunJavaApplication
                                                                                                                                                        • JPing
                                                                                                                                                            • Beans de IBM Toolbox para Java
                                                                                                                                                            • JDBC
                                                                                                                                                              • Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java para IBM i 72
                                                                                                                                                              • Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java para IBM i 71
                                                                                                                                                              • Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java para IBM i 61
                                                                                                                                                              • Mejoras efectuadas en el soporte JDBC de IBM Toolbox para Java para IBM i 54
                                                                                                                                                              • Propiedades JDBC de IBM Toolbox para Java
                                                                                                                                                                • Propiedad LibraryList de JDBC
                                                                                                                                                                  • Tipos SQL JDBC
                                                                                                                                                                    • Soporte de proxy
                                                                                                                                                                    • Capa de Sockets Segura y Extensioacuten de sockets seguros Java
                                                                                                                                                                    • Componentes XML (Extensible Markup Language)
                                                                                                                                                                      • PCML (Program Call Markup Language)
                                                                                                                                                                        • Requisitos para utilizar PCML
                                                                                                                                                                        • Construir llamadas a programa IBM i con PCML
                                                                                                                                                                        • Sintaxis de PCML
                                                                                                                                                                          • Coacutedigo PCML program
                                                                                                                                                                          • Coacutedigo PCML struct
                                                                                                                                                                          • Coacutedigo PCML data
                                                                                                                                                                            • Valores de longitud y precisioacuten
                                                                                                                                                                              • Record Format Markup Language
                                                                                                                                                                                • Requisitos para utilizar RFML
                                                                                                                                                                                • Ejemplo coacutemo se utiliza RFML en comparacioacuten con el uso de las clases Record de IBM Toolbox para Java
                                                                                                                                                                                • Clase RecordFormatDocument
                                                                                                                                                                                • Documentos RFML y sintaxis RFML
                                                                                                                                                                                  • Definicioacuten de tipo de documento RFML (DTD)
                                                                                                                                                                                  • Coacutedigo RFML data
                                                                                                                                                                                  • Coacutedigo RFML rfml
                                                                                                                                                                                  • Coacutedigo RFML recordformat
                                                                                                                                                                                  • Coacutedigo RFML struct
                                                                                                                                                                                      • Analizador XML y procesador XSLT
                                                                                                                                                                                      • XPCML (Extensible Program Call Markup Language)
                                                                                                                                                                                        • Ventajas de XPCML respecto de PCML
                                                                                                                                                                                        • Requisitos de uso de XPCML
                                                                                                                                                                                        • Esquema y sintaxis XPCML
                                                                                                                                                                                          • Comparacioacuten del fuente XPCML con el fuente PCML
                                                                                                                                                                                          • Archivo xpcmlxsd de esquema
                                                                                                                                                                                          • Sintaxis de XPCML
                                                                                                                                                                                          • Atributos de coacutedigos XPCML
                                                                                                                                                                                            • Utilizacioacuten de XPCML
                                                                                                                                                                                              • Convertir fuente PCML existente en XPCML
                                                                                                                                                                                              • Utilizar XPCML para llamar a un programa del servidor
                                                                                                                                                                                              • Obtener los resultados de una llamada a programa en formato de XPCML
                                                                                                                                                                                              • Pasar valores de paraacutemetros como XPCML
                                                                                                                                                                                              • Coacutemo se utiliza fuente XPCML condensado
                                                                                                                                                                                              • Identificar errores de anaacutelisis en XPCML
                                                                                                                                                                                                • Preguntas habituales (FAQ)
                                                                                                                                                                                                • Consejos para la programacioacuten
                                                                                                                                                                                                  • Coacutemo concluir el programa Java
                                                                                                                                                                                                  • Nombres de viacutea de acceso del sistema de archivos integrado para objetos de servidor
                                                                                                                                                                                                  • Gestionar conexiones en programas Java
                                                                                                                                                                                                  • Maacutequina virtual Java de IBM i
                                                                                                                                                                                                    • Comparacioacuten de la maacutequina virtual Java de IBM i y las clases de IBM Toolbox para Java
                                                                                                                                                                                                    • Ejecutar las clases de IBM Toolbox para Java en la maacutequina virtual Java de IBM i
                                                                                                                                                                                                    • Establecer el nombre del sistema el ID de usuario y la contrasentildea con un objeto AS400 en la maacutequina virtual Java de IBM i
                                                                                                                                                                                                      • Agrupacioacuten de almacenamiento auxiliar (ASP) independiente
                                                                                                                                                                                                      • Excepciones
                                                                                                                                                                                                      • Clase Trace
                                                                                                                                                                                                      • Optimizacioacuten de IBM i
                                                                                                                                                                                                      • Mejoras en el rendimiento
                                                                                                                                                                                                      • Clases de instalacioacuten y actualizacioacuten en cliente
                                                                                                                                                                                                      • AS400ToolboxJarMaker
                                                                                                                                                                                                      • Soporte de idiomas nacionales para Java
                                                                                                                                                                                                      • Servicio y soporte para IBM Toolbox para Java
                                                                                                                                                                                                        • Ejemplos de coacutedigo
                                                                                                                                                                                                          • Ejemplos clases de acceso
                                                                                                                                                                                                          • Ejemplos JavaBeans
                                                                                                                                                                                                          • Ejemplos clases commtrace
                                                                                                                                                                                                          • Ejemplos de las clases HTML
                                                                                                                                                                                                          • Ejemplos PCML (Program Call Markup Language)
                                                                                                                                                                                                          • Ejemplos clases ReportWriter
                                                                                                                                                                                                          • Ejemplos RFML
                                                                                                                                                                                                          • Ejemplo coacutemo se utiliza una credencial de siacutembolo de perfil para intercambiar la identidad de la hebra de IBM i
                                                                                                                                                                                                          • Ejemplos de las clases de servlets
                                                                                                                                                                                                          • Ejemplos simples de programacioacuten
                                                                                                                                                                                                          • Ejemplos consejos para la programacioacuten
                                                                                                                                                                                                          • Ejemplos clases de utilidades
                                                                                                                                                                                                          • Ejemplos XPCML
                                                                                                                                                                                                            • Informacioacuten relacionada para IBM Toolbox para Java
                                                                                                                                                                                                              • Avisos
                                                                                                                                                                                                                • Informacioacuten sobre interfaces de programacioacuten
                                                                                                                                                                                                                • Marcas registradas
                                                                                                                                                                                                                • Teacuterminos y condiciones
Page 3: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 4: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 5: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 6: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 7: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 8: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 9: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 10: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 11: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 12: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 13: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 14: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 15: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 16: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 17: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 18: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 19: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 20: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 21: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 22: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 23: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 24: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 25: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 26: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 27: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 28: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 29: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 30: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 31: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 32: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 33: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 34: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 35: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 36: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 37: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 38: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 39: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 40: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 41: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 42: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 43: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 44: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 45: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 46: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 47: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 48: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 49: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 50: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 51: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 52: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 53: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 54: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 55: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 56: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 57: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 58: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 59: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 60: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 61: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 62: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 63: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 64: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 65: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 66: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 67: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 68: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 69: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 70: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 71: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 72: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 73: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 74: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 75: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 76: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 77: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 78: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 79: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 80: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 81: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 82: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 83: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 84: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 85: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 86: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 87: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 88: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 89: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 90: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 91: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 92: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 93: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 94: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 95: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 96: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 97: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 98: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 99: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 100: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 101: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 102: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 103: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 104: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 105: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 106: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 107: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 108: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 109: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 110: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 111: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 112: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 113: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 114: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 115: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 116: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 117: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 118: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 119: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 120: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 121: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 122: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 123: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 124: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 125: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 126: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 127: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 128: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 129: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 130: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 131: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 132: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 133: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 134: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 135: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 136: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 137: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 138: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 139: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 140: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 141: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 142: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 143: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 144: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 145: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 146: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 147: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 148: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 149: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 150: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 151: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 152: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 153: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 154: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 155: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 156: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 157: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 158: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 159: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 160: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 161: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 162: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 163: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 164: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 165: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 166: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 167: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 168: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 169: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 170: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 171: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 172: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 173: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 174: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 175: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 176: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 177: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 178: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 179: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 180: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 181: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 182: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 183: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 184: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 185: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 186: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 187: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 188: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 189: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 190: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 191: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 192: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 193: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 194: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 195: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 196: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 197: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 198: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 199: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 200: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 201: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 202: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 203: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 204: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 205: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 206: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 207: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 208: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 209: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 210: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 211: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 212: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 213: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 214: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 215: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 216: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 217: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 218: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 219: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 220: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 221: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 222: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 223: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 224: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 225: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 226: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 227: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 228: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 229: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 230: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 231: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 232: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 233: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 234: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 235: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 236: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 237: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 238: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 239: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 240: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 241: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 242: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 243: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 244: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 245: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 246: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 247: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 248: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 249: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 250: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 251: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 252: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 253: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 254: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 255: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 256: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 257: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 258: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 259: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 260: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 261: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 262: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 263: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 264: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 265: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 266: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 267: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 268: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 269: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 270: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 271: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 272: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 273: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 274: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 275: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 276: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 277: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 278: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 279: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 280: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 281: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 282: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 283: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 284: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 285: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 286: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 287: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 288: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 289: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 290: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 291: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 292: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 293: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 294: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 295: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 296: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 297: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 298: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 299: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 300: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 301: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 302: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 303: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 304: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 305: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 306: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 307: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 308: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 309: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 310: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 311: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 312: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 313: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 314: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 315: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 316: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 317: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 318: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 319: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 320: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 321: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 322: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 323: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 324: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 325: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 326: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 327: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 328: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 329: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 330: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 331: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 332: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 333: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 334: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 335: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 336: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 337: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 338: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 339: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 340: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 341: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 342: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 343: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 344: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 345: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 346: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 347: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 348: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 349: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 350: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 351: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 352: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 353: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 354: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 355: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 356: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 357: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 358: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 359: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 360: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 361: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 362: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 363: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 364: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 365: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 366: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 367: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 368: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 369: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 370: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 371: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 372: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 373: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 374: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 375: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 376: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 377: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 378: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 379: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 380: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 381: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 382: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 383: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 384: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 385: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 386: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 387: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 388: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 389: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 390: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 391: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 392: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 393: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 394: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 395: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 396: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 397: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 398: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 399: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 400: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 401: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 402: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 403: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 404: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 405: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 406: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 407: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 408: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 409: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 410: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 411: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 412: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 413: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 414: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 415: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 416: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 417: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 418: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 419: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 420: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 421: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 422: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 423: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 424: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 425: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 426: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 427: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 428: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 429: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 430: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 431: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 432: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 433: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 434: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 435: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 436: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 437: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 438: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 439: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 440: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 441: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 442: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 443: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 444: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 445: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 446: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 447: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 448: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 449: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 450: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 451: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 452: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 453: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 454: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 455: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 456: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 457: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 458: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 459: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 460: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 461: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 462: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 463: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 464: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 465: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 466: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 467: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 468: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 469: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 470: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 471: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 472: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 473: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 474: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 475: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 476: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 477: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 478: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 479: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 480: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 481: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 482: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 483: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 484: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 485: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 486: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 487: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 488: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 489: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 490: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 491: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 492: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 493: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 494: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 495: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 496: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 497: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 498: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 499: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 500: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 501: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 502: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 503: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 504: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 505: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 506: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 507: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 508: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 509: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 510: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 511: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 512: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 513: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 514: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 515: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 516: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 517: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 518: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 519: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 520: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 521: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 522: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 523: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 524: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 525: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 526: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 527: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 528: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 529: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 530: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 531: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 532: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 533: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 534: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 535: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 536: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 537: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 538: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 539: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 540: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 541: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 542: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 543: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 544: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 545: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 546: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 547: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 548: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 549: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 550: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 551: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 552: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 553: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 554: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 555: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 556: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 557: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 558: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 559: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 560: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 561: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 562: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 563: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 564: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 565: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 566: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 567: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 568: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 569: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 570: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 571: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 572: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 573: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 574: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 575: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 576: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 577: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 578: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 579: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 580: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 581: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 582: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 583: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 584: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 585: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 586: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 587: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 588: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 589: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 590: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 591: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 592: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 593: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 594: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 595: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 596: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 597: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 598: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 599: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 600: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 601: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 602: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 603: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188
Page 604: Programación IBMToolbox para Java · Instalación y gestión de IBM Toolbox para Java. . . 2 Gestión de la instalación de IBM Toolbox para ... Clases de usuarios y grupos .....188