前 次 前/次ボタンと目次ボタンとの区切り線

チュートリアル : タイマー コントロールを使用した Web サービスの作成

この短いチュートリアルでは、タイマー コントロールを使用して Web サービスを作成およびテストします。このチュートリアルは高度な内容を含んでおり、Workshop for WebLogic の基本について理解していることが前提となっています。ワークスペース、プロジェクト、およびパッケージを作成する方法、テスト クライアントを使用して Web サービスを実行したりオペレーションをテストしたりする方法などを理解している必要があります。Workshop for WebLogic を操作するのが初めての方は、このチュートリアルを読む前に「チュートリアル : 入門」および「チュートリアル : Web サービス」をお読みになることをお勧めします。

注意 : このチュートリアルでは、新しいワークスペースを作成する必要があります。ワークスペースを既に開いている場合、IDE が再起動されます。開始する前に、この再起動による中断を回避するため、スタンドアロン モードでヘルプを起動し、このトピックを新しいブラウザで指定しておくことをお勧めします。詳細については、「スタンドアロン モードでのヘルプの使用」を参照してください。

この手順のタスクは次のとおりです。

このチュートリアルでは、クライアントの Web サービスを 2 秒ごとにコールバックするタイマー コントロール (com.bea.control.TimerControl 基本クラスのインスタンス) の宣言とインスタンス化を行う Web サービスを作成します。この例では、以下の 2 つの Web サービス オペレーション (Web メソッド) を使用します。

コールバックを受信すると、サンプル プログラムによってコンソール ウィンドウにテキストが表示されるだけです。通常は、プログラムのロジックがコールバックのルーチン内に挿入されていて、適切なアクションを実行します。

Web サービスを作成する

タイマー コントロールは会話形式の (ステートレスではない) Web サービス内でのみ作成できます。このチュートリアルでの Web サービスの作成手順は、以下のとおりです。

  1. Workshop for WebLogic を起動して、空のワークスペースを新しく作成します。
  2. [ファイル|新規|プロジェクト|J2EE|エンタープライズ アプリケーション プロジェクト] を選択して EAR プロジェクトを作成します。
  3. 新しいドメインとサーバを定義します
  4. [ファイル|新規|プロジェクト] をクリックします。[Web サービス] を展開し、[Web サービス プロジェクト] をクリックします。プロジェクト名を指定します。[Add project to an EAR] をクリックして、プルダウンから EAR プロジェクトを選択します。[完了] をクリックします。 
  5. 左側の [パッケージ・エクスプローラ] ビューにある Web サービス プロジェクトの src フォルダを右クリックし、[新規作成|パッケージ] をクリックして、Web サービス用のパッケージを作成します。パッケージ名を指定して、[終了] をクリックします。
  6. [パッケージ・エクスプローラ] ビューのパッケージを右クリックし、[新規作成|WebLogic Web サービス] をクリックして、パッケージ内に Web サービスを作成します。Web サービス名を指定して、[終了] をクリックします。
  7. 新しい Web サービス内に自動的に作成される標準の hello() メソッドを削除します。
    @WebMethod
    public void hello() {
    }

Web サービスとタイマー コントロール アノテーションを設定する

この時点で、Web サービスを格納したパッケージを含むプロジェクトが存在しています。エディタのペインには、Web サービスのソース .java ファイルが表示されているはずです。

会話形式の Web サービスは java.io.Serializable インタフェースを実装する必要があります。このインタフェースを Web サービスに設定するには、次の手順に従います。

  1. Web サービスのクラス定義の行に、以下のように implements Serializable を挿入します。
    public class TimerService implements Serializable {

    クラス宣言行のマーカー バーにエラー マーカーが表示されます。エラー マーカーを右クリックして、[クイック フィックス] を選択します。

  2. [クイック フィックス] プルダウンが表示されます。

    [Serializable をインポートします] をクリックして〔Enter〕を押すと、新しい import 行が生成されてエラーが解決します。

タイマー コントロールを生成するには、次の手順に従います。

  1. エディタのペインを右クリックして、[挿入|コントロール] をクリックします。[新しいシステム コントロール] で [タイマー コントロール] をクリックし、[OK] をクリックします。クラスの本体にコントロール宣言が挿入されます。その際、名前 (timerControl) が強調表示されます。
    @Control
    private TimerControl timerControl;

    右側の [アノテーション] ビューに TimerControl アノテーションのプロパティが表示されます。
  2. [repeatsEverySeconds] プロパティの横の [] カラムをクリックします。

    2 を入力して〔Enter〕キーを押します。コード エディタ ウィンドウのコントロールのアノテーションが以下のように更新されます。

    	@TimerControl.TimerSettings(repeatsEverySeconds=2)
    	@Control
    	private TimerControl timerControl;
    

    また、[アノテーション] ビューに新しいプロパティ値が表示されます。

2 秒ごとに Web サービスをコールバックする timerControl というタイマー コントロールが作成されました。次に、2 つの Web メソッド (タイマー コントロールを開始するメソッドと停止するメソッド) を定義します。

タイマーを開始する Web メソッドを定義するには、次の手順に従います。

  1. エディタ ペインで右クリックし、[挿入|Web メソッド] を選択します。エディタ内に新しいオペレーション (Web メソッド) が作成されます。その際、メソッドの名前 (newWebMethod1) が強調表示され、右側の [アノテーション] ビューに Web メソッドのプロパティが表示されます。
  2. [Conversation|value] の横の [] カラムをクリックします。プルダウンから [START] を選択します。

  3. Web メソッドの名前を newWebMethod1 から start に変更します。
  4. タイマー開始のメソッドを呼び出すため、メソッド本体の //TODO スタブを以下のように置き換えます。

    timerControl.start();
    System.out.println("**************");
    System.out.println("Timer started");
    System.out.println("**************"); 

    Web メソッドは以下のようになります。

    @Conversation(value=Conversation.Phase.START)
    @WebMethod
    public void start()
    {
       timerControl.start();
       System.out.println("**************");
       System.out.println("Timer started");
       System.out.println("**************");
    }

タイマーを停止する Web メソッドを定義するには、次の手順に従います。

  1. 上記と同様の手順で、Web メソッドを挿入します。
  2. [対話型] プロパティを [FINISH] に設定します。

  3. Web メソッドの名前を newWebMethod2 から stop に変更し、文字列を戻り値に設定します。
  4. タイマー停止のメソッドを呼び出すため、メソッド本体の //TODO スタブを以下のように置き換えます。

    timerControl.stop();
    System.out.println("**************");
    System.out.println("Timer stopped");
    System.out.println("**************");
    return "ok";

    Web メソッドは以下のようになります。

    @Conversation(value=Conversation.Phase.FINISH)
    @WebMethod
    public String stop()
    {
       timerControl.stop();
       System.out.println("**************");
       System.out.println("Timer stopped");
       System.out.println("**************");
       return "ok";
    }

タイマー コントロールのタイマー期限切れの通知に反応するイベント ハンドラを定義するには、次の手順に従います。

  1. エディタを右クリックして、[挿入コントロールのイベント ハンドラ] を選択します。

    [イベント ハンドラの挿入] ダイアログで、[timerControl] をクリックして [OK] をクリックします。
  2. 以下の行をイベント ハンドラの本体に挿入します。
    System.out.println("***********************************");
    System.out.println("Callback received from timer firing");
    System.out.println("***********************************");
    

    イベント ハンドラは以下のようになります。

    @EventHandler(field="timerControl", eventSet=TimerControl.Callback.class, eventName="onTimeout")        
    protected void timerControl_Callback_onTimeout(long p0, Serializable p1) {
    {    System.out.println("***********************************");    System.out.println("Callback received from timer firing");    System.out.println("***********************************"); }
  3. [ファイル|すべて保存] コマンドで変更をすべて保存します。

ここまでで、以下の内容を含む Web サービスが作成されました。

Web サービスのソースは、以下のようになっているはずです。

package timer;

import java.io.Serializable;

import javax.jws.*;
import org.apache.beehive.controls.api.bean.Control;
import com.bea.control.TimerControl;
import weblogic.jws.Conversation;
import org.apache.beehive.controls.api.events.EventHandler;

@WebService
public class TimerService implements Serializable{
	
  @Control
  @TimerControl.TimerSettings(repeatsEverySeconds=2)
  private TimerControl timerControl;


  @WebMethod
  @Conversation(value=Conversation.Phase.START)
  public void start() {
		timerControl.start();
		System.out.println("**************");
		System.out.println("Timer started");
		System.out.println("**************"); 
  }

  @WebMethod
  @Conversation(value=Conversation.Phase.FINISH)
  public String stop() {
		timerControl.stop();
		System.out.println("**************");
		System.out.println("Timer stopped");
		System.out.println("**************");
		return "ok";
  }

  @EventHandler(field = "timerControl", eventSet = TimerControl.Callback.class, eventName = "onTimeout")
  protected void timerControl_Callback_onTimeout(long p0, Serializable p1) {
		System.out.println("***********************************");
		System.out.println("Callback received from timer firing");
		System.out.println("***********************************");
	 }
}

Web サービスとタイマー コントロールをテストする

Web サービスとタイマー コントロールをテストするには、次の手順に従います。

  1. エディタのペインを右クリックして、[実行|サーバで実行] を選択します。WebLogic のテスト クライアントがエディタ ウィンドウのタブ内で実行されます。

    以下に、操作上のポイントをまとめます。

    • Web サービスは会話形式であるため、開始中のオペレーションのみ実行可能。テスト クライアントでは、ウィンドウの上部に「Available operations for current conversation phase」という文字列が表示されます。
    • 左上のリンク ([Message Log と Clear Log] ボタンの上) から、新しい会話を開始することができます。
  2. [start] ボタンをクリックして、start オペレーションを呼び出します。start オペレーションから返された結果が表示されます。

  3. 開始内容とコールバックの結果を確認するには、WebLogic Server コンソール ウィンドウ (ヘッダ バーが「WebLogic Server - 9.2」である [コマンド プロンプト] ウィンドウ) に切り替えます。コンソール ウィンドウは、デフォルトでは、ステータス バーにアイコン化されています。コンソール ウィンドウを開くと、以下のメッセージが表示されており、タイマーが開始しているのが確認できます。

    **************
    Timer started
    **************
    これは、start オペレーションによって生成されます。2 秒ごとにタイマーが発動するため、このメッセージはすぐにスクロールされてしまいます。

    次に、コンソール ウィンドウにタイマーが発動していることが表示されます。タイマーが発動するごとに、以下のようなステータス情報のブロックが表示されます。

    ***********************************
    Callback received from timer firing
    ***********************************
          

    これは、2 秒ごとのタイマーの発動時にコールバックを受信するイベント ハンドラによって生成されます。

  4. タイマーの発動を停止するには、[テスト クライアント] ウィンドウ本体の [start Request Summary] のすぐ上にある [Continue this conversation] リンクをクリックします。次に、会話の次のフェーズのオペレーション (この例では stop オペレーション) が表示されます。

  5. [stop] をクリックします。[テスト クライアント] ウィンドウに、stop オペレーションの結果が表示されます。

    2 秒ごとのタイマー発動を示すメッセージがコンソール ウィンドウに表示されなくなり、以下の行が表示されます。

    **************
    Timer stopped
    **************

    これで、stop オペレーションが成功しました。

関連トピック

チュートリアル : BEA Workshop for WebLogic Platform 入門

システム コントロールの使用

タイマー コントロール

TimerControl インタフェース

タイマー コントロールの使用

チュートリアル : タイマー コントロールを使用した Web サービスの作成

 

 

ナビゲーション バーのスキップ   ページの先頭