You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2007/01/26 18:25:59 UTC

svn commit: r500286 - in /incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb: assembler/classic/ config/ persistence/

Author: dain
Date: Fri Jan 26 09:25:51 2007
New Revision: 500286

URL: http://svn.apache.org/viewvc?view=rev&rev=500286
Log:
Split PersistenceDeployer between DeploymentLoader, ConfigurationFactory, and PersistenceBuilder for xml loading, config info creation and entity manager factory creation respectively.

Added:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/DataSourceResolver.java   (contents, props changed)
      - copied, changed from r500112, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/DataSourceResolver.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/GlobalJndiDataSourceResolver.java   (contents, props changed)
      - copied, changed from r500112, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/GlobalJndiDataSourceResolver.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceBuilder.java   (contents, props changed)
      - copied, changed from r500112, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceDeployer.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextReferenceInfo.java
      - copied, changed from r500112, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceDeployerException.java   (contents, props changed)
      - copied, changed from r500112, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceDeployerException.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitReferenceInfo.java
      - copied, changed from r500112, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceModule.java
Removed:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/DataSourceResolver.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/GlobalJndiDataSourceResolver.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceDeployer.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceDeployerException.java
Modified:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.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/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/classic/JndiEncInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java?view=diff&rev=500286&r1=500285&r2=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java Fri Jan 26 09:25:51 2007
@@ -26,5 +26,6 @@
     public String jarPath;
     public final List<ClientInfo> clients = new ArrayList<ClientInfo>();
     public final List<EjbJarInfo> ejbJars = new ArrayList<EjbJarInfo>();
+    public final List<PersistenceUnitInfo> persistenceUnits = new ArrayList<PersistenceUnitInfo>();
     public final List<String> libs = new ArrayList<String>();
 }

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=500286&r1=500285&r2=500286
==============================================================================
--- 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 Fri Jan 26 09:25:51 2007
@@ -32,11 +32,8 @@
 import org.apache.openejb.core.TemporaryClassLoader;
 import org.apache.openejb.javaagent.Agent;
 import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.persistence.GlobalJndiDataSourceResolver;
 import org.apache.openejb.persistence.JtaEntityManagerRegistry;
 import org.apache.openejb.persistence.PersistenceClassLoaderHandler;
-import org.apache.openejb.persistence.PersistenceDeployer;
-import org.apache.openejb.persistence.PersistenceDeployerException;
 import org.apache.openejb.spi.ApplicationServer;
 import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.spi.SecurityService;
@@ -45,7 +42,6 @@
 import org.apache.openejb.util.SafeToolkit;
 import org.apache.openejb.util.proxy.ProxyFactory;
 import org.apache.openejb.util.proxy.ProxyManager;
-import org.apache.xbean.finder.ResourceFinder;
 import org.apache.xbean.recipe.ObjectRecipe;
 import org.apache.xbean.recipe.StaticRecipe;
 
@@ -69,6 +65,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.TreeMap;
 
 public class Assembler extends AssemblerTool implements org.apache.openejb.spi.Assembler {
 
@@ -353,17 +350,17 @@
         // 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
         HashMap<String, Map<String, EntityManagerFactory>> allFactories = new HashMap<String, Map<String, EntityManagerFactory>>();
-        for (EjbJarInfo ejbJar : appInfo.ejbJars) {
+        PersistenceBuilder persistenceBuilder = new PersistenceBuilder(new GlobalJndiDataSourceResolver(null), persistenceClassLoaderHandler);
+        for (PersistenceUnitInfo info : appInfo.persistenceUnits) {
             try {
-                URL url = new File(ejbJar.jarPath).toURL();
-                ResourceFinder resourceFinder = new ResourceFinder("", classLoader, url);
-
-                PersistenceDeployer persistenceDeployer = new PersistenceDeployer(new GlobalJndiDataSourceResolver(null), persistenceClassLoaderHandler);
-                Map<String, EntityManagerFactory> factories = persistenceDeployer.deploy(resourceFinder.findAll("META-INF/persistence.xml"), classLoader);
-                allFactories.put(ejbJar.jarPath, factories);
-            } catch (PersistenceDeployerException e1) {
-                throw new OpenEJBException(e1);
-            } catch (IOException e) {
+                EntityManagerFactory factory = persistenceBuilder.createEntityManagerFactory(info, classLoader);
+                Map<String, EntityManagerFactory> factories = allFactories.get(info.persistenceUnitRootUrl);
+                if (factories == null) {
+                    factories = new TreeMap<String, EntityManagerFactory>();
+                    allFactories.put(info.persistenceUnitRootUrl, factories);
+                }
+                factories.put(info.name, factory);
+            } catch (Exception e) {
                 throw new OpenEJBException(e);
             }
         }

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/DataSourceResolver.java (from r500112, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/DataSourceResolver.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/DataSourceResolver.java?view=diff&rev=500286&p1=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/DataSourceResolver.java&r1=500112&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/DataSourceResolver.java&r2=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/DataSourceResolver.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/DataSourceResolver.java Fri Jan 26 09:25:51 2007
@@ -15,7 +15,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.openejb.persistence;
+package org.apache.openejb.assembler.classic;
 
 import javax.sql.DataSource;
 

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

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=500286&r1=500285&r2=500286
==============================================================================
--- 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 Fri Jan 26 09:25:51 2007
@@ -136,7 +136,7 @@
             }
         }
 
-        for (PersistenceUnitInfo info : bean.jndiEnc.persistenceUnitRefs) {
+        for (PersistenceUnitReferenceInfo info : bean.jndiEnc.persistenceUnitRefs) {
             for (InjectionInfo target : info.targets) {
                 Class targetClass = loadClass(target.className, "classNotFound.injectionTarget");
                 Injection injection = new Injection(info.referenceName, target.propertyName, targetClass);
@@ -144,7 +144,7 @@
             }
         }
 
-        for (PersistenceContextInfo info : bean.jndiEnc.persistenceContextRefs) {
+        for (PersistenceContextReferenceInfo info : bean.jndiEnc.persistenceContextRefs) {
             for (InjectionInfo target : info.targets) {
                 Class targetClass = loadClass(target.className, "classNotFound.injectionTarget");
                 Injection injection = new Injection(info.referenceName, target.propertyName, targetClass);
@@ -185,7 +185,7 @@
             deployment.setPostActivate(getCallback(ejbClass, statefulBeanInfo.postActivate));
 
             Map<EntityManagerFactory, Map> extendedEntityManagerFactories = new HashMap<EntityManagerFactory, Map>();
-            for (PersistenceContextInfo info : statefulBeanInfo.jndiEnc.persistenceContextRefs) {
+            for (PersistenceContextReferenceInfo info : statefulBeanInfo.jndiEnc.persistenceContextRefs) {
                 if (info.extended) {
                     EntityManagerFactory entityManagerFactory = jndiEncBuilder.findEntityManagerFactory(info.persistenceUnitName);
                     extendedEntityManagerFactories.put(entityManagerFactory, info.properties);

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/GlobalJndiDataSourceResolver.java (from r500112, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/GlobalJndiDataSourceResolver.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/GlobalJndiDataSourceResolver.java?view=diff&rev=500286&p1=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/GlobalJndiDataSourceResolver.java&r1=500112&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/GlobalJndiDataSourceResolver.java&r2=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/GlobalJndiDataSourceResolver.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/GlobalJndiDataSourceResolver.java Fri Jan 26 09:25:51 2007
@@ -15,7 +15,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.openejb.persistence;
+package org.apache.openejb.assembler.classic;
 
 import javax.naming.InitialContext;
 import javax.naming.NamingException;

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

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=500286&r1=500285&r2=500286
==============================================================================
--- 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 Fri Jan 26 09:25:51 2007
@@ -85,21 +85,20 @@
 
         beanManagedTransactions = transactionType != null && transactionType.equalsIgnoreCase("Bean");
 
+        this.jarPath = path;
         this.jndiEnc = jndiEnc;
 
-        if(allFactories != null){
-            this.allFactories = allFactories;
-        } else {
-            this.allFactories = new HashMap<String, Map<String, EntityManagerFactory>>();
+        if (allFactories == null) {
+            allFactories = new HashMap<String, Map<String, EntityManagerFactory>>();
         }
+        this.allFactories = allFactories;
 
-        this.jarPath = path;
 
-        if(this.allFactories.get(jarPath) != null){
-            entityManagerFactories = this.allFactories.get(jarPath);
-        } else {
-            entityManagerFactories = new HashMap<String, EntityManagerFactory>();
+        Map<String, EntityManagerFactory> factories = allFactories.get(jarPath);
+        if (factories == null) {
+            factories = new HashMap<String, EntityManagerFactory>();
         }
+        entityManagerFactories = factories;
     }
 
     public Context build() throws OpenEJBException {
@@ -269,7 +268,7 @@
             //TODO code for handling other resource-env-refs need to be added here.
         }
 
-        for (PersistenceUnitInfo referenceInfo : jndiEnc.persistenceUnitRefs) {
+        for (PersistenceUnitReferenceInfo referenceInfo : jndiEnc.persistenceUnitRefs) {
             if (referenceInfo.location != null){
                 Reference reference = buildReferenceLocation(referenceInfo.location);
                 bindings.put(normalize(referenceInfo.referenceName), wrapReference(reference));
@@ -282,7 +281,7 @@
             bindings.put(normalize(referenceInfo.referenceName), wrapReference(reference));
         }
 
-        for (PersistenceContextInfo contextInfo : jndiEnc.persistenceContextRefs) {
+        for (PersistenceContextReferenceInfo contextInfo : jndiEnc.persistenceContextRefs) {
             if (contextInfo.location != null){
                 Reference reference = buildReferenceLocation(contextInfo.location);
                 bindings.put(normalize(contextInfo.referenceName), wrapReference(reference));

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java?view=diff&rev=500286&r1=500285&r2=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java Fri Jan 26 09:25:51 2007
@@ -26,8 +26,8 @@
     public final List<EjbReferenceInfo> ejbReferences = new ArrayList<EjbReferenceInfo>();
     public final List<EjbLocalReferenceInfo> ejbLocalReferences = new ArrayList<EjbLocalReferenceInfo>();
     public final List<ResourceReferenceInfo> resourceRefs = new ArrayList<ResourceReferenceInfo>();
-    public final List<PersistenceUnitInfo> persistenceUnitRefs = new ArrayList<PersistenceUnitInfo>();
-    public final List<PersistenceContextInfo> persistenceContextRefs = new ArrayList<PersistenceContextInfo>();
+    public final List<PersistenceUnitReferenceInfo> persistenceUnitRefs = new ArrayList<PersistenceUnitReferenceInfo>();
+    public final List<PersistenceContextReferenceInfo> persistenceContextRefs = new ArrayList<PersistenceContextReferenceInfo>();
     public final List<ResourceEnvReferenceInfo> resourceEnvRefs = new ArrayList<ResourceEnvReferenceInfo>();
     public final List<MessageDestinationReferenceInfo> messageDestinationRefs = new ArrayList<MessageDestinationReferenceInfo>();
     public final List<ServiceReferenceInfo> serviceRefs = new ArrayList<ServiceReferenceInfo>();

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceBuilder.java (from r500112, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceDeployer.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceBuilder.java?view=diff&rev=500286&p1=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceDeployer.java&r1=500112&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceBuilder.java&r2=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceDeployer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceBuilder.java Fri Jan 26 09:25:51 2007
@@ -14,25 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.openejb.persistence;
-
-import org.apache.openejb.jee.jpa.unit.JaxbPersistenceFactory;
-import org.apache.openejb.jee.jpa.unit.PersistenceUnit;
-import org.apache.openejb.jee.jpa.unit.TransactionType;
+package org.apache.openejb.assembler.classic;
 
+import java.io.File;
+import java.util.HashMap;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.spi.PersistenceProvider;
 import javax.persistence.spi.PersistenceUnitTransactionType;
 import javax.sql.DataSource;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
 
-public class PersistenceDeployer {
-    public static final String PERSISTENCE_SCHEMA = "http://java.sun.com/xml/ns/persistence";
+import org.apache.openejb.persistence.PersistenceClassLoaderHandler;
+import org.apache.openejb.persistence.PersistenceUnitInfoImpl;
 
+public class PersistenceBuilder {
     public static final String PROVIDER_PROP = "javax.persistence.provider";
 
     public static final String TRANSACTIONTYPE_PROP = "javax.persistence.transactionType";
@@ -41,6 +35,8 @@
 
     public static final String NON_JTADATASOURCE_PROP = "javax.persistence.nonJtaDataSource";
 
+    private static final String DEFAULT_PERSISTENCE_PROVIDER = "org.apache.openjpa.persistence.PersistenceProviderImpl";
+
     /**
      * Used to resolve jta and non-jta data cource names for actual DataSource objects.
      */
@@ -71,7 +67,7 @@
      */
     private String nonJtaDataSourceEnv;
 
-    public PersistenceDeployer(DataSourceResolver dataSourceResolver, PersistenceClassLoaderHandler persistenceClassLoaderHandler) {
+    public PersistenceBuilder(DataSourceResolver dataSourceResolver, PersistenceClassLoaderHandler persistenceClassLoaderHandler) {
         loadSystemProps();
         this.dataSourceResolver = dataSourceResolver;
         this.persistenceClassLoaderHandler = persistenceClassLoaderHandler;
@@ -84,111 +80,80 @@
         nonJtaDataSourceEnv = System.getProperty(NON_JTADATASOURCE_PROP);
     }
 
-    public Map<String, EntityManagerFactory> loadPersistence(ClassLoader cl, URL url) throws PersistenceDeployerException {
-        try {
-            Map<String, EntityManagerFactory> factories = new HashMap<String, EntityManagerFactory>();
-
-            org.apache.openejb.jee.jpa.unit.Persistence persistence = JaxbPersistenceFactory.getPersistence(url);
-
-            List<PersistenceUnit> persistenceUnits = persistence.getPersistenceUnit();
-
-            for (PersistenceUnit pu : persistenceUnits) {
-                PersistenceUnitInfoImpl unitInfo = new PersistenceUnitInfoImpl(persistenceClassLoaderHandler);
-                unitInfo.setPersistenceUnitName(pu.getName());
-                if (providerEnv != null) {
-                    unitInfo.setPersistenceProviderClassName(providerEnv);
-                } else {
-                    unitInfo.setPersistenceProviderClassName(pu.getProvider());
-                }
-
-                unitInfo.setClassLoader(cl);
-                if (pu.isExcludeUnlistedClasses() == null) {
-                    unitInfo.setExcludeUnlistedClasses(false);
-                } else {
-                    unitInfo.setExcludeUnlistedClasses(pu.isExcludeUnlistedClasses().booleanValue());
-                }
-
-                unitInfo.setJarFileUrls(pu.getJarFile());
-
-                // JTA Datasource
-                String dataSource = pu.getJtaDataSource();
-                if (jtaDataSourceEnv != null) dataSource = jtaDataSourceEnv;
-
-                if (dataSource != null) {
-                    DataSource jtaDataSource = dataSourceResolver.getDataSource(dataSource);
-                    unitInfo.setJtaDataSource(jtaDataSource);
-                }
-
-                unitInfo.setManagedClassNames(pu.getClazz());
-                unitInfo.setMappingFileNames(pu.getMappingFile());
-
-                // Handle Properties
-                org.apache.openejb.jee.jpa.unit.Properties puiProperties = pu.getProperties();
-                if (puiProperties != null) {
-                    Properties properties = new Properties();
-                    for (org.apache.openejb.jee.jpa.unit.Property property : puiProperties.getProperty()) {
-                        properties.put(property.getName(), property.getValue());
-                    }
-                    unitInfo.setProperties(properties);
-                }
-
-                // Persistence Unit Transaction Type
-                if (transactionTypeEnv != null) {
-                    try {
-                        // Override with sys vars
-                        PersistenceUnitTransactionType type = Enum.valueOf(PersistenceUnitTransactionType.class, transactionTypeEnv.toUpperCase());
-                        unitInfo.setTransactionType(type);
-                    } catch (IllegalArgumentException e) {
-                        throw new IllegalArgumentException("Unknown " + TRANSACTIONTYPE_PROP + ", valid options are " + PersistenceUnitTransactionType.JTA + " or " + PersistenceUnitTransactionType.RESOURCE_LOCAL);
-                    }
-                } else {
-                    TransactionType tranType = pu.getTransactionType();
-                    PersistenceUnitTransactionType type = Enum.valueOf(PersistenceUnitTransactionType.class, tranType.toString());
-                    unitInfo.setTransactionType(type);
-                }
-
-                // Non JTA Datasource
-                String nonJta = pu.getNonJtaDataSource();
-                if (nonJtaDataSourceEnv != null) nonJta = nonJtaDataSourceEnv;
-
-                if (nonJta != null) {
-                    DataSource nonJtaDataSource = dataSourceResolver.getDataSource(dataSource);
-                    unitInfo.setNonJtaDataSource(nonJtaDataSource);
-                }
-
-                String rootUrlPath = url.toExternalForm().replaceFirst("!?META-INF/persistence.xml$", "");
-                unitInfo.setPersistenceUnitRootUrl(new URL(rootUrlPath));
-
-                String persistenceProviderClassName = unitInfo.getPersistenceProviderClassName();
-                if (persistenceProviderClassName == null) {
-                    continue;
-                }
-                Class clazz = cl.loadClass(persistenceProviderClassName);
-                PersistenceProvider persistenceProvider = (PersistenceProvider) clazz.newInstance();
-                EntityManagerFactory emf = persistenceProvider.createContainerEntityManagerFactory(unitInfo, new HashMap());
+    public EntityManagerFactory createEntityManagerFactory(PersistenceUnitInfo info, ClassLoader classLoader) throws Exception {
+        PersistenceUnitInfoImpl unitInfo = new PersistenceUnitInfoImpl(persistenceClassLoaderHandler);
 
+        // Persistence Unit Name
+        unitInfo.setPersistenceUnitName(info.name);
 
-                factories.put(unitInfo.getPersistenceUnitName(), emf);
-            }
+        // Persistence Provider Class Name
+        if (providerEnv != null) {
+            unitInfo.setPersistenceProviderClassName(providerEnv);
+        } else {
+            unitInfo.setPersistenceProviderClassName(info.provider);
+        }
+
+        // ClassLoader
+        unitInfo.setClassLoader(classLoader);
+
+        // Exclude Unlisted Classes
+        unitInfo.setExcludeUnlistedClasses(info.excludeUnlistedClasses);
+
+        // Jar File Urls
+        unitInfo.setJarFileUrls(info.jarFiles);
 
-            return factories;
-        } catch (Exception e) {
-            e.printStackTrace(System.err);
-            throw new PersistenceDeployerException(e);
+        // JTA Datasource
+        String dataSource = info.jtaDataSource;
+        if (jtaDataSourceEnv != null) dataSource = jtaDataSourceEnv;
+        if (dataSource != null) {
+            DataSource jtaDataSource = dataSourceResolver.getDataSource(dataSource);
+            unitInfo.setJtaDataSource(jtaDataSource);
         }
 
-    }
+        // Managed Class Names
+        unitInfo.setManagedClassNames(info.classes);
 
-    public Map<String, EntityManagerFactory> deploy(List<URL> urls, ClassLoader cl) throws PersistenceDeployerException {
+        // Mapping File Names
+        unitInfo.setMappingFileNames(info.mappingFiles);
 
-        Map<String, EntityManagerFactory> factories = new HashMap<String, EntityManagerFactory>();
-        // Read the persistence.xml files      
+        // Handle Properties
+        unitInfo.setProperties(info.properties);
 
-        for (URL url : urls) {
-            factories.putAll(loadPersistence(cl, url));
+        // Persistence Unit Transaction Type
+        if (transactionTypeEnv != null) {
+            try {
+                // Override with sys vars
+                PersistenceUnitTransactionType type = Enum.valueOf(PersistenceUnitTransactionType.class, transactionTypeEnv.toUpperCase());
+                unitInfo.setTransactionType(type);
+            } catch (IllegalArgumentException e) {
+                throw new IllegalArgumentException("Unknown " + TRANSACTIONTYPE_PROP + ", valid options are " + PersistenceUnitTransactionType.JTA + " or " + PersistenceUnitTransactionType.RESOURCE_LOCAL);
+            }
+        } else {
+            PersistenceUnitTransactionType type = Enum.valueOf(PersistenceUnitTransactionType.class, info.transactionType);
+            unitInfo.setTransactionType(type);
         }
-        return factories;
-    }
 
+        // Non JTA Datasource
+        String nonJta = info.nonJtaDataSource;
+        if (nonJtaDataSourceEnv != null) nonJta = nonJtaDataSourceEnv;
+        if (nonJta != null) {
+            DataSource nonJtaDataSource = dataSourceResolver.getDataSource(dataSource);
+            unitInfo.setNonJtaDataSource(nonJtaDataSource);
+        }
+
+        // Persistence Unit Root Url
+        unitInfo.setPersistenceUnitRootUrl(new File(info.persistenceUnitRootUrl).toURL());
+
+        // create the persistence provider
+        String persistenceProviderClassName = unitInfo.getPersistenceProviderClassName();
+        if (persistenceProviderClassName == null) {
+            persistenceProviderClassName = DEFAULT_PERSISTENCE_PROVIDER;
+        }
+        Class clazz = classLoader.loadClass(persistenceProviderClassName);
+        PersistenceProvider persistenceProvider = (PersistenceProvider) clazz.newInstance();
 
+        // Create entity manager factory
+        EntityManagerFactory emf = persistenceProvider.createContainerEntityManagerFactory(unitInfo, new HashMap());
+        return emf;
+    }
 }

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

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextReferenceInfo.java (from r500112, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextReferenceInfo.java?view=diff&rev=500286&p1=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java&r1=500112&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextReferenceInfo.java&r2=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextReferenceInfo.java Fri Jan 26 09:25:51 2007
@@ -22,7 +22,7 @@
 /**
  * @version $Rev$ $Date$
  */
-public class PersistenceContextInfo extends InjectableInfo {
+public class PersistenceContextReferenceInfo extends InjectableInfo {
     public String referenceName;
     public String persistenceUnitName;
     public boolean extended;

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceDeployerException.java (from r500112, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceDeployerException.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceDeployerException.java?view=diff&rev=500286&p1=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceDeployerException.java&r1=500112&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceDeployerException.java&r2=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceDeployerException.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceDeployerException.java Fri Jan 26 09:25:51 2007
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.openejb.persistence;
+package org.apache.openejb.assembler.classic;
 
 public class PersistenceDeployerException extends Exception {
 

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

Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java?view=auto&rev=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java Fri Jan 26 09:25:51 2007
@@ -0,0 +1,36 @@
+/**
+ * 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.assembler.classic;
+
+import java.util.List;
+import java.util.Properties;
+import java.util.ArrayList;
+
+public class PersistenceUnitInfo extends InfoObject {
+    public String name;
+    public String provider;
+    public String transactionType;
+    public String jtaDataSource;
+    public String nonJtaDataSource;
+    public final List<String> mappingFiles = new ArrayList<String>();
+    public final List<String> jarFiles = new ArrayList<String>();
+    public final List<String> classes = new ArrayList<String>();
+    public boolean excludeUnlistedClasses;
+    public final Properties properties = new Properties();
+    public String persistenceUnitRootUrl;
+
+}

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitReferenceInfo.java (from r500112, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitReferenceInfo.java?view=diff&rev=500286&p1=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java&r1=500112&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitReferenceInfo.java&r2=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitReferenceInfo.java Fri Jan 26 09:25:51 2007
@@ -19,7 +19,7 @@
 /**
  * @version $Rev$ $Date$
  */
-public class PersistenceUnitInfo extends InjectableInfo {
+public class PersistenceUnitReferenceInfo extends InjectableInfo {
     public String referenceName;
     public String persistenceUnitName;
 

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java?view=diff&rev=500286&r1=500285&r2=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java Fri Jan 26 09:25:51 2007
@@ -16,17 +16,18 @@
  */
 package org.apache.openejb.config;
 
-import java.util.List;
-import java.util.ArrayList;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @version $Rev$ $Date$
  */
 public class AppModule implements DeploymentModule {
-    private final List<URL> additionalLibraries = new ArrayList();
-    private final List<ClientModule> clientModules = new ArrayList();
-    private final List<EjbModule> ejbModules = new ArrayList();
+    private final List<URL> additionalLibraries = new ArrayList<URL>();
+    private final List<ClientModule> clientModules = new ArrayList<ClientModule>();
+    private final List<EjbModule> ejbModules = new ArrayList<EjbModule>();
+    private final List<PersistenceModule> persistenceModules = new ArrayList<PersistenceModule>();;
     private final String jarLocation;
     private final ClassLoader classLoader;
 
@@ -45,6 +46,10 @@
 
     public List<EjbModule> getEjbModules() {
         return ejbModules;
+    }
+
+    public List<PersistenceModule> getPersistenceModules() {
+        return persistenceModules;
     }
 
     public String getJarLocation() {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?view=diff&rev=500286&r1=500285&r2=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java Fri Jan 26 09:25:51 2007
@@ -49,7 +49,11 @@
 import org.apache.openejb.assembler.classic.StatefulSessionContainerInfo;
 import org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
 import org.apache.openejb.assembler.classic.TransactionServiceInfo;
+import org.apache.openejb.assembler.classic.PersistenceUnitInfo;
 import org.apache.openejb.jee.ApplicationClient;
+import org.apache.openejb.jee.jpa.unit.PersistenceUnit;
+import org.apache.openejb.jee.jpa.unit.Property;
+import org.apache.openejb.jee.jpa.unit.Persistence;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
@@ -312,6 +316,39 @@
             JndiEncInfoBuilder jndiEncInfoBuilder = new JndiEncInfoBuilder(appInfo.ejbJars);
             clientInfo.jndiEnc = jndiEncInfoBuilder.build(applicationClient, clientModule.getJarLocation());
             appInfo.clients.add(clientInfo);
+        }
+
+        for (PersistenceModule persistenceModule : appModule.getPersistenceModules()) {
+            String rootUrl = persistenceModule.getRootUrl();
+            Persistence persistence = persistenceModule.getPersistence();
+            for (PersistenceUnit persistenceUnit : persistence.getPersistenceUnit()) {
+                PersistenceUnitInfo info = new PersistenceUnitInfo();
+                info.name = persistenceUnit.getName();
+                info.persistenceUnitRootUrl = rootUrl;
+                info.provider = persistenceUnit.getProvider();
+                info.transactionType = persistenceUnit.getTransactionType().toString();
+
+                Boolean excludeUnlistedClasses = persistenceUnit.isExcludeUnlistedClasses();
+                info.excludeUnlistedClasses = excludeUnlistedClasses != null && excludeUnlistedClasses;
+
+                info.jtaDataSource = persistenceUnit.getJtaDataSource();
+                info.nonJtaDataSource = persistenceUnit.getNonJtaDataSource();
+
+                info.jarFiles.addAll(persistenceUnit.getJarFile());
+                info.classes.addAll(persistenceUnit.getClazz());
+                info.mappingFiles.addAll(persistenceUnit.getMappingFile());
+
+                // Handle Properties
+                org.apache.openejb.jee.jpa.unit.Properties puiProperties = persistenceUnit.getProperties();
+                if (puiProperties != null) {
+                    for (Property property : puiProperties.getProperty()) {
+                        info.properties.put(property.getName(), property.getValue());
+                    }
+                }
+
+                // Persistence Unit Root Url
+                appInfo.persistenceUnits.add(info);
+            }
         }
 
         appInfo.jarPath = appModule.getJarLocation();

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?view=diff&rev=500286&r1=500285&r2=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java Fri Jan 26 09:25:51 2007
@@ -25,6 +25,8 @@
 import org.apache.openejb.jee.ApplicationClient;
 import org.apache.openejb.jee.EjbJar;
 import org.apache.openejb.jee.Module;
+import org.apache.openejb.jee.jpa.unit.Persistence;
+import org.apache.openejb.jee.jpa.unit.JaxbPersistenceFactory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
 import org.apache.xbean.finder.ClassFinder;
@@ -49,7 +51,7 @@
  */
 public class DeploymentLoader {
 
-    private static final Map<Class<?>, JaxbUnmarshaller> unmarshallers = new HashMap();
+    private static final Map<Class<?>, JaxbUnmarshaller> unmarshallers = new HashMap<Class<?>, JaxbUnmarshaller>();
 
     public static Logger logger = Logger.getInstance("OpenEJB.startup", "org.apache.openejb.util.resources");
     private static final Messages messages = new Messages("org.apache.openejb.util.resources");
@@ -90,7 +92,7 @@
             }
 
             try {
-                List<URL> extraLibs = new ArrayList();
+                List<URL> extraLibs = new ArrayList<URL>();
 
                 try {
                     Map<String, URL> libs = finder.getResourcesMap("lib/");
@@ -113,8 +115,8 @@
                     logger.warning("Cannot load libs from 'META-INF/lib/' : " + e.getMessage(), e);
                 }
 
-                Map<String, URL> ejbModules = new HashMap();
-                Map<String, URL> clientModules = new HashMap();
+                Map<String, URL> ejbModules = new HashMap<String, URL>();
+                Map<String, URL> clientModules = new HashMap<String, URL>();
 
                 URL applicationXmlUrl = descriptors.get("application.xml");
 
@@ -136,7 +138,7 @@
                     }
                 } else {
                     application = new Application();
-                    HashMap<String, URL> files = new HashMap();
+                    HashMap<String, URL> files = new HashMap<String, URL>();
                     scanDir(appDir, files, "");
                     files.remove("META-INF/MANIFEST.MF");
                     for (Map.Entry<String, URL> entry : files.entrySet()) {
@@ -158,12 +160,12 @@
                     }
                 }
 
-                List<URL> classPath = new ArrayList();
+                List<URL> classPath = new ArrayList<URL>();
                 classPath.addAll(ejbModules.values());
                 classPath.addAll(clientModules.values());
                 classPath.addAll(extraLibs);
-                ClassLoader appClassLoader = new TemporaryClassLoader(classPath.toArray(new URL[]{}), OpenEJB.class.getClassLoader());
-
+                URL[] urls = classPath.toArray(new URL[]{});
+                ClassLoader appClassLoader = new TemporaryClassLoader(urls, OpenEJB.class.getClassLoader());
 
                 AppModule appModule = new AppModule(appClassLoader, appDir.getAbsolutePath());
                 appModule.getAdditionalLibraries().addAll(extraLibs);
@@ -231,6 +233,10 @@
                     }
                 }
 
+                //
+                // Persistence Units
+                addPersistenceUnits(appModule, appClassLoader, appDir, urls);
+
                 return appModule;
 
             } catch (OpenEJBException e) {
@@ -243,16 +249,44 @@
             EjbJarUtils ejbJarUtils = new EjbJarUtils(jarFile.getAbsolutePath());
             EjbModule ejbModule = new EjbModule(classLoader, jarFile.getAbsolutePath(), ejbJarUtils.getEjbJar(), ejbJarUtils.getOpenejbJar());
 
-
 //            EjbModule ejbModule = deployer.deploy(undeployedModule);
 
             AppModule appModule = new AppModule(classLoader, ejbModule.getJarLocation());
             appModule.getEjbModules().add(ejbModule);
 
+            //
+            // Persistence Units
+            ClassLoader tmpClassLoader = new TemporaryClassLoader(new URL[]{baseUrl}, OpenEJB.class.getClassLoader());
+            addPersistenceUnits(appModule, tmpClassLoader, jarFile, baseUrl);
+
             return appModule;
         }
     }
 
+    private void addPersistenceUnits(AppModule appModule, ClassLoader tmpClassLoader, File jarFile, URL... urls) {
+        List<URL> persistenceUrls = null;
+        try {
+            ResourceFinder finder = new ResourceFinder("", tmpClassLoader, urls);
+            persistenceUrls = finder.findAll("META-INF/persistence.xml");
+        } catch (IOException e) {
+            logger.warning("Cannot load persistence-units from 'META-INF/persistence.xml' : " + e.getMessage(), e);
+        }
+        for (URL url : persistenceUrls) {
+            String moduleName = url.toExternalForm().replaceFirst("!?/?META-INF/persistence.xml$", "");
+            if (moduleName.startsWith("jar:")) moduleName = moduleName.substring("jar:".length());
+            if (moduleName.startsWith("file:")) moduleName = moduleName.substring("file:".length());
+            if (moduleName.endsWith("/")) moduleName = moduleName.substring(0, moduleName.length() -1);
+            try {
+                Persistence persistence = JaxbPersistenceFactory.getPersistence(url);
+                PersistenceModule persistenceModule = new PersistenceModule(moduleName, persistence);
+                appModule.getPersistenceModules().add(persistenceModule);
+
+            } catch (Exception e) {
+                logger.error("Unable to load Persistence Unit from EAR: " + jarFile.getAbsolutePath() + ", module: " + moduleName + ". Exception: " + e.getMessage(), e);
+            }
+        }
+    }
+
     public static void scanDir(File dir, Map<String, URL> files, String path) {
         for (File file : dir.listFiles()) {
             if (file.isDirectory()) {
@@ -312,6 +346,7 @@
         throw new UnsupportedOperationException("Unknown module type");
     }
 
+    @SuppressWarnings({"unchecked"})
     private <T>T unmarshal(Class<T> type, String descriptor, URL descriptorUrl) throws OpenEJBException {
         JaxbUnmarshaller unmarshaller = unmarshallers.get(type);
         if (unmarshaller == null) {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java?view=diff&rev=500286&r1=500285&r2=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java Fri Jan 26 09:25:51 2007
@@ -24,8 +24,8 @@
 import org.apache.openejb.assembler.classic.EnvEntryInfo;
 import org.apache.openejb.assembler.classic.InjectionInfo;
 import org.apache.openejb.assembler.classic.JndiEncInfo;
-import org.apache.openejb.assembler.classic.PersistenceContextInfo;
-import org.apache.openejb.assembler.classic.PersistenceUnitInfo;
+import org.apache.openejb.assembler.classic.PersistenceContextReferenceInfo;
+import org.apache.openejb.assembler.classic.PersistenceUnitReferenceInfo;
 import org.apache.openejb.assembler.classic.ReferenceLocationInfo;
 import org.apache.openejb.assembler.classic.ResourceEnvReferenceInfo;
 import org.apache.openejb.assembler.classic.ResourceReferenceInfo;
@@ -155,10 +155,10 @@
         return infos;
     }
 
-    private List<PersistenceUnitInfo> buildPersistenceUnitRefInfos(JndiConsumer jndiConsumer) {
-        ArrayList<PersistenceUnitInfo> infos = new ArrayList<PersistenceUnitInfo>();
+    private List<PersistenceUnitReferenceInfo> buildPersistenceUnitRefInfos(JndiConsumer jndiConsumer) {
+        ArrayList<PersistenceUnitReferenceInfo> infos = new ArrayList<PersistenceUnitReferenceInfo>();
         for (PersistenceUnitRef puRef : jndiConsumer.getPersistenceUnitRef()) {
-            PersistenceUnitInfo info = new PersistenceUnitInfo();
+            PersistenceUnitReferenceInfo info = new PersistenceUnitReferenceInfo();
             info.referenceName = puRef.getPersistenceUnitRefName();
             info.persistenceUnitName = puRef.getPersistenceUnitName();
             info.location = buildLocationInfo(puRef);
@@ -168,11 +168,11 @@
         return infos;
     }
 
-    private List<PersistenceContextInfo> buildPersistenceContextRefInfos(JndiConsumer jndiConsumer) {
-        ArrayList<PersistenceContextInfo> infos = new ArrayList<PersistenceContextInfo>();
+    private List<PersistenceContextReferenceInfo> buildPersistenceContextRefInfos(JndiConsumer jndiConsumer) {
+        ArrayList<PersistenceContextReferenceInfo> infos = new ArrayList<PersistenceContextReferenceInfo>();
 
         for (PersistenceContextRef contextRef : jndiConsumer.getPersistenceContextRef()) {
-            PersistenceContextInfo info = new PersistenceContextInfo();
+            PersistenceContextReferenceInfo info = new PersistenceContextReferenceInfo();
             info.referenceName = contextRef.getPersistenceContextRefName();
             info.persistenceUnitName = contextRef.getPersistenceUnitName();
             info.location = buildLocationInfo(contextRef);

Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceModule.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceModule.java?view=auto&rev=500286
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceModule.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceModule.java Fri Jan 26 09:25:51 2007
@@ -0,0 +1,45 @@
+/**
+ * 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.config;
+
+import org.apache.openejb.jee.jpa.unit.Persistence;
+
+public class PersistenceModule {
+    private String rootUrl;
+    private Persistence persistence;
+
+    public PersistenceModule(String rootUrl, Persistence persistence) {
+        this.rootUrl = rootUrl;
+        this.persistence = persistence;
+    }
+
+    public String getRootUrl() {
+        return rootUrl;
+    }
+
+    public void setRootUrl(String rootUrl) {
+        this.rootUrl = rootUrl;
+    }
+
+    public Persistence getPersistence() {
+        return persistence;
+    }
+
+    public void setPersistence(Persistence persistence) {
+        this.persistence = persistence;
+    }
+}