Host On-Demand J2EE Connector

Host On-Demand J2EE Connector


Sample Application: Combined Logon/logoff Class

This sample application uses a single class to handle all of the login and logout process. This is an example of a TN5250 application running in an unmanaged environment. Similar samples are located in the directory ../../../toolkit/connector2/samples/tn5250/.

/**
  * An implementation of the simple application client.
  * It accesses the J2EE Connector directly without providing
  * any additional Quality of Service.
  */

// Import necessary packages and classes needed
import java.util.*;
import com.ibm.connector2.hod.*;
import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
import com.ibm.eNetwork.ECL.*;
import com.ibm.eNetwork.ECL.screenreco.*;

public class J2HODConnectorSample1
{
  public static void main(String[] args)
  {
    try {
      // Create session specific(TN5250) ManagedConnectionFactory
      J2HOD5250ManagedConnectionFactory mcf = new J2HOD5250ManagedConnectionFactory();

      // Set trace level property
      mcf.setTraceLevel(new Integer(J2HODBaseManagedConnectionFactory.RAS_TRACE_ENTRY_EXIT));

      // Set Host property
      mcf.setServerName("a_host_name");

      // Set admin logWriter to System.err
      mcf.setLogWriter(new java.io.PrintWriter(System.err));

      // Create EIS specific(HOD) connection factory from Managed Connection Factory
      J2HODConnectionFactory cf = (J2HODConnectionFactory)mcf.createConnectionFactory();

      // set up ID and Password properties for ConnectionSpec
      J2HODConnectionSpec connectionSpec = new J2HODConnectionSpec();
      connectionSpec.setUserName("user_id");
      connectionSpec.setPassword("password");

      // Create a connection from Connection Factory instance
      J2HODConnection connection = (J2HODConnection)cf.getConnection(connectionSpec);

      // Create an Host On-Demandinteraction from Connection instance
      J2HODInteraction interaction = (J2HODInteraction)connection.createInteraction();

      // A record of input and output screen
      J2HODScreenRecord input = null;
      J2HODScreenRecord output = new J2HODScreenRecord(24, 80);

      // Check for Login screen (receive only for this execution)
      J2HODInteractionSpec interactionSpec = new J2HODInteractionSpec();
      interactionSpec.setInteractionVerb(new Integer(J2HODInteractionSpec.SYNC_RECEIVE));
      interactionSpec.setRecognizeRow(new Integer(1)); // Specify Row location to recognize
      interactionSpec.setRecognizeColumn(new Integer(36)); // Specify Column location to recognize
      interactionSpec.setRecognizeString("Sign On"); // Specify a string to recognized
      interactionSpec.setScreenName("Logon screen"); // Set the output screen name

      // Execute interaction and output gets updated
      connection.execute(interactionSpec, input, output);

      // Also used to check for output screen (optional)
      output.checkBytes("Sign On", 1, 36, false, true);

      // Use previous execution's output as next execution's input
      // and enter inputs for user ID and password at specified location.
      input = output;
      input.setString("user_id", 6, 53);
      input.setString("password", 7, 53);

      // For more complex description of output screen, a vector of ECLScreenDesc instances
      // can be used to describe the possible next output screen.
      // ( ** Refer to Host Access Client Library (HACL) document for more information on
      //   ECLScreenDesc class and other HACL classes. )
      // In this case after entering ID and PW, "Main Menu" or "Messages" screen is expected.
      Vector v = new Vector();
      ECLScreenDesc screenDesc1 = new ECLScreenDesc();
      screenDesc1.AddOIAInhibitStatus(ECLScreenDesc.NOTINHIBITED);
      screenDesc1.AddStringInRect("AS/400 Main Menu", 1, 1, 1, -1, true);
      screenDesc1.SetName("Main Menu");
      v.add(screenDesc1);

      ECLScreenDesc screenDesc2 = new ECLScreenDesc();
      screenDesc2.AddOIAInhibitStatus(ECLScreenDesc.NOTINHIBITED);
      screenDesc2.AddStringInRect("Press Enter to continue", 10, 1, 24, -1, true);
      screenDesc2.SetName("Messages");
      v.add(screenDesc2);

      // Sets interaction specs (ENTER in this case)
      interactionSpec = new J2HODInteractionSpec(); //uses default properties
      interactionSpec.setScreenDescriptors(v);
      interactionSpec.setKeyName(J2HODInteractionSpec.ENTER);

      // Execute interaction
      connection.execute(interactionSpec, input, output);

      // Check to see if output screen is in "Main Menu" screen.
      boolean bOK = output.checkBytes("AS/400 Main Menu", 1, 1, 1, -1, false, false);

      if (!bOK)
      { // if not in "Main Menu" screen
        // type [enter] to exit the "Messages" screen and to get to the "Main Menu" screen
        input = output;
        output = new J2HODScreenRecord(24, 80);
        v.clear();
        screenDesc1 = new ECLScreenDesc();
        screenDesc1.AddOIAInhibitStatus(ECLScreenDesc.NOTINHIBITED);
        screenDesc1.AddStringInRect("AS/400 Main Menu", 1, 1, 1, -1, true);
        screenDesc1.SetName("Main Menu");
        v.add(screenDesc1);

        interactionSpec = new J2HODInteractionSpec();
        interactionSpec.setScreenDescriptors(v);
        interactionSpec.setKeyName(J2HODInteractionSpec.ENTER);

        // Execute interaction
        connection.execute(interactionSpec, input, output);
      }

      // in "Main Menu" screen
      input = output;
      output = new J2HODScreenRecord(24, 80);

      // Set string to select "90" for logoff as an input
      input.setString("90", 20, 7);

      // Specify what to recognize from the Output of execution
      interactionSpec = new J2HODInteractionSpec();
      interactionSpec.setRecognizeRow(new Integer(1));
      interactionSpec.setRecognizeColumn(new Integer(36));
      interactionSpec.setRecognizeString("Sign On");
      interactionSpec.setScreenName("Logon screen");

      // Execute interaction and check output screen
      connection.execute(interactionSpec, input, output);
      output.checkBytes("Sign On", 1, 36, false, true);

      // Close interaction
      interaction.close();

      // Close connection
      connection.close();
    }
    catch (javax.resource.ResourceException exn2) {
      System.out.println("Operation failed: " + exn2);
    }
    catch (Exception ex) {
      System.out.println("***ERROR*** Operation failed: " + ex);
    }
    System.exit(0);
  }
}

[ Top of Page | Previous Page | Next Page | Table of Contents ]