[hibernate-commits] Hibernate SVN: r14515 - in core/trunk: cache-jbosscache and 40 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Apr 16 10:08:08 EDT 2008


Author: steve.ebersole at jboss.com
Date: 2008-04-16 10:08:07 -0400 (Wed, 16 Apr 2008)
New Revision: 14515

Added:
   core/trunk/tutorials/
   core/trunk/tutorials/eg/
   core/trunk/tutorials/eg/pom.xml
   core/trunk/tutorials/eg/src/
   core/trunk/tutorials/eg/src/main/
   core/trunk/tutorials/eg/src/main/java/
   core/trunk/tutorials/eg/src/main/java/org/
   core/trunk/tutorials/eg/src/main/java/org/hibernate/
   core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/
   core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/AuctionInfo.java
   core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/AuctionItem.hbm.xml
   core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/AuctionItem.java
   core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Bid.hbm.xml
   core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Bid.java
   core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/BuyNow.java
   core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Main.java
   core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Name.java
   core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Persistent.java
   core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/User.hbm.xml
   core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/User.java
   core/trunk/tutorials/eg/src/main/resources/
   core/trunk/tutorials/eg/src/main/resources/org/
   core/trunk/tutorials/eg/src/main/resources/org/hibernate/
   core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/
   core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/AuctionItem.hbm.xml
   core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/Bid.hbm.xml
   core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/User.hbm.xml
   core/trunk/tutorials/pom.xml
   core/trunk/tutorials/web/
   core/trunk/tutorials/web/pom.xml
   core/trunk/tutorials/web/src/
   core/trunk/tutorials/web/src/main/
   core/trunk/tutorials/web/src/main/java/
   core/trunk/tutorials/web/src/main/java/org/
   core/trunk/tutorials/web/src/main/java/org/hibernate/
   core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/
   core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/domain/
   core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/domain/Event.java
   core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/domain/Person.java
   core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/util/
   core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/util/HibernateUtil.java
   core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/
   core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/EventManager.java
   core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/EventManagerServlet.java
   core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/SessionFactoryInitializer.java
   core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/SessionInterceptor.java
   core/trunk/tutorials/web/src/main/resources/
   core/trunk/tutorials/web/src/main/resources/hibernate.cfg.xml
   core/trunk/tutorials/web/src/main/resources/log4j.properties
   core/trunk/tutorials/web/src/main/resources/org/
   core/trunk/tutorials/web/src/main/resources/org/hibernate/
   core/trunk/tutorials/web/src/main/resources/org/hibernate/tutorial/
   core/trunk/tutorials/web/src/main/resources/org/hibernate/tutorial/domain/
   core/trunk/tutorials/web/src/main/resources/org/hibernate/tutorial/domain/Event.hbm.xml
   core/trunk/tutorials/web/src/main/resources/org/hibernate/tutorial/domain/Person.hbm.xml
   core/trunk/tutorials/web/src/main/scripts/
   core/trunk/tutorials/web/src/main/scripts/runCleanDatabase.sh
   core/trunk/tutorials/web/src/main/webapp/
   core/trunk/tutorials/web/src/main/webapp/WEB-INF/
   core/trunk/tutorials/web/src/main/webapp/WEB-INF/web.xml
Removed:
   core/trunk/documentation/tutorial/
   core/trunk/eg/
Modified:
   core/trunk/cache-jbosscache/pom.xml
   core/trunk/cache-jbosscache2/pom.xml
   core/trunk/cache-oscache/pom.xml
   core/trunk/cache-swarmcache/pom.xml
   core/trunk/connection-c3p0/pom.xml
   core/trunk/connection-proxool/pom.xml
   core/trunk/core/pom.xml
   core/trunk/documentation/pom.xml
   core/trunk/jmx/pom.xml
   core/trunk/testing/pom.xml
   core/trunk/testsuite/pom.xml
Log:
trying new layout

Modified: core/trunk/cache-jbosscache/pom.xml
===================================================================
--- core/trunk/cache-jbosscache/pom.xml	2008-04-16 14:06:26 UTC (rev 14514)
+++ core/trunk/cache-jbosscache/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -4,13 +4,13 @@
     
     <parent>
         <groupId>org.hibernate</groupId>
-        <artifactId>hibernate-core-parent</artifactId>
-        <version>3</version>
+        <artifactId>hibernate</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-jbosscache</artifactId>
-    <version>3.3.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>Hibernate JBossCache Integration</name>

Modified: core/trunk/cache-jbosscache2/pom.xml
===================================================================
--- core/trunk/cache-jbosscache2/pom.xml	2008-04-16 14:06:26 UTC (rev 14514)
+++ core/trunk/cache-jbosscache2/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -4,13 +4,13 @@
     
     <parent>
         <groupId>org.hibernate</groupId>
-        <artifactId>hibernate-core-parent</artifactId>
-        <version>3</version>
+        <artifactId>hibernate</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-jbosscache2</artifactId>
-    <version>3.3.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>Hibernate JBossCache2.x Integration</name>

Modified: core/trunk/cache-oscache/pom.xml
===================================================================
--- core/trunk/cache-oscache/pom.xml	2008-04-16 14:06:26 UTC (rev 14514)
+++ core/trunk/cache-oscache/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -4,13 +4,13 @@
     
     <parent>
         <groupId>org.hibernate</groupId>
-        <artifactId>hibernate-core-parent</artifactId>
-        <version>3</version>
+        <artifactId>hibernate</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-oscache</artifactId>
-    <version>3.3.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>Hibernate OSCache Integration</name>

Modified: core/trunk/cache-swarmcache/pom.xml
===================================================================
--- core/trunk/cache-swarmcache/pom.xml	2008-04-16 14:06:26 UTC (rev 14514)
+++ core/trunk/cache-swarmcache/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -4,13 +4,13 @@
     
     <parent>
         <groupId>org.hibernate</groupId>
-        <artifactId>hibernate-core-parent</artifactId>
-        <version>3</version>
+        <artifactId>hibernate</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-swarmcache</artifactId>
-    <version>3.3.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>Hibernate SwarmCache Integration</name>

Modified: core/trunk/connection-c3p0/pom.xml
===================================================================
--- core/trunk/connection-c3p0/pom.xml	2008-04-16 14:06:26 UTC (rev 14514)
+++ core/trunk/connection-c3p0/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -4,13 +4,13 @@
     
     <parent>
         <groupId>org.hibernate</groupId>
-        <artifactId>hibernate-core-parent</artifactId>
-        <version>3</version>
+        <artifactId>hibernate</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-c3p0</artifactId>
-    <version>3.3.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>Hibernate C3P0 ConnectionProvider</name>

Modified: core/trunk/connection-proxool/pom.xml
===================================================================
--- core/trunk/connection-proxool/pom.xml	2008-04-16 14:06:26 UTC (rev 14514)
+++ core/trunk/connection-proxool/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -4,13 +4,13 @@
     
     <parent>
         <groupId>org.hibernate</groupId>
-        <artifactId>hibernate-core-parent</artifactId>
-        <version>3</version>
+        <artifactId>hibernate</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-proxool</artifactId>
-    <version>3.3.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>Hibernate Proxool ConnectionProvider</name>

Modified: core/trunk/core/pom.xml
===================================================================
--- core/trunk/core/pom.xml	2008-04-16 14:06:26 UTC (rev 14514)
+++ core/trunk/core/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -4,13 +4,13 @@
     
     <parent>
         <groupId>org.hibernate</groupId>
-        <artifactId>hibernate-core-parent</artifactId>
-        <version>3</version>
+        <artifactId>hibernate</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
 
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-core</artifactId>
-    <version>3.3.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>Hibernate Core</name>

Modified: core/trunk/documentation/pom.xml
===================================================================
--- core/trunk/documentation/pom.xml	2008-04-16 14:06:26 UTC (rev 14514)
+++ core/trunk/documentation/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -1,3 +1,29 @@
+<?xml version="1.0"?>
+
+<!--
+  ~ Hibernate, Relational Persistence for Idiomatic Java
+  ~
+  ~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+  ~ indicated by the @author tags or express copyright attribution
+  ~ statements applied by the authors.  All third-party contributions are
+  ~ distributed under license by Red Hat Middleware LLC.
+  ~
+  ~ This copyrighted material is made available to anyone wishing to use, modify,
+  ~ copy, or redistribute it subject to the terms and conditions of the GNU
+  ~ Lesser General Public License, as published by the Free Software Foundation.
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+  ~ or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+  ~ for more details.
+  ~
+  ~ You should have received a copy of the GNU Lesser General Public License
+  ~ along with this distribution; if not, write to:
+  ~ Free Software Foundation, Inc.
+  ~ 51 Franklin Street, Fifth Floor
+  ~ Boston, MA  02110-1301  USA
+  ~
+  -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -6,13 +32,13 @@
     
     <parent>
         <groupId>org.hibernate</groupId>
-        <artifactId>hibernate-core-parent</artifactId>
-        <version>3</version>
+        <artifactId>hibernate</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-documentation</artifactId>
-    <version>3.3.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <name>Hibernate Core - Documentation</name>
@@ -20,7 +46,48 @@
 
     <modules>
         <module>manual</module>
-        <module>tutorial</module>
+        <module>jbosscache2</module>
     </modules>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.jboss.maven.plugins</groupId>
+                <artifactId>maven-jdocbook-plugin</artifactId>
+                <version>2.1.0</version>
+                <extensions>true</extensions>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.hibernate</groupId>
+                        <artifactId>hibernate-jdocbook-style</artifactId>
+                        <version>1.0.0</version>
+                        <type>jdocbook-style</type>
+                    </dependency>
+                </dependencies>
+                <configuration>
+                    <sourceDocumentName>master.xml</sourceDocumentName>
+                    <formats>
+                        <format>
+                            <formatName>pdf</formatName>
+                            <stylesheetResource>classpath:/xslt/standard/fopdf.xsl</stylesheetResource>
+                            <finalName>hibernate_reference.pdf</finalName>
+                        </format>
+                        <format>
+                            <formatName>html</formatName>
+                            <stylesheetResource>classpath:/xslt/standard/html.xsl</stylesheetResource>
+                            <finalName>index.html</finalName>
+                        </format>
+                    </formats>
+                    <options>
+                        <xincludeSupported>false</xincludeSupported>
+                    </options>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <properties>
+        <masterTranslation>en-US</masterTranslation>
+    </properties>
+
 </project>

Modified: core/trunk/jmx/pom.xml
===================================================================
--- core/trunk/jmx/pom.xml	2008-04-16 14:06:26 UTC (rev 14514)
+++ core/trunk/jmx/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -4,13 +4,13 @@
 
     <parent>
         <groupId>org.hibernate</groupId>
-        <artifactId>hibernate-core-parent</artifactId>
-        <version>3</version>
+        <artifactId>hibernate</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
 
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-jmx</artifactId>
-    <version>3.3.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>Hibernate JMX Module</name>

Modified: core/trunk/testing/pom.xml
===================================================================
--- core/trunk/testing/pom.xml	2008-04-16 14:06:26 UTC (rev 14514)
+++ core/trunk/testing/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -4,13 +4,13 @@
     
     <parent>
         <groupId>org.hibernate</groupId>
-        <artifactId>hibernate-core-parent</artifactId>
-        <version>3</version>
+        <artifactId>hibernate</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-testing</artifactId>
-    <version>3.3.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>Hibernate Testing</name>

Modified: core/trunk/testsuite/pom.xml
===================================================================
--- core/trunk/testsuite/pom.xml	2008-04-16 14:06:26 UTC (rev 14514)
+++ core/trunk/testsuite/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -4,13 +4,13 @@
     
     <parent>
         <groupId>org.hibernate</groupId>
-        <artifactId>hibernate-core-parent</artifactId>
-        <version>3</version>
+        <artifactId>hibernate</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-testsuite</artifactId>
-    <version>3.3.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>Hibernate Testsuite</name>

Added: core/trunk/tutorials/eg/pom.xml
===================================================================
--- core/trunk/tutorials/eg/pom.xml	                        (rev 0)
+++ core/trunk/tutorials/eg/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,19 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>org.hibernate</groupId>
+        <artifactId>hibernate-tutorials</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <groupId>org.hibernate</groupId>
+    <artifactId>hibernate-tutorial-eg</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Hibernate Example</name>
+    <description>A simple example of Hibernate functionality</description>
+
+</project>
\ No newline at end of file

Added: core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/AuctionInfo.java
===================================================================
--- core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/AuctionInfo.java	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/AuctionInfo.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,37 @@
+//$Id: AuctionInfo.java 3890 2004-06-03 16:31:32Z steveebersole $
+package org.hibernate.auction;
+
+import java.util.Date;
+
+/**
+ * @author Gavin King
+ */
+public class AuctionInfo {
+	private long id;
+	private String description;
+	private Date ends;
+	private Float maxAmount;
+	public String getDescription() {
+		return description;
+	}
+
+	public Date getEnds() {
+		return ends;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	public Float getMaxAmount() {
+		return maxAmount;
+	}
+	
+	public AuctionInfo(long id, String description, Date ends, Float maxAmount) {
+		this.id = id;
+		this.description = description;
+		this.ends = ends;
+		this.maxAmount = maxAmount;
+	}
+
+}

Added: core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/AuctionItem.hbm.xml
===================================================================
--- core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/AuctionItem.hbm.xml	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/AuctionItem.hbm.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC 
+	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping 
+	package="org.hibernate.auction">
+
+	<import class="AuctionInfo"/>
+
+	<class name="AuctionItem">
+		<comment>An item that is being auctioned.</comment>
+		
+		<id name="id">
+			<generator class="native"/>
+		</id>
+		
+		<natural-id>
+			<many-to-one name="seller"/>
+			<property name="shortDescription"
+					length="200"/>
+		</natural-id>
+				
+		<property name="description"
+				length="1000"/>
+				
+		<property name="ends"/>
+		
+		<property name="condition" column="`CONDITION`"/>
+		
+		<many-to-one name="successfulBid" 
+				outer-join="false"/>
+		
+		<bag name="bids"
+				inverse="true" 
+				cascade="all">
+			<key column="item"/>
+			<one-to-many class="Bid"/>
+		</bag>
+		
+	</class>
+		
+</hibernate-mapping>
\ No newline at end of file

Added: core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/AuctionItem.java
===================================================================
--- core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/AuctionItem.java	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/AuctionItem.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,78 @@
+//$Id: AuctionItem.java 7369 2005-07-04 03:18:34Z oneovthafew $
+package org.hibernate.auction;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Gavin King
+ */
+public class AuctionItem extends Persistent {
+	private String description;
+	private String shortDescription;
+	private List bids;
+	private Bid successfulBid;
+	private User seller;
+	private Date ends;
+	private int condition;
+	public List getBids() {
+		return bids;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public User getSeller() {
+		return seller;
+	}
+
+	public Bid getSuccessfulBid() {
+		return successfulBid;
+	}
+
+	public void setBids(List bids) {
+		this.bids = bids;
+	}
+
+	public void setDescription(String string) {
+		description = string;
+	}
+
+	public void setSeller(User user) {
+		seller = user;
+	}
+
+	public void setSuccessfulBid(Bid bid) {
+		successfulBid = bid;
+	}
+
+	public Date getEnds() {
+		return ends;
+	}
+
+	public void setEnds(Date date) {
+		ends = date;
+	}
+	
+	public int getCondition() {
+		return condition;
+	}
+
+	public void setCondition(int i) {
+		condition = i;
+	}
+
+	public String toString() {
+		return shortDescription + " (" + description + ": " + condition + "/10)";
+	}
+
+	public String getShortDescription() {
+		return shortDescription;
+	}
+
+	public void setShortDescription(String shortDescription) {
+		this.shortDescription = shortDescription;
+	}
+
+}

Added: core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Bid.hbm.xml
===================================================================
--- core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Bid.hbm.xml	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Bid.hbm.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC 
+	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping 
+	package="org.hibernate.auction">
+
+	<class name="Bid" 
+		discriminator-value="N">
+		<comment>A bid or "buy now" for an item.</comment>
+		
+		<id name="id">
+			<generator class="native"/>
+		</id>
+		
+		<discriminator type="char">
+			<column name="isBuyNow">
+				<comment>Y if a "buy now", N if a regular bid.</comment>
+			</column>
+		</discriminator>
+		
+		<natural-id>
+			<many-to-one name="item"/>
+			<property name="amount"/>
+		</natural-id>
+		
+		<property name="datetime" 
+				not-null="true" 
+				column="`datetime`"/>
+		
+		<many-to-one name="bidder" 
+				not-null="true"/>
+		
+		<subclass name="BuyNow" 
+			discriminator-value="Y"/>
+			
+	</class>
+	
+</hibernate-mapping>
\ No newline at end of file

Added: core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Bid.java
===================================================================
--- core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Bid.java	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Bid.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,55 @@
+//$Id: Bid.java 3890 2004-06-03 16:31:32Z steveebersole $
+package org.hibernate.auction;
+
+import java.util.Date;
+
+/**
+ * @author Gavin King
+ */
+public class Bid extends Persistent {
+	private AuctionItem item;
+	private float amount;
+	private Date datetime;
+	private User bidder;
+	
+	public AuctionItem getItem() {
+		return item;
+	}
+
+	public void setItem(AuctionItem item) {
+		this.item = item;
+	}
+
+	public float getAmount() {
+		return amount;
+	}
+
+	public Date getDatetime() {
+		return datetime;
+	}
+
+	public void setAmount(float f) {
+		amount = f;
+	}
+
+	public void setDatetime(Date date) {
+		datetime = date;
+	}
+
+	public User getBidder() {
+		return bidder;
+	}
+
+	public void setBidder(User user) {
+		bidder = user;
+	}
+
+	public String toString() {
+		return bidder.getUserName() + " $" + amount;
+	}
+	
+	public boolean isBuyNow() {
+		return false;
+	}
+
+}

Added: core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/BuyNow.java
===================================================================
--- core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/BuyNow.java	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/BuyNow.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,14 @@
+//$Id: BuyNow.java 3890 2004-06-03 16:31:32Z steveebersole $
+package org.hibernate.auction;
+
+/**
+ * @author Gavin King
+ */
+public class BuyNow extends Bid {
+	public boolean isBuyNow() {
+		return true;
+	}
+	public String toString() {
+		return super.toString() + " (buy now)";
+	}
+}

Added: core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Main.java
===================================================================
--- core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Main.java	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Main.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,390 @@
+//$Id: Main.java 7369 2005-07-04 03:18:34Z oneovthafew $
+package org.hibernate.auction;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+
+import org.hibernate.FetchMode;
+import org.hibernate.FlushMode;
+import org.hibernate.LockMode;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.criterion.Example;
+import org.hibernate.criterion.Expression;
+import org.hibernate.criterion.MatchMode;
+
+
+/**
+ * Demonstrate some useful features of Hibernate.
+ *
+ * @author Gavin King
+ */
+public class Main {
+
+	private SessionFactory factory;
+
+	/**
+	 * Demonstrates HQL projection/aggregation
+	 */
+	public void viewAllAuctionsFast() throws Exception {
+		System.out.println("Viewing all auction item info");
+
+		Session s = factory.openSession();
+		Transaction tx=null;
+		try {
+			tx = s.beginTransaction();
+
+			List auctions = s.createQuery(
+				"select new AuctionInfo( item.id, item.description, item.ends, max(bid.amount) ) "
+				+ "from AuctionItem item "
+				+ "left join item.bids bid "
+				+ "group by item.id, item.description, item.ends "
+				+ "order by item.ends desc"
+				)
+				.setMaxResults(100)
+				.list();
+
+			Iterator iter = auctions.iterator();
+			while ( iter.hasNext() ) {
+				AuctionInfo ai = (AuctionInfo) iter.next();
+				System.out.println(
+					"Auction: " + ai.getId() + " - " + ai.getDescription() +
+					", ends: " + ai.getEnds() +
+					", highest bid: " + ai.getMaxAmount()
+				);
+			}
+			System.out.println();
+
+			tx.commit();
+		}
+		catch (Exception e) {
+			if (tx!=null) tx.rollback();
+			throw e;
+		}
+		finally {
+			s.close();
+		}
+	}
+
+	/**
+	 * Demonstrates HQL with runtime fetch strategy
+	 */
+	public void viewAllAuctionsSlow() throws Exception {
+		System.out.println("Viewing all auction item objects");
+
+		Session s = factory.openSession();
+		Transaction tx=null;
+		try {
+			s.setFlushMode(FlushMode.NEVER); //entirely optional!!
+			tx = s.beginTransaction();
+
+			List auctions = s.createQuery(
+				"from AuctionItem item "
+				+ "left join fetch item.bids bid left join fetch bid.bidder "
+				+ "order by item.ends desc"
+				)
+				.setMaxResults(100)
+				.list();
+
+			Iterator iter = new HashSet(auctions).iterator();
+			while ( iter.hasNext() ) {
+				AuctionItem auction = (AuctionItem) iter.next();
+				System.out.println(
+					"Auction: " + auction.getId() + " - " + auction.getDescription() +
+					", ends: " + auction.getEnds() +
+					", bids: " + auction.getBids()
+				);
+			}
+			System.out.println();
+
+			tx.commit();
+		}
+		catch (Exception e) {
+			if (tx!=null) tx.rollback();
+			throw e;
+		}
+		finally {
+			s.close();
+		}
+	}
+
+	/**
+	 * Demonstrates transitive persistence with detached object support
+	 */
+	public void bidOnAuction(User bidder, AuctionItem item, float amount) throws Exception {
+		System.out.println("Creating a new bid for auction item: " + item.getId() + " by user: " + bidder.getId() );
+
+		Session s = factory.openSession();
+		Transaction tx=null;
+		try {
+			tx = s.beginTransaction();
+
+			s.lock(item, LockMode.NONE);
+			s.lock(bidder, LockMode.NONE);
+
+			Bid bid = new Bid();
+			bid.setBidder(bidder);
+			bid.setDatetime( new Date() );
+			bid.setAmount(amount);
+			bid.setItem(item);
+			bidder.getBids().add(bid);
+			item.getBids().add(bid);
+
+			tx.commit();
+		}
+		catch (Exception e) {
+			if (tx!=null) tx.rollback();
+			throw e;
+		}
+		finally {
+			s.close();
+		}
+	}
+
+	/**
+	 * Demonstrates detached object support
+	 */
+	public void changeUserDetails(User user) throws Exception {
+		System.out.println("Changing user details for: " + user.getId() );
+
+		Session s = factory.openSession();
+		Transaction tx=null;
+		try {
+			tx = s.beginTransaction();
+
+			s.merge(user);
+
+			tx.commit();
+		}
+		catch (Exception e) {
+			if (tx!=null) tx.rollback();
+			throw e;
+		}
+		finally {
+			s.close();
+		}
+	}
+
+	/**
+	 * Demonstrates automatic dirty checking
+	 */
+	public void changeItemDescription(Long itemId, String description) throws Exception {
+		System.out.println("Changing auction item description for: " + itemId );
+
+		Session s = factory.openSession();
+		Transaction tx=null;
+		try {
+			tx = s.beginTransaction();
+
+			AuctionItem item = (AuctionItem) s.get(AuctionItem.class, itemId);
+			if (item==null) throw new IllegalArgumentException("No item for the given id: " + itemId);
+			item.setDescription(description);
+
+			tx.commit();
+		}
+		catch (Exception e) {
+			if (tx!=null) tx.rollback();
+			throw e;
+		}
+		finally {
+			s.close();
+		}
+	}
+
+	/**
+	 * Demonstrates query by criteria with runtime fetch strategy
+	 */
+	public void viewUserAuctions(Long sellerId) throws Exception {
+		System.out.println("Viewing user and auctions: " + sellerId);
+
+		Session s = factory.openSession();
+		Transaction tx=null;
+		try {
+			tx = s.beginTransaction();
+
+			List list = s.createCriteria(User.class)
+				.add( Expression.eq("id", sellerId) )
+				.setFetchMode("auctions", FetchMode.JOIN)
+				.list();
+
+			if (list.size()==0) throw new IllegalArgumentException("No user for the given id: " + sellerId);
+			User user = (User) list.get(0);
+			System.out.println(
+				"User: " + user.getId() + " - " + user.getName() +
+				", email: " + user.getEmail() +
+				", auctions: " + user.getAuctions()
+			);
+
+			tx.commit();
+		}
+		catch (Exception e) {
+			if (tx!=null) tx.rollback();
+			throw e;
+		}
+		finally {
+			s.close();
+		}
+	}
+
+	/**
+	 * Demonstrates query by example
+	 */
+	public void viewAuctionsByDescription(String description, int condition) throws Exception {
+		String msg = "Viewing auctions containing: " + description;
+		if (condition>0) msg += " with condition: " + condition + "/10";
+
+		AuctionItem item = new AuctionItem();
+		item.setDescription(description);
+		item.setCondition(condition);
+
+		Session s = factory.openSession();
+		Transaction tx=null;
+		try {
+			tx = s.beginTransaction();
+
+			Iterator iter = s.createCriteria(AuctionItem.class)
+				.add( Example.create(item)
+					.enableLike(MatchMode.ANYWHERE)
+					.ignoreCase()
+					.excludeZeroes()
+				)
+				.list()
+				.iterator();
+
+			System.out.println(msg);
+			while ( iter.hasNext() ) {
+				item = (AuctionItem) iter.next();
+				System.out.println("Item: " + item.getId() + " - " + item.getDescription() );
+			}
+			System.out.println();
+
+			tx.commit();
+		}
+		catch (Exception e) {
+			if (tx!=null) tx.rollback();
+			throw e;
+		}
+		finally {
+			s.close();
+		}
+	}
+
+	/**
+	 * Demonstrates transitive persistence
+	 */
+	public void createTestAuctions() throws Exception {
+		System.out.println("Setting up some test data");
+
+		Session s = factory.openSession();
+		Transaction tx = s.beginTransaction();
+
+		User seller = new User();
+		seller.setUserName("xam");
+		seller.setName( new Name("Max", new Character('R'), "Andersen") );
+		seller.setEmail("max at hibernate.org");
+		seller.setPassword("******");
+		seller.setAuctions( new ArrayList() );
+		s.save(seller);
+		User bidder1 = new User();
+		bidder1.setUserName("1E1");
+		bidder1.setName( new Name( "Gavin", new Character('A'), "King") );
+		bidder1.setEmail("gavin at hibernate.org");
+		bidder1.setPassword("******");
+		bidder1.setBids( new ArrayList() );
+		s.save(bidder1);
+		User bidder2 = new User();
+		bidder2.setUserName("steve");
+		bidder2.setName( new Name("Steve", null, "Ebersole") );
+		bidder2.setEmail("steve at hibernate.org");
+		bidder2.setPassword("******");
+		bidder2.setBids( new ArrayList() );
+		s.save(bidder2);
+
+		for ( int i=0; i<3; i++ ) {
+			AuctionItem item = new AuctionItem();
+			item.setShortDescription("Auction " + i);
+			item.setDescription("the auction item number " + i);
+			item.setEnds( new Date() );
+			item.setBids( new ArrayList() );
+			item.setSeller(seller);
+			item.setCondition(i*3 + 2);
+			for ( int j=0; j<i; j++ ) {
+
+				Bid bid = new Bid();
+				bid.setBidder(bidder1);
+				bid.setAmount(j);
+				bid.setDatetime( new Date() );
+				bid.setItem(item);
+				item.getBids().add(bid);
+				bidder1.getBids().add(bid);
+
+				Bid bid2 = new Bid();
+				bid2.setBidder(bidder2);
+				bid2.setAmount( j + 0.5f);
+				bid2.setDatetime( new Date() );
+				bid2.setItem(item);
+				item.getBids().add(bid2);
+				bidder2.getBids().add(bid2);
+			}
+			seller.getAuctions().add(item);
+			mainItem = item;
+		}
+		mainBidder = bidder2;
+		mainSeller = seller;
+
+		BuyNow buyNow = new BuyNow();
+		buyNow.setAmount(1.2f);
+		buyNow.setDatetime( new Date() );
+		buyNow.setBidder(mainBidder);
+		buyNow.setItem(mainItem);
+		mainBidder.getBids().add(buyNow);
+		mainItem.getBids().add(buyNow);
+
+		tx.commit();
+		s.close();
+	}
+
+	static AuctionItem mainItem;
+	static User mainBidder;
+	static User mainSeller;
+
+	public static void main(String[] args) throws Exception {
+
+		final Main test = new Main();
+
+		Configuration cfg = new Configuration()
+			.addClass(AuctionItem.class)
+			.addClass(Bid.class)
+			.addClass(User.class)
+			.setProperty(Environment.HBM2DDL_AUTO, "create");
+		//cfg.setProperty("hibernate.show_sql", "true");
+
+		test.factory = cfg.buildSessionFactory();
+
+		test.createTestAuctions();
+		test.viewAllAuctionsSlow();
+
+		test.viewAllAuctionsFast();
+		test.bidOnAuction(mainBidder, mainItem, 5.5f);
+		test.viewAllAuctionsFast();
+
+		test.viewUserAuctions( mainSeller.getId() );
+		mainSeller.setEmail("max at jboss.org");
+		test.changeUserDetails(mainSeller);
+		test.changeItemDescription(mainItem.getId(), "new description");
+		test.viewUserAuctions( mainSeller.getId() );
+
+		test.viewAuctionsByDescription("It", 0);
+		test.viewAuctionsByDescription("DESC", 3);
+		test.viewAuctionsByDescription("DESC", 8);
+
+		test.factory.close();
+
+	}
+}

Added: core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Name.java
===================================================================
--- core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Name.java	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Name.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,51 @@
+//$Id: Name.java 3890 2004-06-03 16:31:32Z steveebersole $
+package org.hibernate.auction;
+
+/**
+ * @author Gavin King
+ */
+public class Name {
+	private String firstName;
+	private String lastName;
+	private Character initial;
+	private Name() {}
+	public Name(String first, Character middle, String last) {
+		firstName = first;
+		initial = middle;
+		lastName = last;
+	}
+	public String getFirstName() {
+		return firstName;
+	}
+
+	public void setFirstName(String firstName) {
+		this.firstName = firstName;
+	}
+
+	public Character getInitial() {
+		return initial;
+	}
+
+	public void setInitial(Character initial) {
+		this.initial = initial;
+	}
+
+	public String getLastName() {
+		return lastName;
+	}
+
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+	
+	public String toString() {
+		StringBuffer buf = new StringBuffer()
+			.append(firstName)
+			.append(' ');
+		if (initial!=null) buf.append(initial)
+			.append(' ');
+		return buf.append(lastName)
+			.toString();
+	}
+
+}

Added: core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Persistent.java
===================================================================
--- core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Persistent.java	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/Persistent.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,17 @@
+//$Id: Persistent.java 3890 2004-06-03 16:31:32Z steveebersole $
+package org.hibernate.auction;
+
+/**
+ * @author Gavin King
+ */
+public class Persistent {
+	private Long id;
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long long1) {
+		id = long1;
+	}
+
+}

Added: core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/User.hbm.xml
===================================================================
--- core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/User.hbm.xml	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/User.hbm.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC 
+	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping 
+	package="org.hibernate.auction">
+
+	<class name="User" table="AuctionUser" lazy="true">
+		<comment>Users may bid for or sell auction items.</comment>
+		
+		<id name="id">
+			<generator class="native"/>
+		</id>
+		
+		<natural-id mutable="true">
+			<property name="userName"
+					length="10"/>
+		</natural-id>
+		
+		<property name="password" 
+				not-null="true"
+				length="15"
+				column="`password`"/>
+		
+		<property name="email"/>
+		
+		<component name="name">
+			<property name="firstName"
+					length="50"
+					not-null="true"/>
+			<property name="initial" 
+					column="`initial`"/>
+			<property name="lastName"
+					length="50"
+					not-null="true"/>
+		</component>
+		
+		<bag name="bids"
+				inverse="true" 
+				cascade="save-update,lock">
+			<key column="bidder"/>
+			<one-to-many class="Bid"/>
+		</bag>
+		
+		<bag name="auctions"
+				inverse="true" 
+				cascade="save-update,lock">
+			<key column="seller"/>
+			<one-to-many class="AuctionItem"/>
+		</bag>
+		
+	</class>
+	
+</hibernate-mapping>
\ No newline at end of file

Added: core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/User.java
===================================================================
--- core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/User.java	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/java/org/hibernate/auction/User.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,69 @@
+//$Id: User.java 3890 2004-06-03 16:31:32Z steveebersole $
+package org.hibernate.auction;
+
+import java.util.List;
+
+/**
+ * @author Gavin King
+ */
+public class User extends Persistent {
+	private String userName;
+	private String password;
+	private String email;
+	private Name name;
+	private List bids;
+	private List auctions;
+	
+	public String getEmail() {
+		return email;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setEmail(String string) {
+		email = string;
+	}
+
+	public void setPassword(String string) {
+		password = string;
+	}
+
+	public void setUserName(String string) {
+		userName = string;
+	}
+
+	public List getAuctions() {
+		return auctions;
+	}
+
+	public List getBids() {
+		return bids;
+	}
+
+	public void setAuctions(List list) {
+		auctions = list;
+	}
+
+	public void setBids(List list) {
+		bids = list;
+	}
+	
+	public String toString() {
+		return userName;
+	}
+
+	public Name getName() {
+		return name;
+	}
+
+	public void setName(Name name) {
+		this.name = name;
+	}
+
+}

Added: core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/AuctionItem.hbm.xml
===================================================================
--- core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/AuctionItem.hbm.xml	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/AuctionItem.hbm.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC 
+	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping 
+	package="org.hibernate.auction">
+
+	<import class="AuctionInfo"/>
+
+	<class name="AuctionItem">
+		<comment>An item that is being auctioned.</comment>
+		
+		<id name="id">
+			<generator class="native"/>
+		</id>
+		
+		<natural-id>
+			<many-to-one name="seller"/>
+			<property name="shortDescription"
+					length="200"/>
+		</natural-id>
+				
+		<property name="description"
+				length="1000"/>
+				
+		<property name="ends"/>
+		
+		<property name="condition" column="`CONDITION`"/>
+		
+		<many-to-one name="successfulBid" 
+				outer-join="false"/>
+		
+		<bag name="bids"
+				inverse="true" 
+				cascade="all">
+			<key column="item"/>
+			<one-to-many class="Bid"/>
+		</bag>
+		
+	</class>
+		
+</hibernate-mapping>
\ No newline at end of file

Added: core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/Bid.hbm.xml
===================================================================
--- core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/Bid.hbm.xml	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/Bid.hbm.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC 
+	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping 
+	package="org.hibernate.auction">
+
+	<class name="Bid" 
+		discriminator-value="N">
+		<comment>A bid or "buy now" for an item.</comment>
+		
+		<id name="id">
+			<generator class="native"/>
+		</id>
+		
+		<discriminator type="char">
+			<column name="isBuyNow">
+				<comment>Y if a "buy now", N if a regular bid.</comment>
+			</column>
+		</discriminator>
+		
+		<natural-id>
+			<many-to-one name="item"/>
+			<property name="amount"/>
+		</natural-id>
+		
+		<property name="datetime" 
+				not-null="true" 
+				column="`datetime`"/>
+		
+		<many-to-one name="bidder" 
+				not-null="true"/>
+		
+		<subclass name="BuyNow" 
+			discriminator-value="Y"/>
+			
+	</class>
+	
+</hibernate-mapping>
\ No newline at end of file

Added: core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/User.hbm.xml
===================================================================
--- core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/User.hbm.xml	                        (rev 0)
+++ core/trunk/tutorials/eg/src/main/resources/org/hibernate/auction/User.hbm.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC 
+	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping 
+	package="org.hibernate.auction">
+
+	<class name="User" table="AuctionUser" lazy="true">
+		<comment>Users may bid for or sell auction items.</comment>
+		
+		<id name="id">
+			<generator class="native"/>
+		</id>
+		
+		<natural-id mutable="true">
+			<property name="userName"
+					length="10"/>
+		</natural-id>
+		
+		<property name="password" 
+				not-null="true"
+				length="15"
+				column="`password`"/>
+		
+		<property name="email"/>
+		
+		<component name="name">
+			<property name="firstName"
+					length="50"
+					not-null="true"/>
+			<property name="initial" 
+					column="`initial`"/>
+			<property name="lastName"
+					length="50"
+					not-null="true"/>
+		</component>
+		
+		<bag name="bids"
+				inverse="true" 
+				cascade="save-update,lock">
+			<key column="bidder"/>
+			<one-to-many class="Bid"/>
+		</bag>
+		
+		<bag name="auctions"
+				inverse="true" 
+				cascade="save-update,lock">
+			<key column="seller"/>
+			<one-to-many class="AuctionItem"/>
+		</bag>
+		
+	</class>
+	
+</hibernate-mapping>
\ No newline at end of file

Added: core/trunk/tutorials/pom.xml
===================================================================
--- core/trunk/tutorials/pom.xml	                        (rev 0)
+++ core/trunk/tutorials/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,340 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>org.hibernate</groupId>
+        <artifactId>hibernate</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <groupId>org.hibernate</groupId>
+    <artifactId>hibernate-tutorials</artifactId>
+    <packaging>pom</packaging>
+
+    <name>Hibernate Tutorials</name>
+    <description>Series of tutorials demonstrating Hibernate functionality</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>${groupId}</groupId>
+            <artifactId>hibernate-core</artifactId>
+            <version>${version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${groupId}</groupId>
+            <artifactId>hibernate-testing</artifactId>
+            <version>${version}</version>
+        </dependency>
+        <!-- these are optional on core... :( -->
+        <dependency>
+            <groupId>javassist</groupId>
+            <artifactId>javassist</artifactId>
+            <version>3.4.GA</version>
+        </dependency>
+        <dependency>
+            <groupId>cglib</groupId>
+            <artifactId>cglib</artifactId>
+            <version>2.1_3</version>
+        </dependency>
+        <dependency>
+            <groupId>asm</groupId>
+            <artifactId>asm-attrs</artifactId>
+            <version>1.5.3</version>
+        </dependency>
+        <!-- optional dom4j dependency; needed here for dom4j (de)serialization -->
+        <dependency>
+            <groupId>jaxen</groupId>
+            <artifactId>jaxen</artifactId>
+            <version>1.1</version>
+        </dependency>
+        <!-- the tutorials use HSQLDB -->
+         <dependency>
+             <groupId>hsqldb</groupId>
+             <artifactId>hsqldb</artifactId>
+             <version>1.8.0.2</version>
+        </dependency>
+        <!-- logging setup -->
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>99.0-does-not-exist</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging-api</artifactId>
+            <version>99.0-does-not-exist</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl104-over-slf4j</artifactId>
+            <version>1.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>1.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>1.2.14</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <testResources>
+            <testResource>
+                <filtering>false</filtering>
+                <directory>src/test/java</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                </includes>
+            </testResource>
+            <testResource>
+                <filtering>true</filtering>
+                <directory>src/test/resources</directory>
+            </testResource>
+        </testResources>
+
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.5</source>
+                    <target>1.5</target>
+                </configuration>
+              </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <!-- HSQLDB is the default (eventually move to H2) -->
+        <profile>
+            <id>hsqldb</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>hsqldb</groupId>
+                    <artifactId>hsqldb</artifactId>
+                    <version>1.8.0.2</version>
+                </dependency>
+            </dependencies>
+            <properties>
+                <db.dialect>org.hibernate.dialect.HSQLDialect</db.dialect>
+                <jdbc.driver>org.hsqldb.jdbcDriver</jdbc.driver>
+                <jdbc.url>jdbc:hsqldb:target/test/db/hsqldb/hibernate</jdbc.url>
+                <jdbc.user>sa</jdbc.user>
+                <jdbc.pass />
+                <jdbc.isolation />
+            </properties>
+        </profile>
+
+        <!-- The H2 test envionment -->
+        <profile>
+            <id>h2</id>
+            <dependencies>
+                <dependency>
+                    <groupId>org.h2database</groupId>
+                    <artifactId>h2database</artifactId>
+                    <version>1.0.20061217</version>
+                </dependency>
+            </dependencies>
+            <properties>
+                <db.dialect>org.hibernate.dialect.H2Dialect</db.dialect>
+                <jdbc.driver>org.h2.Driver</jdbc.driver>
+                <jdbc.url>jdbc:h2:mem:target/test/db/h2/hibernate</jdbc.url>
+                <jdbc.user>sa</jdbc.user>
+                <jdbc.pass />
+                <jdbc.isolation />
+            </properties>
+        </profile>
+
+        <!--
+            ###################################################################
+            Profiles naming db instances in the Red Hat QA/QE lab
+
+            First, those with OSS drivers
+            ###################################################################
+        -->
+
+        <!-- The MySQL5 test envionment -->
+        <profile>
+            <id>mysql5</id>
+            <dependencies>
+                <dependency>
+                    <groupId>mysql</groupId>
+                    <artifactId>mysql-connector-java</artifactId>
+                    <version>5.0.5</version>
+                </dependency>
+            </dependencies>
+            <properties>
+                <db.dialect>org.hibernate.dialect.MySQL5InnoDBDialect</db.dialect>
+                <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
+                <jdbc.url>jdbc:mysql://dev02.qa.atl.jboss.com/cruisecontrol</jdbc.url>
+                <jdbc.user>cruisecontrol</jdbc.user>
+                <jdbc.pass>cruisecontrol</jdbc.pass>
+                <jdbc.isolation />
+            </properties>
+        </profile>
+
+        <!-- The PostgreSQL test envionment -->
+        <profile>
+            <id>pgsql8</id>
+            <dependencies>
+                <dependency>
+                    <groupId>postgresql</groupId>
+                    <artifactId>postgresql</artifactId>
+                    <version>8.2-504</version>
+                    <classifier>jdbc3</classifier>
+                </dependency>
+            </dependencies>
+            <properties>
+                <db.dialect>org.hibernate.dialect.PostgreSQLDialect</db.dialect>
+                <jdbc.driver>org.postgresql.Driver</jdbc.driver>
+                <jdbc.url>jdbc:postgresql://dev01.qa.atl.jboss.com:5432:cruisecontrol</jdbc.url>
+                <jdbc.user>cruisecontrol</jdbc.user>
+                <jdbc.pass>cruisecontrol</jdbc.pass>
+                <jdbc.isolation />
+            </properties>
+        </profile>
+
+        <!--
+            ###################################################################
+            Then, those with commercial drivers
+            ###################################################################
+        -->
+
+        <!-- The Oracle9i test envionment -->
+        <profile>
+            <id>oracle9i</id>
+            <dependencies>
+                <dependency>
+                    <groupId>com.oracle</groupId>
+                    <artifactId>ojdbc14</artifactId>
+                    <!-- use the 10g drivers which are surprisingly largely bug free -->
+                    <version>10.0.2.0</version>
+                </dependency>
+            </dependencies>
+            <properties>
+                <db.dialect>org.hibernate.dialect.Oracle9iDialect</db.dialect>
+                <jdbc.driver>oracle.jdbc.driver.OracleDriver</jdbc.driver>
+                <jdbc.url>jdbc:oracle:thin:@dev20.qa.atl.jboss.com:1521:qa</jdbc.url>
+                <jdbc.user>cruisecontrol</jdbc.user>
+                <jdbc.pass>cruisecontrol</jdbc.pass>
+                <jdbc.isolation />
+            </properties>
+        </profile>
+
+        <!-- The Oracle10g test envionment -->
+        <profile>
+            <id>oracle10g</id>
+            <dependencies>
+                <dependency>
+                    <groupId>com.oracle</groupId>
+                    <artifactId>ojdbc14</artifactId>
+                    <!-- use the 10g drivers which are surprisingly largely bug free -->
+                    <version>10.0.2.0</version>
+                </dependency>
+            </dependencies>
+            <properties>
+                <db.dialect>org.hibernate.dialect.Oracle10gDialect</db.dialect>
+                <jdbc.driver>oracle.jdbc.driver.OracleDriver</jdbc.driver>
+                <jdbc.url>jdbc:oracle:thin:@dev01.qa.atl.jboss.com:1521:qadb01</jdbc.url>
+                <jdbc.user>cruisecontrol</jdbc.user>
+                <jdbc.pass>cruisecontrol</jdbc.pass>
+                <jdbc.isolation />
+            </properties>
+        </profile>
+
+        <!-- The DB2 8.x test envionment (using 9x drivers)-->
+        <profile>
+            <id>db2-8</id>
+            <dependencies>
+                <dependency>
+                    <groupId>com.ibm</groupId>
+                    <artifactId>db2jcc</artifactId>
+                    <version>3.1.57</version>
+                </dependency>
+                <dependency>
+                    <groupId>com.ibm</groupId>
+                    <artifactId>db2jcc_license_cu</artifactId>
+                    <version>3.1.57</version>
+                </dependency>
+            </dependencies>
+            <properties>
+                <db.dialect>org.hibernate.dialect.DB2Dialect</db.dialect>
+                <jdbc.driver>com.ibm.db2.jcc.DB2Driver</jdbc.driver>
+                <jdbc.url>jdbc:db2://dev32.qa.atl.jboss.com:50000/jbossqa</jdbc.url>
+                <jdbc.user>hiber</jdbc.user>
+                <jdbc.pass>hiber</jdbc.pass>
+                <jdbc.isolation />
+            </properties>
+        </profile>
+
+        <!-- The Sybase 12 test envionment -->
+        <profile>
+            <id>sybase12</id>
+            <dependencies>
+                <dependency>
+                    <groupId>com.sybase</groupId>
+                    <artifactId>jconnect</artifactId>
+                    <version>6.0.5</version>
+                </dependency>
+            </dependencies>
+            <properties>
+                <db.dialect>org.hibernate.dialect.SybaseDialect</db.dialect>
+                <jdbc.driver>com.sybase.jdbc3.jdbc.SybDriver</jdbc.driver>
+                <jdbc.url>jdbc:sybase:Tds:dev01.qa.atl.jboss.com:4100/cruisecontrol</jdbc.url>
+                <jdbc.user>cruisecontrol</jdbc.user>
+                <jdbc.pass>cruisecontrol</jdbc.pass>
+                <jdbc.isolation />
+            </properties>
+        </profile>
+
+        <!-- The SQLServer2005 (jTDS) test envionment -->
+        <profile>
+            <id>sqlserver-jtds</id>
+            <dependencies>
+                <dependency>
+                    <groupId>net.sourceforge.jtds</groupId>
+                    <artifactId>jtds</artifactId>
+                    <version>1.2</version>
+                </dependency>
+            </dependencies>
+            <properties>
+                <db.dialect>org.hibernate.dialect.SQLServerDialect</db.dialect>
+                <jdbc.driver>net.sourceforge.jtds.jdbc.Driver</jdbc.driver>
+                <jdbc.url>jdbc:jtds:sqlserver://dev30.qa.atl.jboss.com:3918/cruisecontrol</jdbc.url>
+                <jdbc.user>cruisecontrol</jdbc.user>
+                <jdbc.pass>cruisecontrol</jdbc.pass>
+                <jdbc.isolation />
+            </properties>
+        </profile>
+
+        <!-- The SQLServer2005 (MS JDBC) test envionment -->
+        <profile>
+            <id>sqlserver-msjdbc</id>
+            <dependencies>
+                <dependency>
+                    <groupId>com.microsoft.sqlserver</groupId>
+                    <artifactId>msjdbc</artifactId>
+                    <version>1.1</version>
+                </dependency>
+            </dependencies>
+            <properties>
+                <db.dialect>org.hibernate.dialect.SQLServerDialect</db.dialect>
+                <jdbc.driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc.driver>
+                <jdbc.url>jdbc:sqlserver://dev30.qa.atl.jboss.com:3918</jdbc.url>
+                <jdbc.user>cruisecontrol</jdbc.user>
+                <jdbc.pass>cruisecontrol</jdbc.pass>
+                <jdbc.isolation>4096</jdbc.isolation>
+            </properties>
+        </profile>
+
+    </profiles>
+</project>
\ No newline at end of file

Added: core/trunk/tutorials/web/pom.xml
===================================================================
--- core/trunk/tutorials/web/pom.xml	                        (rev 0)
+++ core/trunk/tutorials/web/pom.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,29 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" 
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>org.hibernate</groupId>
+        <artifactId>hibernate-tutorials</artifactId>
+        <version>3.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <groupId>org.hibernate</groupId>
+    <artifactId>hibernate-tutorial-web</artifactId>
+    <packaging>war</packaging>
+
+    <name>Hibernate Tutorial</name>
+    <description>A tutorial project showcasing Hibernate usage</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>2.3</version>
+        </dependency>
+    </dependencies>
+
+</project>

Added: core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/domain/Event.java
===================================================================
--- core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/domain/Event.java	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/domain/Event.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,48 @@
+package org.hibernate.tutorial.domain;
+
+import java.util.*;
+
+public class Event {
+    private Long id;
+
+    private String title;
+    private Date date;
+
+    public Event() {}
+
+    public Long getId() {
+        return id;
+    }
+
+    private void setId(Long id) {
+        this.id = id;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+    
+
+    private Set participants = new HashSet();
+
+    public Set getParticipants() {
+        return participants;
+    }
+
+    public void setParticipants(Set participants) {
+        this.participants = participants;
+    }
+
+}
\ No newline at end of file

Added: core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/domain/Person.java
===================================================================
--- core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/domain/Person.java	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/domain/Person.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,80 @@
+package org.hibernate.tutorial.domain;
+
+import java.util.*;
+
+public class Person {
+
+    private Long id;
+    private int age;
+    private String firstname;
+    private String lastname;
+
+    public Person() {}
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public int getAge() {
+        return age;
+    }
+
+    public void setAge(int age) {
+        this.age = age;
+    }
+
+    public String getFirstname() {
+        return firstname;
+    }
+
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
+
+    public String getLastname() {
+        return lastname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+
+
+    private Set emailAddresses = new HashSet();
+
+    public Set getEmailAddresses() {
+        return emailAddresses;
+    }
+
+    public void setEmailAddresses(Set emailAddresses) {
+        this.emailAddresses = emailAddresses;
+    }
+
+
+    private Set events = new HashSet();
+
+    // Defensive, convenience methods
+    protected Set getEvents() {
+        return events;
+    }
+
+    protected void setEvents(Set events) {
+        this.events = events;
+    }
+
+    public void addToEvent(Event event) {
+        this.getEvents().add(event);
+        event.getParticipants().add(this);
+    }
+
+    public void removeFromEvent(Event event) {
+        this.getEvents().remove(event);
+        event.getParticipants().remove(this);
+    }
+
+}
\ No newline at end of file

Added: core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/util/HibernateUtil.java
===================================================================
--- core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/util/HibernateUtil.java	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/util/HibernateUtil.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,25 @@
+package org.hibernate.tutorial.util;
+
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.Configuration;
+
+public class HibernateUtil {
+
+    private static final SessionFactory sessionFactory;
+
+    static {
+        try {
+            // Create the SessionFactory from hibernate.cfg.xml
+            sessionFactory = new Configuration().configure().buildSessionFactory();
+        } catch (Throwable ex) {
+            // Make sure you log the exception, as it might be swallowed
+            System.err.println("Initial SessionFactory creation failed." + ex);
+            throw new ExceptionInInitializerError(ex);
+        }
+    }
+
+    public static SessionFactory getSessionFactory() {
+        return sessionFactory;
+    }
+
+}
\ No newline at end of file

Added: core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/EventManager.java
===================================================================
--- core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/EventManager.java	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/EventManager.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,138 @@
+package org.hibernate.tutorial.web;
+
+import java.util.Date;
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.tutorial.domain.Event;
+import org.hibernate.tutorial.domain.Person;
+import org.hibernate.tutorial.util.HibernateUtil;
+
+public class EventManager {
+
+    public static void main(String[] args) {
+        EventManager mgr = new EventManager();
+
+        if (args[0].equals("store")) {
+            mgr.createAndStoreEvent("My Event", new Date());
+        }
+        else if (args[0].equals("list")) {
+            List events = mgr.listEvents();
+            for (int i = 0; i < events.size(); i++) {
+                Event theEvent = (Event) events.get(i);
+                System.out.println("Event: " + theEvent.getTitle() +
+                                   " Time: " + theEvent.getDate());
+            }
+        }
+        else if (args[0].equals("addpersontoevent")) {
+            Long eventId = mgr.createAndStoreEvent("My Event", new Date());
+            Long personId = mgr.createAndStorePerson("Foo", "Bar");
+            mgr.addPersonToEvent(personId, eventId);
+            System.out.println("Added person " + personId + " to event " + eventId);
+        }
+        else if (args[0].equals("addemailtoperson")) {
+            Long personId = mgr.createAndStorePerson("Foozy", "Beary");
+            mgr.addEmailToPerson(personId, "foo at bar");
+            mgr.addEmailToPerson(personId, "bar at foo");
+            System.out.println("Added two email addresses (value typed objects) to person entity : " + personId);
+        }
+
+        HibernateUtil.getSessionFactory().close();
+    }
+
+    private Long createAndStoreEvent(String title, Date theDate) {
+
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        session.beginTransaction();
+
+        Event theEvent = new Event();
+        theEvent.setTitle(title);
+        theEvent.setDate(theDate);
+
+        session.save(theEvent);
+
+        session.getTransaction().commit();
+
+        return theEvent.getId();
+    }
+
+    private Long createAndStorePerson(String firstname, String lastname) {
+
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        session.beginTransaction();
+
+        Person thePerson = new Person();
+        thePerson.setFirstname(firstname);
+        thePerson.setLastname(lastname);
+
+        session.save(thePerson);
+
+        session.getTransaction().commit();
+
+        return thePerson.getId();
+    }
+
+
+    private List listEvents() {
+
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        session.beginTransaction();
+
+        List result = session.createQuery("from Event").list();
+
+        session.getTransaction().commit();
+
+        return result;
+    }
+
+    private void addPersonToEvent(Long personId, Long eventId) {
+
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        session.beginTransaction();
+
+        Person aPerson = (Person) session
+                .createQuery("select p from Person p left join fetch p.events where p.id = :pid")
+                .setParameter("pid", personId)
+                .uniqueResult(); // Eager fetch the collection so we can use it detached
+
+        Event anEvent = (Event) session.load(Event.class, eventId);
+        // If we want to handle it bidirectional and detached, we also need to load this
+        // collection with an eager outer-join fetch, this time with Criteria and not HQL:
+        /*
+        Event anEvent = (Event) session
+                .createCriteria(Event.class).setFetchMode("participants", FetchMode.JOIN)
+                .add( Expression.eq("id", eventId) )
+                .uniqueResult(); // Eager fetch the colleciton so we can use it detached
+        */
+
+        session.getTransaction().commit();
+
+        // End of first unit of work
+
+		aPerson.addToEvent( anEvent );
+        // or bidirectional safety method, setting both sides: aPerson.addToEvent(anEvent);
+
+        // Begin second unit of work
+
+        Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();
+        session2.beginTransaction();
+
+        session2.update(aPerson); // Reattachment of aPerson
+
+        session2.getTransaction().commit();
+    }
+
+    private void addEmailToPerson(Long personId, String emailAddress) {
+
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        session.beginTransaction();
+
+        Person aPerson = ( Person ) session.load(Person.class, personId);
+
+        // The getEmailAddresses() might trigger a lazy load of the collection
+        aPerson.getEmailAddresses().add(emailAddress);
+
+        session.getTransaction().commit();
+    }
+
+}
\ No newline at end of file

Added: core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/EventManagerServlet.java
===================================================================
--- core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/EventManagerServlet.java	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/EventManagerServlet.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,106 @@
+package org.hibernate.tutorial.web;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.hibernate.tutorial.domain.Event;
+import org.hibernate.tutorial.util.HibernateUtil;
+
+public class EventManagerServlet extends HttpServlet {
+
+    protected void doGet(HttpServletRequest request, HttpServletResponse response)
+            throws ServletException, IOException {
+
+        SimpleDateFormat dateFormatter = new SimpleDateFormat("dd.MM.yyyy");
+
+        try {
+            // Begin unit of work
+            HibernateUtil.getSessionFactory()
+                    .getCurrentSession().beginTransaction();
+
+            // Write HTML header
+            PrintWriter out = response.getWriter();
+            out.println("<html><head><title>Event Manager</title></head><body>");
+
+            // Handle actions
+            if ( "store".equals(request.getParameter("action")) ) {
+
+                String eventTitle = request.getParameter("eventTitle");
+                String eventDate = request.getParameter("eventDate");
+
+                if ( "".equals(eventTitle) || "".equals(eventDate) ) {
+                    out.println("<b><i>Please enter event title and date.</i></b>");
+                } else {
+                    createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));
+                    out.println("<b><i>Added event.</i></b>");
+                }
+            }
+
+            // Print page
+            printEventForm(out);
+            listEvents(out, dateFormatter);
+
+            // Write HTML footer
+            out.println("</body></html>");
+            out.flush();
+            out.close();
+
+            // End unit of work
+            HibernateUtil.getSessionFactory()
+                    .getCurrentSession().getTransaction().commit();
+
+        } catch (Exception ex) {
+            HibernateUtil.getSessionFactory()
+                    .getCurrentSession().getTransaction().rollback();
+            throw new ServletException(ex);
+        }
+    }
+
+    private void printEventForm(PrintWriter out) {
+        out.println("<h2>Add new event:</h2>");
+        out.println("<form>");
+        out.println("Title: <input name='eventTitle' length='50'/><br/>");
+        out.println("Date (e.g. 24.12.2009): <input name='eventDate' length='10'/><br/>");
+        out.println("<input type='submit' name='action' value='store'/>");
+        out.println("</form>");
+    }
+
+    private void listEvents(PrintWriter out, SimpleDateFormat dateFormatter) {
+        List result = HibernateUtil.getSessionFactory()
+                        .getCurrentSession().createCriteria(Event.class).list();
+        if (result.size() > 0) {
+            out.println("<h2>Events in database:</h2>");
+            out.println("<table border='1'>");
+            out.println("<tr>");
+            out.println("<th>Event title</th>");
+            out.println("<th>Event date</th>");
+            out.println("</tr>");
+            for (Iterator it = result.iterator(); it.hasNext();) {
+                Event event = (Event) it.next();
+                out.println("<tr>");
+                out.println("<td>" + event.getTitle() + "</td>");
+                out.println("<td>" + dateFormatter.format(event.getDate()) + "</td>");
+                out.println("</tr>");
+            }
+            out.println("</table>");
+        }
+    }
+
+    protected void createAndStoreEvent(String title, Date theDate) {
+        Event theEvent = new Event();
+        theEvent.setTitle(title);
+        theEvent.setDate(theDate);
+
+        HibernateUtil.getSessionFactory()
+                        .getCurrentSession().save(theEvent);
+    }
+
+}

Added: core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/SessionFactoryInitializer.java
===================================================================
--- core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/SessionFactoryInitializer.java	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/SessionFactoryInitializer.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,24 @@
+package org.hibernate.tutorial.web;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.hibernate.tutorial.util.HibernateUtil;
+
+/**
+ * Demonstrates good practice of making sure the SessionFactory is initialized
+ * on application startup, rather than on first request.  Here we register
+ * as a listener to the servlet context lifecycle for building/closing of the
+ * SessionFactory.
+ *
+ * @author Steve Ebersole
+ */
+public class SessionFactoryInitializer implements ServletContextListener {
+	public void contextInitialized(ServletContextEvent event) {
+		HibernateUtil.getSessionFactory();
+	}
+
+	public void contextDestroyed(ServletContextEvent event) {
+		HibernateUtil.getSessionFactory().close();
+	}
+}

Added: core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/SessionInterceptor.java
===================================================================
--- core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/SessionInterceptor.java	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/java/org/hibernate/tutorial/web/SessionInterceptor.java	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,62 @@
+package org.hibernate.tutorial.web;
+
+import java.io.IOException;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.hibernate.classic.Session;
+import org.hibernate.context.ManagedSessionContext;
+import org.hibernate.tutorial.util.HibernateUtil;
+
+/**
+ * Illustrates a servlet filter used to apply a Hibernate session
+ * to the "context" of the web request.
+ *
+ * @author Steve Ebersole
+ */
+public class SessionInterceptor implements Filter {
+
+	private static final Logger log = LoggerFactory.getLogger( SessionInterceptor.class );
+
+	public void doFilter(
+			ServletRequest request,
+			ServletResponse response,
+			FilterChain chain) throws IOException, ServletException {
+		log.trace( "===> opening session for request [" + request.hashCode() + "]" );
+		// Start the session to be used for this request
+		Session session = HibernateUtil.getSessionFactory().openSession();
+
+		try {
+			// make the session available to the session factory's "current context"
+			ManagedSessionContext.bind( session );
+
+			// pass control along to the rest of the processing chain
+			chain.doFilter( request, response );
+		}
+		finally {
+			log.trace( "===> cleaning-up session for request [" + request.hashCode() + "]" );
+			// remove session from "current context"
+			ManagedSessionContext.unbind( HibernateUtil.getSessionFactory() );
+
+			try {
+				session.close();
+			}
+			catch( Throwable t ) {
+				log.warn( "was unable to properly close session for request [" + request.hashCode() + "]" );
+			}
+		}
+	}
+
+	public void init(FilterConfig filterConfig) throws ServletException {
+	}
+
+	public void destroy() {
+	}
+}

Added: core/trunk/tutorials/web/src/main/resources/hibernate.cfg.xml
===================================================================
--- core/trunk/tutorials/web/src/main/resources/hibernate.cfg.xml	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/resources/hibernate.cfg.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,40 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!DOCTYPE hibernate-configuration PUBLIC
+        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
+
+<hibernate-configuration>
+
+    <session-factory>
+
+        <!-- Database connection settings -->
+        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
+        <property name="connection.url">jdbc:hsqldb:hsql://localhost</property>
+        <property name="connection.username">sa</property>
+        <property name="connection.password"></property>
+
+        <!-- JDBC connection pool (use the built-in) -->
+        <property name="connection.pool_size">2</property>
+
+        <!-- SQL dialect -->
+        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
+
+        <!-- Enable Hibernate's current session context -->
+        <property name="current_session_context_class">org.hibernate.context.ManagedSessionContext</property>
+
+        <!-- Disable the second-level cache  -->
+        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
+
+        <!-- Echo all executed SQL to stdout -->
+        <property name="show_sql">true</property>
+
+        <!-- Drop and re-create the database schema on startup -->
+        <property name="hbm2ddl.auto">create</property>
+
+        <mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/>
+        <mapping resource="org/hibernate/tutorial/domain/Person.hbm.xml"/>
+
+    </session-factory>
+
+</hibernate-configuration>
+

Added: core/trunk/tutorials/web/src/main/resources/log4j.properties
===================================================================
--- core/trunk/tutorials/web/src/main/resources/log4j.properties	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/resources/log4j.properties	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,41 @@
+### direct log messages to stdout ###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
+
+### set log levels - for more verbose logging change 'info' to 'debug' ###
+
+log4j.rootLogger=warn, stdout
+
+log4j.logger.org.hibernate=info
+#log4j.logger.org.hibernate=debug
+
+### log HQL query parser activity
+#log4j.logger.org.hibernate.hql.ast.AST=debug
+
+### log just the SQL
+#log4j.logger.org.hibernate.SQL=debug
+
+### log JDBC bind parameters ###
+log4j.logger.org.hibernate.type=info
+#log4j.logger.org.hibernate.type=debug
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=debug
+
+### log HQL parse trees
+#log4j.logger.org.hibernate.hql=debug
+
+### log cache activity ###
+#log4j.logger.org.hibernate.cache=debug
+
+### log transaction activity
+#log4j.logger.org.hibernate.transaction=debug
+
+### log JDBC resource acquisition
+#log4j.logger.org.hibernate.jdbc=debug
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

Added: core/trunk/tutorials/web/src/main/resources/org/hibernate/tutorial/domain/Event.hbm.xml
===================================================================
--- core/trunk/tutorials/web/src/main/resources/org/hibernate/tutorial/domain/Event.hbm.xml	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/resources/org/hibernate/tutorial/domain/Event.hbm.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.hibernate.tutorial.domain">
+
+    <class name="Event" table="EVENTS">
+        <id name="id" column="EVENT_ID">
+            <generator class="native"/>
+        </id>
+        <property name="date" type="timestamp" column="EVENT_DATE"/>
+        <property name="title"/>
+
+        <set name="participants" table="PERSON_EVENT" inverse="true">
+            <key column="EVENT_ID"/>
+            <many-to-many column="PERSON_ID" class="Person"/>
+        </set>
+
+    </class>
+
+
+</hibernate-mapping>
\ No newline at end of file

Added: core/trunk/tutorials/web/src/main/resources/org/hibernate/tutorial/domain/Person.hbm.xml
===================================================================
--- core/trunk/tutorials/web/src/main/resources/org/hibernate/tutorial/domain/Person.hbm.xml	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/resources/org/hibernate/tutorial/domain/Person.hbm.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.hibernate.tutorial.domain">
+
+    <class name="Person" table="PERSON">
+        <id name="id" column="PERSON_ID">
+            <generator class="native"/>
+        </id>
+        <property name="age"/>
+        <property name="firstname"/>
+        <property name="lastname"/>
+
+        <set name="events" table="PERSON_EVENT">
+            <key column="PERSON_ID"/>
+            <many-to-many column="EVENT_ID" class="Event"/>
+        </set>
+        
+        <set name="emailAddresses" table="PERSON_EMAIL_ADDR">
+            <key column="PERSON_ID"/>
+            <element type="string" column="EMAIL_ADDR"/>
+        </set>
+
+    </class>
+
+</hibernate-mapping>
\ No newline at end of file

Added: core/trunk/tutorials/web/src/main/scripts/runCleanDatabase.sh
===================================================================
--- core/trunk/tutorials/web/src/main/scripts/runCleanDatabase.sh	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/scripts/runCleanDatabase.sh	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,13 @@
+# Delete database and recreate/start it
+if test ! -d data
+then
+        mkdir data
+fi
+if test -d data
+then
+        echo Removing database files...
+        rm -r data/test.*
+fi
+echo Starting database engine...
+cd data/
+java -classpath ../lib/hsqldb.jar org.hsqldb.Server

Added: core/trunk/tutorials/web/src/main/webapp/WEB-INF/web.xml
===================================================================
--- core/trunk/tutorials/web/src/main/webapp/WEB-INF/web.xml	                        (rev 0)
+++ core/trunk/tutorials/web/src/main/webapp/WEB-INF/web.xml	2008-04-16 14:08:07 UTC (rev 14515)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="2.4"
+    xmlns="http://java.sun.com/xml/ns/j2ee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
+
+    <listener>
+        <listener-class>org.hibernate.tutorial.web.SessionFactoryInitializer</listener-class>
+    </listener>
+
+    <servlet>
+        <servlet-name>Event Manager</servlet-name>
+        <servlet-class>org.hibernate.tutorial.web.EventManagerServlet</servlet-class>
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>Event Manager</servlet-name>
+        <url-pattern>/eventmanager</url-pattern>
+    </servlet-mapping>
+
+    <filter>
+        <filter-name>Session Interceptor</filter-name>
+        <filter-class>org.hibernate.tutorial.web.SessionInterceptor</filter-class>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>Session Interceptor</filter-name>
+        <servlet-name>Event Manager</servlet-name>
+    </filter-mapping>
+
+</web-app>




More information about the hibernate-commits mailing list