我正在使用jboss wildfly 9。 我有一个提供程序部署为模块:
wildfly > modules > com > mycompany > myprovider
文件夹。 然后我有一个jpa项目,在我的数据库中编写和读取DAO模式。 我想使用JTA处理DAO事务,但是为了使DAO类可以访问myprovider,我需要将DAO JPA项目放在modules目录中。
现在面对真正的问题:我似乎无法使用@PersistenceContext注释将实体管理注入我的EntityManager varible:
@PersistenceContext(unitName = "KAS-Mapping")
private EntityManager entityManager;
这是我的persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="KAS-Mapping">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>my.class.persistence.model.MapGroup</class>
<class>my.class.persistence.model.MapUser</class>
<properties>
<property name="javax.persistence.provider" value="org.hibernate.ejb.HibernatePersistence" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="javax.persistence.provider" value="org.hibernate.jpa.HibernatePersistenceProvider"/>
<property name="javax.persistence.transactionType" value="JTA"/>
<property name="javax.persistence.jtaDataSource" value="java:jboss/datasources/MyDS"/>
</properties>
</persistence-unit>
</persistence>
为什么我不能将上下文注入jar模块? 我错了什么?
答案 0 :(得分:0)
WildFly / JBoss模块不是Java EE概念,因此期望注入资源,持久性上下文或CDI bean以跨模块边界工作是不合理的。
您是否在模块依赖项上尝试了meta-inf="import"
?见https://docs.jboss.org/author/display/WFLY9/Class+Loading+in+WildFly
答案 1 :(得分:0)
为什么您的提供商依赖于您的DAO层?这是一个你应该避免的糟糕模式。现在您是否也将persistence.xml放入模块中?
您是否尝试过使用标准的persistence.xml标记而不是属性?
<persistence-unit name="KAS-Mapping" transaction-type="JTA">
<jta-data-source>jboss/datasources/MyDS</jta-data-source>
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>my.class.persistence.model.MapGroup</class>
<class>my.class.persistence.model.MapUser</class>
<properties>
<property name="javax.persistence.provider" value="org.hibernate.ejb.HibernatePersistence" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
</properties>
</persistence-unit>