You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(22) |
Nov
(308) |
Dec
(131) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(369) |
Feb
(171) |
Mar
(236) |
Apr
(187) |
May
(218) |
Jun
(217) |
Jul
(127) |
Aug
(448) |
Sep
(270) |
Oct
(231) |
Nov
(422) |
Dec
(255) |
2004 |
Jan
(111) |
Feb
(73) |
Mar
(338) |
Apr
(351) |
May
(349) |
Jun
(495) |
Jul
(394) |
Aug
(1048) |
Sep
(499) |
Oct
(142) |
Nov
(269) |
Dec
(638) |
2005 |
Jan
(825) |
Feb
(1272) |
Mar
(593) |
Apr
(690) |
May
(950) |
Jun
(958) |
Jul
(767) |
Aug
(839) |
Sep
(525) |
Oct
(449) |
Nov
(585) |
Dec
(455) |
2006 |
Jan
(603) |
Feb
(656) |
Mar
(195) |
Apr
(114) |
May
(136) |
Jun
(100) |
Jul
(128) |
Aug
(68) |
Sep
(7) |
Oct
(1) |
Nov
(1) |
Dec
(8) |
2007 |
Jan
(4) |
Feb
(3) |
Mar
(8) |
Apr
(16) |
May
(5) |
Jun
(4) |
Jul
(6) |
Aug
(23) |
Sep
(15) |
Oct
(5) |
Nov
(7) |
Dec
(5) |
2008 |
Jan
(5) |
Feb
(1) |
Mar
(1) |
Apr
(5) |
May
(1) |
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2012 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
(1) |
Jul
(1) |
Aug
(1) |
Sep
|
Oct
(2) |
Nov
(3) |
Dec
(2) |
2013 |
Jan
(1) |
Feb
|
Mar
(2) |
Apr
(1) |
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
(2) |
Jun
(1) |
Jul
|
Aug
(1) |
Sep
(1) |
Oct
|
Nov
(1) |
Dec
|
2015 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2017 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <hib...@li...> - 2006-04-27 03:34:18
|
Author: epbernard Date: 2006-04-26 23:34:10 -0400 (Wed, 26 Apr 2006) New Revision: 9809 Added: tags/entitymanager_v31beta8/ Log: create release tag |
From: <hib...@li...> - 2006-04-27 03:32:20
|
Author: epbernard Date: 2006-04-26 23:32:17 -0400 (Wed, 26 Apr 2006) New Revision: 9808 Added: tags/annotations_v31beta10/HibernateExt/ Log: tag Copied: tags/annotations_v31beta10/HibernateExt (from rev 9807, trunk/HibernateExt) |
From: <hib...@li...> - 2006-04-27 03:30:54
|
Author: epbernard Date: 2006-04-26 23:30:51 -0400 (Wed, 26 Apr 2006) New Revision: 9807 Added: tags/annotations_v31beta10/ Log: Created folder remotely |
From: <hib...@li...> - 2006-04-27 03:21:17
|
Author: epbernard Date: 2006-04-26 23:21:02 -0400 (Wed, 26 Apr 2006) New Revision: 9806 Modified: trunk/HibernateExt/common/common-build.xml trunk/HibernateExt/ejb/changelog.txt trunk/HibernateExt/ejb/lib/hibernate-annotations.jar trunk/HibernateExt/ejb/readme.txt trunk/HibernateExt/metadata/changelog.txt trunk/HibernateExt/metadata/readme.txt Log: release Modified: trunk/HibernateExt/common/common-build.xml =================================================================== --- trunk/HibernateExt/common/common-build.xml 2006-04-26 23:46:33 UTC (rev 9805) +++ trunk/HibernateExt/common/common-build.xml 2006-04-27 03:21:02 UTC (rev 9806) @@ -91,6 +91,7 @@ <include name="**/*.jpg"/> <include name="**/*.gif"/> <include name="**/*.dtd"/> + <include name="**/*.xsd"/> <include name="**/*.xml"/> <include name="**/*.xslt"/> Modified: trunk/HibernateExt/ejb/changelog.txt =================================================================== --- trunk/HibernateExt/ejb/changelog.txt 2006-04-26 23:46:33 UTC (rev 9805) +++ trunk/HibernateExt/ejb/changelog.txt 2006-04-27 03:21:02 UTC (rev 9806) @@ -1,6 +1,21 @@ Hibernate EntityManager Changelog ================================== +3.1.0.Beta8 (26-04-2006) +------------------------ + +** Bug + * [EJB-155] - assumes Map.Entry where string is returned + * [EJB-156] - Setting a transaction factory raise an assertion failure + * [EJB-166] - StaleObjectStaleException not wrapped into an optimisticLockException when merge is used + + + +** New Feature + * [EJB-157] - Display the version number at init time to avoid user confusion regarding the version used + * [EJB-164] - Support for EJB3 mapping files and META-INF/orm.xml + + 3.1beta7 (27-03-2006) --------------------- Modified: trunk/HibernateExt/ejb/lib/hibernate-annotations.jar =================================================================== (Binary files differ) Modified: trunk/HibernateExt/ejb/readme.txt =================================================================== --- trunk/HibernateExt/ejb/readme.txt 2006-04-26 23:46:33 UTC (rev 9805) +++ trunk/HibernateExt/ejb/readme.txt 2006-04-27 03:21:02 UTC (rev 9806) @@ -1,6 +1,6 @@ Hibernate EntityManager ================================================== -Version: 3.1 beta 7, 27.03.2006 +Version: 3.1.0.Beta8, 26.04.2006 THIS RELEASE OF HIBERNATE ENTITYMANAGER REQUIRES HIBERNATE 3.2.0.CR2 AND DOES NOT WORK WITH HIBERNATE 3.1.x OR ANY OLDER VERSION OF HIBERNATE. Modified: trunk/HibernateExt/metadata/changelog.txt =================================================================== --- trunk/HibernateExt/metadata/changelog.txt 2006-04-26 23:46:33 UTC (rev 9805) +++ trunk/HibernateExt/metadata/changelog.txt 2006-04-27 03:21:02 UTC (rev 9806) @@ -1,6 +1,27 @@ Hibernate Annotations Changelog =============================== +3.1.0.Beta10 Preview (26-04-2006) +--------------------------------- +** Bug + * [ANN-292] - @EmbeddedId object containing only @ManyToOne fails / wrong pk generation when@EmbeddedId contains @ManyToOne + * [ANN-295] - Generators behave like allocationSize+1 + * [ANN-300] - @OneToOne(optional=false) does not create foreign key + * [ANN-301] - Validator won't validate "new" (=transient) bean when bean is CGLIB-instrumented + * [ANN-319] - Make Hibernate Annotations types Serializable and thread safe + * [ANN-321] - Discriminator column wo @DiscriminatorColumn has the wrong varchar length + + +** Improvement + * [ANN-316] - Do not escape el expressions like #{foo} expressions in Validation messages + +** New Feature + * [ANN-1] - Support Map + * [ANN-296] - Support for allocationSize in @SequenceGenerator + * [ANN-304] - Display the version number at init time to avoid user confusion regarding the version used + * [ANN-322] - Allow EJB3 style XML Overriding + + 3.1beta9 Preview (27-03-2006) ----------------------------- ** Bug Modified: trunk/HibernateExt/metadata/readme.txt =================================================================== --- trunk/HibernateExt/metadata/readme.txt 2006-04-26 23:46:33 UTC (rev 9805) +++ trunk/HibernateExt/metadata/readme.txt 2006-04-27 03:21:02 UTC (rev 9806) @@ -1,6 +1,6 @@ Hibernate Annotations ================================================== -Version: 3.1 beta 9, 27.03.2006 +Version: 3.1.0 beta 10, 26.04.2006 THIS RELEASE OF HIBERNATE ANNOTATIONS REQUIRES HIBERNATE 3.2.0.CR2 AND DOES NOT WORK WITH HIBERNATE 3.1.x OR ANY OLDER VERSION OF HIBERNATE. |
From: <hib...@li...> - 2006-04-26 23:46:36
|
Author: epbernard Date: 2006-04-26 19:46:33 -0400 (Wed, 26 Apr 2006) New Revision: 9805 Added: trunk/HibernateExt/metadata/doc/reference/en/modules/xml-overriding.xml Log: xml overriding doc Added: trunk/HibernateExt/metadata/doc/reference/en/modules/xml-overriding.xml =================================================================== --- trunk/HibernateExt/metadata/doc/reference/en/modules/xml-overriding.xml 2006-04-26 23:23:48 UTC (rev 9804) +++ trunk/HibernateExt/metadata/doc/reference/en/modules/xml-overriding.xml 2006-04-26 23:46:33 UTC (rev 9805) @@ -0,0 +1,400 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<chapter id="xml-overriding"> + <title>Overriding metadata through XML</title> + + <para>The primary target for metadata in EJB3 is annotations, but the EJB3 + specification provides a way to override or replace the annotation defined + metadata through an XML deployment descriptor. In the current release only + pure EJB3 annotations overriding are supported. If you wish to use Hibernate + specific features in some entities, you'll have to either use annotations or + fallback to hbm files. You can of course mix and match annotated entities + and entities describes in hbm files.</para> + + <para>The unit test suite shows some additional XML file samples.</para> + + <section> + <title>Principles</title> + + <para>The XML deployment descriptor structure has been designed to reflect + the annotations one. So if you know the annotations structure, using the + XML schema will be straightforward for you.</para> + + <para>You can define one ot more XML files describing your metadata, these + files will be merged by the overriding engine.</para> + + <section> + <title>Global level metadata</title> + + <para>You can define global level metadata available for all XML files. + You must not define these metadata more than once per deployment.</para> + + <programlisting><?xml version="1.0" encoding="UTF-8"?> + +<entity-mappings + xmlns="http://java.sun.com/xml/ns/persistence/orm" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd" + version="1.0"> + + <persistence-unit-metadata> + <xml-mapping-metadata-complete/> + <persistence-unit-defaults> + <schema>myschema</schema> + <catalog>mycatalog</catalog> + <cascade-persist/> + </persistence-unit-defaults> + </persistence-unit-metadata></programlisting> + + <para><literal>xml-mapping-metadata-complete</literal> means that all + entity, mapped-superclasses and embeddable metadata should be picked up + from XML (ie ignore annotations).</para> + + <para><literal>schema / catalog</literal> will override all default + definitions of schema and catalog in the metadata (both XML and + annotations).</para> + + <para><literal>cascade-persist</literal> means that all associations + have PERSIST as a cascade type. We recommend you to not use this + feature.</para> + </section> + + <section> + <title>Entity level metadata</title> + + <para>You can either define or override metadata informations on a given + entity.</para> + + <programlistingco> + <areaspec> + <area coords="3 85" id="aa1" /> + + <area coords="9 85" id="aa2" /> + + <area coords="10 85" id="aa3" /> + + <area coords="11 85" id="aa4" /> + + <area coords="17 85" id="aa5" /> + + <area coords="23 85" id="aa6" /> + + <area coords="24 85" id="aa7" /> + + <area coords="25 85" id="aa8" /> + + <area coords="26 85" id="aa9" /> + + <area coords="31 85" id="aa10" /> + </areaspec> + + <programlisting><?xml version="1.0" encoding="UTF-8"?> + +<entity-mappings + xmlns="http://java.sun.com/xml/ns/persistence/orm" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd" + version="1.0"> + + <package>org.hibernate.test.reflection.java.xml</package> + <entity class="Administration" access="PROPERTY" metadata-complete="true"> + <table name="tbl_admin"> + <unique-constraint> + <column-name>firstname</column-name> + <column-name>lastname</column-name> + </unique-constraint> + </table> + <secondary-table name="admin2"> + <primary-key-join-column name="admin_id" referenced-column-name="id"/> + <unique-constraint> + <column-name>address</column-name> + </unique-constraint> + </secondary-table> + <id-class class="SocialSecurityNumber"/> + <inheritance strategy="JOINED"/> + <sequence-generator name="seqhilo" sequence-name="seqhilo"/> + <table-generator name="table" table="tablehilo"/> + ... + </entity> + + <entity class="PostalAdministration"> + <primary-key-join-column name="id"/> + ... + </entity> +</entity-mappings></programlisting> + + <calloutlist> + <callout arearefs="aa1"> + <para><literal>entity-mappings</literal>: entity-mappings is the + root element for all XML files. You must declare the xml schema, + the schema file is included in the hibernate-annotations.jar file, + no internet access will be processed by Hibernate + Annotations.</para> + </callout> + + <callout arearefs="aa2"> + <para><literal>package</literal> (optional): default package used + for all non qualified class names in the given deployment + descriptor file.</para> + </callout> + + <callout arearefs="aa3"> + <para><literal>entity</literal>: desribes an entity. </para> + + <para><literal>metadata-complete</literal> defines whether the + metadata description for this element is complete or not (in other + words, if annotations present at the class level should be + considered or not).</para> + + <para>An entity has to have a <literal>class</literal> attribute + refering the java class the metadata applies on. </para> + + <para>You can overrides entity name through the + <literal>name</literal> attribute, if none is defined and if an + <literal>@Entity.name</literal> is present, then it is used + (provided that metadata complete is not set).</para> + + <para>For netadata complete (see below) element, you can define an + <literal>access</literal> (either <literal>FIELD</literal> or + <literal>PROPERTY</literal> (default)). For non medatada complete + element, the annotations driven access type is used.</para> + </callout> + + <callout arearefs="aa4"> + <para><literal>table</literal>: you can declare table properties + (name, schema, catalog), if none is defined, the java annotation + is used.</para> + + <para>You can define one or several unique constraints as seen in + the example</para> + </callout> + + <callout arearefs="aa5"> + <para><literal>secondary-table</literal>: defines a secondary + table very much like a regular table except that you can define + the primary key / foreign key column(s) through the + <literal>primary-key-join-column</literal> element. On non + metadata complete, annotation secondary tables are used only if + there is no <literal>secondary-table</literal> definition, + annotations are ignored otherwise.</para> + </callout> + + <callout arearefs="aa6"> + <para><literal>id-class</literal>: defines the id class in a + similar way <literal>@IdClass</literal> does</para> + </callout> + + <callout arearefs="aa7"> + <para><literal>inheritance</literal>: defines the inheritance + strategy (<literal>JOINED</literal>, + <literal>TABLE_PER_CLASS</literal>, + <literal>SINGLE_TABLE</literal>), Available only at the root + entity level</para> + </callout> + + <callout arearefs="aa8"> + <para><literal>sequence-generator</literal>: defines a sequence + generator</para> + </callout> + + <callout arearefs="aa9"> + <para><literal>table-generator</literal>: defines a table + generator</para> + </callout> + + <callout arearefs="aa10"> + <para><literal><literal>primary-key-join-column</literal></literal>: + defines the primary key join column for sub entities when JOINED + inheritance strategy is used</para> + </callout> + </calloutlist> + </programlistingco> + + <programlistingco> + <areaspec> + <area coords="11 85" id="ab1" /> + + <area coords="18 85" id="ab2" /> + + <area coords="22 85" id="ab3" /> + + <area coords="28 85" id="ab4" /> + + <area coords="34 85" id="ab5" /> + </areaspec> + + <programlisting><?xml version="1.0" encoding="UTF-8"?> + +<entity-mappings + xmlns="http://java.sun.com/xml/ns/persistence/orm" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd" + version="1.0"> + + <package>org.hibernate.test.reflection.java.xml</package> + <entity class="Music" access="PROPERTY" metadata-complete="true"> + <discriminator-value>Generic</discriminator-value> + <discriminator-column length="34"/> + ... + </entity> + + <entity class="PostalAdministration"> + <primary-key-join-column name="id"/> + <named-query name="adminById"> + <query>select m from Administration m where m.id = :id</query> + <hint name="org.hibernate.timeout" value="200"/> + </named-query> + <named-native-query name="allAdmin" result-set-mapping="adminrs"> + <query>select *, count(taxpayer_id) as taxPayerNumber + from Administration, TaxPayer + where taxpayer_admin_id = admin_id group by ...</query> + <hint name="org.hibernate.timeout" value="200"/> + </named-native-query> + <sql-result-set-mapping name="adminrs"> + <entity-result entity-class="Administration"> + <field-result name="name" column="fld_name"/> + </entity-result> + <column-result name="taxPayerNumber"/> + </sql-result-set-mapping> + <attribute-override name="ground"> + <column name="fld_ground" unique="true" scale="2"/> + </attribute-override> + <association-override name="referer"> + <join-column name="referer_id" referenced-column-name="id"/> + </association-override> + ... + </entity> +</entity-mappings></programlisting> + + <calloutlist> + <callout arearefs="ab1"> + <para><literal>discriminator-value / + discriminator-column</literal>: defines the discriminator value + and the column holding it when the SINGLE_TABLE inheritance + strategy is chosen</para> + </callout> + + <callout arearefs="ab2"> + <para><literal>named-query</literal>: defines named queries and + possibly the hints associated to them. Those definitions are + additive to the one defined in annotations, if two definitions + have the same name, the XML one has priority.</para> + </callout> + + <callout arearefs="ab3"> + <para><literal>named-native-query</literal>: defines an named + native query and its sql result set mapping. Alternatively, you + can define the <literal>result-class</literal>. Those definitions + are additive to the one defined in annotations, if two definitions + have the same name, the XML one has priority.</para> + </callout> + + <callout arearefs="ab4"> + <para><literal>sql-result-set-mapping</literal>: describes the + result set mapping structure. You can define both entity and + column mappings. Those definitions are additive to the one defined + in annotations, if two definitions have the same name, the XML one + has priority</para> + </callout> + + <callout arearefs="ab5"> + <para><literal>attribute-override / + association-override</literal>: defines a column or join column + overriding. This overriding is additive to the one defined in + annotations</para> + </callout> + </calloutlist> + </programlistingco> + + <para>Same applies for <literal><embeddable></literal> and + <literal><mapped-superclass></literal>.</para> + </section> + + <section> + <title>Property level metadata</title> + + <para>You can of course defines XML overriding for properties. If + metadata complete is defined, then additional properties (ie at the Java + level) will be ignored. Otherwise, once you start overriding a property, + all annotations on the given property are ignored. All property level + metadata behave in <literal>entity/attributes</literal>, + <literal>mapped-superclass/attributes</literal> or + <literal>embeddable/attributes</literal>.</para> + + <programlisting> <attributes> + <id name="id"> + <column name="fld_id"/> + <generated-value generator="generator" strategy="SEQUENCE"/> + <temporal>DATE</temporal> + <sequence-generator name="generator" sequence-name="seq"/> + </id> + <version name="version"/> + <embedded name="embeddedObject"> + <attribute-override name"subproperty"> + <column name="my_column"/> + </attribute-override> + </embedded> + <basic name="status" optional="false"> + <enumerated>STRING</enumerated> + </basic> + <basic name="serial" optional="true"> + <column name="serialbytes"/> + <lob/> + </basic> + <basic name="terminusTime" fetch="LAZY"> + <temporal>TIMESTAMP</temporal> + </basic> + </attributes></programlisting> + + <para>You can override a property through <literal>id</literal>, + <literal>embedded-id</literal>, <literal>version</literal>, + <literal>embedded</literal> and <literal>basic</literal>. Each of these + elements can have subelements accordingly: <literal>lob</literal>, + <literal>temporal</literal>, <literal>enumerated</literal>, + <literal>column</literal>.</para> + </section> + + <section> + <title>Association level metadata</title> + + <para>You can define XML overriding for associations. All association + level metadata behave in <literal>entity/attributes</literal>, + <literal>mapped-superclass/attributes</literal> or + <literal>embeddable/attributes</literal>.</para> + + <programlisting> <attributes> + <one-to-many name="players" fetch="EAGER"> + <map-key name="name"/> + <join-column name="driver"/> + <join-column name="number"/> + </one-to-many> + <many-to-many name="roads" target-entity="Administration"> + <order-by>maxSpeed</order-by> + <join-table name="bus_road"> + <join-column name="driver"/> + <join-column name="number"/> + <inverse-join-column name="road_id"/> + <unique-constraint> + <column-name>driver</column-name> + <column-name>number</column-name> + </unique-constraint> + </join-table> + </many-to-many> + <many-to-many name="allTimeDrivers" mapped-by="drivenBuses"> + </attributes></programlisting> + + <para>You can override an association through + <literal>one-to-many</literal>, <literal>one-to-one</literal>, + <literal>many-to-one</literal>, and <literal>many-to-many</literal>. + Each of these elements can have subelements accordingly: + <literal>join-table</literal> (which can have + <literal>join-column</literal>s and + <literal>inverse-join-column</literal>s), + <literal><literal>join-column</literal>s</literal>, + <literal>map-key</literal>, and <literal>order-by</literal>. + <literal>mapped-by</literal> and <literal>target-entity</literal> can be + defined as attributes when it makes sense. Once again the structure is + reflects the annotations structure. You can find all semantic + informations in the chapter describing annotations.</para> + </section> + </section> +</chapter> \ No newline at end of file |
Author: epbernard Date: 2006-04-26 19:23:48 -0400 (Wed, 26 Apr 2006) New Revision: 9804 Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/exception/ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/exception/Music.java Modified: trunk/HibernateExt/ejb/doc/reference/en/master.xml trunk/HibernateExt/ejb/doc/reference/en/modules/configuration.xml trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java Log: EJB-166 and docs Modified: trunk/HibernateExt/ejb/doc/reference/en/master.xml =================================================================== --- trunk/HibernateExt/ejb/doc/reference/en/master.xml 2006-04-26 23:20:18 UTC (rev 9803) +++ trunk/HibernateExt/ejb/doc/reference/en/master.xml 2006-04-26 23:23:48 UTC (rev 9804) @@ -16,7 +16,7 @@ <subtitle>User guide</subtitle> - <releaseinfo>3.1 beta 7</releaseinfo> + <releaseinfo>3.1.0 beta 8</releaseinfo> <mediaobject> <imageobject> @@ -60,5 +60,4 @@ &query-ejbql; &native; - </book> \ No newline at end of file Modified: trunk/HibernateExt/ejb/doc/reference/en/modules/configuration.xml =================================================================== --- trunk/HibernateExt/ejb/doc/reference/en/modules/configuration.xml 2006-04-26 23:20:18 UTC (rev 9803) +++ trunk/HibernateExt/ejb/doc/reference/en/modules/configuration.xml 2006-04-26 23:23:48 UTC (rev 9804) @@ -8,8 +8,8 @@ <para>The EJB3 compatible Hibernate EntityManager is built on top of Hibernate core and Hibernate Annotations. You have to use compatible versions of each module. This version is known to work on Hibernate - 3.2.0.CR2 and Hibernate Annotations 3.1beta9. The following libraries have - to be in your classpath: hibernate3.jar, hibernate-annotations.jar, + 3.2.0.CR2 and Hibernate Annotations 3.1.0.Beta10. The following libraries + have to be in your classpath: hibernate3.jar, hibernate-annotations.jar, hibernate-entity-manager.jar and all needed third party libraries for each package.(incl. ejb-persistence.jar).</para> </section> @@ -122,8 +122,13 @@ <listitem> <para>The class element specifies a EJB3 compliant XML mapping - file that you will map. This feature is currently not - supported.</para> + file that you will map. The file has to be in the classpath. As + per the EJB3 specification, Hibernate EntityManager will try to + load the mapping file located in the jar file at + <literal>META_INF/orm.xml</literal>. Of course any explicit + mapping file will be loaded too. As a matter of fact, you can + provides any XML file in the mapping file element ie. either hbm + files or EJB3 deployment descriptor.</para> </listitem> </varlistentry> @@ -422,7 +427,8 @@ .setInterceptor( myInterceptorImpl ) // set an interceptor .addAnnotatedClass( MyAnnotatedClass.class ) //add a class to be mapped .addClass( NonAnnotatedClass.class ) //add an hbm.xml file using the Hibernate convention - .addFile( "/mypath/MyOtherCLass.hbm.xml ) //add an hbm.xml file + .addRerousce( "mypath/MyOtherCLass.hbm.xml ) //add an hbm.xml file + .addRerousce( "mypath/orm.xml ) //add an EJB3 deployment descriptor .createEntityManagerFactory(); //Create the entity manager factory</programlisting> </section> </section> Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2006-04-26 23:20:18 UTC (rev 9803) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2006-04-26 23:23:48 UTC (rev 9804) @@ -37,7 +37,6 @@ import org.hibernate.ObjectNotFoundException; import org.hibernate.SQLQuery; import org.hibernate.Session; -import org.hibernate.StaleObjectStateException; import org.hibernate.StaleStateException; import org.hibernate.Transaction; import org.hibernate.UnresolvableObjectException; @@ -201,9 +200,6 @@ try { return (A) getSession().merge( entity ); } - catch (StaleObjectStateException sse) { - throw new IllegalArgumentException( sse ); - } catch (ObjectDeletedException sse) { throw new IllegalArgumentException( sse ); } Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java 2006-04-26 23:20:18 UTC (rev 9803) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java 2006-04-26 23:23:48 UTC (rev 9804) @@ -0,0 +1,52 @@ +//$Id: $ +package org.hibernate.ejb.test.exception; + +import javax.persistence.EntityManager; +import javax.persistence.OptimisticLockException; + +import org.hibernate.ejb.test.TestCase; + +/** + * @author Emmanuel Bernard + */ +public class ExceptionTest extends TestCase { + + public void testOptimisticLockingException() throws Exception { + EntityManager em = factory.createEntityManager(); + EntityManager em2 = factory.createEntityManager(); + em.getTransaction().begin(); + Music music = new Music(); + music.setName( "Old Country" ); + em.persist( music ); + em.getTransaction().commit(); + + em2.getTransaction().begin(); + Music music2 = em2.find( Music.class, music.getId() ); + music2.setName( "HouseMusic" ); + em2.getTransaction().commit(); + em2.close(); + + em.getTransaction().begin(); + music.setName( "Rock" ); + try { + em.flush(); + fail("Should raise an optimistic lock exception"); + } + catch( OptimisticLockException e) { + //success + } + catch( Exception e ) { + fail("Should raise an optimistic lock exception"); + } + finally { + em.getTransaction().rollback(); + em.close(); + } + } + + public Class[] getAnnotatedClasses() { + return new Class[] { + Music.class + }; + } +} Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/exception/Music.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/exception/Music.java 2006-04-26 23:20:18 UTC (rev 9803) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/exception/Music.java 2006-04-26 23:23:48 UTC (rev 9804) @@ -0,0 +1,41 @@ +//$Id: $ +package org.hibernate.ejb.test.exception; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.GeneratedValue; +import javax.persistence.Version; + +/** + * @author Emmanuel Bernard + */ +@Entity +public class Music { + private Integer id; + private Integer version; + private String name; + + @Id @GeneratedValue public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Version public Integer getVersion() { + return version; + } + + public void setVersion(Integer version) { + this.version = version; + } +} |
From: <hib...@li...> - 2006-04-26 23:20:24
|
Author: epbernard Date: 2006-04-26 19:20:18 -0400 (Wed, 26 Apr 2006) New Revision: 9803 Modified: trunk/HibernateExt/metadata/doc/reference/en/master.xml trunk/HibernateExt/metadata/doc/reference/en/modules/entity.xml trunk/HibernateExt/metadata/doc/reference/en/modules/setup.xml Log: doc Modified: trunk/HibernateExt/metadata/doc/reference/en/master.xml =================================================================== --- trunk/HibernateExt/metadata/doc/reference/en/master.xml 2006-04-26 23:05:00 UTC (rev 9802) +++ trunk/HibernateExt/metadata/doc/reference/en/master.xml 2006-04-26 23:20:18 UTC (rev 9803) @@ -3,6 +3,7 @@ "../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [ <!ENTITY setup SYSTEM "modules/setup.xml"> <!ENTITY entity SYSTEM "modules/entity.xml"> +<!ENTITY xml-overriding SYSTEM "modules/xml-overriding.xml"> <!ENTITY validator SYSTEM "modules/validator.xml"> <!ENTITY lucene SYSTEM "modules/lucene.xml"> ]> @@ -12,7 +13,7 @@ <subtitle>Reference Guide</subtitle> - <releaseinfo>3.1 beta 9</releaseinfo> + <releaseinfo>3.1.0 beta 10</releaseinfo> <mediaobject> <imageobject> @@ -62,16 +63,17 @@ annotations. See the JIRA road mapsection for more information.</para> <para>The EJB3 Public final draft has change some annotations, please - refer to http://www.hibernate.org/371.html as a migration guide between - Hibernate Annotations 3.1beta7 and 3.1beta8.</para> + refer to http://www.hibernate.org/371.html as a migration guide from + previous versions of Hibernate Annotations.</para> </preface> &setup; &entity; + + &xml-overriding; &validator; &lucene; - </book> \ No newline at end of file Modified: trunk/HibernateExt/metadata/doc/reference/en/modules/entity.xml =================================================================== --- trunk/HibernateExt/metadata/doc/reference/en/modules/entity.xml 2006-04-26 23:05:00 UTC (rev 9802) +++ trunk/HibernateExt/metadata/doc/reference/en/modules/entity.xml 2006-04-26 23:20:18 UTC (rev 9803) @@ -1128,11 +1128,11 @@ entity primary key is used. The map key uses the same column as the property pointed out: there is no additional column defined to hold the map key, and it does make sense since the map key actually - represent a target ptoperty. Be aware that once loaded, the key is + represent a target property. Be aware that once loaded, the key is no longer kept in sync with the property, in other words, if you change the property value, the key will not change automatically in - your Java model (Map support the way Hibernate 3 does is currently - not supported in this release). Many people confuse + your Java model (for true map support please refers to <xref + linkend="entity-hibspec" />). Many people confuse <literal><map></literal> capabilities and <literal>@MapKey</literal> ones. These are two different features. <literal>@MapKey</literal> still has some limitations, please check @@ -1168,8 +1168,8 @@ <entry>java.util.List, java.util.Collection</entry> - <entry>@org.hibernate.annotations.CollectionOfElements, - @OneToMany, @ManyToMany</entry> + <entry>@org.hibernate.annotations.CollectionOfElements or + @OneToMany or @ManyToMany</entry> </row> <row> @@ -1177,8 +1177,8 @@ <entry>java.util.List</entry> - <entry>@org.hibernate.annotations.CollectionOfElements, - @OneToMany, @ManyToMany + + <entry>(@org.hibernate.annotations.CollectionOfElements or + @OneToMany or @ManyToMany) and @org.hibernate.annotations.IndexColumn</entry> </row> @@ -1187,8 +1187,8 @@ <entry>java.util.Set</entry> - <entry>@org.hibernate.annotations.CollectionOfElements, - @OneToMany, @ManyToMany</entry> + <entry>@org.hibernate.annotations.CollectionOfElements or + @OneToMany or @ManyToMany</entry> </row> <row> @@ -1196,8 +1196,10 @@ <entry>java.util.Map</entry> - <entry>@org.hibernate.annotations.CollectionOfElements, - @OneToMany, @ManyToMany + @MapKey</entry> + <entry>(@org.hibernate.annotations.CollectionOfElements or + @OneToMany or @ManyToMany) and (nothing or + @org.hibernate.annotations.MapKey for true map support, OR + @javax.persistence.MapKey</entry> </row> </tbody> </tgroup> @@ -2576,12 +2578,19 @@ semantic is applied</para> </note> + <para>Hibernate Annotations also supports true Map mappings (except + Map<Entity, Entity>), if + <literal>@javax.persistence.MapKey</literal> is not set, hibernate + will map the key element or embeddable object in its/their own + columns. To overrides the default columns, you can use + <literal>@org.hibernate.annotations.MapKey</literal>.</para> + <para>Hibernate Annotations also supports collections of core types (Integer, String, Enums, ...), collections of embeddable objects and even arrays of primitive types. This is known as collection of elements.</para> - <para>A collection of elements as to be annotated as + <para>A collection of elements has to be annotated as <literal>@CollectionOfElements</literal> (as a replacement of <literal>@OneToMany</literal>) To define the collection table, the <literal>@JoinTable</literal> annotation is used on the association @@ -2592,7 +2601,11 @@ the element column definition using a <literal>@Column</literal> on the association property. You can also override the columns of a collection of embeddable object using - <literal>@AttributeOverride</literal>.</para> + <literal>@AttributeOverride</literal>. To reach the collection + element, you need to append "element" to the attribute override name + (eg "element" for core types, or "element.serial" for the serial + property of an embeddable element). To reach the index/key of a + collection, append "key" instead.</para> <programlisting>@Entity public class Boy { @@ -2624,7 +2637,7 @@ } <emphasis role="bold">@CollectionOfElements - @AttributeOverride( name="serial", column=@Column(name="serial_nbr") )</emphasis> + @AttributeOverride( name="element.serial", column=@Column(name="serial_nbr") )</emphasis> public Set<Toy> getFavoriteToys() { return favoriteToys; } Modified: trunk/HibernateExt/metadata/doc/reference/en/modules/setup.xml =================================================================== --- trunk/HibernateExt/metadata/doc/reference/en/modules/setup.xml 2006-04-26 23:05:00 UTC (rev 9802) +++ trunk/HibernateExt/metadata/doc/reference/en/modules/setup.xml 2006-04-26 23:20:18 UTC (rev 9803) @@ -102,12 +102,15 @@ <mapping class="test.Sky"/> <mapping class="test.Person"/> <mapping class="test.animals.Dog"/></emphasis> +<emphasis role="bold"> <mapping resource="test/animals/orm.xml"/></emphasis> </session-factory> </hibernate-configuration> </programlisting> - <para>Note that you can mix the hbm.xml use and the new annotation - one.</para> + <para>Note that you can mix the hbm.xml use and the new annotation one. + The resource element can be either an hbm file or an EJB3 XML deployment + descriptor. The distinction is transparent for your configuration + process.</para> <para>Alternatively, you can define the annotated classes and packages using the programmatic API</para> @@ -118,6 +121,7 @@ .addAnnotatedClass(Sky.class) .addAnnotatedClass(Person.class) .addAnnotatedClass(Dog.class)</emphasis> +<emphasis role="bold"> .addResource("test/animals/orm.xml")</emphasis> .buildSessionFactory();</programlisting> <para>You can also use the Hibernate Entity Manager which has it's own |
From: <hib...@li...> - 2006-04-26 23:05:04
|
Author: epbernard Date: 2006-04-26 19:05:00 -0400 (Wed, 26 Apr 2006) New Revision: 9802 Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/Version.java Log: version Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/Version.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/Version.java 2006-04-26 23:04:47 UTC (rev 9801) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/Version.java 2006-04-26 23:05:00 UTC (rev 9802) @@ -8,7 +8,7 @@ * @author Emmanuel Bernard */ public class Version { - public static String VERSION = "3.2.beta10"; + public static String VERSION = "3.1.0.Beta10"; private static Log log = LogFactory.getLog( Version.class ); static { |
From: <hib...@li...> - 2006-04-26 23:04:50
|
Author: epbernard Date: 2006-04-26 19:04:47 -0400 (Wed, 26 Apr 2006) New Revision: 9801 Modified: trunk/HibernateExt/ejb/build.xml Log: version Modified: trunk/HibernateExt/ejb/build.xml =================================================================== --- trunk/HibernateExt/ejb/build.xml 2006-04-26 23:04:28 UTC (rev 9800) +++ trunk/HibernateExt/ejb/build.xml 2006-04-26 23:04:47 UTC (rev 9801) @@ -16,7 +16,7 @@ <!-- Name of project and version, used to create filenames --> <property name="Name" value="Hibernate EntityManager"/> <property name="name" value="hibernate-entitymanager"/> - <property name="version" value="3.1beta7"/> + <property name="version" value="3.1.0.Beta8"/> <property name="javadoc.packagenames" value="org.hibernate.ejb.*"/> <property name="jdbc.dir" value="jdbc"/> <property name="copy.test" value="true"/> |
From: <hib...@li...> - 2006-04-26 23:04:31
|
Author: epbernard Date: 2006-04-26 19:04:28 -0400 (Wed, 26 Apr 2006) New Revision: 9800 Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java Log: version Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java 2006-04-26 22:48:54 UTC (rev 9799) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java 2006-04-26 23:04:28 UTC (rev 9800) @@ -8,7 +8,7 @@ * @author Emmanuel Bernard */ public class Version { - public static String VERSION = "3.2.beta8"; + public static String VERSION = "3.1.0.Beta8"; private static Log log = LogFactory.getLog( Version.class ); static { |
From: <hib...@li...> - 2006-04-26 22:48:58
|
Author: epbernard Date: 2006-04-26 18:48:54 -0400 (Wed, 26 Apr 2006) New Revision: 9799 Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java Log: add user security belts Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-04-26 17:07:08 UTC (rev 9798) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-04-26 22:48:54 UTC (rev 9799) @@ -254,6 +254,11 @@ log.debug( "Collection role: " + StringHelper.qualify( propertyHolder.getPath(), propertyName ) ); collection.setRole( StringHelper.qualify( propertyHolder.getPath(), propertyName ) ); + if (mapKeyColumns != null && mapKeyPropertyName != null) { + throw new AnnotationException("Cannot mix @javax.persistence.MakKey and @org.hibernate.annotations.MapKey " + + "on the same collection: " + StringHelper.qualify( propertyHolder.getPath(), propertyName ) ); + } + //set laziness collection.setFetchMode( fetchMode ); collection.setLazy( fetchMode == FetchMode.SELECT ); |
From: <hib...@li...> - 2006-04-26 17:07:13
|
Author: epbernard Date: 2006-04-26 13:07:08 -0400 (Wed, 26 Apr 2006) New Revision: 9798 Added: trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/MapKey.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/WrappedInferredData.java Modified: trunk/HibernateExt/metadata/build.xml trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/collectionelement/Boy.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java Log: ANN-1 support for Map<Element, and Map<Embeddable, with customable columns through @org.hibernate.annotations.MapKey Modified: trunk/HibernateExt/metadata/build.xml =================================================================== --- trunk/HibernateExt/metadata/build.xml 2006-04-26 06:49:01 UTC (rev 9797) +++ trunk/HibernateExt/metadata/build.xml 2006-04-26 17:07:08 UTC (rev 9798) @@ -16,7 +16,7 @@ <!-- Name of project and version, used to create filenames --> <property name="Name" value="Hibernate Annotations"/> <property name="name" value="hibernate-annotations"/> - <property name="version" value="3.1beta9"/> + <property name="version" value="3.1.0.Beta10"/> <property name="javadoc.packagenames" value="org.hibernate.*"/> <property name="jdbc.dir" value="jdbc"/> <property name="copy.test" value="true"/> Added: trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/MapKey.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/MapKey.java 2006-04-26 06:49:01 UTC (rev 9797) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/MapKey.java 2006-04-26 17:07:08 UTC (rev 9798) @@ -0,0 +1,22 @@ +//$Id: $ +package org.hibernate.annotations; + +import java.lang.annotation.Target; +import java.lang.annotation.Retention; +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.FIELD; +import javax.persistence.Column; + +/** + * Define the map key columns as an explicit column holding the map key + * This is completly different from {@link javax.persistence.MapKey} which use an existing column + * This annotation and {@link javax.persistence.MapKey} are mutually exclusive + * + * @author Emmanuel Bernard + */ +@Target({METHOD, FIELD}) +@Retention(RUNTIME) +public @interface MapKey { + Column[] columns() default {}; +} Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java 2006-04-26 06:49:01 UTC (rev 9797) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java 2006-04-26 17:07:08 UTC (rev 9798) @@ -1253,6 +1253,7 @@ collectionBinder.setPropertyAccessorName( inferredData.getDefaultAccess() ); Ejb3Column[] elementColumns = null; + PropertyData wrappedInferredData = new WrappedInferredData(inferredData, "element"); if ( property.isAnnotationPresent( Column.class ) || property.isAnnotationPresent( Formula.class ) ) { @@ -1263,7 +1264,7 @@ formulaAnn, nullability, propertyHolder, - inferredData, + wrappedInferredData, entityBinder.getSecondaryTables(), mappings ); @@ -1271,11 +1272,35 @@ else if ( property.isAnnotationPresent( Columns.class ) ) { Columns anns = property.getAnnotation( Columns.class ); elementColumns = Ejb3Column.buildColumnFromAnnotation( - anns.columns(), null, nullability, propertyHolder, inferredData, + anns.columns(), null, nullability, propertyHolder, wrappedInferredData, entityBinder.getSecondaryTables(), mappings ); } + else { + elementColumns = Ejb3Column.buildColumnFromAnnotation( + null, + null, + nullability, + propertyHolder, + wrappedInferredData, + entityBinder.getSecondaryTables(), + mappings + ); + } + org.hibernate.annotations.MapKey hibMapKeyAnn = property.getAnnotation( org.hibernate.annotations.MapKey.class ); + wrappedInferredData = new WrappedInferredData(inferredData, "key"); + Ejb3Column[] mapColumns = Ejb3Column.buildColumnFromAnnotation( + hibMapKeyAnn != null && hibMapKeyAnn.columns().length > 0 ? hibMapKeyAnn.columns() : null, + null, + Nullability.FORCED_NOT_NULL, + propertyHolder, + wrappedInferredData, + entityBinder.getSecondaryTables(), + mappings + ); + collectionBinder.setMapKeyColumns(mapColumns); + //potential element collectionBinder.setEmbedded( property.isAnnotationPresent( Embedded.class ) ); collectionBinder.setElementColumns( elementColumns ); Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java 2006-04-26 06:49:01 UTC (rev 9797) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java 2006-04-26 17:07:08 UTC (rev 9798) @@ -58,5 +58,4 @@ ) { return buildPropertyHolder( null, persistentClass, joins, mappings ); } - } Added: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/WrappedInferredData.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/WrappedInferredData.java 2006-04-26 06:49:01 UTC (rev 9797) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/WrappedInferredData.java 2006-04-26 17:07:08 UTC (rev 9798) @@ -0,0 +1,48 @@ +//$Id: $ +package org.hibernate.cfg; + +import org.hibernate.reflection.XClass; +import org.hibernate.reflection.XProperty; +import org.hibernate.MappingException; +import org.hibernate.util.StringHelper; + +/** + * @author Emmanuel Bernard + */ +public class WrappedInferredData implements PropertyData { + private PropertyData wrappedInferredData; + private String propertyName; + + public XClass getClassOrElement() throws MappingException { + return wrappedInferredData.getClassOrElement(); + } + + public String getClassOrElementName() throws MappingException { + return wrappedInferredData.getClassOrElementName(); + } + + public String getDefaultAccess() { + return wrappedInferredData.getDefaultAccess(); + } + + public XProperty getProperty() { + return wrappedInferredData.getProperty(); + } + + public XClass getPropertyClass() throws MappingException { + return wrappedInferredData.getPropertyClass(); + } + + public String getPropertyName() throws MappingException { + return propertyName; + } + + public String getTypeName() throws MappingException { + return wrappedInferredData.getTypeName(); + } + + public WrappedInferredData(PropertyData inferredData, String suffix) { + this.wrappedInferredData = inferredData; + this.propertyName = StringHelper.qualify( inferredData.getPropertyName(), suffix ); + } +} Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-04-26 06:49:01 UTC (rev 9797) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-04-26 17:07:08 UTC (rev 9798) @@ -101,6 +101,7 @@ private XProperty property; private boolean ignoreNotFound; private TableBinder tableBinder; + private Ejb3Column[] mapKeyColumns; public void setUpdatable(boolean updatable) { this.updatable = updatable; @@ -329,7 +330,7 @@ joinColumns, inverseJoinColumns, elementColumns, - isEmbedded, + mapKeyColumns, isEmbedded, property, collType, fetchMode, ignoreNotFound, oneToMany, @@ -384,7 +385,7 @@ final Ejb3JoinColumn[] fkJoinColumns, final Ejb3JoinColumn[] keyColumns, final Ejb3JoinColumn[] inverseColumns, final Ejb3Column[] elementColumns, - final boolean isEmbedded, + final Ejb3Column[] mapKeyColumns, final boolean isEmbedded, final XProperty property, final String collType, final FetchMode fetchMode, final boolean ignoreNotFound, final boolean unique, final TableBinder assocTableBinder, final ExtendedMappings mappings @@ -801,7 +802,7 @@ holder = PropertyHolderBuilder.buildPropertyHolder( collValue, - collValue.getRole(), + collValue.getRole() + "element", elementClass, property, mappings ); @@ -975,4 +976,8 @@ public void setIgnoreNotFound(boolean ignoreNotFound) { this.ignoreNotFound = ignoreNotFound; } + + public void setMapKeyColumns(Ejb3Column[] mapKeyColumns) { + this.mapKeyColumns = mapKeyColumns; + } } \ No newline at end of file Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java 2006-04-26 06:49:01 UTC (rev 9797) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java 2006-04-26 17:07:08 UTC (rev 9798) @@ -18,7 +18,6 @@ import org.hibernate.cfg.SecondPass; import org.hibernate.mapping.Collection; import org.hibernate.mapping.IndexBackref; -import org.hibernate.mapping.IndexedCollection; import org.hibernate.mapping.List; import org.hibernate.mapping.OneToMany; import org.hibernate.mapping.PersistentClass; @@ -55,7 +54,7 @@ final Ejb3JoinColumn[] fkJoinColumns, final Ejb3JoinColumn[] keyColumns, final Ejb3JoinColumn[] inverseColumns, final Ejb3Column[] elementColumns, - final boolean isEmbedded, + Ejb3Column[] mapKeyColumns, final boolean isEmbedded, final XProperty property, final String collType, final FetchMode fetchMode, final boolean ignoreNotFound, final boolean unique, final TableBinder assocTableBinder, final ExtendedMappings mappings @@ -76,7 +75,7 @@ if ( indexColumn.isImplicit() == false ) { PropertyHolder valueHolder = PropertyHolderBuilder.buildPropertyHolder( this.collection, - IndexedCollection.DEFAULT_INDEX_COLUMN_NAME, + this.collection.getRole() + "key", (XClass) null, (XProperty) null, mappings ); Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java 2006-04-26 06:49:01 UTC (rev 9797) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java 2006-04-26 17:07:08 UTC (rev 9798) @@ -55,7 +55,7 @@ final Ejb3JoinColumn[] fkJoinColumns, final Ejb3JoinColumn[] keyColumns, final Ejb3JoinColumn[] inverseColumns, final Ejb3Column[] elementColumns, - final boolean isEmbedded, + final Ejb3Column[] mapKeyColumns, final boolean isEmbedded, final XProperty property, final String collType, final FetchMode fetchMode, final boolean ignoreNotFound, final boolean unique, final TableBinder assocTableBinder, final ExtendedMappings mappings @@ -68,7 +68,8 @@ isEmbedded, property, fetchMode, unique, assocTableBinder, ignoreNotFound, mappings ); bindKeyFromAssociationTable( - collType, persistentClasses, mapKeyPropertyName, property, ignoreNotFound, isEmbedded, mappings + collType, persistentClasses, mapKeyPropertyName, property, ignoreNotFound, isEmbedded, mappings, + mapKeyColumns ); } }; @@ -76,7 +77,7 @@ private void bindKeyFromAssociationTable( String collType, Map persistentClasses, String mapKeyPropertyName, XProperty property, - boolean ignoreNotFound, boolean isEmbedded, ExtendedMappings mappings + boolean ignoreNotFound, boolean isEmbedded, ExtendedMappings mappings, Ejb3Column[] mapKeyColumns ) { if ( mapKeyPropertyName != null ) { PersistentClass associatedClass = (PersistentClass) persistentClasses.get( collType ); @@ -134,7 +135,7 @@ holder = PropertyHolderBuilder.buildPropertyHolder( mapValue, - mapValue.getRole(), + mapValue.getRole() + "key", elementClass, property, mappings ); @@ -184,7 +185,8 @@ elementBinder.setMappings( mappings ); elementBinder.setReturnedClassName( mapKeyType ); //FIXME get the columns from an annotation - Ejb3Column[] elementColumns = null; + + Ejb3Column[] elementColumns = mapKeyColumns; if ( elementColumns == null || elementColumns.length == 0 ) { elementColumns = new Ejb3Column[1]; Ejb3Column column = new Ejb3Column(); Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/collectionelement/Boy.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/collectionelement/Boy.java 2006-04-26 06:49:01 UTC (rev 9797) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/collectionelement/Boy.java 2006-04-26 17:07:08 UTC (rev 9798) @@ -14,6 +14,7 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; +import javax.persistence.AttributeOverrides; import org.hibernate.annotations.CollectionOfElements; import org.hibernate.annotations.IndexColumn; @@ -22,6 +23,10 @@ * @author Emmanuel Bernard */ @Entity +@AttributeOverrides({ + @AttributeOverride( name="characters.element", column = @Column(name="character") ), + @AttributeOverride( name="scorePerNickName.element", column = @Column(name="fld_score") )} +) public class Boy { private Integer id; private String firstName; @@ -95,7 +100,7 @@ } @CollectionOfElements - @AttributeOverride(name = "serial", column = @Column(name = "serial_nbr")) + @AttributeOverride(name = "element.serial", column = @Column(name = "serial_nbr")) public Set<Toy> getFavoriteToys() { return favoriteToys; } Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java 2006-04-26 06:49:01 UTC (rev 9797) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java 2006-04-26 17:07:08 UTC (rev 9798) @@ -8,7 +8,10 @@ import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToMany; +import javax.persistence.Column; +import org.hibernate.annotations.MapKey; + /** * @author Emmanuel Bernard */ @@ -18,5 +21,6 @@ @GeneratedValue public Integer id; @ManyToMany(cascade = CascadeType.ALL) + @MapKey(columns = {@Column(name="gas_name")}) public Map<String, Gas> gases = new HashMap<String, Gas>(); } |
From: <hib...@li...> - 2006-04-26 06:49:04
|
Author: epbernard Date: 2006-04-26 02:49:01 -0400 (Wed, 26 Apr 2006) New Revision: 9797 Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Lighter.java Log: missing class for test Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Lighter.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Lighter.java 2006-04-26 06:46:52 UTC (rev 9796) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Lighter.java 2006-04-26 06:49:01 UTC (rev 9797) @@ -0,0 +1,10 @@ +//$Id: $ +package org.hibernate.ejb.test.xml; + +/** + * @author Emmanuel Bernard + */ +public class Lighter { + public String name; + public String power; +} |
Author: epbernard Date: 2006-04-26 02:46:52 -0400 (Wed, 26 Apr 2006) New Revision: 9796 Modified: trunk/HibernateExt/ejb/build.xml trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EventListenerConfigurator.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernatePersistence.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernateQuery.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/InjectionSettingsFactory.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/QueryImpl.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/Callback.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/CallbackResolver.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EntityCallbackHandler.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/ListenerCallback.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/ExplodedJarVisitor.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/FileZippedJarVisitor.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/InputStreamZippedJarVisitor.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/JarVisitor.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/XmlHelper.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/transaction/JoinableCMTTransactionFactory.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/util/LogHelper.java trunk/HibernateExt/ejb/src/resources/org/hibernate/ejb/persistence_1_0.xsd trunk/HibernateExt/ejb/src/test-resources/cfgxmlpar/META-INF/persistence.xml trunk/HibernateExt/ejb/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar/hibernate.cfg.xml trunk/HibernateExt/ejb/src/test-resources/defaultpar/META-INF/orm.xml trunk/HibernateExt/ejb/src/test-resources/defaultpar/META-INF/persistence.xml trunk/HibernateExt/ejb/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar/Mouse.hbm.xml trunk/HibernateExt/ejb/src/test-resources/excludehbmpar/META-INF/persistence.xml trunk/HibernateExt/ejb/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar/Mouse.hbm.xml trunk/HibernateExt/ejb/src/test-resources/explicitpar/META-INF/persistence.xml trunk/HibernateExt/ejb/src/test-resources/explicitpar/orm2.xml trunk/HibernateExt/ejb/src/test-resources/explodedpar/META-INF/persistence.xml trunk/HibernateExt/ejb/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar/Elephant.hbm.xml trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/Cat.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/Distributor.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/EJB3TestCase.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/EntityManagerTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/Item.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/QueryTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/TestCase.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ValidatorIntegrationTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CommunicationSystem.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CountryChecker.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CountryNameCheckerListener.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/IncreaseListener.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/Person.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/RemoteControl.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/Television.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/Translation.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Conference.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/DeleteOrphanTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/ExtractionDocument.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/ExtractionDocumentInfo.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/FetchTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Grandson.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Parent.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Soldier.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Son.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Troop.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/connection/FakeDataSource.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/connection/FakeDataSourceException.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ejb3configuration/EventOverridingTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ejb3configuration/ExceptionInterceptor.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ejb3configuration/InterceptorTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ejb3configuration/TestCase.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/hibernate.cfg.xml trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/instrument/InstrumentedClassLoader.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/instrument/InterceptFieldClassFileTransformerTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/lob/BlobTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/lob/ImageReader.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/lock/Lock.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/lock/LockTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ops/Child.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ops/Employer.hbm.xml trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ops/FlushTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ops/GetLoadTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ops/MergeNewTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ops/Node.hbm.xml trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ops/Parent.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ops/ParentChild.hbm.xml trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ops/PersistTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ops/Workload.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/cfgxmlpar/Morito.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/defaultpar/ApplicationServer.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/defaultpar/Version.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/defaultpar/package-info.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/excludehbmpar/Caipirinha.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/explodedpar/Carpet.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/explodedpar/package-info.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/package-info.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/Book.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm.xml trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm2.xml Log: Style clean Modified: trunk/HibernateExt/ejb/build.xml =================================================================== --- trunk/HibernateExt/ejb/build.xml 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/build.xml 2006-04-26 06:46:52 UTC (rev 9796) @@ -18,7 +18,7 @@ <property name="name" value="hibernate-entitymanager"/> <property name="version" value="3.1beta7"/> <property name="javadoc.packagenames" value="org.hibernate.ejb.*"/> - <property name="jdbc.dir" value="jdbc"/> + <property name="jdbc.dir" value="jdbc"/> <property name="copy.test" value="true"/> <property name="common.dir" value="../common"/> @@ -30,21 +30,21 @@ <property name="build.testresources.dir" value="${build.dir}/testresources"/> <property name="build.temp.dir" value="${build.dir}/temp"/> - <target name="compile" depends="init" description="Compile the Java source code"> - <available - classname="org.eclipse.core.launcher.Main" - property="build.compiler" - value="org.eclipse.jdt.core.JDTCompilerAdapter" - classpath="${java.class.path}"/> - <javac - source="1.5" - srcdir="${src.dir}" - destdir="${classes.dir}" - classpathref="lib.class.path" - debug="${javac.debug}" - optimize="${javac.optimize}" - nowarn="on" - > + <target name="compile" depends="init" description="Compile the Java source code"> + <available + classname="org.eclipse.core.launcher.Main" + property="build.compiler" + value="org.eclipse.jdt.core.JDTCompilerAdapter" + classpath="${java.class.path}"/> + <javac + source="1.5" + srcdir="${src.dir}" + destdir="${classes.dir}" + classpathref="lib.class.path" + debug="${javac.debug}" + optimize="${javac.optimize}" + nowarn="on" + > </javac> </target> @@ -64,11 +64,11 @@ <delete dir="${build.temp.dir}"/> </target> - <target name="packexploded" > + <target name="packexploded"> <property name="extension" value="jar"/> <!-- property name="jarname"/ --> <mkdir dir="${build.testresources.dir}/${jarname}.${extension}"/> - <copy todir="${build.testresources.dir}/${jarname}.${extension}"> + <copy todir="${build.testresources.dir}/${jarname}.${extension}"> <!-- fileset dir="${build.temp.dir}"/ --> <fileset dir="${classes.dir}"> <include name="**/test/pack/${jarname}/**.*"/> @@ -107,57 +107,59 @@ </antcall> </target> - <target name="compiletest" depends="compile" description="Compile the tests"> - <available - classname="org.eclipse.core.launcher.Main" - property="build.compiler" - value="org.eclipse.jdt.core.JDTCompilerAdapter" - classpath="${java.class.path}"/> - <javac - source="1.5" - srcdir="${test.dir}" - destdir="${classes.dir}" - debug="${javac.debug}" - optimize="${javac.optimize}" - nowarn="on"> + <target name="compiletest" depends="compile" description="Compile the tests"> + <available + classname="org.eclipse.core.launcher.Main" + property="build.compiler" + value="org.eclipse.jdt.core.JDTCompilerAdapter" + classpath="${java.class.path}"/> + <javac + source="1.5" + srcdir="${test.dir}" + destdir="${classes.dir}" + debug="${javac.debug}" + optimize="${javac.optimize}" + nowarn="on"> <classpath> <path refid="lib.class.path"/> </classpath> - </javac> - </target> - + </javac> + </target> + <target name="junit" depends="compiletest,test-resources"> <mkdir dir="test_output"/> <mkdir dir="${classes.dir}/META-INF/services"/> <copy todir="${classes.dir}"> - <fileset dir="${resources.dir}"> + <fileset dir="${resources.dir}"> <include name="**/*.*"/> </fileset> - </copy> + </copy> <junit fork="once" printsummary="yes" haltonfailure="yes"> <classpath> <fileset dir="${jdbc.dir}"> - <include name="**/*.jar"/> - <include name="**/*.zip"/> - </fileset> + <include name="**/*.jar"/> + <include name="**/*.zip"/> + </fileset> <dirset dir="${build.testresources.dir}"> <include name="**/*.jar"/> <include name="**/*.par"/> </dirset> <fileset dir="${build.testresources.dir}"> - <include name="**/*.jar"/> - <include name="**/*.par"/> - </fileset> - <path refid="lib.class.path"/> + <include name="**/*.jar"/> + <include name="**/*.par"/> + </fileset> + <path refid="lib.class.path"/> <!-- pathelement path="${classes.dir}"/ --> <dirset dir="${classes.dir}"> <exclude name="**/pack/**.*"/> </dirset> - + <!-- pathelement path="build/test.par"/ --> - <pathelement path="${src.dir}"/> <!-- pick up properties from here --> - <pathelement path="${test.dir}"/> <!-- pick up mappings from here --> + <pathelement path="${src.dir}"/> + <!-- pick up properties from here --> + <pathelement path="${test.dir}"/> + <!-- pick up mappings from here --> </classpath> <formatter type="plain"/> <formatter type="xml"/> @@ -169,34 +171,37 @@ </junit> </target> - <!-- Run a single unit test. --> - <target name="junitsingle" depends="compiletest" description="Run a single test suite (requires testname and jdbc.driver properties)"> - <mkdir dir="test_output"/> - <junit printsummary="yes" fork="yes" haltonfailure="yes"> - <classpath> - <fileset dir="${jdbc.dir}"> - <include name="**/*.jar"/> - <include name="**/*.zip"/> - </fileset> - <path refid="lib.class.path"/> - <pathelement path="build/test.par"/> - <pathelement path="target/hibernate-entitymanager/hibernate-entitymanager.jar"/> - <pathelement path="${src.dir}"/> <!-- pick up properties from here --> - <pathelement path="${test.dir}"/> <!-- pick up mappings from here --> - </classpath> - <formatter type="plain"/> - <formatter type="xml"/> - <test fork="yes" todir="test_output" haltonfailure="no" name="${testname}"/> - </junit> - </target> + <!-- Run a single unit test. --> + <target name="junitsingle" depends="compiletest" + description="Run a single test suite (requires testname and jdbc.driver properties)"> + <mkdir dir="test_output"/> + <junit printsummary="yes" fork="yes" haltonfailure="yes"> + <classpath> + <fileset dir="${jdbc.dir}"> + <include name="**/*.jar"/> + <include name="**/*.zip"/> + </fileset> + <path refid="lib.class.path"/> + <pathelement path="build/test.par"/> + <pathelement path="target/hibernate-entitymanager/hibernate-entitymanager.jar"/> + <pathelement path="${src.dir}"/> + <!-- pick up properties from here --> + <pathelement path="${test.dir}"/> + <!-- pick up mappings from here --> + </classpath> + <formatter type="plain"/> + <formatter type="xml"/> + <test fork="yes" todir="test_output" haltonfailure="no" name="${testname}"/> + </junit> + </target> <target name="jar" depends="compile" description="Build the distribution .jar file"> <mkdir dir="${classes.dir}/META-INF/services"/> <copy todir="${classes.dir}"> - <fileset dir="${resources.dir}"> + <fileset dir="${resources.dir}"> <include name="**/*.*"/> </fileset> - </copy> + </copy> <manifest file="${classes.dir}/META-INF/MANIFEST.MF"> <attribute name="Product" value="${Name}"/> <attribute name="Version" value="${version}"/> @@ -238,37 +243,39 @@ <antcall target="common-build.dist"/> </target> - <target name="zip-dist" description="zip the dist"> - <zip zipfile = "${dist.dir}-${version}.zip"> - <zipfileset prefix="${name}-${version}" dir="${dist.dir}"/> - </zip> - <tar compression="gzip" tarfile="${dist.dir}-${version}.tar.gz"> - <tarfileset prefix="${name}-${version}" dir="${dist.dir}"/> - </tar> - </target> + <target name="zip-dist" description="zip the dist"> + <zip zipfile="${dist.dir}-${version}.zip"> + <zipfileset prefix="${name}-${version}" dir="${dist.dir}"/> + </zip> + <tar compression="gzip" tarfile="${dist.dir}-${version}.tar.gz"> + <tarfileset prefix="${name}-${version}" dir="${dist.dir}"/> + </tar> + </target> <target name="profile" depends="compiletest"> <java classname="org.hibernate.ejb.test.Profile" fork="true"> <jvmarg value="-XrunjbossInspector:c:\profiler\data,include=org.hibernate.ejb,ignore=*,wakeupOnStartup=true"/> <classpath> <fileset dir="${jdbc.dir}"> - <include name="**/*.jar"/> - <include name="**/*.zip"/> - </fileset> + <include name="**/*.jar"/> + <include name="**/*.zip"/> + </fileset> <dirset dir="${build.testresources.dir}"> <include name="**/*.jar"/> <include name="**/*.par"/> </dirset> <fileset dir="${build.testresources.dir}"> - <include name="**/*.jar"/> - <include name="**/*.par"/> - </fileset> - <path refid="lib.class.path"/> + <include name="**/*.jar"/> + <include name="**/*.par"/> + </fileset> + <path refid="lib.class.path"/> <pathelement path="${classes.dir}"/> <!-- pathelement path="build/test.par"/ --> - <pathelement path="${src.dir}"/> <!-- pick up properties from here --> - <pathelement path="${test.dir}"/> <!-- pick up mappings from here --> + <pathelement path="${src.dir}"/> + <!-- pick up properties from here --> + <pathelement path="${test.dir}"/> + <!-- pick up mappings from here --> </classpath> </java> </target> Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -68,7 +68,7 @@ protected void postInit() { //register in Sync if needed - if ( PersistenceUnitTransactionType.JTA.equals(transactionType) ) joinTransaction( true ); + if ( PersistenceUnitTransactionType.JTA.equals( transactionType ) ) joinTransaction( true ); } public Query createQuery(String ejbqlString) { @@ -419,18 +419,20 @@ final JoinableCMTTransaction joinableCMTTransaction = (JoinableCMTTransaction) session.getTransaction(); if ( joinableCMTTransaction.getStatus() == JoinableCMTTransaction.JoinStatus.JOINED ) { - log.debug("Transaction already joined"); + log.debug( "Transaction already joined" ); return; //no-op } joinableCMTTransaction.markForJoined(); session.isOpen(); //register to the Tx if ( joinableCMTTransaction.getStatus() == JoinableCMTTransaction.JoinStatus.NOT_JOINED ) { - if (ignoreNotJoining) { + if ( ignoreNotJoining ) { log.debug( "No JTA transaction found" ); return; } else { - throw new TransactionRequiredException( "No active JTA transaction on joinTransaction call" ); + throw new TransactionRequiredException( + "No active JTA transaction on joinTransaction call" + ); } } else @@ -439,7 +441,7 @@ } //flush before completion and //register clear on rollback - log.trace("Adding flush() and close() synchronization"); + log.trace( "Adding flush() and close() synchronization" ); joinableCMTTransaction.registerSynchronization( new Synchronization() { public void beforeCompletion() { @@ -506,7 +508,7 @@ ); } else { - log.warn("Cannot join transaction, not a JoinableCMTTransaction"); + log.warn( "Cannot join transaction, not a JoinableCMTTransaction" ); } } catch (HibernateException he) { @@ -514,7 +516,7 @@ } } else { - if (!ignoreNotJoining) log.warn("Calling joinTransaction() on a non JTA EntityManager"); + if ( !ignoreNotJoining ) log.warn( "Calling joinTransaction() on a non JTA EntityManager" ); } } Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -138,8 +138,8 @@ * appropriate extra properties. Those properties override the one get through * the peristence.xml file. * - * @param emName entity manager name - * @param integration properties passed to the persistence provider + * @param emName entity manager name + * @param integration properties passed to the persistence provider * @return initialized EntityManagerFactory */ public EntityManagerFactory createEntityManagerFactory(String emName, Map integration) { @@ -154,7 +154,7 @@ while ( xmls.hasMoreElements() ) { URL url = xmls.nextElement(); log.trace( "Analyse of persistence.xml: " + url ); - List<PersistenceMetadata> metadataFiles = PersistenceXmlLoader.deploy( + List<PersistenceMetadata> metadataFiles = PersistenceXmlLoader.deploy( url, integration, cfg.getEntityResolver() @@ -231,15 +231,15 @@ log.info( "Processing PersistenceUnitInfo [\n\tname: " + info.getPersistenceUnitName() + "\n\t...]" ); } - integration = integration != null ? Collections.unmodifiableMap(integration) : CollectionHelper.EMPTY_MAP; + integration = integration != null ? Collections.unmodifiableMap( integration ) : CollectionHelper.EMPTY_MAP; String provider = (String) integration.get( HibernatePersistence.PROVIDER ); - if (provider == null) provider = info.getPersistenceProviderClassName(); + if ( provider == null ) provider = info.getPersistenceProviderClassName(); if ( provider != null && ! provider.trim().startsWith( IMPLEMENTATION_NAME ) ) { log.info( "Required a different provider: " + provider ); return null; } if ( info.getClassLoader() == null ) { - throw new IllegalStateException("PersistenceUnitInfo.getClassLoader() id null"); + throw new IllegalStateException( "PersistenceUnitInfo.getClassLoader() id null" ); } //set the classloader Thread thread = Thread.currentThread(); @@ -258,13 +258,13 @@ List<String> packages = new ArrayList<String>(); List<String> xmlFiles = new ArrayList<String>( 50 ); if ( info.getMappingFileNames() != null ) xmlFiles.addAll( info.getMappingFileNames() ); - // Object overridenTxType = integration.get( HibernatePersistence.TRANSACTION_TYPE ); - // if (overridenTxType != null) { - // defineTransactionType( overridenTxType, info.getPersistenceUnitName() ); - // } - // else { + // Object overridenTxType = integration.get( HibernatePersistence.TRANSACTION_TYPE ); + // if (overridenTxType != null) { + // defineTransactionType( overridenTxType, info.getPersistenceUnitName() ); + // } + // else { defineTransactionType( info.getTransactionType(), info.getPersistenceUnitName() ); - // } + // } //workingVars.put( HibernatePersistence.TRANSACTION_TYPE, transactionType ); boolean[] detectArtifact = getDetectedArtifacts( info.getProperties(), null ); for ( URL jar : info.getJarFileUrls() ) { @@ -282,7 +282,7 @@ ConfigurationHelper.overrideProperties( properties, integration ); //FIXME send the appropriate entites. - if ( "true".equalsIgnoreCase( properties.getProperty(HibernatePersistence.USE_CLASS_ENHANCER) ) ) { + if ( "true".equalsIgnoreCase( properties.getProperty( HibernatePersistence.USE_CLASS_ENHANCER ) ) ) { info.addTransformer( new InterceptFieldClassFileTransformer( entities ) ); } @@ -294,21 +294,23 @@ //datasources boolean overridenDatasource = false; String dataSource = (String) integration.get( HibernatePersistence.JTA_DATASOURCE ); - if (dataSource != null) { + if ( dataSource != null ) { overridenDatasource = true; properties.setProperty( Environment.DATASOURCE, dataSource ); } dataSource = (String) integration.get( HibernatePersistence.NON_JTA_DATASOURCE ); - if (dataSource != null) { + if ( dataSource != null ) { overridenDatasource = true; properties.setProperty( Environment.DATASOURCE, dataSource ); } - if ( ! overridenDatasource && (info.getJtaDataSource() != null || info.getNonJtaDataSource() != null ) ) { + if ( ! overridenDatasource && ( info.getJtaDataSource() != null || info.getNonJtaDataSource() != null ) ) { this.setDataSource( info.getJtaDataSource() != null ? info.getJtaDataSource() : info.getNonJtaDataSource() ); - this.setProperty( Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName() ); + this.setProperty( + Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName() + ); } entityManagerFactory = createEntityManagerFactory( properties, workingVars ); @@ -323,21 +325,21 @@ } private void defineTransactionType(Object overridenTxType, String persistenceUnitName) { - if (overridenTxType == null) { - if (transactionType == null) { - transactionType = PersistenceUnitTransactionType.JTA; //this is the default value - } + if ( overridenTxType == null ) { + if ( transactionType == null ) { + transactionType = PersistenceUnitTransactionType.JTA; //this is the default value + } } - else if (overridenTxType instanceof String) { + else if ( overridenTxType instanceof String ) { transactionType = PersistenceXmlLoader.getTransactionType( (String) overridenTxType ); } - else if (overridenTxType instanceof PersistenceUnitTransactionType) { + else if ( overridenTxType instanceof PersistenceUnitTransactionType ) { transactionType = (PersistenceUnitTransactionType) overridenTxType; } else { throw new PersistenceException( - HibernatePersistence.TRANSACTION_TYPE + " of the wrong class type" - + (persistenceUnitName != null ? " in unit " + persistenceUnitName : "") + HibernatePersistence.TRANSACTION_TYPE + " of the wrong class type" + + ( persistenceUnitName != null ? " in unit " + persistenceUnitName : "" ) + ": " + overridenTxType.getClass() ); } @@ -393,7 +395,7 @@ if ( result[1] ) { filters[size - 1] = new JarVisitor.FileFilter( true ) { public boolean accept(String javaElementName) { - return javaElementName.endsWith( "hbm.xml" ) || javaElementName.endsWith("META-INF/orm.xml"); + return javaElementName.endsWith( "hbm.xml" ) || javaElementName.endsWith( "META-INF/orm.xml" ); } }; } @@ -641,8 +643,9 @@ if ( ! "true".equalsIgnoreCase( cfg.getProperty( Environment.AUTOCOMMIT ) ) ) { log.warn( Environment.AUTOCOMMIT + " = false break the EJB3 specification" ); } - boolean discardOnClose = preparedProperties.getProperty( HibernatePersistence.DISCARD_PC_ON_CLOSE).equals( "true"); - return buildEntityManagerFactory(discardOnClose); + boolean discardOnClose = preparedProperties.getProperty( HibernatePersistence.DISCARD_PC_ON_CLOSE ) + .equals( "true" ); + return buildEntityManagerFactory( discardOnClose ); } private void addClassesToSessionFactory(Map workingVars) { @@ -684,7 +687,7 @@ } } - private Properties prepareProperties(Properties properties, Map workingVars ) { + private Properties prepareProperties(Properties properties, Map workingVars) { Properties preparedProperties = new Properties(); //defaults different to Hibernate @@ -701,19 +704,25 @@ preparedProperties.getProperty( HibernatePersistence.TRANSACTION_TYPE ), (String) workingVars.get( HibernatePersistence.PERSISTENCE_UNIT_NAME ) ); - boolean hasTxStrategy = StringHelper.isNotEmpty( preparedProperties.getProperty( Environment.TRANSACTION_STRATEGY ) ); - if (! hasTxStrategy && transactionType == PersistenceUnitTransactionType.JTA) { - preparedProperties.setProperty( Environment.TRANSACTION_STRATEGY, JoinableCMTTransactionFactory.class.getName() ); + boolean hasTxStrategy = StringHelper.isNotEmpty( + preparedProperties.getProperty( Environment.TRANSACTION_STRATEGY ) + ); + if ( ! hasTxStrategy && transactionType == PersistenceUnitTransactionType.JTA ) { + preparedProperties.setProperty( + Environment.TRANSACTION_STRATEGY, JoinableCMTTransactionFactory.class.getName() + ); } - else if (! hasTxStrategy && transactionType == PersistenceUnitTransactionType.RESOURCE_LOCAL) { + else if ( ! hasTxStrategy && transactionType == PersistenceUnitTransactionType.RESOURCE_LOCAL ) { preparedProperties.setProperty( Environment.TRANSACTION_STRATEGY, JDBCTransactionFactory.class.getName() ); } - if (hasTxStrategy) { - log.warn("Overriding " + Environment.TRANSACTION_STRATEGY + " is dangerous, this might break the EJB3 specification implementation"); + if ( hasTxStrategy ) { + log.warn( + "Overriding " + Environment.TRANSACTION_STRATEGY + " is dangerous, this might break the EJB3 specification implementation" + ); } if ( preparedProperties.getProperty( Environment.FLUSH_BEFORE_COMPLETION ).equals( "true" ) ) { preparedProperties.setProperty( Environment.FLUSH_BEFORE_COMPLETION, "false" ); - log.warn("Defining " + Environment.FLUSH_BEFORE_COMPLETION + "=true ignored in HEM"); + log.warn( "Defining " + Environment.FLUSH_BEFORE_COMPLETION + "=true ignored in HEM" ); } return preparedProperties; } @@ -721,7 +730,7 @@ private Class classForName( String className ) throws ClassNotFoundException { - return ReflectHelper.classForName( className, this.getClass() ); + return ReflectHelper.classForName( className, this.getClass() ); } private void setCacheStrategy(String propertyKey, Map properties, boolean isClass) { Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -5,12 +5,12 @@ import javax.persistence.spi.PersistenceUnitTransactionType; import javax.transaction.Synchronization; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; -import org.hibernate.HibernateException; import org.hibernate.engine.SessionImplementor; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; /** * @author Gavin King @@ -55,20 +55,21 @@ if ( !open ) throw new IllegalStateException( "EntityManager is closed" ); if ( !discardOnClose && isTransactionInProgress() ) { //delay the closing till the end of the enlisted transaction - getSession().getTransaction().registerSynchronization( new Synchronization() { - public void beforeCompletion() { - //nothing to do - } + getSession().getTransaction().registerSynchronization( + new Synchronization() { + public void beforeCompletion() { + //nothing to do + } - public void afterCompletion(int i) { - //TODO should I check for isOpen() ? - if (session != null) { - log.debug( "Closing session after transaction completion"); - session.close(); + public void afterCompletion(int i) { + //TODO should I check for isOpen() ? + if ( session != null ) { + log.debug( "Closing session after transaction completion" ); + session.close(); + } + //TODO session == null should not happen } - //TODO session == null should not happen } - } ); } else { @@ -81,11 +82,11 @@ public boolean isOpen() { //adjustFlushMode(); //don't adjust, can't be done on closed EM try { - if (open) getSession().isOpen(); //to force enlistment in tx + if ( open ) getSession().isOpen(); //to force enlistment in tx return open; } catch (HibernateException he) { - throwPersistenceException(he); + throwPersistenceException( he ); return false; } } Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EventListenerConfigurator.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EventListenerConfigurator.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EventListenerConfigurator.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -14,10 +14,13 @@ import org.hibernate.HibernateException; import org.hibernate.ejb.event.CallbackHandlerConsumer; +import org.hibernate.ejb.event.EJB3AutoFlushEventListener; import org.hibernate.ejb.event.EJB3DeleteEventListener; import org.hibernate.ejb.event.EJB3FlushEntityEventListener; +import org.hibernate.ejb.event.EJB3FlushEventListener; import org.hibernate.ejb.event.EJB3MergeEventListener; import org.hibernate.ejb.event.EJB3PersistEventListener; +import org.hibernate.ejb.event.EJB3PersistOnFlushEventListener; import org.hibernate.ejb.event.EJB3PostDeleteEventListener; import org.hibernate.ejb.event.EJB3PostInsertEventListener; import org.hibernate.ejb.event.EJB3PostLoadEventListener; @@ -25,9 +28,6 @@ import org.hibernate.ejb.event.EJB3SaveEventListener; import org.hibernate.ejb.event.EJB3SaveOrUpdateEventListener; import org.hibernate.ejb.event.EntityCallbackHandler; -import org.hibernate.ejb.event.EJB3AutoFlushEventListener; -import org.hibernate.ejb.event.EJB3FlushEventListener; -import org.hibernate.ejb.event.EJB3PersistOnFlushEventListener; import org.hibernate.event.AutoFlushEventListener; import org.hibernate.event.DeleteEventListener; import org.hibernate.event.EventListeners; @@ -80,7 +80,9 @@ ); listenerConfig.setMergeEventListeners( new MergeEventListener[]{new EJB3MergeEventListener()} ); listenerConfig.setPersistEventListeners( new PersistEventListener[]{new EJB3PersistEventListener()} ); - listenerConfig.setPersistOnFlushEventListeners( new PersistEventListener[]{new EJB3PersistOnFlushEventListener()} ); + listenerConfig.setPersistOnFlushEventListeners( + new PersistEventListener[]{new EJB3PersistOnFlushEventListener()} + ); listenerConfig.setSaveEventListeners( new SaveOrUpdateEventListener[]{new EJB3SaveEventListener()} ); listenerConfig.setSaveOrUpdateEventListeners( new SaveOrUpdateEventListener[]{new EJB3SaveOrUpdateEventListener()} Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -10,6 +10,8 @@ */ public interface HibernateEntityManagerImplementor extends HibernateEntityManager { boolean isTransactionInProgress(); + public void throwPersistenceException(PersistenceException e); + public void throwPersistenceException(HibernateException e); } Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernatePersistence.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernatePersistence.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernatePersistence.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -2,7 +2,6 @@ package org.hibernate.ejb; import java.util.Map; - import javax.persistence.EntityManagerFactory; import javax.persistence.spi.PersistenceUnitInfo; @@ -17,7 +16,8 @@ * Provider */ public static final String PROVIDER = "javax.persistence.provider"; - /** + /** + * * transaction type */ public static final String TRANSACTION_TYPE = "javax.persistence.transactionType"; @@ -106,7 +106,7 @@ * the peristence.xml file. * * @param persistenceUnitName entity manager name - * @param overridenProperties properties passed to the persistence provider + * @param overridenProperties properties passed to the persistence provider * @return initialized EntityManagerFactory */ public EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map overridenProperties) { Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernateQuery.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernateQuery.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernateQuery.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -3,6 +3,6 @@ import javax.persistence.Query; -public interface HibernateQuery extends Query{ +public interface HibernateQuery extends Query { public org.hibernate.Query getHibernateQuery(); } Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/InjectionSettingsFactory.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/InjectionSettingsFactory.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/InjectionSettingsFactory.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -19,6 +19,7 @@ * Object will be injected * * @param connectionProviderInjectionData + * */ public void setConnectionProviderInjectionData(Map connectionProviderInjectionData) { this.connectionProviderInjectionData = connectionProviderInjectionData; Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/QueryImpl.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/QueryImpl.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/QueryImpl.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -37,13 +37,13 @@ public int executeUpdate() { try { if ( ! em.isTransactionInProgress() ) { - em.throwPersistenceException( new TransactionRequiredException("Executing an update/delete query") ); + em.throwPersistenceException( new TransactionRequiredException( "Executing an update/delete query" ) ); return 0; } return query.executeUpdate(); } catch (HibernateException he) { - em.throwPersistenceException(he); + em.throwPersistenceException( he ); return 0; } } @@ -53,7 +53,7 @@ return query.list(); } catch (HibernateException he) { - em.throwPersistenceException(he); + em.throwPersistenceException( he ); return null; } } @@ -69,7 +69,7 @@ return result; } catch (HibernateException he) { - em.throwPersistenceException(he); + em.throwPersistenceException( he ); return null; } } @@ -78,8 +78,8 @@ if ( maxResult < 0 ) { throw new IllegalArgumentException( "Negative (" - + maxResult - + ") parameter passed in to setMaxResults" + + maxResult + + ") parameter passed in to setMaxResults" ); } query.setMaxResults( maxResult ); @@ -90,8 +90,8 @@ if ( firstResult < 0 ) { throw new IllegalArgumentException( "Negative (" - + firstResult - + ") parameter passed in to setMaxResults" + + firstResult + + ") parameter passed in to setMaxResults" ); } query.setFirstResult( firstResult ); @@ -146,7 +146,7 @@ return this; } catch (HibernateException he) { - em.throwPersistenceException(he); + em.throwPersistenceException( he ); return null; } } @@ -165,7 +165,7 @@ return this; } catch (HibernateException he) { - em.throwPersistenceException(he); + em.throwPersistenceException( he ); return null; } } @@ -184,7 +184,7 @@ return this; } catch (HibernateException he) { - em.throwPersistenceException(he); + em.throwPersistenceException( he ); return null; } } @@ -192,7 +192,7 @@ public Query setParameter(int position, Object value) { try { if ( isEJBQLQuery() ) { - this.setParameter( Integer.toString(position), value ); + this.setParameter( Integer.toString( position ), value ); } else { query.setParameter( position - 1, value ); @@ -200,19 +200,19 @@ return this; } catch (HibernateException he) { - em.throwPersistenceException(he); + em.throwPersistenceException( he ); return null; } } private boolean isEJBQLQuery() { - return ! (query instanceof SQLQuery); + return ! ( query instanceof SQLQuery ); } public Query setParameter(int position, Date value, TemporalType temporalType) { try { if ( isEJBQLQuery() ) { - String name = Integer.toString(position); + String name = Integer.toString( position ); this.setParameter( name, value, temporalType ); } else { @@ -229,7 +229,7 @@ return this; } catch (HibernateException he) { - em.throwPersistenceException(he); + em.throwPersistenceException( he ); return null; } } @@ -237,8 +237,8 @@ public Query setParameter(int position, Calendar value, TemporalType temporalType) { try { if ( isEJBQLQuery() ) { - String name = Integer.toString(position); - this.setParameter( name, value, temporalType); + String name = Integer.toString( position ); + this.setParameter( name, value, temporalType ); } else { if ( temporalType == DATE ) { @@ -254,7 +254,7 @@ return this; } catch (HibernateException he) { - em.throwPersistenceException(he); + em.throwPersistenceException( he ); return null; } } Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -5,9 +5,9 @@ import javax.persistence.PersistenceException; import javax.persistence.RollbackException; +import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Transaction; -import org.hibernate.HibernateException; /** * @author Gavin King @@ -37,7 +37,7 @@ tx = getSession().beginTransaction(); } catch (HibernateException he) { - entityManager.throwPersistenceException(he); + entityManager.throwPersistenceException( he ); } } @@ -45,9 +45,9 @@ if ( tx == null || !tx.isActive() ) { throw new IllegalStateException( "Transaction not active" ); } - if (rollbackOnly) { + if ( rollbackOnly ) { tx.rollback(); - throw new RollbackException("Transaction marked as rollbackOnly"); + throw new RollbackException( "Transaction marked as rollbackOnly" ); } try { tx.commit(); @@ -60,7 +60,7 @@ catch (Exception re) { //swallow } - throw new RollbackException( "Error while commiting the transaction", e); + throw new RollbackException( "Error while commiting the transaction", e ); } finally { rollbackOnly = false; @@ -77,7 +77,7 @@ tx.rollback(); } catch (Exception e) { - throw new PersistenceException("unexpected error when rollbacking", e); + throw new PersistenceException( "unexpected error when rollbacking", e ); } finally { rollbackOnly = false; @@ -100,7 +100,7 @@ return tx != null && tx.isActive(); } catch (RuntimeException e) { - throw new PersistenceException("unexpected error when checking transaction status", e); + throw new PersistenceException( "unexpected error when checking transaction status", e ); } } Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -15,5 +15,6 @@ log.info( "Hibernate EntityManager " + VERSION ); } - public static void touch() {} + public static void touch() { + } } Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -13,22 +13,23 @@ /** * A connection provider that uses an injected <tt>DataSource</tt>. * Setters has to be called before configure() + * + * @author Emmanuel Bernard * @see org.hibernate.connection.ConnectionProvider - * @author Emmanuel Bernard */ public class InjectedDataSourceConnectionProvider extends DatasourceConnectionProvider { private String user; private String pass; - private static final Log log = LogFactory.getLog(InjectedDataSourceConnectionProvider.class); + private static final Log log = LogFactory.getLog( InjectedDataSourceConnectionProvider.class ); public void setDataSource(DataSource ds) { super.setDataSource( ds ); } public void configure(Properties props) throws HibernateException { - user = props.getProperty(Environment.USER); - pass = props.getProperty(Environment.PASS); + user = props.getProperty( Environment.USER ); + pass = props.getProperty( Environment.PASS ); if ( getDataSource() == null ) throw new HibernateException( "No datasource provided" ); log.info( "Using provided datasource" ); Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/Callback.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/Callback.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/Callback.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -11,9 +11,9 @@ import java.io.ObjectOutputStream; import java.io.Serializable; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; import java.util.StringTokenizer; -import java.util.List; -import java.util.ArrayList; import org.hibernate.util.ReflectHelper; @@ -39,10 +39,10 @@ oos.writeObject( callbackMethod.toGenericString() ); } - private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { ois.defaultReadObject(); String signature = (String) ois.readObject(); - StringTokenizer st = new StringTokenizer(signature, " ", false); + StringTokenizer st = new StringTokenizer( signature, " ", false ); String usefulSignature = null; while ( st.hasMoreElements() ) usefulSignature = (String) st.nextElement(); int parenthesis = usefulSignature.indexOf( "(" ); @@ -51,9 +51,9 @@ String clazzName = methodAndClass.substring( 0, lastDot ); Class callbackClass = ReflectHelper.classForName( clazzName, this.getClass() ); String parametersString = usefulSignature.substring( parenthesis + 1, usefulSignature.length() - 1 ); - st = new StringTokenizer( parametersString, ", ", false); + st = new StringTokenizer( parametersString, ", ", false ); List<Class> parameters = new ArrayList<Class>(); - while( st.hasMoreElements() ) { + while ( st.hasMoreElements() ) { String parameter = (String) st.nextElement(); parameters.add( ReflectHelper.classForName( parameter, this.getClass() ) ); } Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/CallbackResolver.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/CallbackResolver.java 2006-04-26 06:41:18 UTC (rev 9795) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/CallbackResolver.java 2006-04-26 06:46:52 UTC (rev 9796) @@ -14,9 +14,9 @@ import java.util.List; import javax.persistence.Entity; import javax.persistence.EntityListeners; +import javax.persistence.ExcludeSuperclassListeners; import javax.persistence.MappedSuperclass; import javax.persistence.PersistenceException; -import javax.persistence.ExcludeSuperclassListeners; /** * @author <a href="mailto:kab...@jb...">Kabir Khan</a> @@ -24,24 +24,26 @@ */ public final class CallbackResolver { private static boolean useAnnotationAnnotatedByListener; + { //check whether reading annotations of annotations is useful or not useAnnotationAnnotatedByListener = false; Target target = (Target) EntityListeners.class.getAnnotation( Target.class ); - if (target != null) { + if ( target != null ) { for ( ElementType type : target.value() ) { if ( type.equals( ElementType.ANNOTATION_TYPE ) ) useAnnotationAnnotatedByListener = true; } } } - private CallbackResolver() {} + private CallbackResolver() { + } public static Callback resolveCallback(Class beanClass, Class annotation, List<Class> listeners) throws Exception { Callback callback = null; Method[] methods = beanClass.getDeclaredMethods(); - for ( int i = 0 ; i < methods.length ; i++ ) { + for ( int i = 0; i < methods.length ; i++ ) { if ( methods[i].getAnnotation( annotation ) != null ) { if ( callback == null ) { callback = new BeanCallback( methods[i] ); @@ -49,7 +51,8 @@ Class[] args = methods[i].getParameterTypes(); if ( returnType != Void.TYPE || args.length != 0 ) { throw new RuntimeException( - "Callback methods annotated on the bean class must return void and take no arguments: " + annotation.getName() + " - " + methods[i] + "Callback methods annotated on the bean class must return void and take no arguments: " + annotation + .getName() + " - " + methods[i] ); } if ( ! methods[i].isAccessible() ) { @@ -59,7 +62,7 @@ else { throw new RuntimeException( "You can only annotate one callback method with " - + annotation.getName() + " in bean class: " + beanClass.getName() + + annotation.getName() + " in bean class: " + beanClass.getName() ); } } @@ -69,7 +72,7 @@ if ( listener != null ) { try { methods = listener.getDeclaredMethods(); - for ( int i = 0 ; i < methods.length ; i++ ) { + for ( int i = 0; i < methods.length ; i++ ) { if ( methods[i].getAnnotation( annotation ) != null ) { if ( callback == null ) { callback = new ListenerCallback( methods[i], listener.newInstance() ); @@ -77,7 +80,8 @@ Class[] args = methods[i].getParameterTypes(); if ( returnType != Void.TYPE || args.length != 1 ) { throw new RuntimeException( - "Callback methods annotated in a listener bean class must return void and take one argument: " + annotation.getName() + " - " + methods[i] + "Callback methods annotated in a listener bean class must return void and take one argument: " + annotation + .getName() + " - " + methods[i] ); } if ( ! methods[i].isAccessible() ) { @@ -87,8 +91,8 @@ else { throw new RuntimeException( "You can only annotate one callback method with " - + annotation.getName() + " in bean class: " + beanClass.getName() + " and callback listener: " - + listener.getName() + + annotation.getName() + " in bean class: " + beanClass.getName() + " and callback listener: " + + listener.getName() ); } } @@ -112,79 +116,86 @@ //FIXME exclude overriden callback methods Callback callback = null; Method[] methods = currentClazz.getDeclaredMethods(); - for ( int i = 0 ; i < methods.length ; i++ ) { + for ( int i = 0; i < methods.length ; i++ ) { if ( methods[i].getAnnotation( annotation ) != null ) { - if (callback == null) { + if ( callback == null ) { callback = new BeanCallback( methods[i] ); Class returnType = methods[i].getReturnType(); Class[] args = methods[i].getParameterTypes(); if ( returnType != Void.TYPE || args.length != 0 ) { throw new RuntimeException( - "Callback methods annotated on the bean class must return void and take no arguments: " + annotation.getName() + " - " + methods[i] + "Callback methods annotated on the bean class must return void and take no arguments: " + annotation + .getName() + " - " + methods[i] ); } if ( ! methods[i].isAccessible() ) { methods[i].setAccessible( true ); } - callbacks.add(0, callback); //superclass first + callbacks.add( 0, callback ); //superclass first } else { throw new PersistenceException( "You can only annotate one callback method with " - + annotation.getName() + " in bean class: " + beanClass.getName() + + annotation.getName() + " in bean class: " + beanClass.getName() ); } } } - if (!stopListeners) { + if ( !stopListeners ) { getListeners( currentClazz, orderedListeners ); stopListeners = currentClazz.isAnnotationPresent( ExcludeSuperclassListeners.class ); } do { currentClazz = currentClazz.getSuperclass(); - } while (currentClazz != null - && ! ( currentClazz.isAnnotationPresent( Entity.class) - || currentClazz.isAnnotationPresent( MappedSuperclass.class) ) - ); + } + while ( currentClazz != null + && ! ( currentClazz.isAnnotationPresent( Entity.class ) + || currentClazz.isAnnotationPresent( MappedSuperclass.class ) ) + ); } while ( currentClazz != null ); - for (Class listener : orderedListeners) { + for ( Class listener : orderedListeners ) { Callback callback = null; if ( listener != null ) { Method[] methods = listener.getDeclaredMethods(); - for ( int i = 0 ; i < methods.length ; i++ ) { + for ( int i = 0; i < methods.length ; i++ ) { if ( methods[i].getAnnotation( annotation ) != null ) { if ( callback == null ) { try { callback = new ListenerCallback( methods[i], listener.newInstance() ); } catch (IllegalAccessException e) { - throw new PersistenceException( "Unable to create instance of " + listener.getName() - + " as a listener of beanClass", e); + throw new PersistenceException( + "Unable to create instance of " + listener.getName() + + " as a listener of beanClass", e + ); } catch (InstantiationException e) { - throw new PersistenceException( "Unable to create instance of " + listener.getName() - + " as a listener of beanClass", e); + throw new PersistenceException( + "Unable to create instance of " + listener.getName() + + " as a listener of beanClass", e + ); } Class returnType = methods[i].getReturnType(); Class[] args = methods[i].getParameterTypes(); if ( returnType != Void.TYPE || args.length != 1 ) { throw new PersistenceException( - "Callback methods annotated in a listener bean class must return void and take one argument: " + annotation.getName() + " - " + methods[i] + "Callback methods annotated in a listener bean class must return void and take one argument: " + annotation + .getName() + " - " + methods[i] ); } if ( ! methods[i].isAccessible() ) { methods[i].setAccessible( true ); } - callbacks.add(0, callback); // listeners first + callbacks.add( 0, callback ); // listeners first } else { throw new PersistenceException( "You can only annotate one callback method with " - + annotation.getName() + " in bean class: " + beanClass.getName() + " and callback listener: " - + listener.getName() + + annotation.getName() + " in bean class: " + beanClass.getName() + " and callback listener: " + + listener.getName() ); } } @@ -199,18 +210,18 @@ if ( entityListeners != null ) { Class[] classes = entityListeners.value(); int size = classes.length; - for (int index = size - 1 ; index >= 0 ; index--) { + for ( int index = size - 1; index >= 0 ; index-- ) { orderedListeners.add( classes[index] ); } } - if (useAnnotationAnnotatedByListener) { + if ( useAnnotationAnnotatedByListener ) { Annotation[] annotations = currentClazz.getAnnotations(); - for (Annotation anno... [truncated message content] |
Author: epbernard Date: 2006-04-26 02:41:18 -0400 (Wed, 26 Apr 2006) New Revision: 9795 Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/AnnotationException.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotationfactory/AnnotationDescriptor.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotationfactory/AnnotationFactory.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotationfactory/AnnotationProxy.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/AccessType.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/BatchSize.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Cache.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/CacheModeType.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Cascade.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Check.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/CollectionOfElements.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Columns.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/DiscriminatorFormula.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Entity.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Filter.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/FilterDef.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/FilterDefs.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Filters.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/FlushModeType.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Formula.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/GenericGenerator.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Index.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/IndexColumn.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/NamedNativeQueries.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/NamedNativeQuery.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/NamedQueries.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/NamedQuery.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/NotFound.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/NotFoundAction.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/OnDelete.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/OnDeleteAction.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/OptimisticLockType.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/OrderBy.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/ParamDef.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Parameter.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/PolymorphismType.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Proxy.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Sort.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Table.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Tables.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Type.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/TypeDef.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/TypeDefs.java trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Where.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/BinderHelper.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CreateKeySecondPass.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/EJB3NamingStrategy.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3Column.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/FkSecondPass.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/IndexSecondPass.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyData.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyInferredData.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyPreloadedData.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ToOneMappedBySecondPass.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/QueryBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ResultsetMappingSecondPass.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/TableBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/Version.java trunk/HibernateExt/metadata/src/java/org/hibernate/ejb/orm_1_0.xsd trunk/HibernateExt/metadata/src/java/org/hibernate/lucene/DocumentBuilder.java trunk/HibernateExt/metadata/src/java/org/hibernate/mapping/IdGenerator.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/Filter.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/XClass.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/XMember.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/XMethod.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaAnnotationReader.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXAnnotatedElement.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXArrayType.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXFactory.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXMember.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXMethod.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXPackage.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXProperty.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXType.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/Pair.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/generics/ApproximatingTypeEnvironment.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/generics/CompoundTypeEnvironment.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/generics/IdentityTypeEnvironment.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/generics/SimpleTypeEnvironment.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/generics/TypeEnvironment.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/generics/TypeEnvironmentFactory.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/generics/TypeFactory.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/generics/TypeSwitch.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/generics/TypeUtils.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java trunk/HibernateExt/metadata/src/java/org/hibernate/type/AbstractLobType.java trunk/HibernateExt/metadata/src/java/org/hibernate/type/ByteArrayBlobType.java trunk/HibernateExt/metadata/src/java/org/hibernate/type/CharacterArrayClobType.java trunk/HibernateExt/metadata/src/java/org/hibernate/type/EnumType.java trunk/HibernateExt/metadata/src/java/org/hibernate/type/PrimitiveByteArrayBlobType.java trunk/HibernateExt/metadata/src/java/org/hibernate/type/SerializableToBlobType.java trunk/HibernateExt/metadata/src/java/org/hibernate/type/StringClobType.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/AssertFalse.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/AssertTrue.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/ClassValidator.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/Email.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/EmailValidator.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/Future.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/Length.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/Max.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/Min.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/NotNull.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/NotNullValidator.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/Past.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/PastValidator.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/Pattern.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/PatternValidator.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/Range.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/Size.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/SizeValidator.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/Valid.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/ValidatorClass.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/event/ValidateEventListener.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotationfactory/AnnotationFactoryTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotationfactory/AnnotationProxyTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotationfactory/TestAnnotation.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/AmericaCupClass.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Boat.hbm.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Boat.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Company.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Country.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Customer.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Discount.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/EntityTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Ferry.hbm.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Ferry.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Flight.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/FlyingObject.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/JoinedSubclassTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/PackageLevelTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Passport.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Plane.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Port.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/SafeMappingTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/SecuredBindingTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Sky.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/TestCase.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/Ticket.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/TicketComparator.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/access/AccessTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/access/Chair.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/access/Furniture.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/access/Thingy.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/array/ArrayTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/array/Competitor.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/array/Contest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cascade/CascadeTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cascade/Mouth.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cascade/Tooth.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/Channel.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/Child.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/ChildPk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/Parent.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/ParentPk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/Presenter.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/TvMagazin.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/collectionelement/Boy.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/collectionelement/CountryAttitude.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/collectionelement/Toy.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/duplicatedgenerator/Flight.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/duplicatedgenerator/package-info.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/AddressType.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/Book.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/CorpType.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/Country.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/Deal.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/EmbeddedTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/InternetProvider.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/LegalStructure.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/Manager.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/Nationality.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/NotonialDeal.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/Person.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/SpreadDeal.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/embedded/Swap.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/Address.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/CasterStringType.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/Country.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/Forest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/Race.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/Ransom.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/Tree.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/WashingMachine.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/package-info.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entitynonentity/Voice.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/fetch/Person.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/fetch/Stay.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/DNA.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/Gene.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/GenericsTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/Item.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/PaperType.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/Price.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/SomeGuy.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/Stuff.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/WildEntity.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/hibernate.cfg.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Ball.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Computer.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Department.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Dog.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Footballer.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/FootballerPk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Furniture.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Home.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/IdClassTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/IdTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/MilitaryBuilding.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Phone.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Shoe.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/SoundSystem.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Store.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Tower.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Tree.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/package-info.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/AddressBook.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/AddressEntry.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Drawer.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Dress.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Gas.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/News.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Newspaper.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Painter.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Painting.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Software.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Version.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/indexcoll/Wardrobe.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/Carrot.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/Fruit.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/SubclassTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/Tomato.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/Vegetable.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/VegetablePk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/Clothing.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/Document.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/File.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/Folder.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/Sweater.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/mixed/Document.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/mixed/File.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/mixed/Folder.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Music.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Shoe.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/SingleTableTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Sneaker.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Trash.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/union/Document.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/union/File.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/union/Folder.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/union/SubclassTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/interfaces/Contact.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/interfaces/ContactImpl.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/interfaces/InterfacesTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/interfaces/User.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/interfaces/UserImpl.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/join/Cat.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/join/Death.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/join/Dog.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/join/DogPk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/join/JoinTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/join/Life.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/lob/Book.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/lob/CompiledCode.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/lob/LobTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Cat.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/CatPk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/City.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Employee.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Employer.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Friend.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Group.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Inspector.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/KnownClient.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Man.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/ManPk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Store.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Supplier.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Woman.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/WomanPk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Zone.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytoone/Car.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytoone/Child.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytoone/Color.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytoone/DistrictUser.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytoone/ManyToOneTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytoone/Node.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytoone/NodePk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytoone/Parent.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytoone/ParentPk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytoone/UserPK.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/notfound/Coin.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/notfound/Currency.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/notfound/NotFoundTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/Child.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/City.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/Monkey.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/OneToManyTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/Parent.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/ParentPk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/PoliticalParty.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/Politician.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/Soldier.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/Street.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/Tiger.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/Trainer.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetomany/Troop.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetoone/Address.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetoone/Client.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetoone/Computer.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetoone/ComputerPk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetoone/OneToOneTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetoone/Party.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetoone/SerialNumber.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetoone/SerialNumberPk.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetoone/Trousers.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/onetoone/TrousersZip.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/override/AssociationOverrideTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/override/Location.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/override/Move.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/override/Trip.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/package-info.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/query/Area.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/query/Captain.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/query/Dictionary.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/query/Mark.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/query/Night.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/query/QueryTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/query/SpaceShip.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/query/package-info.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/referencedcolumnname/Bag.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/referencedcolumnname/Clothes.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/referencedcolumnname/House.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/referencedcolumnname/Luggage.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/referencedcolumnname/Rambler.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/strategy/Storm.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/strategy/StrategyTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/tableperclass/Machine.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/type/Dvd.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/various/Conductor.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/various/IndexTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/various/ProfessionalAgreement.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/various/Truck.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/various/Vehicule.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/Manufacturer.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/lucene/Document.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/lucene/LuceneTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaReflectionManagerTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaXClassTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaXPropertyTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/TestAnnotation.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/XAnnotatedElementTestCase.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/generics/ApproximatingTypeEnvironmentTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/generics/BigBlob.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/generics/Dad.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/generics/TestAnnotation.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/generics/TypeEnvironmentFactoryTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/generics/TypeUtilsTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Administration.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Match.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/SocialSecurityMoralAccount.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/TennisMatch.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/XMLContextTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/EmailTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/HibernateAnnotationIntegrationTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/Music.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/Rock.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/Tv.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/TvOwner.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/User.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/ValidatorTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/Venusian.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/collections/Tv.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/collections/ValidationCollectionTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/CreditCard.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/User.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/inheritance/Animal.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/inheritance/BoneEater.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/inheritance/Dog.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/inheritance/Eater.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/inheritance/InheritanceTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/validator/test/inheritance/Name.java Log: Style clean Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/AnnotationException.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/AnnotationException.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/AnnotationException.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -5,20 +5,20 @@ * Annotation related exception. * The EJB3 EG will probably set a generic exception. * I'll then use this one. - * + * * @author Emmanuel Bernard */ public class AnnotationException extends MappingException { public AnnotationException(String msg, Throwable root) { - super(msg, root); + super( msg, root ); } public AnnotationException(Throwable root) { - super(root); + super( root ); } public AnnotationException(String s) { - super(s); + super( s ); } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/annotationfactory/AnnotationDescriptor.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotationfactory/AnnotationDescriptor.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotationfactory/AnnotationDescriptor.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -11,37 +11,37 @@ * The "elements" we're talking about are the annotation attributes, * not its targets (the term "element" is used ambiguously * in Java's annotations documentation). - * + * * @author Paolo Perrotta * @author Davide Marchignoli */ public class AnnotationDescriptor { - private final Class<? extends Annotation> type; - - private final Map<String, Object> elements = new HashMap<String, Object>(); - - public AnnotationDescriptor(Class<? extends Annotation> annotationType) { - type = annotationType; - } - - public void setValue(String elementName, Object value) { - elements.put(elementName, value); - } - - public Object valueOf(String elementName) { - return elements.get(elementName); - } + private final Class<? extends Annotation> type; - public boolean containsElement(String elementName) { - return elements.containsKey(elementName); - } + private final Map<String, Object> elements = new HashMap<String, Object>(); - public int numberOfElements() { - return elements.size(); - } - - public Class<? extends Annotation> type() { - return type; - } + public AnnotationDescriptor(Class<? extends Annotation> annotationType) { + type = annotationType; + } + + public void setValue(String elementName, Object value) { + elements.put( elementName, value ); + } + + public Object valueOf(String elementName) { + return elements.get( elementName ); + } + + public boolean containsElement(String elementName) { + return elements.containsKey( elementName ); + } + + public int numberOfElements() { + return elements.size(); + } + + public Class<? extends Annotation> type() { + return type; + } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/annotationfactory/AnnotationFactory.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotationfactory/AnnotationFactory.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotationfactory/AnnotationFactory.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -8,27 +8,30 @@ /** * Creates live annotations (actually <code>AnnotationProxies</code>) from <code>AnnotationDescriptors</code>. - * - * @see org.hibernate.annotationfactory.AnnotationProxy + * * @author Paolo Perrotta * @author Davide Marchignoli + * @see AnnotationProxy */ public class AnnotationFactory { - @SuppressWarnings("unchecked") - public static <T extends Annotation> T create(AnnotationDescriptor descriptor) { - ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); - Class<T> proxyClass = (Class<T>) Proxy.getProxyClass(classLoader, descriptor.type()); - InvocationHandler handler = new AnnotationProxy(descriptor); - try { - return getProxyInstance(proxyClass, handler); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - private static <T extends Annotation> T getProxyInstance(Class<T> proxyClass, InvocationHandler handler) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException { - Constructor<T> constructor = proxyClass.getConstructor(new Class[] {InvocationHandler.class}); - return constructor.newInstance(new Object[] {handler}); - } + @SuppressWarnings("unchecked") + public static <T extends Annotation> T create(AnnotationDescriptor descriptor) { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + Class<T> proxyClass = (Class<T>) Proxy.getProxyClass( classLoader, descriptor.type() ); + InvocationHandler handler = new AnnotationProxy( descriptor ); + try { + return getProxyInstance( proxyClass, handler ); + } + catch (Exception e) { + throw new RuntimeException( e ); + } + } + + private static <T extends Annotation> T getProxyInstance(Class<T> proxyClass, InvocationHandler handler) throws + SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, + IllegalAccessException, InvocationTargetException { + Constructor<T> constructor = proxyClass.getConstructor( new Class[]{InvocationHandler.class} ); + return constructor.newInstance( new Object[]{handler} ); + } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/annotationfactory/AnnotationProxy.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotationfactory/AnnotationProxy.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotationfactory/AnnotationProxy.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -12,7 +12,7 @@ /** * A concrete implementation of <code>Annotation</code> that pretends it is a * "real" source code annotation. It's also an <code>InvocationHandler</code>. - * <p> + * <p/> * When you create an <code>AnnotationProxy</code>, you must initialize it * with an <code>AnnotationDescriptor</code>. * The adapter checks that the provided elements are the same elements defined @@ -20,7 +20,7 @@ * values are the right type. If you omit an element, the adapter will use the * default value for that element from the annotation interface, if it exists. * If no default exists, it will throw an exception. - * <p> + * <p/> * Warning: this class does not implement <code>hashCode()</code> and * <code>equals()</code> - it just uses the ones it inherits from <code>Object</code>. * This means that an <code>AnnotationProxy</code> does <i>not</i> follow the @@ -28,10 +28,10 @@ * methods. That's why you should never mix <code>AnnotationProxies</code> * with "real" annotations. For example, don't put them into the same * <code>Collection</code>. - * - * @see java.lang.annotation.Annotation + * * @author Paolo Perrotta * @author Davide Marchignoli + * @see java.lang.annotation.Annotation */ public class AnnotationProxy implements Annotation, InvocationHandler { @@ -43,30 +43,35 @@ public AnnotationProxy(AnnotationDescriptor descriptor) { this.annotationType = descriptor.type(); - values = getAnnotationValues(descriptor); + values = getAnnotationValues( descriptor ); } private Map<Method, Object> getAnnotationValues(AnnotationDescriptor descriptor) { Map<Method, Object> result = new HashMap<Method, Object>(); int processedValuesFromDescriptor = 0; - for (Method m : annotationType.getDeclaredMethods()) { - if (descriptor.containsElement(m.getName())) { - result.put(m, descriptor.valueOf(m.getName())); + for ( Method m : annotationType.getDeclaredMethods() ) { + if ( descriptor.containsElement( m.getName() ) ) { + result.put( m, descriptor.valueOf( m.getName() ) ); processedValuesFromDescriptor++; - } else if (m.getDefaultValue() != null) - result.put(m, m.getDefaultValue()); - else - throw new IllegalArgumentException("No value provided for " + m.getName()); + } + else if ( m.getDefaultValue() != null ) { + result.put( m, m.getDefaultValue() ); + } + else { + throw new IllegalArgumentException( "No value provided for " + m.getName() ); + } } - if (processedValuesFromDescriptor != descriptor.numberOfElements()) - throw new RuntimeException("Trying to instanciate " + annotationType + " with unknown elements"); + if ( processedValuesFromDescriptor != descriptor.numberOfElements() ) { + throw new RuntimeException( "Trying to instanciate " + annotationType + " with unknown elements" ); + } return result; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - if(values.containsKey(method)) - return values.get(method); - return method.invoke(this, args); + if ( values.containsKey( method ) ) { + return values.get( method ); + } + return method.invoke( this, args ); } public Class<? extends Annotation> annotationType() { @@ -75,14 +80,14 @@ public String toString() { StringBuilder result = new StringBuilder(); - result.append('@').append( annotationType().getName() ).append('('); - for(Method m : getRegisteredMethodsInAlphabeticalOrder()) { - result.append( m.getName() ).append('=').append( values.get(m) ).append(", "); + result.append( '@' ).append( annotationType().getName() ).append( '(' ); + for ( Method m : getRegisteredMethodsInAlphabeticalOrder() ) { + result.append( m.getName() ).append( '=' ).append( values.get( m ) ).append( ", " ); } // remove last separator: - if (values.size() > 0) { + if ( values.size() > 0 ) { result.delete( result.length() - 2, result.length() ); - result.append(")"); + result.append( ")" ); } else { result.delete( result.length() - 1, result.length() ); @@ -92,13 +97,15 @@ } private SortedSet<Method> getRegisteredMethodsInAlphabeticalOrder() { - SortedSet<Method> result = new TreeSet<Method>(new Comparator<Method>() { - public int compare(Method o1, Method o2) { - return o1.getName().compareTo(o2.getName()); - } - }); + SortedSet<Method> result = new TreeSet<Method>( + new Comparator<Method>() { + public int compare(Method o1, Method o2) { + return o1.getName().compareTo( o2.getName() ); + } + } + ); //List<Method> result = new LinkedList<Method>(); - result.addAll(values.keySet()); + result.addAll( values.keySet() ); return result; } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/AccessType.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/AccessType.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/AccessType.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -1,18 +1,18 @@ //$Id$ package org.hibernate.annotations; -import java.lang.annotation.Target; +import static java.lang.annotation.ElementType.*; import java.lang.annotation.Retention; import static java.lang.annotation.RetentionPolicy.RUNTIME; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; +import java.lang.annotation.Target; /** * Property Access type + * * @author Emmanuel Bernard */ -@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) +@Target({TYPE, METHOD, FIELD}) +@Retention(RUNTIME) public @interface AccessType { String value(); } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/BatchSize.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/BatchSize.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/BatchSize.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -1,21 +1,18 @@ //$Id$ package org.hibernate.annotations; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; - +import static java.lang.annotation.ElementType.*; +import java.lang.annotation.Retention; import static java.lang.annotation.RetentionPolicy.RUNTIME; - import java.lang.annotation.Target; -import java.lang.annotation.Retention; /** * Batch size for SQL loading * * @author Emmanuel Bernard */ -@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) +@Target({TYPE, METHOD, FIELD}) +@Retention(RUNTIME) public @interface BatchSize { /** Strictly positive integer */ int size(); Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Cache.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Cache.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Cache.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -1,22 +1,18 @@ //$Id$ package org.hibernate.annotations; -import static java.lang.annotation.ElementType.TYPE; - -import static java.lang.annotation.ElementType.METHOD; - -import static java.lang.annotation.ElementType.FIELD; - +import static java.lang.annotation.ElementType.*; +import java.lang.annotation.Retention; import static java.lang.annotation.RetentionPolicy.RUNTIME; - import java.lang.annotation.Target; -import java.lang.annotation.Retention; /** * Add caching strategy to a root entity or a collection + * * @author Emmanuel Bernard */ -@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) +@Target({TYPE, METHOD, FIELD}) +@Retention(RUNTIME) public @interface Cache { /** concurrency strategy chosen */ CacheConcurrencyStrategy usage(); Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -3,6 +3,7 @@ /** * Cache concurrency strategy + * * @author Emmanuel Bernard */ public enum CacheConcurrencyStrategy { Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/CacheModeType.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/CacheModeType.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/CacheModeType.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -1,16 +1,17 @@ package org.hibernate.annotations; /** -* Enumeration for the different interaction modes between the session and -* the Level 2 Cache. -* @author Emmanuel Bernard -* @author Carlos Gonzz-Cadenas -*/ + * Enumeration for the different interaction modes between the session and + * the Level 2 Cache. + * + * @author Emmanuel Bernard + * @author Carlos Gonzz-Cadenas + */ public enum CacheModeType { -GET, -IGNORE, -NORMAL, -PUT, -REFRESH + GET, + IGNORE, + NORMAL, + PUT, + REFRESH } \ No newline at end of file Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Cascade.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Cascade.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Cascade.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -1,16 +1,16 @@ package org.hibernate.annotations; +import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; +import java.lang.annotation.Retention; import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Retention; import java.lang.annotation.Target; /** * Apply a cascade strategy on an association */ -@Target({METHOD, FIELD}) @Retention(RUNTIME) +@Target({METHOD, FIELD}) +@Retention(RUNTIME) public @interface Cascade { CascadeType[] value(); } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Check.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Check.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Check.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -1,19 +1,19 @@ //$Id$ package org.hibernate.annotations; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.*; +import java.lang.annotation.Retention; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Target; -import java.lang.annotation.Retention; /** * Arbitrary SQL check constraints which can be defined at the class, * property or collection level + * * @author Emmanuel Bernard */ -@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) +@Target({TYPE, METHOD, FIELD}) +@Retention(RUNTIME) public @interface Check { String constraints(); } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/CollectionOfElements.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/CollectionOfElements.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/CollectionOfElements.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -1,25 +1,28 @@ //$Id$ package org.hibernate.annotations; -import java.lang.annotation.Target; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import java.lang.annotation.Retention; import static java.lang.annotation.RetentionPolicy.RUNTIME; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; +import java.lang.annotation.Target; +import javax.persistence.FetchType; import static javax.persistence.FetchType.LAZY; -import javax.persistence.FetchType; /** * Annotation used to mark a collection as a collection of elements or * a collection of embedded objects + * * @author Emmanuel Bernard */ -@Target({METHOD, FIELD}) @Retention(RUNTIME) +@Target({METHOD, FIELD}) +@Retention(RUNTIME) public @interface CollectionOfElements { /** * Represent the element class in the collection * Only useful if the collection does not use generics */ Class targetElement() default void.class; + FetchType fetch() default LAZY; } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Columns.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Columns.java 2006-04-26 06:24:20 UTC (rev 9794) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/Columns.java 2006-04-26 06:41:18 UTC (rev 9795) @@ -1,18 +1,20 @@ //$Id$ package org.hibernate.annotations; +import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; +import java.lang.annotation.Retention; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Target; -import java.lang.annotation.Retention; import javax.persistence.Column; /** * Support an array of columns. Useful for component user types mappings + * * @author Emmanuel Bernard */ -@Target({METHOD, FIELD... [truncated message content] |
Author: epbernard Date: 2006-04-26 02:24:20 -0400 (Wed, 26 Apr 2006) New Revision: 9794 Added: trunk/HibernateExt/ejb/src/test-resources/defaultpar/META-INF/orm.xml trunk/HibernateExt/ejb/src/test-resources/explicitpar/orm2.xml trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Light.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm.xml trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm2.xml Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernatePersistence.java trunk/HibernateExt/ejb/src/resources/org/hibernate/ejb/persistence_1_0.xsd trunk/HibernateExt/ejb/src/test-resources/defaultpar/META-INF/persistence.xml trunk/HibernateExt/ejb/src/test-resources/explicitpar/META-INF/persistence.xml trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java Log: EJB-164 Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-04-26 06:24:20 UTC (rev 9794) @@ -104,7 +104,6 @@ private EntityManagerFactory createFactory(PersistenceMetadata metadata, Map overrides) { log.debug( "Creating Factory: " + metadata.getName() ); - if ( metadata.getMappingFiles().size() > 0 ) throw new RuntimeException( "<mapping-file not supported yet" ); if ( StringHelper.isNotEmpty( metadata.getJtaDatasource() ) ) { this.setProperty( Environment.DATASOURCE, metadata.getJtaDatasource() ); } @@ -121,6 +120,9 @@ if ( metadata.getPackages().size() > 0 ) { workingVars.put( HibernatePersistence.PACKAGE_NAMES, metadata.getPackages() ); } + if ( metadata.getMappingFiles().size() > 0 ) { + workingVars.put( HibernatePersistence.XML_FILE_NAMES, metadata.getMappingFiles() ); + } if ( metadata.getHbmfiles().size() > 0 ) { workingVars.put( HibernatePersistence.HBXML_FILES, metadata.getHbmfiles() ); } @@ -254,6 +256,8 @@ if ( info.getManagedClassNames() != null ) entities.addAll( info.getManagedClassNames() ); List<InputStream> hbmFiles = new ArrayList<InputStream>(); List<String> packages = new ArrayList<String>(); + List<String> xmlFiles = new ArrayList<String>( 50 ); + if ( info.getMappingFileNames() != null ) xmlFiles.addAll( info.getMappingFileNames() ); // Object overridenTxType = integration.get( HibernatePersistence.TRANSACTION_TYPE ); // if (overridenTxType != null) { // defineTransactionType( overridenTxType, info.getPersistenceUnitName() ); @@ -284,6 +288,7 @@ workingVars.put( HibernatePersistence.CLASS_NAMES, entities ); workingVars.put( HibernatePersistence.PACKAGE_NAMES, packages ); + workingVars.put( HibernatePersistence.XML_FILE_NAMES, xmlFiles ); if ( hbmFiles.size() > 0 ) workingVars.put( HibernatePersistence.HBXML_FILES, hbmFiles ); //datasources @@ -366,7 +371,7 @@ private JarVisitor.Filter[] getFilters(Properties properties, Map overridenProperties) { boolean[] result = getDetectedArtifacts( properties, overridenProperties ); - int size = ( result[0] ? 2 : 0 ) + ( result[1] ? 1 : 0 ); + int size = ( result[0] ? 2 : 0 ) + 1; //( result[1] ? 1 : 0 ); JarVisitor.Filter[] filters = new JarVisitor.Filter[size]; if ( result[0] ) { filters[0] = new JarVisitor.PackageFilter( false, null ) { @@ -388,10 +393,17 @@ if ( result[1] ) { filters[size - 1] = new JarVisitor.FileFilter( true ) { public boolean accept(String javaElementName) { - return javaElementName.endsWith( "hbm.xml" ); + return javaElementName.endsWith( "hbm.xml" ) || javaElementName.endsWith("META-INF/orm.xml"); } }; } + else { + filters[size - 1] = new JarVisitor.FileFilter( true ) { + public boolean accept(String javaElementName) { + return javaElementName.endsWith( "META-INF/orm.xml" ); + } + }; + } return filters; } @@ -651,10 +663,17 @@ HibernatePersistence.PACKAGE_NAMES ); for ( String pkg : packages ) { - //FIXME classloader cfg.addPackage( pkg ); } } + if ( workingVars.containsKey( HibernatePersistence.XML_FILE_NAMES ) ) { + Collection<String> xmlFiles = (Collection<String>) workingVars.get( + HibernatePersistence.XML_FILE_NAMES + ); + for ( String xmlFile : xmlFiles ) { + cfg.addResource( xmlFile ); + } + } if ( workingVars.containsKey( HibernatePersistence.HBXML_FILES ) ) { Collection<InputStream> hbmXmlFiles = (Collection<InputStream>) workingVars.get( HibernatePersistence.HBXML_FILES @@ -927,4 +946,19 @@ //TODO make it really read only (maybe through proxying) return cfg; } + + public Ejb3Configuration addInputStream(InputStream xmlInputStream) throws MappingException { + cfg.addInputStream( xmlInputStream ); + return this; + } + + public Ejb3Configuration addResource(String path) throws MappingException { + cfg.addResource( path ); + return this; + } + + public Ejb3Configuration addResource(String path, ClassLoader classLoader) throws MappingException { + cfg.addResource( path, classLoader ); + return this; + } } Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernatePersistence.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernatePersistence.java 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/HibernatePersistence.java 2006-04-26 06:24:20 UTC (rev 9794) @@ -35,7 +35,7 @@ public static final String AUTODETECTION = "hibernate.archive.autodetection"; /** * List of classes names - * Don't use it + * Internal use only */ public static final String CLASS_NAMES = "hibernate.ejb.classes"; /** @@ -44,6 +44,11 @@ */ public static final String PACKAGE_NAMES = "hibernate.ejb.packages"; /** + * List of classes names + * Internal use only + */ + public static final String XML_FILE_NAMES = "hibernate.ejb.xml_files"; + /** * cfg.xml configuration file used */ public static final String CFG_FILE = "hibernate.ejb.cfgfile"; @@ -95,7 +100,6 @@ public static final String PERSISTENCE_UNIT_NAME = "hibernate.ejb.persistenceUnitName"; - /** * Get an entity manager factory by its entity manager name and given the * appropriate extra properties. Those proeprties override the one get through Modified: trunk/HibernateExt/ejb/src/resources/org/hibernate/ejb/persistence_1_0.xsd =================================================================== --- trunk/HibernateExt/ejb/src/resources/org/hibernate/ejb/persistence_1_0.xsd 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/resources/org/hibernate/ejb/persistence_1_0.xsd 2006-04-26 06:24:20 UTC (rev 9794) @@ -1,195 +1,260 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- persistence.xml schema --> -<xsd:schema targetNamespace="http://java.sun.com/xml/ns/persistence" - xmlns:xsd="http://www.w3.org/2001/XMLSchema" - xmlns:persistence="http://java.sun.com/xml/ns/persistence" - elementFormDefault="qualified" - attributeFormDefault="unqualified" - version="1.0"> +<xsd:schema targetNamespace="http://java.sun.com/xml/ns/persistence" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:persistence="http://java.sun.com/xml/ns/persistence" + elementFormDefault="qualified" + attributeFormDefault="unqualified" + version="1.0"> + + <xsd:annotation> + <xsd:documentation> + @(#)persistence_1_0.xsd 1.0 Feb 9 2006 + </xsd:documentation> + </xsd:annotation> + <xsd:annotation> + <xsd:documentation><![CDATA[ + + This is the XML Schema for the persistence configuration file. + The file must be named "META-INF/persistence.xml" in the + persistence archive. + Persistence configuration files must indicate + the persistence schema by using the persistence namespace: + + http://java.sun.com/xml/ns/persistence + + and indicate the version of the schema by + using the version element as shown below: + + <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_1_0.xsd" + version="1.0"> + ... + </persistence> + + ]]></xsd:documentation> + </xsd:annotation> + + <xsd:simpleType name="versionType"> + <xsd:restriction base="xsd:token"> + <xsd:pattern value="[0-9]+(\.[0-9]+)*"/> + </xsd:restriction> + </xsd:simpleType> + + <!-- **************************************************** --> + + <xsd:element name="persistence"> + <xsd:complexType> + <xsd:sequence> + + <!-- **************************************************** --> + + <xsd:element name="persistence-unit" + minOccurs="0" maxOccurs="unbounded"> + <xsd:complexType> + <xsd:annotation> + <xsd:documentation> + + Configuration of a persistence unit. + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + + <!-- **************************************************** --> + + <xsd:element name="description" type="xsd:string" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + Textual description of this persistence unit. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + + <!-- **************************************************** --> + + <xsd:element name="provider" type="xsd:string" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + Provider class that supplies EntityManagers for this + persistence unit. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + + <!-- **************************************************** --> + + <xsd:element name="jta-data-source" type="xsd:string" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + The container-specific name of the JTA datasource to use. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + + <!-- **************************************************** --> + + <xsd:element name="non-jta-data-source" type="xsd:string" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + The container-specific name of a non-JTA datasource to use. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + + <!-- **************************************************** --> + + <xsd:element name="mapping-file" type="xsd:string" + minOccurs="0" maxOccurs="unbounded"> + <xsd:annotation> + <xsd:documentation> + + File containing mapping information. Loaded as a resource + by the persistence provider. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + + <!-- **************************************************** --> + + <xsd:element name="jar-file" type="xsd:string" + minOccurs="0" maxOccurs="unbounded"> + <xsd:annotation> + <xsd:documentation> + + Jar file that should be scanned for entities. + Not applicable to Java SE persistence units. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + + <!-- **************************************************** --> + + <xsd:element name="class" type="xsd:string" + minOccurs="0" maxOccurs="unbounded"> + <xsd:annotation> + <xsd:documentation> + + Class to scan for annotations. It should be annotated + with either @Entity, @Embeddable or @MappedSuperclass. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + + <!-- **************************************************** --> + + <xsd:element name="exclude-unlisted-classes" type="xsd:boolean" + default="false" minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + When set to true then only listed classes and jars will + be scanned for persistent classes, otherwise the enclosing + jar or directory will also be scanned. Not applicable to + Java SE persistence units. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + + <!-- **************************************************** --> + + <xsd:element name="properties" minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + A list of vendor-specific properties. + + </xsd:documentation> + </xsd:annotation> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="property" + minOccurs="0" maxOccurs="unbounded"> + <xsd:annotation> + <xsd:documentation> + A name-value pair. + </xsd:documentation> + </xsd:annotation> + <xsd:complexType> + <xsd:attribute name="name" type="xsd:string" + use="required"/> + <xsd:attribute name="value" type="xsd:string" + use="required"/> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + </xsd:sequence> + + <!-- **************************************************** --> + + <xsd:attribute name="name" type="xsd:string" use="required"> + <xsd:annotation> + <xsd:documentation> + + Name used in code to reference this persistence unit. + + </xsd:documentation> + </xsd:annotation> + </xsd:attribute> + + <!-- **************************************************** --> + + <xsd:attribute name="transaction-type" + type="persistence:persistence-unit-transaction-type"> + <xsd:annotation> + <xsd:documentation> + + Type of transactions used by EntityManagers from this + persistence unit. + + </xsd:documentation> + </xsd:annotation> + </xsd:attribute> + + </xsd:complexType> + </xsd:element> + </xsd:sequence> + <xsd:attribute name="version" type="persistence:versionType" + fixed="1.0" use="required"/> + </xsd:complexType> + </xsd:element> + + <!-- **************************************************** --> + + <xsd:simpleType name="persistence-unit-transaction-type"> <xsd:annotation> - <xsd:documentation> - @(#)persistence_1_0.xsd 1.0 Feb 9 2006 - </xsd:documentation> + <xsd:documentation> + + public enum TransactionType { JTA, RESOURCE_LOCAL }; + + </xsd:documentation> </xsd:annotation> - <xsd:annotation> - <xsd:documentation><![CDATA[ -This is the XML Schema for the persistence configuration file. -The file must be named "META-INF/persistence.xml" in the -persistence archive. -Persistence configuration files must indicate -the persistence schema by using the persistence namespace: -http://java.sun.com/xml/ns/persistence -and indicate the version of the schema by -using the version element as shown below: -<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_1_0.xsd" -version="1.0"> -... -</persistence> -]]></xsd:documentation> - </xsd:annotation> - <xsd:simpleType name="versionType"> - <xsd:restriction base="xsd:token"> - <xsd:pattern value="[0-9]+(\.[0-9]+)*"/> - </xsd:restriction> - </xsd:simpleType> - <!-- **************************************************** --> - <xsd:element name="persistence"> - <xsd:complexType> - <xsd:sequence> - <!-- **************************************************** --> - <xsd:element name="persistence-unit" - minOccurs="0" maxOccurs="unbounded"> - <xsd:complexType> - <xsd:annotation> - <xsd:documentation> - Configuration of a persistence unit. - </xsd:documentation> - </xsd:annotation> - <xsd:sequence> - <!-- **************************************************** --> - <xsd:element name="description" type="xsd:string" - minOccurs="0"> - <xsd:annotation> - <xsd:documentation> - Textual description of this persistence unit. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <!-- **************************************************** --> - <xsd:element name="provider" type="xsd:string" - minOccurs="0"> - <xsd:annotation> - <xsd:documentation> - Provider class that supplies EntityManagers for this - persistence unit. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <!-- **************************************************** --> - <xsd:element name="jta-data-source" type="xsd:string" - minOccurs="0"> - <xsd:annotation> - <xsd:documentation> - The container-specific name of the JTA datasource to use. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <!-- **************************************************** --> - <xsd:element name="non-jta-data-source" type="xsd:string" - minOccurs="0"> - <xsd:annotation> - <xsd:documentation> - The container-specific name of a non-JTA datasource to use. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <!-- **************************************************** --> - <xsd:element name="mapping-file" type="xsd:string" - minOccurs="0" maxOccurs="unbounded"> - <xsd:annotation> - <xsd:documentation> - File containing mapping information. Loaded as a resource - by the persistence provider. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <!-- **************************************************** --> - <xsd:element name="jar-file" type="xsd:string" - minOccurs="0" maxOccurs="unbounded"> - <xsd:annotation> - <xsd:documentation> - Jar file that should be scanned for entities. - Not applicable to Java SE persistence units. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <!-- **************************************************** --> - <xsd:element name="class" type="xsd:string" - minOccurs="0" maxOccurs="unbounded"> - <xsd:annotation> - <xsd:documentation> - Class to scan for annotations. It should be annotated - with either @Entity, @Embeddable or @MappedSuperclass. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <!-- **************************************************** --> - <xsd:element name="exclude-unlisted-classes" type="xsd:boolean" - default="false" minOccurs="0"> - <xsd:annotation> - <xsd:documentation> - When set to true then only listed classes and jars will - be scanned for persistent classes, otherwise the enclosing - jar or directory will also be scanned. Not applicable to - Java SE persistence units. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <!-- **************************************************** --> - <xsd:element name="properties" minOccurs="0"> - <xsd:annotation> - <xsd:documentation> - A list of vendor-specific properties. - </xsd:documentation> - </xsd:annotation> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="property" - minOccurs="0" maxOccurs="unbounded"> - <xsd:annotation> - <xsd:documentation> - A name-value pair. - </xsd:documentation> - </xsd:annotation> - <xsd:complexType> - <xsd:attribute name="name" type="xsd:string" - use="required"/> - <xsd:attribute name="value" type="xsd:string" - use="required"/> - </xsd:complexType> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - </xsd:element> - </xsd:sequence> - <!-- **************************************************** --> - <xsd:attribute name="name" type="xsd:string" use="required"> - <xsd:annotation> - <xsd:documentation> - Name used in code to reference this persistence unit. - </xsd:documentation> - </xsd:annotation> - </xsd:attribute> - <!-- **************************************************** --> - <xsd:attribute name="transaction-type" - type="persistence:persistence-unit-transaction-type"> - <xsd:annotation> - <xsd:documentation> - Type of transactions used by EntityManagers from this - persistence unit. - </xsd:documentation> - </xsd:annotation> - </xsd:attribute> - </xsd:complexType> - </xsd:element> - </xsd:sequence> - <xsd:attribute name="version" type="persistence:versionType" - fixed="1.0" use="required"/> - </xsd:complexType> - </xsd:element> - <!-- **************************************************** --> - <xsd:simpleType name="persistence-unit-transaction-type"> - <xsd:annotation> - <xsd:documentation> - public enum TransactionType { JTA, RESOURCE_LOCAL }; - </xsd:documentation> - </xsd:annotation> - <xsd:restriction base="xsd:token"> - <xsd:enumeration value="JTA"/> - <xsd:enumeration value="RESOURCE_LOCAL"/> - </xsd:restriction> - </xsd:simpleType> -</xsd:schema> \ No newline at end of file + <xsd:restriction base="xsd:token"> + <xsd:enumeration value="JTA"/> + <xsd:enumeration value="RESOURCE_LOCAL"/> + </xsd:restriction> + </xsd:simpleType> + +</xsd:schema> + Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java 2006-04-26 06:24:20 UTC (rev 9794) @@ -12,6 +12,7 @@ import org.hibernate.ejb.test.pack.defaultpar.ApplicationServer; import org.hibernate.ejb.test.pack.defaultpar.Mouse; import org.hibernate.ejb.test.pack.defaultpar.Version; +import org.hibernate.ejb.test.pack.defaultpar.Lighter; import org.hibernate.ejb.test.pack.excludehbmpar.Caipirinha; import org.hibernate.ejb.test.pack.explodedpar.Carpet; import org.hibernate.ejb.test.pack.explodedpar.Elephant; @@ -50,6 +51,12 @@ em.persist( as ); em.persist( mouse ); assertEquals( 1, em.createNamedQuery( "allMouse" ).getResultList().size() ); + Lighter lighter = new Lighter(); + lighter.name = "main"; + lighter.power = " 250 W"; + em.persist( lighter ); + em.flush(); + em.remove( lighter ); em.remove(mouse); assertNotNull( as.getId() ); em.remove(as); Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java 2006-04-26 06:24:20 UTC (rev 9794) @@ -11,7 +11,7 @@ */ public class DataSourceInjectionTest extends TestCase { public void testDatasourceInjection() { - PersistenceUnitInfoImpl info = new PersistenceUnitInfoImpl(); + PersistenceUnitInfoImpl info = new PersistenceUnitInfoImpl( new String[] {} ); try { EntityManagerFactory emf = ( new HibernatePersistence() ).createContainerEntityManagerFactory( info, null ); fail("FakeDatasource should have been used"); Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java 2006-04-26 06:24:20 UTC (rev 9794) @@ -14,13 +14,23 @@ import org.hibernate.ejb.HibernatePersistence; import org.hibernate.ejb.test.Distributor; import org.hibernate.ejb.test.Item; +import org.hibernate.ejb.test.xml.Light; +import org.hibernate.ejb.test.xml.Lighter; /** * @author Emmanuel Bernard */ public class PersistenceUnitInfoImpl implements PersistenceUnitInfo { private Properties properties = new Properties(); + private List<String> mappingFiles; + public PersistenceUnitInfoImpl(String[] mappingFiles) { + this.mappingFiles = new ArrayList<String>(mappingFiles.length); + for(String mappingFile : mappingFiles) { + this.mappingFiles.add(mappingFile); + } + } + public String getPersistenceUnitName() { return "persistenceinfo"; } @@ -38,7 +48,7 @@ } public List<String> getMappingFileNames() { - return new ArrayList<String>(); + return mappingFiles; } public List<URL> getJarFileUrls() { @@ -49,6 +59,8 @@ List<String> classes = new ArrayList<String>(); classes.add( Item.class.getName() ); classes.add( Distributor.class.getName() ); + classes.add( Light.class.getName() ); + classes.add( Lighter.class.getName() ); return classes; } Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java 2006-04-26 06:24:20 UTC (rev 9794) @@ -0,0 +1,10 @@ +//$Id: $ +package org.hibernate.ejb.test.pack.defaultpar; + +/** + * @author Emmanuel Bernard + */ +public class Lighter { + public String name; + public String power; +} Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java 2006-04-26 06:24:20 UTC (rev 9794) @@ -5,6 +5,7 @@ import java.net.URL; import java.net.URLConnection; import java.io.IOException; +import java.io.InputStream; import javax.persistence.Embeddable; import javax.persistence.MappedSuperclass; import javax.persistence.Entity; @@ -51,6 +52,7 @@ entry = new JarVisitor.Entry(org.hibernate.ejb.test.pack.defaultpar.Version.class.getName(), null); assertTrue( entries.contains( entry ) ); assertNull( ( (JarVisitor.Entry) entries.iterator().next() ).getInputStream() ); + assertEquals( 2, jarVisitor.getMatchingEntries()[2].size() ); // Set<String> classes = jarVisitor.getClassNames(); // assertEquals( 3, classes.size() ); @@ -80,6 +82,44 @@ // assertTrue( classes.contains( Carpet.class.getName() ) ); } + public void testDuplicateFilterExplodedJar() throws Exception { + String jarFileName = "./build/testresources/explodedpar.par"; + //JarVisitor jarVisitor = new ExplodedJarVisitor( jarFileName, true, true ); + JarVisitor.Filter[] filters = getFilters(); + JarVisitor.Filter[] dupeFilters = new JarVisitor.Filter[filters.length * 2]; + int index = 0; + for (JarVisitor.Filter filter : filters) { + dupeFilters[index++] = filter; + } + filters = getFilters(); + for (JarVisitor.Filter filter : filters) { + dupeFilters[index++] = filter; + } + JarVisitor jarVisitor = new ExplodedJarVisitor( jarFileName, filters ); + assertEquals( "explodedpar", jarVisitor.getUnqualifiedJarName() ); + Set[] entries = jarVisitor.getMatchingEntries(); + assertEquals( 1, entries[1].size() ); + assertEquals( 1, entries[0].size() ); + assertEquals( 1, entries[2].size() ); + for (JarVisitor.Entry entry : (Set<JarVisitor.Entry>) entries[2]) { + InputStream is = entry.getInputStream(); + if (is != null) { + assertTrue( 0 < is.available() ); + is.close(); + } + } + for (JarVisitor.Entry entry : (Set<JarVisitor.Entry>) entries[5]) { + InputStream is = entry.getInputStream(); + if (is != null) { + assertTrue( 0 < is.available() ); + is.close(); + } + } + + JarVisitor.Entry entry = new JarVisitor.Entry(Carpet.class.getName(), null); + assertTrue( entries[1].contains( entry ) ); + } + private JarVisitor.Filter[] getFilters() { return new JarVisitor.Filter[] { new JarVisitor.PackageFilter(false, null) { @@ -97,7 +137,7 @@ }, new JarVisitor.FileFilter(true) { public boolean accept(String javaElementName) { - return javaElementName.endsWith( "hbm.xml" ); + return javaElementName.endsWith( "hbm.xml" ) || javaElementName.endsWith( "META-INF/orm.xml"); } } }; Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Light.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Light.java 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Light.java 2006-04-26 06:24:20 UTC (rev 9794) @@ -0,0 +1,10 @@ +//$Id: $ +package org.hibernate.ejb.test.xml; + +/** + * @author Emmanuel Bernard + */ +public class Light { + public String name; + public String power; +} Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java 2006-04-26 06:24:20 UTC (rev 9794) @@ -0,0 +1,27 @@ +//$Id: $ +package org.hibernate.ejb.test.xml; + +import javax.persistence.EntityManagerFactory; + +import org.hibernate.ejb.test.connection.PersistenceUnitInfoImpl; +import org.hibernate.ejb.test.connection.FakeDataSourceException; +import org.hibernate.ejb.HibernatePersistence; +import junit.framework.TestCase; + +/** + * @author Emmanuel Bernard + */ +public class XmlTest extends TestCase { + public void testPersistenceInfo() throws Exception { + PersistenceUnitInfoImpl info = new PersistenceUnitInfoImpl( new String[] { + "org/hibernate/ejb/test/xml/orm.xml", + "org/hibernate/ejb/test/xml/orm2.xml" + } ); + try { + EntityManagerFactory emf = ( new HibernatePersistence() ).createContainerEntityManagerFactory( info, null ); + fail("FakeDatasource should have been used"); + } catch (FakeDataSourceException fde) { + //success + } + } +} Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm.xml =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm.xml 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm.xml 2006-04-26 06:24:20 UTC (rev 9794) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd" + version="1.0" +> + <package>org.hibernate.ejb.test.xml</package> + <entity class="Light" metadata-complete="true" access="FIELD"> + <attributes> + <id name="name"> + <column name="fld_id"/> + </id> + <basic name="power"></basic> + </attributes> + </entity> +</entity-mappings> \ No newline at end of file Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm2.xml =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm2.xml 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm2.xml 2006-04-26 06:24:20 UTC (rev 9794) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + 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> + <entity class="Lighter" access="FIELD" metadata-complete="true"> + <attributes> + <id name="name"> + <column name="fld_id"/> + </id> + <basic name="power"></basic> + </attributes> + </entity> +</entity-mappings> \ No newline at end of file Added: trunk/HibernateExt/ejb/src/test-resources/defaultpar/META-INF/orm.xml =================================================================== --- trunk/HibernateExt/ejb/src/test-resources/defaultpar/META-INF/orm.xml 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test-resources/defaultpar/META-INF/orm.xml 2006-04-26 06:24:20 UTC (rev 9794) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + 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> + <entity class="Lighter" access="FIELD" metadata-complete="true"> + <attributes> + <id name="name"> + <column name="fld_id"/> + </id> + <basic name="power"></basic> + </attributes> + </entity> +</entity-mappings> \ No newline at end of file Modified: trunk/HibernateExt/ejb/src/test-resources/defaultpar/META-INF/persistence.xml =================================================================== --- trunk/HibernateExt/ejb/src/test-resources/defaultpar/META-INF/persistence.xml 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test-resources/defaultpar/META-INF/persistence.xml 2006-04-26 06:24:20 UTC (rev 9794) @@ -5,6 +5,7 @@ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="defaultpar" transaction-type="RESOURCE_LOCAL"> + <class>org.hibernate.ejb.test.pack.defaultpar.Lighter</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> Modified: trunk/HibernateExt/ejb/src/test-resources/explicitpar/META-INF/persistence.xml =================================================================== --- trunk/HibernateExt/ejb/src/test-resources/explicitpar/META-INF/persistence.xml 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test-resources/explicitpar/META-INF/persistence.xml 2006-04-26 06:24:20 UTC (rev 9794) @@ -4,11 +4,13 @@ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL"> + <mapping-file>orm2.xml</mapping-file> <jar-file>./build/testresources/externaljar.jar</jar-file> <class>org.hibernate.ejb.test.Cat</class> <class>org.hibernate.ejb.test.Distributor</class> <class>org.hibernate.ejb.test.Item</class> <class>org.hibernate.ejb.test</class> + <class>org.hibernate.ejb.test.xml.Light</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> Added: trunk/HibernateExt/ejb/src/test-resources/explicitpar/orm2.xml =================================================================== --- trunk/HibernateExt/ejb/src/test-resources/explicitpar/orm2.xml 2006-04-26 06:20:18 UTC (rev 9793) +++ trunk/HibernateExt/ejb/src/test-resources/explicitpar/orm2.xml 2006-04-26 06:24:20 UTC (rev 9794) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd" + version="1.0" +> + <package>org.hibernate.test.annotations.xml.ejb3</package> + <entity class="Light" access="FIELD" metadata-complete="true"> + <attributes> + <id name="name"> + <column name="fld_id"/> + </id> + <basic name="power"></basic> + </attributes> + </entity> +</entity-mappings> \ No newline at end of file |
Author: epbernard Date: 2006-04-26 02:20:18 -0400 (Wed, 26 Apr 2006) New Revision: 9793 Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/CarModel.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/Light.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Lighter.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Model.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java Removed: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/mixed/ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/MixedTest.java Modified: trunk/HibernateExt/metadata/build.xml trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXAnnotatedElement.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXFactory.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/ClassValidator.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/TestCase.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/Government.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaReflectionManagerTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaXClassTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaXPropertyTest.java Log: ANN-322 Modified: trunk/HibernateExt/metadata/build.xml =================================================================== --- trunk/HibernateExt/metadata/build.xml 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/build.xml 2006-04-26 06:20:18 UTC (rev 9793) @@ -43,6 +43,7 @@ <copy todir="${classes.dir}"> <fileset dir="${src.dir}"> <include name="**/resources/*.properties"/> + <include name="**/*.xsd"/> </fileset> </copy> </target> Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -3,17 +3,16 @@ import java.util.HashMap; import java.util.Map; +import javax.persistence.AssociationOverride; +import javax.persistence.AssociationOverrides; import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.Column; import javax.persistence.Embeddable; import javax.persistence.Entity; +import javax.persistence.JoinColumn; import javax.persistence.MappedSuperclass; -import javax.persistence.JoinColumn; -import javax.persistence.AssociationOverride; -import javax.persistence.AssociationOverrides; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; import org.hibernate.reflection.XClass; import org.hibernate.reflection.XProperty; @@ -29,10 +28,12 @@ private Map<String, JoinColumn[]> holderJoinColumnOverride; private Map<String, JoinColumn[]> currentPropertyJoinColumnOverride; private String path; + private ExtendedMappings mappings; - public AbstractPropertyHolder(String path, PropertyHolder parent, XClass clazzToProcess) { + public AbstractPropertyHolder(String path, PropertyHolder parent, XClass clazzToProcess, ExtendedMappings mappings) { this.path = path; this.parent = parent; + this.mappings = mappings; buildHierarchyColumnOverride( clazzToProcess ); } @@ -104,7 +105,7 @@ XClass current = element; Map<String, Column[]> columnOverride = new HashMap<String, Column[]>(); Map<String, JoinColumn[]> joinColumnOverride = new HashMap<String, JoinColumn[]>(); - while ( current != null && ! ReflectionManager.INSTANCE.toXClass( Object.class ).equals( current ) ) { + while ( current != null && ! mappings.getReflectionManager().toXClass( Object.class ).equals( current ) ) { if ( current.isAnnotationPresent( Entity.class) || current.isAnnotationPresent( MappedSuperclass.class) || current.isAnnotationPresent( Embeddable.class) ) { //FIXME is embeddable override? Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -111,11 +111,11 @@ import org.hibernate.persister.entity.JoinedSubclassEntityPersister; import org.hibernate.persister.entity.SingleTableEntityPersister; import org.hibernate.persister.entity.UnionSubclassEntityPersister; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; import org.hibernate.reflection.XClass; import org.hibernate.reflection.XPackage; import org.hibernate.reflection.XProperty; +import org.hibernate.reflection.ReflectionManager; import org.hibernate.type.ForeignKeyDirection; import org.hibernate.type.TypeFactory; import org.hibernate.util.StringHelper; @@ -155,7 +155,7 @@ public static void bindPackage(String packageName, ExtendedMappings mappings) { XPackage pckg = null; try { - pckg = ReflectionManager.INSTANCE.packageForName( packageName ); + pckg = mappings.getReflectionManager().packageForName( packageName ); } catch (ClassNotFoundException cnf) { log.warn( "Package not found or wo package-info.java: " + packageName ); @@ -336,7 +336,7 @@ XAnnotatedElement annotatedClass = clazzToProcess; if ( log.isInfoEnabled() ) log.info("Binding entity from annotated class: " + clazzToProcess.getName() ); InheritanceState superEntityState = - InheritanceState.getSuperEntityInheritanceState( clazzToProcess, inheritanceStatePerClass); + InheritanceState.getSuperEntityInheritanceState( clazzToProcess, inheritanceStatePerClass, mappings.getReflectionManager() ); PersistentClass superEntity = superEntityState != null ? mappings.getClass( superEntityState.clazz.getName() ) : null; if ( superEntity == null ) { //check if superclass is not a potential persistent class @@ -490,7 +490,7 @@ PropertyHolder propertyHolder = PropertyHolderBuilder.buildPropertyHolder( clazzToProcess, persistentClass, - entityBinder.getSecondaryTables() + entityBinder.getSecondaryTables(), mappings ); javax.persistence.SecondaryTable secTabAnn = annotatedClass.getAnnotation( @@ -560,7 +560,7 @@ // check properties List<PropertyData> elements = - getElementsToProcess( clazzToProcess, inheritanceStatePerClass, propertyHolder, entityBinder ); + getElementsToProcess( clazzToProcess, inheritanceStatePerClass, propertyHolder, entityBinder, mappings ); if ( elements == null ) { throw new AnnotationException( "No identifier specified for entity: " + propertyHolder.getEntityName() ); } @@ -579,11 +579,11 @@ idClass = current.getAnnotation( IdClass.class ); break; } - state = InheritanceState.getSuperclassInheritanceState( current, inheritanceStatePerClass ); + state = InheritanceState.getSuperclassInheritanceState( current, inheritanceStatePerClass, mappings.getReflectionManager() ); } while (state != null); } if ( idClass != null ) { - XClass compositeClass = ReflectionManager.INSTANCE.toXClass( idClass.value() ); + XClass compositeClass = mappings.getReflectionManager().toXClass( idClass.value() ); boolean isComponent = true; boolean propertyAnnotated = entityBinder.isPropertyAnnotated( compositeClass ); String propertyAccessor = entityBinder.getPropertyAccessor( compositeClass ); @@ -688,11 +688,11 @@ */ private static List<PropertyData> getElementsToProcess( XClass clazzToProcess, Map<XClass, InheritanceState> inheritanceStatePerClass, - PropertyHolder propertyHolder, EntityBinder entityBinder + PropertyHolder propertyHolder, EntityBinder entityBinder, ExtendedMappings mappings ) { InheritanceState inheritanceState = inheritanceStatePerClass.get(clazzToProcess); List<XClass> classesToProcess = orderClassesToBeProcessed( - clazzToProcess, inheritanceStatePerClass, inheritanceState + clazzToProcess, inheritanceStatePerClass, inheritanceState, mappings ); List<PropertyData> elements = new ArrayList<PropertyData>(); int deep = classesToProcess.size(); @@ -703,7 +703,7 @@ String explicitAccessType = null; if ( inheritanceState.hasParents ) { InheritanceState superEntityState = - InheritanceState.getSuperEntityInheritanceState( clazzToProcess, inheritanceStatePerClass ); + InheritanceState.getSuperEntityInheritanceState( clazzToProcess, inheritanceStatePerClass, mappings.getReflectionManager() ); isExplicitPropertyAnnotated = superEntityState != null ? superEntityState.isPropertyAnnotated : null; explicitAccessType = superEntityState != null ? superEntityState.accessType : null; } @@ -727,7 +727,8 @@ InheritanceState state = inheritanceStatePerClass.get( clazz ); boolean currentHasIdentifier = addElementsOfAClass( elements, propertyHolder, isPropertyAnnotated, - accessType, clazz ); + accessType, clazz, mappings + ); hasIdentifier = hasIdentifier || currentHasIdentifier; } @@ -740,7 +741,8 @@ XClass clazz = classesToProcess.get( index ); InheritanceState state = inheritanceStatePerClass.get( clazz ); boolean currentHasIdentifier = addElementsOfAClass( elements, propertyHolder, isPropertyAnnotated, - accessType, clazz ); + accessType, clazz, mappings + ); hasIdentifier = hasIdentifier || currentHasIdentifier; } } @@ -754,7 +756,7 @@ private static List<XClass> orderClassesToBeProcessed( XClass annotatedClass, Map<XClass, InheritanceState> inheritanceStatePerClass, - InheritanceState inheritanceState + InheritanceState inheritanceState, ExtendedMappings mappings ) { //ordered to allow proper messages on properties subclassing List<XClass> classesToProcess = new ArrayList<XClass>(); @@ -767,7 +769,7 @@ superClass = superClass.getSuperclass(); superclassState = inheritanceStatePerClass.get( superClass ); } - while ( !ReflectionManager.INSTANCE.equals( superClass, Object.class ) && superclassState == null ); + while ( !mappings.getReflectionManager().equals( superClass, Object.class ) && superclassState == null ); currentClassInHierarchy = superClass; } @@ -846,7 +848,7 @@ */ private static boolean addElementsOfAClass( List<PropertyData> elements, PropertyHolder propertyHolder, boolean isPropertyAnnotated, - String propertyAccessor, final XClass annotatedClass + String propertyAccessor, final XClass annotatedClass, ExtendedMappings mappings ) { boolean hasIdentifier = false; AccessType access = annotatedClass.getAnnotation( AccessType.class ); @@ -871,9 +873,9 @@ log.debug( "Processing " + propertyHolder.getEntityName() + " " + accessType + " annotation" ); List<XProperty> properties = annotatedClass.getDeclaredProperties(accessType); for ( XProperty p : properties ) { - if( !p.isTypeResolved() && !hasExplicitTargetEntity( p ) && !mustBeSkipped( p ) ) + if( !p.isTypeResolved() && !hasExplicitTargetEntity( p ) && !mustBeSkipped( p, mappings ) ) throw new IllegalStateException( "Property " + p + " has an unbound type and no explicit target entity."); - final boolean currentHasIdentifier = addProperty( p, elements, localPropertyAccessor ); + final boolean currentHasIdentifier = addProperty( p, elements, localPropertyAccessor, mappings ); hasIdentifier = hasIdentifier || currentHasIdentifier; } return hasIdentifier; @@ -892,12 +894,12 @@ } private static boolean addProperty( - XProperty property, List<PropertyData> annElts, - String propertyAccessor + XProperty property, List<PropertyData> annElts, + String propertyAccessor, ExtendedMappings mappings ) { boolean hasIdentifier = false; PropertyData propertyAnnotatedElement = new PropertyInferredData( property, propertyAccessor); - if ( ! mustBeSkipped( propertyAnnotatedElement.getProperty() ) ) { + if ( ! mustBeSkipped( propertyAnnotatedElement.getProperty(), mappings ) ) { /* * put element annotated by @Id in front * since it has to be parsed before any assoctation by Hibernate @@ -915,9 +917,9 @@ return hasIdentifier; } - private static boolean mustBeSkipped(XProperty property) { + private static boolean mustBeSkipped(XProperty property, ExtendedMappings mappings) { return property.isAnnotationPresent( Transient.class ) - || ReflectionManager.INSTANCE.equals( property.getType(), InterceptFieldCallback.class ); + || mappings.getReflectionManager().equals( property.getType(), InterceptFieldCallback.class ); } /** @@ -1138,7 +1140,7 @@ getFetchMode( ann.fetch() ), ignoreNotFound, onDeleteCascade, inferredData.getPropertyName(), inferredData.getClassOrElementName(), - ReflectionManager.INSTANCE.toXClass( ann.targetEntity() ), + mappings.getReflectionManager().toXClass( ann.targetEntity() ), inferredData.getDefaultAccess(), propertyHolder, false, isIdentifierMapper, mappings @@ -1161,7 +1163,7 @@ getFetchMode( ann.fetch() ), ignoreNotFound, onDeleteCascade, inferredData.getPropertyName(), inferredData.getClassOrElementName(), - ReflectionManager.INSTANCE.toXClass( ann.targetEntity() ), + mappings.getReflectionManager().toXClass( ann.targetEntity() ), inferredData.getDefaultAccess(), propertyHolder, ann.mappedBy(), trueOneToOne, isIdentifierMapper, mappings @@ -1265,7 +1267,7 @@ } collectionBinder.setFkJoinColumns( joinColumns ); mappedBy = oneToManyAnn.mappedBy(); - collectionBinder.setTargetEntity( ReflectionManager.INSTANCE.toXClass( oneToManyAnn.targetEntity() ) ); + collectionBinder.setTargetEntity( mappings.getReflectionManager().toXClass( oneToManyAnn.targetEntity() ) ); collectionBinder.setFetchType( oneToManyAnn.fetch() ); collectionBinder.setCascadeStrategy( getCascadeStrategy( oneToManyAnn.cascade(), hibernateCascade ) ); collectionBinder.setOneToMany( true ); @@ -1278,14 +1280,14 @@ } collectionBinder.setFkJoinColumns( joinColumns ); mappedBy = ""; - collectionBinder.setTargetEntity( ReflectionManager.INSTANCE.toXClass( collectionOfElementsAnn.targetElement() ) ); + collectionBinder.setTargetEntity( mappings.getReflectionManager().toXClass( collectionOfElementsAnn.targetElement() ) ); collectionBinder.setFetchType( collectionOfElementsAnn.fetch() ); //collectionBinder.setCascadeStrategy( getCascadeStrategy( embeddedCollectionAnn.cascade(), hibernateCascade ) ); collectionBinder.setOneToMany( true ); } else if ( manyToManyAnn != null ) { mappedBy = manyToManyAnn.mappedBy(); - collectionBinder.setTargetEntity( ReflectionManager.INSTANCE.toXClass( manyToManyAnn.targetEntity() ) ); + collectionBinder.setTargetEntity( mappings.getReflectionManager().toXClass( manyToManyAnn.targetEntity() ) ); collectionBinder.setFetchType( manyToManyAnn.fetch() ); collectionBinder.setCascadeStrategy( getCascadeStrategy( manyToManyAnn.cascade(), hibernateCascade ) ); collectionBinder.setOneToMany( false ); @@ -1454,7 +1456,7 @@ log.debug( "Binding component with path: " + subpath ); PropertyHolder subHolder = PropertyHolderBuilder.buildPropertyHolder( comp, subpath, - inferredData, propertyHolder + inferredData, propertyHolder, mappings ); List<PropertyData> classElements = new ArrayList<PropertyData>(); XClass returnedClassOrElement = inferredData.getClassOrElement(); @@ -1462,7 +1464,7 @@ classElements, subHolder, propertyAnnotated, - propertyAccessor, returnedClassOrElement + propertyAccessor, returnedClassOrElement, mappings ); //add elements of the embeddable superclass XClass superClass = inferredData.getPropertyClass().getSuperclass(); @@ -1472,7 +1474,7 @@ classElements, subHolder, entityBinder.isPropertyAnnotated( superClass ), - propertyAccessor, superClass + propertyAccessor, superClass, mappings ); superClass = superClass.getSuperclass(); } @@ -1596,7 +1598,7 @@ ) { //All FK columns should be in the same table org.hibernate.mapping.ManyToOne value = new org.hibernate.mapping.ManyToOne( columns[0].getTable() ); - if ( isDefault( targetEntity ) ) { + if ( isDefault( targetEntity, mappings ) ) { value.setReferencedEntityName( returnedClassName ); } else { @@ -1684,7 +1686,7 @@ propertyHolder.getTable(), propertyHolder.getPersistentClass() ); value.setPropertyName( propertyName ); - if ( isDefault( targetEntity ) ) { + if ( isDefault( targetEntity, mappings ) ) { value.setReferencedEntityName( returnedClassName ); } else { @@ -1868,22 +1870,28 @@ return ANNOTATION_STRING_DEFAULT.equals( annotationString ); } - public static boolean isDefault(XClass clazz) { - return ReflectionManager.INSTANCE.equals( clazz, void.class ); + public static boolean isDefault(XClass clazz, ExtendedMappings mappings) { + return mappings.getReflectionManager().equals( clazz, void.class ); } - public static Map<XClass, InheritanceState> buildInheritanceStates(List<XClass> orderedClasses) { + public static Map<XClass, InheritanceState> buildInheritanceStates( + List<XClass> orderedClasses, ReflectionManager reflectionManager + ) { Map<XClass, InheritanceState> inheritanceStatePerClass = new HashMap<XClass, InheritanceState>( orderedClasses.size() ); for ( XClass clazz : orderedClasses ) { - InheritanceState superclassState = InheritanceState.getSuperclassInheritanceState( clazz, inheritanceStatePerClass ); + InheritanceState superclassState = InheritanceState.getSuperclassInheritanceState( clazz, inheritanceStatePerClass, + reflectionManager + ); InheritanceState state = new InheritanceState(clazz); if ( superclassState != null ) { //the classes are ordered thus preventing an NPE //FIXME if an entity has subclasses annotated @MappedSperclass wo sub @Entity this is wrong superclassState.hasSons = true; - InheritanceState superEntityState = InheritanceState.getSuperEntityInheritanceState( clazz, inheritanceStatePerClass ); + InheritanceState superEntityState = InheritanceState.getSuperEntityInheritanceState( clazz, inheritanceStatePerClass, + reflectionManager + ); state.hasParents = superEntityState != null; final boolean nonDefault = state.type != null && ! InheritanceType.SINGLE_TABLE.equals( state.type ); if ( superclassState.type != null ) { Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -2,7 +2,10 @@ package org.hibernate.cfg; import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -12,29 +15,34 @@ import java.util.Properties; import java.util.Set; import java.util.StringTokenizer; -import java.util.Collection; +import javax.persistence.Entity; import javax.persistence.MappedSuperclass; -import javax.persistence.Entity; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.dom4j.Attribute; import org.dom4j.Document; +import org.dom4j.DocumentException; import org.dom4j.Element; +import org.dom4j.io.SAXReader; import org.hibernate.AnnotationException; import org.hibernate.MappingException; import org.hibernate.cfg.annotations.Version; -import org.hibernate.validator.ClassValidator; import org.hibernate.mapping.Column; import org.hibernate.mapping.Join; +import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Table; import org.hibernate.mapping.UniqueKey; -import org.hibernate.mapping.PersistentClass; import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XClass; +import org.hibernate.reflection.java.JavaXFactory; import org.hibernate.util.JoinedIterator; import org.hibernate.util.ReflectHelper; import org.hibernate.util.StringHelper; +import org.hibernate.util.XMLHelper; +import org.hibernate.validator.ClassValidator; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; /** * Add JSR 175 configuration capability. @@ -64,6 +72,8 @@ private List<Document> hbmDocuments; //user ordering matters, hence the list private String precedence = null; private boolean inSecondPass = false; + protected XMLHelper xmlHelper; + private ReflectionManager reflectionManager; public AnnotationConfiguration() { super(); @@ -79,7 +89,7 @@ //for each class, copy all the relevent hierarchy for (XClass clazz : original) { XClass superClass = clazz.getSuperclass(); - while ( ! ReflectionManager.INSTANCE.equals( superClass, Object.class ) && ! copy.contains( superClass ) ) { + while ( ! reflectionManager.equals( superClass, Object.class ) && ! copy.contains( superClass ) ) { if (superClass.isAnnotationPresent( Entity.class ) || superClass.isAnnotationPresent( MappedSuperclass.class) ) { copy.add( superClass ); @@ -96,8 +106,8 @@ return newList; } - private static void orderHierarchy(List<XClass> copy, List<XClass> newList, List<XClass> original, XClass clazz) { - if ( ReflectionManager.INSTANCE.equals( clazz, Object.class ) ) return; + private void orderHierarchy(List<XClass> copy, List<XClass> newList, List<XClass> original, XClass clazz) { + if ( reflectionManager.equals( clazz, Object.class ) ) return; //process superclass first orderHierarchy( copy, newList, original, clazz.getSuperclass() ); if ( original.contains( clazz ) ) { @@ -115,11 +125,8 @@ * @return the configuration object */ public AnnotationConfiguration addAnnotatedClass(Class persistentClass) throws MappingException { - XClass persistentXClass = ReflectionManager.INSTANCE.toXClass( persistentClass ); + XClass persistentXClass = reflectionManager.toXClass( persistentClass ); try { - if ( persistentXClass.isAnnotationPresent( Entity.class ) ) { - annotatedClassEntities.put( persistentXClass.getName(), persistentXClass ); - } annotatedClasses.add( persistentXClass ); return this; } @@ -169,7 +176,8 @@ generatorTables, tableUniqueConstraints, mappedByResolver, - propertyRefResolver + propertyRefResolver, + reflectionManager ); } @@ -203,11 +211,19 @@ hbmDocuments = new ArrayList<Document>(); namingStrategy = EJB3NamingStrategy.INSTANCE; setEntityResolver( new EJB3DTDEntityResolver() ); + reflectionManager = new JavaXFactory(); + xmlHelper = new XMLHelper(); } @Override 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 ); + } + } if ( precedence == null ) precedence = getProperties().getProperty( ARTEFACT ); if ( precedence == null ) precedence = DEFAULT_PRECEDENCE; StringTokenizer precedences = new StringTokenizer( precedence, ",; ", false ); @@ -300,7 +316,7 @@ //bind classes in the correct order calculating some inheritance state List<XClass> orderedClasses = orderAndFillHierarchy( annotatedClasses ); Map<XClass, InheritanceState> inheritanceStatePerClass = AnnotationBinder.buildInheritanceStates( - orderedClasses + orderedClasses, reflectionManager ); ExtendedMappings mappings = createExtendedMappings(); for ( XClass clazz : orderedClasses ) { @@ -418,22 +434,28 @@ @Override protected void add(org.dom4j.Document doc) throws MappingException { + boolean ejb3Xml = "entity-mappings".equals( doc.getRootElement().getName() ); if (inSecondPass) { //if in second pass bypass the queueing, getExtendedQueue reuse this method - super.add(doc); + if (!ejb3Xml) super.add(doc); } else { - final Element hmNode = doc.getRootElement(); - Attribute packNode = hmNode.attribute( "package" ); - String defaultPackage = packNode != null - ? packNode.getValue() - : ""; - Set<String> entityNames = new HashSet<String>(); - findClassNames( defaultPackage, hmNode, entityNames ); - for ( String entity : entityNames ) { - hbmEntities.put( entity, doc ); + if (! ejb3Xml) { + final Element hmNode = doc.getRootElement(); + Attribute packNode = hmNode.attribute( "package" ); + String defaultPackage = packNode != null + ? packNode.getValue() + : ""; + Set<String> entityNames = new HashSet<String>(); + findClassNames( defaultPackage, hmNode, entityNames ); + for ( String entity : entityNames ) { + hbmEntities.put( entity, doc ); + } + hbmDocuments.add( doc ); } - hbmDocuments.add( doc ); + else { + ( (JavaXFactory) reflectionManager ).getXMLContext().addDocument( doc ); + } } } @@ -488,4 +510,37 @@ public boolean isClass; public boolean cacheLazy; } + + @Override + public Configuration addInputStream(InputStream xmlInputStream) throws MappingException { + try { + List errors = new ArrayList(); + SAXReader saxReader = xmlHelper.createSAXReader( "XML InputStream", errors, getEntityResolver() ); + try { + saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true ); + } + catch (SAXException e) { + saxReader.setValidation( false ); + } + org.dom4j.Document doc = saxReader + .read( new InputSource( xmlInputStream ) ); + + if ( errors.size() != 0 ) { + throw new MappingException( "invalid mapping", (Throwable) errors.get( 0 ) ); + } + add( doc ); + return this; + } + catch (DocumentException e) { + throw new MappingException( "Could not parse mapping document in input stream", e ); + } + finally { + try { + xmlInputStream.close(); + } + catch (IOException ioe) { + log.warn( "Could not close input stream", ioe ); + } + } + } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -21,9 +21,9 @@ private transient Map<String, Join> joinsPerRealTableName; public ClassPropertyHolder( - PersistentClass persistentClass, XClass clazzToProcess, Map<String, Join> joins + PersistentClass persistentClass, XClass clazzToProcess, Map<String, Join> joins, ExtendedMappings mappings ) { - super(persistentClass.getEntityName(), null, clazzToProcess); + super(persistentClass.getEntityName(), null, clazzToProcess, mappings ); this.persistentClass = persistentClass; this.joins = joins; } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -16,8 +16,11 @@ public class CollectionPropertyHolder extends AbstractPropertyHolder { Collection collection; - public CollectionPropertyHolder(Collection collection, String path, XClass clazzToProcess, XProperty property) { - super( path, null, clazzToProcess ); + public CollectionPropertyHolder( + Collection collection, String path, XClass clazzToProcess, XProperty property, + ExtendedMappings mappings + ) { + super( path, null, clazzToProcess, mappings ); this.collection = collection; setCurrentProperty( property ); } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -45,8 +45,11 @@ addProperty( prop ); } - public ComponentPropertyHolder(Component component, String path, PropertyData inferredData, PropertyHolder parent) { - super(path, parent, inferredData.getPropertyClass() ); + public ComponentPropertyHolder( + Component component, String path, PropertyData inferredData, PropertyHolder parent, + ExtendedMappings mappings + ) { + super(path, parent, inferredData.getPropertyClass(), mappings ); setCurrentProperty( inferredData.getProperty() ); this.component = component; } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -231,7 +231,7 @@ */ public void setPersistentClass(PersistentClass persistentClass, Map<String, Join> joins) { //FIXME shouldn't we deduce the classname from the persistentclasS? - this.propertyHolder = PropertyHolderBuilder.buildPropertyHolder( null, persistentClass, joins ); + this.propertyHolder = PropertyHolderBuilder.buildPropertyHolder( null, persistentClass, joins, getMappings() ); } public static void checkIfJoinColumn(Object columns, PropertyHolder holder, PropertyData property) { Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -17,6 +17,7 @@ import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Table; import org.hibernate.reflection.XClass; +import org.hibernate.reflection.ReflectionManager; /** * Allow annotation related mappings @@ -36,6 +37,7 @@ private final Map<Table, List<String[]>> tableUniqueConstraints; private final Map<String, String> mappedByResolver; private final Map<String, String> propertyRefResolver; + private final ReflectionManager reflectionManager; ExtendedMappings( Map classes, Map collections, Map tables, Map queries, Map sqlqueries, Map sqlResultSetMappings, @@ -48,7 +50,8 @@ Map<String, Properties> generatorTables, Map<Table, List<String[]>> tableUniqueConstraints, Map<String, String> mappedByResolver, - Map<String, String> propertyRefResolver + Map<String, String> propertyRefResolver, + ReflectionManager reflectionManager ) { super( classes, @@ -75,6 +78,7 @@ this.tableUniqueConstraints = tableUniqueConstraints; this.mappedByResolver = mappedByResolver; this.propertyRefResolver = propertyRefResolver; + this.reflectionManager = reflectionManager; } public void addGenerator(IdGenerator generator) throws MappingException { @@ -194,4 +198,8 @@ public void addPropertyReference(String referencedClass, String propertyName) { super.addPropertyReference( referencedClass, propertyName ); } + + public ReflectionManager getReflectionManager() { + return reflectionManager; + } } \ No newline at end of file Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -2,13 +2,13 @@ package org.hibernate.cfg; import java.util.Map; -import javax.persistence.MappedSuperclass; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; +import javax.persistence.MappedSuperclass; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; import org.hibernate.reflection.XClass; +import org.hibernate.reflection.ReflectionManager; /** * Some extra data to the inheritance position of a class @@ -56,23 +56,29 @@ return hasParents && InheritanceType.TABLE_PER_CLASS.equals( type ); } - public static InheritanceState getSuperEntityInheritanceState(XClass clazz, Map<XClass, InheritanceState> states) { + public static InheritanceState getSuperEntityInheritanceState( + XClass clazz, Map<XClass, InheritanceState> states, + ReflectionManager reflectionManager + ) { XClass superclass = clazz; do { superclass = superclass.getSuperclass(); InheritanceState currentState = states.get( superclass ); if (currentState != null && ! currentState.isEmbeddableSuperclass) return currentState; - } while ( ! ReflectionManager.INSTANCE.equals( superclass, Object.class ) ); + } while ( ! reflectionManager.equals( superclass, Object.class ) ); return null; } - public static InheritanceState getSuperclassInheritanceState(XClass clazz, Map<XClass, InheritanceState> states) { + public static InheritanceState getSuperclassInheritanceState( + XClass clazz, Map<XClass, InheritanceState> states, + ReflectionManager reflectionManager + ) { XClass superclass = clazz; do { superclass = superclass.getSuperclass(); InheritanceState currentState = states.get( superclass ); if (currentState != null) return currentState; - } while ( ! ReflectionManager.INSTANCE.equals( superclass, Object.class ) ); + } while ( ! reflectionManager.equals( superclass, Object.class ) ); return null; } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -22,9 +22,9 @@ public static PropertyHolder buildPropertyHolder( XClass clazzToProcess, PersistentClass persistentClass, - Map<String, Join> joins + Map<String, Join> joins, ExtendedMappings mappings ) { - return (PropertyHolder) new ClassPropertyHolder( persistentClass, clazzToProcess, joins ); + return (PropertyHolder) new ClassPropertyHolder( persistentClass, clazzToProcess, joins, mappings ); } /** @@ -32,23 +32,31 @@ * * @param component component to wrap * @param path component path + * @param mappings * @return PropertyHolder */ public static PropertyHolder buildPropertyHolder( - Component component, String path, PropertyData inferredData, PropertyHolder parent + Component component, String path, PropertyData inferredData, PropertyHolder parent, + ExtendedMappings mappings ) { - return (PropertyHolder) new ComponentPropertyHolder( component, path, inferredData, parent ); + return (PropertyHolder) new ComponentPropertyHolder( component, path, inferredData, parent, mappings ); } /** * buid a property holder on top of a collection */ - public static PropertyHolder buildPropertyHolder(Collection collection, String path, XClass clazzToProcess, XProperty property) { - return new CollectionPropertyHolder( collection, path, clazzToProcess, property); + public static PropertyHolder buildPropertyHolder( + Collection collection, String path, XClass clazzToProcess, XProperty property, + ExtendedMappings mappings + ) { + return new CollectionPropertyHolder( collection, path, clazzToProcess, property, mappings ); } - public static PropertyHolder buildPropertyHolder(PersistentClass persistentClass, Map<String, Join> joins) { - return buildPropertyHolder( null, persistentClass, joins ); + public static PropertyHolder buildPropertyHolder( + PersistentClass persistentClass, Map<String, Join> joins, + ExtendedMappings mappings + ) { + return buildPropertyHolder( null, persistentClass, joins, mappings ); } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -7,11 +7,11 @@ import java.util.List; import java.util.Map; import java.util.StringTokenizer; +import javax.persistence.AttributeOverride; +import javax.persistence.AttributeOverrides; import javax.persistence.Embeddable; import javax.persistence.FetchType; import javax.persistence.MapKey; -import javax.persistence.AttributeOverride; -import javax.persistence.AttributeOverrides; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -22,11 +22,11 @@ import org.hibernate.annotations.AccessType; import org.hibernate.annotations.BatchSize; import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CollectionOfElements; import org.hibernate.annotations.OrderBy; import org.hibernate.annotations.Sort; import org.hibernate.annotations.SortType; import org.hibernate.annotations.Where; -import org.hibernate.annotations.CollectionOfElements; import org.hibernate.cfg.AnnotatedClassType; import org.hibernate.cfg.AnnotationBinder; import org.hibernate.cfg.BinderHelper; @@ -52,7 +52,6 @@ import org.hibernate.mapping.Property; import org.hibernate.mapping.SimpleValue; import org.hibernate.mapping.Table; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; import org.hibernate.reflection.XClass; import org.hibernate.reflection.XProperty; @@ -364,7 +363,7 @@ } private XClass getCollectionType() { - if ( AnnotationBinder.isDefault( targetEntity ) ) { + if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) { if ( collectionType != null ) { return collectionType; } @@ -789,7 +788,7 @@ } else { try { - elementClass = ReflectionManager.INSTANCE.classForName( collType, CollectionBinder.class ); + elementClass = mappings.getReflectionManager().classForName( collType, CollectionBinder.class ); } catch (ClassNotFoundException e) { throw new AnnotationException( "Unable to find class: " + collType, e ); @@ -800,7 +799,7 @@ collValue, collValue.getRole(), elementClass, - property + property, mappings ); //force in case of attribute override boolean attributeOverride = property.isAnnotationPresent(AttributeOverride.class) Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -42,7 +42,6 @@ import org.hibernate.mapping.Table; import org.hibernate.mapping.TableOwner; import org.hibernate.mapping.Value; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; import org.hibernate.reflection.XClass; import org.hibernate.util.ReflectHelper; @@ -269,11 +268,11 @@ proxyClass = null; } else { - if ( AnnotationBinder.isDefault( ReflectionManager.INSTANCE.toXClass( proxy.proxyClass() ) ) ) { + if ( AnnotationBinder.isDefault( mappings.getReflectionManager().toXClass( proxy.proxyClass() ), mappings ) ) { proxyClass = annotatedClass; } else { - proxyClass = ReflectionManager.INSTANCE.toXClass( proxy.proxyClass() ); + proxyClass = mappings.getReflectionManager().toXClass( proxy.proxyClass() ); } } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -78,7 +78,7 @@ this.collection, IndexedCollection.DEFAULT_INDEX_COLUMN_NAME, (XClass) null, - (XProperty) null + (XProperty) null, mappings ); List list = (List) this.collection; if ( ! list.isOneToMany() ) indexColumn.forceNotNull(); Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -1,10 +1,9 @@ //$Id$ package org.hibernate.cfg.annotations; +import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import java.util.HashMap; - import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.Embeddable; @@ -14,32 +13,31 @@ import org.hibernate.FetchMode; import org.hibernate.MappingException; import org.hibernate.annotations.AccessType; +import org.hibernate.cfg.AnnotatedClassType; +import org.hibernate.cfg.AnnotationBinder; import org.hibernate.cfg.BinderHelper; import org.hibernate.cfg.CollectionSecondPass; import org.hibernate.cfg.Ejb3Column; import org.hibernate.cfg.Ejb3JoinColumn; import org.hibernate.cfg.ExtendedMappings; -import org.hibernate.cfg.SecondPass; -import org.hibernate.cfg.AnnotatedClassType; +import org.hibernate.cfg.PropertyData; import org.hibernate.cfg.PropertyHolder; import org.hibernate.cfg.PropertyHolderBuilder; -import org.hibernate.cfg.PropertyData; import org.hibernate.cfg.PropertyPreloadedData; -import org.hibernate.cfg.AnnotationBinder; +import org.hibernate.cfg.SecondPass; import org.hibernate.mapping.Collection; import org.hibernate.mapping.Column; import org.hibernate.mapping.Component; import org.hibernate.mapping.Formula; +import org.hibernate.mapping.Join; +import org.hibernate.mapping.ManyToOne; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Property; import org.hibernate.mapping.SimpleValue; import org.hibernate.mapping.Value; -import org.hibernate.mapping.ManyToOne; -import org.hibernate.mapping.Join; -import org.hibernate.reflection.XProperty; -import org.hibernate.reflection.XClass; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; +import org.hibernate.reflection.XClass; +import org.hibernate.reflection.XProperty; /** * Implementation to bind a Map @@ -124,7 +122,7 @@ } else { try { - elementClass = ReflectionManager.INSTANCE.classForName( mapKeyType, MapBinder.class ); + elementClass = mappings.getReflectionManager().classForName( mapKeyType, MapBinder.class ); } catch (ClassNotFoundException e) { throw new AnnotationException( "Unable to find class: " + mapKeyType, e ); @@ -135,7 +133,7 @@ mapValue, mapValue.getRole(), elementClass, - property + property, mappings ); //force in case of attribute override boolean attributeOverride = property.isAnnotationPresent( AttributeOverride.class) Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -4,7 +4,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.cfg.Ejb3Column; -import org.hibernate.cfg.Mappings; +import org.hibernate.cfg.ExtendedMappings; import org.hibernate.cfg.PropertyHolder; import org.hibernate.mapping.Property; import org.hibernate.mapping.SimpleValue; @@ -23,7 +23,7 @@ private String propertyAccessorName; private Ejb3Column[] columns; private PropertyHolder holder; - private Mappings mappings; + private ExtendedMappings mappings; private Value value; private boolean insertable = true; private boolean updatable = true; @@ -75,7 +75,7 @@ this.cascade = cascadeStrategy; } - public void setMappings(Mappings mappings) { + public void setMappings(ExtendedMappings mappings) { this.mappings = mappings; } @@ -94,6 +94,7 @@ } String containerClassName = holder == null ? null : holder.getClassName(); SimpleValueBinder value = new SimpleValueBinder(); + value.setMappings( mappings ); value.setPropertyName( name ); value.setReturnedClassName( returnedClassName ); value.setColumns( columns ); Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -3,28 +3,25 @@ import java.io.Serializable; import java.sql.Types; -import java.util.Properties; -import java.util.Date; import java.util.Calendar; - +import java.util.Date; +import java.util.Properties; import javax.persistence.Enumerated; import javax.persistence.Lob; import javax.persistence.Temporal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.hibernate.AssertionFailure; import org.hibernate.AnnotationException; -import org.hibernate.util.StringHelper; +import org.hibernate.AssertionFailure; import org.hibernate.annotations.Parameter; import org.hibernate.annotations.Type; import org.hibernate.cfg.AnnotationBinder; import org.hibernate.cfg.Ejb3Column; -import org.hibernate.cfg.Mappings; +import org.hibernate.cfg.ExtendedMappings; import org.hibernate.cfg.NotYetImplementedException; import org.hibernate.mapping.SimpleValue; import org.hibernate.mapping.Table; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XClass; import org.hibernate.reflection.XProperty; import org.hibernate.type.ByteArrayBlobType; @@ -34,6 +31,7 @@ import org.hibernate.type.PrimitiveCharacterArrayClobType; import org.hibernate.type.SerializableToBlobType; import org.hibernate.type.StringClobType; +import org.hibernate.util.StringHelper; /** * @author Emmanuel Bernard @@ -46,7 +44,7 @@ private String persistentClassName; private String explicitType = ""; private Properties typeParameters = new Properties(); - private Mappings mappings; + private ExtendedMappings mappings; public void setPropertyName(String propertyName) { this.propertyName = propertyName; @@ -80,10 +78,10 @@ if ( property.isAnnotationPresent( Temporal.class ) ) { Temporal ann = property.getAnnotation( Temporal.class ); boolean isDate; - if ( ReflectionManager.INSTANCE.equals( property.getType(), Date.class ) ) { + if ( mappings.getReflectionManager().equals( property.getType(), Date.class ) ) { isDate = true; } - else if ( ReflectionManager.INSTANCE.equals( property.getType(), Calendar.class ) ) { + else if ( mappings.getReflectionManager().equals( property.getType(), Calendar.class ) ) { isDate = false; } else { @@ -113,27 +111,27 @@ } else if ( property.isAnnotationPresent( Lob.class ) ) { - if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, java.sql.Clob.class ) ) { + if ( mappings.getReflectionManager().equals( returnedClassOrElement, java.sql.Clob.class ) ) { type = "clob"; } - else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, java.sql.Blob.class ) ) { + else if ( mappings.getReflectionManager().equals( returnedClassOrElement, java.sql.Blob.class ) ) { type = "blob"; } - else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, String.class ) ) { + else if ( mappings.getReflectionManager().equals( returnedClassOrElement, String.class ) ) { type = StringClobType.class.getName(); } - else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, Character.class ) && isArray ) { + else if ( mappings.getReflectionManager().equals( returnedClassOrElement, Character.class ) && isArray ) { type = CharacterArrayClobType.class.getName(); } - else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, char.class ) && isArray ) { + else if ( mappings.getReflectionManager().equals( returnedClassOrElement, char.class ) && isArray ) { type = PrimitiveCharacterArrayClobType.class.getName(); - } else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, Byte.class ) && isArray ) { + } else if ( mappings.getReflectionManager().equals( returnedClassOrElement, Byte.class ) && isArray ) { type = ByteArrayBlobType.class.getName(); } - else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, byte.class ) && isArray ) { + else if ( mappings.getReflectionManager().equals( returnedClassOrElement, byte.class ) && isArray ) { type = PrimitiveByteArrayBlobType.class.getName(); } - else if ( ReflectionManager.INSTANCE.toXClass( Serializable.class ).isAssignableFrom( returnedClassOrElement ) ) { + else if ( mappings.getReflectionManager().toXClass( Serializable.class ).isAssignableFrom( returnedClassOrElement ) ) { type = SerializableToBlobType.class.getName(); //typeParameters = new Properties(); typeParameters.setProperty( @@ -198,7 +196,7 @@ } } - public void setMappings(Mappings mappings) { + public void setMappings(ExtendedMappings mappings) { this.mappings = mappings; } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -1,7 +1,5 @@ package org.hibernate.reflection; -import org.hibernate.reflection.java.JavaXFactory; - /** * The entry point to the reflection layer (a.k.a. the X* layer). * @@ -11,7 +9,7 @@ public interface ReflectionManager { // TODO: turn this Singleton into a plug-in - public static final JavaXFactory INSTANCE = new JavaXFactory(); + //public static final JavaXFactory INSTANCE = new JavaXFactory(); public <T> XClass toXClass(Class<T> clazz); Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -238,7 +238,7 @@ public <T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType) { initAnnotations(); for ( Annotation annotation : annotations ) { - if ( annotation.getClass().equals( annotationType ) ) return true; + if ( annotation.annotationType().equals( annotationType ) ) return true; } return false; } @@ -320,6 +320,10 @@ annotationList.add( transientAnn ); } else { + if ( defaults.canUseJavaAnnotations() ) { + Annotation annotation = super.getAnnotation( AccessType.class ); + if (annotation != null) annotationList.add( annotation ); + } getId( annotationList, defaults ); getEmbeddedId( annotationList, defaults ); getEmbedded( annotationList, defaults ); @@ -420,7 +424,7 @@ ad.setValue( "targetEntity", clazz); } getFetchType( ad, element ); - getCascades( ad, element ); + getCascades( ad, element, defaults ); getJoinTable( annotationList, element, defaults ); buildJoinColumns( annotationList, element, defaults ); Annotation annotation = getPrimaryKeyJoinColumns( element, defaults ); @@ -450,6 +454,24 @@ if (annotation != null) annotationList.add( annotation ); annotation = super.getAnnotation( OrderBy.class ); if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AttributeOverride.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AttributeOverrides.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AssociationOverride.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AssociationOverrides.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( Lob.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Enumerated.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Temporal.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Column.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Columns.class ); + if (annotation != null) annotationList.add(annotation); } } } @@ -483,7 +505,7 @@ } } - private void getCascades(AnnotationDescriptor ad, Element element) { + private void getCascades(AnnotationDescriptor ad, Element element, XMLContext.Default defaults) { List<Element> elements = element != null ? element.elements( "cascade" ) : new ArrayList<Element>(0); List<CascadeType> cascades = new ArrayList<CascadeType>(); for (Element subelement : elements) { @@ -493,6 +515,10 @@ if (subelement.element( "cascade-remove") != null) cascades.add( CascadeType.REMOVE ); if (subelement.element( "cascade-refresh") != null) cascades.add( CascadeType.REFRESH ); } + if ( Boolean.TRUE.equals( defaults.getCascadePersist() ) + && ! cascades.contains( CascadeType.ALL ) && ! cascades.contains( CascadeType.PERSIST ) ) { + cascades.add( CascadeType.PERSIST ); + } if (cascades.size() > 0) { ad.setValue( "cascade", cascades.toArray( new CascadeType[ cascades.size() ] ) ); } @@ -506,8 +532,18 @@ } } if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) { - Embedded annotation = super.getAnnotation( Embedded.class ); - if (annotation != null) annotationList.add( annotation ); + Annotation annotation = super.getAnnotation( Embedded.class ); + if (annotation != null) { + annotationList.add( annotation ); + annotation = super.getAnnotation( AttributeOverride.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AttributeOverrides.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AssociationOverride.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AssociationOverrides.class ); + if (annotation != null) annotationList.add( annotation ); + } } } @@ -536,10 +572,10 @@ annotationList.add( AnnotationFactory.create( basic ) ); } } - if ( elementsForProperty.size() == 0 ) { + if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations()) { //we have nothing, so Java annotations might occurs - if ( defaults.canUseJavaAnnotations() ) { - Annotation annotation = super.getAnnotation( Version.class ); + Annotation annotation = super.getAnnotation( Version.class ); + if ( annotation != null ) { if (annotation != null) annotationList.add(annotation); annotation = super.getAnnotation( Column.class ); if (annotation != null) annotationList.add(annotation); @@ -565,22 +601,28 @@ annotat... [truncated message content] |
Author: epbernard Date: 2006-04-25 16:56:10 -0400 (Tue, 25 Apr 2006) New Revision: 9792 Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Administration.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml Log: XML overriding: support for associations Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-25 17:09:09 UTC (rev 9791) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-25 20:56:10 UTC (rev 9792) @@ -15,16 +15,23 @@ import javax.persistence.AssociationOverrides; import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; +import javax.persistence.Basic; +import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.ColumnResult; import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorType; import javax.persistence.DiscriminatorValue; import javax.persistence.Embeddable; +import javax.persistence.Embedded; +import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.EntityResult; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; import javax.persistence.ExcludeDefaultListeners; import javax.persistence.ExcludeSuperclassListeners; +import javax.persistence.FetchType; import javax.persistence.FieldResult; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @@ -33,11 +40,18 @@ import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; +import javax.persistence.JoinTable; +import javax.persistence.Lob; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; import javax.persistence.MappedSuperclass; import javax.persistence.NamedNativeQueries; import javax.persistence.NamedNativeQuery; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.PrimaryKeyJoinColumns; import javax.persistence.QueryHint; @@ -50,18 +64,11 @@ import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import javax.persistence.Transient; import javax.persistence.UniqueConstraint; -import javax.persistence.EmbeddedId; -import javax.persistence.Lob; -import javax.persistence.Enumerated; -import javax.persistence.Basic; -import javax.persistence.FetchType; -import javax.persistence.EnumType; import javax.persistence.Version; -import javax.persistence.Transient; -import javax.persistence.Embedded; -import javax.persistence.ManyToOne; -import javax.persistence.JoinTable; +import javax.persistence.OrderBy; +import javax.persistence.MapKey; import org.dom4j.Attribute; import org.dom4j.Element; @@ -136,6 +143,16 @@ annotationToXml.put( Transient.class, "transient"); annotationToXml.put( Basic.class, "basic"); annotationToXml.put( Embedded.class, "embedded"); + annotationToXml.put( ManyToOne.class, "many-to-one"); + annotationToXml.put( OneToOne.class, "one-to-one"); + annotationToXml.put( OneToMany.class, "one-to-many"); + annotationToXml.put( ManyToMany.class, "many-to-many"); + annotationToXml.put( JoinTable.class, "join-table"); + annotationToXml.put( JoinColumn.class, "join-column"); + annotationToXml.put( JoinColumns.class, "join-column"); + annotationToXml.put( MapKey.class, "map-key"); + annotationToXml.put( OrderBy.class, "order-by"); + } private XMLContext xmlContext; @@ -298,7 +315,7 @@ } } preCalculateElementsForProperty(tree); - Transient transientAnn = getTransient(); + Transient transientAnn = getTransient(defaults); if (transientAnn != null) { annotationList.add( transientAnn ); } @@ -308,7 +325,10 @@ getEmbedded( annotationList, defaults ); getBasic( annotationList, defaults ); getVersion( annotationList, defaults ); - getManyToOne( annotationList, defaults ); + getAssociation(ManyToOne.class, annotationList, defaults); + getAssociation(OneToOne.class, annotationList, defaults); + getAssociation(OneToMany.class, annotationList, defaults); + getAssociation(ManyToMany.class, annotationList, defaults); } this.annotations = annotationList.toArray( new Annotation[ annotationList.size() ] ); } @@ -318,24 +338,166 @@ } } - private void getManyToOne(List<Annotation> annotationList, XMLContext.Default defaults) { + private JoinTable overridesDefaultsInJoinTable(XMLContext.Default defaults) { + //no element but might have some default or some annotation + final Class<JoinTable> annotationType = JoinTable.class; + if ( StringHelper.isNotEmpty( defaults.getCatalog() ) + || StringHelper.isNotEmpty( defaults.getSchema() ) ) { + AnnotationDescriptor ad = new AnnotationDescriptor( annotationType ); + if ( defaults.canUseJavaAnnotations() ) { + JoinTable table = super.getAnnotation( annotationType ); + if ( table != null ) { + ad.setValue( "name", table.name() ); + ad.setValue( "schema", table.schema() ); + ad.setValue( "catalog", table.catalog() ); + ad.setValue( "uniqueConstraints", table.uniqueConstraints() ); + ad.setValue( "joinColumns", table.joinColumns() ); + ad.setValue( "inverseJoinColumns", table.inverseJoinColumns() ); + } + } + if ( StringHelper.isEmpty( (String) ad.valueOf( "schema" ) ) + && StringHelper.isNotEmpty( defaults.getSchema() ) ) { + ad.setValue( "schema", defaults.getSchema() ); + } + if ( StringHelper.isEmpty( (String) ad.valueOf( "catalog" ) ) + && StringHelper.isNotEmpty( defaults.getCatalog() ) ) { + ad.setValue( "catalog", defaults.getCatalog() ); + } + return AnnotationFactory.create( ad ); + } + else if ( defaults.canUseJavaAnnotations() ) { + return super.getAnnotation( annotationType ); + } + else { + return null; + } + } + + /* + * no partial overriding possible + */ + private void getJoinTable(List<Annotation> annotationList, Element tree, XMLContext.Default defaults) { + Element subelement = tree == null ? null : tree.element( "join-table" ); + final Class<JoinTable> annotationType = JoinTable.class; + if (subelement != null) { + //ignore java annotation, an element is defined + AnnotationDescriptor annotation = new AnnotationDescriptor( annotationType ); + copyStringAttribute( annotation, subelement, "name", false ); + copyStringAttribute( annotation, subelement, "catalog", false ); + if ( StringHelper.isNotEmpty( defaults.getCatalog() ) + && StringHelper.isEmpty( (String) annotation.valueOf( "catalog" ) ) ) { + annotation.setValue( "catalog", defaults.getCatalog() ); + } + copyStringAttribute( annotation, subelement, "schema", false ); + if ( StringHelper.isNotEmpty( defaults.getSchema() ) + && StringHelper.isEmpty( (String) annotation.valueOf( "schema" ) ) ) { + annotation.setValue( "schema", defaults.getSchema() ); + } + buildUniqueConstraints( annotation, subelement ); + annotation.setValue( "joinColumns", getJoinColumns( subelement, false ) ); + annotation.setValue( "inverseJoinColumns", getJoinColumns( subelement, true ) ); + annotationList.add( AnnotationFactory.create( annotation ) ); + } + } + + private void getAssociation(Class<? extends Annotation> annotationType, List<Annotation> annotationList, XMLContext.Default defaults) { + String xmlName = annotationToXml.get( annotationType ); for (Element element : elementsForProperty) { - if ( "embedded".equals( element.getName() ) ) { - AnnotationDescriptor ad = new AnnotationDescriptor( Embedded.class ); + if ( xmlName.equals( element.getName() ) ) { + AnnotationDescriptor ad = new AnnotationDescriptor( annotationType ); + String className = element.attributeValue( "target-entity" ); + if (className != null) { + Class clazz = null; + try { + clazz = ReflectHelper.classForName( + XMLContext.buildSafeClassName( className, defaults), + this.getClass() + ); + } + catch( ClassNotFoundException e ) { + throw new AnnotationException( "Unable to find " + element.getPath() + "target-entity: " + className, e ); + } + ad.setValue( "targetEntity", clazz); + } + getFetchType( ad, element ); + getCascades( ad, element ); + getJoinTable( annotationList, element, defaults ); + buildJoinColumns( annotationList, element, defaults ); + Annotation annotation = getPrimaryKeyJoinColumns( element, defaults ); + if (annotation != null) annotationList.add( annotation ); + copyBooleanAttribute( ad, element, "optional" ); + copyStringAttribute( ad, element, "mapped-by", false ); + getOrderBy( annotationList, element, defaults ); + getMapKey( annotationList, element, defaults ); annotationList.add( AnnotationFactory.create( ad ) ); } } - if ( elementsForProperty.size() == 0 ) { - Annotation annotation = super.getAnnotation( ManyToOne.class ); + if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) { + Annotation annotation = super.getAnnotation( annotationType ); if (annotation != null) { annotationList.add( annotation ); - annotation = super.getAnnotation( JoinTable.class ); + annotation = overridesDefaultsInJoinTable( defaults ); if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( JoinColumn.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( JoinColumns.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( PrimaryKeyJoinColumn.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( PrimaryKeyJoinColumns.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( MapKey.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( OrderBy.class ); + if (annotation != null) annotationList.add( annotation ); } + } + } + private void getOrderBy(List<Annotation> annotationList, Element element, XMLContext.Default defaults) { + Element subelement = element != null ? element.element( "order-by" ) : null; + if (subelement != null) { + String orderByString = subelement.getTextTrim(); + AnnotationDescriptor ad = new AnnotationDescriptor( OrderBy.class ); + if (StringHelper.isNotEmpty( orderByString ) ) ad.setValue( "value", orderByString ); + annotationList.add( AnnotationFactory.create( ad ) ); } } + private void getMapKey(List<Annotation> annotationList, Element element, XMLContext.Default defaults) { + Element subelement = element != null ? element.element( "map-key" ) : null; + if (subelement != null) { + String mapKeyString = subelement.attributeValue("name"); + AnnotationDescriptor ad = new AnnotationDescriptor( MapKey.class ); + if (StringHelper.isNotEmpty( mapKeyString ) ) ad.setValue( "name", mapKeyString ); + annotationList.add( AnnotationFactory.create( ad ) ); + } + } + + private void buildJoinColumns(List<Annotation> annotationList, Element element, XMLContext.Default defaults) { + JoinColumn[] joinColumns = getJoinColumns( element, false ); + if (joinColumns.length > 0) { + AnnotationDescriptor ad = new AnnotationDescriptor( JoinColumns.class ); + ad.setValue( "value", joinColumns ); + annotationList.add( AnnotationFactory.create(ad) ); + } + } + + private void getCascades(AnnotationDescriptor ad, Element element) { + List<Element> elements = element != null ? element.elements( "cascade" ) : new ArrayList<Element>(0); + List<CascadeType> cascades = new ArrayList<CascadeType>(); + for (Element subelement : elements) { + if (subelement.element( "cascade-all") != null) cascades.add( CascadeType.ALL ); + if (subelement.element( "cascade-persist") != null) cascades.add( CascadeType.PERSIST ); + if (subelement.element( "cascade-merge") != null) cascades.add( CascadeType.MERGE ); + if (subelement.element( "cascade-remove") != null) cascades.add( CascadeType.REMOVE ); + if (subelement.element( "cascade-refresh") != null) cascades.add( CascadeType.REFRESH ); + } + if (cascades.size() > 0) { + ad.setValue( "cascade", cascades.toArray( new CascadeType[ cascades.size() ] ) ); + } + } + private void getEmbedded(List<Annotation> annotationList, XMLContext.Default defaults) { for (Element element : elementsForProperty) { if ( "embedded".equals( element.getName() ) ) { @@ -343,20 +505,20 @@ annotationList.add( AnnotationFactory.create( ad ) ); } } - if ( elementsForProperty.size() == 0 ) { + if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) { Embedded annotation = super.getAnnotation( Embedded.class ); if (annotation != null) annotationList.add( annotation ); } } - private Transient getTransient() { + private Transient getTransient(XMLContext.Default defaults) { for (Element element : elementsForProperty) { if ( "transient".equals( element.getName() ) ) { AnnotationDescriptor ad = new AnnotationDescriptor( Transient.class ); return AnnotationFactory.create( ad ); } } - if ( elementsForProperty.size() == 0 ) { + if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) { return super.getAnnotation( Transient.class ); } else { @@ -398,7 +560,7 @@ getLob(annotationList, element); getEnumerated(annotationList, element); AnnotationDescriptor basic = new AnnotationDescriptor( Basic.class ); - getFetchType( basic, element.attributeValue( "fetch" ) ); + getFetchType( basic, element ); copyBooleanAttribute( basic, element, "optional" ); annotationList.add( AnnotationFactory.create( basic ) ); } @@ -447,7 +609,8 @@ } } - private void getFetchType(AnnotationDescriptor descriptor, String fetchString) { + private void getFetchType(AnnotationDescriptor descriptor, Element element) { + String fetchString = element != null ? element.attributeValue( "fetch" ) : null; if (fetchString != null) { if ( "eager".equalsIgnoreCase( fetchString ) ) { descriptor.setValue( "fetch", FetchType.EAGER); @@ -456,7 +619,6 @@ descriptor.setValue( "fetch", FetchType.LAZY); } } - } private void getEmbeddedId(List<Annotation> annotationList, XMLContext.Default defaults) { @@ -638,15 +800,17 @@ for (Element current : subelements) { AnnotationDescriptor override = new AnnotationDescriptor( AssociationOverride.class ); copyStringAttribute( override, current, "name", true ); - override.setValue( "joinColumns", getJoinColumns( current ) ); + override.setValue( "joinColumns", getJoinColumns( current, false ) ); overrides.add( (AssociationOverride) AnnotationFactory.create( override ) ); } } return overrides; } - private JoinColumn[] getJoinColumns(Element element) { - List<Element> subelements = element != null ? element.elements( "join-column" ) : null; + private JoinColumn[] getJoinColumns(Element element, boolean isInverse) { + List<Element> subelements = element != null ? + element.elements( isInverse ? "inverse-join-column" : "join-column" ) : + null; List<JoinColumn> joinColumns = new ArrayList<JoinColumn>(); if ( subelements != null) { for (Element subelement : subelements) { @@ -800,7 +964,7 @@ } private SqlResultSetMappings getSqlResultSetMappings(Element tree, XMLContext.Default defaults) { - List<SqlResultSetMapping> results = (List<SqlResultSetMapping>) buildSqlResultsetMappings( tree ); + List<SqlResultSetMapping> results = (List<SqlResultSetMapping>) buildSqlResultsetMappings( tree, defaults ); if ( defaults.canUseJavaAnnotations() ) { SqlResultSetMapping annotation = super.getAnnotation( SqlResultSetMapping.class ); addSqlResultsetMappingIfNeeded( annotation, results ); @@ -821,7 +985,7 @@ } } - private List<SqlResultSetMapping> buildSqlResultsetMappings(Element element) { + private List<SqlResultSetMapping> buildSqlResultsetMappings(Element element, XMLContext.Default defaults) { if (element == null) return new ArrayList<SqlResultSetMapping>(); List resultsetElementList = element.elements( "sql-result-set-mapping" ); List<SqlResultSetMapping> resultsets = new ArrayList<SqlResultSetMapping>(); @@ -839,7 +1003,10 @@ throw new AnnotationException("<entity-result> without entity-class. " + SCHEMA_VALIDATION); Class clazz = null; try { - clazz = ReflectHelper.classForName( clazzName, this.getClass() ); + clazz = ReflectHelper.classForName( + XMLContext.buildSafeClassName(clazzName, defaults), + this.getClass() + ); } catch( ClassNotFoundException e ) { throw new AnnotationException( "Unable to find entity-class: " + clazzName, e ); @@ -1161,7 +1328,10 @@ AnnotationDescriptor ad = new AnnotationDescriptor( IdClass.class ); Class clazz = null; try { - clazz = ReflectHelper.classForName( attr.getValue(), this.getClass() ); + clazz = ReflectHelper.classForName( + XMLContext.buildSafeClassName(attr.getValue(), defaults), + this.getClass() + ); } catch( ClassNotFoundException e ) { throw new AnnotationException( "Unable to find id-class: " + attr.getValue(), 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-04-25 17:09:09 UTC (rev 9791) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java 2006-04-25 20:56:10 UTC (rev 9792) @@ -102,6 +102,10 @@ return className; } + public static String buildSafeClassName(String className, XMLContext.Default defaults) { + return buildSafeClassName( className, defaults.getPackageName() ); + } + public Default getDefault(String className) { Default xmlDefault = new Default(); xmlDefault.override( globalDefaults ); Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Administration.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Administration.java 2006-04-25 17:09:09 UTC (rev 9791) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Administration.java 2006-04-25 20:56:10 UTC (rev 9792) @@ -6,6 +6,9 @@ import javax.persistence.Table; import javax.persistence.SecondaryTable; import javax.persistence.Basic; +import javax.persistence.OneToOne; +import javax.persistence.JoinColumns; +import javax.persistence.JoinColumn; /** * @author Emmanuel Bernard @@ -20,6 +23,8 @@ private String address; private Integer version; @Basic private String transientField; + @OneToOne @JoinColumns( { @JoinColumn(name="busNumber_fk"), @JoinColumn(name="busDriver_fk") } ) + private BusTrip defaultBusTrip; public String getAddress() { return address; Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java 2006-04-25 17:09:09 UTC (rev 9791) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java 2006-04-25 20:56:10 UTC (rev 9792) @@ -2,6 +2,8 @@ package org.hibernate.test.reflection.java.xml; import java.util.Date; +import java.util.Map; +import java.util.List; import javax.persistence.Entity; import javax.persistence.EmbeddedId; @@ -14,6 +16,8 @@ private Availability status; private byte[] serial; private Date terminusTime; + private Map<String, SocialSecurityPhysicalAccount> players; + private List roads; @EmbeddedId public BusTripPk getId() { Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java 2006-04-25 17:09:09 UTC (rev 9791) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java 2006-04-25 20:56:10 UTC (rev 9792) @@ -44,6 +44,13 @@ import javax.persistence.Version; import javax.persistence.Transient; import javax.persistence.Embedded; +import javax.persistence.OneToOne; +import javax.persistence.JoinColumns; +import javax.persistence.OneToMany; +import javax.persistence.MapKey; +import javax.persistence.ManyToMany; +import javax.persistence.JoinTable; +import javax.persistence.OrderBy; import junit.framework.TestCase; import org.dom4j.DocumentException; @@ -260,6 +267,41 @@ assertNotNull( reader.getAnnotation( Embedded.class ) ); } + public void testAssociationRelatedAnnotations() throws Exception { + XMLContext context = buildContext("org/hibernate/test/reflection/java/xml/orm.xml"); + + Field field = Administration.class.getDeclaredField( "defaultBusTrip" ); + EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( field, context ); + assertNotNull( reader.getAnnotation( OneToOne.class ) ); + assertNull( reader.getAnnotation( JoinColumns.class ) ); + assertNotNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) ); + assertEquals( "pk", reader.getAnnotation( PrimaryKeyJoinColumns.class ).value()[0].name() ); + assertEquals( 5, reader.getAnnotation( OneToOne.class ).cascade().length ); + assertEquals( FetchType.LAZY, reader.getAnnotation( OneToOne.class ).fetch() ); + assertEquals( "test", reader.getAnnotation( OneToOne.class ).mappedBy() ); + + context = buildContext("org/hibernate/test/reflection/java/xml/metadata-complete.xml"); + field = BusTrip.class.getDeclaredField( "players" ); + reader = new EJB3OverridenAnnotationReader( field, context ); + assertNotNull( reader.getAnnotation( OneToMany.class ) ); + assertNotNull( reader.getAnnotation( JoinColumns.class ) ); + assertEquals( 2, reader.getAnnotation( JoinColumns.class ).value().length ); + assertEquals( "driver", reader.getAnnotation( JoinColumns.class ).value()[0].name() ); + assertNotNull( reader.getAnnotation( MapKey.class ) ); + assertEquals( "name", reader.getAnnotation( MapKey.class ).name() ); + + field = BusTrip.class.getDeclaredField( "roads" ); + reader = new EJB3OverridenAnnotationReader( field, context ); + assertNotNull( reader.getAnnotation( ManyToMany.class ) ); + assertNotNull( reader.getAnnotation( JoinTable.class ) ); + assertEquals( "bus_road", reader.getAnnotation( JoinTable.class ).name() ); + assertEquals( 2, reader.getAnnotation( JoinTable.class ).joinColumns().length ); + assertEquals( 1, reader.getAnnotation( JoinTable.class ).inverseJoinColumns().length ); + assertEquals( 2, reader.getAnnotation( JoinTable.class ).uniqueConstraints()[0].columnNames().length ); + assertNotNull( reader.getAnnotation( OrderBy.class ) ); + assertEquals( "maxSpeed", reader.getAnnotation( OrderBy.class ).value() ); + } + private XMLContext buildContext(String ormfile) throws SAXException, DocumentException, IOException { XMLHelper xmlHelper = new XMLHelper(); ClassLoader cl = Thread.currentThread().getContextClassLoader(); Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml 2006-04-25 17:09:09 UTC (rev 9791) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml 2006-04-25 20:56:10 UTC (rev 9792) @@ -39,6 +39,23 @@ <basic name="terminusTime" fetch="LAZY"> <temporal>TIMESTAMP</temporal> </basic> + <one-to-many name="players"> + <map-key name="name"/> + <join-column name="driver"/> + <join-column name="number"/> + </one-to-many> + <many-to-many name="roads" target-entity="Administration"> + <order-by>maxSpeed</order-by> + <join-table name="bus_road"> + <join-column name="driver"/> + <join-column name="number"/> + <inverse-join-column name="road_id"/> + <unique-constraint> + <column-name>driver</column-name> + <column-name>number</column-name> + </unique-constraint> + </join-table> + </many-to-many> </attributes> </entity> <embeddable class="BusTripPk" access="FIELD"> Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml 2006-04-25 17:09:09 UTC (rev 9791) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml 2006-04-25 20:56:10 UTC (rev 9792) @@ -36,6 +36,16 @@ <sequence-generator name="generator" sequence-name="seq"/> </id> <version name="version"/> + <one-to-one name="defaultBusTrip" fetch="LAZY" mapped-by="test"> + <primary-key-join-column name="pk"/> + <cascade> + <cascade-all/> + <cascade-persist/> + <cascade-merge/> + <cascade-remove/> + <cascade-refresh/> + </cascade> + </one-to-one> <transient name="transientField"/> </attributes> </entity> |
From: <hib...@li...> - 2006-04-25 17:09:24
|
Author: epbernard Date: 2006-04-25 13:09:09 -0400 (Tue, 25 Apr 2006) New Revision: 9791 Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/Alarm.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformation.java Removed: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/AlarmT.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformationT.java Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java Log: more tests but cleaned Copied: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/Alarm.java (from rev 9790, trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/AlarmT.java) =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/AlarmT.java 2006-04-25 17:07:59 UTC (rev 9790) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/Alarm.java 2006-04-25 17:09:09 UTC (rev 9791) @@ -0,0 +1,40 @@ +//$Id: Sweater.java 8974 2006-01-04 00:43:49Z epbernard $ +package org.hibernate.test.annotations.inheritance.joined; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; +import javax.persistence.OneToOne; + +@Entity +@DiscriminatorValue("AlarmT") +public class Alarm extends EventInformation { + + protected EventInformation eventInfo; + + @OneToOne + @JoinColumns({@JoinColumn(name = "EVENTINFORMATIONT_NOTIFICATIONID", + referencedColumnName = "NOTIFICATIONID")}) + public EventInformation getEventInfo() { + return eventInfo; + } + + public void setEventInfo(EventInformation value) { + this.eventInfo = value; + } + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + String eventId = ( getEventInfo() != null ? + getEventInfo().getNotificationId() : null ); + sb.append( + "AlarmT: id = " + getNotificationId() + "\t" + + "has event id = " + eventId + ); + return sb.toString(); + } + +} Deleted: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/AlarmT.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/AlarmT.java 2006-04-25 17:07:59 UTC (rev 9790) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/AlarmT.java 2006-04-25 17:09:09 UTC (rev 9791) @@ -1,40 +0,0 @@ -//$Id: Sweater.java 8974 2006-01-04 00:43:49Z epbernard $ -package org.hibernate.test.annotations.inheritance.joined; - -import javax.persistence.DiscriminatorValue; -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.JoinColumns; -import javax.persistence.OneToOne; - -@Entity -@DiscriminatorValue("AlarmT") -public class AlarmT extends EventInformationT { - - protected EventInformationT eventInfo; - - @OneToOne - @JoinColumns({@JoinColumn(name = "EVENTINFORMATIONT_NOTIFICATIONID", - referencedColumnName = "NOTIFICATIONID")}) - public EventInformationT getEventInfo() { - return eventInfo; - } - - public void setEventInfo(EventInformationT value) { - this.eventInfo = value; - } - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - String eventId = ( getEventInfo() != null ? - getEventInfo().getNotificationId() : null ); - sb.append( - "AlarmT: id = " + getNotificationId() + "\t" + - "has event id = " + eventId - ); - return sb.toString(); - } - -} Copied: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformation.java (from rev 9790, trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformationT.java) =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformationT.java 2006-04-25 17:07:59 UTC (rev 9790) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformation.java 2006-04-25 17:09:09 UTC (rev 9791) @@ -0,0 +1,38 @@ +//$Id: Sweater.java 8974 2006-01-04 00:43:49Z epbernard $ +package org.hibernate.test.annotations.inheritance.joined; + +import javax.persistence.DiscriminatorColumn; +import javax.persistence.DiscriminatorType; +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; + + +@Entity +@Inheritance(strategy = InheritanceType.JOINED) +@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING, length = 80) +@DiscriminatorValue("EventInformationT") +public class EventInformation implements java.io.Serializable { + + + protected String notificationId; + + @Id + public String getNotificationId() { + return notificationId; + } + + public void setNotificationId(String value) { + this.notificationId = value; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append( "EventInformationT: id = " + getNotificationId() ); + return sb.toString(); + } + +} Deleted: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformationT.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformationT.java 2006-04-25 17:07:59 UTC (rev 9790) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformationT.java 2006-04-25 17:09:09 UTC (rev 9791) @@ -1,38 +0,0 @@ -//$Id: Sweater.java 8974 2006-01-04 00:43:49Z epbernard $ -package org.hibernate.test.annotations.inheritance.joined; - -import javax.persistence.DiscriminatorColumn; -import javax.persistence.DiscriminatorType; -import javax.persistence.DiscriminatorValue; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; - - -@Entity -@Inheritance(strategy = InheritanceType.JOINED) -@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING, length = 80) -@DiscriminatorValue("EventInformationT") -public class EventInformationT implements java.io.Serializable { - - - protected String notificationId; - - @Id - public String getNotificationId() { - return notificationId; - } - - public void setNotificationId(String value) { - this.notificationId = value; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append( "EventInformationT: id = " + getNotificationId() ); - return sb.toString(); - } - -} Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java 2006-04-25 17:07:59 UTC (rev 9790) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java 2006-04-25 17:09:09 UTC (rev 9791) @@ -105,30 +105,20 @@ Session session = openSession(); Transaction transaction = session.beginTransaction(); String eventPK = "event1"; - System.out.println( "*******Finding event " + eventPK ); - EventInformationT event = (EventInformationT) session.get( EventInformationT.class, eventPK ); + EventInformation event = (EventInformation) session.get( EventInformation.class, eventPK ); if ( event == null ) { - System.out.println( "Creating event " + eventPK ); - event = new EventInformationT(); + event = new EventInformation(); event.setNotificationId( eventPK ); session.persist( event ); } - else { - System.out.println( "Found " + event ); - } String alarmPK = "alarm1"; - System.out.println( "*******Finding alarm " + alarmPK ); - AlarmT alarm = (AlarmT) session.get( AlarmT.class, alarmPK ); + Alarm alarm = (Alarm) session.get( Alarm.class, alarmPK ); if ( alarm == null ) { - System.out.println( "Creating alarm " + alarmPK ); - alarm = new AlarmT(); + alarm = new Alarm(); alarm.setNotificationId( alarmPK ); alarm.setEventInfo( event ); session.persist( alarm ); } - else { - System.out.println( "Found " + alarm ); - } transaction.commit(); session.close(); } @@ -145,8 +135,8 @@ ProgramExecution.class, Clothing.class, Sweater.class, - EventInformationT.class, - AlarmT.class + EventInformation.class, + Alarm.class }; } |
From: <hib...@li...> - 2006-04-25 17:08:05
|
Author: epbernard Date: 2006-04-25 13:07:59 -0400 (Tue, 25 Apr 2006) New Revision: 9790 Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/AlarmT.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformationT.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java Removed: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/SubclassTest.java Log: more tests Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/AlarmT.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/AlarmT.java 2006-04-25 17:06:55 UTC (rev 9789) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/AlarmT.java 2006-04-25 17:07:59 UTC (rev 9790) @@ -0,0 +1,40 @@ +//$Id: Sweater.java 8974 2006-01-04 00:43:49Z epbernard $ +package org.hibernate.test.annotations.inheritance.joined; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; +import javax.persistence.OneToOne; + +@Entity +@DiscriminatorValue("AlarmT") +public class AlarmT extends EventInformationT { + + protected EventInformationT eventInfo; + + @OneToOne + @JoinColumns({@JoinColumn(name = "EVENTINFORMATIONT_NOTIFICATIONID", + referencedColumnName = "NOTIFICATIONID")}) + public EventInformationT getEventInfo() { + return eventInfo; + } + + public void setEventInfo(EventInformationT value) { + this.eventInfo = value; + } + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + String eventId = ( getEventInfo() != null ? + getEventInfo().getNotificationId() : null ); + sb.append( + "AlarmT: id = " + getNotificationId() + "\t" + + "has event id = " + eventId + ); + return sb.toString(); + } + +} Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformationT.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformationT.java 2006-04-25 17:06:55 UTC (rev 9789) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformationT.java 2006-04-25 17:07:59 UTC (rev 9790) @@ -0,0 +1,38 @@ +//$Id: Sweater.java 8974 2006-01-04 00:43:49Z epbernard $ +package org.hibernate.test.annotations.inheritance.joined; + +import javax.persistence.DiscriminatorColumn; +import javax.persistence.DiscriminatorType; +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; + + +@Entity +@Inheritance(strategy = InheritanceType.JOINED) +@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING, length = 80) +@DiscriminatorValue("EventInformationT") +public class EventInformationT implements java.io.Serializable { + + + protected String notificationId; + + @Id + public String getNotificationId() { + return notificationId; + } + + public void setNotificationId(String value) { + this.notificationId = value; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append( "EventInformationT: id = " + getNotificationId() ); + return sb.toString(); + } + +} Copied: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java (from rev 9709, trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/SubclassTest.java) =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/SubclassTest.java 2006-03-29 03:32:24 UTC (rev 9709) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java 2006-04-25 17:07:59 UTC (rev 9790) @@ -0,0 +1,153 @@ +//$Id$ +package org.hibernate.test.annotations.inheritance.joined; + +import java.util.List; + +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.hibernate.test.annotations.TestCase; + +/** + * @author Emmanuel Bernard + */ +public class JoinedSubclassTest extends TestCase { + + public JoinedSubclassTest(String x) { + super( x ); + } + + public void testDefault() throws Exception { + Session s; + Transaction tx; + s = openSession(); + tx = s.beginTransaction(); + File doc = new Document( "Enron Stuff To Shred", 1000 ); + Folder folder = new Folder( "Enron" ); + s.persist( doc ); + s.persist( folder ); + tx.commit(); + s.close(); + + s = openSession(); + tx = s.beginTransaction(); + List result = s.createCriteria( File.class ).list(); + assertNotNull( result ); + assertEquals( 2, result.size() ); + File f2 = (File) result.get( 0 ); + checkClassType( f2, doc, folder ); + f2 = (File) result.get( 1 ); + checkClassType( f2, doc, folder ); + s.delete( result.get( 0 ) ); + s.delete( result.get( 1 ) ); + tx.commit(); + s.close(); + } + + public void testManyToOneOnAbstract() throws Exception { + Folder f = new Folder(); + f.setName( "data" ); + ProgramExecution remove = new ProgramExecution(); + remove.setAction( "remove" ); + remove.setAppliesOn( f ); + Session s; + Transaction tx; + s = openSession(); + tx = s.beginTransaction(); + s.persist( f ); + s.persist( remove ); + tx.commit(); + s.clear(); + tx = s.beginTransaction(); + remove = (ProgramExecution) s.get( ProgramExecution.class, remove.getId() ); + assertNotNull( remove ); + assertNotNull( remove.getAppliesOn().getName() ); + s.delete( remove ); + s.delete( remove.getAppliesOn() ); + tx.commit(); + s.close(); + + } + + private void checkClassType(File fruitToTest, File f, Folder a) { + if ( fruitToTest.getName().equals( f.getName() ) ) { + assertFalse( fruitToTest instanceof Folder ); + } + else if ( fruitToTest.getName().equals( a.getName() ) ) { + assertTrue( fruitToTest instanceof Folder ); + } + else { + fail( "Result does not contains the previously inserted elements" ); + } + } + + public void testJoinedAbstractClass() throws Exception { + Session s; + Transaction tx; + s = openSession(); + s.getTransaction().begin(); + Sweater sw = new Sweater(); + sw.setColor( "Black" ); + sw.setSize( 2 ); + sw.setSweat( true ); + s.persist( sw ); + s.getTransaction().commit(); + s.clear(); + + s = openSession(); + s.getTransaction().begin(); + sw = (Sweater) s.get( Sweater.class, sw.getId() ); + s.delete( sw ); + s.getTransaction().commit(); + s.close(); + } + + public void testInheritance() throws Exception { + Session session = openSession(); + Transaction transaction = session.beginTransaction(); + String eventPK = "event1"; + System.out.println( "*******Finding event " + eventPK ); + EventInformationT event = (EventInformationT) session.get( EventInformationT.class, eventPK ); + if ( event == null ) { + System.out.println( "Creating event " + eventPK ); + event = new EventInformationT(); + event.setNotificationId( eventPK ); + session.persist( event ); + } + else { + System.out.println( "Found " + event ); + } + String alarmPK = "alarm1"; + System.out.println( "*******Finding alarm " + alarmPK ); + AlarmT alarm = (AlarmT) session.get( AlarmT.class, alarmPK ); + if ( alarm == null ) { + System.out.println( "Creating alarm " + alarmPK ); + alarm = new AlarmT(); + alarm.setNotificationId( alarmPK ); + alarm.setEventInfo( event ); + session.persist( alarm ); + } + else { + System.out.println( "Found " + alarm ); + } + transaction.commit(); + session.close(); + } + + /** + * @see org.hibernate.test.annotations.TestCase#getMappings() + */ + protected Class[] getMappings() { + return new Class[]{ + File.class, + Folder.class, + Document.class, + SymbolicLink.class, + ProgramExecution.class, + Clothing.class, + Sweater.class, + EventInformationT.class, + AlarmT.class + }; + } + +} Property changes on: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java ___________________________________________________________________ Name: svn:executable + * Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Deleted: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/SubclassTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/SubclassTest.java 2006-04-25 17:06:55 UTC (rev 9789) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/joined/SubclassTest.java 2006-04-25 17:07:59 UTC (rev 9790) @@ -1,117 +0,0 @@ -//$Id$ -package org.hibernate.test.annotations.inheritance.joined; - -import java.util.List; - -import org.hibernate.Session; -import org.hibernate.Transaction; -import org.hibernate.test.annotations.TestCase; - -/** - * @author Emmanuel Bernard - */ -public class SubclassTest extends TestCase { - - public SubclassTest(String x) { - super(x); - } - - public void testDefault() throws Exception { - Session s; - Transaction tx; - s = openSession(); - tx = s.beginTransaction(); - File doc = new Document("Enron Stuff To Shred", 1000); - Folder folder = new Folder("Enron"); - s.persist(doc); - s.persist(folder); - tx.commit(); - s.close(); - - s = openSession(); - tx = s.beginTransaction(); - List result = s.createCriteria(File.class).list(); - assertNotNull(result); - assertEquals( 2, result.size() ); - File f2 = (File) result.get(0); - checkClassType(f2, doc, folder); - f2 = (File) result.get(1); - checkClassType(f2, doc, folder); - s.delete( result.get(0) ); - s.delete( result.get(1) ); - tx.commit(); - s.close(); - } - - public void testManyToOneOnAbstract() throws Exception { - Folder f = new Folder(); - f.setName("data"); - ProgramExecution remove = new ProgramExecution(); - remove.setAction("remove"); - remove.setAppliesOn(f); - Session s; - Transaction tx; - s = openSession(); - tx = s.beginTransaction(); - s.persist(f); - s.persist(remove); - tx.commit(); - s.clear(); - tx = s.beginTransaction(); - remove = (ProgramExecution) s.get( ProgramExecution.class, remove.getId() ); - assertNotNull(remove); - assertNotNull( remove.getAppliesOn().getName() ); - s.delete( remove ); - s.delete( remove.getAppliesOn() ); - tx.commit(); - s.close(); - - } - - private void checkClassType(File fruitToTest, File f, Folder a) { - if ( fruitToTest.getName().equals( f.getName() ) ) { - assertFalse(fruitToTest instanceof Folder); - } else if ( fruitToTest.getName().equals( a.getName() ) ) { - assertTrue(fruitToTest instanceof Folder); - } else { - fail("Result does not contains the previously inserted elements"); - } - } - - public void testJoinedAbstractClass() throws Exception { - Session s; - Transaction tx; - s = openSession(); - s.getTransaction().begin(); - Sweater sw = new Sweater(); - sw.setColor( "Black" ); - sw.setSize( 2 ); - sw.setSweat( true ); - s.persist( sw ); - s.getTransaction().commit(); - s.clear(); - - s = openSession(); - s.getTransaction().begin(); - sw = (Sweater) s.get( Sweater.class, sw.getId() ); - s.delete( sw ); - s.getTransaction().commit(); - s.close(); - } - - /** - * @see org.hibernate.test.annotations.TestCase#getMappings() - */ - protected Class[] getMappings() { - return new Class[] { - File.class, - Folder.class, - Document.class, - SymbolicLink.class, - ProgramExecution.class, - Clothing.class, - Sweater.class - }; - } - -} |
From: <hib...@li...> - 2006-04-25 17:07:03
|
Author: epbernard Date: 2006-04-25 13:06:55 -0400 (Tue, 25 Apr 2006) New Revision: 9789 Modified: trunk/Hibernate3/src/org/hibernate/dialect/DialectFactory.java Log: Add Derby to the autodiscovery mechanism Modified: trunk/Hibernate3/src/org/hibernate/dialect/DialectFactory.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/dialect/DialectFactory.java 2006-04-25 13:05:16 UTC (rev 9788) +++ trunk/Hibernate3/src/org/hibernate/dialect/DialectFactory.java 2006-04-25 17:06:55 UTC (rev 9789) @@ -1,14 +1,14 @@ // $Id$ package org.hibernate.dialect; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import org.hibernate.HibernateException; import org.hibernate.cfg.Environment; -import org.hibernate.HibernateException; import org.hibernate.util.ReflectHelper; -import java.util.Properties; -import java.util.Map; -import java.util.HashMap; - /** * A factory for generating Dialect instances. * @@ -120,6 +120,7 @@ MAPPERS.put( "Microsoft SQL Server", new VersionInsensitiveMapper( "org.hibernate.dialect.SQLServerDialect" ) ); MAPPERS.put( "Sybase SQL Server", new VersionInsensitiveMapper( "org.hibernate.dialect.SybaseDialect" ) ); MAPPERS.put( "Informix Dynamic Server", new VersionInsensitiveMapper( "org.hibernate.dialect.InformixDialect" ) ); + MAPPERS.put( "Apache Derby", new VersionInsensitiveMapper( "org.hibernate.dialect.DerbyDialect" ) ); MAPPERS.put( "Oracle", |
Author: epbernard Date: 2006-04-25 09:05:16 -0400 (Tue, 25 Apr 2006) New Revision: 9788 Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Shoe.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Sneaker.java Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/SingleTableTest.java Log: ANN-321 correct discriminator column lenght when defaults occurs Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java 2006-04-25 02:10:52 UTC (rev 9787) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java 2006-04-25 13:05:16 UTC (rev 9788) @@ -19,6 +19,7 @@ private static final String DEFAULT_DISCRIMINATOR_TYPE = "string"; private String discriminatorTypeName; + private static final int DEFAULT_DISCRIMINATOR_LENGTH = 31; public Ejb3DiscriminatorColumn() { //discriminator default value @@ -26,6 +27,7 @@ setLogicalColumnName( DEFAULT_DISCRIMINATOR_COLUMN_NAME ); setNullable( false ); setDiscriminatorTypeName( DEFAULT_DISCRIMINATOR_TYPE ); + setLength( DEFAULT_DISCRIMINATOR_LENGTH ); } public String getDiscriminatorTypeName() { Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-25 02:10:52 UTC (rev 9787) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-25 13:05:16 UTC (rev 9788) @@ -60,6 +60,8 @@ import javax.persistence.Version; import javax.persistence.Transient; import javax.persistence.Embedded; +import javax.persistence.ManyToOne; +import javax.persistence.JoinTable; import org.dom4j.Attribute; import org.dom4j.Element; @@ -306,6 +308,7 @@ getEmbedded( annotationList, defaults ); getBasic( annotationList, defaults ); getVersion( annotationList, defaults ); + getManyToOne( annotationList, defaults ); } this.annotations = annotationList.toArray( new Annotation[ annotationList.size() ] ); } @@ -315,6 +318,24 @@ } } + private void getManyToOne(List<Annotation> annotationList, XMLContext.Default defaults) { + for (Element element : elementsForProperty) { + if ( "embedded".equals( element.getName() ) ) { + AnnotationDescriptor ad = new AnnotationDescriptor( Embedded.class ); + annotationList.add( AnnotationFactory.create( ad ) ); + } + } + if ( elementsForProperty.size() == 0 ) { + Annotation annotation = super.getAnnotation( ManyToOne.class ); + if (annotation != null) { + annotationList.add( annotation ); + annotation = super.getAnnotation( JoinTable.class ); + if (annotation != null) annotationList.add( annotation ); + } + + } + } + private void getEmbedded(List<Annotation> annotationList, XMLContext.Default defaults) { for (Element element : elementsForProperty) { if ( "embedded".equals( element.getName() ) ) { Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Shoe.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Shoe.java 2006-04-25 02:10:52 UTC (rev 9787) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Shoe.java 2006-04-25 13:05:16 UTC (rev 9788) @@ -0,0 +1,15 @@ +//$Id: $ +package org.hibernate.test.annotations.inheritance.singletable; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Entity; + +/** + * @author Emmanuel Bernard + */ +@Entity +public class Shoe { + public Integer size; + @Id @GeneratedValue public Integer id; +} Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/SingleTableTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/SingleTableTest.java 2006-04-25 02:10:52 UTC (rev 9787) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/SingleTableTest.java 2006-04-25 13:05:16 UTC (rev 9788) @@ -79,6 +79,31 @@ s.close(); } + public void testDefaultDiscriminatorColumn() { + Session s; + Transaction tx; + s = openSession(); + tx = s.beginTransaction(); + Shoe t = new Shoe(); + Sneaker pt = new Sneaker(); + s.persist(t); + s.persist(pt); + tx.commit(); + s.close(); + + s = openSession(); + tx = s.beginTransaction(); + //correct behavior but the test fails on HSQLDB + //assertEquals( 0, s.createQuery( "select count(*) from Shoe f where f.class = :disc") + // .setString( "disc", "1234567890123456789012345678901" ).uniqueResult() ); + List result = s.createCriteria(Shoe.class).list(); + assertNotNull(result); + s.delete( result.get(0) ); + s.delete( result.get(1) ); + tx.commit(); + s.close(); + } + private void checkClassType(Fruit fruitToTest, Fruit f, Apple a) { if ( fruitToTest.getId().equals( f.getId() ) ) { assertFalse(fruitToTest instanceof Apple); @@ -97,7 +122,9 @@ Fruit.class, Apple.class, Trash.class, - PaperTrash.class + PaperTrash.class, + Sneaker.class, + Shoe.class }; } } Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Sneaker.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Sneaker.java 2006-04-25 02:10:52 UTC (rev 9787) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Sneaker.java 2006-04-25 13:05:16 UTC (rev 9788) @@ -0,0 +1,13 @@ +//$Id: $ +package org.hibernate.test.annotations.inheritance.singletable; + +import javax.persistence.Entity; +import javax.persistence.DiscriminatorValue; + +/** + * @author Emmanuel Bernard + */ +@Entity +@DiscriminatorValue("123456789012345678901234567890123") +public class Sneaker extends Shoe { +} |
From: <hib...@li...> - 2006-04-25 02:10:56
|
Author: epbernard Date: 2006-04-24 22:10:52 -0400 (Mon, 24 Apr 2006) New Revision: 9787 Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Administration.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Match.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml Log: XML overriding: support for <embedded> and <transient> Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-25 00:49:30 UTC (rev 9786) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-25 02:10:52 UTC (rev 9787) @@ -57,6 +57,9 @@ import javax.persistence.Basic; import javax.persistence.FetchType; import javax.persistence.EnumType; +import javax.persistence.Version; +import javax.persistence.Transient; +import javax.persistence.Embedded; import org.dom4j.Attribute; import org.dom4j.Element; @@ -127,6 +130,10 @@ annotationToXml.put( Temporal.class, "temporal" ); annotationToXml.put( Lob.class, "lob" ); annotationToXml.put( Enumerated.class, "enumerated"); + annotationToXml.put( Version.class, "version"); + annotationToXml.put( Transient.class, "transient"); + annotationToXml.put( Basic.class, "basic"); + annotationToXml.put( Embedded.class, "embedded"); } private XMLContext xmlContext; @@ -289,9 +296,17 @@ } } preCalculateElementsForProperty(tree); - getId( annotationList, defaults ); - getEmbeddedId( annotationList, defaults ); - getBasic( annotationList, defaults ); + Transient transientAnn = getTransient(); + if (transientAnn != null) { + annotationList.add( transientAnn ); + } + else { + getId( annotationList, defaults ); + getEmbeddedId( annotationList, defaults ); + getEmbedded( annotationList, defaults ); + getBasic( annotationList, defaults ); + getVersion( annotationList, defaults ); + } this.annotations = annotationList.toArray( new Annotation[ annotationList.size() ] ); } else { @@ -300,6 +315,59 @@ } } + private void getEmbedded(List<Annotation> annotationList, XMLContext.Default defaults) { + for (Element element : elementsForProperty) { + if ( "embedded".equals( element.getName() ) ) { + AnnotationDescriptor ad = new AnnotationDescriptor( Embedded.class ); + annotationList.add( AnnotationFactory.create( ad ) ); + } + } + if ( elementsForProperty.size() == 0 ) { + Embedded annotation = super.getAnnotation( Embedded.class ); + if (annotation != null) annotationList.add( annotation ); + } + } + + private Transient getTransient() { + for (Element element : elementsForProperty) { + if ( "transient".equals( element.getName() ) ) { + AnnotationDescriptor ad = new AnnotationDescriptor( Transient.class ); + return AnnotationFactory.create( ad ); + } + } + if ( elementsForProperty.size() == 0 ) { + return super.getAnnotation( Transient.class ); + } + else { + return null; + } + } + + private void getVersion(List<Annotation> annotationList, XMLContext.Default defaults) { + for (Element element : elementsForProperty) { + if ( "version".equals( element.getName() ) ) { + Annotation annotation = buildColumns( element ); + if (annotation != null) annotationList.add(annotation); + getTemporal(annotationList, element); + AnnotationDescriptor basic = new AnnotationDescriptor( Version.class ); + annotationList.add( AnnotationFactory.create( basic ) ); + } + } + if ( elementsForProperty.size() == 0 ) { + //we have nothing, so Java annotations might occurs + if ( defaults.canUseJavaAnnotations() ) { + Annotation annotation = super.getAnnotation( Version.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Column.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Columns.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Temporal.class ); + if (annotation != null) annotationList.add(annotation); + } + } + } + private void getBasic(List<Annotation> annotationList, XMLContext.Default defaults) { for (Element element : elementsForProperty) { if ( "basic".equals( element.getName() ) ) { @@ -401,9 +469,11 @@ private void preCalculateElementsForProperty(Element tree) { elementsForProperty = new ArrayList<Element>(); Element element = tree != null ? tree.element( "attributes" ) : null; - for ( Element subelement : (List<Element>) element.elements() ) { - if ( propertyName.equals( subelement.attributeValue("name") ) ) { - elementsForProperty.add( subelement ); + if (element != null) { + for ( Element subelement : (List<Element>) element.elements() ) { + if ( propertyName.equals( subelement.attributeValue("name") ) ) { + elementsForProperty.add( subelement ); + } } } } Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Administration.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Administration.java 2006-04-25 00:49:30 UTC (rev 9786) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Administration.java 2006-04-25 02:10:52 UTC (rev 9787) @@ -5,6 +5,7 @@ import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.SecondaryTable; +import javax.persistence.Basic; /** * @author Emmanuel Bernard @@ -17,7 +18,25 @@ private String firstname; private String lastname; private String address; + private Integer version; + @Basic private String transientField; + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public Integer getVersion() { + return version; + } + + public void setVersion(Integer version) { + this.version = version; + } + public String getFirstname() { return firstname; } Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java 2006-04-25 00:49:30 UTC (rev 9786) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java 2006-04-25 02:10:52 UTC (rev 9787) @@ -4,16 +4,30 @@ import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; -import java.lang.reflect.Field; -import java.lang.reflect.Method; +import javax.persistence.AssociationOverrides; +import javax.persistence.AttributeOverrides; +import javax.persistence.Basic; +import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorValue; +import javax.persistence.EmbeddedId; import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.ExcludeDefaultListeners; +import javax.persistence.ExcludeSuperclassListeners; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; +import javax.persistence.Lob; import javax.persistence.MappedSuperclass; import javax.persistence.NamedNativeQueries; import javax.persistence.NamedQueries; @@ -25,31 +39,20 @@ import javax.persistence.SqlResultSetMappings; import javax.persistence.Table; import javax.persistence.TableGenerator; -import javax.persistence.ExcludeSuperclassListeners; -import javax.persistence.ExcludeDefaultListeners; -import javax.persistence.AttributeOverrides; -import javax.persistence.AssociationOverrides; -import javax.persistence.Id; -import javax.persistence.Column; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; import javax.persistence.Temporal; import javax.persistence.TemporalType; -import javax.persistence.EmbeddedId; -import javax.persistence.Enumerated; -import javax.persistence.EnumType; -import javax.persistence.Lob; -import javax.persistence.Basic; -import javax.persistence.FetchType; +import javax.persistence.Version; +import javax.persistence.Transient; +import javax.persistence.Embedded; import junit.framework.TestCase; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; +import org.hibernate.annotations.Columns; import org.hibernate.cfg.EJB3DTDEntityResolver; import org.hibernate.reflection.java.EJB3OverridenAnnotationReader; import org.hibernate.reflection.java.xml.XMLContext; import org.hibernate.util.XMLHelper; -import org.hibernate.annotations.Columns; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXNotSupportedException; @@ -233,6 +236,30 @@ assertNotNull( reader.isAnnotationPresent( Basic.class ) ); } + public void testVersionRelatedAnnotations() throws Exception { + XMLContext context = buildContext("org/hibernate/test/reflection/java/xml/orm.xml"); + Method method = Administration.class.getDeclaredMethod( "getVersion" ); + EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( method, context ); + assertNotNull( reader.getAnnotation( Version.class ) ); + + Field field = Match.class.getDeclaredField( "version" ); + reader = new EJB3OverridenAnnotationReader( field, context ); + assertNotNull( reader.getAnnotation( Version.class ) ); + } + + public void testTransientAndEmbeddedRelatedAnnotations() throws Exception { + XMLContext context = buildContext("org/hibernate/test/reflection/java/xml/orm.xml"); + + Field field = Administration.class.getDeclaredField( "transientField" ); + EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( field, context ); + assertNotNull( reader.getAnnotation( Transient.class ) ); + assertNull( reader.getAnnotation( Basic.class ) ); + + field = Match.class.getDeclaredField( "playerASSN" ); + reader = new EJB3OverridenAnnotationReader( field, context ); + assertNotNull( reader.getAnnotation( Embedded.class ) ); + } + private XMLContext buildContext(String ormfile) throws SAXException, DocumentException, IOException { XMLHelper xmlHelper = new XMLHelper(); ClassLoader cl = Thread.currentThread().getContextClassLoader(); Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Match.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Match.java 2006-04-25 00:49:30 UTC (rev 9786) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Match.java 2006-04-25 02:10:52 UTC (rev 9787) @@ -10,6 +10,7 @@ import javax.persistence.NamedQueries; import javax.persistence.NamedNativeQueries; import javax.persistence.NamedNativeQuery; +import javax.persistence.Version; /** * @author Emmanuel Bernard @@ -28,4 +29,6 @@ }) public class Match extends Competition { public String competitor1Point; + @Version public Integer version; + public SocialSecurityNumber playerASSN; } Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml 2006-04-25 00:49:30 UTC (rev 9786) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml 2006-04-25 02:10:52 UTC (rev 9787) @@ -35,6 +35,8 @@ <temporal>DATE</temporal> <sequence-generator name="generator" sequence-name="seq"/> </id> + <version name="version"/> + <transient name="transientField"/> </attributes> </entity> <entity class="Match"> @@ -63,6 +65,9 @@ </sql-result-set-mapping> <exclude-default-listeners/> <exclude-superclass-listeners/> + <attributes> + <embedded name="playerASSN"/> + </attributes> </entity> <entity class="TennisMatch"> <primary-key-join-column name="id"/> |
From: <hib...@li...> - 2006-04-25 00:49:36
|
Author: epbernard Date: 2006-04-24 20:49:30 -0400 (Mon, 24 Apr 2006) New Revision: 9786 Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Availability.java Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml Log: XML overriding: support for <basic> Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-24 23:35:11 UTC (rev 9785) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-25 00:49:30 UTC (rev 9786) @@ -55,6 +55,8 @@ import javax.persistence.Lob; import javax.persistence.Enumerated; import javax.persistence.Basic; +import javax.persistence.FetchType; +import javax.persistence.EnumType; import org.dom4j.Attribute; import org.dom4j.Element; @@ -301,34 +303,15 @@ private void getBasic(List<Annotation> annotationList, XMLContext.Default defaults) { for (Element element : elementsForProperty) { if ( "basic".equals( element.getName() ) ) { - boolean properAccessOnMetadataComplete = computeProperAccessOnMetadataComplete( defaults ); - boolean properOverridingOnMetadataNonComplete = computeProperOverridingOnMetadataComplete( defaults ); - if ( properAccessOnMetadataComplete || properOverridingOnMetadataNonComplete ) { - Annotation annotation = buildColumns( element ); - if (annotation != null) annotationList.add(annotation); - annotation = buildGeneratedValue(element); - if (annotation != null) annotationList.add(annotation); - annotation = buildTemporal(element); - if (annotation != null) annotationList.add(annotation); - //FIXME: fix the priority of xml over java for generator names - annotation = getTableGenerator( element, defaults ); - if (annotation != null) annotationList.add(annotation); - annotation = getSequenceGenerator( element, defaults ); - if (annotation != null) annotationList.add(annotation); - AnnotationDescriptor id = new AnnotationDescriptor( Id.class ); - annotationList.add( AnnotationFactory.create( id ) ); - } - else { - if ( defaults.canUseJavaAnnotations() ) { - if (! properOverridingOnMetadataNonComplete) { - //check that id exists on the other attribute - //TODO EmbeddedId too? - if (mirroredAttribute == null || ! mirroredAttribute.isAnnotationPresent( Id.class ) ) { - throw new AnnotationException("Cannot override an property with <id> it does not have an @Id already"); - } - } - } - } + Annotation annotation = buildColumns( element ); + if (annotation != null) annotationList.add(annotation); + getTemporal(annotationList, element); + getLob(annotationList, element); + getEnumerated(annotationList, element); + AnnotationDescriptor basic = new AnnotationDescriptor( Basic.class ); + getFetchType( basic, element.attributeValue( "fetch" ) ); + copyBooleanAttribute( basic, element, "optional" ); + annotationList.add( AnnotationFactory.create( basic ) ); } } if ( elementsForProperty.size() == 0 ) { @@ -350,6 +333,43 @@ } } + private void getEnumerated(List<Annotation> annotationList, Element element) { + Element subElement = element != null ? element.element( "enumerated" ) : null; + if (subElement != null) { + AnnotationDescriptor ad = new AnnotationDescriptor( Enumerated.class ); + String enumerated = subElement.getTextTrim(); + if ( "ORDINAL".equalsIgnoreCase( enumerated ) ) { + ad.setValue( "value", EnumType.ORDINAL ); + } + else if ( "STRING".equalsIgnoreCase( enumerated ) ) { + ad.setValue( "value", EnumType.STRING ); + } + else if ( StringHelper.isNotEmpty( enumerated ) ) { + throw new AnnotationException( "Unknown EnumType: " + enumerated + ". " + SCHEMA_VALIDATION); + } + annotationList.add( AnnotationFactory.create( ad ) ); + } + } + + private void getLob(List<Annotation> annotationList, Element element) { + Element subElement = element != null ? element.element( "lob" ) : null; + if (subElement != null) { + annotationList.add( AnnotationFactory.create( new AnnotationDescriptor( Lob.class ) ) ); + } + } + + private void getFetchType(AnnotationDescriptor descriptor, String fetchString) { + if (fetchString != null) { + if ( "eager".equalsIgnoreCase( fetchString ) ) { + descriptor.setValue( "fetch", FetchType.EAGER); + } + else if ( "lazy".equalsIgnoreCase( fetchString ) ) { + descriptor.setValue( "fetch", FetchType.LAZY); + } + } + + } + private void getEmbeddedId(List<Annotation> annotationList, XMLContext.Default defaults) { for (Element element : elementsForProperty) { if ( "embedded-id".equals( element.getName() ) ) { @@ -398,8 +418,7 @@ if (annotation != null) annotationList.add(annotation); annotation = buildGeneratedValue(element); if (annotation != null) annotationList.add(annotation); - annotation = buildTemporal(element); - if (annotation != null) annotationList.add(annotation); + getTemporal(annotationList, element); //FIXME: fix the priority of xml over java for generator names annotation = getTableGenerator( element, defaults ); if (annotation != null) annotationList.add(annotation); @@ -478,28 +497,25 @@ } } - private Temporal buildTemporal(Element element) { + private void getTemporal(List<Annotation> annotationList, Element element) { Element subElement = element != null ? element.element( "temporal" ) : null; if (subElement != null) { - AnnotationDescriptor ad = new AnnotationDescriptor( Temporal.class ); - String temporal = subElement.getTextTrim(); - if ( "DATE".equalsIgnoreCase( temporal ) ) { - ad.setValue( "value", TemporalType.DATE ); - } - else if ( "TIME".equalsIgnoreCase( temporal ) ) { - ad.setValue( "value", TemporalType.TIME ); - } - else if ( "TIMESTAMP".equalsIgnoreCase( temporal ) ) { - ad.setValue( "value", TemporalType.TIMESTAMP ); - } - else if ( StringHelper.isNotEmpty( temporal ) ) { - throw new AnnotationException( "Unknown TemporalType: " + temporal+ ". " + SCHEMA_VALIDATION); - } - return AnnotationFactory.create( ad ); + AnnotationDescriptor ad = new AnnotationDescriptor( Temporal.class ); + String temporal = subElement.getTextTrim(); + if ( "DATE".equalsIgnoreCase( temporal ) ) { + ad.setValue( "value", TemporalType.DATE ); + } + else if ( "TIME".equalsIgnoreCase( temporal ) ) { + ad.setValue( "value", TemporalType.TIME ); + } + else if ( "TIMESTAMP".equalsIgnoreCase( temporal ) ) { + ad.setValue( "value", TemporalType.TIMESTAMP ); + } + else if ( StringHelper.isNotEmpty( temporal ) ) { + throw new AnnotationException( "Unknown TemporalType: " + temporal+ ". " + SCHEMA_VALIDATION); + } + annotationList.add( AnnotationFactory.create( ad ) ); } - else { - return null; - } } private AssociationOverrides getAssociationOverrides(Element tree, XMLContext.Default defaults) { Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Availability.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Availability.java 2006-04-24 23:35:11 UTC (rev 9785) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/Availability.java 2006-04-25 00:49:30 UTC (rev 9786) @@ -0,0 +1,10 @@ +//$Id: $ +package org.hibernate.test.reflection.java.xml; + +/** + * @author Emmanuel Bernard + */ +public enum Availability { + ON_DUTY, + NO_SERVICE +} Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java 2006-04-24 23:35:11 UTC (rev 9785) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java 2006-04-25 00:49:30 UTC (rev 9786) @@ -1,6 +1,7 @@ //$Id: $ package org.hibernate.test.reflection.java.xml; +import java.util.Date; import javax.persistence.Entity; import javax.persistence.EmbeddedId; @@ -10,6 +11,9 @@ @Entity public class BusTrip { private BusTripPk id; + private Availability status; + private byte[] serial; + private Date terminusTime; @EmbeddedId public BusTripPk getId() { @@ -19,4 +23,28 @@ public void setId(BusTripPk id) { this.id = id; } + + public Availability getStatus() { + return status; + } + + public void setStatus(Availability status) { + this.status = status; + } + + public byte[] getSerial() { + return serial; + } + + public void setSerial(byte[] serial) { + this.serial = serial; + } + + public Date getTerminusTime() { + return terminusTime; + } + + public void setTerminusTime(Date terminusTime) { + this.terminusTime = terminusTime; + } } Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java 2006-04-24 23:35:11 UTC (rev 9785) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java 2006-04-25 00:49:30 UTC (rev 9786) @@ -36,6 +36,11 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.EmbeddedId; +import javax.persistence.Enumerated; +import javax.persistence.EnumType; +import javax.persistence.Lob; +import javax.persistence.Basic; +import javax.persistence.FetchType; import junit.framework.TestCase; import org.dom4j.DocumentException; @@ -206,6 +211,28 @@ assertEquals( 1, reader.getAnnotation( AttributeOverrides.class ).value().length ); } + public void testBasicRelatedAnnotations() throws Exception { + XMLContext context = buildContext("org/hibernate/test/reflection/java/xml/metadata-complete.xml"); + Field field = BusTrip.class.getDeclaredField( "status" ); + EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( field, context ); + assertNotNull( reader.getAnnotation( Enumerated.class ) ); + assertEquals( EnumType.STRING, reader.getAnnotation( Enumerated.class ).value() ); + assertEquals( false, reader.getAnnotation( Basic.class ).optional() ); + field = BusTrip.class.getDeclaredField( "serial" ); + reader = new EJB3OverridenAnnotationReader( field, context ); + assertNotNull( reader.getAnnotation( Lob.class ) ); + assertEquals( "serialbytes", reader.getAnnotation( Columns.class ).columns()[0].name() ); + field = BusTrip.class.getDeclaredField( "terminusTime" ); + reader = new EJB3OverridenAnnotationReader( field, context ); + assertNotNull( reader.getAnnotation( Temporal.class ) ); + assertEquals( TemporalType.TIMESTAMP, reader.getAnnotation( Temporal.class ).value() ); + assertEquals( FetchType.LAZY, reader.getAnnotation( Basic.class ).fetch() ); + + field = BusTripPk.class.getDeclaredField( "busDriver" ); + reader = new EJB3OverridenAnnotationReader( field, context ); + assertNotNull( reader.isAnnotationPresent( Basic.class ) ); + } + private XMLContext buildContext(String ormfile) throws SAXException, DocumentException, IOException { XMLHelper xmlHelper = new XMLHelper(); ClassLoader cl = Thread.currentThread().getContextClassLoader(); Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml 2006-04-24 23:35:11 UTC (rev 9785) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml 2006-04-25 00:49:30 UTC (rev 9786) @@ -29,6 +29,16 @@ <column name="fld_busdriver"/> </attribute-override> </embedded-id> + <basic name="status" optional="false"> + <enumerated>STRING</enumerated> + </basic> + <basic name="serial" optional="true"> + <column name="serialbytes"/> + <lob/> + </basic> + <basic name="terminusTime" fetch="LAZY"> + <temporal>TIMESTAMP</temporal> + </basic> </attributes> </entity> <embeddable class="BusTripPk" access="FIELD"> |
From: <hib...@li...> - 2006-04-24 23:35:17
|
Author: epbernard Date: 2006-04-24 19:35:11 -0400 (Mon, 24 Apr 2006) New Revision: 9785 Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTripPk.java Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXClass.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXFactory.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml Log: XML overriding: support for <id> <embedded-id> Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-24 23:33:25 UTC (rev 9784) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-24 23:35:11 UTC (rev 9785) @@ -2,6 +2,7 @@ import java.beans.Introspector; import java.lang.annotation.Annotation; +import java.lang.reflect.AccessibleObject; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -25,6 +26,9 @@ import javax.persistence.ExcludeDefaultListeners; import javax.persistence.ExcludeSuperclassListeners; import javax.persistence.FieldResult; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; @@ -44,7 +48,13 @@ import javax.persistence.SqlResultSetMappings; import javax.persistence.Table; import javax.persistence.TableGenerator; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; import javax.persistence.UniqueConstraint; +import javax.persistence.EmbeddedId; +import javax.persistence.Lob; +import javax.persistence.Enumerated; +import javax.persistence.Basic; import org.dom4j.Attribute; import org.dom4j.Element; @@ -52,6 +62,7 @@ import org.hibernate.annotationfactory.AnnotationDescriptor; import org.hibernate.annotationfactory.AnnotationFactory; import org.hibernate.annotations.AccessType; +import org.hibernate.annotations.Columns; import org.hibernate.reflection.Filter; import org.hibernate.reflection.java.xml.XMLContext; import org.hibernate.util.ReflectHelper; @@ -106,16 +117,32 @@ annotationToXml.put( AttributeOverrides.class, "attribute-override" ); annotationToXml.put( AttributeOverride.class, "association-override" ); annotationToXml.put( AttributeOverrides.class, "association-override" ); + annotationToXml.put( Id.class, "id" ); + annotationToXml.put( EmbeddedId.class, "embedded-id" ); + annotationToXml.put( GeneratedValue.class, "generated-value" ); + annotationToXml.put( Column.class, "column" ); + annotationToXml.put( Columns.class, "column" ); + annotationToXml.put( Temporal.class, "temporal" ); + annotationToXml.put( Lob.class, "lob" ); + annotationToXml.put( Enumerated.class, "enumerated"); } private XMLContext xmlContext; private String className; private String propertyName; - private boolean isField; + private PropertyType propertyType; private boolean isFieldAccess; private transient Annotation[] annotations; private static final String WORD_SEPARATOR = "-"; + private transient List<Element> elementsForProperty; + private AccessibleObject mirroredAttribute; + private enum PropertyType { + PROPERTY, + FIELD, + METHOD + } + public EJB3OverridenAnnotationReader(AnnotatedElement el, XMLContext xmlContext) { super( el ); this.xmlContext = xmlContext; @@ -124,11 +151,21 @@ className = clazz.getName(); } else if ( el instanceof Field ) { - propertyName = ( (Field) el ).getName(); - isField = true; + Field field = (Field) el; + className = field.getDeclaringClass().getName(); + propertyName = field.getName(); + propertyType = PropertyType.FIELD; + String expectedGetter = "get" + Character.toUpperCase( propertyName.charAt( 0 ) ) + propertyName.substring( 1 ); + try { + mirroredAttribute = field.getDeclaringClass().getDeclaredMethod( expectedGetter ); + } + catch (NoSuchMethodException e) { + //no method + } } else if ( el instanceof Method ) { Method method = (Method) el; + className = method.getDeclaringClass().getName(); propertyName = method.getName(); if ( JavaXProperty.isProperty( method, @@ -138,12 +175,23 @@ if ( propertyName.startsWith( "get" ) ) { propertyName = Introspector.decapitalize( propertyName.substring( "get".length() ) ); } - if ( propertyName.startsWith( "is" ) ) { + else if ( propertyName.startsWith( "is" ) ) { propertyName = Introspector.decapitalize( propertyName.substring( "is".length() ) ); } - throw new RuntimeException( "Method " + propertyName + " is not a property getter" ); + else { + throw new RuntimeException( "Method " + propertyName + " is not a property getter" ); + } + propertyType = PropertyType.PROPERTY; + try { + mirroredAttribute = method.getDeclaringClass().getDeclaredField( propertyName ); + } + catch (NoSuchFieldException e) { + //no method + } } - isField = true; + else { + propertyType = PropertyType.METHOD; + } } else { className = null; @@ -175,7 +223,8 @@ private void initAnnotations() { if ( annotations == null ) { XMLContext.Default defaults = xmlContext.getDefault( className ); - if ( className != null ) { + if ( className != null && propertyName == null ) { + //is a class Element tree = xmlContext.getXMLTree( className, null ); Annotation[] annotations = super.getAnnotations(); List<Annotation> annotationList = new ArrayList<Annotation>( annotations.length + 5 ); @@ -227,9 +276,21 @@ if ( current != null ) annotationList.add( current ); this.annotations = annotationList.toArray( new Annotation[ annotationList.size() ] ); } - else if ( propertyName != null ) { - //TODO do it - this.annotations = super.getAnnotations(); + else if ( className != null && propertyName != null ) { + Element tree = xmlContext.getXMLTree( className, propertyName ); + Annotation[] annotations = super.getAnnotations(); + List<Annotation> annotationList = new ArrayList<Annotation>( annotations.length + 5 ); + for ( Annotation annotation : annotations ) { + if ( ! annotationToXml.containsKey( annotation.annotationType() ) ) { + //unknown annotations are left over + annotationList.add( annotation ); + } + } + preCalculateElementsForProperty(tree); + getId( annotationList, defaults ); + getEmbeddedId( annotationList, defaults ); + getBasic( annotationList, defaults ); + this.annotations = annotationList.toArray( new Annotation[ annotationList.size() ] ); } else { this.annotations = super.getAnnotations(); @@ -237,6 +298,210 @@ } } + private void getBasic(List<Annotation> annotationList, XMLContext.Default defaults) { + for (Element element : elementsForProperty) { + if ( "basic".equals( element.getName() ) ) { + boolean properAccessOnMetadataComplete = computeProperAccessOnMetadataComplete( defaults ); + boolean properOverridingOnMetadataNonComplete = computeProperOverridingOnMetadataComplete( defaults ); + if ( properAccessOnMetadataComplete || properOverridingOnMetadataNonComplete ) { + Annotation annotation = buildColumns( element ); + if (annotation != null) annotationList.add(annotation); + annotation = buildGeneratedValue(element); + if (annotation != null) annotationList.add(annotation); + annotation = buildTemporal(element); + if (annotation != null) annotationList.add(annotation); + //FIXME: fix the priority of xml over java for generator names + annotation = getTableGenerator( element, defaults ); + if (annotation != null) annotationList.add(annotation); + annotation = getSequenceGenerator( element, defaults ); + if (annotation != null) annotationList.add(annotation); + AnnotationDescriptor id = new AnnotationDescriptor( Id.class ); + annotationList.add( AnnotationFactory.create( id ) ); + } + else { + if ( defaults.canUseJavaAnnotations() ) { + if (! properOverridingOnMetadataNonComplete) { + //check that id exists on the other attribute + //TODO EmbeddedId too? + if (mirroredAttribute == null || ! mirroredAttribute.isAnnotationPresent( Id.class ) ) { + throw new AnnotationException("Cannot override an property with <id> it does not have an @Id already"); + } + } + } + } + } + } + if ( elementsForProperty.size() == 0 ) { + //we have nothing, so Java annotations might occurs + if ( defaults.canUseJavaAnnotations() ) { + Annotation annotation = super.getAnnotation( Basic.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Lob.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Enumerated.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Temporal.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Column.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Columns.class ); + if (annotation != null) annotationList.add(annotation); + } + } + } + + private void getEmbeddedId(List<Annotation> annotationList, XMLContext.Default defaults) { + for (Element element : elementsForProperty) { + if ( "embedded-id".equals( element.getName() ) ) { + boolean properAccessOnMetadataComplete = computeProperAccessOnMetadataComplete( defaults ); + boolean properOverridingOnMetadataNonComplete = computeProperOverridingOnMetadataComplete( defaults ); + if ( properAccessOnMetadataComplete || properOverridingOnMetadataNonComplete ) { + Annotation annotation = getAttributeOverrides( element, defaults ); + if (annotation != null) annotationList.add( annotation ); + annotation = getAssociationOverrides( element, defaults ); + if (annotation != null) annotationList.add( annotation ); + AnnotationDescriptor ad = new AnnotationDescriptor( EmbeddedId.class ); + annotationList.add( AnnotationFactory.create( ad ) ); + } + else { + if ( defaults.canUseJavaAnnotations() ) { + if (! properOverridingOnMetadataNonComplete) { + //check that id exists on the other attribute + //TODO Id too? + if (mirroredAttribute == null || ! mirroredAttribute.isAnnotationPresent( EmbeddedId.class ) ) { + throw new AnnotationException("Cannot override an property with <embedded-id> not having an @EmbeddedId already"); + } + } + } + } + } + } + } + + private void preCalculateElementsForProperty(Element tree) { + elementsForProperty = new ArrayList<Element>(); + Element element = tree != null ? tree.element( "attributes" ) : null; + for ( Element subelement : (List<Element>) element.elements() ) { + if ( propertyName.equals( subelement.attributeValue("name") ) ) { + elementsForProperty.add( subelement ); + } + } + } + + private void getId(List<Annotation> annotationList, XMLContext.Default defaults) { + for (Element element : elementsForProperty) { + if ( "id".equals( element.getName() ) ) { + boolean properAccessOnMetadataComplete = computeProperAccessOnMetadataComplete( defaults ); + boolean properOverridingOnMetadataNonComplete = computeProperOverridingOnMetadataComplete( defaults ); + if ( properAccessOnMetadataComplete || properOverridingOnMetadataNonComplete ) { + Annotation annotation = buildColumns( element ); + if (annotation != null) annotationList.add(annotation); + annotation = buildGeneratedValue(element); + if (annotation != null) annotationList.add(annotation); + annotation = buildTemporal(element); + if (annotation != null) annotationList.add(annotation); + //FIXME: fix the priority of xml over java for generator names + annotation = getTableGenerator( element, defaults ); + if (annotation != null) annotationList.add(annotation); + annotation = getSequenceGenerator( element, defaults ); + if (annotation != null) annotationList.add(annotation); + AnnotationDescriptor id = new AnnotationDescriptor( Id.class ); + annotationList.add( AnnotationFactory.create( id ) ); + } + else { + if ( defaults.canUseJavaAnnotations() ) { + if (! properOverridingOnMetadataNonComplete) { + //check that id exists on the other attribute + //TODO EmbeddedId too? + if (mirroredAttribute == null || ! mirroredAttribute.isAnnotationPresent( Id.class ) ) { + throw new AnnotationException("Cannot override an property with <id> it does not have an @Id already"); + } + } + } + } + } + } + } + + private boolean computeProperOverridingOnMetadataComplete(XMLContext.Default defaults) { + return defaults.canUseJavaAnnotations() + && super.isAnnotationPresent( Id.class ); + } + + private boolean computeProperAccessOnMetadataComplete(XMLContext.Default defaults) { + return (! defaults.canUseJavaAnnotations()) + && ( ( ! "field".equalsIgnoreCase( defaults.getAccess() ) && ! PropertyType.FIELD.equals( propertyType ) ) + || ( "field".equalsIgnoreCase( defaults.getAccess() ) && PropertyType.FIELD.equals( propertyType ) ) ); + } + + private Columns buildColumns(Element element) { + List<Element> subelements = element.elements( "column" ); + List<Column> columns = new ArrayList<Column>( subelements.size() ); + for (Element subelement : subelements) { + columns.add( getColumn( subelement, false ) ); + } + if ( columns.size() > 0 ) { + AnnotationDescriptor columnsDescr = new AnnotationDescriptor( Columns.class ); + columnsDescr.setValue( "columns", columns.toArray( new Column[ columns.size() ] ) ); + return AnnotationFactory.create( columnsDescr ); + } + else { + return null; + } + } + + private GeneratedValue buildGeneratedValue(Element element) { + Element subElement = element != null ? element.element( "generated-value" ) : null; + if (subElement != null) { + AnnotationDescriptor ad = new AnnotationDescriptor( GeneratedValue.class ); + String strategy = subElement.attributeValue( "strategy" ); + if ( "TABLE".equalsIgnoreCase( strategy ) ) { + ad.setValue( "strategy", GenerationType.TABLE ); + } + else if ( "SEQUENCE".equalsIgnoreCase( strategy ) ) { + ad.setValue( "strategy", GenerationType.SEQUENCE ); + } + else if ( "IDENTITY".equalsIgnoreCase( strategy ) ) { + ad.setValue( "strategy", GenerationType.IDENTITY ); + } + else if ( "AUTO".equalsIgnoreCase( strategy ) ) { + ad.setValue( "strategy", GenerationType.AUTO ); + } + else if ( StringHelper.isNotEmpty( strategy ) ) { + throw new AnnotationException( "Unknown GenerationType: " + strategy + ". " + SCHEMA_VALIDATION); + } + copyStringAttribute( ad, subElement, "generator", false ); + return AnnotationFactory.create( ad ); + } + else { + return null; + } + } + + private Temporal buildTemporal(Element element) { + Element subElement = element != null ? element.element( "temporal" ) : null; + if (subElement != null) { + AnnotationDescriptor ad = new AnnotationDescriptor( Temporal.class ); + String temporal = subElement.getTextTrim(); + if ( "DATE".equalsIgnoreCase( temporal ) ) { + ad.setValue( "value", TemporalType.DATE ); + } + else if ( "TIME".equalsIgnoreCase( temporal ) ) { + ad.setValue( "value", TemporalType.TIME ); + } + else if ( "TIMESTAMP".equalsIgnoreCase( temporal ) ) { + ad.setValue( "value", TemporalType.TIMESTAMP ); + } + else if ( StringHelper.isNotEmpty( temporal ) ) { + throw new AnnotationException( "Unknown TemporalType: " + temporal+ ". " + SCHEMA_VALIDATION); + } + return AnnotationFactory.create( ad ); + } + else { + return null; + } + } + private AssociationOverrides getAssociationOverrides(Element tree, XMLContext.Default defaults) { List<AssociationOverride> attributes = (List<AssociationOverride>) buildAssociationOverrides( tree ); if ( defaults.canUseJavaAnnotations() ) { @@ -336,7 +601,8 @@ for (Element current : subelements) { AnnotationDescriptor override = new AnnotationDescriptor( AttributeOverride.class ); copyStringAttribute( override, current, "name", true ); - override.setValue( "column", getColumn( current, true ) ); + Element column = current != null ? current.element( "column" ) : null; + override.setValue( "column", getColumn( column, true ) ); overrides.add( (AttributeOverride) AnnotationFactory.create( override ) ); } } @@ -344,23 +610,23 @@ } private Column getColumn(Element element, boolean isMandatory) { - Element subelement = element != null ? element.element( "column" ) : null; - if ( subelement != null ) { + //Element subelement = element != null ? element.element( "column" ) : null; + if ( element != null ) { AnnotationDescriptor column = new AnnotationDescriptor( Column.class ); - copyStringAttribute(column, subelement, "name", false); - copyBooleanAttribute(column, subelement, "unique"); - copyBooleanAttribute(column, subelement, "nullable"); - copyBooleanAttribute(column, subelement, "insertable"); - copyBooleanAttribute(column, subelement, "updatable"); - copyStringAttribute(column, subelement, "column-definition", false); - copyStringAttribute(column, subelement, "table", false); - copyIntegerAttribute(column, subelement, "length"); - copyIntegerAttribute(column, subelement, "precision"); - copyIntegerAttribute(column, subelement, "scale"); + copyStringAttribute(column, element, "name", false); + copyBooleanAttribute(column, element, "unique"); + copyBooleanAttribute(column, element, "nullable"); + copyBooleanAttribute(column, element, "insertable"); + copyBooleanAttribute(column, element, "updatable"); + copyStringAttribute(column, element, "column-definition", false); + copyStringAttribute(column, element, "table", false); + copyIntegerAttribute(column, element, "length"); + copyIntegerAttribute(column, element, "precision"); + copyIntegerAttribute(column, element, "scale"); return (Column) AnnotationFactory.create( column ); } else { - if ( isMandatory ) throw new AnnotationException( element.getPath() + ".column is mandatory. " + SCHEMA_VALIDATION); + if ( isMandatory ) throw new AnnotationException( element.getPath() + " is mandatory. " + SCHEMA_VALIDATION); return null; } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXClass.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXClass.java 2006-04-24 23:33:25 UTC (rev 9784) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXClass.java 2006-04-24 23:35:11 UTC (rev 9785) @@ -20,7 +20,7 @@ private final TypeEnvironment context; - public JavaXClass( Class clazz, TypeEnvironment env, JavaXFactory factory ) { + public JavaXClass(Class clazz, TypeEnvironment env, JavaXFactory factory) { super( clazz, factory ); this.context = env; } @@ -38,7 +38,7 @@ int length = classes.length; XClass[] xClasses = new XClass[length]; TypeEnvironment environment = getFactory().getTypeEnvironment( toClass() ); - for (int index = 0 ; index < length ; index++) { + for ( int index = 0; index < length ; index++ ) { xClasses[index] = getFactory().toXClass( classes[index], environment ); } return xClasses; @@ -62,17 +62,21 @@ private List<XProperty> getDeclaredFieldProperties(Filter filter) { List<XProperty> result = new LinkedList<XProperty>(); - for ( Field f : toClass().getDeclaredFields() ) - if ( JavaXProperty.isProperty( f, getTypeEnvironment().bind( f.getGenericType() ), filter ) ) + for ( Field f : toClass().getDeclaredFields() ) { + if ( JavaXProperty.isProperty( f, getTypeEnvironment().bind( f.getGenericType() ), filter ) ) { result.add( getFactory().getXProperty( f, this ) ); + } + } return result; } private List<XProperty> getDeclaredMethodProperties(Filter filter) { List<XProperty> result = new LinkedList<XProperty>(); - for ( Method m : toClass().getDeclaredMethods() ) - if ( JavaXProperty.isProperty( m, getTypeEnvironment().bind( m.getGenericReturnType() ), filter ) ) + for ( Method m : toClass().getDeclaredMethods() ) { + if ( JavaXProperty.isProperty( m, getTypeEnvironment().bind( m.getGenericReturnType() ), filter ) ) { result.add( getFactory().getXProperty( m, this ) ); + } + } return result; } @@ -81,10 +85,12 @@ } public List<XProperty> getDeclaredProperties(String accessType, Filter filter) { - if ( accessType.equals( ACCESS_FIELD ) ) - return getDeclaredFieldProperties(filter); - if ( accessType.equals( ACCESS_PROPERTY ) ) - return getDeclaredMethodProperties(filter); + if ( accessType.equals( ACCESS_FIELD ) ) { + return getDeclaredFieldProperties( filter ); + } + if ( accessType.equals( ACCESS_PROPERTY ) ) { + return getDeclaredMethodProperties( filter ); + } throw new IllegalArgumentException( "Unknown access type " + accessType ); } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXFactory.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXFactory.java 2006-04-24 23:33:25 UTC (rev 9784) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXFactory.java 2006-04-24 23:35:11 UTC (rev 9785) @@ -66,6 +66,11 @@ xmlHelper = new XMLHelper(); entityResolver = XMLHelper.DEFAULT_DTD_RESOLVER; xmlContext = new XMLContext(); + xClasses.clear(); + packagesToXPackages.clear(); + xProperties.clear(); + xMethods.clear(); + } public XClass toXClass(Class clazz) { Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java 2006-04-24 23:33:25 UTC (rev 9784) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTrip.java 2006-04-24 23:35:11 UTC (rev 9785) @@ -0,0 +1,22 @@ +//$Id: $ +package org.hibernate.test.reflection.java.xml; + +import javax.persistence.Entity; +import javax.persistence.EmbeddedId; + +/** + * @author Emmanuel Bernard + */ +@Entity +public class BusTrip { + private BusTripPk id; + + @EmbeddedId + public BusTripPk getId() { + return id; + } + + public void setId(BusTripPk id) { + this.id = id; + } +} Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTripPk.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTripPk.java 2006-04-24 23:33:25 UTC (rev 9784) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/BusTripPk.java 2006-04-24 23:35:11 UTC (rev 9785) @@ -0,0 +1,26 @@ +//$Id: $ +package org.hibernate.test.reflection.java.xml; + +/** + * @author Emmanuel Bernard + */ +public class BusTripPk { + private String busNumber; + private String busDriver; + + public String getBusDriver() { + return busDriver; + } + + public void setBusDriver(String busDriver) { + this.busDriver = busDriver; + } + + public String getBusNumber() { + return busNumber; + } + + public void setBusNumber(String busNumber) { + this.busNumber = busNumber; + } +} Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java 2006-04-24 23:33:25 UTC (rev 9784) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java 2006-04-24 23:35:11 UTC (rev 9785) @@ -6,6 +6,8 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @@ -27,6 +29,13 @@ import javax.persistence.ExcludeDefaultListeners; import javax.persistence.AttributeOverrides; import javax.persistence.AssociationOverrides; +import javax.persistence.Id; +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.EmbeddedId; import junit.framework.TestCase; import org.dom4j.DocumentException; @@ -35,6 +44,7 @@ import org.hibernate.reflection.java.EJB3OverridenAnnotationReader; import org.hibernate.reflection.java.xml.XMLContext; import org.hibernate.util.XMLHelper; +import org.hibernate.annotations.Columns; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXNotSupportedException; @@ -156,6 +166,46 @@ assertNull( reader.getAnnotation( TableGenerator.class ) ); } + public void testIdRelatedAnnotations() throws Exception { + XMLContext context = buildContext("org/hibernate/test/reflection/java/xml/orm.xml"); + Method method = Administration.class.getDeclaredMethod( "getId" ); + EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader(method, context); + assertNull( reader.getAnnotation( Id.class ) ); + assertNull( reader.getAnnotation( Column.class ) ); + Field field = Administration.class.getDeclaredField( "id" ); + reader = new EJB3OverridenAnnotationReader(field, context); + assertNotNull( reader.getAnnotation( Id.class ) ); + assertNotNull( reader.getAnnotation( GeneratedValue.class ) ); + assertEquals( GenerationType.SEQUENCE, reader.getAnnotation( GeneratedValue.class ).strategy() ); + assertEquals( "generator", reader.getAnnotation( GeneratedValue.class ).generator() ); + assertNotNull( reader.getAnnotation( SequenceGenerator.class ) ); + assertEquals( "seq", reader.getAnnotation( SequenceGenerator.class ).sequenceName() ); + assertNotNull( reader.getAnnotation( Columns.class ) ); + assertEquals( 1, reader.getAnnotation( Columns.class ).columns().length ); + assertEquals( "fld_id", reader.getAnnotation( Columns.class ).columns()[0].name() ); + assertNotNull( reader.getAnnotation( Temporal.class ) ); + assertEquals( TemporalType.DATE, reader.getAnnotation( Temporal.class ).value() ); + + context = buildContext("org/hibernate/test/reflection/java/xml/metadata-complete.xml"); + method = Administration.class.getDeclaredMethod( "getId" ); + reader = new EJB3OverridenAnnotationReader(method, context); + assertNotNull( "Default access type when not defined in metadata complete should be property", + reader.getAnnotation( Id.class ) ); + field = Administration.class.getDeclaredField( "id" ); + reader = new EJB3OverridenAnnotationReader(field, context); + assertNull( "Default access type when not defined in metadata complete should be property", + reader.getAnnotation( Id.class ) ); + + method = BusTrip.class.getDeclaredMethod( "getId" ); + reader = new EJB3OverridenAnnotationReader( method, context ); + assertNull( reader.getAnnotation( EmbeddedId.class ) ); + field = BusTrip.class.getDeclaredField( "id" ); + reader = new EJB3OverridenAnnotationReader( field, context ); + assertNotNull( reader.getAnnotation( EmbeddedId.class ) ); + assertNotNull( reader.getAnnotation( AttributeOverrides.class ) ); + assertEquals( 1, reader.getAnnotation( AttributeOverrides.class ).value().length ); + } + private XMLContext buildContext(String ormfile) throws SAXException, DocumentException, IOException { XMLHelper xmlHelper = new XMLHelper(); ClassLoader cl = Thread.currentThread().getContextClassLoader(); Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml 2006-04-24 23:33:25 UTC (rev 9784) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/metadata-complete.xml 2006-04-24 23:35:11 UTC (rev 9785) @@ -15,8 +15,30 @@ </persistence-unit-metadata> <package>org.hibernate.test.reflection.java.xml</package> <entity class="Administration"> + <attributes> + <id name="id"/> + </attributes> </entity> <entity class="Match"> </entity> <entity class="SocialSecurityMoralAccount"/> + <entity class="BusTrip" access="FIELD"> + <attributes> + <embedded-id name="id"> + <attribute-override name="busDriver"> + <column name="fld_busdriver"/> + </attribute-override> + </embedded-id> + </attributes> + </entity> + <embeddable class="BusTripPk" access="FIELD"> + <attributes> + <basic name="busDriver"> + <column name="busdriver"/> + </basic> + <basic name="busNumber"> + <column name="busnumber"/> + </basic> + </attributes> + </embeddable> </entity-mappings> \ No newline at end of file Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml 2006-04-24 23:33:25 UTC (rev 9784) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml 2006-04-24 23:35:11 UTC (rev 9785) @@ -28,6 +28,14 @@ </secondary-table> <sequence-generator name="seqhilo" sequence-name="seqhilo"/> <table-generator name="table" table="tablehilo"/> + <attributes> + <id name="id"> + <column name="fld_id"/> + <generated-value generator="generator" strategy="SEQUENCE"/> + <temporal>DATE</temporal> + <sequence-generator name="generator" sequence-name="seq"/> + </id> + </attributes> </entity> <entity class="Match"> <inheritance strategy="JOINED"/> |