Uploaded image for project: 'EJB 3.0'
  1. EJB 3.0
  2. EJBTHREE-1252

@PersistenceContext injection from a different jar fails

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major Major
    • None
    • AS 4.2.2.GA
    • core
    • None
    • Workaround Exists
    • Hide

      Prefix the "unitName" in the @PersistenceContext injection with random 3 letters.

      Show
      Prefix the "unitName" in the @PersistenceContext injection with random 3 letters.

      I have a sample application with an EJB3 SLSB which is being injected with a PersistenceContext which is configured in a different jar file as follows

      package org.myapp.ejb.impl;

      import javax.ejb.Remote;
      import javax.ejb.Stateless;
      import javax.persistence.EntityManager;
      import javax.persistence.PersistenceContext;

      import org.jboss.annotation.ejb.RemoteBinding;
      import org.myapp.ejb.AppManager;

      @Stateless
      @Remote (

      {AppManager.class}

      )
      @RemoteBinding (jndiBinding = "AppManagerBean")
      public class AppManagerBean implements AppManager {

      @PersistenceContext (unitName="myapp_ejb3.jar#EJB3Persistence")
      private EntityManager em;

      public String getVersion()

      { System.out.println("EM is " + em); return "1.0"; }

      }

      The application is deployed as an EAR file in the following structure:

      EJB3Persistence.ear

      — META-INF
       
        — META-INF
         
          — application.xml
         
          — jboss-app.xml
      — myapp_ejb3.jar (contains the persistence.xml)
       
        — META-INF
         
          — persistence.xml
      — another_ejb3.jar (contains the SLSB)
       
       
        — META-INF
       
        — org.myapp.ejb.impl.AppManagerBean

      When this application is deployed in 4.2.2 the deployment fails with an exception. Part of the exception is pasted below. The relevant log files (ConsoleLog_Fail.txt and serverLog_fail.txt in the logs.zip file) are attached.

      22:45:41,137 INFO [JmxKernelAbstraction] creating wrapper delegate for: org.jboss.ejb3.stateless.StatelessContainer
      22:45:41,152 INFO [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=EJB3Persistence.ear,jar=another_ejb3.jar,name=AppManagerBean,service=EJB3 with dependencies:
      22:45:41,152 INFO [JmxKernelAbstraction] persistence.units:jar=pp_ejb3.jar,unitName=EJB3Persistence
      22:45:41,152 INFO [EJB3Deployer] Deployed: file:/D:/JBoss-4.2.2/jboss-4.2.2.GA/server/default/tmp/deploy/tmp53619EJB3Persistence.ear-contents/another_ejb3.jar
      22:45:41,168 INFO [EARDeployer] Started J2EE application: file:/D:/JBoss-4.2.2/jboss-4.2.2.GA/server/default/deploy/EJB3Persistence.ear
      22:45:41,184 ERROR [URLDeploymentScanner] Incomplete Deployment listing:

      — MBeans waiting for other MBeans —
      ObjectName: jboss.j2ee:ear=EJB3Persistence.ear,jar=another_ejb3.jar,name=AppManagerBean,service=EJB3
      State: NOTYETINSTALLED
      I Depend On:
      persistence.units:jar=pp_ejb3.jar,unitName=EJB3Persistence

      — MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM —
      ObjectName: persistence.units:jar=pp_ejb3.jar,unitName=EJB3Persistence
      State: NOTYETINSTALLED
      Depends On Me:
      jboss.j2ee:ear=EJB3Persistence.ear,jar=another_ejb3.jar,name=AppManagerBean,service=EJB3

      If i change the PersistenceContext injection, in the bean, to prefix 3 random letters to the unitName as follows:

      @PersistenceContext (unitName="XXXmyapp_ejb3.jar#EJB3Persistence")
      private EntityManager em;

      and deploy the application, then everything works fine (have also attached the successful logs ConsoleLogs_Success.txt and serverLogs_Success.txt in the logs.zip file).

              arubinge@redhat.com Andrew Rubinger (Inactive)
              jaikiran Jaikiran Pai (Inactive)
              Votes:
              4 Vote for this issue
              Watchers:
              6 Start watching this issue

                Created:
                Updated: