Common j Timer(タイマー)


ここから来ました:http://hi.baidu.com/fuqilee/blog/item/0550e454f57a5751d10906d5.html
 
Communj TimerはCommunj仕様の一部であり、ibmとBEAによって共同で制定され、より良い顧客と独立したソフトウェア事業者のニーズに応えて、開発者に移植可能なサービスエンドアプリケーションを開発する時、より簡単で機能的な方法を提供します.この仕様は主に以下のいくつかの部分を含みます.Service Component Architecture、Service Data Objecs、Work Manager and Timer、Entprise Metadata Discovery.ここで、Work Manager and Timeは、アプリケーションサーバにおける同時タスクの実行をサポートするための簡単なAPIを提供する.これにより、ユーザは、ServletとEJBとの間での合併計画的タスクを簡単に実行することができ、呑吐量を高め、サービス端末の応答時間を短縮し、J 2 EE環境においてユーザによってカスタマイズされたマルチスレッド合併とタイマーサービスを実行する問題をうまく解決することができる.
Communj Timer APIは三つのインターフェースを含みます.TimerManager、Timer、Timer、Timer Listener.アプリケーションはTimerManagerを通じて定期的にTimerriestenerを呼び出すことができます.TimerManagerごとのshceduleメソッドはTimerオブジェクトに戻ります.ユーザはTimerManagerのJNDI名で管理環境の文脈でTimerManagerを検索することができます.
ユーザは、以下の3段階によって、Communj Timerを使用することができる.
  • は、web.xmlまたはejb-jar.xmlにTimerの記述を追加する.
    <resource-ref>
        <res-ref-name>timer/MyTimer</res-ref-name>
        <res-type>commonj.timer.TimerManager</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Unshareable</res-sharing-scope>
    </resource-ref>
  • TimerrListenerインターフェースを実現する:
    import commonj.timers.Timer;
    import commonj.timers.TimerListener;
    
    public class TestTimerListener implements TimerListener {
        private String input;
    
        public TestTimerListener(String input) {
            this.input = input;
        }
    
        public void timerExpired(Timer timer) {
            Date timeValue = new Date();
            system.out.println("In timerExpired method, time is " 
          + timeValue.toString() + ", input value is " + input);
        }
    }
  • TimerManagerを検索し、TimerListenerを呼び出し、タスクを初期化し、時間を設定する.
    InitialContext ctx = new InitialContext();
    TimerManager mgr = (TimerManager)
     ctx.lookup("java:comp/env/timer/MyTimer");
    TimerListener listener =new TestTimerListener ("test");
    //      
    mgr.schedule(listener, 1000*60);
  • Communj TimerはJ 2 EE環境においてタイマーを使用する方法を提供し、Java.util.Timerが作成したスレッドが容器管理範囲を超えている問題を解決しました.JMX Timer ServiceとJMXフレームワークとの間の緊密な結合とは違って、より友好的で独立したAPIを提供しています.Communj Timer APIにおけるtimerは瞬時で非事務的であり、その作成JVMにおいて実行されるので、耐久性、事務性、回復性に要求されるクラスタ環境には適しない.