< 前へ | 次へ >

演習 6: バンドル内の依存関係注入の追加

依存関係注入によって、Bean インスタンスを作成するコードを実装しなくても、ある Bean が別の Bean にアクセスできるようになります。必要な Bean インスタンスは、ブループリント構成ファイルに含まれている情報を使用して、ブループリント・コンテナーによって作成されます。

この演習を始める前に、サーバーを停止します。「サーバー」ビュー (「ウィンドウ」 > 「ビューの表示」 > 「サーバー」) で、「WebSphere Application Server」を右クリックしてから、「停止」を選択します。
依存関係注入をバンドル内に追加するには、以下のようにします。
  1. バンドルへのサービスの追加
  2. ブループリント構成ファイルの更新
  3. 新規サービスを呼び出すサーブレットの更新
  4. アプリケーションのデプロイ

バンドルへのサービスの追加

  1. インターフェース・クラスを以下のように作成します。
    1. エンタープライズ・エクスプローラーで、「CounterServiceBundle」 > 「src」を展開します。
    2. com.ibm.ws.eba.counter」を右クリックしてから、「新規」 > 「インターフェース」を選択します。「新規 Java™ インターフェース」ウィザードが開きます。
    3. 「名前」フィールドに、Greet と入力してから、「終了」をクリックします。インターフェースがパッケージに作成され、エディターで開きます。
    4. getText() プロトタイプをインターフェースに追加します。 結果は、次のコードのようになります。
      package com.ibm.ws.eba.counter;
      
      public interface Greet {
      		public String getText();
      }
  2. 実装クラスを以下のように作成します。
    1. com.ibm.ws.eba.counter」を右クリックしてから、「新規」 > 「クラス」を選択します。「新規 Java クラス」ウィザードが開きます。
    2. 「名前」フィールドに GreetImpl と入力します。
    3. 「インターフェース」リストの横の「追加」をクリックします。「実装されたインターフェースの選択」ダイアログが開きます。
    4. 「インターフェースの選択」フィールドに、Greet と入力します。「Greet」インターフェースを選択してから、「OK」をクリックします。
    5. 「終了」をクリックします。クラスがパッケージに作成され、エディターで開きます。
    6. GreetImpl クラスを以下の実装に置換します。
      package com.ibm.ws.eba.counter;
      
      public class GreetImpl implements Greet {
      	
      	private Counter counter;
      	
      	public void setCounter(Counter c) {
      		counter = c;
      	}
      
      	@Override
      	public String getText() {
      		return counter.getCount()+" Hello";
      	}
      	
      	public void init() {
      		System.out.println("GreetImpl.init() called");
      	}
      
      }
    7. GreetImpl.java を保存します。
private 変数 counter は、依存関係注入を使用してコンテナーによって初期化される、Counter サービスのインスタンスへの参照です。これは、setCounter メソッドを使用して設定されます。

ブループリント構成ファイルの更新

ブループリント構成ファイルを構成して、Greet サービスを始動し、Counter サービスのインスタンスを注入するには、以下の手順を実行します。
  1. エンタープライズ・エクスプローラーで、「CounterServiceBundle」を右クリックし、 「OSGi」 > 「ブループリント・ファイルを開く」を選択して、エディターでブループリント・ファイルを開きます。
  2. 以下のように、コンポーネント・アセンブリーおよび構成情報をブループリント構成ファイルに追加します。
    1. エディターの「設計」タブで「ブループリント」を選択してから、「追加」 をクリックします。「項目の追加」ダイアログが開きます。
    2. Bean」をクリックして、 「OK」をクリックします。 「Bean 詳細」ダイアログが開きます。
    3. Bean を構成します:
      1. 「Bean ID」フィールドに GreetBean と入力します。
      2. 「クラス」フィールドで、「参照」をクリックします。「型の選択」ダイアログが開きます。「型名の選択」フィールドに GreetImpl と入力してから、「GreetImpl」クラスを選択します。「OK」をクリックします。
      3. 「OK」をクリックして変更を受け入れ、ダイアログを閉じます。
      4. エディターで、「初期化メソッド」フィールドに init と入力します。
      Bean がブループリント・ファイルに追加されました。
    4. 「概要」セクションで、「GreetBean (Bean)」をクリックしてから、「追加」をクリックします。「項目の追加」ダイアログが開きます。
    5. プロパティー」をクリックして、「OK」をクリックします。
    6. プロパティーを以下のように構成します。
      • 「名前」フィールドに、counter と入力します。
      • 「参照」フィールドで「参照」をクリックします。「参照選択」ダイアログが開きます。「Bean: CounterBean」をクリックして、「OK」をクリックします。
    7. 「概要」セクションで、「ブループリント」をクリックして、「追加」をクリックします。
    8. サービス」をクリックして、 「OK」をクリックします。 「サービスの詳細」ダイアログが開きます。
    9. サービスを構成します:
      1. 「サービス・インターフェース」フィールドで、「参照」をクリックして「Greet」インターフェースを選択します。
      2. 「Bean 参照」フィールドで、「参照」をクリックしてから、「Bean: GreetBean」を選択します。「OK」をクリックします。
      3. 「OK」をクリックして変更を受け入れ、ダイアログを閉じます。
      サービスが構成に追加されました。
  3. ファイルを保存します。

新規サービスを呼び出すサーブレットの更新

  1. エンタープライズ・エクスプローラーで、「CounterWebBundle」 > 「Java リソース」 > 「src」 > 「com.ibm.ws.eba.servlet」を展開します。
  2. CounterServlet.java」をダブルクリックしてエディターで開きます。
  3. doGet() メソッドを探して、以下の実装に置換します。
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		Greet greet;
    		try {
    			InitialContext ic = new InitialContext();
    			greet = (Greet) ic.lookup("osgi:service/"+Greet.class.getName());
    			response.getOutputStream().println("greet.getText()="+greet.getText());
    		} catch (NamingException e) {
    			e.printStackTrace(System.out);
    		}
    	}
  4. メインメニューで、「ソース」 > 「インポートの編成」をクリックします。import ステートメントが更新されます。
  5. CounterServlet.java を保存します。

アプリケーションのデプロイ

  1. エンタープライズ・エクスプローラーで、「CounterWebBundle」 > 「CounterWebBundle」 > 「サーブレット」を展開します。
  2. CounterServlet」を右クリックして、「実行」 > 「サーバーで実行」を選択します。「サーバーで実行」ダイアログが開きます。
  3. 「終了」をクリックします。

ストリング greet.getText()=0 Hello が ブラウザーで表示されます。ページが再ロードされるたびに、値が増加します。

「コンソール」ビューに切り替えて (「ウィンドウ」 > 「ビューの表示」 > 「コンソール」)、サーバーからの出力を表示します。正常な結果の場合、ブループリント・ファイルにある CounterImpl および GreetImpl bean の初期化メソッド入り口に基づいて、以下のように CounterImpl.init() および GreetImpl.init() からの出力が表示されます。
[3/30/10 16:59:41:734 EDT] 00000072 StepStartBLA  A   CWWMH0300I: Starting business-level application "WebSphere:blaname=CounterApp".
[3/30/10 16:59:42:406 EDT] 00000072 webapp        I com.ibm.ws.webcontainer.webapp.WebGroupImpl WebGroup SRVE0169I: Loading Web Module: CounterWebBundle.
[3/30/10 16:59:42:453 EDT] 00000072 WASSessionCor I SessionContextRegistry getSessionContext SESN0176I: Will create a new session context for application key default_hostCounterWebBundle
[3/30/10 16:59:42:468 EDT] 00000072 webcontainer  I com.ibm.ws.wswebcontainer.VirtualHost addWebApplication SRVE0250I: Web Module CounterWebBundle has been bound to default_host[*:9083,*:80,*:9446,*:5067,*:5066,*:443].
[3/30/10 16:59:42:468 EDT] 00000072 FileLocatorIm E   CWPST0164E: The CounterWebBundle composition unit is not found.
[3/30/10 16:59:42:500 EDT] 00000072 StepStartBLA  A   CWWMH0196I: Business-level application "WebSphere:blaname=CounterApp" was started successfully.
[3/30/10 16:59:42:500 EDT] 00000016 SystemOut     O CounterImpl.init() called
[3/30/10 16:59:42:500 EDT] 00000016 SystemOut     O GreetImpl.init() called
注: CounterImpl.init() および GreetImpl.init() からの出力がコンソール出力に表示されない場合、アプリケーションのデプロイメントまたは始動中のエラー・メッセージがないかどうか出力を調べてから、Bean およびサービス定義に何らかのエラーがないかどうかブループリント・ファイルを調べます。

演習のチェックポイント

ブループリント依存関係注入を使用して、ある Bean が別の Bean のサービスを使用できるようにする方法を学習しました。

この演習では、以下のトピックについて学習しました。
  • 別の Bean を使用する Bean のコードを作成する方法。
  • 依存関係注入を使用して変数を初期化するようブループリント・コンテナーに指示する、ブループリント構成ファイルのプロパティーを定義する方法。
< 前へ | 次へ >
トピックのタイプを示すアイコン チュートリアルの演習のトピック
インフォメーション・センターのご利用条件 | フィードバック

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

ファイル名: counter_lesson7.html