2015年11月17日火曜日

JavaからAS/400のコマンドを発行するには

こんにちは、寺田です。




私からはJavaの話題を投稿していますが、今回はIBM iとJavaについてお話しようと思います。IBM iよりAS/400と言ったほうが馴染み深いと思うので、このブログではAS/400で通します。

JavaのアプリケーションからAS/400にアクセスするには、IBM Toolbox for Javaに含まれているJDBCドライバー(JT400)を使用するのが一般的です。IBM Toolbox for JavaはAS/400に付いてきますし、JTOpenというオープンソース・バージョンもあるので、誰でも使用することができます。

AS/400ユーザーであればご存知だと思いますが、AS/400の物理ファイルとは、その実体はDB2のテーブルです。なので、JDBCドライバーで物理ファイルにアクセスすることができ、SQLでデータの参照・更新が可能です。

「AS/400のことは知らない」っていうJavaプログラマでも、データベースだと思ってJDBCで組めば、AS/400連携が実現できるわけです。

で、このJT400(JTOpen)ですが、JDBCの実装だけではなく、JavaからAS/400のさまざまなリソースにアクセスするためのクラスが含まれています。AS/400のシステム情報の取得やコマンドの発行、プログラムの実行ができたりします。また、物理ファイルやメンバーを直接コントロールすることができるので、JDBCでは実現できないこともできるようになります。

そこでまずは、JavaからAS/400のOS上のコマンドを発行する方法を紹介したいと思います。

例えば、ファイルコピーのコマンド「CPYF」で物理ファイルをコピーする場合、以下のようになります。

// AS/400に接続・サインオン
AS400 as400 = new AS400("SystemA", "USER01", "PASS01");

// CPYFコマンドの発行
CommandCall cmd = new CommandCall(as400);
cmd.run("CPYF FROMFILE(MYLIB/MYFILE) TOFILE(MYLIB/MYFILEBK) CRTFILE(*YES)");

// コマンド実行結果の出力
AS400Message[] msglist = cmd.getMessageList();
for (int i = 0; i < msglist.length; i++) {
    System.out.println(msglist[i].getID() + ": " + msglist[i].getText());
}

AS/400への接続・サインオンにはクラス「com.ibm.as400.access.AS400」を、コマンド発行にはクラス「com.ibm.as400.access.CommandCall」を使用します。簡単ですね。

コマンドが正常に実行されると、以下のような結果が返されます。

CPF2880: Physical file MYFILEBK created in library MYLIB.
CPF2889: Member MYFILE added to file MYFILEBK in MYLIB.
CPC2955: 10 records copied from member MYFILE.

物理ファイルのコピーは、テーブルをコピーしたのと同じことです。
JavaからAS/400のコマンドが発行できるとなると、できることがグッと広がりそうですね。

次回もJT400を使ったお話をしようと思います。

0 件のコメント:

コメントを投稿