IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  Lotus  >

IBM Lotus ExpeditorのWebサービスとしてOSGiサービスを開発する

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません

原文はこちら

原文はこちら


レベル: 中級

John Hsu (johnhsu@tw.ibm.com), Software engineer, IBM

2006年 11月 28日

IBM Lotus Expeditor ToolkitおよびIBM Rational Application Developer V6を使用して、IBM Lotus Expeditorで実行されるOSGiサービスをWebサービスとしてプログラマチックに公開する方法を理解しましょう。また、この記事では、IBM Lotus Expeditorランタイムを使用して、サービスをデプロイおよびテストする方法についても解説します。

IBM Lotus Expeditor (以前のIBM WebSphere Everyplace Deployment) は、接続、独立した配布、およびアプリケーションとサービスの管理を可能にするクライアント・ミドルウェア・フレームワークおよびツール用のプラットフォームです。IBM Lotus ExpeditorはOpen Service Gateway initiative (OSGi)フレームワーク上に構築され、WebサービスおよびEnterprise JavaBean (EJB)などのJ2EEサービスをクライアントに提供するため、ユーザーはアプリケーションの主要コンポーネントをクライアントに移動できます。また、IBM Lotus Expeditorによって、ほとんどのビジネス・アプリケーションがローカルで実行できるため、モバイル・ユーザーはネットワーク接続がない状態でもアプリケーションを使い続けられ、ネットワーク接続が利用可能になったときに、サーバーと同期することができます。

IBM Lotus ExpeditorはJSR 172: J2ME Webサービス仕様にしたがってWebサービスをサポートしますが、JSR 172仕様以外の機能も提供します。このような機能の1つとして、OSGiサービスをWebサービスにマッピングする(および、この逆にマッピングする)、IBM WebSphere Web Services Gatewayがあります。このため、Java APIs for XML-based Remote Procedure Call (JAX-RPC)を使用することにより、IBM Lotus Expeditorの外部で実行されているアプリケーションも、IBM Lotus Expeditor上で実行されているOSGiサービスを呼び出すことができます。

IBM Lotus Expeditorは、ユーザーがリッチ・クライアント・ユーザー・インターフェースを介して自身のOSGiサービスをWebサービスとして公開することを補助するWeb Services Gateway Utilityを提供します。しかし、これは一部の状況で不便なことがあります。たとえば、1つのアプリケーションを開発して多数のクライアントに配布するときは、各ユーザーに対し、Web Services Gateway Utilityを開いてサービスを手動で公開するよう依頼することは望ましくありません。むしろ、これはプログラマチックに行う方がよいでしょう。この記事では、簡単なOSGiサービス・バンドルを開発し、IBM Lotus Expeditorによって提供される開発ツールキットを介して、それをWebサービスとして公開する方法について説明します。

前提条件

この記事を最大限に活用するには、Java、J2EE、Webサービス、OSGiフレームワーク、およびIBM Rational Application Developer V6 for WebSphere Software(US) またはEclipse 3.x(US)を使用したプラグイン開発に習熟している必要があります。以下で説明されている手順を実行する前に、IBM Lotus Expeditor Toolkit V6.1とともに、IBM Rational Application Developer V6またはEclipse 3.2のいずれかをインストールしなければなりません。また、IBM Lotus Expeditor Clientのインストールも必要です。

Eclipse 3.x(US)

developerWorksから、トライアル版のIBM Rational Application Developer V6.0 (US)をダウンロードできます。

この記事では、次のタスクを実行します。

  • OSGiサービスを登録するClient Servicesプロジェクトを作成する。
  • OSGiサービスをWebサービスとして公開する。
  • Client Servicesプロジェクトをデプロイする。
  • デプロイしたWebサービスをテストする。



上に戻る


OSGiサービスを登録するClient Servicesプロジェクトの作成

まず、Webサービスとして公開できるOSGiサービスを作成することから始めましょう。IBM Lotus Expeditor Toolkitでは、これはClient Serviceプロジェクトを作成することによって行います。この記事は、Rational Application DeveloperおよびIBM Lotus Expeditor Toolkitがすでにインストールされているものとして説明を進めます。このツールキットは、Rational Application Developer環境を拡張し、OSGiベースおよびEclipseベースのアプリケーションの構築を可能にします。

次の手順ではRational Application DeveloperでOSGiサービスを作成しますが、IBM Lotus Expeditor Toolkitがインストールされている場合は、Eclipseでも同じことを実行できます。

  1. 1. Rational Application Developerで、「ウィンドウ」->「パースペクティブを開く」->「プラグイン開発」を選択し、「プラグイン開発」パースペクティブに切り替えます。
  2. 「ファイル」->「新規」->「プロジェクト」を選択します。
  3. 「新規プロジェクト(New Project)」ウィザードで、「Client ServicesProject」を選択し、「次へ(Next)」をクリックします(図1参照)。



    図1. 「新規プロジェクト」ウィザード


  4. 「Client ServiceProject」パネルで、「プロジェクト名」フィールドに「WSGateway」と入力し、「次へ」をクリックします。
  5. ウィザードの次のパネルで、デフォルト設定を受け入れ、「完了」をクリックします。
  6. Client Serviceプロジェクトが作成された後、「ファイル」->「新規」->「インターフェース」を選択し、インターフェース名「OSGiService」およびパッケージ名「wsgateway」を入力します。Rational Application Developerによって、パブリック・インターフェースOSGiServiceが作成されます。インターフェースのコードをリスト1に示します。getResultメソッドはテスト・メソッドです。ここでは、OSGiサービスを開発し、Webサービスとして公開するため、どちらのサービスにも、他からの呼び出しを受けるパブリック・メソッドが少なくとも1つ必要です。


    リスト1. OSGiServiceインターフェース
    package wsgateway;
    
    public interface OSGiService {
    public String getResult();
    }
                        

  7. 次に、「ファイル」->「新規」->「クラス」を選択し、クラス「OSGiServiceImpl」およびパッケージ名「wsgateway」を入力します。OSGiサービスまたはWebサービスを作成するとき、一般的な手法として、1つのインターフェースと1つのインプリメンテーション・クラスを作成します。これはコードをより柔軟にするためのベスト・プラクティスですが、必須ではありません。1つのクラスを作成し、これをOSGiサービスとして、およびWebサービスとして登録することもできます。この方法は、IBM Lotus Expeditor Toolkitでは禁止されていませんが、推奨される方法ではありません。インプリメンテーション・クラスをリスト2に示します。


    リスト2. OSGiServiceImplクラス
    package wsgateway;
    
    public class OSGiServiceImpl implements OSGiService {
    	public String getResult() {
    		return "This is OSGiServiceImpl";
    	}
    }
    

  8. リスト3のコードをActivator.javaのstart()に追加します。このコードは、OSGiフレームワーク用にOSGiServiceを登録します。



    リスト3. Activator.java
    public void start(BundleContext context) throws Exception {
    	super.start(context);
         Hashtable properties = new Hashtable(7);
     
    properties.put(Constants.SERVICE_PID, wsgateway.OSGiService.class.getName());
    
    context.registerService(wsgateway.OSGiService.class.getName(),
    new OSGiServiceImpl(),_
    properties);
    	}
    

  9. 完了したら、このClient Servicesプロジェクトを実行し、サービスをOSGiフレームワークに登録できるかどうか確認します。Rational Application Developerで、「実行」->「実行」を選択します。
  10. 「実行」ダイアログ・ボックスで、「Client Services」を選択し、「新規」をクリックします。
  11. 「プラグイン(Plug-ins)」タブを選択し、「ワークスペース・プラグイン(Workspace Plug-ins)」の選択を解除し、「WSGateway」を選択します(図2参照)。
  12. 「必須プラグインの追加」ボタンをクリックし、「実行」をクリックします。

    図2. 「実行」ダイアログ・ボックスの「プラグイン」タブ


  13. 「コンソール(Console)」タブを選択し、「ss」と入力し、WSGatewayのバンドル番号を見つけます(図3参照)。

    図3. コンソール


  14. WSGatewayのバンドル番号を見つけた後、コンソールで「start xxx」と入力します。xxxはWSGatewayのバンドル番号です。
  15. 次に、コンソールで「s」と入力し、wsgateway.OSGiServiceがOSGiフレームワークに登録されていることを確認します(図4参照)。

    図4. wsgateway.OSGiServiceが表示されたコンソール





上に戻る


WebサービスとしてのOSGiサービスの公開

OSGiサービスを作成し、これをOSGiフレームワークに正しく登録した後は、OSGiサービスをWebサービスとして公開できます。リスト4に示したコードをActivator.javaのstart()メソッドに追加します。

リスト4. Activator.java

public void start(BundleContext context) throws Exception {
	super.start(context);
     Hashtable properties = new Hashtable(7);
     WebServiceProvider provider;
		
String providerName = "com.ibm.pvcws.osgi.proxy.WebServiceProvider";
ServiceReference ref = context.getServiceReference(providerName);
provider = (ref == null) ? null : (WebServiceProvider)context.getService(ref);

properties.put(Constants.SERVICE_PID, wsgateway.OSGiService.class.getName());

context.registerService( wsgateway.OSGiService.class.getName(), new OSGiServiceImpl(),_
properties);

/*	provider.exportPid(wsgateway.OSGiService.class.getName());

System.out.println(wsgateway.OSGiService.class.getName() + " exposed as a Web Service at_
http://localhost:8777/ws/pid/" + wsgateway.OSGiService.class.getName());*/
		
ref = context.getServiceReference (wsgateway.OSGiService.class.getName());
	String sid = ref.getProperty("service.id").toString();
	provider.exportSid(sid);
	System.out.println(wsgateway.OSGiService.class.getName() + " 
exposed as Web Service at http://localhost:8777/ws/sid/" + sid);
}

OSGiサービスをWebサービスとして公開するには、サービスsidとpidの2とおりの方法があります。前のリストで太字で示した部分は、両方の方法に共通するコードです。「ref = context.getServiceReference (wsgateway.OSGiService.class.getName());」で始まる最後の行はsid方式のコードです。コメントになっているコードがpid方式のコードです。

com.ibm.pvcws.service.WebServiceProviderをActivator.javaにインポートし、META-INFフォルダーでMANIFEST.MFを開きます。次に、「依存関係(Dependencies)」タブに切り替えます(図5参照)。


図5. 「依存関係(Dependencies)」タブ

「必須プラグイン」セクションで、「追加」ボタンをクリックします。「プラグイン選択」ボックスの「プラグインの選択」フィールドに「com.ibm.pvcws.osgi」と入力し、「OK」をクリックします。




上に戻る


Client Servicesプロジェクトのデプロイ

これまでに、必要なコードを追加し、OSGi サービスをWebサービスにするための構成を行ってきました。ここでは、Client ServicesプロジェクトをIBM Lotus Expeditorランタイムにデプロイします。java.exeとともに実行する一般的なJ2SEアプリケーションと異なり、ほとんどのJ2EEアプリケーションはJ2EEアプリケーション・サーバーにデプロイする必要があります。この記事では、アプリケーションをIBM Lotus Expeditorランタイムにデプロイします。このランタイムは、J2EEアプリケーション・サーバー機能の一部を提供します。

次の手順にしたがって、Client Servicesプロジェクトをデプロイします。

  1. 前の「OSGiサービスを登録するClient Servicesプロジェクトの作成」セクションの手順9から13を繰り返します(ただし、構成はすでに実行済みなので、手順10はスキップします)。手順11で、「引数(Arguments)」タブを選択し、「-Dcom.ibm.pvc.webcontainer.port=0」を「8777」に変更します(図6参照)。


    図6. 「引数Arguments」タブ


  2. コンソールで、com.ibm.pvcws.osgiおよびorg.eclipse.equinox.httpを見つけ、これらを開始します。
  3. もう一度コンソールで、WSGatewayを見つけて開始します。
  4. Webブラウザーを開き、コンソールに表示されたURLを入力します。成功すると、Webサービス記述言語(WSDL)が表示されます(図7参照)。

    図7. Webブラウザーに表示されたWSDL





上に戻る


デプロイしたWebサービスのテスト

これで、Webサービスをデプロイすることができました。正しくデプロイされているか、確認してみましょう。IBM Lotus Expeditor Toolkitには、それを行うための簡単な機能があります。WSDLファイルが存在する限り、IBM Lotus Expeditor Toolkitはそれを解析し、JSR 172にしたがって必要なスタブ・コードを生成できます。これらのスタブを使用して、Webサービスをテストできます。

次の手順にしたがって、デプロイされたWebサービスをテストします。

  1. 前の「OSGiサービスを登録するClient Servicesプロジェクトの作成」セクションの手順1から5を繰り返し、WSGatewayClientというプロジェクト名を持つ別のClient Servicesプロジェクトを作成します。
  2. 「ファイル」->「新規」->「その他」を選択します。
  3. 「Client Services」->「モバイルWebサービス」->「モバイルWebサービス・クライアント」を選択し、「次へ」をクリックします(図8参照)。


    図8. 「新規」ウィザード


  4. 「モバイルWebサービス・クライアント」ダイアログ・ボックスのフィールドに、次の値を入力します(図9参照)。
    • ソース・フォルダー:/WSGatewayClient/src
    • パッケージ: wsgatewayclient
    • WSDLのロケーション: http://localhost:8777/ws/pid/wsgateway.OSGiService


    図9. 「モバイルWebサービス・クライアント」ダイアログ・ボックス


  5. 「次へ」をクリックし、「完了」をクリックします。
  6. WSGatewayClientにあるActivator.javaのconsumeService()で、リスト5のコードを追加します。このコードは、IBM Lotus Expeditor Toolkitによって生成されたスタブを呼び出します。


    リスト5. consumeService()
    private void consumeService() throws Exception {
    wsgatewayclient.OSGiServiceSoap_Stub stub = new wsgatewayclient.OSGiServiceSoap_Stub
    ();
    		System.out.println(stub.getResult());
    	}
    

  7. WSGatewayサービスがpid方式を使用してWebサービスを公開していることを確認します。sidを使用する場合は、クライアントを作成するときに、WSDL URL内のsid番号が正しくなければなりません。プログラムの引数として「-clean」を追加すると、この番号が変わる可能性があるからです。
  8. 前のセクションで起動したIBM Lotus Expeditorランタイムを停止します。次に、「プロジェクトのデプロイ」セクションの手順1から3を繰り返し、IBM Lotus Expeditorランタイムを再び実行します。ただし、手順1ではWSGatewayおよびWSGatewayClientを選択します。
  9. 「ss」と入力し、WSGatewayClientのバンドルIDを見つけ、これを開始します。出力された結果がコンソール・タブに表示されます(図10参照)。

    図10. コンソール





上に戻る


まとめ

この記事では、IBM Rational Application DeveloperにインストールされたIBM Lotus Expeditor Toolkitを使用して、IBM Lotus ExpeditorでWebサービスとして実行されるOSGiサービスをプログラマチックに公開する方法を解説しました。同じ作業を個々のクライアント上でGUIツールを使用して行うこともできますが、大量のインストールを実行するとき、または多数のクライアントでこの種のサービスを自動的に更新するときは、プログラマチックに行うと効率が大幅に向上します。また、この機能は、IBM Lotus Expeditorで実行されている各サービスをWebサービスとして公開し、IBM Lotus Expeditorの外部から呼び出せるようにするときも役立ちます。これは、IBM Lotus Expeditorが他のアプリケーションとの良好な相互運用性を提供することを意味し、サービス指向アーキテクチャー(SOA)のソリューションを構築する上で、IBM Lotus Expeditorが優れたフレームワークとなることを示します。



参考文献



著者について

John Hsuは台湾(台北)にあるIBM China Software Development Labのソフトウェア技術者です。 Johnは、ソフトウェア開発と実験の経験があり、現在はIBM Lotus Expeditorの開発に取り組んでいます。




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



 


 


不充分・不完全である大変素晴らしい
 


この記事を共有する

del.icio.us del.icio.us newsing newsing FC2ブックマーク FC2ブックマーク
Choix! Choix! ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
MM/memo MM/memo CZブックマーク CZブックマーク livedoorクリップ livedoorクリップ
はてなブックマーク はてなブックマーク Buzzurl(バザール) Buzzurl(バザール)




上に戻る


    日本IBMについて プライバシー お問い合わせ