Author: dblevins
Date: Thu Dec 13 22:47:37 2007
New Revision: 604114

URL: http://svn.apache.org/viewvc?rev=604114&view=rev
Log:
Link persistence units during the config phase and simply refer to them during 
assembly.
All persistence units will now be bound into jndi and unbound on undeploy

Added:
    
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/LinkResolverTest.java
   (contents, props changed)
      - copied, changed from r602802, 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/PersistenceUnitRefTest.java
Removed:
    
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/PersistenceUnitRefTest.java
Modified:
    
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatJndiBuilder.java
    
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java

Modified: 
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatJndiBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatJndiBuilder.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatJndiBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatJndiBuilder.java
 Thu Dec 13 22:47:37 2007
@@ -30,6 +30,7 @@
 import org.apache.naming.factory.Constants;
 import org.apache.openejb.Injection;
 import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.assembler.classic.EjbLocalReferenceInfo;
 import org.apache.openejb.assembler.classic.EjbReferenceInfo;
 import org.apache.openejb.assembler.classic.EnvEntryInfo;
@@ -66,6 +67,8 @@
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.transaction.UserTransaction;
+import javax.naming.Context;
+import javax.naming.NamingException;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -77,17 +80,15 @@
     private final StandardContext standardContext;
     private final WebAppInfo webAppInfo;
     private final List<Injection> injections;
-    private final LinkResolver<EntityManagerFactory> emfLinkResolver;
     private final boolean replaceEntry;
     private boolean useCrossClassLoaderRef = true;
     private NamingContextListener namingContextListener;
 
-    public TomcatJndiBuilder(StandardContext standardContext, WebAppInfo 
webAppInfo,List<Injection> injections, LinkResolver<EntityManagerFactory> 
emfLinkResolver) {
+    public TomcatJndiBuilder(StandardContext standardContext, WebAppInfo 
webAppInfo, List<Injection> injections) {
         this.injections = injections;
         this.standardContext = standardContext;
         this.namingContextListener = 
standardContext.getNamingContextListener();
         this.webAppInfo = webAppInfo;
-        this.emfLinkResolver = emfLinkResolver;
 
         String parameter = standardContext.findParameter("openejb.start.late");
         replaceEntry = Boolean.parseBoolean(parameter);
@@ -268,9 +269,12 @@
             resource.setProperty(JNDI_NAME, ref.location.jndiName);
             resource.setProperty(JNDI_PROVIDER_ID, 
ref.location.jndiProviderId);
         } else {
-            EntityManagerFactory factory = 
emfLinkResolver.resolveLink(ref.persistenceUnitName, moduleUri);
-            if (factory == null) {
-                throw new IllegalArgumentException("Persistence unit " + 
ref.persistenceUnitName + " for persistence-context-ref " + ref.referenceName + 
" not found");
+            Context context = 
SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext();
+            EntityManagerFactory factory;
+            try {
+                factory = (EntityManagerFactory) 
context.lookup("openejb/PersistenceUnit/" + ref.unitId);
+            } catch (NamingException e) {
+                throw new IllegalStateException("PersistenceUnit '" + 
ref.unitId + "' not found for EXTENDED ref '" + ref.referenceName + "'");
             }
 
             JtaEntityManagerRegistry jtaEntityManagerRegistry = 
SystemInstance.get().getComponent(JtaEntityManagerRegistry.class);

Modified: 
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java
 Thu Dec 13 22:47:37 2007
@@ -42,7 +42,6 @@
 import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.LinkResolver;
-import org.apache.openejb.assembler.classic.UniqueDefaultLinkResolver;
 import org.apache.openejb.assembler.classic.WebAppBuilder;
 import org.apache.openejb.assembler.classic.WebAppInfo;
 import org.apache.openejb.assembler.classic.EjbJarInfo;
@@ -148,7 +147,7 @@
     // OpenEJB WebAppBuilder
     //
 
-    public void deployWebApps(AppInfo appInfo, 
LinkResolver<EntityManagerFactory> emfLinkResolver, ClassLoader classLoader) 
throws Exception {
+    public void deployWebApps(AppInfo appInfo, ClassLoader classLoader) throws 
Exception {
         for (WebAppInfo webApp : appInfo.webApps) {
             if (getContextInfo(webApp) == null) {
                 StandardContext standardContext = new StandardContext();
@@ -167,7 +166,6 @@
                     contextInfo.appInfo = appInfo;
                     contextInfo.deployer = deployer;
                     contextInfo.standardContext = standardContext;
-                    contextInfo.emfLinkResolver = emfLinkResolver;
                     deployer.manageApp(standardContext);
                 }
             }
@@ -229,10 +227,8 @@
                     AppInfo appInfo = 
configurationFactory.configureApplication(appModule);
                     contextInfo.appInfo = appInfo;
 
-                    LinkResolver<EntityManagerFactory> emfLinkResolver = new 
UniqueDefaultLinkResolver<EntityManagerFactory>();
-                    assembler.createApplication(contextInfo.appInfo, 
emfLinkResolver, standardContext.getLoader().getClassLoader());
+                    assembler.createApplication(contextInfo.appInfo, 
standardContext.getLoader().getClassLoader());
                     // todo add watched resources to context
-                    contextInfo.emfLinkResolver = emfLinkResolver;
                 } catch (Exception e) {
                     logger.error("Unable to deploy collapsed ear in war " + 
standardContext.getPath() + ": Exception: " + e.getMessage(), e);
                 }
@@ -259,7 +255,7 @@
                 List<Injection> injections = 
injectionBuilder.buildInjections(webAppInfo.jndiEnc);
 
                 // merge OpenEJB jndi into Tomcat jndi
-                TomcatJndiBuilder jndiBuilder = new 
TomcatJndiBuilder(standardContext, webAppInfo, injections, 
contextInfo.emfLinkResolver);
+                TomcatJndiBuilder jndiBuilder = new 
TomcatJndiBuilder(standardContext, webAppInfo, injections);
                 jndiBuilder.mergeJndi();
 
                 // add WebDeploymentInfo to ContainerSystem

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 Thu Dec 13 22:47:37 2007
@@ -362,7 +362,7 @@
         AppInfo appInfo = new AppInfo();
         appInfo.jarPath = ejbJar.jarPath;
         appInfo.ejbJars.add(ejbJar);
-        createApplication(appInfo, emfLinkResolver, classLoader);
+        createApplication(appInfo, classLoader);
     }
 
     public void createClient(ClientInfo clientInfo) throws NamingException, 
IOException, OpenEJBException {
@@ -376,7 +376,7 @@
         AppInfo appInfo = new AppInfo();
         appInfo.jarPath = clientInfo.moduleId;
         appInfo.clients.add(clientInfo);
-        createApplication(appInfo, null, classLoader);
+        createApplication(appInfo, classLoader);
     }
 
     public void createConnector(ConnectorInfo connectorInfo) throws 
NamingException, IOException, OpenEJBException {
@@ -390,7 +390,7 @@
         AppInfo appInfo = new AppInfo();
         appInfo.jarPath = connectorInfo.moduleId;
         appInfo.connectors.add(connectorInfo);
-        createApplication(appInfo, null, classLoader);
+        createApplication(appInfo, classLoader);
     }
 
     public void createWebApp(WebAppInfo webAppInfo) throws NamingException, 
IOException, OpenEJBException {
@@ -404,21 +404,17 @@
         AppInfo appInfo = new AppInfo();
         appInfo.jarPath = webAppInfo.moduleId;
         appInfo.webApps.add(webAppInfo);
-        createApplication(appInfo, null, classLoader);
+        createApplication(appInfo, classLoader);
     }
 
     public void createApplication(AppInfo appInfo) throws OpenEJBException, 
IOException, NamingException {
-        createApplication(appInfo, null, createAppClassLoader(appInfo));
+        createApplication(appInfo, createAppClassLoader(appInfo));
     }
 
     public void createApplication(AppInfo appInfo, ClassLoader classLoader) 
throws OpenEJBException, IOException, NamingException {
-        createApplication(appInfo, null, classLoader);
-    }
-
-    public void createApplication(AppInfo appInfo, 
LinkResolver<EntityManagerFactory> emfLinkResolver, ClassLoader classLoader) 
throws OpenEJBException, IOException, NamingException {
 
         logger.info("Assembling app: "+appInfo.jarPath);
-        
+
         List<String> used = new ArrayList<String>();
         for (EjbJarInfo ejbJarInfo : appInfo.ejbJars) {
             for (EnterpriseBeanInfo beanInfo : ejbJarInfo.enterpriseBeans) {
@@ -448,12 +444,11 @@
 
             // JPA - Persistence Units MUST be processed first since they will 
add ClassFileTransformers
             // to the class loader which must be added before any classes are 
loaded
-            emfLinkResolver = emfLinkResolver == null? new 
UniqueDefaultLinkResolver<EntityManagerFactory>(): emfLinkResolver;
             PersistenceBuilder persistenceBuilder = new 
PersistenceBuilder(persistenceClassLoaderHandler);
             for (PersistenceUnitInfo info : appInfo.persistenceUnits) {
                 try {
                     EntityManagerFactory factory = 
persistenceBuilder.createEntityManagerFactory(info, classLoader);
-                    emfLinkResolver.add(info.persistenceUnitRootUrl, 
info.name, factory);
+                    
containerSystem.getJNDIContext().bind("java:openejb/PersistenceUnit/" + 
info.id, factory);
                 } catch (Exception e) {
                     throw new OpenEJBException(e);
                 }
@@ -485,7 +480,7 @@
             // EJB
             EjbJarBuilder ejbJarBuilder = new EjbJarBuilder(props, 
classLoader);
             for (EjbJarInfo ejbJar : appInfo.ejbJars) {
-                HashMap<String, DeploymentInfo> deployments = 
ejbJarBuilder.build(ejbJar, emfLinkResolver);
+                HashMap<String, DeploymentInfo> deployments = 
ejbJarBuilder.build(ejbJar);
 
                 JaccPermissionsBuilder jaccPermissionsBuilder = new 
JaccPermissionsBuilder();
                 PolicyContext policyContext = 
jaccPermissionsBuilder.build(ejbJar, deployments);
@@ -569,7 +564,7 @@
             // WebApp
             WebAppBuilder webAppBuilder = 
SystemInstance.get().getComponent(WebAppBuilder.class);
             if (webAppBuilder != null) {
-                webAppBuilder.deployWebApps(appInfo, emfLinkResolver, 
classLoader);
+                webAppBuilder.deployWebApps(appInfo, classLoader);
             }
 
             logger.info("Deployed Application(path="+appInfo.jarPath+")");
@@ -647,6 +642,14 @@
                 } catch (Throwable t) {
                     undeployException.getCauses().add(new Exception("bean: " + 
deploymentID + ": " + t.getMessage(), t));
                 }
+            }
+        }
+
+        for (PersistenceUnitInfo unitInfo : appInfo.persistenceUnits) {
+            try {
+                globalContext.unbind("openejb/PersistenceUnit/"+unitInfo.id);
+            } catch (Throwable t) {
+                undeployException.getCauses().add(new 
Exception("persistence-unit: " + unitInfo.id + ": " + t.getMessage(), t));
             }
         }
 

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
 Thu Dec 13 22:47:37 2007
@@ -23,7 +23,6 @@
 import org.apache.openejb.core.CoreDeploymentInfo;
 import org.apache.openejb.util.Messages;
 
-import javax.persistence.EntityManagerFactory;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Properties;
@@ -42,14 +41,14 @@
         this.classLoader = classLoader;
     }
 
-    public HashMap<String, DeploymentInfo> build(EjbJarInfo ejbJar, 
LinkResolver<EntityManagerFactory> emfLinkResolver) throws OpenEJBException {
+    public HashMap<String, DeploymentInfo> build(EjbJarInfo ejbJar) throws 
OpenEJBException {
         HashMap<String, DeploymentInfo> deployments = new HashMap<String, 
DeploymentInfo>();
 
         InterceptorBindingBuilder interceptorBindingBuilder = new 
InterceptorBindingBuilder(classLoader, ejbJar);
 
         for (EnterpriseBeanInfo ejbInfo : ejbJar.enterpriseBeans) {
             try {
-                EnterpriseBeanBuilder deploymentBuilder = new 
EnterpriseBeanBuilder(classLoader, ejbInfo, ejbJar.moduleId, new 
ArrayList<String>(), emfLinkResolver);
+                EnterpriseBeanBuilder deploymentBuilder = new 
EnterpriseBeanBuilder(classLoader, ejbInfo, ejbJar.moduleId, new 
ArrayList<String>());
                 CoreDeploymentInfo deployment = (CoreDeploymentInfo) 
deploymentBuilder.build();
 
                 interceptorBindingBuilder.build(deployment, ejbInfo);

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
 Thu Dec 13 22:47:37 2007
@@ -19,6 +19,8 @@
 import org.apache.openejb.BeanType;
 import org.apache.openejb.Injection;
 import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.core.CoreDeploymentInfo;
 import org.apache.openejb.core.DeploymentContext;
 import org.apache.openejb.core.cmp.CmpUtil;
@@ -28,6 +30,7 @@
 import org.apache.openejb.util.Classes;
 
 import javax.naming.Context;
+import javax.naming.NamingException;
 import javax.persistence.EntityManagerFactory;
 import javax.ejb.TimedObject;
 import javax.ejb.Timer;
@@ -45,10 +48,9 @@
     private final List<String> defaultInterceptors;
     private final BeanType ejbType;
     private final ClassLoader cl;
-    private final LinkResolver<EntityManagerFactory> emfLinkResolver;
     private List<Exception> warnings = new ArrayList<Exception>();
 
-    public EnterpriseBeanBuilder(ClassLoader cl, EnterpriseBeanInfo bean, 
String moduleId, List<String> defaultInterceptors, 
LinkResolver<EntityManagerFactory> emfLinkResolver) {
+    public EnterpriseBeanBuilder(ClassLoader cl, EnterpriseBeanInfo bean, 
String moduleId, List<String> defaultInterceptors) {
         this.bean = bean;
         this.moduleId = moduleId;
         this.defaultInterceptors = defaultInterceptors;
@@ -66,7 +68,6 @@
             throw new UnsupportedOperationException("No building support for 
bean type: " + bean);
         }
         this.cl = cl;
-        this.emfLinkResolver = emfLinkResolver;
     }
 
     public Object build() throws OpenEJBException {
@@ -116,7 +117,7 @@
         List<Injection> injections = 
injectionBuilder.buildInjections(bean.jndiEnc);
 
         // build the enc
-        JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(bean.jndiEnc, 
injections, transactionType, emfLinkResolver, moduleId, cl);
+        JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(bean.jndiEnc, 
injections, transactionType, moduleId, cl);
         Context root = jndiEncBuilder.build();
 
         DeploymentContext deploymentContext = new 
DeploymentContext(bean.ejbDeploymentId, cl, root);
@@ -185,8 +186,17 @@
             Map<EntityManagerFactory, Map> extendedEntityManagerFactories = 
new HashMap<EntityManagerFactory, Map>();
             for (PersistenceContextReferenceInfo info : 
statefulBeanInfo.jndiEnc.persistenceContextRefs) {
                 if (info.extended) {
-                    EntityManagerFactory entityManagerFactory = 
emfLinkResolver.resolveLink(info.persistenceUnitName, moduleId);
-                    extendedEntityManagerFactories.put(entityManagerFactory, 
info.properties);
+//                    EntityManagerFactory entityManagerFactory = 
emfLinkResolver.resolveLink(info.persistenceUnitName, moduleId);
+//                    extendedEntityManagerFactories.put(entityManagerFactory, 
info.properties);
+
+                    try {
+                        ContainerSystem containerSystem = 
SystemInstance.get().getComponent(ContainerSystem.class);
+                        Object o = 
containerSystem.getJNDIContext().lookup("openejb/PersistenceUnit/" + 
info.unitId);
+                        
extendedEntityManagerFactories.put((EntityManagerFactory) o, info.properties);
+                    } catch (NamingException e) {
+                        throw new OpenEJBException("PersistenceUnit '" + 
info.unitId + "' not found for EXTENDED ref '" + info.referenceName + "'");
+                    }
+
                 }
             }
             deployment.setExtendedEntityManagerFactories(new 
Index<EntityManagerFactory, Map>(extendedEntityManagerFactories));

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
 Thu Dec 13 22:47:37 2007
@@ -18,6 +18,7 @@
 
 import org.apache.openejb.Injection;
 import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.core.CoreUserTransaction;
 import org.apache.openejb.core.ivm.naming.CrossClassLoaderJndiReference;
 import org.apache.openejb.core.ivm.naming.IntraVmJndiReference;
@@ -28,7 +29,6 @@
 import org.apache.openejb.core.ivm.naming.NameNode;
 import org.apache.openejb.core.ivm.naming.ParsedName;
 import org.apache.openejb.core.ivm.naming.PersistenceContextReference;
-import org.apache.openejb.core.ivm.naming.PersistenceUnitReference;
 import org.apache.openejb.core.ivm.naming.Reference;
 import org.apache.openejb.core.ivm.naming.SystemComponentReference;
 import org.apache.openejb.core.ivm.naming.URLReference;
@@ -83,17 +83,14 @@
     private final List<Injection> injections;
     private final ClassLoader classLoader;
 
-    // JPA factory indexes
-    private final LinkResolver<EntityManagerFactory> emfLinkResolver;
-
     private boolean useCrossClassLoaderRef = true;
     private boolean client = false;
 
     public JndiEncBuilder(JndiEncInfo jndiEnc, List<Injection> injections, 
String moduleId, ClassLoader classLoader) throws OpenEJBException {
-        this(jndiEnc, injections, null, null, moduleId, classLoader);
+        this(jndiEnc, injections, null, moduleId, classLoader);
     }
 
-    public JndiEncBuilder(JndiEncInfo jndiEnc, List<Injection> injections, 
String transactionType, LinkResolver<EntityManagerFactory> emfLinkResolver, 
String moduleId, ClassLoader classLoader) throws OpenEJBException {
+    public JndiEncBuilder(JndiEncInfo jndiEnc, List<Injection> injections, 
String transactionType, String moduleId, ClassLoader classLoader) throws 
OpenEJBException {
         this.jndiEnc = jndiEnc;
         this.injections = injections;
         beanManagedTransactions = transactionType != null && 
transactionType.equalsIgnoreCase("Bean");
@@ -103,7 +100,6 @@
         } catch (URISyntaxException e) {
             throw new OpenEJBException(e);
         }
-        this.emfLinkResolver = emfLinkResolver;
         this.classLoader = classLoader;
     }
 
@@ -174,7 +170,7 @@
 
         // bind TimerService
         bindings.put("java:comp/TimerService", new TimerServiceWrapper());
-        
+
         for (EjbReferenceInfo referenceInfo : jndiEnc.ejbReferences) {
 
             Reference reference = null;
@@ -285,7 +281,7 @@
                     String jndiName = "java:comp/WebServiceContext";
                     linkRef = new LinkRef(jndiName);
                     bindings.put(normalize(referenceInfo.resourceEnvRefName), 
linkRef);
-                    continue;                          
+                    continue;
                 } else if (TimerService.class.equals(type)) {
                     String jndiName = "java:comp/TimerService";
                     linkRef = new LinkRef(jndiName);
@@ -312,41 +308,36 @@
             }
         }
 
-        if (emfLinkResolver != null) {
-            for (PersistenceUnitReferenceInfo referenceInfo : 
jndiEnc.persistenceUnitRefs) {
-                if (referenceInfo.location != null){
-                    Reference reference = 
buildReferenceLocation(referenceInfo.location);
-                    bindings.put(normalize(referenceInfo.referenceName), 
reference);
-                    continue;
-                }
-
-                EntityManagerFactory factory = 
emfLinkResolver.resolveLink(referenceInfo.persistenceUnitName, moduleUri);
-                if (factory == null) {
-                    throw new IllegalArgumentException("Persistence unit " + 
referenceInfo.persistenceUnitName + " for persistence-unit-ref " +
-                            referenceInfo.referenceName + " not found");
-                }
-
-                Reference reference = new PersistenceUnitReference(factory);
+        for (PersistenceUnitReferenceInfo referenceInfo : 
jndiEnc.persistenceUnitRefs) {
+            if (referenceInfo.location != null){
+                Reference reference = 
buildReferenceLocation(referenceInfo.location);
                 bindings.put(normalize(referenceInfo.referenceName), 
reference);
+                continue;
             }
 
-            for (PersistenceContextReferenceInfo contextInfo : 
jndiEnc.persistenceContextRefs) {
-                if (contextInfo.location != null){
-                    Reference reference = 
buildReferenceLocation(contextInfo.location);
-                    bindings.put(normalize(contextInfo.referenceName), 
reference);
-                    continue;
-                }
-
-                EntityManagerFactory factory = 
emfLinkResolver.resolveLink(contextInfo.persistenceUnitName, moduleUri);
-                if (factory == null) {
-                    throw new IllegalArgumentException("Persistence unit \"" + 
contextInfo.persistenceUnitName + "\" for persistence-context-ref " +
-                            contextInfo.referenceName + " not found");
-                }
+            String jndiName = "java:openejb/PersistenceUnit/" + 
referenceInfo.unitId;
+            Reference reference = new IntraVmJndiReference(jndiName);
+            bindings.put(normalize(referenceInfo.referenceName), reference);
+        }
 
-                JtaEntityManager jtaEntityManager = new 
JtaEntityManager(jtaEntityManagerRegistry, factory, contextInfo.properties, 
contextInfo.extended);
-                Reference reference = new 
PersistenceContextReference(jtaEntityManager);
+        for (PersistenceContextReferenceInfo contextInfo : 
jndiEnc.persistenceContextRefs) {
+            if (contextInfo.location != null){
+                Reference reference = 
buildReferenceLocation(contextInfo.location);
                 bindings.put(normalize(contextInfo.referenceName), reference);
+                continue;
             }
+
+            Context context = 
SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext();
+            EntityManagerFactory factory;
+            try {
+                factory = (EntityManagerFactory) 
context.lookup("openejb/PersistenceUnit/" + contextInfo.unitId);
+            } catch (NamingException e) {
+                throw new OpenEJBException("PersistenceUnit '" + 
contextInfo.unitId + "' not found for EXTENDED ref '" + 
contextInfo.referenceName + "'");
+            }
+
+            JtaEntityManager jtaEntityManager = new 
JtaEntityManager(jtaEntityManagerRegistry, factory, contextInfo.properties, 
contextInfo.extended);
+            Reference reference = new 
PersistenceContextReference(jtaEntityManager);
+            bindings.put(normalize(contextInfo.referenceName), reference);
         }
 
         for (ServiceReferenceInfo referenceInfo : jndiEnc.serviceRefs) {

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
 Thu Dec 13 22:47:37 2007
@@ -20,6 +20,6 @@
 import javax.persistence.EntityManagerFactory;
 
 public interface WebAppBuilder {
-    void deployWebApps(AppInfo appInfo, LinkResolver<EntityManagerFactory> 
emfLinkResolver, ClassLoader classLoader) throws Exception;
+    void deployWebApps(AppInfo appInfo, ClassLoader classLoader) throws 
Exception;
     void undeployWebApps(AppInfo appInfo) throws Exception;
 }

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
 Thu Dec 13 22:47:37 2007
@@ -200,7 +200,7 @@
         // Explicitly check if we messed up the "if there's only one,
         // that's what you get" rule by adding our "cmp" unit.
         Collection<PersistenceUnit> cmpUnits = persistenceUnits.values("cmp");
-        if (cmpUnits.size() > 0 && persistenceUnits.values().size() - 
cmpUnits.size() == 1) {
+        if (unit == null && cmpUnits.size() > 0 && 
persistenceUnits.values().size() - cmpUnits.size() == 1) {
             // We did, there is exactly one non-cmp unit.  Let's find it.
             for (PersistenceUnit persistenceUnit : persistenceUnits.values()) {
                 if (!persistenceUnit.getName().equals("cmp")){

Copied: 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/LinkResolverTest.java
 (from r602802, 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/PersistenceUnitRefTest.java)
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/LinkResolverTest.java?p2=openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/LinkResolverTest.java&p1=openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/PersistenceUnitRefTest.java&r1=602802&r2=604114&rev=604114&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/PersistenceUnitRefTest.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/LinkResolverTest.java
 Thu Dec 13 22:47:37 2007
@@ -17,76 +17,32 @@
 package org.apache.openejb.assembler.classic;
 
 import java.util.Map;
+import java.net.URI;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.EntityManager;
 
 import junit.framework.TestCase;
-import org.apache.openejb.persistence.JtaEntityManagerRegistry;
-import org.apache.openejb.loader.SystemInstance;
 
-public class PersistenceUnitRefTest extends TestCase {
+public class LinkResolverTest extends TestCase {
+
     public void test() throws Exception {
-        SystemInstance.get().setComponent(JtaEntityManagerRegistry.class, new 
JtaEntityManagerRegistry(null));
+        LinkResolver<Thing> resolver = new LinkResolver<Thing>();
+
+        resolver.add("my/module.jar", "one", Thing.ONE);
+        resolver.add("some/other.jar", "two", Thing.TWO);
 
-        JndiEncInfo jndiEncInfo = new JndiEncInfo();
+        URI moduleUri = URI.create("my/module.jar");
 
-        PersistenceContextReferenceInfo referenceInfo = new 
PersistenceContextReferenceInfo();
-        referenceInfo.referenceName = "one";
-        referenceInfo.persistenceUnitName = "one";
-        jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
-        referenceInfo = new PersistenceContextReferenceInfo();
-        referenceInfo.referenceName = "two";
-        referenceInfo.persistenceUnitName = "two";
-        jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
-        referenceInfo = new PersistenceContextReferenceInfo();
-        referenceInfo.referenceName = "#one";
-        referenceInfo.persistenceUnitName = "#one";
-        jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
-        referenceInfo = new PersistenceContextReferenceInfo();
-        referenceInfo.referenceName = "module.jar#one";
-        referenceInfo.persistenceUnitName = "module.jar#one";
-        jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
-        referenceInfo = new PersistenceContextReferenceInfo();
-        referenceInfo.referenceName = "dotdot/my/module.jar#one";
-        referenceInfo.persistenceUnitName = "../my/module.jar#one";
-        jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
-        referenceInfo = new PersistenceContextReferenceInfo();
-        referenceInfo.referenceName = "dotdot/my/dot/module.jar#one";
-        referenceInfo.persistenceUnitName = "../my/./module.jar#one";
-        jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
-        referenceInfo = new PersistenceContextReferenceInfo();
-        referenceInfo.referenceName = "dotdot/some/dot/other.jar#two";
-        referenceInfo.persistenceUnitName = "../some/./other.jar#two";
-        jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
-        LinkResolver<EntityManagerFactory> emfLinkResolver = new 
LinkResolver<EntityManagerFactory>();
-        emfLinkResolver.add("my/module.jar", "one", new 
MockEntityManagerFactory());
-        emfLinkResolver.add("some/other.jar", "two", new 
MockEntityManagerFactory());
+        assertEquals(Thing.ONE, resolver.resolveLink("one", moduleUri));
+        assertEquals(Thing.ONE, resolver.resolveLink("module.jar#one", 
moduleUri));
+        assertEquals(Thing.ONE, resolver.resolveLink("../my/module.jar#one", 
moduleUri));
+        assertEquals(Thing.ONE, resolver.resolveLink("../my/./module.jar#one", 
moduleUri));
 
-        JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(jndiEncInfo, null, 
null, emfLinkResolver, "my/module.jar", getClass().getClassLoader());
-        jndiEncBuilder.build();
+        assertEquals(Thing.TWO, resolver.resolveLink("two", moduleUri));
+        assertEquals(Thing.TWO, 
resolver.resolveLink("../some/./other.jar#two", moduleUri));
     }
 
-    private static class MockEntityManagerFactory implements 
EntityManagerFactory {
-        public EntityManager createEntityManager() {
-            return null;
-        }
-
-        public EntityManager createEntityManager(Map bindings) {
-            return null;
-        }
-
-        public void close() {
-        }
-
-        public boolean isOpen() {
-            return false;
-        }
+    private static enum Thing {
+        ONE, TWO
     }
 }

Propchange: 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/LinkResolverTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author Id Revision HeadURL


Reply via email to