[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