JBoss AS 7 Невозможно внедрить управляемые контейнерами RESOURCE_LOCAL контейнеры с использованием @PersistenceContext
Я использую JBoss AS 7.1.1 и могу настроить новый источник данных JTA и подключить его к EJB, используя
@PersistenceContext(unitName="TestPU")
private EntityManager entityManager;
Когда я попытался использовать RESOURCE_LOCAL PersistenceUnit, я получаю сообщение об ошибке: я не могу вводить RESOURCE_LOCAL PU, используя @PersistenceContext.
Я настроил свой файл persistence.xml следующим образом:
<persistence-unit name="TestPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/xy"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="blah"/>
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
И в моем DAO,
@Stateless
public class UserDAO {
@PersistenceContext(unitName="TestPU")
private EntityManager entityManager;
}
Когда я развернул свое приложение в AS 7.1.1, я получаю следующую ошибку.
JBAS011428: Cannot inject RESOURCE_LOCAL container managed EntityManagers using @PersistenceContext
at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor$1.handle(ModuleJndiBindingProcessor.java:169)
at org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:54)
at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.processClassConfigurations(ModuleJndiBindingProcessor.java:162)
at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.deploy(ModuleJndiBindingProcessor.java:155)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
... 5 more
Любое решение использовать RESOURCE_LOCAL PU с @PersistenceContext?
Ответы
Ответ 1
JTA: В среде Java EE транзакции управляются контейнером и по умолчанию его транзакция JTA
. Вы можете получить менеджер сущностей путем поиска или инъекции.
RESOURCE_LOCAL: В Java SE приложение должно управлять транзакциями явно, а локальные транзакции ресурсов - это собственные транзакции. Вам нужно создать EntityManagerFactory
, а затем создать из него диспетчер сущностей.
По мере развертывания на сервере приложений измените значение transaction-type
на JTA
в файле persistence.xml.