Domino の Java プログラム 講座 (初級編 そのいち)

ドミノをアクセスするJavaプログラムの書き方を簡単に解説していきたいと思います。

基本的にはほとんどは決まりごとで、穴埋め問題のように一部を変えていくだけでだいたいのことはできるようになっています。
それがやはりJavaなどのオブジェクト指向のプログラムのいいところなのでしょうね。プログラミングというよりは、いろいろなクラスの使い方を覚えて組み合わせる、といったかんじです。

ですので、無理に何がどうなっているかを最初から理解する必要はないように思います。

まず、書いてみて動けばOK!! というところから始めましょう!!


いちばんスタンダードなかたちとして、スタンドアローンのJavaアプリケーションを書いてみましょう。

エージェントはスタンドアローンのアプリケーションを省略したかたちですし、サーブレットでも同様です。

NotesThread というクラスを拡張して runNotes メソッドを使用するやり方がよく例にあげられていますが、あまり賢明なやりかたではありません。
ローカルのクラスにしかアクセスできませんし、サーバーIDでしか使用できません。昔はこういうふうにやりましたという古いやり方です。使わない方がいいでしょう。

NotesFactory というクラスを使用するやり方であれば、渡す引数を変更するだけで(シグネチャ) ローカルでのアクセスもリモートのサーバーへのアクセスも可能です。

今後は NotesFactory を使用するやり方を覚えておけばまったくじゅうぶんでしょう。
また、ローカルへのアクセスというものは基本的にはあまりすすめられません。すべてサーバーIDのアクセスになってしまいますし、融通がきかないからです。(R5 のどこかのリリースからユーザーの指定もローカルアクセスできるようになりました。ただ、指定しないとそのままサーバーIDでのアクセスです)
基本は NotesFactory を使用したリモートアクセスと考えておくようにしてください。

ということで、NotesFactory クラスを使用したやり方で進めていきたいと思います。


まず最初にコードの全体です。ホスト名は"ASDOMINO"です。ホスト名はハードコードしなくても取得してセットすることもできます。そのやり方はこちら

import lotus.domino.*;
public class SimpleJavaDomino1 implements Runnable {

public static void main(java.lang.String[] args) {
SimpleJavaDomino1 sjd = new SimpleJavaDomino1();
Thread nt = new Thread((Runnable)sjd);
nt.start(); }

public void run() {
try {
Session s = NotesFactory.createSession("ASDOMINO");
String p = s.getPlatform();
String nv = s.getNotesVersion();

System.out.println("Current Platform : " + p);
System.out.println("Current Domino Version: " + nv);

s.recycle();
}
catch (NotesException n) {
System.out.println("ID: " + n.id + " -- Name: " + n.text);
}
catch (Exception e) {
e.printStackTrace(); }
}
}

実行結果はこんなかんじです。

普通に Sun JDK 1.3 で javac を使ってコンパイルしています。

javac でコンパイルする際と実行する際にに、ncso.jar もしくは/および notes.jar というファイルがクラスパスに入っている必要があります。

/QIBM/ProdData/Lotus/Notes に notes.jar が、/QIBM/ProdData/Lotus/Notes/Shared に ncso.jar が入っていますので、適当なディレクトリにコピーしておいてください。
(コピーはもちろんnネットサーバー経由でも ftp でもかまいません)

この例ではネットワークドライブにiSeriesの"/"(ルート)を割り当て /NotesJava というディレクトリを作成して、そこに notes.jar と ncso.jar をコピーしています。そこにプログラムも作成しています。

PC側では以下のように実行しています。

cd /NotesJava
set CLASSPATH = notes.jar;ncso.jar;%CLASSPATH%
Notepad SimpleJavaDomino1.java
  (ソースの編集)
javac SimpleJavaDomino1.java

で 、5250画面に移って QSH と実行後はスクリーンショットに取ってあるとおりになります。


NotesFactory

ドミノ環境の外からドミノにアクセスするためには NotesFactory というクラスを使います。つまり、エージェント以外はこのクラスを使用する、ということになります。

NotesFactory クラスには createSession メソッドがあり、このメソッドを使用して最初にドミノへのセッションを作成します。
createSession に引数を指定しないと ローカルアクセスになり、その他に サーバー名(TCPIPホスト名)、サーバー名とユーザーおよびパスワード、などを指定してこのメソッドを実行するとリモートでのアクセスになります。

ユーザーを指定してアクセスできるのはリモートでのアクセスのみです。サーバー名のかわりにアプレットを指定して、アプレットからのセッションを作成することもできます。

リモートのアクセスの場合はサーバーで DIIOP タスクが稼動している必要があります。

(createSession メソッドのほかに createSessionWithIOR というメソッドもあり、これは IOR を指定してセッションを取得します。
たとえば以下のように上のプログラムを変更しても同じように動きます。
Session s = NotesFactory.createSession("ASDOMINO"); を
Session s = NotesFactory.createSessionWithIOR(NotesFactory.getIOR"ASDOMINO"); に変えてみてください。)


Session

セッションというのはドミノにアクセスするための一番重要なクラスになります。

ドミノへのすべてのアクセスはこのセッションというオブジェクトを使用して行われます。

そして、このセッションというオブジェクトを作成するために NotesFactory というクラスの createSession メソッドを使うわけです。


マルチスレッドを使用して実行させる必要がありますので、threadを実装したクラスをまず作成(新しいインスタンス化)し、新しいスレッドを作成し、そのスレッドを実行させる、というのが全体の流れになります。

public class SimpleJavaDomino1 implements Runnable {

public static void main(java.lang.String[] args) {
SimpleJavaDomino1 sjd = new SimpleJavaDomino1();  [1]
Thread nt = new Thread((Runnable)sjd);          [2]
nt.start();                             [3]

実行させるプログラムの名前を SimpleJavaDomino1 とします。このクラスが「thread を実装したクラス」になります。「thread を実装」するために Runnable をインプリメントしています。

main の中では、その SimpleJavaDomino1 の新しいインスタンスを作成し(←[1])、そのオブジェクトのための新しいスレッドを作成(←[2])しています。
そしてそのスレッドをスタート(←[3])させています。

run メソッドでスレッドの内容が実行されますので、その中でドミノへのアクセスの処理を行います。

public void run() {
try {
Session s = NotesFactory.createSession("ASDOMINO"); [4]
String p = s.getPlatform();
String nv = s.getNotesVersion();

サーバー名を指定して、セッションオブジェクトを作成(←[4])します。このセッションオブジェクトの作成を先にふれた NotesFactory クラスとその createSession メソッドで行います。

このセッションオブジェクトを通じていろいろなプロパティにアクセスできるわけです。

たとえば、getPlatform メソッドでドミノが実行されているプラットフォーム、getNotesVersion メソッドでドミノのバージョンを取得することができます。

取得できるプロパティには以下のようなものがあります。

isOnServer 以外はあたまに get をつけたメソッドで取得できます。(isOnServer はそのまま)

たとえば以下のようなコードを s.recycle(); の前に挿入すれば

if (s.isOnServer() ) {
System.out.println("サーバーで実行中"); }
else {
System.out.println("ローカルで実行中"); }

こんな実行結果が出てきます。

以下に変更後のコードも載せておきます。

import lotus.domino.*;
public class SimpleJavaDomino1 implements Runnable {

public static void main(java.lang.String[] args) {
SimpleJavaDomino1 sjd = new SimpleJavaDomino1();
Thread nt = new Thread((Runnable)sjd);
nt.start(); }

public void run() {
try {
Session s = NotesFactory.createSessionWithIOR(NotesFactory.getIOR("ASDOMINO"));
String p = s.getPlatform();
String nv = s.getNotesVersion();

System.out.println("Current Platform : " + p);
System.out.println("Current Domino Version: " + nv);

if (s.isOnServer() ) {
System.out.println("サーバーで実行中"); }
else {
System.out.println("ローカルで実行中"); }

s.recycle();
}
catch (NotesException n) {
System.out.println("ID: " + n.id + " -- Name: " + n.text);
}
catch (Exception e) {
e.printStackTrace(); }
}
}

[Top Pageに戻る]

Ads by TOK2