[z/OS]

Utilización de las API de salida con un espacio de direcciones externo o subsistema

Utilice esta tarea para crear una interacción entre las API de salida y el espacio de direcciones externo o subsistema.

Antes de empezar

Establezca una conexión con un espacio de direcciones externo o subsistema, como se describe en el tema que trata sobre el uso de adaptadores locales optimizados para llamar a un espacio de direcciones externo o subsistema desde una aplicación de WebSphere Application Server en z/OS.

Procedimiento

  1. Opcional: Inicie una RMLT (Resource Manager Local Transaction) si utiliza una tarea de servidor CICS (Customer Information Control System) que dé soporte a transacciones. Para utilizar una tarea de servidor CICS que da soporte a las transacciones, se utiliza la palabra clave TXN=Y al iniciar la tarea de servidor. Puede iniciar una RMLT para encapsular varias interacciones en una sola unidad de trabajo. Su componente de aplicación Java™ EE (Java Enterprise Edition) no debe estar en ejecución en una transacción global y debe tener establecido un límite LocalTransaction en Aplicación en su descriptor de despliegue de aplicación. En el ejemplo siguiente se muestra cómo iniciar la transacción local utilizando el objeto LocalTransaction, después de que el descriptor de despliegue ha cambiado:
    LocalTransaction lt = con.getLocalTransaction();
    lt.begin();

    Si desea más información sobre cómo cambiar el valor de LocalTransaction en un descriptor de despliegue de aplicación, consulte el tema, Configuración de atributos de despliegue transaccional.

    Si el componente de aplicación Java EE se ha configurado para que utilice el límite de LocalTransaction, ContainerAtBoundary, automáticamente se incluye la conexión en una RMLT cuando se obtiene la conexión. El trabajo que se lleva a cabo cuando se utiliza esa conexión se completa automáticamente cuando finaliza el componente de aplicación Java EE.

    Si el componente de aplicación Java EE se inicia en una transacción global, el conector se registra automáticamente en la transacción global cuando se obtiene la conexión. El trabajo que se lleva a cabo cuando se utiliza esa conexión se completa automáticamente cuando finaliza el componente de aplicación Java EE. El objeto ConnectionFactory que se utiliza para obtener la conexión debe haber definido la propiedad personalizada RegisterName para participar en una transacción global.

  2. Cree una interacción mediante el objeto de conexión, por ejemplo:
    Interaction int = con.createInteraction();
  3. Cree un objeto InteractionSpecImpl y establezca el nombre del servicio en la especificación de la interacción. El nombre del servicio describe el nombre del método o función que desee llamar en el sistema remoto. El nombre del servicio se proporcionó cuando el sistema remoto llamó al host o a una de las API Receive Request, o cuando se utilizó la tarea de servidor de Customer Information Control System (CICS), que es el nombre de programa que se ejecuta dentro de CICS, por ejemplo:
    InteractionSpecImpl isi = new InteractionSpecImpl();
    isi.setServiceName("MYSERVICE");
    Atención: Cuando se utilizan adaptadores locales optimizados a través de OTMA, el nombre de servicio no se define y la transacción IMS de destino se especifica en la secuencia de mensaje. El nombre de servicio se puede establecer, pero no se utiliza para adaptadores locales optimizados sobre OTMA. Para obtener más información, consulte el tema Invocación de las transacciones IMS existentes con adaptadores locales optimizados a través de OTMA.
  4. Ejecute la interacción mediante la especificación de interacción creada, por ejemplo:
    int.execute(isi, null);
  5. Si la aplicación ha utilizado una RMLT, confirme o restituya el trabajo después de haber finalizado con la última interacción. Utilice los métodos commit o rollback en el objeto LocalTransaction, por ejemplo:
    lt.commit();

Resultados

Se completa la interacción con el espacio de direcciones externo o subsistema.
Atención: Cuando se utiliza una RMLT o una transacción global, si la aplicación CICS emite un punto de sincronización durante la RMLT o la transacción global, la tarea del servidor emite una terminación anómala BBOX durante el punto de sincronización. Esto hace que el punto de sincronización falle y que CICS genere una terminación anómala ASPx. La aplicación CICS debe esperar a que WebSphere Application Server emita la a operación de punto de sincronismo llamando al método commit o rollback en el objeto LocalTransaction, o bien permitiendo que finalice el componente de aplicación Java EE.
Atención: Si desea definir el tiempo máximo que una transacción CICS puede ejecutarse cuando se importa un contexto de transacción global o RMLT a CICS desde WebSphere, modifique el valor del parámetro OTSTIMEOUT en la definición de transacción que se utiliza para iniciar la tarea de enlace del servidor de enlace CICS. De forma predeterminada, el nombre de la transacción es BBO#. Si el tiempo de ejecución de la transacción CICS sobrepasa el tiempo especificado por el parámetro OTSTIMEOUT, la tarea CICS que ejecuta la transacción CICS termina anormalmente y causa que se restituya toda la transacción global o RMLT. Para obtener información sobre cómo codificar el parámetro OTSTIMEOUT en la definición de transacción, consulte la publicación CICS Transaction Server for z/OS Resource Definition Guide.

Si el componente de aplicación Java EE participa en una transacción global o RMLT y la aplicación se comunica con un programa por lotes o un servidor de enlace CICS con la palabra clave TXN=N, la conexión del adaptador local optimizado no puede establecer una conexión con el programa de destino. El programa de destino no puede proporcionar las prestaciones de transacción que la aplicación Java EE requiere. Se muestra una excepción con el código menor 0xC9C24C3B. Este código indica que el nombre del registro de destino se ha encontrado pero no está habilitado para las transacciones. Sólo los servidores de enlace CICS habilitados con la palabra clave TXN=Y pueden dar soporte a la propagación de transacciones desde WebSphere Application Server para z/OS.

Ejemplo

El método siguiente muestra cómo iniciar una interacción con los datos de entrada y salida como una matriz de bytes (byte[]):

public byte[] driveInteraction(javax.resource.cci.ConnectionFactory cf,
javax.resource.cci.Connection con,byte[] inputDataBytes),throws javax.resource.ResourceException
	{
		// Crear una interacción mediante la conexión de adaptador local optimizado
		 		 javax.resource.cci.Interaction i = con.createInteraction();
		// InteractionSpec describe el servicio que se va a llamar
		 		 com.ibm.websphere.ola.InteractionSpecImpl isi = new com.ibm.websphere.ola.InteractionSpecImpl();
		 		 isi.setServiceName("MISERVICIO");
		// Los datos de entrada se especifican con IndexedRecord.  La primera
		// ranura del registro indizado contiene los bytes de los datos de entrada.
		 		 javax.resource.cci.RecordFactory rf = cf.getRecordFactory();
		 		 javax.resource.cci.IndexedRecord ir = rf.createIndexedRecord(null);
		 		 ir.add(inputDataBytes);
		 		 
		// La interacción devuelve otro IndexedRecord, cuya primera
		// ranura contiene los bytes de los datos de salida.
		 		 javax.resource.cci.Record or = i.execute(isi, ir);
		 		 byte[] outputDataBytes = null;
		 		 
		 if (or != null)
		 {
		 		 		 		 outputDataBytes = (byte[])((javax.resource.cci.IndexedRecord)or).get(0);
		 }
		 		 
	// Devolver los datos de salida al llamante
						return outputDataBytes;
		 }

El método siguiente muestra cómo invocar una interacción con el objeto Record del copybook generado por Rational Application Developer:

/**
	  * Ejemplo de control de una interacción de adaptador local optimizado, mediante la clase de correlación de copybook de Rational
  * Application como entrada (inputRecord) y recepción de una correlación de copybook de Rational Application Developer
  * como salida.
	*/		 
						public javax.resource.cci.Record driveInteraction(
		 			 	javax.resource.cci.Connection con,
		 			 	javax.resource.cci.Record inputRecord)
		 	throws javax.resource.ResourceException
	  {
		// Crear una interacción mediante la conexión OLA
		 			 javax.resource.cci.Interaction i = con.createInteraction();
		// InteractionSpec describe el servicio que se va a llamar com.ibm.websphere.ola.InteractionSpecImpl isi = 
		 		 new com.ibm.websphere.ola.InteractionSpecImpl();
		 		 isi.setServiceName("MISERVICIO");
		// El copybook de Rational Application Developer generado implementa 
		// javax.resource.cci.Record y se puede pasar directamente a la interacción.
		// La interacción devuelve IndexedRecord, cuya primera ranura contiene 
  // los bytes de los datos de salida.
		 			 	javax.resource.cci.Record or = i.execute(isi, inputRecord);
		 			 	javax.resource.cci.Record outputRecord = null;
		 	if (or != null)
		 {
		// En este ejemplo, RADGeneratedOutputType es el nombre de la clase de
correlación de copybook que Rational Application Developer
  // genera.
		 			 	outputRecord = new RADGeneratedOutputType();
 // Los tipos de salida se almacenan en el registro de salida que devuelve la
 // interacción, que es IndexedRecord.
		 		 byte[] outputDataBytes = 
     (byte[])((javax.resource.cci.IndexedRecord)or).get(0);
		 		 		 
 // Para convertir los bytes de salida en otro copybook generado por Rational
Application Developer, 
 // llame al método setBytes(byte[]) de dicha clase.  La clase 
 // implementará la interfaz com.ibm.etools.marshall.RecordBytes.
		 		 ((com.ibm.etools.marshall.RecordBytes)outputRecord)
        .setBytes(outputDataBytes);
		 }
		 		 
// Devolver los datos de salida al llamante
		 		 		 		 return outputRecord;
		 }

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tdat_useoutboundconnection
File name: tdat_useoutboundconnection.html