[hibernate-commits] Hibernate SVN: r11211 - in branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb: packaging and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Feb 15 22:51:12 EST 2007


Author: epbernard
Date: 2007-02-15 22:51:12 -0500 (Thu, 15 Feb 2007)
New Revision: 11211

Added:
   branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java
Modified:
   branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java
   branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java
Log:
EJB-262 better usability by providing XML file name on error

Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java	2007-02-15 22:04:11 UTC (rev 11210)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java	2007-02-16 03:51:12 UTC (rev 11211)
@@ -59,6 +59,7 @@
 import org.hibernate.ejb.packaging.JarVisitor;
 import org.hibernate.ejb.packaging.PersistenceMetadata;
 import org.hibernate.ejb.packaging.PersistenceXmlLoader;
+import org.hibernate.ejb.packaging.NamedInputStream;
 import org.hibernate.ejb.transaction.JoinableCMTTransactionFactory;
 import org.hibernate.ejb.util.ConfigurationHelper;
 import org.hibernate.ejb.util.LogHelper;
@@ -221,16 +222,19 @@
 							metadata.getProvider()
 					) ) {
 						//correct provider
-						URL jarURL = JarVisitor.getJarURLFromURLEntry( url, "/META-INF/persistence.xml" );
-						JarVisitor.Filter[] persistenceXmlFilter = getFilters( metadata, integration, metadata.getExcludeUnlistedClasses() );
-						JarVisitor visitor = JarVisitor.getVisitor( jarURL, persistenceXmlFilter );
+
+						//lazy compute the visitor if possible to avoid useless exceptions if an unexpected state happens
+						JarVisitor visitor = null;
+
 						if ( metadata.getName() == null ) {
+							visitor = getMainJarVisitor( url, metadata, integration );
 							metadata.setName( visitor.getUnqualifiedJarName() );
 						}
 						if ( persistenceUnitName == null && xmls.hasMoreElements() ) {
 							throw new PersistenceException( "No name provided and several persistence units found" );
 						}
 						else if ( persistenceUnitName == null || metadata.getName().equals( persistenceUnitName ) ) {
+							if (visitor == null) visitor = getMainJarVisitor( url, metadata, integration );
 							addMetadataFromVisitor( visitor, metadata );
 							JarVisitor.Filter[] otherXmlFilter = getFilters( metadata, integration, false );
 							for ( String jarFile : metadata.getJarFiles() ) {
@@ -254,13 +258,20 @@
 		}
 	}
 
+	private JarVisitor getMainJarVisitor(URL url, PersistenceMetadata metadata, Map integration) {
+		URL jarURL = JarVisitor.getJarURLFromURLEntry( url, "/META-INF/persistence.xml" );
+		JarVisitor.Filter[] persistenceXmlFilter = getFilters( metadata, integration, metadata.getExcludeUnlistedClasses() );
+		JarVisitor visitor = JarVisitor.getVisitor( jarURL, persistenceXmlFilter );
+		return visitor;
+	}
+
 	private static void addMetadataFromVisitor(JarVisitor visitor, PersistenceMetadata metadata) throws IOException {
 		Set[] entries = visitor.getMatchingEntries();
 		JarVisitor.Filter[] filters = visitor.getFilters();
 		int size = filters.length;
 		List<String> classes = metadata.getClasses();
 		List<String> packages = metadata.getPackages();
-		List<InputStream> hbmFiles = metadata.getHbmfiles();
+		List<NamedInputStream> hbmFiles = metadata.getHbmfiles();
 		for ( int index = 0; index < size ; index++ ) {
 			Iterator homogeneousEntry = entries[index].iterator();
 			while ( homogeneousEntry.hasNext() ) {
@@ -272,7 +283,7 @@
 					packages.add( entry.getName() );
 				}
 				else if ( filters[index] instanceof JarVisitor.FileFilter ) {
-					hbmFiles.add( entry.getInputStream() );
+					hbmFiles.add( new NamedInputStream( entry.getName(), entry.getInputStream() ) );
 					metadata.getMappingFiles().remove( entry.getName() );
 				}
 			}
@@ -320,17 +331,11 @@
 			workingVars.put( HibernatePersistence.PERSISTENCE_UNIT_NAME, info.getPersistenceUnitName() );
 			List<String> entities = new ArrayList<String>( 50 );
 			if ( info.getManagedClassNames() != null ) entities.addAll( info.getManagedClassNames() );
-			List<InputStream> hbmFiles = new ArrayList<InputStream>();
+			List<NamedInputStream> hbmFiles = new ArrayList<NamedInputStream>();
 			List<String> packages = new ArrayList<String>();
 			List<String> xmlFiles = new ArrayList<String>( 50 );
 			if ( info.getMappingFileNames() != null ) xmlFiles.addAll( info.getMappingFileNames() );
 			if ( ! xmlFiles.contains( META_INF_ORM_XML ) ) xmlFiles.add( META_INF_ORM_XML );
-			//		Object overridenTxType = integration.get( HibernatePersistence.TRANSACTION_TYPE );
-			//		if (overridenTxType != null) {
-			//			defineTransactionType( overridenTxType, info.getPersistenceUnitName() );
-			//		}
-			//		else {
-			//		}
 
 			boolean[] detectArtifactForOtherJars = getDetectedArtifacts( info.getProperties(), null, false );
 			boolean[] detectArtifactForMainJar = getDetectedArtifacts( info.getProperties(), null, info.excludeUnlistedClasses() );
@@ -445,7 +450,7 @@
 				errors.clear();
 				org.dom4j.Document doc = saxReader.read( is );
 				if ( errors.size() != 0 ) {
-					throw new MappingException( "invalid mapping", (Throwable) errors.get( 0 ) );
+					throw new MappingException( "invalid mapping: " + xmlFile, (Throwable) errors.get( 0 ) );
 				}
 				Element rootElement = doc.getRootElement();
 				if ( rootElement != null && "entity-mappings".equals( rootElement.getName() ) ) {
@@ -529,7 +534,7 @@
 				properties.getProperty( HibernatePersistence.AUTODETECTION) :
 				detect;
 		if (detect == null && excludeIfNotOverriden) {
-			//not overriden so we comply with the spec
+			//not overriden through HibernatePersistence.AUTODETECTION so we comply with the spec excludeUnlistedClasses
 			return result;
 		}
 		else if (detect == null){
@@ -589,7 +594,7 @@
 		return filters;
 	}
 
-	private void scanForHbmXmlFiles(URL jar, List<InputStream> hbmxmls) {
+	private void scanForHbmXmlFiles(URL jar, List<NamedInputStream> hbmxmls) {
 		Iterator it = ArchiveBrowser.getBrowser(
 				jar, new ArchiveBrowser.Filter() {
 			public boolean accept(String filename) {
@@ -600,7 +605,7 @@
 
 		while ( it.hasNext() ) {
 			InputStream stream = (InputStream) it.next();
-			hbmxmls.add( stream );
+			hbmxmls.add( new NamedInputStream("", stream) );
 		}
 	}
 
@@ -934,12 +939,23 @@
 			}
 		}
 		if ( workingVars.containsKey( HibernatePersistence.HBXML_FILES ) ) {
-			Collection<InputStream> hbmXmlFiles = (Collection<InputStream>) workingVars.get(
+			Collection<NamedInputStream> hbmXmlFiles = (Collection<NamedInputStream>) workingVars.get(
 					HibernatePersistence.HBXML_FILES
 			);
-			for ( InputStream is : hbmXmlFiles ) {
-				//addInputStream has the responsibility to close the stream
-				cfg.addInputStream( is );
+			for ( NamedInputStream is : hbmXmlFiles ) {
+				try {
+					//addInputStream has the responsibility to close the stream
+					cfg.addInputStream( is.getStream() );
+				}
+				catch (MappingException me) {
+					//try our best to give the file name
+					if ( StringHelper.isEmpty( is.getName() ) ) {
+						throw me;
+					}
+					else {
+						throw new MappingException("Error while parsing file: " + is.getName(), me );
+					}
+				}
 			}
 		}
 	}

Added: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java	                        (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java	2007-02-16 03:51:12 UTC (rev 11211)
@@ -0,0 +1,33 @@
+//$Id: $
+package org.hibernate.ejb.packaging;
+
+import java.io.InputStream;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class NamedInputStream {
+	public NamedInputStream(String name, InputStream stream) {
+		this.name = name;
+		this.stream = stream;
+	}
+
+	private String name;
+	private InputStream stream;
+
+	public InputStream getStream() {
+		return stream;
+	}
+
+	public void setStream(InputStream stream) {
+		this.stream = stream;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java	2007-02-15 22:04:11 UTC (rev 11210)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java	2007-02-16 03:51:12 UTC (rev 11211)
@@ -26,7 +26,7 @@
 	private List<String> packages = new ArrayList<String>();
 	private List<String> mappingFiles = new ArrayList<String>();
 	private Set<String> jarFiles = new HashSet<String>();
-	private List<InputStream> hbmfiles = new ArrayList<InputStream>();
+	private List<NamedInputStream> hbmfiles = new ArrayList<NamedInputStream>();
 	private Properties props = new Properties();
 	private boolean excludeUnlistedClasses = false;
 
@@ -113,11 +113,14 @@
 		this.props = props;
 	}
 
-	public List<InputStream> getHbmfiles() {
+	public List<NamedInputStream> getHbmfiles() {
 		return hbmfiles;
 	}
 
-	public void setHbmfiles(List<InputStream> hbmfiles) {
+	/**
+	 * @deprecated use getHbmfiles() rather
+	 */
+	public void setHbmfiles(List<NamedInputStream> hbmfiles) {
 		this.hbmfiles = hbmfiles;
 	}
 




More information about the hibernate-commits mailing list