IBM Domino 上で Java サーブレットを動かすまでの設定と実装を紹介します。なお、今回は Domino バージョン 9 上で実行することを想定しています。


まずは Domino 上で Java サーブレットが動作するよう設定します。Domino 導入後、管理クライアントを開きます(ウェブ版でも構いません。その場合は webadmin.nsf を開きます)。サーバー設定文書を編集モードで開いて、"Internet Protocol" - "Domino Web Engine" - "Java servlet support" を "Domino Servlet Manager" に設定します。また必要に応じて Servlet URL path(デフォルトで /servlet)や Class path(同 domino/servlet)を編集して保存します。これで Domino サーバー側の設定は完了です:
2016102201


次に Java サーブレットを実装します。Domino 上の Java サーブレットは war ファイルを読み込む、といったことができないので、JDK でサーブレットの class ファイルを用意します。この辺り詳しくは以下のエントリも参照ください:
Eclipse(IDE) を使わずにJavaサーブレットを作る



上記エントリで紹介した HelloWorld サーブレットを動かしてもいいのですが、せっかくなので Domino のクラスを使って情報を取得して表示する内容にします。以下のソースコードを DominoInfo.java というファイル名で、UTF-8 で記述して保存します(青字部分で Domino クラスを使っています):
//. DominoInfo.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import lotus.domino.*;

public class DominoInfo extends HttpServlet{
  @Override
  protected void doGet( HttpServletRequest req, HttpServletResponse res ){
    try{
      NotesThread.sinitThread();
      Session session = NotesFactory.createSessionWithFullAccess();
      String username = session.getUserName();
      String version = session.getNotesVersion();
      
      res.setContentType( "text/plain; charset=UTF-8" );
      res.getWriter().println( username + " : " + version );
    }catch( Exception e ){
      e.printStackTrace();
    }finally{
      NotesThread.stermThread();
    }
  }
}

↑このサーブレットを実行するユーザー(つまりサーバー ID のユーザー)名と、実行中の Domino のバージョンを取得して表示する、という内容です。

これを javac でコンパイルします。このエントリでも紹介しましたが、javac のパラメータで UTF-8 エンコードであることと、ServletAPI.jar のクラスパスを指定する必要がありますが、更に加えて以下の2点を指定してコンパイルします:

(1) lotus.domino.* クラスを利用するので、Notes.jar のクラスパスを指定(以下のコマンド例では C:\IBM\Notes\jvm\lib\ext\Notes.jar に存在していると仮定)
(2) Domino 9 で使われている Java のバージョンは 6 (つまり JDK 1.6)なので、このバージョン互換でコンパイルするよう指定


具体的には以下のようなコマンドを実行します:
C:\tmp>javac -classpath c:\arc\servlet-api-3.1.jar;c:\IBM\Notes\jvm\lib\ext\Notes.jar -encoding utf-8 -source 1.6 -target 1.6 DominoInfo.java

コンパイルに成功すると DominoInfo.class というファイルが出来上がります。これを上記で設定した Domino の classpath(上の例だと domino/servlet)フォルダにコピーして、Domino を再起動します。

再起動後、ウェブブラウザで Domino サーバーの /servlet/DominoInfo にアクセスしてサーブレットを実行し、以下のような結果になることを確認します:
2016102202


↑サーバーを実行しているユーザーの名前(CN=Domino/O=Dot123)と、Domino サーバーのバージョン(Build V90_C06_12072012|December 07, 2012)が表示できました。 本来、これらの情報は Notes クライアントなどの特殊環境からでないと取得できないものですが、そのロジックを Java サーブレットという仕様でラッピングすることで HTTP アクセスで取得することができるようになったことが分かります。Notes/Domino データベースへの読み書きを実現するための1つの方法として使えます。