Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 启动单例bean能否延迟J2EE容器初始化?_Java_Jakarta Ee_Ejb 3.1 - Fatal编程技术网

Java 启动单例bean能否延迟J2EE容器初始化?

Java 启动单例bean能否延迟J2EE容器初始化?,java,jakarta-ee,ejb-3.1,Java,Jakarta Ee,Ejb 3.1,根据报告: EJB容器负责确定何时初始化单例会话bean实例,除非单例会话bean实现类使用javax.EJB.Startup注释。在这种情况下,有时称为急切初始化,EJB容器必须在应用程序启动时初始化单例会话bean在EJB容器向应用程序中的任何企业bean发送客户端请求之前,初始化单例会话bean 我的应用程序不使用任何EJB,但它使用@Startup、@Singleton和@PostConstruct注释在应用程序服务器初始化期间运行长时间的数据库更新任务。是这样的: @Startup @

根据报告:

EJB容器负责确定何时初始化单例会话bean实例,除非单例会话bean实现类使用javax.EJB.Startup注释。在这种情况下,有时称为急切初始化,EJB容器必须在应用程序启动时初始化单例会话bean在EJB容器向应用程序中的任何企业bean发送客户端请求之前,初始化单例会话bean

我的应用程序不使用任何EJB,但它使用@Startup、@Singleton和@PostConstruct注释在应用程序服务器初始化期间运行长时间的数据库更新任务。是这样的:

@Startup
@Singleton
public class StartupTask {

  @PostConstruct
  void init {
    // database update task
  }
}
在此任务完成之前,我的应用程序是否能够处理HTTP请求

我的问题类似于。

任何带注释的bean都是EJB,并且受您在问题中引用的条件约束

您可以通过将“数据库更新任务”逻辑移动到第二个EJB来避免延迟:

@Stateless
public class DatabaseUpdater {

    @Resource
    private Datasource dataSource;

    // OR

    @PersistenceContext
    private EntityManager em;

    @javax.ejb.Asynchronous
    public void updateDatabase() {
        // beware of long running transaction timeouts in here!
        ...
    }

}
然后从@startupbean调用它:

@Startup
@Singleton
public class StartupTask {

    @EJB
    private DatabaseUpdater databaseUpdater;

    @PostConstruct
    void init {
        databaseUpdater.updateDatabase();
    }

}

您的
@Startup@singletonstartuptask
绝对是一个EJB,因此它受您上面引用的条件的约束。您可以通过将“数据库更新任务”逻辑移动到第二个EJB,并使用一个带注释的void方法,然后从
init
方法调用它来避免延迟。您是对的。它就像一个符咒!如何将您的评论转化为答案?按建议回答