`

jee6 学习笔记 6.2 - @Schedule

    博客分类:
  • JEE
阅读更多
This tests the ejb3.1 annotation @Schedule.
The idea is to print the server time regularly, in a scheduled task method.

package com.jxee.ejb.test.singleton;

import java.util.Date;

import javax.annotation.PostConstruct;
import javax.ejb.Lock;
import javax.ejb.LockType;
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import javax.ejb.Startup;

import org.apache.log4j.Logger;

/**
 *  Test jee 6 annotation @Schedule - automatic timers.
 *  <b>it's said that this annotation works with any EJBs except for
 *  Stateful session beans.</b>
 *  <br/>
 *  <br/>
 *  From the JEE6 API doc:
 *  <br/><br/>
 *  @Schedule schedules a timer for automatic creation with a timeout schedule 
 *  based on a cron-like time expression. The annotated method is 
 *  used as the timeout callback method. 
 *  </li>
 *  <li>
 *  A timeout callback method can have public, private, protected, 
 *  or package level access. The method must not be declared as final
 *  or static, and must not throw application exceptions.<br/>
 *  </li>
 *  <li>
 *  Schedule-based timer times are evaluated in the context of the 
 *  default time zone associated with the container in which the 
 *  application is executing. A schedule-based timer may optionally 
 *  override this default and associate itself with a specific time zone.
 *  If the schedule-based timer is associated with a specific time zone, 
 *  all its times are evaluated in the context of that time zone, 
 *  regardless of the default time zone in which the container is executing.
 *  </li>
 */
//@Startup   // eager initialization during the application startup sequence
@Singleton // a singleton scheduler, rather than a pool of schedulers...
public class ScheduleEJB {

  private static final Logger log = Logger.getLogger(ScheduleEJB.class);
  private String timeStr;
  private Integer counter = 0;
  
  @PostConstruct
  public void init() {
    log.debug(">>> inited: " + this.printInstance());
  }
  
  /**
   * scheduled to execute on Thursday at every 20th second for every 3 minutes
   */
  @Schedule(dayOfWeek="Thu", hour="*", minute="*/3", second="20", persistent=true)
  public void printTime() {
    doScheduledTask();
  }
  
  @Lock(LockType.WRITE)
  private void doScheduledTask() {
    ++counter;
    timeStr = "scheduled ["+ counter + "]" + ", timeStr(sec)=" + (new Date().getTime())/1000;
    log.debug(this.timeStr);
  }

  @Lock(LockType.READ)
  public String getTimeStr() {
    return timeStr;
  }
  
  public String printInstance() {
    return this.toString();
  }
}


here's the screen shot of the server log:



小结:

1. @Schedule can apply to stateless session beans and message driven beans. but not stateful session beans.

2. @Schedule creates so called "automatic" timers to schedule tasks.

3. if you wanna make sure that the ejb is fully initialized before servicing, you can use the annotation @Startup

4. this example uses a singleton ejb to schedule the task. otherwise you end up with the scheduled method called by multiple times at the timer expires.

5. A timeout callback method can have public, private, protected, or package level access. The method must not be declared as final or static, and must not throw application exceptions.

6. Schedule-based timer times are evaluated in the context of the default time zone associated with the container in which the application is executing. A schedule-based timer may optionally override this default and associate itself with a specific time zone.

7. attribute "persistent" defaults to "true", meaning the timer/the scheduled task/method execution would survive server restart.

8. one thing to mention is that one might need to remove the "tmp/work/data" folders from JBoss6 server configuration, after a redeployment. otherwise, it won't work as expected - the singleton ejb looks like have multiple instances.

  • 大小: 14.4 KB
分享到:
评论

相关推荐

    jee6 学习笔记 6.3 - @Asynchronous

    在Java企业版(Java EE)6中,`@Asynchronous`注解是一个非常重要的特性,它使得开发者可以方便地在应用程序中实现异步处理。这个注解是Java EE并发编程的一部分,主要应用于EJB(Enterprise JavaBeans)环境,用于...

    开发工具 eclipse-jee-mars-2-win32

    开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32...

    eclipse-jee-mars-1-win32-x86_64.7z

    eclipse-jee-mars-1-win32-x86_64.7z eclipse-jee-mars-1-win32-x86_64.zip 我打的 7z 压缩包 关于有 Alt + / 不起作用解决办法: window -&gt; General -&gt; Keys -&gt; Content Assist -&gt; Binding: 改为 Alt + / When:...

    eclipse-jee-2021-12-R-win32-x86_64

    eclipse-jee-2021-12-R-win32-x86_64 eclipse-jee-2021-12-R-win32-x86_64 eclipse-jee-2021-12-R-win32-x86_64

    eclipse-jee-neon-1a-win_64

    eclipse-jee-neon-1a-win_64

    eclipse-jee-2022-06-R-win32-x86_64.zip

    在解压eclipse-jee-2022-06-R-win32-x86_64.zip后,我们会得到一个名为“eclipse”的文件夹,这个文件夹包含了整个IDE的所有组件和配置。启动Eclipse IDE,用户会看到熟悉的界面,包括工作区(Workspace)、透视图...

    eclipse-jee-2023-09-R-linux-gtk-x86-64.tar.gz

    "eclipse-jee-2023-09-R-linux-gtk-x86_64.tar.gz" 文件是Eclipse专为Java企业版(Java EE)开发者设计的2023年9月版本,适用于64位的Linux操作系统。这个版本包含了对Java EE开发所需的全部工具和功能,如Web服务器...

    eclipse-jee-2020-09-R-win32-x86_64.zip

    标题中的“eclipse-jee-2020-09-R-win32-x86_64.zip”指的是Eclipse IDE for Java EE Developers的2020年9月版本,适用于Windows 32位和64位系统的安装包。Eclipse是一款著名的开源集成开发环境(IDE),广泛用于...

    eclipse-jee-2021-12-R-win32-x86_64.zip

    Eclipse IDE for Enterprise Java and Web Developers (eclipse-jee-2021-12-R-win32-x86_64.zip)适用于Windwos x86_64

    eclipse-jee-2020-12-R-win32-x86_64

    《Eclipse IDE for Java开发者:深入解析eclipse-jee-2020-12-R-win32-x86_64》 Eclipse IDE,全称集成开发环境(Integrated Development Environment),是全球广泛使用的开源Java开发工具。该版本"eclipse-jee-...

    eclipse-jee-mars-R-win32-x86_64位官方绿色版.zip

    Eclipse-jee-mars-R-win32-x86_64位官方绿色版.zip是一个针对Windows平台的64位版本的Eclipse集成开发环境(IDE)的压缩包,特别为Java企业级(J2EE)应用程序开发设计。该版本发布于2015年6月30日,是当时Eclipse ...

    jee6 学习笔记 5 - Struggling with JSF2 binding GET params

    这篇"jee6 学习笔记 5 - Struggling with JSF2 binding GET params"主要探讨了开发者在使用JSF2绑定GET参数时可能遇到的挑战和解决方案。 JSF2是一个基于MVC(模型-视图-控制器)设计模式的Java框架,用于创建交互...

    eclipse-jee-2023-09-R-macosx-cocoa-x86-64.dmg

    eclipse-jee-2023-09-R-macosx-cocoa-x86_64.dmg 适用于macOS Intel芯片系统

    eclipse-jee-2023-06-R-win32-x86-64.zip

    《Eclipse JEE 2023-06-R for Windows x64:深度解析与应用》 Eclipse JEE 2023-06-R-win32-x86_64.zip 是...通过不断学习和熟练掌握Eclipse JEE的各项功能,你可以更高效地构建、测试和部署高质量的Java EE应用程序。

    eclipse-jee-2018-09-win32-x86_64.zip

    标题 "eclipse-jee-2018-09-win32-x86_64.zip" 提供的信息表明这是一款针对Java企业级开发的Eclipse集成开发环境(IDE)的2018年9月版本,适用于Windows 32位操作系统、x86_64架构的计算机。Eclipse是一个开源的、跨...

    jee6 学习笔记 1 - 开发环境的配置

    NULL 博文链接:https://jxee.iteye.com/blog/1575432

    eclipse-jee-2019-03-R-win32-x86-64.zip

    Eclipse-JEE-2019-03-R-win32-x86-64.zip 是一个专门为Windows 64位系统设计的Eclipse版本,包含了Web开发所需的插件。 这个版本是2019年的第三个发布版(Release),通常每个版本都会带来性能优化、新功能和修复...

    eclipse-jee-2023-09-R-win32-x86-64.zip

    "eclipse-jee-2023-09-R-win32-x86_64.zip" 是Eclipse针对2023年9月发布的一个更新版,专为Windows 64位操作系统设计。 在Windows系统上安装和使用Eclipse-JEE,你需要了解以下关键知识点: 1. **安装步骤**: - ...

    eclipse-jee-mars-2-win32

    eclipse-jee-mars-2-win32 javaee开发工具 eclipse-jee-mars-2-win32 javaee开发工具

    eclipse-jee-oxygen-3-win32.rar

    "eclipse-jee-oxygen-3-win32.rar" 是一个针对Windows 32位系统的Eclipse版本,专为Java企业级开发(JEE)设计。这个版本是Eclipse Oxygen系列的第三个发布版,它包含了众多开发者所需的工具和特性,旨在提升开发...

Global site tag (gtag.js) - Google Analytics