|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lotus Domino と IBM WebSphere の統合ソリューション: Domino JSP タグライブラリー |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Advisory Software Engineer, IBM Corporation レベル:中級 原文の掲載: 2005年3月8日 更 新 日:2005年7月22日更新 はじめにLotus Domino でデータを管理し、Domino XML または Domino JSP タグライブラリーを使用して、IBM WebSphere のスケーラブルでトランザクショナルな J2EE プラットフォームを活用しましょう。このシリーズのパート 2 では、Domino JSP タグライブラリーを取り上げます。この 2 部構成のパート 1 では、Domino XML (DXL とも呼ばれます) を使用して Lotus Domino と IBM WebSphere を統合する方法について解説しました。DXL を使用すると、Lotus Domino を詳しく理解していなくても Domino オブジェクトにアクセスできます。しかし、DXL を使用する方法では、ある程度の Java の経験が必要です。Java の経験がほとんどない Notes アプリケーション開発者のために、Lotus Domino Toolkit for WebSphere Studio(現在リンク切れ)に Domino JSP タグライブラリが含まれています (ツールキットは Lotus Notes/Domino 6.0.2 以降で使用できます。パスポート・アドバンテージを契約されている方もツールキットをダウンロードできます)。 Lotus は、Lotus Domino 6 から 2 つの JSP タグライブラリを搭載しています。これらのライブラリによって、ほとんどすべての J2EE 準拠アプリケーション・サーバー上で Lotus Domino とインタラクトできる J2EE アプリケーションを開発する機能が得られます。タグライブラリが提供される前は、JSP 開発者はアプリケーションを Lotus Domino へ接続するために、CORBA および IIOP 呼び出しをアプリケーション内に構築する必要がありました。この結果、複雑でほとんど再利用ができないデータベース固有のコードが生成されます。相互運用の要求が高まるにつれ、より洗練された強力なソリューションが必要とされています。 Lotus はこのような要求を認識し、Lotus Domino と J2EE の一般的な機能を抽象化およびカプセル化する 2 つのタグライブラリを作成することで対応しました。これらのライブラリは、タグライブラリ記述子である domtag.tld と domutils.tld によって定義されています。Domutils.tld には、すべての J2EE アプリケーションに共通するタスクを扱うユーティリティー・タグが記述されています。これらのタグは Lotus Domino 固有のものではなく、Domino Server に依存しない任意のアプリケーションで使用できます。domtag.tld で記述されているタグは、Lotus Domino 固有のタグです。これらのタグによって、設計、アクセス制御リスト、文書を含むほとんどすべての Domino 要素にプログラムからアクセスできます。この記事では、Domino 固有のタグ (domtag.tld で定義されているタグ) を中心に解説します。これ以降は、このタグライブラリを単に taglib と呼ぶことにします。
始める前にtaglib を使用する方法は、前の記事で説明した XML の方法よりも、Lotus Domino に関してより深い知識を必要とします。この方法では、Domino フレームワークに関係のある用語やコントロールが使用されます。taglib を効果的に使用するには、Lotus Domino、さまざまな設計要素、およびアクセスするデータの構造を十分に理解していることが重要です。どちらの方法が自分の環境やアプリケーションに適しているかを知るには、パート 1 の「ロードマップ」のセクションを参照してください。 要件 taglib は JSP 1.1 および Servlet 2.2 の仕様に適合し、J2EE に準拠するほとんどのアプリケーション・サーバーをサポートします。この記事に掲載するサンプルは、IBM WebSphere Application Server 5.1 にインストールされ、WebSphere Studio Application Developer で開発されました。この記事は、Domino のオブジェクトと用語、および WebSphere Studio Application Developer を使用した基本的な J2EE プログラミングに慣れているものとして書かれています。 メモ: IIOP を扱うための Lotus Domino での準備を除き、taglib を使用するために、CORBA または IIOP のプログラミング知識はまったく必要ありません。 ソフトウェアの要件は次のとおりです。
Lotus Domino の準備 taglib は CORBA (Command Object Request Broker Architecture) および IIOP (Internet Inter-ORB Protocol) テクノロジーを使用して、Lotus Domino と通信します。このため、IIOP 要求を listen するよう Domino Server を設定する必要があります。まず、DIIOP がインストールされていることを確認します。Domino コンソールで show task コマンドまたは load diiop コマンドを発行すると、DIIOP が存在するかどうかを判断できます。インストールされていない場合は、Domino インストール CD からインストールしてください。 次に、Lotus Domino の起動時に DIIOP が自動的にロードされるよう Domino Server の Notes.ini ファイルを編集します。ServerTasks で始まる行を見つけます。この行の最後に、diiop を追加します。Domino Server を再起動し、DIIOP サーバーの起動メッセージをチェックします。 図 1. サーバーの起動時に開始された DIIOP プロセス ![]() DIIOP プロセスの開始時に、diiop_ior.txt という IOR (Internet Object Reference) が Domino HTTP ルート・ディレクトリー (Windows にインストールされた Domino のデフォルトでは C:\lotus\domino\data\domino\html) に作成されます。Lotus Domino を HTTP サーバーとして使用する場合は、次の手順を省略できます。 Lotus Domino を HTTP サーバーとして使用しない場合は、HTTP サーバーのルート HTML ディレクトリーにファイルを置くよう DIIOP を設定する必要があります。
図 2. サーバー文書の [DIIOP] セクション ![]() Web ブラウザーから「http://127.0.0.1/diiop_ior.txt」と入力して、ファイルにアクセスできるかどうかテストします。 図 3. Web に表示された diiop_ior.txt ファイル ![]()
J2EE アプリケーション環境の設定taglib を使用するには、NCSO.jar または Notes.jar (後出の囲み記事を参照) と domtag.jar の 2 つの JAR ファイルが必要です。
図 4. WebSphere Studio Application Developer の J2EE パースペクティブ ![]()
web.xml の例を示します。
Domino オブジェクトにプログラムからアクセスするために、Domino には 2 つの JAR ファイルが含まれています。Notes.jar と NCSO.jar です。Notes.jar は、Domino Server にローカルにアクセスするときに使用します (Lotus Domino と Java プログラムが同じマシンにある場合です)。NCSO.jar には、リモート・サーバーにアクセスする CORBA/IIOP コードが追加されています。 どちらの JAR を使用するか決めるときは、次の点を考慮してください。 Lotus Domino に対して、Java プログラムをどこで実行しますか? 同じマシンで実行する場合は、Notes.jar の方がパフォーマンスが向上します。 スケーラビリティは重要ですか? 現在、Java プログラム (スタンドアロン Java アプリケーションで J2EE 非対応) と Lotus Domino を同じマシンで実行している場合でも、将来的には、専用のサーバーへと拡張する必要があるかもしれません。このような場合は、NCSO.jar を使用した方が適応性が高まります。 Java プログラムをアプリケーション・サーバーで実行するつもりですか? WebSphere を使用するときは、Lotus Domino が同じマシン上にある場合でも NCSO.jar が必要です。 デフォルト・パラメータの設定 taglib には、web.xml ファイルで設定できる多くのコンテキスト・パラメータがあります。ポータビリティを高め、将来のメンテナンスの手間を省くために、アプリケーション全体に関わるこれらのパラメータをできる限り使用することを推奨します。 この例では、ホスト (127.0.0.1) とデータベース (articleSample.nsf) をコンテキスト・パラメータとして設定します。これらは、順に lotus.domino.default.host と lotus.domino.default.dbname です。 この設定を行なうために、web.xml を開き、次の行を追加して保存します。
domtags を使用する次のセクションでは、前の記事でも使用した Car データベースを使用します。ここでは、次のことを行なう 4 つの JSP を作成します。
始める前に、taglib を使用するすべての JSP にこの taglib 宣言を含める必要があります。この宣言は、アプリケーション・サーバーに対し、domino という単語で始まるどのタグ (たとえば、<domino:db>) も、domtags タグライブラリ記述子内のエントリーへの参照であることを示します (他の接頭辞を使用することも可能ですが、できるだけ domino を使用してください)。 <%@ taglib uri="domtags.tld" prefix="domino" %> 文書を表示する まず、Notes 文書の内容を表示するシンプルな JSP から始めましょう。これは、unid と呼ばれる 1 つの querystring パラメータを受け取ります。このパラメータの値は、要求された文書の文書固有 ID です。JSP エディターで、disptagcar.jsp という名前の新しい JSP を作成します。先ほど説明した taglib 宣言の入力から始めます。lotus.domino.* というインポート行を含めると、Domino オブジェクトに直接アクセスできます。これについては後述します。
<domino:document> タグは、Notes 文書のコンテキストを提供します。このコンテキスト内で、特定の文書のほとんどすべてのアイテムとプロパティにコードからアクセスできます。場合によっては、document タグの dbserver、dbname、および unid の各属性に値を渡すケースもあります。しかし、この例ではそれを行ないませんでした。その理由は、必要な情報がすでに別の場所で指定されているからです。サーバーのホスト名とデータベースのファイル名は、Web デプロイメント記述子 (web.xml) によってすでに定義されています。UNID は、querystring パラメータの unid で明示的に指定されています。 何らかの理由で URL 内に UNID を表示したくない場合は、別の方法で document タグの unid 属性に UNID を明示的に指定しなければなりません。
<domino:item> タグは、name 属性で指定されたアイテムの内容を表示します。たとえば、<domino:item name="make"/> は make アイテムに格納されている値を表示します。specifications フィールドを参照している最後の item タグには format 属性があります。この属性は、値を JSP でどのように表示するのかをタグライブラリに伝えます。この属性に与える値をキーワードと呼びます。format 属性では複数のキーワードを使用できます。 specifications フィールドは複数値フィールドであることを思い出してください。したがって、このフィールドには複数の値を格納できます。<li> キーワードは、specifications 内の各値を <li> タグと </li> タグで囲むことを <domino:item> タグに伝えます。 ビューの内容を表示する Domino ビューは、<domino:view> タグを介してアクセスできます。たとえば、自動車のサンプルでは、vin と make の 2 つの列を持つシンプルな [Cars\By VIN] ビューがあります。このビューは vins という別名を持っています。view タグではこの別名を参照します。 図 5. Notes Client での VINs ビューの表示 ![]() VINs ビューを HTML として表示する JSP のコードは次のとおりです。
図 6. VINs ビューの内容を表示する JSP ![]() 「ビュー」JSP を調べる 上記の JSP を調べましょう。次のセクションで、この JSP を使用して検索ページを作成します。
<domino:item> と <domino:viewitem> の違いは次のとおりです。<domino:item> は値を取得する文書を開く必要があるのに対し、<domino:viewitem> はビューに表示される任意の値を使用できます。パフォーマンスが大幅に低下する可能性があるので、viewloop のコンテキストでは、できるだけ item タグを使用しないでください。
ビューの検索このセクションでは、検索機能をサポートするために、作成した「ビュー」JSP を変更する方法を説明します。全文検索を正しく機能させるには、Domino データベースで全文索引をオンにする必要があります。データベースに全文索引が作成されているかどうかを確認するには、[データベース] プロパティボックスを開き、[全文検索] タブをクリックします。データベースの全文索引が作成されていない場合は、[索引の作成] ボタンをクリックします。要求がキューに登録されると、Notes Client のステータスバーにそれを示すメッセージが表示されます。通常、全文索引はすぐに作成されます。 図 7. [データベース] プロパティボックスの [全文検索] タブ ![]() 検索をカスタマイズできるようにするため、検索フォームには、クエリー、検索結果の最大数、および結果の各ページに表示するエントリー数を入力する 3 つのフィールドを含めます。「検索」JSP のベースとして、前のセクションで作成した「ビュー」JSP を使用します。 検索を処理する JSP コードの一部を以下に示します。
「ビューの検索」JSP を調べる 「ビューの検索」JSP を詳しく見ていきましょう。
フォームこの最後のセクションでは、ユーザーが Notes 文書を作成または変更するときに使用する JSP フォームを作成します。説明を簡単にするために、このサンプル・データベースでは、匿名ユーザーに [作成者] のアクセス権を許可します。セキュリティーが重要な実際のアプリケーションでは、一元化されたユーザー・レジストリー (LDAP など) とシングル・サインオン (SSO) を使用して、より厳密な方法にします。Lotus Domino の認証および権限を扱うために、WebSphere をトラステッド・コンテナーとして設定してください。WebSphere と Lotus Domino の SSO の詳細については、WebSphere Application Server InfoCenter を参照してください。 サンプルのフォームには、次の機能があります。
「フォーム」JSP のすべてのコードについては、付録のファイル「Form JSP code」を参照してください。 form タグ <domino:form> タグは、指定された文書への編集アクセス権を与えます。このタグでは、詳細な操作を行なうホストをサポートするいくつかの属性を使用できます。このサンプルでは、最も一般的な属性が使用されています。これについて、詳しく見ていきましょう。
使用した検証タグは次のとおりです。
document タグ <domino:document> タグは、Notes 文書自身へのアクセスを提供します。id 属性が存在すると、taglib は lotus.domino.Document オブジェクトに id タグ自身の値を名前として割り当てます。このサンプルでは、このオブジェクトは doc です。この方法により、プログラムからオブジェクトのプロパティとメソッドに完全にアクセスでき、taglib の用途が通常の Java コードでのプログラミングへと大きく拡張されます。この強力な機能は、taglib のほとんどのタグに利用できます。Domino Java クラスの詳細については、『Domino Designer ヘルプ』を参照してください。
まとめこの記事では、Domino 対応の強力な J2EE アプリケーションを構築するために、Domino JSP タグライブラリを使用したプログラミングの方法について解説しました。また、サンプルを通して、よく使用されるタグやその背景にある概念を解説しました。この連続記事に書かれている情報は、既存の Domino 環境に J2EE を導入する際に役立つでしょう。
リソース
ダウンロード
筆者について(原文のまま)Jeffrey Lo is an Advisory Software Engineer for alphaWorks, IBM's resource for emerging technologies. Jeff has been with IBM since 1999, spending his waking hours architecting and building applications around Lotus Domino and IBM WebSphere. His responsibilities include the alphaWorks Web site, its content management system, and a number of backend applications. On the weekends, he likes to go biking in California's Santa Cruz mountains and taking photos of the Pacific Coast.
|