2012年2月2日星期四

NetBeans_007:开发JavaEE 6 应用之七:使用Singleton EJB和 @Schedule

单例EJB在JVM中只有一个实例,因此是线程安全的。
而且因为单例对象只有一个实例,一般用于缓存一些全局数据。

1. 创建Singleton EJB


2. 在应用启动时即初始化该Singleton EJB
在Class上增加标注:@javax.ejb.Startup。

3. 定时调用某个方法
在方法上增加标注: @Schedule(hour = "*", minute = "*", second = "*/30")。
表明每30秒会调用一次方法preFetchCustomers。

最终完成的Singleton EJB内容如下:
@Singleton
@LocalBean
@javax.ejb.Startup
public class CacheSingletonBean {

    @EJB
    CustomerSessionBean bean;
    List customers;

    public List getCustomers() {
        return customers;
    }

    @Schedule(hour = "*", minute = "*", second = "*/30")
    public void preFetchCustomers() {
        System.out.println(new Date() + " %%%%%%%%%%%%%%%%%%%%%%%%%%% Fetching customers %%%%%%%%%%%%%%%%%%%%%%%%%%%");
        customers = bean.getCustomers();
    }
}

4. 在TestServlet中,用CacheSingletonBean代替CustomerSessionBean
需要注意的是,CacheSingletonBean的方法getCustomers可能返回为null,如果preFetchCustomers方法一次都没有调用的话。
这是有可能的,因为应用启动后30秒才会第一次调用preFetchCustomers方法。

没有评论: