[z/OS]

Usando as APIs de Saída com o Subsistema ou Espaço de Endereço Externo

Use esta tarefa para criar uma interação entre as APIs de saída e o subsistema ou o espaço de endereço externo.

Antes de Iniciar

Estabeleça uma conexão a um subsistema ou espaço de endereço externo conforme descrito no tópico, Usando os Adaptadores Locais Otimizados para Chamar um Subsistema ou Espaço de Endereço Externo de um aplicativo WebSphere Application Server no z/OS.

Procedimento

  1. Opcional: Inicie a transação local do gerenciador de recursos (RMLT) se você estiver usando uma tarefa do servidor Customer Information Control System (CICS) que suporta transações. Para usar uma tarefa de servidor CICS que suporta transações, a palavra-chave TXN=Y é usada ao iniciar a tarefa de servidor. É possível iniciar um RMLT para encapsular várias interações em uma única unidade de trabalho. Seu componente de aplicativo Java™ Enterprise Edition (Java EE) não deve estar em execução em uma transação global e deve ter um limite LocalTransaction configurado para Aplicativo no seu descritor de implementação de aplicativo. O exemplo a seguir mostra como iniciar uma transação local usando o objeto LocalTransaction, após o descritor de implementação ter sido alterado:
    LocalTransaction lt = con.getLocalTransaction();
    lt.begin();

    Para obter informações adicionais sobre como alterar a configuração de LocalTransaction em um descritor de implementação do aplicativo, consulte o tópico Configurando os Atributos de Implementação Transacionais.

    Se seu componente de aplicativo Java EE estiver configurado para usar o limite LocalTransaction, ContainerAtBoundary, a conexão será listada automaticamente em um RMLT quando a conexão for obtida. O trabalho feito quando usar essa conexão é concluído automaticamente quando o componente de aplicativo Java EE ser finalizado.

    Se seu componente de aplicativo Java EE estiver iniciando em uma transação global, o conector será listado automaticamente na transação global quando a conexão for obtida. O trabalho feito quando usar essa conexão é concluído automaticamente quando o componente de aplicativo Java EE ser finalizado. O objeto ConnectionFactory usado para obter sua conexão deve ter a propriedade customizada RegisterName configurada para participar de uma transação global.

  2. Crie uma interação usando o objeto de conexão, por exemplo:
    Interaction int = con.createInteraction();
  3. Crie um objeto InteractionSpecImpl e configure o nome do serviço para a especificação de interação. O nome do serviço descreve o nome do método ou função que você deseja chamar no sistema remoto. O nome do serviço que foi fornecido quando o sistema remoto chamou o host ou uma das APIs Receber Solicitação, ou quando usar a tarefa do servidor Customer Information Control System (CICS), é o nome do programa para iniciar dentro do CICS, por exemplo:
    InteractionSpecImpl isi = new InteractionSpecImpl();
    isi.setServiceName("MYSERVICE");
    Atenção: Quando usar os adaptadores locais otimizados sobre o OTMA, o nome do serviço não será definido e a transação do IMS de destino será especificada no fluxo de mensagem. O nome do serviço pode ser configurado, mas não é usado para os adaptadores locais otimizados sobre o OTMA. Para obter mais informações, consulte o tópico, Chamando Transações IMS Existentes com Adaptadores Locais Otimizados sobre OTMA.
  4. Execute a interação usando a especificação de interação criada, por exemplo:
    int.execute(isi, null);
  5. Se seu aplicativo usou um RMLT, confirme ou restaure o trabalho depois de concluir sua última interação. Use os métodos commit ou rollback no objeto LocalTransaction, por exemplo:
    lt.commit();

Resultados

A interação ao subsistema ou espaço de endereço externo deve estar completa.
Atenção: Quando usar uma RMLT ou uma transação global, se o aplicativo CICS emitir um ponto de sincronização durante a RMLT ou transação global, a tarefa do servidor emitirá um encerramento de forma anormal BBOX durante o ponto de sincronização. Isso faz com que o ponto de sincronização falhe e um encerramento de forma anormal ASPx seja gerado peloCICS. O aplicativo CICS deve aguardar o WebSphere Application Server emitir a operação do ponto de sincronização ao chamar o método commit ou rollback no objeto LocalTransaction ou ao permitir que o componente de aplicativoJava EE seja concluído.
Atenção: Se desejar definir o tempo máximo que uma transação CICS pode ser executada quando um contexto de transação global ou RMLT for importado para o CICS a partir do WebSphere, modifique o valor de parâmetro OTSTIMEOUT na definição de transação usada para iniciar a tarefa do link de servidor de link CICS. Por padrão, o nome da transação é BBO#. Se o tempo de execução de transação do CICS exceder o tempo especificado pelo parâmetro OTSTIMEOUT, a tarefa do CICS que está executando a transação CICS será encerrada anormalmente, causando o retrocesso de toda a transação global ou RMLT. Para obter informações adicionais sobre como codificar o parâmetro OTSTIMEOUT na definição de transação, consulte o Guia de Definição de Recursos do CICS Transaction Server for z/OS.

Se seu componente de aplicativoJava EE estiver participando de um RMLT ou de uma transação global, e o aplicativo estiver se comunicando com um programa em lote ou com um servidor de link CICS iniciado com a palavra-chave TXN=N, a conexão do adaptador local otimizado não poderá estabelecer uma conexão com o programa de destino. O programa de destino não pode fornecer as capacidades de transação necessárias pelo aplicativo Java EE. É exibida uma exceção com o código menor 0xC9C24C3B. Este código indica que o nome de registro de destino foi localizado, mas não está ativado para transações. Apenas os servidores de link CICS ativados com a palavra-chave TXN=Y podem suportar a propagação de transações do WebSphere Application Server para z/OS.

Exemplo

O seguinte método mostra como iniciar uma interação com os dados de entrada e de saída como uma matriz de bytes (byte[]):

public byte[] driveInteraction(javax.resource.cci.ConnectionFactory cf,
javax.resource.cci.Connection con,byte[] inputDataBytes),throws javax.resource.ResourceException
	{
	// Crie uma interação usando a conexão do adaptador local otimizado
		 javax.resource.cci.Interaction i = con.createInteraction();
	// InteractionSpec descreve o serviço que desejamos chamar
		 com.ibm.websphere.ola.InteractionSpecImpl isi = new com.ibm.websphere.ola.InteractionSpecImpl();
		 isi.setServiceName("MYSERVICE");
	// Os dados de entrada são especificados usando um IndexedRecord.  O primeiro
	// slot no registro indexado contém os bytes dos dados de entrada.
		 javax.resource.cci.RecordFactory rf = cf.getRecordFactory();
		 javax.resource.cci.IndexedRecord ir = rf.createIndexedRecord(null);
		 ir.add(inputDataBytes);
		 		 
	// A interação retorna outro IndexedRecord, cujo primeiro
	// slot contém os bytes de dados de saída.
		 javax.resource.cci.Record or = i.execute(isi, ir);
		 byte[] outputDataBytes = null;
		 		 
		 if (or != null)
		 {
		 		 outputDataBytes = (byte[])((javax.resource.cci.IndexedRecord)or).get(0);
		 }
		 		 
	// Retorne os dados de saída ao responsável pela chamada 
			return outputDataBytes;
		 }

O seguinte método mostra como iniciar uma interação usando um objeto Record do copybook gerado pelo Rational Application Developer:

/**
	* Um exemplo de condução de uma interação do adaptador local otimizada, usando uma 
  * classe de mapeamento de copybook do Rational Application Developer como entrada (inputRecord) e um recebimento
  * de um mapeamento de copybook do Rational Application Developer como saída.
	*/		 
			public javax.resource.cci.Record driveInteraction(
		 	javax.resource.cci.Connection con,
		 	javax.resource.cci.Record inputRecord)
		 	throws javax.resource.ResourceException
	  {
	// Crie uma interação usando a conexão OLA
		 	javax.resource.cci.Interaction i = con.createInteraction();
	// InteractionSpec descreve o serviço que desejamos chamar com.ibm.websphere.ola.InteractionSpecImpl isi = 
		 new com.ibm.websphere.ola.InteractionSpecImpl();
		 isi.setServiceName("MYSERVICE");
	// O Rational Application Developer gerou implementações de copybook 
	// javax.resource.cci.Record e pode ser transmitido diretamente para a interação.
	// A interação retorna um IndexedRecord, cujo primeiro slot contém 
  // bytes de dados de saída.
		 	javax.resource.cci.Record or = i.execute(isi, inputRecord);
		 	javax.resource.cci.Record outputRecord = null;
		 	if (or != null)
		 {
	// Neste exemplo, RADGeneratedOutputType é o nome da classe de mapeamento de
  // copybook gerada pelo Rational Application Developer.
		 	outputRecord = new RADGeneratedOutputType();
 // Os bytes de saída são armazenados no registro de saída retornado na
 // interação, que é um IndexedRecord.
		 byte[] outputDataBytes = 
     (byte[])((javax.resource.cci.IndexedRecord)or).get(0);
		 		 		 
 // Para converter os bytes de saída para outro copybook gerado pelo Rational Application Developer, 
 // chame o método setBytes(byte[]) dessa classe.  A classe 
 // implementará a interface com.ibm.etools.marshall.RecordBytes.
		 ((com.ibm.etools.marshall.RecordBytes)outputRecord)
        .setBytes(outputDataBytes);
		 }
		 		 
// Retorne os dados de saída ao responsável pela chamada
		 		 return outputRecord;
		 }

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tdat_useoutboundconnection
Nome do arquivo: tdat_useoutboundconnection.html