fc2ブログ

DIIOPの動作確認用サンプルコード

 テンプレートのデザイン変えてみました。こだわりはないのですが、どうしても2カラムのものに変えたかったので。。やっぱり3カラムだと横幅の狭さが読んでて気になります。。

昨日も書いたとおり、今日はDIIOPのサンプルコードと簡単な動かし方です。
本格的な開発ではEclipseのようなGUIの開発環境があると便利ですが、ちょっとDIIOPの動きを知りたいだけであれば、JDKを使って手でコードを書いたほうが楽なのではないかな、と個人的には思います。

■ 準備
 ノーツデータベースを作ったらいきなり使えるわけではないのでクライアントとサーバーについて以下の準備だけは最低限必要なのでお願いします。

1) DIIOPタスクの稼動
 ドミノサーバーはDIIOPタスクとHTTPタスクを稼動しておいてください。
必要に応じて、Load DIIOP コマンドで起動してもよいですし、Notes.ini のServerTasks行に加えておいても構いません。あとDIIOPはインターネットパスワードでつなぐので、接続するNotesユーザーにはインターネットパスワードを設定しておく必要があります。

2) JDKの導入
 接続を行うクライアント環境ではJDKを導入しておく必要があります。
コンパイルの必要があるため、JREだけではなく、JDKを導入しておく必要があります。

JDKはどこのものでもいいのですが、一応SunのJDKダウンロードサイトと、IBMのJDKダウンロードサイトのリンクをつけておきます。
IBM JDK Download
SUN JDK Download

今回のサンプルくらいではJDKのバージョンはそれほどこだわる事は無いのですが、Notes 8でも 1.5.0 なので、ちゃんとした開発を行う際には最新のJava 6 ではなく Lotus Notes/Dominoの JRE のバージョンにあわせてください。
 現在利用しているNotes のJREのバージョンが知りたい場合にはNotesのJVMディレクトリの下にあるbin\java.exeを使用して確認をする事が出来ます。

C:\lotus\notes\jvm\bin>java -fullversion
java 完全バージョン "J2RE 1.5.0 IBM Windows 32 build pwi32devifx-20071025 (SR6b)"


3) NCSO.jarのコピー
 Notesクライアントの入っている環境下であれば直接そこをサーチパスに指定すればよいので問題ないのですが、本来リモートアクセスの Java アプリケーション(DIIOPを使用した接続を行うもの)ではNotesクライアントが導入されていない端末で接続を行うことが前提なので、その場合にはNCSO.jarを事前に端末上にコピーしておく必要があります。
NCSO.jarは <データディレクトリ>\domino\java にあります。


■ サンプルコード

サンプルデータベースを用意するのも面倒だと思うので、サーバー上のNames.nsf につないでサーバー名とデータベースタイトルだけを出力するものです。

NABTest.java (青字は適当に変えて下さい。)

import lotus.domino.* ;

public class NABTest
{
static String host = "xxxx.xxx.com" ; // server address
static String cName = "notes admin" ; //username
static String dbname = "names.nsf"; // database (e.g. mail\\hnagashi.nsf)
static String password = "password" ; // internet password


public static void main(String args[]){
try{
Session s = NotesFactory.createSession(host,cName,password) ;
Database db = s.getDatabase("", dbname );
if(!db.isOpen()){
db.open();
}
String title = db.getTitle();
String uname = s.getUserName();

System.out.println("UserName: " + uname );
System.out.println("ServerName: " + db.getServer());
System.out.println("Title: " + title);

}catch(NotesException ne){
System.out.println(ne.id + ne.text);
ne.printStackTrace() ;
}catch (Exception e){e.printStackTrace() ;}
}
}


■ コンパイルと実行
 恐らく初めてDIIOPアプリケーションを作るときに一番緊張するのはコンパイル作業ではないでしょうか。言葉で説明すれば、「NCSO.jarをクラスパスに指定してコンパイルして下さい」と言うだけの話なのですが毎回混乱するので僕は以下のようなバッチファイルを用意しています。
(以下、作業ディレクトリをC:\MyJava としています。)

Compile.bat (青字は編集してください。)
set Java_HOME=C:\SUN\Java\jdk1.6.0_06\bin
set PATH=%Java_HOME%;%PATH%
set CLASSPATH=C:\lotus\notes\data\domino\java\NCSO.jar;C:\myjava
javac -target 1.5 NABTest.java

Java_HOME: JDKのbinディレクトリへのパス
CLASSPATH: NCSO.jarへのパスとNABTest.javaを置いているディレクトリ
8.xのJREはjava 1.5なので -target を1.5にしていますが、7.xのNCSO.jarなどを使っているのであれば1.4などにしましょう。
 僕の環境ではNotesクライアントが入っているのでNCSO.jarのパスがいかにも、と言うところになっていますが、これもどこに置いても構いません。ClassNotFoundException になるのはほとんどの場合NCSO.jarへのパスが通っていない場合です。CLASSPATHが色々通り過ぎていると逆に変なjarファイルを見てエラーになってしまう事もあるのでこのバッチの例のように新たにセットしてしまった方が簡単な気がします。

僕は実行のコマンドも考えるの面倒なので以下のような一行のバッチファイルを作っています。
こっちはJava_HOMEへのパスが通っていることが前提なので、そうでない場合は上の例を参考にパスを加えて下さい。

run.bat
java -cp c:\MyJava;c:\lotus\notes\data\domino\java\NCSO.jar NABTest

■ 実行結果

C:\MyJava>run
C:\MyJava>java -cp c:\MyJava;D:\lotus\notes\data\domino\java\NCSO.jar NABTest
UserName: CN=notes admin/O=LTS
ServerName: CN=xxxx/O=LTS
Title: LTS's Directory


コマンドプロンプトからcompile.batとrun.batを実行して、ユーザー名、サーバー名、データベース名(Names.nsf)のタイトルが表示できたら成功です。
 DIIOPの最大のメリットは、NCSO.jarさえあればクライアント環境が無くてもNotesデータベースにアクセスできる事なのですが、何となく概要がつかめたのではないでしょうか。

 僕はこういうコードをHello World みたいな感じで使ってDIIOP環境がセットアップできた事を確認するのに使っています。

 こういう安っぽいコードはなかなかTechnoteとして公開することも難しいし、上級者にはあまり役に立たない情報なのではないかと思うのですが、このような場所で共有してDIIOPやNotes Javaクラスの勉強の入り口になる事が出来たら幸いです。

コメント

非公開コメント

Re: DIIOPの動作確認用サンプルコード

こんにちは。ずっとノーツ技術者やってます。
ノーツはJavaも動くのだから、どうにかノーツを触りながらJavaもかじっていきたいなと思っていました。
(残念ながら市販書籍が殆ど無く敷居が高いと感じます)
早速サンプルコードを動かしてみました。動かせました!
ループの方もできました!動きの説明も詳細ですのでよく理解できました。
触って動かせたら今度はソースにも興味が出てきましたので早速Javaの勉強を始めることにしました。
このブログ大変興味がありますので頑張ってくださいね!

うれしいです

mapleさん
はじめまして。mapleさんのような人が参照してもらえるといいな、と思っていたのでうれしいです。

ノーツでついでに他の言語も勉強してみる、て常々思っていたので色々な例をこれからもとりあげていきたいので、よろしくお願いします。

Re: DIIOPの動作確認用サンプルコード

DIIOPの意味が知りたくてネットを徘徊していたらこの記事にいきつきました。内容が実践的で楽しく読むことができました。ありがとうございました。ノーツインフラ担当より。

今後も訪問お願いします!

gnemauth さん
 はじめまして。
アプリ開発系の記事に偏っているのが最近気になっていたので、インフラをやっている方も読んでいただけているのは励みになります。
 それにしてもこの記事は自分では、「あまり有用ではなさそうだけど、ブログに書く分には許してもらえるかな・・・」と言う程度の気持ちで書いていたのですが、意外と反響が大きくてびっくりしています。
 でも、これはIBMからのDIIOPなどの情報発信が弱い、と言う意味の裏返しだとも思うので反省しないといけないですね。。

Re: DIIOPの動作確認用サンプルコード

こんにちは。

今までノーツメインでやっていたのですが、
Java-Notes連携を検討することになり大変参考になりました。
ありがとうございました!

利用するあたり1点気になったことがあるのですが
Notesクライアントがインストールされていない端末から実行するのに
NCSO.jarファイルをコピーしますが、ライセンス的な問題はないですか?

NotesDesignerのヘルプやIBMのサポートページで見たのですが、
いまいちわからなくて質問させていただきました。

プログラムを実行するユーザがライセンスを持っていれば
いくつコピーしてもいいのでしょうか?

ライセンスについて

ご訪問ありがとうございます。

まずファイルコピーの話ですが、元々配布用のファイルですのでファイルをコピーする事自体には問題はないはずですが、DIIOPアクセスはインターネットパスワードなどインターネットユーザーとしてのライセンスを保有している事が前提のテクノロジーになりますのでそちらでライセンスは発生する事になります。
 ただし、この点については間違いがあっては困るところですので、不明な点がある場合には担当営業などにもご確認頂けますようお願いいたします。

Re: DIIOPの動作確認用サンプルコード

さっそくのご回答ありがとうございます。

ファイルのコピーは元々配布用だということなんですね。理解しました。

ライセンスはデリケートな部分ですし、不明な点があったら、おっしゃるように正式(?)ルートにて質問するようにしますね。

どうもありがとうございました。