Ошибка при развертывании структуры jboss - PullRequest
0 голосов
/ 11 мая 2018

Во-первых, это та же проблема, что и JBAS016069: Ошибка при внедрении модуля персистентности в управляемый компонент CDI ». При развертывании WAR с зависимостью от EJB-JAR Но ответа там нет :( и мне не хватает комментариев, и мой запрос не является решением проблемы; поэтому я открываю новый тикет.

В любом случае, у меня есть этот jar (назовем его client.jar), который пытается использовать сущности / daos, определенные в другом JAR (давайте назовем его modele.jar). В 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-deploy-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>

если строка <module name="deployment.modele.jar"/> закомментирована, то у меня ошибка:

(...) 
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

если строка <module name="deployment.modele.jar"/> НЕ закомментирована, то у меня ошибка:

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)

И да, у меня есть файл persistence.xml в modele.jar (src / main / resources / META-INF), который определяет единицу сохранения:

<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.

1 Ответ

0 голосов
/ 13 мая 2018

Наконец-то я нашел какое-то решение ... Я сгенерировал клиента для модели: в POM я добавил:

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

В src / main / resources / META-INF / jboss-deploy-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>

Это делает работу :) Интересно, что бы гуру подумал об этом решении? Это правильный способ сделать?

...