2013-09-13 2 views
1

У меня есть EAR-файл, который определяет EJB-JAR, WAR и множество других JAR-файлов. У меня есть ejb-jar-1.jar, который определяет EJB, службы и объекты. Он также определяет persistence.xml в папке META-INF. В app-war.war я определяю components.xml, который объявляет persistence:entity-manager-factor и persistence:mananged-persistence-context элементов. Теперь в одном из моих сервисов в ejb-jar-1.jar используется аннотация для ввода EntityManager. Но когда код запускается EntityManager, в этом сервисе всегда NULL. Я не уверен, что происходит. И только EntityManager, что он не в состоянии внедрить все другие инъекции работать правильно. Структура проекта ниже.EntityManager не вводится с использованием @PersistenceContext в EJB-JAR [JBOSS 7, Seam 2]

Любые предложения по решению этой проблемы? Указатели также были бы полезны. Я обновляю проект для запуска на JBOSS 7.1.1.Final.

Deployement информация

* JBOSS 7.1.1.FINAL 
* Uses seam framework: jboss-seam-2.2.1.CR2.jar 
* Uses Hibernate 3.4.0.GA 

основного ear.ear

|__META-INF 
| |____jboss-deployment-structure.xml 
| |____application.xml 
| |____jboss-app.xml 
| |____MANIFEST.MF 
|__lib 
| |____somejar.jar 
| |____somejar.jar 
|__ejb-jar-1.jar 
| |____META-INF 
|  |____persistence.xml 
|__ejb-jar-2.jar 
|__jboss-seam-2.2.1.CR2.jar 
|__commons-lang-2.4.jar 
|__commons-codec-1.1.jar 
|__jasypt-1.6.jar 
|__app-war.war 
    |____components.xml 

JBoss развертывания-structure.xml

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> 
    <ear-subdeployments-isolated>false</ear-subdeployments-isolated> 
    <deployment> 
     <exclusions> 
      <module name="javax.faces.api" slot="1.2"/> 
      <module name="com.sun.jsf-impl" slot="1.2"/> 
      <module name="org.hibernate" slot="main"/> 
      <module name="org.hibernate.validator" slot="main"/> 
      <module name="org.apache.commons.lang"/> 
      <module name="org.apache.commons.collections"/> 
      <module name="org.apache.commons.codec"/> 
      <module name="org.picketlink" slot="main"/> 
      <module name="org.picketbox" slot="main"/> 
      <module name="org.javassist" slot="main"/> 
      <module name="org.dom4j" slot="main"/> 
     </exclusions> 
     <dependencies> 
      <module name="javax.faces.api" slot="1.2" export="true"/> 
      <module name="com.sun.jsf-impl" slot="1.2" export="true"/> 
      <module name="org.javassist" slot="1" export="true"/> 
      <module name="org.apache.commons.logging" export="true"/> 
     </dependencies> 
    </deployment> 
    <sub-deployment name="app-war.war"> 
     <exclusions> 
      <module name="javax.faces.api" slot="main"/> 
      <module name="com.sun.jsf-impl" slot="main"/> 
     </exclusions> 
     <dependencies> 
      <module name="javax.faces.api" slot="1.2"/> 
      <module name="com.sun.jsf-impl" slot="1.2"/> 
      <module name="deployment.main-ear.ear.ejb-jar-1.jar" /> 
      <module name="deployment.main-ear.ear.ejb-jar-2.jar" /> 
      <module name="deployment.main-ear.ear.jboss-seam-2.2.1.CR2.jar"/> 
     </dependencies> 
    </sub-deployment> 
    <module name="deployment.main-ear.ear.jasypt-1.6.jar" /> 
    <module name="deployment.main-ear.ear.commons-codec-1.1.jar" /> 
    <module name="deployment.main-ear.ear.commons-lang-2.4.jar" /> 
</jboss-deployment-structure> 

application.xml

<?xml version="1.0" encoding="UTF-8"?> 
<application xmlns="http://java.sun.com/xml/ns/j2ee" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/javaee/application_6.xsd" 
      version="6"> 
    <description>myapp</description> 
    <display-name>myapp</display-name> 
    <initialize-in-order>true</initialize-in-order> 
    <library-directory>lib</library-directory> 
    <module> 
     <ejb>ejb-jar-1.jar</ejb> 
    </module> 
    <module> 
     <ejb>ejb-jar-2.jar</ejb> 
    </module> 
    <module> 
     <ejb>jboss-seam-2.2.1.CR2.jar</ejb> 
    </module> 
    <module> 
     <web> 
      <web-uri>app-war.war</web-uri> 
      <context-root>/app</context-root> 
     </web> 
    </module> 
</application> 

components.xml

<?xml version="1.0" encoding="UTF-8"?> 
<components ...> 
    <core:init debug="@[email protected]" jndi-pattern="@[email protected]" security-enabled="@[email protected]" precedence="30" /> 
    <persistence:entity-manager-factory name="entityManagerFactory" persistence-unit-name="coreUnit" precedence="30"/> 
    <persistence:managed-persistence-context name="entityManager" auto-create="true" entity-manager-factory="#{entityManagerFactory}" precedence="30"/> 
    <security:persistent-permission-resolver permission-store="#{cacheEnabledJpaPermissionStore}" /> 
    <transaction:ejb-transaction precedence="30"/> 
    ... 
</components> 

ответ

1

Проведя три недели по этой проблеме я, наконец, нашел ответ. И ответ просто - это постоянное управление контейнером в JBOSS 7.1.1.Final для вышеупомянутой структуры проекта, то есть EAR и технологии нарушены. Возможно, он работает на WAR, я не уверен. Но это не работает для проекта на основе EAR.

Обновление до EAP 6.1.0.Final + и оно будет работать.

Разница в 2 строит то, что persistence.xml читается в начале контейнером в EAP 6.1.0 сборки, но 7.1.1.Final никогда не пытается читать persistence.xml и, следовательно, никогда не создает EntityManagerFactory.

Надеюсь, это поможет другим.

+0

Вы также задали их на https://community.jboss.org/thread/232590 тоже – KNU

Смежные вопросы