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

Persistence Unit not started, when only using @Transactional

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

这是我的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 没有启动的原因是什么?

What is the reason why the PersistenceUnit is not started, when there are no EJB's available?

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

因此,仅在 Web 层用 @Transactional 注释 bean 方法不足以启动 Persistence Context。请注意,事务也由 EJB 容器而非 Web 容器管理。

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