Desarrollo Java mediante JCICSX

Las clases de API de JCICSX le permiten acceder a los servicios CICS a través de una API de Java. Dan soporte a un subconjunto de la funcionalidad de CICS , se puede ejecutar de forma remota y son más fáciles de simular y apéndices que las clases Java de JCICS. Las clases de la API JCICSX se pueden utilizar junto con la API JCICS, pero sólo los comandos que utilizan JCICSX pueden beneficiarse de estas características mejoradas.

¿Por qué utilizar JCICSX?

Las clases de la API JCICSX amplían partes de la API JCICS con la capacidad de desarrollo remoto y mocking. Tienen las siguientes ventajas:
  • Las clases permiten burlas y apéndices fáciles. Las clases de la API de JCICSX facilitan la aplicación de la inversión de control y la inyección de dobles de prueba, de forma que pueda simular las llamadas a métodos de JCICSX en su estación de trabajo durante las pruebas unitarias, utilizando frameworks como Mockito, EasyMock, y PowerMock.
  • Las clases se pueden ejecutar de forma remota en entornos de desarrollo. Puede enlazar con programas o pasar datos a través de canales y contenedores en una región CICS remota ejecutando aplicaciones Java CICS en la estación de trabajo local, sin tener que desplegar repetidamente las aplicaciones en CICS. Además, no es necesaria ninguna modificación en el código de aplicación independientemente de si se ejecuta en CICS o en la estación de trabajo local.
  • La sintaxis es simplificada y natural para los desarrolladores de Java que están más familiarizados con constructores Java más recientes.
  • Puede aprovechar las prestaciones de los IDE de Java modernos, como la asistencia de contenido, la depuración, la navegación inteligente y el intercambio en caliente. Esto se consigue mediante el soporte de la burla y el desarrollo remoto en un IDE local, incluyendo IntelliJ y Eclipse.
  • El código escrito utilizando las clases de la API JCICSX puede ejecutarse sin cambios, tanto en modo de desarrollo remoto como cuando se despliega para ejecutarse en CICS.
  • Es compatible con la API JCICS. Las clases de la API JCICSX pueden utilizarse junto con la API JCICS en el mismo programa, pero sólo los programas JCICSX puros pueden beneficiarse de las funciones mejoradas, como el desarrollo remoto. Por ejemplo, si mezcla JCICS y JCICSX en el mismo programa, no podrá ejecutarlo remotamente en su entorno de desarrollo.

Restricciones de JCICSX

Las clases de la API JCICSX soportan sólo un subconjunto de la funcionalidad CICS que aborda algunos de los escenarios más comunes para utilizar Java en CICS, centrados en la vinculación a programas CICS utilizando canales y contenedores. Para obtener más información, consulte Referencia: Clases de la API JCICSX. Si necesita utilizar funciones más allá de ese ámbito, considere utilizar la API JCICS.

Las herramientas del lado del cliente están disponibles inicialmente para permitir a los usuarios de Liberty utilizar JCICSX para acceder a CICS desde un servlet.

Las clases de la API JCICSX no funcionarán correctamente dentro de los hilos de trabajo que se envían como parte de un servlet asíncrono.

Modelo de seguridad de JCICSX

Para el desarrollo remoto, JCICSX requiere que se configure un servidor Liberty JVM en CICS para recibir las peticiones remotas de JCICSX. La herramienta del lado del cliente JCICSX crea una nueva tarea CICS con una llamada al servidor. Las siguientes peticiones JCICSX desde ese cliente se ejecutarán bajo la misma tarea, y deben ser emitidas por el mismo usuario. Esto es transparente cuando se utilizan las herramientas del lado del cliente. El servidor Liberty JVM puede configurarse para utilizar autenticación y autorización para llamadas JCICSX, y la comunicación entre el cliente y el servidor remoto puede configurarse para utilizar SSL. Para obtener más información, consulte Cómo funciona: Securing JCICSX applications y Designing security for JCICSX applications.

En otros casos, por ejemplo cuando las aplicaciones se despliegan para ejecutarse en CICS, JCICSX adopta un modelo de seguridad idéntico al de JCICS.

Configuración del entorno para JCICSX

Configure su entorno para JCICSX como se indica a continuación:
  • Si desea utilizar JCICSX para el desarrollo remoto, se necesita una configuración extra para establecer la infraestructura de soporte en CICS y en su estación de trabajo local. Tenga en cuenta que la infraestructura de soporte en CICS sólo es necesaria en las regiones de desarrollo. La API JCICSX está disponible en todos los servidores CICS JVM por defecto.
  • Obligatorio: Configure el entorno de compilación importando la dependencia JCICSX.
Requerido para el desarrollo remoto Los programadores del sistema deben configurar un servidor Liberty JVM en CICS TS con la función de servidor JCICSX (cicsts:jcicsxServer-1.0) activada
Tenga en cuenta que JCICSX soporta el desarrollo remoto para servlets Liberty.
  1. Configure un servidor JVM de Liberty en una región CICS de desarrollo en la que la aplicación se ejecutará de forma remota. Se recomienda configurar un servidor JVM únicamente para fines de desarrollo remoto, de forma que el servidor JVM remoto y los servidores JVM de aplicaciones reales puedan tener una configuración diferente. De lo contrario, la configuración podría entrar en conflicto. Para obtener más información, consulte Configuración de un servidor JVM de Liberty.
  2. Añada la característica de Liberty cicsts:jcicsxServer-1.0 al archivo server.xml del servidor JVM de Liberty:
    <featureManager>
        <feature>cicsts:jcicsxServer-1.0</feature>
    </featureManager>
  3. Permita que el desarrollador conozca el nombre de host y el puerto httpEndpoint de este servidor JVM de Liberty.
  4. Si es necesario, configure la seguridad para el servidor JVM de Liberty remoto. Consulte Diseño de la seguridad para aplicaciones JCICSX.
Requerido para el desarrollo remoto Los desarrolladores configuran el entorno de desarrollo local para ejecutar código Java localmente y realizar llamadas remotas para JCICSX>
  1. Si no dispone de un runtime Liberty en su estación de trabajo local, instale uno, por ejemplo, WebSphere® Liberty Web Profile. Debe estar en Liberty 19.0.0.3 o más tarde. Para más información, consulte WebSphere Liberty para desarrolladores.
  2. Si utiliza Java EE 7 o Java EE 8 en su entorno de desarrollo local, instale la función jcicsxClient-1.0 Liberty en el tiempo de ejecución general de Liberty en su estación de trabajo local. Si utiliza Jakarta EE 9 y Jakarta EE 10 en su entorno de desarrollo local, instale la función jcicsxClient-2.0 Liberty en el tiempo de ejecución general de Liberty en su estación de trabajo local. En una línea de comandos, navega hasta el directorio bin de tu servidor Liberty local e introduce el siguiente comando installUtility :
    installUtility install jcicsxClient-1.0 jsonp-1.0
    installUtility install jcicsxClient-2.0 jsonp-1.0
    Nota: Para utilizar la función jcicsxClient-2.0 Liberty, debe tener Liberty fix pack 25.0.0.3 y superior en su entorno de desarrollo local. Para que Liberty fix pack 25.0.0.3 o 25.0.0.6 sean compatibles con la función jcicsxClient-2.0 Liberty, es necesario que Liberty APAR fix OLGH31741. Para Liberty fix pack 25.0.0.9 y superiores, no es necesario Liberty APAR fix OLGH31741 ya que el ifix se integrará en Liberty.
  3. Cree un servidor de Liberty local que utilice el tiempo de ejecución de Liberty en la estación de trabajo para ejecutar el código Java.
  4. Habilita la función jcicsxClient-1.0 o jcicsxClient-2.0 en tu servidor Liberty local añadiendo esto a tu server.xml:
    <featureManager>
        <feature>usr:jcicsxClient-1.0</feature>
    </featureManager>
    <featureManager>
        <feature>usr:jcicsxClient-2.0</feature>
    </featureManager>
  5. Configure el archivo server.xml en el servidor de Liberty local con el nombre de host y el puerto del servidor JVM de Liberty remoto que ha creado el programador del sistema, que contiene la característica cicsts:jcicsxServer-1.0 :
    <usr_jcicsxClient serverUri="http://hostname:port"/>

    cicsts:jcicsxServer-1.0 es compatible con las dos versiones del cliente jcicsxClient-1.0 y jcicsxClient-2.0.

    Si el servidor remoto Liberty JVM está configurado para utilizar autenticación, puedes encriptar la contraseña de usuario utilizando el comando securityUtility proporcionado en el directorio bin del servidor Liberty local. Por lo tanto, el fragmento de código podría tener este aspecto:
    <usr_jcicsxClient serverUri="http://hostname:port">
        <basicAuthentication user="myUser" password="{aes}ADwac72WXpSCr2YDUv3hHgjfOa0moXZDj626MmM4DbtT"/>
    </usr_jcicsxClient>
  6. Si el servidor JVM de Liberty remoto utiliza la conexión SSL para el cifrado de datos, el servidor de Liberty local necesita confiar en el certificado del servidor remoto. Consulte las instrucciones para los desarrolladores de aplicaciones en Ejemplo de diseño: Protección del servidor JCICSX utilizando la autenticación de cliente TLS.
Requerido Los desarrolladores resuelven la dependencia JCICSX
Las clases de la API JCICSX están disponibles en CICS TS junto con la API JCICS en CICS TS 5.6 o posterior. Puede importar clases de la API JCICSX desde cualquiera de los siguientes lugares:
  1. La biblioteca de rutas de compilación suministrada con el SDK IBM® CICS para Java en IBM CICS Explorer®.

    Al utilizar CICS Explorer para añadir una biblioteca a su proyecto, JCICSX está automáticamente disponible como API en su cliente. Consulte el Paso 1 en Creación de un proyecto de Dynamic Web para configurar su proyecto de Dynamic Web para que se dirija a CICS TS. Si no ha instalado CICS Explorer instálelo como se describe en Configuración del entorno de desarrollo.

  2. El artefacto com.ibm.cics.jcicsx artefacto en Maven Central. Si no ha instalado Gradle o Maven, instale cualquiera de ellos como se describe en Configuración de su entorno de desarrollo.

    Si su empresa utiliza repositorios alojados localmente o de lista de permitidos, puede utilizar herramientas como JFrog Artifactory o Sonatype Nexus para configurar el artefacto que se va a obtener de dichos repositorios.

  3. El archivo com.ibm.cics.jcicsx.jar proporcionado con CICS en el directorio USSHOME , que puede copiar en el entorno de compilación. Para obtener más información, consulte Importación manual de bibliotecas Java.

Casos prácticos y ejemplos de JCICSX

Una vez finalizada la configuración, puede empezar a codificar en las clases de la API JCICSX.

Durante las pruebas unitarias, puede simular las llamadas a métodos JCICSX en su estación de trabajo utilizando marcos de pruebas conocidos.

Cuando el servidor Liberty JVM está habilitado para el desarrollo remoto, puede ejecutar el código de la aplicación en su servidor Liberty local para comprobar cómo se comportará su código cuando se ejecute en CICS o explorar qué información se devuelve en los comandos de la API, realizando llamadas remotas a una región CICS. Cuando ejecute su aplicación dentro del servidor Liberty local, cualquier llamada JCICSX se redirigirá automáticamente a su región CICS. Cuando su aplicación se despliega en un servidor JVM que se ejecuta en una región real CICS, las mismas llamadas JCICSX se harán directamente contra CICS.

Los casos de uso típicos de JCICSX se muestran en Ejemplos de JCICSX. Para más detalles sobre todas las clases de la API JCICSX, véase JCICS Javadoc reference.

Mejores prácticas

Si estás desarrollando con JCICSX, te recomendamos que ejecutes tu código en un servidor Liberty local en tu estación de trabajo. Esto puede reducir los problemas en torno a diferentes aplicaciones en conflicto entre sí cuando se ejecuta en un servidor JVM compartida en un CICS región de desarrollo.

Si está planeando desplegar aplicaciones en un servidor Liberty JVM que se ejecuta en CICS TS, consulte Consideraciones para una JVM compartida para conocer las mejores prácticas.

Resolución de problemas

Puede utilizar el depurador del IDE de Java, el mensaje de consola y la información de manejo de errores para depurar las aplicaciones. JCICSX también permite que varios clientes depuren al mismo tiempo.

Si se produce un error relacionado con CICS , por ejemplo, el servidor JVM remoto o la transacción CICS , se devuelve un código de respuesta (RESP). El programador del sistema puede utilizar los rastreos y registros del servidor JVM para la depuración. Para obtener más información, consulte Resolución de problemas de aplicaciones Java.

Referencia: Clases de la API JCICSX

Las clases de la API JCICSX soportan un subconjunto de la funcionalidad CICS como sigue. Para más detalles sobre cada clase, véase JCICS Javadoc reference.
Tabla| 1. Clases de la API JCICSX
Clases Descripción
Contexto de CICS El entorno en el que se ejecuta la API. Punto de entrada a la API JCICSX.
Canal Cree o suprima un canal, o recupere información sobre los contenedores que contiene.
Contenedor Cree un contenedor, recupere información sobre un contenedor, obtenga datos de y coloque datos en un contenedor o suprima un contenedor.
ProgramLinker Enlace a un programa.

Referencia: Asignación entre JCICSX y los comandos de la API EXEC CICS

Esta tabla muestra cómo se asignan los métodos de la API JCICSX a los comandos de la API EXEC CICS. Sólo se listan los métodos que tienen relaciones de correlación.
Tabla 2. Mapeo entre JCICSX y EXEC CICS comandos API
Clases Métodos EXEC CICS mandatos API
BITContainer
CHARContainer
WritableBITContainer
WritableCHARContainer
WritableContainer
append EXEC CICS PUT64 CONTAINER APPEND
6.2 y más tarde
BITContainer
WritableBITContainer
appendWith EXEC CICS PUT64 CONTAINER APPEND
6.2 y más tarde
BITContainer
CHARContainer
WritableBITContainer
WritableCHARContainer
WritableContainer
prepend EXEC CICS PUT64 CONTAINER PREPEND
6.2 y más tarde
BITContainer
WritableBITContainer
prependWith EXEC CICS PUT64 CONTAINER PREPEND
BITContainer
CHARContainer
WritableBITContainer
WritableCHARContainer
WritableContainer
put EXEC CICS PUT64 CONTAINER
Channel
exists
getContainerCount
EXEC CICS QUERY CHANNEL
Channel delete EXEC CICS DELETE CHANNEL
ChannelProgramLinker link EXEC CICS LINK PROGRAM
Container delete EXEC CICS DELETE CONTAINER CHANNEL
Container getLength EXEC CICS GET CONTAINER CHANNEL NODATA
ProgramLinker
link
EXEC CICS LINK PROGRAM
ReadableBITContainer
get
read
EXEC CICS GET64 CONTAINER
ReadableCHARContainer
ReadableContainer
get EXEC CICS GET64 CONTAINER