仅使用@Transactional时,持久性单元未启动

时间:2017-05-19 10:48:57

标签: java jpa ejb jta java-ee-7

我正在使用Wildfly 10.1.0,我正在尝试将所有EJB更改为仅使用自Jave EE 7以来提供的@Transactional注释(因为JTA 1.2)。问题是当我的项目有0个EJB时,PersistenceUnit不是由容器启动的。如果我添加一个只有注释@Stateless的空类,那么它会再次起作用。

这是我的persistence.xml

<persistence version="2.1">
  <persistence-unit name="Storage-PU" transaction-type="JTA">
    <jta-data-source>java:/PostGreDS</jta-data-source>
    <class>SomeEntity<class>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
  </persistence-unit>
</persistence>

当没有可用的EJB时,PersistenceUnit没有启动的原因是什么?

1 个答案:

答案 0 :(得分:3)

  

当没有可用的EJB时,PersistenceUnit没有启动的原因是什么?

原因是在JEE应用程序中,持久化上下文(包括数据库连接,持久性单元和东西)由EJB容器启动和管理:

enter image description here

因此,仅使用@Transactional在Web层上注释bean方法不足以启动持久性上下文。请注意,事务也由EJB容器管理,而不是Web容器。

有关JEE架构的更多详细信息,请参阅Java Platform, Enterprise Edition: The Java EE Tutorial