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">
|