今回はエージェントからの RDB へのアクセスを見ていきます。
ある意味、エージェントというのは WebSphere とのシングルサインオン構成を組んだり(サーブレット)、クラスパスを設定して jar ファイルをコピーして実行環境を整えたり(スタンドアロン・アプリケーション) しなくていい、ドミノだけで出来るいちばん身近な Java 実行環境であるとも言えるでしょう。
スケジュールやイベントでの起動、Web からの実行もできますし、サーバーでもクライアントでも実行できます。
エージェントを Java で書くことの利点は、やはりその自由度でしょう。
Java そのものがいろいろな用途を取り込んで成長しているだけに、いろいろな拡張機能が使用できます。(これからご紹介する
JDBC もそのひとつです)
Java のクラスは再利用性が高く、どこかで見つけたロジックを組み込むのも容易です。
Java エージェントを使用する際の考慮点としては、以下のような点が挙げられるでしょう。
まず、Java 環境が 1.1 のままであること。
Java 2 の機能が使えないために、ロジックなどでもわざわざ面倒な書き方をしなくてはいけないことがあったりします。
また、JDBC 2.0 の機能も使えません。そのせいで、以前ここでご紹介しているようなやり方をここではしているわけです。
次に、サーブレットと CGI の比較で CGI に当てはまることがほとんどあてはまります。
なにより、起動にリソース (CPU/メモリ) をかなり消費しますし、同時並行で実行できる数にも限りがあります。
さらにエージェントはローカルアクセスでしか書けないため、こちらで述べた難点があてはまり、はまり重厚長大な処理はできません。
以上のような点を考慮に入れて、分相応に使えば非常に役にたちます。
以下では、Java の利点を生かした例として、それなりにニーズもありそうな データベースとのやりとりを見ていきたいと思います。
それでは、見ていきましょう。
まず最初にテスト用のデータベースを作成します。
エージェントを作成します。
「作成」メニューから
![]()
「エージェント」を選びます。
「実行」のところで「Java」を選択します。

「Java」を選ぶと以下のようにペインの内容がかわります。

「- JavaAgent.java」のところに以下のように入力してください。(実際の入力部分は"// (Your code goes here)"より下の部分ですが)
今回は、こちらに倣って JDBC 2.0 が使用できるように直接
DB2 JDBC ドライバーのクラスを使用しています。
JDBC 2.0 の機能が使用できるようになっているか、更新可能な結果セットの作成や逆順でのカーソルのスクロールをテストしています。
アクセス先のテーブルとして、クライアントアクセスが入っているマシンであればほぼ必ず入っている QIWS.QCUSTCDT を使用していますが、アクセスできるかどうかだけのテストなので特に別のものでもかまいません。
import lotus.domino.*;
import java.sql.*;
import com.ibm.db2.jdbc.app.*;
public class JavaAgent extends AgentBase {
DB2Connection con = null;
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// (Your code goes here)
Database database = agentContext.getCurrentDatabase();
connectToAS400();
DB2Statement stmt = (DB2Statement) con.createStatement(DB2ResultSet.TYPE_SCROLL_INSENSITIVE, DB2ResultSet.CONCUR_UPDATABLE);
System.out.println("DB2Statement OK.");
DB2ResultSet rs = (DB2ResultSet) stmt.executeQuery("SELECT * FROM QIWS.QCUSTCDT");
System.out.println("DB2ResultSet OK.");
rs.afterLast();
while (rs.previous()) {
System.out.println("got a row");
}
con.close();
System.out.println("Connection close");
} catch(Exception e) {
e.printStackTrace();
}
}
public void connectToAS400() {
String url = "jdbc:db2://";
String system = "localhost";
String user = "USER";
String password = "PASSWORD";
try {
DriverManager.registerDriver(new com.ibm.db2.jdbc.app.DB2Driver());
System.out.println("Driver registerd.");
con = (DB2Connection) DriverManager.getConnection(url + system, user, password);
System.out.println("got connected.");
con.setAutoCommit(false);
System.out.println("Set AutoCommit Successful.");
}
catch (SQLException ex) {
System.out.println("could not get a connection.");
ex.printStackTrace();
return;
}
System.out.println("connected.");
return;
}
}
「プロジェクトの編集」ボタンを押して、/QIBM/ProdData/java400/ext の下にある db2_classes.jar を下の「現在のエージェントファイル」に追加してください。これをしないとコンパイルが成功しません。
「コンパイル」ボタンを押してコンパイルしてください。
エージェントだけ作成して、確実にサーバーで動かすにはスケジュールすればいいわけですので、適当に「スケジュール」ボタンでスケジュールします。
ところどころキーになるところに println でメッセージを出力してあります。
出力メッセージはサーバーコンソールに表示されます。
スケジュールされている時間になると、エージェントが実行されます。今回はわかりやすくするためとデバッグのためにサーバーコンソールに実行されている旨メッセージを表示しています。
メッセージの続きです。
ちゃんと結果セットが作成され、各行をアクセスできていることがわかります。
こういうコーディングをすると JDBC 2.0 が使用できることが確認できました。
|
|