EJB 2.1 timer service好象是能实现这个功能,具体的我也没用过,这有一篇介绍:http://staf.sourceforge.net/getservices.php
共同学习!

解决方案 »

  1.   

    Package javax.ejb
    Interface TimerService
    方法概览
     Timer createTimer(java.util.Date initialExpiration, long intervalDuration, java.io.Serializable info)       创建一个间隔重复计时器。
     Timer createTimer(java.util.Date expiration,java.io.Serializable info)      创建一个单个行动计时器。
     Timer createTimer(long initialDuration,long intervalDuration, java.io.Serializable info)       创建一个间隔重复计时器。
     Timer createTimer(long duration,java.io.Serializable info)       创建一个单个行动计时器。
     java.util.Collection getTimers()        把所有的运行的计时器与Bean相联系。
    方法细节:
    createTimer
    public Timer createTimer(long duration, java.io.Serializable info)
                   throws java.lang.IllegalArgumentException,
                          java.lang.IllegalStateException,
                          EJBException
    创建一个在指定的传递周期之后执行的单个行动计时器。
    参数: 
    duration -以毫秒为单位,指定的传递周期。
    info -计时器到期时的请求信息,可以为空。
    返回值: 
    新的计时器。 
    引发: 
    java.lang.IllegalArgumentException – 如果指定的传递周期为负值。
    java.lang.IllegalStateException – 调用错误,如果调用一个不允许存取的实例的方法。 
    EJBException – 如果出现系统级的错误。
     createTimer
    public Timer createTimer(long initialDuration, long intervalDuration, java.io.Serializable info)
                     throws java.lang.IllegalArgumentException,
                           java.lang.IllegalStateException,
                           EJBException
    创建一个间隔重复计时器,该计时器在经过指定的传递周期之后执行,并且任务随后在指定的时间间隔重复执行。
    参数: 
    initialDuration -以毫秒为单位,计时器第一次执行前的传递周期。
    IntervalDuration -以毫秒为单位,指定的时间间隔。
    info -计时器到期时的请求信息,可以为空。
    返回值: 
    新的计时器。 
    引发: 
    java.lang.IllegalArgumentException – 如果传递周期或者间隔时间为负值。
    java.lang.IllegalStateException -调用错误,如果调用一个不允许存取的实例的方法。 
    EJBException – 如果出现系统级的错误。
     createTimer
    public Timer createTimer(java.util.Date expiration, java.io.Serializable info)
                 throws java.lang.IllegalArgumentException,
                        java.lang.IllegalStateException,
                        EJBException
    创建一个在指定的时间执行的单个行动计时器。
    参数: 
    expiration –指定的时间。
    info -计时器到期时的请求信息,可以为空。
    返回值: 
    新的计时器。 
    引发: 
    java.lang.IllegalArgumentException-如果指定的时间为空或者expiration.getTime()为负值。
    java.lang.IllegalStateException -调用错误,如果调用一个不允许存取的实例的方法。  
    EJBException – 如果出现系统级的错误。
     createTimer
    public Timer createTimer(java.util.Date initialExpiration, long intervalDuration,
    java.io.Serializable info)
                      throws java.lang.IllegalArgumentException,
                             java.lang.IllegalStateException,
                             EJBException
    创建一个间隔重复计时器,该计时器在指定的时间执行,并且任务随后每经过指定的间隔就执行一次。 
    参数: 
    initialExpiration–指定的时间。
    IntervalDuration -以毫秒为单位,指定的时间间隔。
    info -计时器到期时的请求信息,可以为空。
    返回值: 
    新的计时器。 
    引发: 
    java.lang.IllegalArgumentException-如果指定的时间为空、间隔时间为负值或者initialExpiration.getTime()为负值。
    java.lang.IllegalStateException -调用错误,如果调用一个不允许存取的实例的方法。   
    EJBException – 如果出现系统级的错误。 
     getTimers
    public java.util.Collection getTimers()
                                  throws java.lang.IllegalStateException,
                                  EJBException
    把所有的运行的计时器与Bean相联系。
    返回值: 
    javax.ejb.Timer对象的收集器。 
    引发: 
    java.lang.IllegalStateException -调用错误,如果调用一个不允许存取的实例的方法。   
    EJBException – 如果出现系统级错误。
       Interface TimedObject
     
    方法概览
     void ejbTimeout(Timer timer)           调用计时器。
     方法细节:
    ejbTimeout
    public void ejbTimeout(Timer timer)
    计时器执行前被EJB容器调用。
    参数: 
    timer –调用的计时器名。
      

  2.   

    好像jboss现在还不支持EJB 2.1 timer service,
    有其他的解决办法吗?
      

  3.   

    你在java里得到系统时间然后再调用EJB时先判断一下
      

  4.   

    To:zhangbin_zhang(cat) 
    别的方法我就不知道了,我也只是看到过这方面的介绍,具体也没有做过。不好意思!又解决方案的话别忘了给我讲一讲!多谢了!
      

  5.   

    用消息bean就可以

    写一个servlet,在web.xml配置为
    <servlet>
        <servlet-name>servlentname</servlet-name>
        <servlet-class>full name of servlet</servlet-class>
    <load-on-startup>1</load-on-startup>
     </servlet>
    然后实现这个servlet的init方法,创建一个Timer,这样你的应用程序就会有一个定时器了
      

  6.   

    用java.util.Timer
    private java.util.Timer timer; 
    timer = new Timer(true);
    timer.schedule(new java.util.TimerTask() { 
    public void run() {    
          //每隔5分钟要触发的事件}        
    }, 0, 5*60*1000);
      

  7.   

    现在还没有声称支持ejb2.1规范的容器吧,所以要定时那是不可能的事情,除非你自己写个程序,让它定时调用你的bean吧
      

  8.   

    谁有weblogic配置方面的资料呀??
    我哭!~~~~~
      

  9.   

    写一个timerTask的客户端,定时调用ejb就可以了。
    典型的矛盾转移的办法
      

  10.   

    在ejb的create方法中创建时钟服务不行吗?如果是要0:0:0启动的话,好像要计算现在地时间距那个时间还有多久,然后在时钟的服务的启动函数中加入这个参数,我以前是在servlet中这样做的,不知道ejb中是否允许
      

  11.   

    ejb还是用client来启动的,我看还是在client用timertask来实现好了
      

  12.   

    ejb还是不要用线程的好,个人意见,仅供参考
      

  13.   

    我觉得Timer只会执行一次,而没办法循环执行。