2017-10-12 114 views
0

我有多个EJB模块,每个模块需要在数据库中默认一些数据,创建一些目录或文件。如何在EJB模块启动时执行一些代码

我想,如果我创建@Startup @singleton EJB,我会做这个工作,但这是正确的方法吗? ejb将保留在内存中,即使我仅在启动时使用它

回答

1

是的,使用启动单例bean通常是执行初始化的正确方法,因为@Startup不能与@Stateless一起使用。

如果你想将数据插入到数据库中,另一种选择是由persistence.xml中运行SQL脚本:

<property name="javax.persistence.sql-load-script-source" 
     value="META-INF/sql/data.sql" /> 

这显然有缺点,你不能管理数据库插入Java代码。欲了解更多信息,请浏览:http://docs.oracle.com/javaee/7/tutorial/persistence-intro005.htm

如果您想了解更多有关的EJB(和单身),在这里看到:http://download.oracle.com/otn-pub/jcp/ejb-3.1-fr-eval-oth-JSpec/ejb-3_1-fr-spec.pdf

+0

我做了这个样子。我在meta-inf中有sql文件和其他脚本,json或属性文件,但persistence.xml位于另一个存档中。我有一个标准的持久性单元名称,所以我可以注入一个实体管理器并按行读取文件:按照这种方式,sql查询随模块一起移动,并且对jdbc连接没有约束,唯一的约束是持久单元名称 –

相关问题