[jboss-cvs] JBossAS SVN: r82677 - in projects/webbeans-ri-int/trunk: jbossas and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jan 7 14:31:07 EST 2009


Author: petemuir
Date: 2009-01-07 14:31:07 -0500 (Wed, 07 Jan 2009)
New Revision: 82677

Modified:
   projects/webbeans-ri-int/trunk/jbossas/pom.xml
   projects/webbeans-ri-int/trunk/jbossas/src/main/java/org/jboss/webbeans/integration/jbossas/ejb/JBossEjbResolver.java
   projects/webbeans-ri-int/trunk/jbossas/src/main/java/org/jboss/webbeans/integration/jbossas/util/JBossEjb.java
   projects/webbeans-ri-int/trunk/pom.xml
Log:
start work on @PersistenceContext

Modified: projects/webbeans-ri-int/trunk/jbossas/pom.xml
===================================================================
--- projects/webbeans-ri-int/trunk/jbossas/pom.xml	2009-01-07 18:53:09 UTC (rev 82676)
+++ projects/webbeans-ri-int/trunk/jbossas/pom.xml	2009-01-07 19:31:07 UTC (rev 82677)
@@ -33,6 +33,12 @@
       <artifactId>jboss-ejb3-common</artifactId>
       <scope>provided</scope>
     </dependency>
+    
+    <dependency>
+       <groupId>org.jboss.jpa</groupId>
+       <artifactId>jboss-jpa-deployers</artifactId>
+       <scope>provided</scope>
+    </dependency>
 
     <dependency>
       <groupId>javax.servlet</groupId>

Modified: projects/webbeans-ri-int/trunk/jbossas/src/main/java/org/jboss/webbeans/integration/jbossas/ejb/JBossEjbResolver.java
===================================================================
--- projects/webbeans-ri-int/trunk/jbossas/src/main/java/org/jboss/webbeans/integration/jbossas/ejb/JBossEjbResolver.java	2009-01-07 18:53:09 UTC (rev 82676)
+++ projects/webbeans-ri-int/trunk/jbossas/src/main/java/org/jboss/webbeans/integration/jbossas/ejb/JBossEjbResolver.java	2009-01-07 19:31:07 UTC (rev 82677)
@@ -5,18 +5,27 @@
 import java.lang.reflect.Method;
 
 import javax.ejb.EJB;
+import javax.persistence.EntityManagerFactory;
 import javax.persistence.PersistenceContext;
+import javax.persistence.PersistenceContextType;
 import javax.servlet.ServletContext;
 import javax.webbeans.DefinitionException;
 import javax.webbeans.InjectionPoint;
 
 import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.ejb3.common.deployers.spi.AttachmentNames;
 import org.jboss.ejb3.common.resolvers.spi.EjbReference;
+import org.jboss.jpa.deployment.ManagedEntityManagerFactory;
+import org.jboss.jpa.deployment.PersistenceUnitDeployment;
+import org.jboss.jpa.injection.InjectedEntityManagerFactory;
+import org.jboss.jpa.resolvers.PersistenceUnitDependencyResolver;
 import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.metadata.ejb.jboss.JBossMetaData;
 import org.jboss.webbeans.ejb.spi.EjbResolver;
 import org.jboss.webbeans.integration.jbossas.util.JBossEjb;
 import org.jboss.webbeans.integration.jbossas.vdf.KernelControllerVDFConnector;
 import org.jboss.webbeans.integration.jbossas.vdf.VFSDeploymentUnitVDFConnector;
+import org.jboss.webbeans.resources.spi.Naming;
 
 public class JBossEjbResolver implements EjbResolver
 {
@@ -42,7 +51,7 @@
       topLevelDeploymentUnit = du.getTopLevel();
    }
 
-   public String resolveEjb(InjectionPoint injectionPoint)
+   public Object resolveEjb(InjectionPoint injectionPoint, Naming naming)
    {
       EJB annotation = injectionPoint.getAnnotation(EJB.class);
       // Get properties from the annotation
@@ -71,13 +80,22 @@
          }
       }
 
-      return JBossEjb.lookupEjbReferenceResolver(controller).resolveEjb(topLevelDeploymentUnit, new EjbReference(beanName, beanInterface, mappedName));
+      String jndiName = JBossEjb.lookupEjbReferenceResolver(controller).resolveEjb(topLevelDeploymentUnit, new EjbReference(beanName, beanInterface, mappedName));
+      return naming.lookup(jndiName, Object.class);
    }
 
-   public String resolvePersistenceUnit(InjectionPoint injectionPoint)
+   public EntityManagerFactory resolvePersistenceUnit(InjectionPoint injectionPoint, Naming naming)
    {
-      // TODO Auto-generated method stub
-      return null;
+      if (injectionPoint.getAnnotation(PersistenceContext.class).type().equals(PersistenceContextType.EXTENDED))
+      {
+         throw new UnsupportedOperationException("Cannot inject an extended persistence context into " + injectionPoint);
+      }
+      String persistenceUnitName = injectionPoint.getAnnotation(PersistenceContext.class).unitName(); 
+      PersistenceUnitDependencyResolver persistenceUnitDependencyResolver = JBossEjb.lookupPersistenceUnitDependencyResolver(controller);
+      String beanName = getPersistenceUnitSupplier(topLevelDeploymentUnit, persistenceUnitDependencyResolver, persistenceUnitName);
+      PersistenceUnitDeployment deployment = JBossEjb.lookupPersistenceUnitDeployment(beanName, controller);
+      ManagedEntityManagerFactory managedFactory = deployment.getManagedFactory();
+      return new InjectedEntityManagerFactory(managedFactory);
    }
 
    public Class<? extends Annotation> getEJBAnnotation()
@@ -90,4 +108,28 @@
       return PersistenceContext.class;
    }
    
+   private String getPersistenceUnitSupplier(DeploymentUnit deploymentUnit, PersistenceUnitDependencyResolver persistenceUnitDependencyResolver, String persistenceUnitName)
+   {
+      if (deploymentUnit.getAttachment(AttachmentNames.PROCESSED_METADATA, JBossMetaData.class) != null && deploymentUnit.getAttachment(JBossMetaData.class).isEJB3x())
+      {
+         try
+         {
+            return persistenceUnitDependencyResolver.resolvePersistenceUnitSupplier(deploymentUnit, persistenceUnitName);
+         }
+         catch (IllegalArgumentException e) 
+         {
+            // No-op, means we can't find the PU in this DU
+         }
+      }
+      for (DeploymentUnit child : deploymentUnit.getChildren())
+      {
+         String beanName = getPersistenceUnitSupplier(child, persistenceUnitDependencyResolver, persistenceUnitName);
+         if (beanName != null)
+         {
+            return beanName;
+         }
+      }
+      return null;
+   }
+   
 }

Modified: projects/webbeans-ri-int/trunk/jbossas/src/main/java/org/jboss/webbeans/integration/jbossas/util/JBossEjb.java
===================================================================
--- projects/webbeans-ri-int/trunk/jbossas/src/main/java/org/jboss/webbeans/integration/jbossas/util/JBossEjb.java	2009-01-07 18:53:09 UTC (rev 82676)
+++ projects/webbeans-ri-int/trunk/jbossas/src/main/java/org/jboss/webbeans/integration/jbossas/util/JBossEjb.java	2009-01-07 19:31:07 UTC (rev 82677)
@@ -3,6 +3,8 @@
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.ejb3.common.resolvers.spi.EjbReferenceResolver;
+import org.jboss.jpa.deployment.PersistenceUnitDeployment;
+import org.jboss.jpa.resolvers.PersistenceUnitDependencyResolver;
 import org.jboss.kernel.spi.dependency.KernelController;
 
 /**
@@ -39,6 +41,7 @@
    }
    
    private static final String MC_BEAN_NAME_EJB_REFERENCE_RESOLVER = "org.jboss.ejb3.EjbReferenceResolver";
+   private static final String MC_BEAN_NAME_PERSISTENCE_UNIT_DEPENDENCY_RESOLVER = "PersistenceUnitDependencyResolver";
       
  
    /**
@@ -56,6 +59,38 @@
          throw new IllegalStateException("EjbReferenceResolver cannot be found, check that you have correctly updated JBoss EJB3");
       }
    }
+   
+   /**
+    * Get the EjbReferenceResolver from the MC controller
+    * @return the EjbReferenceResolver
+    */
+   public static PersistenceUnitDependencyResolver lookupPersistenceUnitDependencyResolver(KernelController controller)
+   {
+      try
+      {
+         return (PersistenceUnitDependencyResolver) lookup(MC_BEAN_NAME_PERSISTENCE_UNIT_DEPENDENCY_RESOLVER, false, controller);
+      }
+      catch (NoSuchInstantiatedBeanException e) 
+      {
+         throw new IllegalStateException("PersistenceUnitDependencyResolver cannot be found");
+      }
+   }
+   
+   /**
+    * Get the EjbReferenceResolver from the MC controller
+    * @return the EjbReferenceResolver
+    */
+   public static PersistenceUnitDeployment lookupPersistenceUnitDeployment(String name, KernelController controller)
+   {
+      try
+      {
+         return (PersistenceUnitDeployment) lookup(name, false, controller);
+      }
+      catch (NoSuchInstantiatedBeanException e) 
+      {
+         throw new IllegalStateException("PersistenceUnitDeployment " + name + " cannot be found");
+      }
+   }
 
    /**
     * Get the bean from the MC controller.

Modified: projects/webbeans-ri-int/trunk/pom.xml
===================================================================
--- projects/webbeans-ri-int/trunk/pom.xml	2009-01-07 18:53:09 UTC (rev 82676)
+++ projects/webbeans-ri-int/trunk/pom.xml	2009-01-07 19:31:07 UTC (rev 82677)
@@ -35,6 +35,7 @@
     <version.jboss.metadata>1.0.0.CR6</version.jboss.metadata>
     <version.jbossxb>2.0.0.GA</version.jbossxb>
     <version.jboss.ejb3>1.0.0-Beta4</version.jboss.ejb3>
+    <version.jboss.jpa>1.0.0-Beta2</version.jboss.jpa>
     <version.servlet.api>2.5</version.servlet.api>
     <version.org.jboss.test>1.1.1.GA</version.org.jboss.test>
     <version.junit>4.4</version.junit>
@@ -333,6 +334,12 @@
          <artifactId>jboss-ejb3-common</artifactId>
          <version>${version.jboss.ejb3}</version>
       </dependency>
+      
+      <dependency>
+         <groupId>org.jboss.jpa</groupId>
+         <artifactId>jboss-jpa-deployers</artifactId>
+         <version>${version.jboss.jpa}</version>
+      </dependency>
 
       <!-- test dependencies -->
 




More information about the jboss-cvs-commits mailing list