< 前へ | 次へ >

演習 4: OSGi サービスにアクセスするサーブレットの作成

この演習では、カウンター・サービスにアクセスしてサービスの結果を表示するサーブレットが入った、Web 可能バンドルを作成します。このサーブレットは、JNDI InitialContext を介してサービスを検索することによって、OSGi サービスにアクセスします。

OSGi サービスにアクセスするサーブレットを作成するには、以下のようにします。
  1. Web 可能バンドルの作成.
  2. サーブレットの作成.
  3. バンドル・マニフェストへの必要なパッケージの追加.
  4. OSGi サービスを検索する実装の作成.

Web 可能バンドルの作成

サーブレットを含む Web 可能バンドルを作成するには、以下のようにします。
  1. 「ファイル」 > 「新規」 > 「その他」をクリックして、OSGi を展開します。
  2. OSGi バンドル・プロジェクト」をクリックして、「次へ」をクリックします。 「新しい OSGi バンドル・プロジェクト」が開きます。
  3. 「プロジェクト名」フィールドに CounterWebBundle と入力します。
  4. 「ターゲット・ランタイム」リストから以下のいずれかのサーバーを選択します。
    • WebSphere Application Server v7.0
    • WebSphere Application Server v8.0
    • WebSphere Application Server v8.5
    • WebSphere Application Server V8.5 Liberty Profile
  5. 「構成」セクションで、「Web サポートの追加」をクリックし、「Web 2.5」を Web サポート・リストから選択します。
  6. CounterApp が「アプリケーション・プロジェクト」フィールドに表示されることを確認し、「終了」をクリックします。

サーブレットの作成

カウンター・サービスにアクセスするサーブレットを作成するには、以下のようにします。
  1. エンタープライズ・エクスプローラーで、「CounterWebBundle」を右クリックしてから、「新規」 > 「サーブレット」を選択します。「サーブレットの作成」ウィザードが開きます。
  2. 「Java パッケージ」フィールドに com.ibm.ws.eba.servlet と入力します。
  3. 「クラス名」フィールドに、CounterServlet と入力してから、「終了」をクリックします。 サーブレットがバンドルに作成され、エディターで開きます。

バンドル・マニフェストへの必要なパッケージの追加

必要なパッケージをバンドル・マニフェストに追加するには、以下のようにします。
  1. Manifest: CounterWebBundle」をダブルクリックして、それをエディターで開きます。
  2. 「従属関係」タブに切り替えます。
  3. 「インポートするパッケージ」セクションで、「追加」をクリックします。 「パッケージ選択」ダイアログが開きます。
  4. 「エクスポートするパッケージ」フィールドで、com.ibm.ws.eba.counter と入力します。
  5. リストから com.ibm.ws.eba.counter を選択してから、「OK」をクリックします。 「インポートするパッケージ」セクションは、次の図のようになります。
    インポートするパッケージ
    注: ターゲット・ランタイム・サーバーが WebSphere Application Server V8.5 Liberty Profile の場合、javax.naming パッケージもインポートする必要があります。javax.naming パッケージ をインポートすることによって、アプリケーション実行時の ClassNotFoundException エラーを防止できます。javax.naming パッケージをインポートするには、以下の手順を実行します。
    1. 「インポートするパッケージ」セクションで、「追加」をクリックします。 「パッケージ選択」ダイアログが開きます。
    2. 「エクスポートするパッケージ」フィールドに javax.naming と入力します。
    3. リストから javax.naming を選択して、「OK」をクリックします。
    このパッケージをインポートしないと、Liberty Profile を使用する WebSphere Application Server 上でアプリケーションを実行したときに ClassNotFoundException エラーが発生します。アプリケーションは、欠落しているクラスがあるパッケージはユーザー・パッケージとして提供されるわけでなく、サーバー・ランタイムによって提供されることを想定しているため、このエラーが発生します。
  6. バンドル・マニフェスト・ファイルを保存します。

OSGi サービスを検索する実装の作成

InitialContext を使用して OSGi サービスを検索する doGet() メソッドの実装を作成するには、以下の手順を実行します。
  1. エンタープライズ・エクスプローラーで、「CounterServlet.java」をダブルクリックしてエディターで開きます。
  2. doGet() メソッドを探して、以下の実装を追加します。
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		Counter counter;
    		try {
    			InitialContext ic = new InitialContext();
    			counter = (Counter) ic.lookup("osgi:service/"+Counter.class.getName());
    			response.getOutputStream().println("counter="+counter.getCount());
    		}
    		catch (NamingException e) {
    			e.printStackTrace(System.out);
    		}
    	}
  3. メインメニューで、「ソース」 > 「インポートの編成」をクリックします。「インポートの編成」ダイアログが開きます。
  4. com.ibm.ws.eba.counter.Counter」を選択してから、「終了」をクリックします。
  5. CounterServlet.java を保存します。
サーブレット・コードは、以下のようになります。
package com.ibm.ws.eba.servlet;

import java.io.IOException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ibm.ws.eba.counter.Counter;

/**
 * Servlet implementation class CounterServlet
 */
public class CounterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * Default constructor. 
     */
    public CounterServlet() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Counter counter;
		try {
			InitialContext ic = new InitialContext();
			counter = (Counter) ic.lookup("osgi:service/"+Counter.class.getName());
			response.getOutputStream().println("counter="+counter.getCount());
		}
		catch (NamingException e) {
			e.printStackTrace(System.out);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

演習のチェックポイント

JNDI InitialContext を介してサービスを検索することによって OSGi サービスにアクセスするサーブレットを作成しました。

この演習では、以下のトピックについて学習しました。
  • Web 可能 OSGi バンドルの作成方法。
  • サーブレットの作成方法。
  • 「インポートするパッケージ」を使用したバンドル従属関係のインポート方法。
  • InitialContext を使用した OSGi サービスの検索方法。
< 前へ | 次へ >
トピックのタイプを示すアイコン チュートリアルの演習のトピック
インフォメーション・センターのご利用条件 | フィードバック

タイム・スタンプ・アイコン 最終更新: May 29, 2014 10:20

ファイル名: counter_lesson4.html