For z/OS platforms

Using the Liberty optimized local adapters APIs to call services in an external address space

Use the WebSphere® optimized local adapters (WOLA) APIs to call services on an external address space or subsystem from a Liberty server.

Before you begin

Connect the application to an external address space or subsystem as described in Using the optimized local adapters to connect to an application in an external address space from a Liberty application.

If you want to pass record data that is generated by the Rational® Application Developer CICS®/IMS™ Java™ Data Binding wizard, you must first enable the connection to use the generated record data. For more information, see Enabling generated record data in outbound optimized local adapter connections in Liberty

Procedure

  1. In the application, create an interaction from the Connection object that you created. The following example creates the int interaction from the con Connection object:
    Interaction int = con.createInteraction();
  2. Create an interaction specification by creating an InteractionSpecImpl object and providing the service name, which is the name of the method that you want to call in the external address space or subsystem. The service name must be the name that you set when you called the Receive Request Any, Receive Request Specific, or Host Service APIs, or, if you are using a Customer Information Control System (CICS) server task, the name of the CICS program. The following example provides the MYSERVICE service name on the isi InteractionSpecImpl object:
    InteractionSpecImpl isi = new InteractionSpecImpl();
    isi.setServiceName("MYSERVICE");
  3. Run the interaction with the interaction specification. The following example runs the int interaction with the isi interaction specification and sends no data:
    int.execute(isi, null);

Example

The following example shows how to start an interaction with input and output data as a byte array (byte[]):
public byte[] driveInteraction(javax.resource.cci.ConnectionFactory cf,
javax.resource.cci.Connection con,byte[] inputDataBytes),throws javax.resource.ResourceException
	{
	// Create an interaction using the optimized local adapter connection
		 javax.resource.cci.Interaction i = con.createInteraction();
	// The InteractionSpec describes the service we want to call
		 com.ibm.websphere.ola.InteractionSpecImpl isi = new com.ibm.websphere.ola.InteractionSpecImpl();
		 isi.setServiceName("MYSERVICE");
	// The input data is specified using an IndexedRecord.  The first
	// slot in the indexed record contains the input data bytes.
		 javax.resource.cci.RecordFactory rf = cf.getRecordFactory();
		 javax.resource.cci.IndexedRecord ir = rf.createIndexedRecord(null);
		 ir.add(inputDataBytes);
		 		 
	// The interaction returns another IndexedRecord, whose first
	// slot contains the output data bytes.
		 javax.resource.cci.Record or = i.execute(isi, ir);
		 byte[] outputDataBytes = null;
		 		 
		 if (or != null)
		 {
		 		 outputDataBytes = (byte[])((javax.resource.cci.IndexedRecord)or).get(0);
		 }
		 		 
	// Return the output data to the caller 
			return outputDataBytes;
		 }

The following example shows how to start an interaction using a Rational Application Developer generated copybook Record object. .

 /**
  * An example of driving an optimized local adapter interaction, using a Rational 
  * Application Developer copybook mapping class as input (inputRecord) and receiving
  * a Rational Application Developer copybook mapping as output.
	*/		 
			public javax.resource.cci.Record driveInteraction(
		 	javax.resource.cci.Connection con,
		 	javax.resource.cci.Record inputRecord)
		 	throws javax.resource.ResourceException
	  {
	// Create an interaction using the OLA connection
		 	javax.resource.cci.Interaction i = con.createInteraction();
	// The InteractionSpec describes the service we want to call com.ibm.websphere.ola.InteractionSpecImpl isi = 
		 new com.ibm.websphere.ola.InteractionSpecImpl();
		 isi.setServiceName("MYSERVICE");
	// The Rational Application Developer generated copybook implements 
	// javax.resource.cci.Record and can be passed directly to the interaction.
	// The interaction returns an IndexedRecord, whose first slot contains 
  // the output data bytes.
		 	javax.resource.cci.Record or = i.execute(isi, inputRecord);
		 	javax.resource.cci.Record outputRecord = null;
		 	if (or != null)
		 {
	// In this example, RADGeneratedOutputType is the name of the Rational Application Developer
  // generated copybook mapping class.
		 	outputRecord = new RADGeneratedOutputType();
 // The output bytes are stored in the output record returned on the
 // interaction, which is an IndexedRecord.
		 byte[] outputDataBytes = 
     (byte[])((javax.resource.cci.IndexedRecord)or).get(0);
		 		 		 
 // To convert the output bytes to another Rational Application Developer generated copybook, 
 // call the setBytes(byte[]) method of that class.  The class will 
 // implement the  com.ibm.etools.marshall.RecordBytes interface.
		 ((com.ibm.etools.marshall.RecordBytes)outputRecord)
        .setBytes(outputDataBytes);
		 }
		 		 
// Return the output data to the caller
		 		 return outputRecord;
		 }

Icon that indicates the type of topic Task topic

File name: twlp_dat_useoutboundconnection.html