EntityManager未注入Jboss模块

时间:2015-09-14 23:14:55

标签: wildfly entitymanager persistence.xml

我正在使用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模块? 我错了什么?

2 个答案:

答案 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>