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;
}