本文へジャンプ

ソフトウェア Lotus Lotus Developer Domain 製品別技術情報 Lotus Notes/Domino > 
   
 

IBM Lotus Domino JavaエージェントからのWebサービスのコンシューム

   
   
 
コンテンツ
Webサービスのコンポーネント
Apache Axis
Webサービス・コンシューマー・エージェントの作成
WSDLファイルからのJavaファイルの生成
Lotus NotesへのJavaファイルのインポート
Webサービスを呼び出すLotus Notesエージェント
サーバー上でのWebサービス・コンシューマー・エージェントの実行
まとめ
ダウンロード
リソース
筆者について(原文のまま)
アンケートにご協力ください
Joachim Dagerot (jd@dagerot.com), System Architect and Technical Lead, Strand Interconnect

レベル:中級
原文の掲載:2006年8月15日
原文はこちら (US)

IBM Lotus Domino 7の新機能であるWebサービス設計要素は、サービスを全世界に公開するための優れた方法です。さらに、Apache Axisフレームワークを使用すると、Webサービスのコンシュームが非常に簡単になります。ここでは、Apache AxisおよびLotus Domino 7のテクノロジーを利用してWebサービス・コンシューマーを作成する方法を説明します。

Webサービスは、複数のコンピューターがネットワーク経由で対話できるように設計されたシステムです。このサービスの最大の利点は、異なるオペレーティング・システムおよびアプリケーション・サーバーを使用する複数のコンピューター間でもオブジェクトを送信できる標準ソリューションであるということです。例えば、Strand Interconnectでは、Microsoft .NET Frameworkを実行中のコンピューターからIBM Lotus Dominoベースのイントラネットへ記事を公開するためにWebサービスを使用しています。最近完了した別のプロジェクトでは、Lotus Domino 7 サーバー上でWebサービスとして特別レポートを公開しました。Javaベースのアプリケーション・サーバーがレポート・サーバーを読み取るので、ネゴシエーションが必要なのはWebサービス記述言語(WSDL)ファイルのみでした。

この記事では、WebサービスをコンシュームするDomino Javaエージェントを作成する方法について説明します。ここでは、Apache Axisを使用して、Javaスタブの生成とWSDLファイルの読み込みを行います。Webサービスを含むサンプル・データベースが提供されるため、この記事の説明に従ってこのデータベースを使用できます。詳しくは、『ダウンロード』セクションを参照してください。

この記事は、Domino Webサービス設計要素についての知識を持つ経験豊富なLotus Notes/Dominoのアプリケーション開発者を対象にしています。Domino Webサービス設計要素について詳しくは、developerWorksのLotus記事『Lotus Notes/Domino 7 Webサービス(US)』を参照してください。


Webサービスのコンポーネント

Webサービスは、いくつかのコンポーネントから構成されます。これには、以下のコンポーネントが含まれます。

  • WSDLファイル
  • サービス指向アーキテクチャー(SOA)
  • 各種プロトコル

WSDLファイル

WSDLは、Webサービス・セットアップ内で接着剤の役割を果たします。各Webサービスが公開するWSDLファイルには、そのサービスが処理できるメソッドと引数についての情報およびそれぞれのメソッドが戻すオブジェクトについての情報が格納されています。この記事と共に、単純なWebサービスを含むデータベース(この場合にはLotus Domino 7データベース)が提供されます。

Webサービスは単純であっても、そのサービスのWSDLファイルの内容は冗長です。この理由の1つは、WSDLファイルが冗長なフォーマット(XML)を使用しているからです。しかし、Webサービスが送受信するすべてのオブジェクトの記述がWSDLファイルに格納されているにもかかわらず、そのサイズは極端に大きいわけではありません。この記事のWebサービス例のWSDLファイルには、ComplexClassという名前のJavaクラスがあります。以下にそのコード・スニペットを示します。

<complexType name="MyComplexClass">
<sequence>
<element name="alpha" nillable="true" type="xsd:string"/>
<element name="calcA" type="xsd:int"/>
<element name="calcB" type="xsd:int"/>
<element name="result" nillable="true" type="xsd:int"/>
</sequence>
</complexType>

サービス指向アーキテクチャー

この10年ほどの間、サービス指向アーキテクチャー(SOA)は注目の的でした。簡単にいうと、SOAとは、一般的な技術主導型のソリューションよりもビジネスに重点を置いたソフトウェア・アーキテクチャーです。その基本的な目的は、コンシューマー/プロバイダー方式でWebサービスを使用するためのアーキテクチャーを設計することです。SOAアプローチでは、ビジネス・オブジェクトと対話するコンシューマーが置かれている層を直接分離するのではなく、サービス層を使用して分離します。

SOAについて詳しくは、developerWorksの「SOA and Web services」の『New to SOA and Web services(US)』ページを参照してください。

Webサービスが使用するプロトコル

Webサービス・メッセージは、HTTP以外のプロトコルも使用できます。SMTP、Extensible Messaging and Presence Protocol (XMPP)、またはFTPも使用できます。ただし、メッセージはSOAPに準拠している必要があります。準拠していないと、受信側のシステムがメッセージを解釈できないことがあります。古いシステムではXML-Remote Procedure Call (XML-RPC)が使用されていることもありますが、現在の標準的なプロトコルはSOAPです。

Webサービスの長所は、さまざまなプロトコルや標準を開発者が処理する必要がないことです。これらはすべて、アプリケーション・サーバーおよび開発ツールによって処理されます。この例では、Apache Axisを利用して、WSDL解釈とJavaコード・スタブの生成を行います。

サンプル・データベース

Apache Axisツールの使用を開始する前に、WSDLファイルを公開するWebサービスを準備する必要があります。この記事の『ダウンロード』セクションには、WebServiceConsumer.nsfとMyWebService.nsfの2つのサンプル・データベースがあります。それぞれの名前がその内容を表しています。ご使用のLotus Domino 7 ServerにMyWebService.nsfをダウンロードした後で、制限付きエージェントを実行できるIDを使用して、Webサービス設計要素(MyWebservice)に署名します。WebServiceConsumer.nsfは参照専用です。


上に戻る

Apache Axis

Apache Axisは、Webサービスを生成およびデプロイするためにSOAPサーバーと各種ツールを提供する総合的なフレームワークです。この記事の通信部分とWSDL2Javaメソッドを使用します。ただし、最初にApache Axisをインストールする必要があります。

前提条件

この記事で説明するソリューションを構築、テスト、およびデプロイする前に、以下のコンポーネントを準備する必要があります。

  • Lotus Domino 7 ServerおよびIBM Lotus Domino Designer
  • Javaソフトウェア開発キット(JDK)
  • Apache Axisフレームワーク


ここでは、Lotus Domino 7がインストール済みであり、Java環境を稼働させる方法を読者が理解していると仮定します。(必要となるすべてのダウンロードへのリンクは、この記事の『リソース』セクションにあります。)

表1は、このシステムで使用するファイル構造を示しています。この構造を複製して使用する場合は、後で説明するバッチ・ファイルおよびクラス・パスを再使用するか、独自の方針を採用するかを選択できます。以降の説明では、各ディレクトリーの作業名を使用します。バッチ・ファイルは変数によって制御されるため、ファイル内の数行を変更するだけで、ご使用のシステムで適切に動作するようにファイルを調整できます。

表1.推奨されるファイル構造

作業名 パス
サーバー・パス C:\lotus\DominoR7StandAlone
JDKバージョン2 C:\java\j2re1.4.2_09
Apache Axis C:\java\Axis
作業ディレクトリー C:\java\consumer

Apache Axisのダウンロードとインストール

Apache Axisをダウンロードした後で、パッケージをAxisディレクトリーに抽出します。(表1の推奨されるパスを参照。)この記事では、Apache Axisが提供する2つの機能を使用します。1つは通信クラスです。実際には、それをご使用のLotus Domino環境にインポートするということ以外には、何も知らなくてもかまいません。もう1つの機能はwsdl2javaツールです。Apache Axisは、このツールを使用して、WSDLファイルを読み取り、必要となるすべてのメソッドおよびオブジェクトのために完全なJavaスタブを生成できます。

シェルを起動してApache Axisクラスの実行を開始することもできますが、各コマンドを開始するために100文字を超えるクラス・パスを指定するのは不便です。この問題の1つの解決方法は、Apache Axisで必要となる完全なクラス・パスを汎用Javaクラス・パスに設定することです。しかし、ここでは、クラス・パスを設定するバッチ・ファイルを管理するという別の方法を採用することにします。このバッチ・ファイルの名前はwsdl2java.batであり、作業ディレクトリー内に格納されています。以下にそのコード・スニペットを示します。

@echo OFF
rem *******************************************************
rem ***     wsdl2java.bat                              ****
rem *******************************************************
set AXISPATH=c:\java\AXIS\lib
set JAVAPATH=C:\java\j2re1.4.2_09
set DOMINOJAVAPATH=C:\lotus\DominoR7StandAlone\jvm\lib\ext
set CP=%AXISPATH%\axis.jar
set CP=%CP%;%AXISPATH%\commons-logging-1.0.4.jar
set CP=%CP%;%AXISPATH%\commons-discovery-0.2.jar
set CP=%CP%;%AXISPATH%\jaxrpc.jar
set CP=%CP%;%AXISPATH%\saaj.jar
set CP=%CP%;%DOMINOJAVAPATH%\mail.jar
set CP=%CP%;%DOMINOJAVAPATH%\activation.jar
set CP=%CP%;%AXISPATH%\wsdl4j-1.5.1.jar
%JAVAPATH%\bin\java -cp %CP% org.apache.axis.wsdl.WSDL2Java %1

上に戻る

Webサービス・コンシューマー・エージェントの作成

エージェントの作成を開始するには、WebサービスからWSDLファイルを取得します。ここでは、提供されたWebサービス(MyWebservice)を使用し、そのサービスがLotus Domino 7 Serverに複製されていると仮定します。WSDLファイルを表示するには、ブラウザー上でデータベースを指定し、?WSDLコマンドを使用してWebサービスを開きます。図1は、この操作結果を示しています。

図1.ブラウザー内に表示されたWSDLファイルの例

WSDLファイルが表示されたことを確認した後で、WSDLファイルを作業ディレクトリーに保管するか、またはURLを使用してApache Axisツールキットに対してネットワーク上のWSDLリソースを直接指定するかを選択できます。その後で、WSDLファイルからのJavaスタブの生成を開始できます。


上に戻る

WSDLファイルからのJavaファイルの生成

WSDL2Java関数には、パラメーターとして以下のようにファイル名を指定できます。

C:\java\consumer>wsd12java.bat MyWebservice.xml

または、以下のようにWSDLファイルへの完全なUniform Resource Indicator (URI)を指定できます。

C:\java\consumer>wsd12java.bat http://localhost/mywebservice.nsf/MyWebService?WSDL

ローカルで作業するには、最初のコマンドに示すように、WSDLファイルをダウンロードし、MyWebservice.xmlという名前を付けて作業ディレクトリーに保管します。

メモ: ここで使用しているWebサービスは、デモンストレーションのみを目的としたものです(例えば、名前空間は使用しません)。そのため、作業ディレクトリー内にDefaultNamespaceという名前の新しいディレクトリーが作成されます。

wsdl2java.batを実行した結果、5つのJavaファイルが生成されます。

  • DominoSoapBindingStub.java
  • HelloWorld.java
  • HelloWorldService.java
  • HelloWorldServiceLocator.java
  • MyComplexClass.java

これらの5つのファイルのうち、重要なのはHelloWorld.javaとMyComplexClass.javaです。その他のファイルは、呼び出しの実行と応答の構文解析に使用されます。Apache Axisフレームワークについて詳しくは、『Apache Axis wiki』(US)を参照することをお勧めします。

Eclipse(US) はこちら

HelloWorld.javaは、Webサービスが処理できるメソッドと引数を記述するインターフェースです。MyComplexClass.javaは、MyComplexClassオブジェクトのJavaBeansバージョンです。getMyComplexClass()メソッドが呼び出されると、Webサービスはこのオブジェクトに応答します。

次に、Webサービスをコンシュームできるように、Domino 7データベース内に新しいスクリプト・ライブラリーを作成します。


上に戻る

Lotus NotesへのJavaファイルのインポート

Webサービス・コンシューマー・エージェントは、Apache Axisが生成したファイルを使用します。Javaファイルをインポートする最も簡単な方法は、Javaスクリプト・ライブラリーを作成することです(JavaScriptライブラリーと混同しないでください)。ファイルをインポートし、作業ディレクトリーを基本パスとして設定してください(図2を参照)。

図2. Apache Axisが生成したJavaスタブを格納するスクリプト・ライブラリー


メモ: 基本ディレクトリーをDefaultNamespaceディレクトリーではなく作業ディレクトリーにすることが重要です。

スクリプト・ライブラリーが適切に作成およびコンパイルされると、ライブラリーを閉じて、新しいJavaエージェントを作成できます。このエージェントは、Apache Axisクライアント・クラスを使用します。これらのクラスは、Axisフレームワークの一部であるため、インポートする必要があります。

Apache Axisクライアントは、Axisディレクトリー内のJavaアーカイブ(JARファイル)に格納されています。これらのクラスをエージェントに公開するためのオプションはいくつかあります。その1つはエージェント内にクラスを直接インポートすることです。しかし、これらのクラスに共通する性質を考慮すると、IBM Lotus Notesが使用するその他のJARファイルと共にこれらのクラスを.\jvm\lib\extディレクトリーに格納するほうが便利です(これらのクラスは、Webサービスのコンシュームで複数回使用されるため)。

JARファイルaxis.jar、commons-discovery-0.2.jar、およびcommons-logging-1.0.4.jarを.\Axis\libからLotus Notesクライアント・ディレクトリー内の.\jvm\lib\extにコピーします。(これらの追加を有効にするには、Lotus Notesクライアントを再始動する必要があります。)Lotus Domino Designerが実行されると、ここからいくつかのステップを実行するだけで、Webサービスの呼び出しを開始できます。


上に戻る

Webサービスを呼び出すLotus Notesエージェント

JARファイルが.\jvm\lib\extディレクトリー内に適切に格納され、Lotus Domino Designerを再始動すると、Webサービス・コンシューマー・エージェントをコーディングできます。最初に、通常のJavaエージェントを作成します。次に、「プロジェクトの編集」ウィンドウを開いて、以前に作成したスクリプト・ライブラリーをインポートします。プロジェクトのプロパティー・ウィンドウを閉じ、必要なインポート行を以下に示すように追加します。

00 import lotus.domino.*;
01 import java.net.URL;
02 import org.apache.axis.client.Call;
03 import org.apache.axis.client.Service;
04 import DefaultNamespace.*;
05 import java.io.*;
06 public class JavaAgent extends AgentBase {
07  public void NotesMain() {
08   try {
09    Session session = getSession();
10    AgentContext agentContext = session.getAgentContext();
11   
12    URL  endpoint = new URL("http://localhost:80/MyWebService.nsf/MyWebService");
13 
14    Service service1 = new Service();
15    DominoSoapBindingStub service = new DominoSoapBindingStub(endpoint,service1);
16    String greeting=service.getGreeting();
17    System.out.println(greeting);
18 
19    String greeting2=service.getGreeting("Lotus");
20    System.out.println(greeting2);
21 
22  } catch(Exception e) {
23     e.printStackTrace();
24   }
25 }
26}

行12では、使用するWebサービスを指す標準Java URLを作成します。行14では、Apache Axisが提供するService()クラスをインスタンス化します。次に、行15でDominoSoapBindingStubサービスをインスタンス化し、新しく作成したservice1オブジェクトと行12で作成したURIをこのサービスに提供します。行16では、Webサービス・メソッドgetGreeting()が提供する値を新しいストリングに設定します。

エージェントを保管し、Javaコンソールを始動します。(この段階でアクションを表示できる場所は、このコンソールのみです。)デバッグ・ウィンドウが開いたら、新しいデータベースを選択し、図3に示すようにエージェントを実行します。

図3.エージェントが終了した時点のJavaコンソール

Apache Axisとwsdl2javaツールを使用すると、時間を大幅に節約できることが分かります。従来の方法では、Webサービスをコンシュームするには、Lotus Domino 5エージェント内のSOAPメッセージを手動でデコードする必要がありました。


上に戻る

サーバー上でのWebサービス・コンシューマー・エージェントの実行

対話用のWebサービスを使用できる便利なエージェントが作成されました。例えば、組織のイントラネットが最新の天気予報情報をサブスクライブするときに、従来のコンマ区切り値(CSV)ファイルよりも洗練された正確な方法を使用できます。高価なエンタープライズ・リソース・プランニング(ERP)システムに付属していたWebサービスの使用を開始することもできます。

サーバー上でこのエージェントを実行するために、追加のステップは必要ありません。「エージェントのプロパティ」ボックス内のエージェントの「実行時セキュリティレベルの設定」プロパティーが「2.制限された操作を許可する」に設定されていること、および署名者が適切なアクセス権を持っていることを確認してください。

以前に説明した必要となるJARファイルをLotus Dominoサーバー上の.\jvm\lib\extパスにコピーするだけで終了です。ただし、エージェントを実行する同じサーバー上でDomino Webサービスを呼び出した場合には、デッドロックが発生する可能性があることに注意してください。


上に戻る

まとめ

この記事では、WebサービスをコンシュームするDominoエージェントを作成するためのステップについて説明しました。Apache Axisフレームワークを利用すると、時間を大幅に節約でき、重要なビジネス上の課題に集中して取り組むことができます。Apache Axisは以前から使用されていて、その安定性と信頼性は実証済みです。このようなサード・パーティー・ツールを使用すると、システムの脆弱性が高まりますが、そのリスクは小さいものであり、適切に構築されたSOAが組織にもたらす利点とは比べものになりません。


上に戻る

ダウンロード

説明 ファイル名 サイズ ダウンロード方法
Sample consuming Web service WebserviceConsumer.zip 44 KB HTTP(US)
A simple but complete Web service for testing MyWebService.zip 29 KB HTTP(US)
ダウンロード方法について(US) Adobe® Reader®が必要

上に戻る

リソース

学ぶ
製品と技術情報を入手する
議論する
上に戻る

筆者について(原文のまま)

Joachim Dagerot is a system architect and technical lead for Strand Interconnect. He has been involved in worldwide intranets that serve more than 130 million users. These days, he primarily focuses on Web development, with particular interest in accessibility and standard compliance. In his spare time, he develops Web services and blogs at domino.dagerot.com. You can reach Joachim at jd@dagerot.com.



上に戻る


上に戻る