You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2006/12/11 19:57:02 UTC
svn commit: r485813 - in /incubator/openejb/trunk/openejb3:
container/openejb-core/src/main/java/org/apache/openejb/alt/config/
container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/
container/openejb-core/src/main/java/org/apache/o...
Author: dblevins
Date: Mon Dec 11 10:57:01 2006
New Revision: 485813
URL: http://svn.apache.org/viewvc?view=rev&rev=485813
Log:
Patch from Manu George OPENEJB-383: ENC: persistence-unit-ref
Thanks Manu!
Added:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/PersistenceUnitReference.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/Customer.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/persistence.xml
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/DeploymentsFactory.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessContainerTest.java
incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/GlobalJndiDataSourceResolver.java
incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/PersistenceDeployer.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateless/EncStatelessBean.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java?view=diff&rev=485813&r1=485812&r2=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java Mon Dec 11 10:57:01 2006
@@ -31,6 +31,7 @@
import org.apache.openejb.jee.EjbRef;
import org.apache.openejb.jee.EnvEntry;
import org.apache.openejb.jee.JndiConsumer;
+import org.apache.openejb.jee.PersistenceUnitRef;
import org.apache.openejb.jee.ResourceRef;
import org.apache.openejb.jee.Injectable;
import org.apache.openejb.jee.InjectionTarget;
@@ -111,8 +112,13 @@
private List<PersistenceUnitInfo> buildPersistenceUnitRefInfos(JndiConsumer jndiConsumer) {
ArrayList<PersistenceUnitInfo> infos = new ArrayList<PersistenceUnitInfo>();
- // TODO: Marshall the data over
- return infos;
+ for (PersistenceUnitRef puRef : jndiConsumer.getPersistenceUnitRef()) {
+ PersistenceUnitInfo info = new PersistenceUnitInfo();
+ info.referenceName = puRef.getPersistenceUnitRefName();
+ info.persistenceUnitName = puRef.getPersistenceUnitName();
+ infos.add(info);
+ }
+ return infos;
}
private void buildAmbiguousEjbRefInfos(JndiEncInfo jndi, JndiConsumer jndiConsumer, String referringComponent) throws OpenEJBException {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?view=diff&rev=485813&r1=485812&r2=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Mon Dec 11 10:57:01 2006
@@ -16,34 +16,41 @@
*/
package org.apache.openejb.assembler.classic;
-import org.apache.openejb.EnvProps;
-import org.apache.openejb.OpenEJBException;
import org.apache.openejb.Container;
import org.apache.openejb.DeploymentInfo;
+import org.apache.openejb.EnvProps;
import org.apache.openejb.Injection;
-import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.OpenEJBException;
import org.apache.openejb.core.ConnectorReference;
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.core.TransactionManagerWrapper;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.persistence.GlobalJndiDataSourceResolver;
+import org.apache.openejb.persistence.PersistenceDeployer;
+import org.apache.openejb.persistence.PersistenceDeployerException;
import org.apache.openejb.spi.SecurityService;
+import org.apache.openejb.util.Logger;
import org.apache.openejb.util.OpenEJBErrorHandler;
import org.apache.openejb.util.SafeToolkit;
-import org.apache.openejb.util.Logger;
+import org.apache.xbean.finder.ResourceFinder;
import org.apache.xbean.recipe.ObjectRecipe;
import org.apache.xbean.recipe.StaticRecipe;
+import javax.naming.Context;
+import javax.persistence.EntityManagerFactory;
import javax.resource.spi.ConnectionManager;
import javax.resource.spi.ManagedConnectionFactory;
import javax.transaction.TransactionManager;
-import javax.naming.Context;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Properties;
import java.util.List;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.net.URLClassLoader;
-import java.io.File;
+import java.util.Map;
+import java.util.Properties;
public class Assembler extends AssemblerTool implements org.apache.openejb.spi.Assembler {
@@ -235,9 +242,25 @@
ClassLoader classLoader = new URLClassLoader(jars.toArray(new URL[]{}), org.apache.openejb.OpenEJB.class.getClassLoader());
EjbJarBuilder ejbJarBuilder = new EjbJarBuilder(classLoader);
-
+ HashMap<String, Map> allFactories = new HashMap();
for (EjbJarInfo ejbJar : appInfo.ejbJars) {
- deployments2.putAll(ejbJarBuilder.build(ejbJar));
+ PersistenceDeployer pm = null;
+ Map<String, EntityManagerFactory> factories = null;
+ try {
+ pm = new PersistenceDeployer(new GlobalJndiDataSourceResolver(null));
+ URL url = new File(ejbJar.jarPath).toURL();
+ ClassLoader tmpClassLoader = new URLClassLoader(new URL[]{url}, classLoader);
+ ResourceFinder resourceFinder = new ResourceFinder("",tmpClassLoader,url);
+ factories = pm.deploy(resourceFinder.findAll("META-INF/persistence.xml"),classLoader);
+ } catch (PersistenceDeployerException e1) {
+ throw new OpenEJBException(e1);
+ } catch (IOException e) {
+ throw new OpenEJBException(e);
+ }
+ allFactories.put(ejbJar.jarPath,factories);
+ }
+ for (EjbJarInfo ejbJar : appInfo.ejbJars) {
+ deployments2.putAll(ejbJarBuilder.build(ejbJar,allFactories));
}
for (ClientInfo clientInfo : appInfo.clients) {
@@ -336,4 +359,5 @@
SystemInstance.get().setComponent(TransactionManager.class, transactionManager);
containerSystem.getJNDIContext().bind("java:openejb/TransactionManager", transactionManager);
}
+
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java?view=diff&rev=485813&r1=485812&r2=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java Mon Dec 11 10:57:01 2006
@@ -17,12 +17,13 @@
*/
package org.apache.openejb.assembler.classic;
-import java.util.HashMap;
-
import org.apache.openejb.DeploymentInfo;
import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.util.Messages;
import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.util.Messages;
+
+import java.util.HashMap;
+import java.util.Map;
/**
* @version $Revision$ $Date$
@@ -36,11 +37,13 @@
this.classLoader = classLoader;
}
- public HashMap<String, DeploymentInfo> build(EjbJarInfo ejbJar) throws OpenEJBException {
+ public HashMap<String, DeploymentInfo> build(EjbJarInfo ejbJar,HashMap<String, Map> allFactories) throws OpenEJBException {
HashMap<String, DeploymentInfo> deployments = new HashMap<String, DeploymentInfo>();
+
+
for (EnterpriseBeanInfo ejbInfo: ejbJar.enterpriseBeans) {
- try {
- EnterpriseBeanBuilder deploymentBuilder = new EnterpriseBeanBuilder(classLoader, ejbInfo, ejbJar.defaultInterceptors);
+ try {
+ EnterpriseBeanBuilder deploymentBuilder = new EnterpriseBeanBuilder(classLoader, ejbInfo, ejbJar.defaultInterceptors,allFactories);
CoreDeploymentInfo deployment = (CoreDeploymentInfo) deploymentBuilder.build();
deployment.setJarPath(ejbJar.jarPath);
deployments.put(ejbInfo.ejbDeploymentId, deployment);
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?view=diff&rev=485813&r1=485812&r2=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java Mon Dec 11 10:57:01 2006
@@ -16,12 +16,12 @@
*/
package org.apache.openejb.assembler.classic;
-import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.SystemException;
import org.apache.openejb.BeanType;
import org.apache.openejb.Injection;
-import org.apache.openejb.core.DeploymentContext;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.SystemException;
import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.core.DeploymentContext;
import org.apache.openejb.core.interceptor.InterceptorData;
import org.apache.openejb.core.ivm.naming.IvmContext;
import org.apache.openejb.util.Messages;
@@ -32,8 +32,9 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
-import java.util.List;
import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
class EnterpriseBeanBuilder {
protected static final Messages messages = new Messages("org.apache.openejb.util.resources");
@@ -41,9 +42,10 @@
private final List<InterceptorInfo> defaultInterceptors;
private final BeanType ejbType;
private final ClassLoader cl;
+ private final Map<String, Map> factories;
private List<Exception> warnings = new ArrayList<Exception>();
- public EnterpriseBeanBuilder(ClassLoader cl, EnterpriseBeanInfo bean, List<InterceptorInfo> defaultInterceptors) {
+ public EnterpriseBeanBuilder(ClassLoader cl, EnterpriseBeanInfo bean, List<InterceptorInfo> defaultInterceptors, Map<String, Map> factories) {
this.bean = bean;
this.defaultInterceptors = defaultInterceptors;
@@ -60,6 +62,7 @@
throw new UnsupportedOperationException("No building support for bean type: " + bean);
}
this.cl = cl;
+ this.factories = factories;
}
static class Loader {
@@ -120,7 +123,7 @@
final String transactionType = bean.transactionType;
- JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(bean.jndiEnc, transactionType, ejbType);
+ JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(bean.jndiEnc, transactionType, ejbType, factories, new File(bean.codebase).getPath());
IvmContext root = (IvmContext) jndiEncBuilder.build();
DeploymentContext deploymentContext = new DeploymentContext(bean.ejbDeploymentId, ejbClass.getClassLoader(), root);
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?view=diff&rev=485813&r1=485812&r2=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java Mon Dec 11 10:57:01 2006
@@ -16,24 +16,30 @@
*/
package org.apache.openejb.assembler.classic;
-import org.apache.openejb.OpenEJBException;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.persistence.EntityManagerFactory;
+import javax.transaction.TransactionManager;
+import javax.transaction.UserTransaction;
+
import org.apache.openejb.BeanType;
+import org.apache.openejb.OpenEJBException;
import org.apache.openejb.core.CoreUserTransaction;
import org.apache.openejb.core.ivm.naming.IntraVmJndiReference;
import org.apache.openejb.core.ivm.naming.IvmContext;
import org.apache.openejb.core.ivm.naming.JndiReference;
import org.apache.openejb.core.ivm.naming.NameNode;
import org.apache.openejb.core.ivm.naming.ParsedName;
+import org.apache.openejb.core.ivm.naming.PersistenceUnitReference;
import org.apache.openejb.core.ivm.naming.Reference;
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.transaction.UserTransaction;
-import javax.transaction.TransactionManager;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
/**
* TODO: This class is essentially an over glorified sym-linker. The names
* we were linking to are no longer guaranteed to be what we assume them to
@@ -49,12 +55,17 @@
private final EjbLocalReferenceInfo[] ejbLocalReferences;
private final EnvEntryInfo[] envEntries;
private final ResourceReferenceInfo[] resourceRefs;
+ private final PersistenceUnitInfo[] persistenceUnitRefs;
+ private final Map<String, EntityManagerFactory> entityManagerFactories;
+ private final Map<String, Map> allFactories;
+ private final String jarPath;
+
public JndiEncBuilder(JndiEncInfo jndiEnc) throws OpenEJBException {
- this(jndiEnc, null, null);
+ this(jndiEnc, null, null, null,null);
}
- public JndiEncBuilder(JndiEncInfo jndiEnc, String transactionType, BeanType ejbType) throws OpenEJBException {
+ public JndiEncBuilder(JndiEncInfo jndiEnc, String transactionType, BeanType ejbType, Map<String, Map> allFactories,String path) throws OpenEJBException {
if (ejbType == null){
referenceWrapper = new DefaultReferenceWrapper();
} else if (ejbType.isEntity()) {
@@ -92,6 +103,26 @@
} else {
resourceRefs = new ResourceReferenceInfo[]{};
}
+
+ if ((jndiEnc != null && jndiEnc.persistenceUnitRefs != null)) {
+ persistenceUnitRefs = jndiEnc.persistenceUnitRefs.toArray(new PersistenceUnitInfo[0]);
+ } else {
+ persistenceUnitRefs = new PersistenceUnitInfo[]{};
+ }
+
+ if(allFactories != null){
+ this.allFactories = allFactories;
+ } else {
+ this.allFactories = new HashMap();
+ }
+
+ this.jarPath = path;
+
+ if(this.allFactories.get(jarPath) != null){
+ entityManagerFactories = this.allFactories.get(jarPath);
+ } else {
+ entityManagerFactories = new HashMap();
+ }
}
public Context build() throws OpenEJBException {
@@ -200,6 +231,26 @@
}
bindings.put(normalize(referenceInfo.referenceName), wrapReference(reference));
}
+
+ for (int i = 0; i < persistenceUnitRefs.length; i++){
+ PersistenceUnitInfo puRefInfo = persistenceUnitRefs[i];
+ Reference reference = null;
+ EntityManagerFactory factory = null;
+ if (puRefInfo.persistenceUnitName != null) {
+ if(puRefInfo.persistenceUnitName.indexOf("#") == -1){
+ factory = entityManagerFactories.get(puRefInfo.persistenceUnitName);
+ }else{
+ factory = findEntityManagerFactory(allFactories,jarPath,puRefInfo.persistenceUnitName);
+ }
+ }else if(entityManagerFactories.size() == 1){
+ factory = entityManagerFactories.values().toArray(new EntityManagerFactory[1])[0];
+ }else{
+ throw new OpenEJBException("Deployment failed as the Persistence Unit could not be located. Try adding the 'persistence-unit-name' tag in ejb-jar.xml ");
+ }
+
+ reference = new PersistenceUnitReference(factory);
+ bindings.put(normalize(puRefInfo.referenceName), wrapReference(reference));
+ }
IvmContext enc = new IvmContext(new NameNode(null, new ParsedName("comp"), null));
try {
@@ -282,5 +333,43 @@
Object wrap(UserTransaction reference) {
return reference;
}
+ }
+
+ /**
+ * This method will currently support paths like ../../xyz/ejbmodule.jar#PuName, ././xyz/ejbmodule.jar#PuName
+ * and ejbmodule.jar#PuName. For all other types of path it will throw an exception stating an invalid
+ * path.The paths are calculated relative to the referencing component jar. See 16.10.2 in ejb core spec.
+ *
+ * @param allFactories
+ * @param path
+ * @param relativePath
+ * @return
+ * @throws OpenEJBException
+ */
+ private EntityManagerFactory findEntityManagerFactory(Map<String, Map> allFactories, String path, String puName) throws OpenEJBException{
+ int index = puName.indexOf("#");
+ String relativePath = puName.substring(0,index);
+ String unitName = puName.substring(index+1,puName.length());
+ if(new File(path).isFile()){
+ path=path.substring(0,path.lastIndexOf(File.separator));
+ }
+ while(relativePath.startsWith("../")){
+ relativePath = relativePath.substring(3,relativePath.length());
+ path = path.substring(0,path.lastIndexOf(File.separator));
+ }
+
+ while(relativePath.startsWith("./")){
+ relativePath = relativePath.substring(2,relativePath.length());
+ }
+ path = path + File.separator + relativePath;
+ path = new File(path).getPath();
+ Map factories = allFactories.get(path);
+ if (factories != null){
+ EntityManagerFactory factory = (EntityManagerFactory)factories.get(unitName);
+ if(factory != null){
+ return factory;
+ }
+ }
+ throw new OpenEJBException("The persistence unit referred by the persistence-unit-name tag "+puName+" could not be found");
}
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/DeploymentsFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/DeploymentsFactory.java?view=diff&rev=485813&r1=485812&r2=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/DeploymentsFactory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/DeploymentsFactory.java Mon Dec 11 10:57:01 2006
@@ -17,25 +17,33 @@
*/
package org.apache.openejb.assembler.spring;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.transaction.TransactionManager;
-
import org.apache.openejb.DeploymentInfo;
-import org.apache.openejb.alt.config.EjbModule;
+import org.apache.openejb.OpenEJBException;
import org.apache.openejb.alt.config.DeploymentLoader;
-import org.apache.openejb.alt.config.EjbJarInfoBuilder;
import org.apache.openejb.alt.config.DeploymentModule;
+import org.apache.openejb.alt.config.EjbJarInfoBuilder;
+import org.apache.openejb.alt.config.EjbModule;
import org.apache.openejb.alt.config.ejb.EjbDeployment;
import org.apache.openejb.assembler.classic.EjbJarBuilder;
import org.apache.openejb.assembler.classic.EjbJarInfo;
import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.persistence.GlobalJndiDataSourceResolver;
+import org.apache.openejb.persistence.PersistenceDeployer;
+import org.apache.openejb.persistence.PersistenceDeployerException;
+import org.apache.xbean.finder.ResourceFinder;
import org.springframework.beans.factory.FactoryBean;
-import sun.tools.jar.resources.jar;
+
+import javax.persistence.EntityManagerFactory;
+import javax.transaction.TransactionManager;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* @org.apache.xbean.XBean element="deployments"
@@ -109,6 +117,28 @@
EjbJarBuilder builder = new EjbJarBuilder(classLoader);
deployments = new HashMap();
+ HashMap<String, Map> allFactories = new HashMap();
+ for (DeploymentModule module : deployedJars) {
+ if (!(module instanceof EjbModule)) {
+ continue;
+ }
+ EjbModule jar = (EjbModule) module;
+ PersistenceDeployer pm = null;
+ Map<String, EntityManagerFactory> factories = null;
+ try {
+ pm = new PersistenceDeployer(new GlobalJndiDataSourceResolver(null));
+ URL url = new File(jar.getJarURI()).toURL();
+ ClassLoader tmpClassLoader = new URLClassLoader(new URL[]{url}, classLoader);
+ ResourceFinder resourceFinder = new ResourceFinder("",tmpClassLoader,url);
+ factories = pm.deploy(resourceFinder.findAll("META-INF/persistence.xml"),classLoader);
+ } catch (PersistenceDeployerException e1) {
+ throw new OpenEJBException(e1);
+ } catch (IOException e) {
+ throw new OpenEJBException(e);
+ }
+ allFactories.put(jar.getJarURI(),factories);
+ }
+
for (DeploymentModule module : deployedJars) {
if (!(module instanceof EjbModule)) {
continue;
@@ -125,7 +155,7 @@
transferMethodTransactionInfos(infoBuilder);
transferMethodPermissionInfos(infoBuilder);
- HashMap<String, DeploymentInfo> ejbs = builder.build(jarInfo);
+ HashMap<String, DeploymentInfo> ejbs = builder.build(jarInfo,allFactories);
for (EjbDeployment data : jar.getOpenejbJar().getEjbDeployment()) {
((CoreDeploymentInfo)ejbs.get(data.getDeploymentId())).setContainer(new ContainerPointer(data.getContainerId()));
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/PersistenceUnitReference.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/PersistenceUnitReference.java?view=auto&rev=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/PersistenceUnitReference.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/PersistenceUnitReference.java Mon Dec 11 10:57:01 2006
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core.ivm.naming;
+
+import javax.naming.NamingException;
+import javax.persistence.EntityManagerFactory;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class PersistenceUnitReference implements Reference{
+
+ private static EntityManagerFactory emf;
+
+ public PersistenceUnitReference(EntityManagerFactory emf) {
+ this.emf = emf;
+ }
+
+ public Object getObject() throws NamingException {
+ return emf;
+ }
+
+}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java?view=diff&rev=485813&r1=485812&r2=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java Mon Dec 11 10:57:01 2006
@@ -191,7 +191,7 @@
EjbJarInfoBuilder infoBuilder = new EjbJarInfoBuilder();
EjbJarBuilder builder = new EjbJarBuilder(this.getClass().getClassLoader());
EjbJarInfo jarInfo = infoBuilder.buildInfo(jar);
- HashMap<String, DeploymentInfo> ejbs = builder.build(jarInfo);
+ HashMap<String, DeploymentInfo> ejbs = builder.build(jarInfo,null);
return ejbs;
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessContainerTest.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessContainerTest.java?view=diff&rev=485813&r1=485812&r2=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessContainerTest.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessContainerTest.java Mon Dec 11 10:57:01 2006
@@ -151,7 +151,7 @@
EjbJarInfoBuilder infoBuilder = new EjbJarInfoBuilder();
EjbJarBuilder builder = new EjbJarBuilder(this.getClass().getClassLoader());
EjbJarInfo jarInfo = infoBuilder.buildInfo(jar);
- HashMap<String, DeploymentInfo> ejbs = builder.build(jarInfo);
+ HashMap<String, DeploymentInfo> ejbs = builder.build(jarInfo,null);
return ejbs;
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/GlobalJndiDataSourceResolver.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/GlobalJndiDataSourceResolver.java?view=diff&rev=485813&r1=485812&r2=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/GlobalJndiDataSourceResolver.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/GlobalJndiDataSourceResolver.java Mon Dec 11 10:57:01 2006
@@ -26,17 +26,19 @@
* @version $Revision$ $Date$
*/
public class GlobalJndiDataSourceResolver implements DataSourceResolver {
- private final InitialContext initialContext;
+ private InitialContext initialContext;
+ private final Properties jndiProperties;
public GlobalJndiDataSourceResolver(Properties jndiProperties) {
- try {
+ this.jndiProperties = jndiProperties;
+ }
+
+ public DataSource getDataSource(String name) throws Exception {
+ try {
initialContext = new InitialContext(jndiProperties);
} catch (NamingException ne) {
throw new RuntimeException(ne);
}
- }
-
- public DataSource getDataSource(String name) throws Exception {
return (DataSource) initialContext.lookup(name);
}
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/PersistenceDeployer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/PersistenceDeployer.java?view=diff&rev=485813&r1=485812&r2=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/PersistenceDeployer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/PersistenceDeployer.java Mon Dec 11 10:57:01 2006
@@ -28,6 +28,7 @@
import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -182,5 +183,19 @@
return factoryList;
}
+
+ public Map<String, EntityManagerFactory> deploy(List<URL> urls,ClassLoader cl) throws PersistenceDeployerException {
+
+ Map<String, EntityManagerFactory> factoryList = new HashMap<String, EntityManagerFactory>();
+ // Read the persistence.xml files
+
+ Iterator<URL> iter = urls.iterator();
+ while (iter.hasNext()) {
+ URL url = iter.next();
+ factoryList.putAll(loadPersistence(cl, url));
+ }
+ return factoryList;
+ }
+
}
Added: incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/Customer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/Customer.java?view=auto&rev=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/Customer.java (added)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/Customer.java Mon Dec 11 10:57:01 2006
@@ -0,0 +1,47 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.test.entity;
+
+import javax.persistence.Entity;
+
+@Entity
+public class Customer {
+
+ private String customerName;
+ private int customerAge;
+ private int id;
+
+ public int getId() {
+ return id;
+ }
+ public void setId(int id) {
+ this.id = id;
+ }
+ public int getCustomerAge() {
+ return customerAge;
+ }
+ public void setCustomerAge(int customerAge) {
+ this.customerAge = customerAge;
+ }
+ public String getCustomerName() {
+ return customerName;
+ }
+ public void setCustomerName(String customerName) {
+ this.customerName = customerName;
+ }
+}
Modified: incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateless/EncStatelessBean.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateless/EncStatelessBean.java?view=diff&rev=485813&r1=485812&r2=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateless/EncStatelessBean.java (original)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateless/EncStatelessBean.java Mon Dec 11 10:57:01 2006
@@ -17,10 +17,12 @@
package org.apache.openejb.test.stateless;
import java.rmi.RemoteException;
+import java.sql.Connection;
import javax.ejb.EJBException;
import javax.ejb.SessionContext;
import javax.naming.InitialContext;
+import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import junit.framework.Assert;
@@ -33,33 +35,33 @@
import org.apache.openejb.test.stateful.BasicStatefulObject;
/**
- *
+ *
* @author <a href="mailto:david.blevins@visi.com">David Blevins</a>
* @author <a href="mailto:Richard@Monson-Haefel.com">Richard Monson-Haefel</a>
*/
public class EncStatelessBean implements javax.ejb.SessionBean{
-
+
private String name;
private SessionContext ejbContext;
-
-
+
+
//=============================
// Home interface methods
- //
- //
+ //
+ //
// Home interface methods
//=============================
-
+
//=============================
// Remote interface methods
- //
+ //
public void lookupEntityBean() throws TestFailureException{
try{
try{
InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
-
+
BasicBmpHome home = (BasicBmpHome) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/bmp_entity"), BasicBmpHome.class );
Assert.assertNotNull("The EJBHome looked up is null",home);
@@ -72,13 +74,13 @@
throw new TestFailureException(afe);
}
}
-
+
public void lookupStatefulBean() throws TestFailureException{
try{
try{
InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
-
+
BasicStatefulHome home = (BasicStatefulHome) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/stateful"), BasicStatefulHome.class );
Assert.assertNotNull("The EJBHome looked up is null",home);
@@ -91,13 +93,13 @@
throw new TestFailureException(afe);
}
}
-
+
public void lookupStatelessBean() throws TestFailureException{
try{
try{
InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
-
+
BasicStatelessHome home = (BasicStatelessHome) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/stateless"), BasicStatelessHome.class );
Assert.assertNotNull("The EJBHome looked up is null",home);
@@ -119,7 +121,7 @@
String expected = new String("1");
String actual = (String)ctx.lookup("java:comp/env/stateless/references/String");
-
+
Assert.assertNotNull("The String looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -130,16 +132,16 @@
throw new TestFailureException(afe);
}
}
-
+
public void lookupDoubleEntry() throws TestFailureException{
try{
try{
InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
-
+
Double expected = new Double(1.0D);
Double actual = (Double)ctx.lookup("java:comp/env/stateless/references/Double");
-
+
Assert.assertNotNull("The Double looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -150,16 +152,16 @@
throw new TestFailureException(afe);
}
}
-
+
public void lookupLongEntry() throws TestFailureException{
try{
try{
InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
-
+
Long expected = new Long(1L);
Long actual = (Long)ctx.lookup("java:comp/env/stateless/references/Long");
-
+
Assert.assertNotNull("The Long looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -170,16 +172,16 @@
throw new TestFailureException(afe);
}
}
-
+
public void lookupFloatEntry() throws TestFailureException{
try{
try{
InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
-
+
Float expected = new Float(1.0F);
Float actual = (Float)ctx.lookup("java:comp/env/stateless/references/Float");
-
+
Assert.assertNotNull("The Float looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -190,16 +192,16 @@
throw new TestFailureException(afe);
}
}
-
+
public void lookupIntegerEntry() throws TestFailureException{
try{
try{
InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
-
+
Integer expected = new Integer(1);
Integer actual = (Integer)ctx.lookup("java:comp/env/stateless/references/Integer");
-
+
Assert.assertNotNull("The Integer looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -210,16 +212,16 @@
throw new TestFailureException(afe);
}
}
-
+
public void lookupShortEntry() throws TestFailureException{
try{
try{
InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
-
+
Short expected = new Short((short)1);
Short actual = (Short)ctx.lookup("java:comp/env/stateless/references/Short");
-
+
Assert.assertNotNull("The Short looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -230,16 +232,16 @@
throw new TestFailureException(afe);
}
}
-
+
public void lookupBooleanEntry() throws TestFailureException{
try{
try{
InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
-
+
Boolean expected = new Boolean(true);
Boolean actual = (Boolean)ctx.lookup("java:comp/env/stateless/references/Boolean");
-
+
Assert.assertNotNull("The Boolean looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -250,16 +252,16 @@
throw new TestFailureException(afe);
}
}
-
+
public void lookupByteEntry() throws TestFailureException{
try{
try{
InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
-
+
Byte expected = new Byte((byte)1);
Byte actual = (Byte)ctx.lookup("java:comp/env/stateless/references/Byte");
-
+
Assert.assertNotNull("The Byte looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -299,6 +301,11 @@
Object obj = ctx.lookup("java:comp/env/datasource");
Assert.assertNotNull("The DataSource is null", obj);
Assert.assertTrue("Not an instance of DataSource", obj instanceof DataSource);
+
+ obj = ctx.lookup("java:comp/env/persistence/TestUnit");
+ EntityManagerFactory emf = (EntityManagerFactory)obj;
+ Assert.assertNotNull("The EntityManagerFactory is null", emf );
+
} catch (Exception e){
Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
}
Modified: incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml?view=diff&rev=485813&r1=485812&r2=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml (original)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml Mon Dec 11 10:57:01 2006
@@ -1276,6 +1276,13 @@
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
+ <persistence-unit-ref>
+ <description>
+ Persistence unit for testing the functionality.
+ </description>
+ <persistence-unit-ref-name>persistence/TestUnit</persistence-unit-ref-name>
+ <persistence-unit-name>openjpa-test-unit</persistence-unit-name>
+ </persistence-unit-ref>
</session>
<!--
Added: incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/persistence.xml?view=auto&rev=485813
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/persistence.xml (added)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/persistence.xml Mon Dec 11 10:57:01 2006
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<persistence>
+ <persistence-unit name="openjpa-test-unit">
+ <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+ <class>org.apache.openejb.test.entity.Customer</class>
+ <jta-data-source>java:openejb/connector/Default JDBC Database</jta-data-source>
+ <properties>
+ <!-- <property name="openjpa.jdbc.SynchronizeMappings"
+ value="buildSchema(ForeignKeys=true)"/> -->
+ <property name="openjpa.ConnectionFactoryMode"
+ value="managed"/>
+ <property name="openjpa.ManagedRuntime" value="org.apache.openjpa.ee.OpenEJBManagedRuntime"/>
+ </properties>
+ </persistence-unit>
+</persistence>
\ No newline at end of file