com.ibm.as400.access
Class JavaApplicationCall

java.lang.Object
  |
  +--com.ibm.as400.access.JavaApplicationCall
All Implemented Interfaces:
java.io.Serializable

public class JavaApplicationCall
extends java.lang.Object
implements java.io.Serializable

The JavaApplicationCall class provides an easy way to run Java applications on the AS/400's Java Virtual Machine from a client. The client Java program specifies the environment, program to run and program parameters. The program then runs on the AS/400's Java Virtual Machine. Text based input/output is provided by JavaApplicationCall. Input can be sent to the Java program which will receive the input via standard input. Standard output and standard error text generated by the Java program are received by JavaApplicationCall and made available to the calling program. JavaApplicationCall does not support displaying the graphical user interface of the AS/400 Java program on the clinet. Other Java facilities, such as remote AWT must be used to display graphical interfaces on the client.

Sockets are used to send Standard input, output and error between client and server. The port used can be set via setPort(). The default port is 2850, 2851 and 2852. If the port is in use, this class searches for available ports if findPort is true. Standard input, output and error are not transported across a secure connection even when the rest of the Toolbox is using SSL.

For example, supposed Java class HelloWorld resides in directory /javatest on the AS/400. The following calls this program and receives program output written to standard out.

 import com.ibm.as400.access.*;

 public class test implements Runnable
 {
    JavaApplicationCall jaCall;

    public static void main(String[] args)
    {
       test me = new test();
       me.Main(args);
    }


    void Main(String[] args)
    {

       try
       {
           // Construct an AS/400 object.  The Java program is on this AS/400.
           AS400 as400 = new AS400();

           // Construct a JavaApplicationCall object.
           jaCall = new JavaApplicationCall(as400);

           // Set the Java application to be run.
           jaCall.setJavaApplication("HelloAS400");

           // Set the classpath environment variable used by the AS/400's
           // JVM so it can find the class to run.
           jaCall.setClassPath("/javatest");

           // Start the thread that will receive standard output
           Thread outputThread = new Thread(this);
           outputThread.start();

           // Start the program.  The call to run() will not return
           // until the AS/400 Java program completes.  If the Toolbox
           // cannot start the Java program, false is returned with
           // a list of AS/400 message objects indicating why the program
           // could not start.
           if (jaCall.run() != true)
           {
                AS400Message[] messageList = jaCall.getMessageList();
                for (int msg = 0; msg < messageList.length; msg++)
                    System.out.println(messageList[msg].toString());
           }
       }
       catch (Exception e) { e.printStackTrace(); }

       System.exit(0);
    }

    // This thread will get standard out from the AS/400 Java
    // program and print it.  Note the call to sleep.  JavaApplication
    // call returns immediately even if there is no data.
    public void run()
    {
        while(true)
        {
           String s = jaCall.getStandardOutString();
           if (s != null)
             System.out.println(s);

           try { Thread.sleep(100); } catch (Exception e) {}
        }
    }
 }


 

See Also:
Serialized Form

Constructor Summary
JavaApplicationCall()
          Constructs a JavaApplicationCall object.
JavaApplicationCall(AS400 system)
          Constructs a JavaApplicationCall object.
JavaApplicationCall(AS400 system, java.lang.String application)
          Constructs a JavaApplicationCall object.
JavaApplicationCall(AS400 system, java.lang.String application, java.lang.String classPath)
          Constructs a JavaApplicationCall object.
 
Method Summary
 void addActionCompletedListener(ActionCompletedListener listener)
          Adds an ActionCompletedListener to be notified when the Java application ends.
 void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
          Adds a listener to be notified when the value of any bound property changes.
 void addVetoableChangeListener(java.beans.VetoableChangeListener listener)
          Adds a listener to be notified when the value of any constrained property changes.
 java.lang.String getClassPath()
          Returns the value of the CLASSPATH environment variable when running the Java program.
 int getDefaultPort()
          Returns the default port used to transfer standard in, standard out and standard error between the client and the server.
 int getGarbageCollectionFrequency()
          Returns the relative frequency that garbage collection runs.
 int getGarbageCollectionInitialSize()
          Returns the initial size, in kilobytes, of the garbage collection heap.
 java.lang.String getGarbageCollectionMaximumSize()
          Returns the maximum size, in kilobytes, that the garbage collection heap can grow to.
 int getGarbageCollectionPriority()
          Returns the priority of the tasks running garbage collection.
 java.lang.String getInterpret()
          Returns whether all Java class files should be run interpretively.
 java.lang.String getJavaApplication()
          Returns the name of Java application to be run.
 AS400Message[] getMessageList()
          Returns the list of AS/400 messages generated if the Java program cannot be started.
 java.lang.String getOptimization()
          Returns the optimization level of AS/400 Java programs that will be created if no Java program is associated with the Java class.
 java.lang.String[] getOptions()
          Returns a list of special options used when running the Java class.
 java.lang.String[] getParameters()
          Returns parameter values that are passed to the Java application.
 java.util.Properties getProperties()
          Returns the properties set on the AS/400's JVM before running the Java program.
 java.lang.String getSecurityCheckLevel()
          Returns the level of warnings given for directories in the CLASSPATH that have public write authority.
 java.lang.String getStandardErrorString()
          Returns the next string written to standard error by the program running on the AS/400.
 java.lang.String getStandardOutString()
          Returns the next string written to standard output by the application.
 AS400 getSystem()
          Returns the AS/400 system which contains the Java program.
 boolean isFindPort()
          Indicates if this class should search for a free port.
 void removeActionCompletedListener(ActionCompletedListener listener)
          Removes this ActionCompletedListener from the list of listeners.
 void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
          Removes a property change listener from the list of listeners.
 void removeVetoableChangeListener(java.beans.VetoableChangeListener listener)
          Removes a vetoable change listener from the list of listeners.
 boolean run()
          Run the Java application.
 void sendStandardInString(java.lang.String data)
          Sends the standard input to the application running on AS/400.
 void setClassPath(java.lang.String classPath)
          Sets the value of the CLASSPATH environment variable when running the Java program.
 void setDefaultPort(int port)
          Sets the default port.
 void setFindPort(boolean search)
          Sets searching for a free port.
 void setGarbageCollectionFrequency(int frequency)
          Sets the relative frequency that garbage collection runs.
 void setGarbageCollectionInitialSize(int size)
          Sets the initial size, in kilobytes, of the garbage collection heap.
 void setGarbageCollectionMaximumSize(java.lang.String size)
          Sets the maximum size, in kilobytes, that the garbage collection heap can grow to.
 void setGarbageCollectionPriority(int priority)
          Sets the priority of the tasks running garbage collection.
 void setInterpret(java.lang.String interpret)
          Sets whether all Java class files should be run interpretively.
 void setJavaApplication(java.lang.String application)
          Sets the Java application to be run.
 void setOptimization(java.lang.String opt)
          Sets the optimization level of the AS/400 Java program that will be created if no Java program is associated with the Java class.
 void setOptions(java.lang.String[] option)
          Sets special options used when running the Java class.
 void setParameters(java.lang.String[] parameters)
          Sets one or more parameter values that are passed to the Java application.
 void setProperties(java.util.Properties property)
          Sets the Java Virtual Machine properties when running the Java Application.
 void setSecurityCheckLevel(java.lang.String chklvl)
          Sets the level of warnings given for directories in CLASSPATH that have public write authority.
 void setSystem(AS400 system)
          Sets the AS/400 system.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JavaApplicationCall

public JavaApplicationCall()
Constructs a JavaApplicationCall object.

JavaApplicationCall

public JavaApplicationCall(AS400 system)
Constructs a JavaApplicationCall object. The Java program is on AS/400 system.
Parameters:
system - The AS/400 on which contains the Java program.

JavaApplicationCall

public JavaApplicationCall(AS400 system,
                           java.lang.String application)
Constructs a JavaApplicationCall object. The Java program is namee application and runs on system system.
Parameters:
system - The AS/400 on which contains the Java program.
application - The name of Java program.

JavaApplicationCall

public JavaApplicationCall(AS400 system,
                           java.lang.String application,
                           java.lang.String classPath)
Constructs a JavaApplicationCall object. The Java program is namee application and runs on system system. classPath is passed to the AS/400 as the value of the CLASSPATH environment variable.
Parameters:
system - The AS/400 on which contains the Java program.
application - The name of Java program.
classPath - The value of the environment variable CLASSPATH.
Method Detail

addActionCompletedListener

public void addActionCompletedListener(ActionCompletedListener listener)
Adds an ActionCompletedListener to be notified when the Java application ends. The specified ActionCompletedListeners actionCompleted method will be called each time an application runs.
Parameters:
listener - The ActionCompletedListener.
See Also:
removeActionCompletedListener(com.ibm.as400.access.ActionCompletedListener)

addPropertyChangeListener

public void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
Adds a listener to be notified when the value of any bound property changes.
Parameters:
listener - The listener.
See Also:
removePropertyChangeListener(java.beans.PropertyChangeListener)

addVetoableChangeListener

public void addVetoableChangeListener(java.beans.VetoableChangeListener listener)
Adds a listener to be notified when the value of any constrained property changes.
Parameters:
listener - The listener.
See Also:
removeVetoableChangeListener(java.beans.VetoableChangeListener)

getClassPath

public java.lang.String getClassPath()
Returns the value of the CLASSPATH environment variable when running the Java program. Use the forward slash to separate path elements and a colon to separate the elements of CLASSPATH. For example, /dir1:/dir1/dir2/myClasses.jar.

Valid values are:

Returns:
The value of CLASSPATH.

getDefaultPort

public int getDefaultPort()
Returns the default port used to transfer standard in, standard out and standard error between the client and the server. Three ports are used. The port returned by this method is used for standard in, port + 1 is used for standard out and port + 2 is used for standard error. The default port is 2850.
Returns:
The default port.

getGarbageCollectionFrequency

public int getGarbageCollectionFrequency()
Returns the relative frequency that garbage collection runs. This value applies only to V4R2 and V4R3 versions of the AS/400. It is ignored in V4R4 and later versions of the AS/400.
Returns:
The relative frequency.

getGarbageCollectionInitialSize

public int getGarbageCollectionInitialSize()
Returns the initial size, in kilobytes, of the garbage collection heap. A large size can keep the garbage collector from starting when the Java program is small, improving performance.

Possible values are:

Returns:
The initial size of the garbage collection heap.

getGarbageCollectionMaximumSize

public java.lang.String getGarbageCollectionMaximumSize()
Returns the maximum size, in kilobytes, that the garbage collection heap can grow to. This value is used to prevent runaway programs from consuming all available storage.

Possible values are:

Returns:
The maximum size that the garbage collection heap can grow to.

getGarbageCollectionPriority

public int getGarbageCollectionPriority()
Returns the priority of the tasks running garbage collection. This value applies only to V4R2 and V4R3 versions of the AS/400. It is ignored in V4R4 and later versions of the AS/400.
Returns:
The priority of the tasks.

getInterpret

public java.lang.String getInterpret()
Returns whether all Java class files should be run interpretively.

Possible values are:

Returns:
Whether all Java class files should be run interpretively.

getJavaApplication

public java.lang.String getJavaApplication()
Returns the name of Java application to be run. If the Java application is not be set, null is returned.
Returns:
The name of Java application.

getMessageList

public AS400Message[] getMessageList()
Returns the list of AS/400 messages generated if the Java program cannot be started. Before run() is called and if the Java program can be started, an empty list is returned.
Returns:
The array of AS400Message objects.

getOptimization

public java.lang.String getOptimization()
Returns the optimization level of AS/400 Java programs that will be created if no Java program is associated with the Java class. *INTERPRET means the resulting Java program interprets the class byte codes when invoked. For other optimization levels, the Java program contains machine instruction sequences that are run when the Java program is invoked. *INTERPRET Java programs are smaller but run slower than Java programs created with higher optimization levels. As you increase the optimization level beyond 10, the Java program performance generally improves, but the time required to create the Java program increases, and debugging is more difficult.

Possible values are:

Returns:
The optimization level of the AS/400 Java application.

getOptions

public java.lang.String[] getOptions()
Returns a list of special options used when running the Java class.

The possible values are:

Returns:
The options used when running the Java class.

getParameters

public java.lang.String[] getParameters()
Returns parameter values that are passed to the Java application. A maximum of 200 parameter values can be passed.
Returns:
The parameters when running the Java application.

getProperties

public java.util.Properties getProperties()
Returns the properties set on the AS/400's JVM before running the Java program.
Returns:
The properties.

getSecurityCheckLevel

public java.lang.String getSecurityCheckLevel()
Returns the level of warnings given for directories in the CLASSPATH that have public write authority. A directory in the CLASSPATH that has public write authority is a security exposure because it may contain a class file with the same name as the one you want to run. Whichever class file is found first is run.

The possible values are:

Returns:
The level of warnings given for directories in the CLASSPATH that have public write authority.

getStandardErrorString

public java.lang.String getStandardErrorString()
Returns the next string written to standard error by the program running on the AS/400.
Returns:
the next standard error string from AS/400.

getStandardOutString

public java.lang.String getStandardOutString()
Returns the next string written to standard output by the application.
Returns:
the string written to standard output.

getSystem

public AS400 getSystem()
Returns the AS/400 system which contains the Java program.
Returns:
The AS/400 system.

isFindPort

public boolean isFindPort()
Indicates if this class should search for a free port.
Returns:
true if this class will search for a free port; false otherwise.

removeActionCompletedListener

public void removeActionCompletedListener(ActionCompletedListener listener)
Removes this ActionCompletedListener from the list of listeners. If the ActionCompletedListener is not on the list, nothing is done.
Parameters:
listener - The ActionCompletedListener.
See Also:
addActionCompletedListener(com.ibm.as400.access.ActionCompletedListener)

removePropertyChangeListener

public void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
Removes a property change listener from the list of listeners.
Parameters:
listener - The listener.
See Also:
addPropertyChangeListener(java.beans.PropertyChangeListener)

removeVetoableChangeListener

public void removeVetoableChangeListener(java.beans.VetoableChangeListener listener)
Removes a vetoable change listener from the list of listeners.
Parameters:
listener - The listener.
See Also:
addVetoableChangeListener(java.beans.VetoableChangeListener)

run

public boolean run()
            throws AS400SecurityException,
                   ConnectionDroppedException,
                   ErrorCompletingRequestException,
                   java.lang.InterruptedException,
                   java.io.IOException,
                   ServerStartupException,
                   java.net.UnknownHostException
Run the Java application. Control will not be returned to the calling application until the program completes. If the program does not start, a list of AS400Message object containing information about is failure is available.
Returns:
true if the program can be started, false otherwise.
Throws:
AS400SecurityException - If a security or authority error occurs.
ConnectionDroppedException - If the connection is dropped unexpectedly.
ErrorCompletingRequestException - If an error occurs before the request is completed.
java.lang.InterruptedException - If this thread is interrupted.
java.io.IOException - If an error occurs while communicating with the AS/400.
ServerStartupException - If the AS/400 server cannot be started.
java.net.UnknownHostException - If the AS/400 system cannot be located.

sendStandardInString

public void sendStandardInString(java.lang.String data)
Sends the standard input to the application running on AS/400.
Parameters:
data - The standard input to AS/400.

setClassPath

public void setClassPath(java.lang.String classPath)
                  throws java.beans.PropertyVetoException
Sets the value of the CLASSPATH environment variable when running the Java program. Use the forward slash to separate path elements and a colon to separate the elements of CLASSPATH. For example, /dir1:/dir1/dir2/myClasses.jar.

Valid values are:

Parameters:
classPath - The value of the classpath.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setDefaultPort

public void setDefaultPort(int port)
                    throws java.beans.PropertyVetoException
Sets the default port. This is the port for standard in. Standard out is port + 1 and standard error is port + 2. SetFindPort() can be used to tell this class to search for a free port of these ports are in use.
Parameters:
port - The default port.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setFindPort

public void setFindPort(boolean search)
                 throws java.beans.PropertyVetoException
Sets searching for a free port.
Parameters:
search - true to search for a port that is not in use; false to not search.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setGarbageCollectionFrequency

public void setGarbageCollectionFrequency(int frequency)
                                   throws java.beans.PropertyVetoException
Sets the relative frequency that garbage collection runs. This parameter is valid only for V4R2 and V4R3 versions of the AS/400. It is ignored for V4R4 and later versions of the AS/400.
Parameters:
frequency - The relative frequency that garbage collection runs.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setGarbageCollectionInitialSize

public void setGarbageCollectionInitialSize(int size)
                                     throws java.beans.PropertyVetoException
Sets the initial size, in kilobytes, of the garbage collection heap. This is used to prevent garbage collection from starting on small programs.

The possible values are:

Parameters:
size - The initial size of the garbage collection heap.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setGarbageCollectionMaximumSize

public void setGarbageCollectionMaximumSize(java.lang.String size)
                                     throws java.beans.PropertyVetoException
Sets the maximum size, in kilobytes, that the garbage collection heap can grow to. This is used to prevent runaway programs that consume all of the available storage. Normally, garbage collection runs as an asynchronous thread in parallel with other threads. If the maximum size is reached, all other threads are stopped while garbage collection takes place. This may adversely affect performance.

The possible values are:

Parameters:
size - The maximum size that the garbage collection heap can grow to.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setGarbageCollectionPriority

public void setGarbageCollectionPriority(int priority)
                                  throws java.beans.PropertyVetoException
Sets the priority of the tasks running garbage collection. This parameter is valid only for V4R3 and V4R2 versions of the AS/400. It is ignore for V4R4 and later versions of the AS/400.
Parameters:
priority - The priority of the tasks running garbage collection.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setInterpret

public void setInterpret(java.lang.String interpret)
                  throws java.beans.PropertyVetoException
Sets whether all Java class files should be run interpretively.

The possible values are:


setJavaApplication

public void setJavaApplication(java.lang.String application)
                        throws java.beans.PropertyVetoException
Sets the Java application to be run.
Parameters:
application - The Java application to be run.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setOptimization

public void setOptimization(java.lang.String opt)
                     throws java.beans.PropertyVetoException
Sets the optimization level of the AS/400 Java program that will be created if no Java program is associated with the Java class. For Java classes that are in a class file, the created Java program remains associated with the class file after the Java program is run. If the class is a part of a JAR or ZIP file, a temporary Java program is created to run from and then discarded. This can result in slow performance. For best performance, explicitly create a Java program for JAR and ZIP files with the Create Java Program (CRTJVAPGM) command. For *INTERPRET, the resulting Java program interprets the class byte codes when invoked. For other optimization levels, the Java program contains machine instruction sequences that are run when the Java program is invoked. INTERPRET Java programs are smaller but run slower than Java programs created with higher optimization levels. As you increase the optimization level beyond 10, the Java program performance generally improves, but the time required to create the Java program increases and debugging is more difficult.

The possible values are:

Parameters:
opt - The optimization level of the AS/400 Java program that will be created if no Java program is associated with the Java class.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setOptions

public void setOptions(java.lang.String[] option)
                throws java.beans.PropertyVetoException
Sets special options used when running the Java class. This method is not additive. The list of values is replaced every time this method is called.

The possible values are:

Parameters:
option - The special options used when running the Java class.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setParameters

public void setParameters(java.lang.String[] parameters)
                   throws java.beans.PropertyVetoException
Sets one or more parameter values that are passed to the Java application. A maximum of 200 parameter values can be passed.
Parameters:
parameters - The parameters for the Java application.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setProperties

public void setProperties(java.util.Properties property)
                   throws java.beans.PropertyVetoException
Sets the Java Virtual Machine properties when running the Java Application.
Parameters:
properties - The JVM properties.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setSecurityCheckLevel

public void setSecurityCheckLevel(java.lang.String chklvl)
                           throws java.beans.PropertyVetoException
Sets the level of warnings given for directories in CLASSPATH that have public write authority. A directory in CLASSPATH that has public write authority is a security exposure because it may contain a class file with the same name as the one you want to run. Whichever class file is found first is run.

The possible values are:

Parameters:
chklvl - The level of warnings given for directories in the CLASSPATH that have public write authority.
Throws:
java.beans.PropertyVetoException - If the change is voted.

setSystem

public void setSystem(AS400 system)
               throws java.beans.PropertyVetoException
Sets the AS/400 system.
Parameters:
system - The AS/400 system.
Throws:
java.beans.PropertyVetoException - If the change is voted.