Domino の Java プログラム 講座 (初級編 エージェントからのRDBアクセス -いろいろな考慮点- )

ローカルアクセス/トランザクション・ログ/recycle()

やはりローカルアクセスなので破壊力はすさまじいものがあります。

recycle() のタイミングをまちがえただけでサーバーダウンは当然ですし、2回続けてやってしまってそのパーティションサーバーがまったく起動できなくなってしまい、AS/400自体の IPL が必要になったこともありました。(共用メモリーの問題みたいです。逆に言えば、その状態でも他のパーティションサーバーはまったく影響なく動いてましたので、やっぱり iSeries(AS/400)版ドミノってすごい、とも言えますね。)

エージェントの場合は否応なくローカルアクセスになりますが、一般的にローカルアクセスの場合はドミノサーバーそのものが(しかもかなり烈しく)クラッシュしますが、リモートアクセスの場合はクラッシュするのはドミノではなく WebSphere だったり、スタンドアロンのアプリケーションだったりしますし、しかもそういう環境は Java の例外なんぞ慣れたものなので、影響範囲の分離という意味ではそれもリモートアクセスの利点のひとつではありましょう。

サーバーダウンのタイミングによっては、エージェント自体が損傷をうけてもう二度と内容をみることができない( = もちろん動かない)状態になってしまうこともありました。そういう意味ではやはりトランザクションログの設定は必須です。再起動も早くなりますし。

クラッシュの原因についてですが、いろいろなエラーで苦労したのですが、結局すべてが recycle() 関係でのクラッシュでした。

親の recycle() で子も recycle() 状態になるようですので、view 関係などは viewEntryCollection などを細かく recycle() していかなくてもよさそうな感じです。どのあたりまでちゃんとすればいいかはまたこれから調べたいと思います。(こちらのコードに残っている // されている recycle() はその試行錯誤の結果です)

ローカルでのドミノオブジェクトは、recycle() でマークしない限り Java VM のガーベージコレクションの対象になりません。
ただし、リモートでもどのみち、recycle() は適宜きちっと行なっていくことは習慣にしておく必要はあるでしょう。

JDBC アクセス

通常の JDBC プログラミングのように、Class.forName でドライバを指定して普通にコーディングする場合は、デザイナーの[プロジェクトの編集]で JDBC ドライバの jar ファイルを添付する必要はありません。
サーバーの notes.ini のどこかに以下のような行を追加しておけば OK です。

JavaUserClasses=/QIBM/ProdData/HTTP/public/jt400/lib/jt400.jar:/QIBM/ProdData/Java400/ext/db2_classes.jar

デザイナーの[プロジェクトの編集]で指定する場合には、データベースサイズが大きくなってしまうデメリットがありますが、今回の例のように JDBC 2.0 のメソッドが使用できるというメリットがあります。また、ノーツクライアントには Java 実行環境があるため、コーディングの仕方 (JDBC コールの URL の指定の仕方) によってはクライアントで実行することも可能になります。

Toolbox for Java を使用するか、ネイティブのDB2ドライバを使用するか、つまり jt400.jar を添付するか db2_classes.jar を添付するかは、ここに関係してきます。

ネイティブのDB2ドライバは iSeries 上でしか動きません。そのかわり Toolbox for Java のドライバより高速であるといわれています。
Toolbox for Java のドライバは、TCP/IP ソケットが使用でき、Java が動くところではどこでも実行できます。つまり、クライアントからも実行できるわけです。

今回、ここでやり方を見てきたのは エージェントですので、クライアントで手動で実行する可能性のあるものもあるわけです。
その場合は、Toolbox for Java のドライバを使用したやり方で、URL のホスト名を localhost でなくホスト名を指定するようにしてください。

[Top Pageに戻る]

Ads by TOK2