【问题标题】:jboss-deployment-structure Error injecting persistence unitjboss-deployment-structure 注入持久性单元时出错
【发布时间】:2018-10-22 02:18:01
【问题描述】:

首先,这和JBAS016069: Error injecting persistence unit into CDI managed bean.” When deploying WAR with dependency to EJB-JAR是同一个问题 但是那里没有答案:(而且我没有足够的评论点,我的请求也不是问题的答案;这就是我开新票的原因。

无论如何,我有这个 jar(我们称之为 client.jar),它尝试使用在另一个 JAR(我们称之为 modele.jar)中定义的实体/daos。 在 client.jar 中,我有这段代码:

public class ImportService implements IServices {
    @EJB(mappedName = "java:global/tab.transmodel/VersionHoraireHome!org.avm.business.transmodel.VersionDAO")
private VersionDAO<VersionHoraire, Integer> vdhDao;

在 src/main/resources/META-INF 我有一个 jboss-deployment-structure.xml 文件:

<?xml version="1.0"?>
<jboss-deployment-structure
xmlns="urn:jboss:deployment-structure:1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<deployment>
    <dependencies>
    <module name="deployment.modele.jar"/>
    </dependencies>
</deployment>
</jboss-deployment-structure>

如果&lt;module name="deployment.modele.jar"/&gt; 行被注释掉,那么我有错误:

(...) 
Caused by: java.lang.NoClassDefFoundError: Lorg/avm/business/transmodel/VersionDAO;
at java.base/java.lang.Class.getDeclaredFields0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredFields(Class.java:3024)
at java.base/java.lang.Class.getDeclaredFields(Class.java:2205)
at org.jboss.as.server//org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:72)
at org.jboss.as.server//org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70)
... 10 more

如果&lt;module name="deployment.modele.jar"/&gt; 行没有被注释,那么我有错误:

Caused by: java.lang.IllegalArgumentException: WFLYWELD0037: Error injecting persistence unit into CDI managed bean. Can't find a persistence unit named 'manager' in deployment client.jar for injection point private javax.persistence.EntityManager org.avm.business.transmodel.EquipementHome.entityManager
at org.jboss.as.weld.jpa//org.jboss.as.weld.services.bootstrap.WeldJpaInjectionServices.getScopedPUName(WeldJpaInjectionServices.java:114)
at org.jboss.as.weld.jpa//org.jboss.as.weld.services.bootstrap.WeldJpaInjectionServices.registerPersistenceContextInjectionPoint(WeldJpaInjectionServices.java:77)
at org.jboss.weld.core//org.jboss.weld.injection.ResourceInjectionFactory$PersistenceContextResourceInjectionProcessor.getResourceReferenceFactory(ResourceInjectionFactory.java:350)
at org.jboss.weld.core//org.jboss.weld.injection.ResourceInjectionFactory$PersistenceContextResourceInjectionProcessor.getResourceReferenceFactory(ResourceInjectionFactory.java:338)
at org.jboss.weld.core//org.jboss.weld.injection.ResourceInjectionFactory$ResourceInjectionProcessor.createFieldResourceInjection(ResourceInjectionFactory.java:216)

是的,我在 modele.jar (src/main/resources/META-INF) 中有一个 persistence.xml 文件,它定义了一个持久性单元:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
         version="2.0">
<persistence-unit name="manager">
    <jta-data-source>java:/OracleDS</jta-data-source>
    <properties>
        <property name="hibernate.hbm2ddl.auto" value="update" />        
        <property name="hibernate.cache.use_second_level_cache" value="true" />   
     </properties>
</persistence-unit>

我迷路了:( 如果 JEE 大师可以提供帮助,我将不胜感激 :)

顺便说一句:wildfly11、java1.8、Eclipse。

【问题讨论】:

    标签: jpa wildfly cdi java-ee-6


    【解决方案1】:

    最后,我找到了一种解决方案...我为 modele 生成了一个客户端:在我添加的 POM 中:

    <generateClient>true</generateClient>
        <clientIncludes>
            <clientInclude>modele/dao/*.class</clientInclude>
            <clientInclude>modele/entity/*.class</clientInclude>
        </clientIncludes>
    

    在客户端的 src/main/resources/META-INF/jboss-deployment-structure.xml 中:

    <?xml version="1.0"?>
    <jboss-deployment-structure
    xmlns="urn:jboss:deployment-structure:1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <deployment>
        <dependencies>
            <module name="deployment.modele-client.jar" />
        </dependencies>
    </deployment>
    </jboss-deployment-structure>
    

    那就行了 :) 我想知道大师会如何看待这个解决方案?这是正确的做法吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-21
      • 2021-02-27
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多