Author: epbernard Date: 2006-05-01 23:21:21 -0400 (Mon, 01 May 2006) New Revision: 9848 Modified: trunk/HibernateExt/metadata/build.xml trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml Log: ANN-325 XML entity are part of the persistence unit Modified: trunk/HibernateExt/metadata/build.xml =================================================================== --- trunk/HibernateExt/metadata/build.xml 2006-05-01 23:28:45 UTC (rev 9847) +++ trunk/HibernateExt/metadata/build.xml 2006-05-02 03:21:21 UTC (rev 9848) @@ -120,15 +120,15 @@ </junit> </target> - <target name="report"> + <!-- target name="report"> <mkdir dir="test_output"/> <junitreport todir="test_output"> <fileset dir="test_output"> <include name="TEST-*.xml"/> </fileset> - <report format="frames" todir="./report/html"/> + <report format="frames" todir="test_output/report"/> </junitreport> - </target> + </target --> <target name="jar" depends="compile" description="Build the distribution .jar file"> <mkdir dir="${classes.dir}/META-INF"/> Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-05-01 23:28:45 UTC (rev 9847) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-05-02 03:21:21 UTC (rev 9848) @@ -221,10 +221,19 @@ protected void secondPassCompile() throws MappingException { log.debug( "Execute first pass mapping processing" ); //build annotatedClassEntities - for ( XClass clazz : annotatedClasses ) { - if ( clazz.isAnnotationPresent( Entity.class ) ) { - annotatedClassEntities.put( clazz.getName(), clazz ); + { + List<XClass> tempAnnotatedClasses = new ArrayList<XClass>( annotatedClasses.size() ); + for ( XClass clazz : annotatedClasses ) { + if ( clazz.isAnnotationPresent( Entity.class ) ) { + annotatedClassEntities.put( clazz.getName(), clazz ); + tempAnnotatedClasses.add(clazz); + } + else if (clazz.isAnnotationPresent( MappedSuperclass.class ) ) { + tempAnnotatedClasses.add(clazz); + } + //only keep MappedSuperclasses and Entity in this list } + annotatedClasses = tempAnnotatedClasses; } if ( precedence == null ) precedence = getProperties().getProperty( ARTEFACT ); if ( precedence == null ) precedence = DEFAULT_PRECEDENCE; @@ -457,7 +466,15 @@ hbmDocuments.add( doc ); } else { - ( (JavaXFactory) reflectionManager ).getXMLContext().addDocument( doc ); + List<String> classnames = ( (JavaXFactory) reflectionManager ).getXMLContext().addDocument( doc ); + for (String classname : classnames) { + try { + annotatedClasses.add( reflectionManager.classForName( classname, this.getClass() ) ); + } + catch (ClassNotFoundException e) { + throw new AnnotationException( "Unable to load class defined in XML: " + classname, e ); + } + } } } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java 2006-05-01 23:28:45 UTC (rev 9847) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java 2006-05-02 03:21:21 UTC (rev 9848) @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.ArrayList; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -20,7 +21,10 @@ private Map<String, Element> classOverriding = new HashMap<String, Element>(); private Map<String, Default> defaultsOverriding = new HashMap<String, Default>(); - public void addDocument(Document doc) { + /** + * Add a document and return the list of added classes names + */ + public List<String> addDocument(Document doc) { Element root = doc.getRootElement(); //global defaults Element metadata = root.element( "persistence-unit-metadata" ); @@ -62,24 +66,26 @@ unitElement = root.element( "access" ); entityMappingDefault.setAccess( unitElement != null ? unitElement.getTextTrim() : null ); - + List<String> addedClasses = new ArrayList<String>(); List<Element> entities = (List<Element>) root.elements( "entity" ); - addClass( entities, packageName, entityMappingDefault ); + addClass( entities, packageName, entityMappingDefault, addedClasses ); entities = (List<Element>) root.elements( "mapped-superclass" ); - addClass( entities, packageName, entityMappingDefault ); + addClass( entities, packageName, entityMappingDefault, addedClasses ); entities = (List<Element>) root.elements( "embeddable" ); - addClass( entities, packageName, entityMappingDefault ); + addClass( entities, packageName, entityMappingDefault, addedClasses ); + return addedClasses; } - private void addClass(List<Element> entities, String packageName, Default defaults) { + private void addClass(List<Element> entities, String packageName, Default defaults, List<String> addedClasses) { for ( Element element : entities ) { String className = buildSafeClassName( element.attributeValue( "class" ), packageName ); if ( classOverriding.containsKey( className ) ) { //maybe switch it to warn? throw new IllegalStateException( "Duplicate XML entry for " + className ); } + addedClasses.add( className ); classOverriding.put( className, element ); Default localDefault = new Default(); localDefault.override( defaults ); Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java 2006-05-01 23:28:45 UTC (rev 9847) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java 2006-05-02 03:21:21 UTC (rev 9848) @@ -43,13 +43,25 @@ s.close(); } + public void testXMLEntityHandled() throws Exception { + Session s = openSession(); + s.getTransaction().begin(); + Lighter l = new Lighter(); + l.name = "Blue"; + l.power = "400F"; + s.persist( l ); + s.flush(); + s.getTransaction().rollback(); + s.close(); + } + protected Class[] getMappings() { return new Class[]{ CarModel.class, Manufacturer.class, Model.class, - Light.class, - Lighter.class + Light.class + //Lighter.class xml only entuty }; } Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml 2006-05-01 23:28:45 UTC (rev 9847) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml 2006-05-02 03:21:21 UTC (rev 9848) @@ -5,7 +5,7 @@ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd" version="1.0" > - <package>org.hibernate.ejb.test.pack.defaultpar</package> + <package>org.hibernate.test.annotations.xml.ejb3</package> <entity class="Lighter" access="FIELD" metadata-complete="true"> <attributes> <id name="name"> |