You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by xu...@apache.org on 2012/04/23 23:08:42 UTC

svn commit: r1329447 - in /geronimo/server/branches/3.0-beta: framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/ plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/

Author: xuhaihong
Date: Mon Apr 23 21:08:42 2012
New Revision: 1329447

URL: http://svn.apache.org/viewvc?rev=1329447&view=rev
Log:
Add a util method for accessing nested entry in the jar file from a bundle, depending on the installation url, different url is created

Modified:
    geronimo/server/branches/3.0-beta/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/BundleUtil.java
    geronimo/server/branches/3.0-beta/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java
    geronimo/server/branches/3.0-beta/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitBuilder.java

Modified: geronimo/server/branches/3.0-beta/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/BundleUtil.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0-beta/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/BundleUtil.java?rev=1329447&r1=1329446&r2=1329447&view=diff
==============================================================================
--- geronimo/server/branches/3.0-beta/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/BundleUtil.java (original)
+++ geronimo/server/branches/3.0-beta/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/BundleUtil.java Mon Apr 23 21:08:42 2012
@@ -97,4 +97,20 @@ public class BundleUtil {
         }
         return bundle.getEntry(name);
     }
+
+    public static URL getNestedEntry(Bundle bundle, String jarEntryName, String subEntryName) throws MalformedURLException {
+        File bundleFile = toFile(bundle);
+        if (bundleFile != null && bundleFile.isDirectory()) {
+            File entryFile = new File(bundleFile, jarEntryName);
+            if (entryFile.exists()) {
+                if (entryFile.isFile()) {
+                    return new URL("jar:" + entryFile.toURI().toURL() + "!/" + subEntryName);
+                } else {
+                    return new File(entryFile, subEntryName).toURI().toURL();
+                }
+            }
+            return null;
+        }
+        return new URL("jar:" + bundle.getEntry(jarEntryName).toString() + "!/" + subEntryName);
+    }
 }

Modified: geronimo/server/branches/3.0-beta/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0-beta/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java?rev=1329447&r1=1329446&r2=1329447&view=diff
==============================================================================
--- geronimo/server/branches/3.0-beta/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java (original)
+++ geronimo/server/branches/3.0-beta/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java Mon Apr 23 21:08:42 2012
@@ -28,6 +28,7 @@ import java.util.Map;
 import java.util.Set;
 
 import javax.xml.namespace.QName;
+
 import org.apache.geronimo.common.DeploymentException;
 import org.apache.geronimo.gbean.AbstractName;
 import org.apache.geronimo.gbean.AbstractNameQuery;
@@ -96,7 +97,7 @@ public class PersistenceRefBuilder exten
         return plan != null && plan.selectChildren(PersistenceRefBuilder.GER_PERSISTENCE_UNIT_REF_QNAME_SET).length > 0;
     }
 
-    public void buildNaming(JndiConsumer specDD, XmlObject plan, Module module, Map<EARContext.Key, Object> sharedContext) throws DeploymentException {
+    public void buildNaming(JndiConsumer specDD, XmlObject plan, Module<?, ?> module, Map<EARContext.Key, Object> sharedContext) throws DeploymentException {
         Configuration localConfiguration = module.getEarContext().getConfiguration();
         List<DeploymentException> problems = new ArrayList<DeploymentException>();
 
@@ -207,19 +208,19 @@ public class PersistenceRefBuilder exten
                 AbstractName childName = module.getEarContext().getNaming().createChildName(module.getModuleName(), "", NameFactory.PERSISTENCE_UNIT);
                 Map<String, String> name = new HashMap<String, String>(childName.getName());
                 name.remove(NameFactory.J2EE_NAME);
-                
+
                 persistenceUnitNameQuery = new AbstractNameQuery(null, name, PERSISTENCE_UNIT_INTERFACE_TYPES);
                 Set<AbstractNameQuery> patterns = Collections.singleton(persistenceUnitNameQuery);
                 gbeans = localConfiguration.findGBeanDatas(module.getEarContext().getConfiguration(), patterns);
-                
+
                 if (!gbeans.isEmpty()) {
                     persistenceUnitNameQuery = checkForDefaultPersistenceUnit(gbeans);
                     break;
                 }
-                                
+
                 module = module.getParentModule();
             } while(module!=null);
-            
+
             if (gbeans.isEmpty()) {
                 if (defaultPersistenceUnitAbstractNameQuery == null) {
                     throw new DeploymentException("No default PersistenceUnit specified, and none located");

Modified: geronimo/server/branches/3.0-beta/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0-beta/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitBuilder.java?rev=1329447&r1=1329446&r2=1329447&view=diff
==============================================================================
--- geronimo/server/branches/3.0-beta/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitBuilder.java (original)
+++ geronimo/server/branches/3.0-beta/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitBuilder.java Mon Apr 23 21:08:42 2012
@@ -57,6 +57,8 @@ import org.apache.geronimo.kernel.Naming
 import org.apache.geronimo.kernel.config.ConfigurationModuleType;
 import org.apache.geronimo.kernel.config.ConfigurationStore;
 import org.apache.geronimo.kernel.repository.Environment;
+import org.apache.geronimo.kernel.util.BundleUtil;
+import org.apache.geronimo.kernel.util.IOUtils;
 import org.apache.geronimo.naming.ResourceSource;
 import org.apache.geronimo.persistence.PersistenceUnitGBean;
 import org.apache.openejb.jee.JAXBContextFactory;
@@ -128,7 +130,7 @@ public class PersistenceUnitBuilder impl
         Map<String, Persistence.PersistenceUnit> overrides = new HashMap<String, Persistence.PersistenceUnit>();
         try {
             for (XmlObject raw : raws) {
-             
+
                 Persistence persistence = fromXmlObject(raw);
                 for (Persistence.PersistenceUnit unit : persistence.getPersistenceUnit()) {
                     overrides.put(unit.getName().trim(), unit);
@@ -141,27 +143,27 @@ public class PersistenceUnitBuilder impl
 
             final Collection<String> manifestcpCopy = new LinkedHashSet<String> ();
             boolean resolveWARcp = false;
-            
-            // resolve the classpath for non-standalone war file since module.getClassPath 
+
+            // resolve the classpath for non-standalone war file since module.getClassPath
             // returns the classpath relative to the war file
             if (!module.isStandAlone() && module.getType() == ConfigurationModuleType.WAR) {
                 resolveWARcp = true;
-            } 
-            
+            }
+
             final Collection<String> manifestcp = module.getClassPath();
             for (String classpath : manifestcp) {
                 if (resolveWARcp) {
-                    manifestcpCopy.add(module.resolve(classpath).toString());                    
+                    manifestcpCopy.add(module.resolve(classpath).toString());
                 } else {
                     manifestcpCopy.add(classpath);
                 }
             }
-            
+
             // add "" into manifestcpCopy to make META-INF/persistence.xml in standalone ejb be processed
             if (module.isStandAlone() && module.getType() == ConfigurationModuleType.EJB) {
                 manifestcpCopy.add("");
             }
-            
+
             BundleResourceFinder finder = new BundleResourceFinder(packageAdmin, bundle, "", "META-INF/persistence.xml", new ResourceDiscoveryFilter() {
 
                 @Override
@@ -176,14 +178,14 @@ public class PersistenceUnitBuilder impl
 
                 @Override
                 public boolean directoryDiscoveryRequired(String s) {
-                    
+
                     boolean found = false;
                     if (manifestcpCopy.contains(s)){
                         found=true;
                     } else if(s.endsWith("/") && manifestcpCopy.contains(s.substring(0,s.length()-1))){
                         found=true;
                     }
-                    
+
                     return found;
                 }
             });
@@ -196,8 +198,7 @@ public class PersistenceUnitBuilder impl
                 }
 
                 public boolean foundInJar(Bundle bundle, String jarName, ZipEntry entry, InputStream inputStream) throws Exception {
-                    URL jarURL = bundle.getEntry(jarName);
-                    URL url = new URL("jar:" + jarURL.toString() + "!/" + entry.getName());
+                    URL url = BundleUtil.getNestedEntry(bundle, jarName, entry.getName());
                     persistenceURLs.put(url, jarName);
                     return true;
                 }
@@ -215,7 +216,7 @@ public class PersistenceUnitBuilder impl
                 } catch (JAXBException e) {
                     throw new DeploymentException("Could not parse persistence.xml file: " + persistenceUrl, e);
                 } finally {
-                    in.close();
+                    IOUtils.close(in);
                 }
                 buildPersistenceUnits(persistence, overrides, module, persistenceLocation);
             }
@@ -265,7 +266,7 @@ public class PersistenceUnitBuilder impl
         }
         gbeanData.setAttribute("persistenceUnitName", persistenceUnitName);
         gbeanData.setAttribute("persistenceUnitRoot", persistenceModulePath);
-        
+
         //try to start PU GBean firstly to init the transformer before the entity classes get loaded.
         gbeanData.setPriority(GBeanInfo.PRIORITY_CLASSLOADER);
 
@@ -374,28 +375,28 @@ public class PersistenceUnitBuilder impl
     }
 
     private Persistence fromXmlObject(XmlObject xmlObject) throws JAXBException {
-        
-        /* 
-         * To avoid illegal exception in JAXB. Convert 
-         * 
-         * <xml-fragment> ... </xml-fragment> 
+
+        /*
+         * To avoid illegal exception in JAXB. Convert
+         *
+         * <xml-fragment> ... </xml-fragment>
          * to
          * <persistence xmlns="http://java.sun.com/xml/ns/persistence"> ... </persistence>
-         * 
-         * before unmarshalling it 
+         *
+         * before unmarshalling it
          */
         XmlObject newXmlObject=XmlObject.Factory.newInstance();
         XmlCursor newXmlCursor=newXmlObject.newCursor();
         newXmlCursor.toNextToken();
         newXmlCursor.beginElement(PERSISTENCE_QNAME);
-        
+
         XmlCursor oldXmlCursor=xmlObject.newCursor();
         oldXmlCursor.copyXmlContents(newXmlCursor);
-        
+
         oldXmlCursor.dispose();
         newXmlCursor.dispose();
-        
-        
+
+
         XMLStreamReader reader = newXmlObject.newXMLStreamReader();
         JAXBContext context = JAXBContextFactory.newInstance(Persistence.class);
         Unmarshaller unmarshaller = context.createUnmarshaller();