IBM® Toolbox for Java™ ProgramCall クラスでは、Java プログラムが IBM i プログラムを呼び出すことができます。 ProgramParameter クラスを使用して、 入力、出力、および入出力パラメーターを指定することができます。 プログラムを実行すると、 出力および入出力パラメーターには IBM i プログラムから戻されたデータが入ります。 IBM i プログラムの実行が失敗した場合、Java プログラムでは、 結果の IBM i メッセージを AS400Message オブジェクトのリストとして取り出すことができます。
必須パラメーターは、次のとおりです。
プログラム名およびパラメーター・リストは、 ProgramCall setProgram() メソッドを介してコンストラクターで設定するか、あるいは run() メソッドで設定することができます。run() メソッドはプログラムを呼び出します。
ProgramCall クラスを使用すると、AS400 オブジェクトはサーバーに接続します。 接続の管理については、接続の管理を参照してください。
例: ProgramCall を使用する
以下の例では、ProgramCall クラスを使用する方法を示します。
// Create an AS400 object.
AS400 sys = new AS400("mySystem.myCompany.com");
// Create a program object. I choose
// to set the program to run later.
ProgramCall pgm = new ProgramCall(sys);
// Set the name of the program.
// Because the program does not take
// any parameters, pass null for the
// ProgramParameter[] argument.
pgm.setProgram(QSYSObjectPathName.toPath("MYLIB", "MYPROG", "PGM"));
// Run the program. My program has
// no parms. If it fails to run, the failure
// is returned as a set of messages
// in the message list.
if (pgm.run() != true)
{
// If you get here, the program
// failed to run. Get the list of
// messages to determine why the
// program didn't run.
AS400Message[] messageList = pgm.getMessageList();
// ... Process the message list.
}
// Disconnect since I am done running programs
sys.disconnectService(AS400.COMMAND);
ProgramCall オブジェクトは、 プログラムの統合ファイル・システム・パス名を必要とします。
デフォルトの動作では、 Java プログラムとIBM i プログラムが同じサーバー上にあるときでも、IBM i プログラムは別のサーバー・ジョブで稼働します。 しかし、このデフォルトの動作をオーバーライドし、 ProgramCall setThreadSafe() メソッドを使用して IBM i プログラムが Java のジョブで実行されるようにすることができます。
ProgramParameter オブジェクトを使用すると、 Java プログラムと IBM i プログラムの間でパラメーター・データを受け渡しすることができます。 setInputData() メソッドを使用して入力データを設定します。 プログラムの実行後に、 getOutputData() メソッドで出力データを検索します。 各パラメーターはバイト配列です。 Java プログラムは、バイト配列を Java 形式と IBM i 形式との間で変換する必要があります。 データ変換クラスは、データを変換するためのメソッドを提供します。パラメーターは、リストとして ProgramCall オブジェクトに追加されます。
例: ProgramParameter を使用する
以下の例では、ProgramParameter オブジェクトを使用してパラメーター・データを渡す方法を示します。
// Create an AS400 object
AS400 sys = new AS400("mySystem.myCompany.com");
// My program has two parameters.
// Create a list to hold these parameters.
ProgramParameter[] parmList = new ProgramParameter[2];
// First parameter is an input parameter
byte[] key = {1, 2, 3};
parmList[0] = new ProgramParameter(key);
// Second parameter is an output
// parameter. A four-byte number is returned.
parmList[1] = new ProgramParameter(4);
// Create a program object specifying the name of the
// program and the parameter list.
ProgramCall pgm = new ProgramCall(sys, "/QSYS.LIB/MYLIB.LIB/MYPROG.PGM", parmList);
// Run the program.
if (pgm.run() != true)
{
// If the system cannot run the
// program, look at the message list
// to find out why it didn't run.
AS400Message[] messageList = pgm.getMessageList();
}
else
{
// Else the program ran. Process the
// second parameter, which contains the returned data.
// Create a converter for this data type
AS400Bin4 bin4Converter = new AS400Bin4();
// Convert from system type to Java
// object. The number starts at the
// beginning of the buffer.
byte[] data = parmList[1].getOutputData();
int i = bin4Converter.toInt(data);
}
// Disconnect since I am done running programs
sys.disconnectService(AS400.COMMAND);