kapok

          垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks

          http://computer.mblogger.cn/sammi_tea
          http://www.weste.net/html/200310/20031029QBI124658.html

          使用
          Timer Service 可以在某一指定時間到了,或周期性Schedule開始時,通知EJB執行指定操作。為了使用Timer ServiceEJB需要實現javax.ejb.TimedObject接口。

          public interface TimedObject {

                public void ejbTimeout(Timer timer) ;

          }

          例如:當時間到,EntityBean執行數據更新操作

          public abstract class ShipBean implements javax.ejb.EntityBean, javax.ejb.TimedOut {

              javax.ejb.EntityContext ejbContext;

              public void setEntityContext(javax.ejb.EntityContext ctxt){

                   ejbContext = ctxt;

              }

              public void ejbTimedout(javax.ejb.Timer timer) {

                 // business logic for timer goes here

          }

          。。。。

          從上面的使用例子看ejbTimedout是一個回調方法,執行具體的商業邏輯,那么怎樣設置什么時間觸發這個方法呢,我們利用javax.ejb.TimerSevice。該對象我們可以從EJBContext中獲得該對象實例。為此我們在上面的例子中添加一個ejbHome方法scheduleMaintenance

          public inteface ShipBeanHome implements javax.ejb.EJBHome {

          ShipBeanRemote create() throws CreateException, RemoteException;

          void scheduleMaintenance(String desc, Date scheduleDate) throws RemoteException;

          ……

          }

           

          public abstract class ShipBean implements javax.ejb.EntityBean, javax.ejb.TimedOut {

              javax.ejb.EntityContext ejbContext;

              public void setEntityContext(javax.ejb.EntityContext ctxt){

                   ejbContext = ctxt;

          }

          public void ejbScheduleMaintenance(String desc, Date scheduleDate) {

                TimerService service = ejbContext.getTimerService();

          Service.createTime(scheduleDate, desc);

          }

              public void ejbTimedout(javax.ejb.Timer timer) {

                 // business logic for timer goes here

          }

           

          TimerService中提供了設置了Timer的方法,包括設置一個時間點(ejbTimedOut方法運行一次)和時間間隔(ejbTimedOut方法運行多次)。另外,它還提供了getTimer()的方法,該方法返回一個Collection,里面包含了已經注冊了的所有Timer對象。

           

          Timer接口

          public interface Timer {

              // Cause the timer and all its associated expiration notifications to be canceled

              public void cancel() 

                   throws IllegalStateException,NoSuchObjectLocalException,EJBException;

              // Get the information associated with the timer at the time of creation.

              public java.io.Serializable getInfo()

                   throws IllegalStateException,NoSuchObjectLocalException,EJBException;

              // Get the point in time at which the next timer expiration is scheduled to occur.

              public java.util.Date getNextTimeout()

                   throws IllegalStateException,NoSuchObjectLocalException,EJBException;

              // Get the number of milliseconds that will elapse before the next scheduled timer expiration

              public long getTimeRemaining()

                   throws IllegalStateException,NoSuchObjectLocalException,EJBException;

              //Get a serializable handle to the timer.

              public TimerHandle getHandle()

                   throws IllegalStateException,NoSuchObjectLocalException,EJBException;

          }

          Cancel方法用來取消一個已經無效的Timer(時間點已經過去)。

          GetInfo方法獲得一個Timer的相關信息,這些信息在createTimer時作為參數和Timer聯系在一起。在前面的例子中,為了防止客戶胡亂調用ejbHome方法scheduleMaintenance,我們可以為每一個設定的時間添加一個唯一編號。修改后的代碼如下:

          public class MaintenanceItem implements java.io.Serializable {

              private long maintenanceItemNumber;

              private String description;

              public MaintenanceItem(long min, String desc){

                  maintenanceItemNumber = min;

                  description = desc;

              }

              public long getMIN(){

                  return maintenanceItemNumber;

              }

              public String getDescription(){

                  return description;

              }

          public void scheduleMaintenance(MaintenanceItem maintenanceItem, Date dateOfTest){

                  TimerService timerService = ejbContext.getTimerService();

                  java.util.Iterator timers = timerService.getTimers().iterator();

                  while( timers.hasNext() ){

                          javax.ejb.Timer timer = (javax.ejb.Timer) timers.next();

                          String timerMainItem = (MaintenanceItem) timer.getInfo();

                          if( maintenanceItem.getMIN() == timerMainItem.getMIN() )

                               timer.cancel();

                          }

                  }

                  timerService.createTimer( dateOfText, maintenanceItem);

              }

          TimerServiceTransaction

          TimerService可以參與Transaction,當createTimer如果在Transaction中,如果該transaction rollback則創建的Timer也會取消。





          posted on 2005-03-29 10:50 笨笨 閱讀(447) 評論(0)  編輯  收藏 所屬分類: J2EEALL
          主站蜘蛛池模板: 仲巴县| 乳山市| 苏州市| 益阳市| 靖江市| 白水县| 绥中县| 扶风县| 辽中县| 霍山县| 织金县| 淮安市| 沽源县| 德兴市| 如东县| 孟州市| 五寨县| 门源| 额济纳旗| 庆元县| 苏尼特右旗| 晋宁县| 铜鼓县| 汉沽区| 毕节市| 商水县| 静乐县| 徐闻县| 沈丘县| 保康县| 乌拉特后旗| 九台市| 五家渠市| 巨野县| 丹巴县| 斗六市| 杭州市| 河源市| 永川市| 哈密市| 永仁县|