From: <hib...@li...> - 2006-08-11 04:58:47
|
Author: epbernard Date: 2006-08-11 00:58:44 -0400 (Fri, 11 Aug 2006) New Revision: 10243 Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java Log: EJB-212 excludeUnlistedClasses is taken into account if autodetection property is not set up Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-08-11 04:21:33 UTC (rev 10242) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-08-11 04:58:44 UTC (rev 10243) @@ -176,7 +176,6 @@ ); for ( PersistenceMetadata metadata : metadataFiles ) { log.trace( metadata.toString() ); - JarVisitor.Filter[] filters = getFilters( metadata.getProps(), integration, metadata.getMappingFiles() ); if ( metadata.getProvider() == null || IMPLEMENTATION_NAME.equalsIgnoreCase( metadata.getProvider() @@ -184,7 +183,8 @@ log.trace( "Archive to be processed by hibernate Entity Manager implementation found" ); //correct provider URL jarURL = JarVisitor.getJarURLFromURLEntry( url, "/META-INF/persistence.xml" ); - JarVisitor visitor = JarVisitor.getVisitor( jarURL, filters ); + JarVisitor.Filter[] persistenceXmlFilter = getFilters( metadata, integration, metadata.getExcludeUnlistedClasses() ); + JarVisitor visitor = JarVisitor.getVisitor( jarURL, persistenceXmlFilter ); if ( metadata.getName() == null ) { metadata.setName( visitor.getUnqualifiedJarName() ); } @@ -196,8 +196,9 @@ } else if ( emName == null || metadata.getName().equals( emName ) ) { addMetadataFromVisitor( visitor, metadata ); + JarVisitor.Filter[] otherXmlFilter = getFilters( metadata, integration, false ); for ( String jarFile : metadata.getJarFiles() ) { - visitor = JarVisitor.getVisitor( jarFile, filters ); + visitor = JarVisitor.getVisitor( jarFile, otherXmlFilter ); addMetadataFromVisitor( visitor, metadata ); } return createFactory( metadata, integration ); @@ -295,15 +296,14 @@ defineTransactionType( transactionType, workingVars ); // } //workingVars.put( HibernatePersistence.TRANSACTION_TYPE, transactionType ); - boolean[] detectArtifact = getDetectedArtifacts( info.getProperties(), null ); + boolean[] detectArtifactForOtherJars = getDetectedArtifacts( info.getProperties(), null, false ); + boolean[] detectArtifactForMainJar = getDetectedArtifacts( info.getProperties(), null, info.excludeUnlistedClasses() ); for ( URL jar : info.getJarFileUrls() ) { - if ( detectArtifact[0] ) scanForClasses( jar, packages, entities ); - if ( detectArtifact[1] ) scanForHbmXmlFiles( jar, hbmFiles ); + if ( detectArtifactForOtherJars[0] ) scanForClasses( jar, packages, entities ); + if ( detectArtifactForOtherJars[1] ) scanForHbmXmlFiles( jar, hbmFiles ); } - if ( ! info.excludeUnlistedClasses() ) { - if ( detectArtifact[0] ) scanForClasses( info.getPersistenceUnitRootUrl(), packages, entities ); - if ( detectArtifact[1] ) scanForHbmXmlFiles( info.getPersistenceUnitRootUrl(), hbmFiles ); - } + if ( detectArtifactForMainJar[0] ) scanForClasses( info.getPersistenceUnitRootUrl(), packages, entities ); + if ( detectArtifactForMainJar[1] ) scanForHbmXmlFiles( info.getPersistenceUnitRootUrl(), hbmFiles ); Properties properties = info.getProperties() != null ? info.getProperties() : @@ -459,7 +459,7 @@ return this; } - private boolean[] getDetectedArtifacts(Properties properties, Map overridenProperties) { + private boolean[] getDetectedArtifacts(Properties properties, Map overridenProperties, boolean excludeIfNotOverriden) { boolean[] result = new boolean[2]; result[0] = false; //detect classes result[1] = false; //detect hbm @@ -467,9 +467,16 @@ (String) overridenProperties.get( HibernatePersistence.AUTODETECTION ) : null; detect = detect == null ? - properties.getProperty( HibernatePersistence.AUTODETECTION, "class,hbm" ) : + properties.getProperty( HibernatePersistence.AUTODETECTION) : detect; - StringTokenizer st = new StringTokenizer( detect, ",", false ); + if (detect == null && excludeIfNotOverriden) { + //not overriden so we comply with the spec + return result; + } + else if (detect == null){ + detect = "class,hbm"; + } + StringTokenizer st = new StringTokenizer( detect, ", ", false ); while ( st.hasMoreElements() ) { String element = (String) st.nextElement(); if ( "class".equalsIgnoreCase( element ) ) result[0] = true; @@ -479,9 +486,12 @@ return result; } - private JarVisitor.Filter[] getFilters(Properties properties, Map overridenProperties, final List<String> mappingFiles) { - boolean[] result = getDetectedArtifacts( properties, overridenProperties ); - int size = ( result[0] ? 2 : 0 ) + 1; //( result[1] ? 1 : 0 ); + private JarVisitor.Filter[] getFilters(PersistenceMetadata metadata, Map overridenProperties, boolean excludeIfNotOverriden) { + Properties properties = metadata.getProps(); + final List<String> mappingFiles = metadata.getMappingFiles(); + boolean[] result = getDetectedArtifacts( properties, overridenProperties, excludeIfNotOverriden ); + + int size = ( result[0] ? 2 : 0 ) + 1; //class involves classes and packages, xml files are always involved because of orm.xml JarVisitor.Filter[] filters = new JarVisitor.Filter[size]; if ( result[0] ) { filters[0] = new JarVisitor.PackageFilter( false, null ) { |