Apcoordinator ユーザーズガイド
目次 前ページ次ページ

第2部 Apcoordinatorコアの機能> 第4章 APIを使ったプログラミング

4.4 ユーザ定義イベントの利用

DispatchContextクラスによって、次のようにユーザ定義イベントが利用できます。 例えば、以下のようにエラー発生時にリソースを開放する処理に利用できます。 このようにユーザ定義イベントを利用することにより、エラーを検出した処理は、開放すべきリソースがどれであるのかを把握する必要がなくなります。 ユーザ定義イベントは以下の手順で使用します。 ユーザ定義イベントを表すクラスはcom.fujitsu.uji.event.UjiEventクラスを継承して次のように作成します。

public class MyEvent extends com.fujitsu.uji.event.UjiEvent {
        static public final int TYPE0=0;
        static public final int TYPE1=1;

        protected int type;

        // typeはイベントの種類を、sourceはイベントの発生源となったオブジェクトを
        // 表します。
        public MyEvent(int type, Object source) {
                // 以下に初期化する手続きを記述してください。
                super(source);
                this.type=type;
        }

        public int getType() {return type;}
}
コンストラクタは必ずObjectの引数が必要です。これは、イベントの発生源となったオブジェクトを表します。nullは指定できません。

イベントリスナはcom.fujitsu.uji.event.UjiEventListenerインタフェースを実装して次のように作成します。


import com.fujitsu.uji.event.UjiEvent;
import com.fujitsu.uji.event.UjiEventListener;
public class MyListener implements UjiEventListener {
        java.io.File file;

        public MyListener(java.io.File file) {
                this.file=file;
        }

        // このメソッドは、イベントが発生したときに呼び出されます。
        public void eventRaised(UjiEvent evt) {
                if (evt instanceof MyEvent && 
                    ((MyEvent)evt).getType()==MyEvent.TYPE1) {
                        file.delete();
                }
        }
        
}
ビジネスクラスでは、イベントリスナとイベントを次のように使用します。

        public void startup(DispatchContext context) {
                context.addUjiEventListener(new MyListener(new File("foo"));
                ....
        }

        public Object postprocess(DispatchContext context,Object result) {
                ....
                if (failed) {
                        context.fireUjiEvent(new MyEvent(MyEvent.TYPE1,this));
                }
        }
イベントリスナをDispatchContextから削除するには、removeUjiEventListenerメソッドを使用します。

登録されたイベントリスナはリクエストの処理が終了するまで有効です。リクエストの処理とは、Webアプリケーションの場合は<uji:dispatch/>の実行、EJBセションBeanの場合はビジネスメソッドの呼び出し、SOAPサーバアプリケーションはサービスクラスの呼び出しです。


目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2000-2005