[jboss-cvs] JBossAS SVN: r67604 - in trunk/ejb3/src/main/org/jboss/ejb3: deployers and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Nov 29 08:08:10 EST 2007


Author: wolfc
Date: 2007-11-29 08:08:10 -0500 (Thu, 29 Nov 2007)
New Revision: 67604

Modified:
   trunk/ejb3/src/main/org/jboss/ejb3/Ejb3Deployment.java
   trunk/ejb3/src/main/org/jboss/ejb3/deployers/PersistenceUnitParsingDeployer.java
   trunk/ejb3/src/main/org/jboss/ejb3/entity/PersistenceUnitDeployment.java
   trunk/ejb3/src/main/org/jboss/ejb3/metadata/jpa/spec/PersistenceUnitMetaData.java
   trunk/ejb3/src/main/org/jboss/ejb3/metadata/jpa/spec/PersistenceUnitsMetaData.java
Log:
EJBTHREE-1138: Determine correct persistence unit root url

Modified: trunk/ejb3/src/main/org/jboss/ejb3/Ejb3Deployment.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/Ejb3Deployment.java	2007-11-29 13:01:35 UTC (rev 67603)
+++ trunk/ejb3/src/main/org/jboss/ejb3/Ejb3Deployment.java	2007-11-29 13:08:10 UTC (rev 67604)
@@ -575,7 +575,7 @@
             metadata.getProps().setProperty(SecondLevelCacheUtil.HIBERNATE_CACHE_REGION_PREFIX, cache_prefix);
          }
          PersistenceUnitDeployment deployment = new PersistenceUnitDeployment(initialContext, this,
-               explicitEntityClasses, metadata, earShortName, unit.getShortName(), isScoped);
+               explicitEntityClasses, persistenceUnitMetaData, earShortName, unit.getShortName(), isScoped);
          PersistenceUnitRegistry.register(deployment);
          persistenceUnitDeployments.add(deployment);
       }

Modified: trunk/ejb3/src/main/org/jboss/ejb3/deployers/PersistenceUnitParsingDeployer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/deployers/PersistenceUnitParsingDeployer.java	2007-11-29 13:01:35 UTC (rev 67603)
+++ trunk/ejb3/src/main/org/jboss/ejb3/deployers/PersistenceUnitParsingDeployer.java	2007-11-29 13:08:10 UTC (rev 67604)
@@ -90,8 +90,9 @@
    protected PersistenceUnitsMetaData parse(VFSDeploymentUnit unit, VirtualFile file, PersistenceUnitsMetaData root)
          throws Exception
    {
+      URL persistenceUnitRootUrl = file.getParent().getParent().toURL();
       URL persistenceXmlUrl = file.toURL();
-      PersistenceUnitsMetaData metaData = new PersistenceUnitsMetaData(PersistenceXmlLoader.deploy(persistenceXmlUrl, new HashMap<String, String>(),
+      PersistenceUnitsMetaData metaData = new PersistenceUnitsMetaData(persistenceUnitRootUrl, PersistenceXmlLoader.deploy(persistenceXmlUrl, new HashMap<String, String>(),
             new EJB3DTDEntityResolver(), PersistenceUnitTransactionType.JTA));
       log.info("Found persistence units " + metaData);
       // FIXME: if in EAR then unscoped else scoped

Modified: trunk/ejb3/src/main/org/jboss/ejb3/entity/PersistenceUnitDeployment.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/entity/PersistenceUnitDeployment.java	2007-11-29 13:01:35 UTC (rev 67603)
+++ trunk/ejb3/src/main/org/jboss/ejb3/entity/PersistenceUnitDeployment.java	2007-11-29 13:08:10 UTC (rev 67604)
@@ -40,6 +40,7 @@
 import org.jboss.ejb3.NonSerializableFactory;
 import org.jboss.ejb3.javaee.AbstractJavaEEComponent;
 import org.jboss.ejb3.javaee.SimpleJavaEEModule;
+import org.jboss.ejb3.metadata.jpa.spec.PersistenceUnitMetaData;
 import org.jboss.logging.Logger;
 
 /**
@@ -57,12 +58,12 @@
    protected List<String> explicitEntityClasses = new ArrayList<String>();
    protected ManagedEntityManagerFactory managedFactory;
    protected EntityManagerFactory actualFactory;
-   protected PersistenceMetadata xml;
+   protected PersistenceUnitMetaData metaData;
    protected String kernelName;
    protected Ejb3Deployment deployment;
    protected boolean scoped;
 
-   public PersistenceUnitDeployment(InitialContext initialContext, Ejb3Deployment deployment, List<String> explicitEntityClasses, PersistenceMetadata metadata, String ear, String jar, boolean isScoped)
+   public PersistenceUnitDeployment(InitialContext initialContext, Ejb3Deployment deployment, List<String> explicitEntityClasses, PersistenceUnitMetaData metadata, String ear, String jar, boolean isScoped)
    {
       super(new SimpleJavaEEModule((deployment.getEar() != null ? deployment.getEar().getShortName() : null), deployment.getDeploymentUnit().getShortName()));
       
@@ -71,15 +72,12 @@
       this.initialContext = initialContext;
       this.di = deployment.getDeploymentUnit();
       this.explicitEntityClasses = explicitEntityClasses;
-      xml = metadata;
+      this.metaData = metadata;
       kernelName = "persistence.units:";
       String name = getEntityManagerName();
-      if (name == null)
+      if (name == null || name.length() == 0)
          throw new RuntimeException("Null string is not allowed for a persistence unit name.  Fix your persistence.xml file");
       
-      if (name.length() == 0)
-         xml.setName(name);
-      
       if (ear != null)
       {
          kernelName += "ear=" + ear;
@@ -127,9 +125,9 @@
       return actualFactory;
    }
 
-   public PersistenceMetadata getXml()
+   public PersistenceUnitMetaData getXml()
    {
-      return xml;
+      return metaData;
    }
 
    public String getKernelName()
@@ -139,7 +137,7 @@
 
    public String getEntityManagerName()
    {
-      return xml.getName() == null ? "" : xml.getName();
+      return metaData.getName();
    }
 
    public ManagedEntityManagerFactory getManagedFactory()
@@ -151,17 +149,18 @@
    
    public void addDependencies(DependencyPolicy policy)
    {
-      Properties props = getXml().getProps();
+      PersistenceMetadata legacy = metaData.getLegacyMetadata();
+      Properties props = legacy.getProps();
       if (!props.containsKey("jboss.no.implicit.datasource.dependency"))
       {
-         if (getXml().getJtaDatasource() != null)
+         if (legacy.getJtaDatasource() != null)
          {
-            String ds = getXml().getJtaDatasource();
+            String ds = legacy.getJtaDatasource();
             policy.addDatasource(ds);
          }
-         if (getXml().getNonJtaDatasource() != null)
+         if (legacy.getNonJtaDatasource() != null)
          {
-            String ds = getXml().getNonJtaDatasource();
+            String ds = legacy.getNonJtaDatasource();
             policy.addDatasource(ds);
          }
       }
@@ -187,18 +186,21 @@
       props.put(HibernatePersistence.JACC_CONTEXT_ID, getJaccContextId());
 
       PersistenceUnitInfoImpl pi = new PersistenceUnitInfoImpl();
+      log.debug("Using class loader " + di.getClassLoader());
       pi.setClassLoader(di.getClassLoader());
 
       ArrayList<URL> jarFiles = new ArrayList<URL>();
       pi.setJarFiles(jarFiles);
       pi.setPersistenceProviderClassName(HibernatePersistence.class.getName());
       log.debug("Found persistence.xml file in EJB3 jar");
+      PersistenceMetadata xml = metaData.getLegacyMetadata();
       props.putAll(xml.getProps());
       pi.setManagedClassnames(xml.getClasses());
-      pi.setPersistenceUnitName(xml.getName());
+      pi.setPersistenceUnitName(metaData.getName());
       pi.setMappingFileNames(xml.getMappingFiles());
       pi.setExcludeUnlistedClasses(xml.getExcludeUnlistedClasses());
-      pi.setPersistenceUnitRootUrl(di.getUrl());
+      log.debug("Persistence root url " + metaData.getPersistenceUnitRootUrl());
+      pi.setPersistenceUnitRootUrl(metaData.getPersistenceUnitRootUrl());
 //      PersistenceUnitTransactionType transactionType = PersistenceUnitTransactionType.JTA;
 //      if ("RESOURCE_LOCAL".equals(xml.getTransactionType()))
 //         transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
@@ -226,7 +228,7 @@
       else if (transactionType == PersistenceUnitTransactionType.JTA)
       {
          throw new RuntimeException("Specification violation [EJB3 JPA 6.2.1.2] - "
-               + "You have not defined a jta-data-source for a JTA enabled persistence context named: " + xml.getName());
+               + "You have not defined a jta-data-source for a JTA enabled persistence context named: " + metaData.getName());
       }
       if (xml.getNonJtaDatasource() != null)
       {
@@ -236,7 +238,7 @@
       {
          throw new RuntimeException("Specification violation [EJB3 JPA 6.2.1.2] - "
                + "You have not defined a non-jta-data-source for a RESOURCE_LOCAL enabled persistence context named: "
-               + xml.getName());
+               + metaData.getName());
       }
       pi.setProperties(props);
 
@@ -276,6 +278,7 @@
    {
       log.info("Stopping persistence unit " + kernelName);
       
+      PersistenceMetadata xml = metaData.getLegacyMetadata();
       String entityManagerJndiName = (String) xml.getProps().get("jboss.entity.manager.jndi.name");
       if (entityManagerJndiName != null)
       {

Modified: trunk/ejb3/src/main/org/jboss/ejb3/metadata/jpa/spec/PersistenceUnitMetaData.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/metadata/jpa/spec/PersistenceUnitMetaData.java	2007-11-29 13:01:35 UTC (rev 67603)
+++ trunk/ejb3/src/main/org/jboss/ejb3/metadata/jpa/spec/PersistenceUnitMetaData.java	2007-11-29 13:08:10 UTC (rev 67604)
@@ -21,6 +21,8 @@
  */
 package org.jboss.ejb3.metadata.jpa.spec;
 
+import java.net.URL;
+
 import org.hibernate.ejb.packaging.PersistenceMetadata;
 import org.jboss.metadata.javaee.support.MappableMetaData;
 
@@ -34,12 +36,16 @@
 {
    private static final long serialVersionUID = 1L;
    
+   private PersistenceUnitsMetaData parent;
+   
    private PersistenceMetadata delegate;
 
-   public PersistenceUnitMetaData(PersistenceMetadata old)
+   public PersistenceUnitMetaData(PersistenceUnitsMetaData parent, PersistenceMetadata old)
    {
+      assert parent != null : "parent is null";
       assert old != null : "old is null";
       
+      this.parent = parent;
       this.delegate = old;
    }
 
@@ -58,4 +64,26 @@
    {
       return delegate;
    }
+   
+   public String getName()
+   {
+      return delegate.getName();
+   }
+   
+   /**
+    * @return The URL for the jar file or directory that is the
+    *         root of the persistence unit. (If the persistence unit is
+    *         rooted in the WEB-INF/classes directory, this will be the
+    *         URL of that directory.)
+    * @see javax.persistence.PersistenceUnitInfo#getPersistenceUnitRootUrl
+    */
+   public URL getPersistenceUnitRootUrl()
+   {
+      return parent.getPersistenceUnitRootUrl();
+   }
+   
+   public String toString()
+   {
+      return super.toString() + "{name=" + getName() + "}";
+   }
 }

Modified: trunk/ejb3/src/main/org/jboss/ejb3/metadata/jpa/spec/PersistenceUnitsMetaData.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/metadata/jpa/spec/PersistenceUnitsMetaData.java	2007-11-29 13:01:35 UTC (rev 67603)
+++ trunk/ejb3/src/main/org/jboss/ejb3/metadata/jpa/spec/PersistenceUnitsMetaData.java	2007-11-29 13:08:10 UTC (rev 67604)
@@ -21,6 +21,7 @@
  */
 package org.jboss.ejb3.metadata.jpa.spec;
 
+import java.net.URL;
 import java.util.List;
 
 import org.hibernate.ejb.packaging.PersistenceMetadata;
@@ -37,19 +38,33 @@
 public class PersistenceUnitsMetaData extends AbstractMappedMetaData<PersistenceUnitMetaData>
 {
    private static final long serialVersionUID = 1L;
+   
+   /**
+    * The persistence unit root is shared by all persistence units defined
+    * in this persistence xml.
+    */
+   private URL persistenceUnitRootUrl;
 
-   protected PersistenceUnitsMetaData()
+   public PersistenceUnitsMetaData(URL persistenceUnitRootUrl, List<PersistenceMetadata> list)
    {
       super("persistence unit meta data");
-   }
-
-   public PersistenceUnitsMetaData(List<PersistenceMetadata> list)
-   {
-      this();
       
+      assert persistenceUnitRootUrl != null : "persistenceUnitRootUrl is null";
+      
+      this.persistenceUnitRootUrl = persistenceUnitRootUrl;
+      
       for(PersistenceMetadata old : list)
       {
-         add(new PersistenceUnitMetaData(old));
+         add(new PersistenceUnitMetaData(this, old));
       }
    }
+   
+   /**
+    * The URL to the root of the persistence units defined. (JPA 6.2)
+    * @see javax.persistence.PersistenceUnitInfo#getPersistenceUnitRootUrl
+    */
+   public URL getPersistenceUnitRootUrl()
+   {
+      return persistenceUnitRootUrl;
+   }
 }




More information about the jboss-cvs-commits mailing list