[hibernate-commits] Hibernate SVN: r19060 - in core/trunk/entitymanager/src: main/java/org/hibernate/ejb and 3 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Mon Mar 22 10:40:12 EDT 2010
Author: epbernard
Date: 2010-03-22 10:40:05 -0400 (Mon, 22 Mar 2010)
New Revision: 19060
Added:
core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/CustomScanner.java
core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/Pasta.java
core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/ScannerTest.java
Removed:
core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/NativeScannerTest.java
Modified:
core/trunk/entitymanager/src/main/docbook/en/modules/configuration.xml
core/trunk/entitymanager/src/main/java/org/hibernate/ejb/AvailableSettings.java
core/trunk/entitymanager/src/main/java/org/hibernate/ejb/Ejb3Configuration.java
core/trunk/entitymanager/src/main/java/org/hibernate/ejb/packaging/NativeScanner.java
core/trunk/entitymanager/src/main/java/org/hibernate/ejb/packaging/Scanner.java
core/trunk/entitymanager/src/test/bundles/explicitpar/META-INF/persistence.xml
Log:
HHH-5026 Ability to customize Scanner strategies
Modified: core/trunk/entitymanager/src/main/docbook/en/modules/configuration.xml
===================================================================
--- core/trunk/entitymanager/src/main/docbook/en/modules/configuration.xml 2010-03-22 14:11:37 UTC (rev 19059)
+++ core/trunk/entitymanager/src/main/docbook/en/modules/configuration.xml 2010-03-22 14:40:05 UTC (rev 19060)
@@ -67,7 +67,7 @@
<para>If you use Maven, add the following dependencies</para>
- <programlisting role="XML" language="XML"><project ...>
+ <programlisting language="XML" role="XML"><project ...>
...
<dependencies>
<dependency>
@@ -100,7 +100,7 @@
configuration, so by default, your persistence.xml will be quite
minimalist:</para>
- <programlisting role="XML" language="XML"><persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ <programlisting language="XML" role="XML"><persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
@@ -116,7 +116,7 @@
<para>Here's a more complete example of a
<filename><literal>persistence.xml</literal></filename> file</para>
- <programlisting role="XML" language="XML"><persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ <programlisting language="XML" role="XML"><persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
@@ -211,7 +211,7 @@
environment, the persistence.xml file is not under the same root
directory or jar than your domain model).</para>
- <programlisting role="XML" language="XML"> <jar-file>file:/home/turin/work/local/lab8/build/classes</jar-file></programlisting>
+ <programlisting language="XML" role="XML"> <jar-file>file:/home/turin/work/local/lab8/build/classes</jar-file></programlisting>
</listitem>
</varlistentry>
@@ -323,14 +323,14 @@
<literal><validation-mode></literal>. To use it, add a
regular property</para>
- <programlisting role="XML" language="XML"><property name="javax.persistence.validation.mode">
+ <programlisting language="XML" role="XML"><property name="javax.persistence.validation.mode">
ddl
</property></programlisting>
<para>With this approach, you can mix ddl and callback
modes:</para>
- <programlisting role="XML" language="XML"><property name="javax.persistence.validation.mode">
+ <programlisting language="XML" role="XML"><property name="javax.persistence.validation.mode">
ddl, callback
</property></programlisting>
</listitem>
@@ -376,13 +376,36 @@
</listitem>
<listitem>
- <para>javax.persistence.validation.group.pre-persist defines
- the group or list of groups to validate before persisting an
- entity. This is a comma separated fully qualified class name
- string (eg <code>com.acme.groups.Common</code> or
+ <para><literal>javax.persistence.validation.group.pre-persist</literal>
+ defines the group or list of groups to validate before
+ persisting an entity. This is a comma separated fully
+ qualified class name string (eg
+ <code>com.acme.groups.Common</code> or
<code>com.acme.groups.Common,
- javax.validation.groups.Default</code>)</para>
+ javax.validation.groups.Default</code>). Defaults to the Bean
+ Validation default group.</para>
</listitem>
+
+ <listitem>
+ <para><literal>javax.persistence.validation.group.pre-update</literal>
+ defines the group or list of groups to validate before
+ updating an entity. This is a comma separated fully qualified
+ class name string (eg <code>com.acme.groups.Common</code> or
+ <code>com.acme.groups.Common,
+ javax.validation.groups.Default</code>). Defaults to the Bean
+ Validation default group.</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>javax.persistence.validation.group.pre-remove</literal>
+ defines the group or list of groups to validate before
+ persisting an entity. This is a comma separated fully
+ qualified class name string (eg
+ <code>com.acme.groups.Common</code> or
+ <code>com.acme.groups.Common,
+ javax.validation.groups.Default</code>). Defaults to no
+ group.</para>
+ </listitem>
</itemizedlist>
<note>
@@ -427,7 +450,7 @@
the version embedded in the hibernate-entitymanager.jar. It won't fetch
the resource from the internet.</para>
- <programlisting role="XML" language="XML"><persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ <programlisting language="XML" role="XML"><persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0"></programlisting>
@@ -441,7 +464,7 @@
<classname>EntityManager</classname>. The bootstrap class is
<classname>javax.persistence.Persistence</classname>, e.g.</para>
- <programlisting role="JAVA" language="JAVA">EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
+ <programlisting language="JAVA" role="JAVA">EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
//or
@@ -636,10 +659,26 @@
<entry>If true, the persistence context will be discarded (think
clear() when the method is called. Otherwise the persistence
context will stay alive till the transaction completion: all
- objects will remain managed, and any change will be sy,chronized
+ objects will remain managed, and any change will be synchronized
with the database (default to false, ie wait the transaction
completion)</entry>
</row>
+
+ <row>
+ <entry>hibernate.ejb.resource_scanner</entry>
+
+ <entry><para>By default, Hibernate EntityManager scans itself
+ the list of resources for annotated classes and persistence
+ deployment descriptors (like orm.xml and hbm.xml
+ files).</para><para>You can customize this scanning strategy by
+ implementing
+ <classname>org.hibernate.ejb.packaging.Scanner</classname>. This
+ property is used by container implementors to improve
+ integration with Hibernate.</para><para>Accepts an instance of
+ <classname>Scanner</classname> or the file name of a no-arg
+ constructor class implementing
+ <classname>Scanner</classname>.</para></entry>
+ </row>
</tbody>
</tgroup>
</table>
@@ -663,7 +702,7 @@
<para>Here is a typical configuration in a Java SE environment</para>
- <programlisting role="XML" language="XML"><persistence>
+ <programlisting language="XML" role="XML"><persistence>
<persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">
<class>org.hibernate.ejb.test.Cat</class>
<class>org.hibernate.ejb.test.Distributor</class>
@@ -695,7 +734,7 @@
<para>TODO: me more descriptive on some APIs like setDatasource()</para>
- <programlisting role="JAVA" language="JAVA">Ejb3Configuration cfg = new Ejb3Configuration();
+ <programlisting language="JAVA" role="JAVA">Ejb3Configuration cfg = new Ejb3Configuration();
EntityManagerFactory emf =
cfg.addProperties( properties ) //add some properties
.setInterceptor( myInterceptorImpl ) // set an interceptor
@@ -857,7 +896,7 @@
<classname>Persistence</classname> class is bootstrap class to create an
entity manager factory.</para>
- <programlisting role="JAVA" language="JAVA">// Use persistence.xml configuration
+ <programlisting language="JAVA" role="JAVA">// Use persistence.xml configuration
EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1")
EntityManager em = emf.createEntityManager(); // Retrieve an application managed entity manager
// Work with the EM
@@ -892,4 +931,4 @@
be no performance cost. For more information on Hibernate Validator,
please refer to the Hibernate Annotations reference guide.</para>
</section>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/AvailableSettings.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/AvailableSettings.java 2010-03-22 14:11:37 UTC (rev 19059)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/AvailableSettings.java 2010-03-22 14:40:05 UTC (rev 19060)
@@ -270,11 +270,18 @@
public static final String CONFIGURATION_JNDI_NAME = "hibernate.ejb.configuration_jndi_name";
/**
- * Used to detrmine flush mode.
+ * Used to determine flush mode.
*/
public static final String FLUSH_MODE = "org.hibernate.flushMode";
/**
+ * Pass an implementation of {@link org.hibernate.ejb.packaging.Scanner}:
+ * - preferably an actual instance
+ * - or a class name with a no-arg constructor
+ */
+ public static final String SCANNER = "hibernate.ejb.resource_scanner";
+
+ /**
* List of classes names
* Internal use only
*/
Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/Ejb3Configuration.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/Ejb3Configuration.java 2010-03-22 14:11:37 UTC (rev 19059)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/Ejb3Configuration.java 2010-03-22 14:40:05 UTC (rev 19060)
@@ -324,7 +324,7 @@
Scanner scanner = null;
URL jarURL = null;
if ( metadata.getName() == null ) {
- scanner = buildScanner();
+ scanner = buildScanner( metadata.getProps() );
jarURL = JarVisitorFactory.getJarURLFromURLEntry( url, "/META-INF/persistence.xml" );
metadata.setName( scanner.getUnqualifiedJarName(jarURL) );
}
@@ -333,7 +333,7 @@
}
else if ( persistenceUnitName == null || metadata.getName().equals( persistenceUnitName ) ) {
if (scanner == null) {
- scanner = buildScanner();
+ scanner = buildScanner( metadata.getProps() );
jarURL = JarVisitorFactory.getJarURLFromURLEntry( url, "/META-INF/persistence.xml" );
}
//scan main JAR
@@ -373,8 +373,40 @@
}
}
- private NativeScanner buildScanner() {
- return new NativeScanner();
+ private Scanner buildScanner(Properties properties) {
+ final Object scanner = properties.getProperty( AvailableSettings.SCANNER );
+ if (scanner != null) {
+ Class<?> scannerClass;
+ if ( scanner instanceof String ) {
+ try {
+ scannerClass = ReflectHelper.classForName( (String) scanner, this.getClass() );
+ }
+ catch ( ClassNotFoundException e ) {
+ throw new PersistenceException( "Cannot find scanner class. " + AvailableSettings.SCANNER + "=" + scanner, e );
+ }
+ }
+ else if (scanner instanceof Class) {
+ scannerClass = (Class<? extends Scanner>) scanner;
+ }
+ else if (scanner instanceof Scanner) {
+ return (Scanner) scanner;
+ }
+ else {
+ throw new PersistenceException( "Scanner class configuration error: unknown type on the property. " + AvailableSettings.SCANNER );
+ }
+ try {
+ return (Scanner) scannerClass.newInstance();
+ }
+ catch ( InstantiationException e ) {
+ throw new PersistenceException( "Unable to load Scanner class: " + scannerClass, e );
+ }
+ catch ( IllegalAccessException e ) {
+ throw new PersistenceException( "Unable to load Scanner class: " + scannerClass, e );
+ }
+ }
+ else {
+ return new NativeScanner();
+ }
}
private static class ScanningContext {
@@ -531,7 +563,9 @@
boolean searchForORMFiles = ! xmlFiles.contains( META_INF_ORM_XML );
ScanningContext context = new ScanningContext();
- context.scanner( buildScanner() )
+ final Properties copyOfProperties = (Properties) info.getProperties().clone();
+ ConfigurationHelper.overrideProperties( copyOfProperties, integration );
+ context.scanner( buildScanner( copyOfProperties ) )
.searchOrm( searchForORMFiles )
.explicitMappingFiles( null ); //URLs provided by the container already
Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/packaging/NativeScanner.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/packaging/NativeScanner.java 2010-03-22 14:11:37 UTC (rev 19059)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/packaging/NativeScanner.java 2010-03-22 14:40:05 UTC (rev 19060)
@@ -225,7 +225,7 @@
return files;
}
- public Set<NamedInputStream> getFilesInClasspath(URL jartoScan, Set<String> filePatterns) {
+ public Set<NamedInputStream> getFilesInClasspath(Set<String> filePatterns) {
throw new AssertionFailure( "Not implemented" );
}
Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/packaging/Scanner.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/packaging/Scanner.java 2010-03-22 14:11:37 UTC (rev 19059)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/packaging/Scanner.java 2010-03-22 14:40:05 UTC (rev 19060)
@@ -50,11 +50,13 @@
/**
- * return all files in the classpath (ie PU visibility) matching one of these file names
+ * Return all files in the classpath (ie PU visibility) matching one of these file names
* if filePatterns is empty, return all files
* the use case is really exact file name.
+ *
+ * NOT USED by HEM at the moment. We use exact file search via getResourceAsStream for now.
*/
- Set<NamedInputStream> getFilesInClasspath(URL jartoScan, Set<String> filePatterns);
+ Set<NamedInputStream> getFilesInClasspath(Set<String> filePatterns);
/**
* return the unqualified JAR name ie customer-model.jar or store.war
Modified: core/trunk/entitymanager/src/test/bundles/explicitpar/META-INF/persistence.xml
===================================================================
--- core/trunk/entitymanager/src/test/bundles/explicitpar/META-INF/persistence.xml 2010-03-22 14:11:37 UTC (rev 19059)
+++ core/trunk/entitymanager/src/test/bundles/explicitpar/META-INF/persistence.xml 2010-03-22 14:40:05 UTC (rev 19060)
@@ -11,6 +11,9 @@
<class>org.hibernate.ejb.test.Item</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
+ <!-- custom scanner test -->
+ <property name="hibernate.ejb.resource_scanner" value="org.hibernate.ejb.test.packaging.CustomScanner"/>
+
<property name="hibernate.dialect" value="${db.dialect}"/>
<property name="hibernate.connection.driver_class" value="${jdbc.driver}"/>
<property name="hibernate.connection.username" value="${jdbc.user}"/>
Added: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/CustomScanner.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/CustomScanner.java (rev 0)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/CustomScanner.java 2010-03-22 14:40:05 UTC (rev 19060)
@@ -0,0 +1,50 @@
+package org.hibernate.ejb.test.packaging;
+
+import java.lang.annotation.Annotation;
+import java.net.URL;
+import java.util.Set;
+
+import org.hibernate.ejb.packaging.NamedInputStream;
+import org.hibernate.ejb.packaging.NativeScanner;
+import org.hibernate.ejb.packaging.Scanner;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CustomScanner implements Scanner {
+ public static boolean isUsed = false;
+ private Scanner scanner = new NativeScanner();
+
+ public static boolean isUsed() {
+ return isUsed;
+ }
+
+ public static void resetUsed() {
+ isUsed = false;
+ }
+
+ public Set<Package> getPackagesInJar(URL jartoScan, Set<Class<? extends Annotation>> annotationsToLookFor) {
+ isUsed = true;
+ return scanner.getPackagesInJar( jartoScan, annotationsToLookFor );
+ }
+
+ public Set<Class<?>> getClassesInJar(URL jartoScan, Set<Class<? extends Annotation>> annotationsToLookFor) {
+ isUsed = true;
+ return scanner.getClassesInJar( jartoScan, annotationsToLookFor );
+ }
+
+ public Set<NamedInputStream> getFilesInJar(URL jartoScan, Set<String> filePatterns) {
+ isUsed = true;
+ return scanner.getFilesInJar( jartoScan, filePatterns );
+ }
+
+ public Set<NamedInputStream> getFilesInClasspath(Set<String> filePatterns) {
+ isUsed = true;
+ return scanner.getFilesInClasspath( filePatterns );
+ }
+
+ public String getUnqualifiedJarName(URL jarUrl) {
+ isUsed = true;
+ return scanner.getUnqualifiedJarName( jarUrl );
+ }
+}
Deleted: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/NativeScannerTest.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/NativeScannerTest.java 2010-03-22 14:11:37 UTC (rev 19059)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/NativeScannerTest.java 2010-03-22 14:40:05 UTC (rev 19060)
@@ -1,74 +0,0 @@
-// $Id:$
-/*
- * Hibernate, Relational Persistence for Idiomatic Java
- *
- * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
- * indicated by the @author tags or express copyright attribution
- * statements applied by the authors. All third-party contributions are
- * distributed under license by Red Hat Inc.
- *
- * This copyrighted material is made available to anyone wishing to use, modify,
- * copy, or redistribute it subject to the terms and conditions of the GNU
- * Lesser General Public License, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this distribution; if not, write to:
- * Free Software Foundation, Inc.
- * 51 Franklin Street, Fifth Floor
- * Boston, MA 02110-1301 USA
- */
-package org.hibernate.ejb.test.packaging;
-
-import java.io.File;
-import java.lang.annotation.Annotation;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Embeddable;
-import javax.persistence.Entity;
-import javax.persistence.MappedSuperclass;
-
-import org.hibernate.ejb.packaging.NamedInputStream;
-import org.hibernate.ejb.packaging.NativeScanner;
-import org.hibernate.ejb.packaging.Scanner;
-import org.hibernate.ejb.test.pack.defaultpar.ApplicationServer;
-
-
-/**
- * @author Emmanuel Bernard
- * @author Hardy Ferentschik
- */
-public class NativeScannerTest extends PackagingTestCase {
- public void testNativeScanner() throws Exception {
- File defaultPar = buildDefaultPar();
- addPackageToClasspath( defaultPar );
-
- Scanner scanner = new NativeScanner();
- assertEquals( "defaultpar", scanner.getUnqualifiedJarName( defaultPar.toURL() ) );
-
- Set<Class<? extends Annotation>> annotationsToLookFor = new HashSet<Class<? extends Annotation>>( 3 );
- annotationsToLookFor.add( Entity.class );
- annotationsToLookFor.add( MappedSuperclass.class );
- annotationsToLookFor.add( Embeddable.class );
- final Set<Class<?>> classes = scanner.getClassesInJar( defaultPar.toURL(), annotationsToLookFor );
-
- assertEquals( 3, classes.size() );
- assertTrue( classes.contains( ApplicationServer.class ) );
- assertTrue( classes.contains( org.hibernate.ejb.test.pack.defaultpar.Version.class ) );
-
- Set<String> filePatterns = new HashSet<String>( 2 );
- filePatterns.add( "**/*.hbm.xml" );
- filePatterns.add( "META-INF/orm.xml" );
- final Set<NamedInputStream> files = scanner.getFilesInJar( defaultPar.toURL(), filePatterns );
-
- assertEquals( 2, files.size() );
- for ( NamedInputStream file : files ) {
- assertNotNull( file.getStream() );
- file.getStream().close();
- }
- }
-}
Added: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/Pasta.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/Pasta.java (rev 0)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/Pasta.java 2010-03-22 14:40:05 UTC (rev 19060)
@@ -0,0 +1,20 @@
+package org.hibernate.ejb.test.packaging;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Pasta {
+ @Id @GeneratedValue
+ public Integer getId() { return id; }
+ public void setId(Integer id) { this.id = id;}
+ private Integer id;
+
+ public String getType() { return type; }
+ public void setType(String type) { this.type = type;}
+ private String type;
+}
Copied: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/ScannerTest.java (from rev 19040, core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/NativeScannerTest.java)
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/ScannerTest.java (rev 0)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/ScannerTest.java 2010-03-22 14:40:05 UTC (rev 19060)
@@ -0,0 +1,94 @@
+// $Id$
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Inc.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ */
+package org.hibernate.ejb.test.packaging;
+
+import java.io.File;
+import java.lang.annotation.Annotation;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Embeddable;
+import javax.persistence.Entity;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Persistence;
+
+import org.hibernate.ejb.packaging.NamedInputStream;
+import org.hibernate.ejb.packaging.NativeScanner;
+import org.hibernate.ejb.packaging.Scanner;
+import org.hibernate.ejb.test.pack.defaultpar.ApplicationServer;
+
+
+/**
+ * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
+ */
+public class ScannerTest extends PackagingTestCase {
+ public void testNativeScanner() throws Exception {
+ File defaultPar = buildDefaultPar();
+ addPackageToClasspath( defaultPar );
+
+ Scanner scanner = new NativeScanner();
+ assertEquals( "defaultpar", scanner.getUnqualifiedJarName( defaultPar.toURL() ) );
+
+ Set<Class<? extends Annotation>> annotationsToLookFor = new HashSet<Class<? extends Annotation>>( 3 );
+ annotationsToLookFor.add( Entity.class );
+ annotationsToLookFor.add( MappedSuperclass.class );
+ annotationsToLookFor.add( Embeddable.class );
+ final Set<Class<?>> classes = scanner.getClassesInJar( defaultPar.toURL(), annotationsToLookFor );
+
+ assertEquals( 3, classes.size() );
+ assertTrue( classes.contains( ApplicationServer.class ) );
+ assertTrue( classes.contains( org.hibernate.ejb.test.pack.defaultpar.Version.class ) );
+
+ Set<String> filePatterns = new HashSet<String>( 2 );
+ filePatterns.add( "**/*.hbm.xml" );
+ filePatterns.add( "META-INF/orm.xml" );
+ final Set<NamedInputStream> files = scanner.getFilesInJar( defaultPar.toURL(), filePatterns );
+
+ assertEquals( 2, files.size() );
+ for ( NamedInputStream file : files ) {
+ assertNotNull( file.getStream() );
+ file.getStream().close();
+ }
+ }
+
+ public void testCustomScanner() throws Exception {
+ File defaultPar = buildDefaultPar();
+ File explicitPar = buildExplicitPar();
+ addPackageToClasspath( defaultPar, explicitPar );
+
+ EntityManagerFactory emf;
+ CustomScanner.resetUsed();
+ emf = Persistence.createEntityManagerFactory( "defaultpar", new HashMap() );
+ assertTrue( ! CustomScanner.isUsed() );
+ emf.close();
+
+ CustomScanner.resetUsed();
+ emf = Persistence.createEntityManagerFactory( "manager1", new HashMap() );
+ assertTrue( CustomScanner.isUsed() );
+ emf.close();
+ }
+}
Property changes on: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/packaging/ScannerTest.java
___________________________________________________________________
Name: svn:keywords
+ Id
More information about the hibernate-commits
mailing list