1 Reply Latest reply on Jun 6, 2014 8:37 AM by Solange Delageniere

    EntityManager not injected using @PersistenceContext in EJB-JAR [JBOSS 7, Seam 2]

    Ron Si Newbie

      I have an EAR file which defines EJB-JAR, WAR and bunch of other JAR files. I have an `ejb-jar-1.jar` which defines EJBs, Services and Entities. It also defines `persistence.xml` in the `META-INF` folder. In the `app-war.war` I define `components.xml` which declares `persistence:entity-manager-factor` and `persistence:mananged-persistence-context` elements. Now, in one of my services in the `ejb-jar-1.jar` uses `@PersistenceContext` annotation for injecting an `EntityManager`. But when the code is run the `EntityManager` in that service is always `NULL`. I'm not sure what's happening. And it is only the `EntityManager` that it is not able to inject all other injections work properly. Project structure is below.

       

      Any suggestions on how to resolve this issue? Pointers would be helpful as well. I'm upgrading project to run on JBOSS 7.1.1.Final.

       

      Deployement Info

       

          * JBOSS 7.1.1.FINAL

          * Uses seam framework: jboss-seam-2.2.1.CR2.jar

          * Uses Hibernate 3.4.0.GA

       

      main-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-deployment-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="@debug@" jndi-pattern="@jndiPattern@" security-enabled="@seamSecurity@" 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>