[seam-commits] Seam SVN: r14500 - in branches/community/Seam_2_3/examples-ee6: spring and 28 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Wed Apr 4 08:04:26 EDT 2012


Author: maschmid
Date: 2012-04-04 08:04:24 -0400 (Wed, 04 Apr 2012)
New Revision: 14500

Added:
   branches/community/Seam_2_3/examples-ee6/spring/
   branches/community/Seam_2_3/examples-ee6/spring/pom.xml
   branches/community/Seam_2_3/examples-ee6/spring/readme.txt
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/pom.xml
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/java/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/java/org/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/java/org/jboss/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/java/org/jboss/seam/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/java/org/jboss/seam/example/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/java/org/jboss/seam/example/spring/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/java/org/jboss/seam/example/spring/test/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/java/org/jboss/seam/example/spring/test/selenium/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/java/org/jboss/seam/example/spring/test/selenium/SpringChangePasswordTest.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources-ftest/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources-ftest/testng.xml
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources/
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources/seam.properties
   branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources/spring.properties
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/pom.xml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/Booking.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/BookingListAction.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/BookingService.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/ChangePasswordAction.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/HibernateTestService.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/Hotel.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/HotelBookingAction.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/HotelSearchingAction.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/LoginAction.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/RegisterAction.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/User.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/UserService.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/ValidationException.java
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/resources/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/resources/META-INF/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/resources/META-INF/persistence-spring.xml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/resources/import.sql
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/resources/seam.properties
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/applicationContext.xml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/components.xml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/faces-config.xml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/navigation.xml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/pages.xml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/web.xml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/book.xhtml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/confirm.xhtml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/conversations.xhtml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/date.css
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/screen.css
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/trailblazer_main.css
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/home.xhtml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/hotel.xhtml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/hotels.xhtml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/bg.gif
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/btn.bg.gif
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/cal-next.png
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/cal-prev.png
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/cnt.bg.gif
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/dtpick.gif
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/hdr.ad.jpg
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/hdr.bar.jpg
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/hdr.bg.gif
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/hdr.title.gif
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/header_line.gif
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/input.bg.gif
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/sdb.bg.gif
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/spinner.gif
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/th.bg.gif
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/index.html
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/main.xhtml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/password.xhtml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/register.xhtml
   branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/template.xhtml
Log:
Add spring to ee6 examples


Added: branches/community/Seam_2_3/examples-ee6/spring/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/pom.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/pom.xml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.jboss.seam.examples-ee6</groupId>
+    <artifactId>spring</artifactId>
+    <parent>
+        <groupId>org.jboss.seam</groupId>
+        <artifactId>examples-ee6</artifactId>
+        <version>2.3.0.Beta2-SNAPSHOT</version>
+    </parent>
+    <packaging>pom</packaging>
+    <name>Spring Example (EE6)</name>
+    
+    <properties>
+        <example.name>spring</example.name>
+    </properties>
+    
+    <modules>
+        <module>spring-web</module>
+        <module>spring-tests</module>
+    </modules>
+    
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.jboss.seam.examples-ee6.spring</groupId>
+                <artifactId>spring-web</artifactId>
+                <version>${project.version}</version>
+                <type>war</type>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    
+</project>

Added: branches/community/Seam_2_3/examples-ee6/spring/readme.txt
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/readme.txt	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/readme.txt	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,22 @@
+Seam Spring Example
+===================
+
+This example shows Seam/Spring integration. This application runs on JBoss AS as
+a WAR file.
+
+To deploy the example to JBossAS 5, follow these steps:
+
+* In the example root directory run:
+
+    mvn clean package
+
+* Set JBOSS_HOME environment property.
+
+* In the spring-web directory run:
+
+    mvn jboss:hard-deploy
+
+When deploying to JBossAS 4, use a -Pjbossas42 maven profile to package the 
+application. Use -Pjbossas6 for JBossAS 6 accordingly.
+
+* Open this URL in a web browser: http://localhost:8080/jboss-seam-spring

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-tests/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-tests/pom.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-tests/pom.xml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>spring</artifactId>
+        <groupId>org.jboss.seam.examples-ee6</groupId>
+        <version>2.3.0.Beta2-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <groupId>org.jboss.seam.examples-ee6.spring</groupId>
+    <artifactId>spring-tests</artifactId>
+    <name>Spring Integration Tests Module (EE6)</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <classifier>jdk15</classifier>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam</artifactId>
+            <type>ejb</type>
+            <scope>test</scope>
+        </dependency>        
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.spec.javax.faces</groupId>
+            <artifactId>jboss-jsf-api_2.0_spec</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.seleniumhq.selenium.server</groupId>
+            <artifactId>selenium-server</artifactId>
+            <classifier>standalone</classifier>
+        </dependency>
+        <dependency>
+            <groupId>org.seleniumhq.selenium.client-drivers</groupId>
+            <artifactId>selenium-java-client-driver</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>functional-tests</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+        </plugins>     
+    </build>    
+    
+    <profiles>
+        <profile>
+            <id>ftest-jbossas</id>
+            <properties>
+                <example.context.path>jboss-seam-spring</example.context.path>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>selenium-maven-plugin</artifactId>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>failsafe-maven-plugin</artifactId>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+    
+</project>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/java/org/jboss/seam/example/spring/test/selenium/SpringChangePasswordTest.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/java/org/jboss/seam/example/spring/test/selenium/SpringChangePasswordTest.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/java/org/jboss/seam/example/spring/test/selenium/SpringChangePasswordTest.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,108 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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 software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */ 
+package org.jboss.seam.example.spring.test.selenium;
+
+import org.jboss.seam.example.common.test.booking.selenium.SeleniumBookingTest;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import static org.testng.AssertJUnit.*;
+
+/**
+ * This class tests change password funcionality.
+ * 
+ * @author jbalunas
+ * @author jharting
+ * 
+ */
+public class SpringChangePasswordTest extends SeleniumBookingTest {
+
+    private final static String LONG_TEXT = "testertestertest";
+    private final static String SHORT_TEXT = "tt";
+    // overriding default values
+    private final String USERNAME = "gavin";
+    private final String PASSWORD = "foobar";
+
+    @Override
+    @BeforeMethod
+    public void setUp() {
+       browser = startBrowser();
+       login(USERNAME, PASSWORD);
+    }
+
+    /**
+     * Verifies that changing password works well. If clean-up part of this
+     * method fails it may affect other methods.
+     */
+    @Test
+    public void changePasswordTest() {
+        String newPassword = "password";
+        changePassword(newPassword, PASSWORD);
+        assertTrue("Password change failed.", browser
+                .isTextPresent(getProperty("PASSWORD_UPDATED_MESSAGE")));
+        logout();
+        assertTrue("Login failed.", login(USERNAME, newPassword));
+        // cleanup - set default password
+        changePassword(PASSWORD, newPassword);
+        assertTrue("Password change failed.", browser
+                .isTextPresent(getProperty("PASSWORD_UPDATED_MESSAGE")));
+        logout();
+        assertTrue("Login failed.", login(USERNAME, PASSWORD));
+    }
+
+    @Test
+    public void usingIncorrectOldPasswordTest() {
+        changePassword("password", "foobar1");
+        assertTrue("Password verification failed", browser
+                .isTextPresent(getProperty("PASSWORD_REENTER_MESSAGE")));
+    }
+
+    @Test
+    public void usingEmptyPasswordsTest() {
+        changePassword("", "");
+        assertEquals("Password verification failed", 2, browser
+                .getXpathCount(getProperty("PASSWORD_VALUE_REQUIRED_MESSAGE")));
+    }
+
+    @Test
+    public void usingLongPasswordTest() {
+        changePassword(LONG_TEXT, LONG_TEXT);
+        assertTrue("Password verification failed", browser
+                .isTextPresent(getProperty("PASSWORD_LENGTH_MESSAGE")));
+    }
+
+    @Test
+    public void usingShortPasswordTest() {
+        changePassword(SHORT_TEXT, SHORT_TEXT);
+        assertTrue("Password verification failed", browser
+                .isTextPresent(getProperty("PASSWORD_LENGTH_MESSAGE")));
+    }
+
+    public void changePassword(String newPassword, String oldpassword) {
+        browser.click(getProperty("SETTINGS"));
+        browser.waitForPageToLoad(TIMEOUT);
+        browser.type(getProperty("PASSWORD_PASSWORD"), newPassword);
+        browser.type(getProperty("PASSWORD_VERIFY"), oldpassword);
+        browser.click(getProperty("PASSWORD_SUBMIT"));
+        browser.waitForPageToLoad(TIMEOUT);
+    }
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources/seam.properties
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources/seam.properties	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources/seam.properties	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,3 @@
+#debug is explicitly disabled in test to avoid JBIDE-3623
+#Thu Dec 31 16:24:37 CET 2009
+org.jboss.seam.core.init.debug=false
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources/spring.properties
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources/spring.properties	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources/spring.properties	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,86 @@
+ #
+ # JBoss, Home of Professional Open Source
+ # Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ # by the @authors tag. See the copyright.txt in the distribution for a
+ # full listing of individual contributors.
+ #
+ # This is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU Lesser General Public License as
+ # published by the Free Software Foundation; either version 2.1 of
+ # the License, or (at your option) any later version.
+ #
+ # This software 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 software; if not, write to the Free
+ # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ # 
+HOME_PAGE /home.seam
+MAIN_PAGE /main.seam
+PAGE_TITLE JBoss Suites: Seam Framework
+LOGIN_USERNAME_FIELD id=login:username
+LOGIN_PASSWORD_FIELD id=login:password
+LOGIN_SUBMIT id=login:login
+LOGOUT id=logout
+PASSWORD_UPDATED_MESSAGE Password updated
+PASSWORD_REENTER_MESSAGE Re-enter new password
+PASSWORD_VALUE_REQUIRED_MESSAGE //*[@id='setpassword:Message' or @id='setpassword:PasswordDecorate:Message']
+PASSWORD_LENGTH_MESSAGE size must be between
+PASSWORD_PASSWORD id=setpassword:PasswordDecorate:password
+PASSWORD_VERIFY id=setpassword:VerifyDecorate:verify
+PASSWORD_SUBMIT id=setpassword:change
+SETTINGS id=settings
+SEARCH_STRING_FIELD id=main:searchString
+SEARCH_SUBMIT id=main:findHotels
+NO_HOTELS_FOUND id=NoHotelsFoundMessage
+SEARCH_RESULT_TABLE xpath=//table[@id = 'hotels']/tbody
+SEARCH_RESULT_TABLE_FIRST_ROW_LINK id=hotels:0:viewHotel
+BOOKING_BOOK id=hotel:bookHotel
+BOOKING_CANCEL id=hotel:cancel
+HOTEL_BED_FIELD id=booking:bedsDecorate:beds
+HOTEL_BED_FIELD_SELECT_CRITERIA value=
+HOTEL_CHECKIN_DATE_FIELD id=booking:checkinDateDecorate:checkinDateInputDate
+HOTEL_CHECKIN_DATE_MESSAGE id=booking:Messages
+HOTEL_CHECKOUT_DATE_FIELD id=booking:checkoutDateDecorate:checkoutDateInputDate
+HOTEL_CHECKOUT_DATE_MESSAGE id=booking:Messages
+HOTEL_SMOKING_1 id=booking:smokingDecorate:smoking:0
+HOTEL_SMOKING_2 id=booking:smokingDecorate:smoking:1
+HOTEL_CREDIT_CARD id=booking:creditCardDecorate:creditCard
+HOTEL_CREDIT_CARD_NAME id=booking:creditCardNameDecorate:creditCardName
+HOTEL_PROCEED id=booking:proceed
+HOTEL_CANCEL id=booking:cancel
+HOTEL_CONFIRM id=confirm:confirm
+HOTEL_MESSAGE xpath=//ul[@id='main:messages']/li
+REGISTRATION id=login:register
+REGISTRATION_USERNAME id=register:usernameDecorate:username
+REGISTRATION_USERNAME_MESSAGE id=register:usernameDecorate:message
+REGISTRATION_NAME id=register:nameDecorate:name
+REGISTRATION_NAME_MESSAGE id=register:nameDecorate:message
+REGISTRATION_PASSWORD id=register:passwordDecorate:password
+REGISTRATION_PASSWORD_MESSAGE id=register:passwordDecorate:message
+REGISTRATION_VERIFY id=register:verifyDecorate:verify
+REGISTRATION_VERIFY_MESSAGE id=register:verifyDecorate:message
+REGISTRATION_SUBMIT id=register:register
+REGISTRATION_REENTER_MESSAGE verify
+REGISTRATION_LENGTH_MESSAGE size must be between
+REGISTRATION_SUCCESSFUL_MESSAGE Successfully registered as {0}
+REGISTRATION_USER_EXISTS_MESSAGE Username {0} already exists
+NOT_LOGGED_IN_MESSAGE Please log in first
+CONVERSATION_TIMEOUT_MESSAGE The conversation ended, timed out or was processing another request
+BOOKING_TABLE_ITEM xpath\=//table[@id\="bookings\:bookings"]/tbody/tr[normalize-space(td[6]/text()) \= "{0}"][normalize-space(td[1]/text()) \= "{1}"]
+BOOKING_TABLE_ITEM_LINK xpath\=//table[@id\="bookings\:bookings"]/tbody/tr[normalize-space(td[6]/text()) \= "{0}"][normalize-space(td[1]/text()) \= "{1}"]/td[7]/a
+BOOKING_CANCELLED_MESSAGE Booking cancelled for confirmation number {0}
+BOOKING_CONFIRMATION_MESSAGE Thank you, {0}, your confimation number for {1} is \\d+
+BOOKING_INVALID_DATE_MESSAGE1 Check out date must be later than check in date
+BOOKING_INVALID_DATE_MESSAGE2 Check in date must be a future date
+WORKSPACE_BOOKING_TEXT Book hotel: {0}
+WORKSPACE_VIEW_TEXT View hotel: {0}
+WORKSPACE_TABLE_LINK_BY_ID id=ConversationListForm:ConversationListDataTable:{0}:EntryDescriptionLink
+WORKSPACE_TABLE_ROW_COUNT = //table[@id\='ConversationListForm\:ConversationListDataTable']/tbody/tr
+SPINNER id=main:Spinner
+# ajax not present in spring example - false required
+USE_AJAX_SEARCH FALSE


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources/spring.properties
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources-ftest/testng.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources-ftest/testng.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources-ftest/testng.xml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,30 @@
+<!--
+    JBoss, Home of Professional Open Source Copyright 2008, Red Hat
+    Middleware LLC, and individual contributors by the @authors tag. See
+    the copyright.txt in the distribution for a full listing of individual
+    contributors. This is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public License as
+    published by the Free Software Foundation; either version 2.1 of the
+    License, or (at your option) any later version. This software 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 software; if not, write
+    to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+    Boston, MA 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+--> 
+<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
+<suite name="Spring example" verbose="2" parallel="false">
+    <test name="spring_tests">
+        <parameter name="PROPERTY_FILE"
+            value="/spring.properties" />
+        <classes>
+            <class name="org.jboss.seam.example.common.test.booking.selenium.RegistrationTest" />
+            <class name="org.jboss.seam.example.spring.test.selenium.SpringChangePasswordTest" />
+            <class name="org.jboss.seam.example.common.test.booking.selenium.BackButtonTest" />
+            <class name="org.jboss.seam.example.common.test.booking.selenium.SimpleBookingTest" />
+            <class name="org.jboss.seam.example.common.test.booking.selenium.ConversationTest" />
+        </classes>
+    </test>
+</suite>


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-tests/src/test/resources-ftest/testng.xml
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/pom.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/pom.xml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>spring</artifactId>
+        <groupId>org.jboss.seam.examples-ee6</groupId>
+        <version>2.3.0.Beta2-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <groupId>org.jboss.seam.examples-ee6.spring</groupId>
+    <artifactId>spring-web</artifactId>
+    <packaging>war</packaging>
+    <name>Spring Web Module (EE6)</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam</artifactId>
+            <type>ejb</type>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam-ui</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jboss.seam</groupId>
+                    <artifactId>jboss-seam-jul</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+<!--        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam-debug</artifactId>
+        </dependency>-->
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam-ioc</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>jboss</groupId>
+                    <artifactId>jboss-jmx</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>commons-beanutils</groupId>
+            <artifactId>commons-beanutils</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>commons-collections</groupId>
+                    <artifactId>commons-collections</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.richfaces.ui</groupId>
+            <artifactId>richfaces-components-ui</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.richfaces.core</groupId>
+            <artifactId>richfaces-core-impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.richfaces.core</groupId>
+            <artifactId>richfaces-core-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.el</groupId>
+            <artifactId>jboss-el</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate.javax.persistence</groupId>
+            <artifactId>hibernate-jpa-2.0-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.spec.javax.faces</groupId>
+            <artifactId>jboss-jsf-api_2.0_spec</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-orm</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cglib</groupId>
+            <artifactId>cglib-nodep</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+  
+    <build>
+        <finalName>jboss-seam-spring</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <configuration>
+                    <webResources>
+                        <resource>
+                            <directory>src/main/webapp</directory>
+                            <filtering>true</filtering>
+                        </resource>
+                    </webResources>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/Booking.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/Booking.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/Booking.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,193 @@
+//$Id: Booking.java 3955 2007-02-20 06:16:28Z nrichards $
+package org.jboss.seam.example.spring;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.util.Date;
+
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+
+import javax.validation.constraints.Size;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+
+import org.jboss.seam.annotations.Name;
+
+ at Entity
+ at Name("booking")
+public class Booking 
+    implements Serializable
+{
+    private static final long serialVersionUID = 2149196747007576668L;
+    private Long id;
+    private User user;
+    private Hotel hotel;
+    private Date checkinDate;
+    private Date checkoutDate;
+    private String creditCard;
+    private String creditCardName;
+    private int creditCardExpiryMonth;
+    private int creditCardExpiryYear;
+    private boolean smoking;
+    private int beds;
+
+   public Booking() {}
+   
+   public Booking(Hotel hotel, User user)
+   {
+      this.hotel = hotel;
+      this.user = user;
+   }
+   
+   @Transient
+   public BigDecimal getTotal()
+   {
+      return hotel.getPrice().multiply( new BigDecimal( getNights() ) );
+   }
+
+   @Transient
+   public int getNights()
+   {
+      return (int) ( checkoutDate.getTime() - checkinDate.getTime() ) / 1000 / 60 / 60 / 24;
+   }
+
+   @Id @GeneratedValue
+   public Long getId()
+   {
+      return id;
+   }
+   public void setId(Long id)
+   {
+      this.id = id;
+   }
+   
+   @NotNull
+   @Basic @Temporal(TemporalType.DATE) 
+   public Date getCheckinDate()
+   {
+      return checkinDate;
+   }
+   public void setCheckinDate(Date datetime)
+   {
+      this.checkinDate = datetime;
+   }
+
+   @ManyToOne @NotNull
+   public Hotel getHotel()
+   {
+      return hotel;
+   }
+   public void setHotel(Hotel hotel)
+   {
+      this.hotel = hotel;
+   }
+   
+   @ManyToOne @NotNull
+   public User getUser()
+   {
+      return user;
+   }
+   public void setUser(User user)
+   {
+      this.user = user;
+   }
+   
+   @Basic @Temporal(TemporalType.DATE) 
+   @NotNull
+   public Date getCheckoutDate()
+   {
+      return checkoutDate;
+   }
+   public void setCheckoutDate(Date checkoutDate)
+   {
+      this.checkoutDate = checkoutDate;
+   }
+   
+   @NotNull(message="Credit card number is required")
+   @Size(min=16, max=16, message="Credit card number must 16 digits long")
+   @Pattern(regexp="^\\d*$", message="Credit card number must be numeric")
+   public String getCreditCard()
+   {
+      return creditCard;
+   }
+
+   public void setCreditCard(String creditCard)
+   {
+      this.creditCard = creditCard;
+   }
+   
+   @Transient
+   public String getDescription()
+   {
+      DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
+      return hotel==null ? null : hotel.getName() + 
+            ", " + df.format( getCheckinDate() ) + 
+            " to " + df.format( getCheckoutDate() );
+   }
+
+   public boolean isSmoking()
+   {
+      return smoking;
+   }
+
+   public void setSmoking(boolean smoking)
+   {
+      this.smoking = smoking;
+   }
+   
+   public int getBeds()
+   {
+      return beds;
+   }
+
+   public void setBeds(int beds)
+   {
+      this.beds = beds;
+   }
+   @NotNull(message="Credit card name is required")
+   @Size(min=3, max=70, message="Credit card name is required")
+   public String getCreditCardName()
+   {
+      return creditCardName;
+   }
+
+   public void setCreditCardName(String creditCardName)
+   {
+      this.creditCardName = creditCardName;
+   }
+
+   public int getCreditCardExpiryMonth()
+   {
+      return creditCardExpiryMonth;
+   }
+
+   public void setCreditCardExpiryMonth(int creditCardExpiryMonth)
+   {
+      this.creditCardExpiryMonth = creditCardExpiryMonth;
+   }
+
+   public int getCreditCardExpiryYear()
+   {
+      return creditCardExpiryYear;
+   }
+
+   public void setCreditCardExpiryYear(int creditCardExpiryYear)
+   {
+      this.creditCardExpiryYear = creditCardExpiryYear;
+   }
+   
+   @Override
+   public String toString()
+   {
+      return "Booking(" + user + ","+ hotel + ")";
+   }
+
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/BookingListAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/BookingListAction.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/BookingListAction.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,62 @@
+//$Id: BookingListAction.java 8748 2008-08-20 12:08:30Z pete.muir at jboss.org $
+package org.jboss.seam.example.spring;
+
+import static org.jboss.seam.ScopeType.SESSION;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.jboss.seam.annotations.Factory;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Observer;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.datamodel.DataModel;
+import org.jboss.seam.annotations.datamodel.DataModelSelection;
+import org.jboss.seam.faces.FacesMessages;
+import org.jboss.seam.log.Log;
+
+ at Scope(SESSION)
+ at Name("bookingList")
+public class BookingListAction
+    implements Serializable
+{
+    private static final long serialVersionUID = 8037511081807516466L;
+
+    @In
+    private BookingService bookingService;
+
+    @In
+    private User user;
+
+    @SuppressWarnings("unused")
+    @DataModel
+    private List<Booking> bookings;
+    @DataModelSelection
+    private Booking booking;
+
+    @Logger
+    private Log log;
+
+    @Factory("bookings")
+    @Observer("bookingConfirmed")
+    public void getBookings()
+    {
+        bookings = bookingService.findBookingsByUsername(user.getUsername());
+    }
+
+    public void cancel()
+    {
+        log.info("Cancel booking: #{bookingList.booking.id} for #{user.username}");
+        bookingService.cancelBooking(booking.getId());
+        getBookings();
+        FacesMessages.instance().add("Booking cancelled for confirmation number #0", booking.getId());
+    }
+
+    public Booking getBooking()
+    {
+        return booking;
+    }
+
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/BookingService.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/BookingService.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/BookingService.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,113 @@
+package org.jboss.seam.example.spring;
+
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceException;
+
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.async.Asynchronous;
+import org.jboss.seam.core.Expressions;
+import org.jboss.seam.log.Log;
+import org.springframework.orm.jpa.JpaCallback;
+import org.springframework.orm.jpa.support.JpaDaoSupport;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Example of using the JpaDaoSupport.
+ * 
+ * @author Mike Youngstrom
+ */
+public class BookingService extends JpaDaoSupport {
+
+	public static ThreadLocal<Boolean> currentThread = new ThreadLocal<Boolean>();
+
+	@Logger
+	private static Log logger;
+
+	@SuppressWarnings("unchecked")
+	@Transactional
+	public List<Hotel> findHotels(final String searchPattern, final int firstResult, final int maxResults) {
+		logger.debug("Looking for a Hotel.");
+		return getJpaTemplate().executeFind(new JpaCallback() {
+			public Object doInJpa(EntityManager em) throws PersistenceException {
+				return em
+						.createQuery(
+								"select h from Hotel h where lower(h.name) like :search or lower(h.city) like :search or lower(h.zip) like :search or lower(h.address) like :search")
+						.setParameter("search", searchPattern).setMaxResults(maxResults).setFirstResult(firstResult)
+						.getResultList();
+			}
+		});
+	}
+
+	@SuppressWarnings("unchecked")
+	@Transactional
+	public List<Booking> findBookingsByUsername(String username) {
+		logger.debug("Finding Bookings for user {0}", username);
+		return getJpaTemplate().findByNamedParams(
+				"select b from Booking b where b.user.username = :username order by b.checkinDate",
+				Collections.singletonMap("username", username));
+
+	}
+
+	@Transactional
+	public void cancelBooking(Long bookingId) {
+		logger.debug("Cancelling booking id: {0}", bookingId);
+		if (bookingId == null) {
+			throw new IllegalArgumentException("BookingId cannot be null");
+		}
+
+		Booking cancelled = getJpaTemplate().find(Booking.class, bookingId);
+		if (cancelled != null) {
+			getJpaTemplate().remove(cancelled);
+		}
+	}
+
+	public void validateBooking(Booking booking) throws ValidationException {
+		Calendar calendar = Calendar.getInstance();
+		calendar.add(Calendar.DAY_OF_MONTH, -1);
+
+		if (booking.getCheckinDate().before(calendar.getTime())) {
+			throw new ValidationException("Check in date must be a future date");
+		} else if (!booking.getCheckinDate().before(booking.getCheckoutDate())) {
+			throw new ValidationException("Check out date must be later than check in date");
+		}
+	}
+
+	@Transactional
+	public void bookHotel(Booking booking) throws ValidationException {
+		validateBooking(booking);
+
+		getJpaTemplate().persist(booking);
+		getJpaTemplate().flush();
+	}
+
+	@Asynchronous
+	@Transactional
+	public void sendRegisterEmail(String username) {
+		if (currentThread.get() != null) {
+			throw new RuntimeException("Not really happening asyncronously");
+		}
+		logger.info("pretending to send email asyncronously");
+		//Could be injected using spring injection just fine but wanted to test
+		//the use of Expressions Asynchronously
+		UserService userService = (UserService)Expressions.instance().createValueExpression("#{userService}").getValue();
+		User user = userService.findUser(username);
+		if (user != null) {
+			logger.info("Asynchronously found User: {0}", user.getName());
+			return;
+		}
+		throw new RuntimeException("Didn't find the user that made the asynchronous call");
+	}
+
+	@Transactional
+	public Hotel findHotelById(Long hotelId) {
+		if (hotelId == null) {
+			throw new IllegalArgumentException("hotelId cannot be null");
+		}
+
+		return getJpaTemplate().find(Hotel.class, hotelId);
+	}
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/ChangePasswordAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/ChangePasswordAction.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/ChangePasswordAction.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,52 @@
+package org.jboss.seam.example.spring;
+
+import static org.jboss.seam.ScopeType.EVENT;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Out;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.faces.FacesMessages;
+
+ at Scope(EVENT)
+ at Name("changePassword")
+public class ChangePasswordAction
+{
+
+    @In @Out
+    private User user;
+
+    @In("#{userService}")
+    private UserService userService;
+
+    private String verify;
+
+    private boolean changed;
+
+    public void changePassword()
+    {
+        if (userService.changePassword(user.getUsername(), verify, user.getPassword())) {
+            FacesMessages.instance().add("Password updated");
+            changed = true;
+        } else {
+            FacesMessages.instance().addToControl("verify", "Re-enter new password");
+            verify=null;
+        }
+        user = userService.findUser(user.getUsername());
+    }
+
+    public boolean isChanged()
+    {
+        return changed;
+    }
+
+    public String getVerify()
+    {
+        return verify;
+    }
+
+    public void setVerify(String verify)
+    {
+        this.verify = verify;
+    }
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/HibernateTestService.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/HibernateTestService.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/HibernateTestService.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,97 @@
+/**
+ * 
+ */
+package org.jboss.seam.example.spring;
+
+import java.sql.SQLException;
+import java.util.List;
+
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.support.TransactionCallback;
+import org.springframework.transaction.support.TransactionTemplate;
+
+/**
+ * A Service to demonstrate/test some different methods of accessing Seam Managed Hibernate Session in Spring.
+ * @author Mike Youngstrom
+ */
+public class HibernateTestService
+{
+   public static final String HIBERNATE_HOTEL_NAME = "This is the Hibernate Hotel";
+
+   public static final String HIBERNATE_HOTEL_ADDRESS = "Hibernate Address";
+
+   private TransactionTemplate hibernateTransactionTemplate;
+
+   private SessionFactory sessionFactory;
+
+   public void testHibernateIntegration()
+   {
+      hibernateTransactionTemplate.execute(new TransactionCallback()
+      {
+         public Object doInTransaction(TransactionStatus status)
+         {
+         // Testing access through SessionFactory.getCurrentSession()
+            Hotel hotel = getFirstHotel(sessionFactory.getCurrentSession());
+            hotel.setName(HIBERNATE_HOTEL_NAME);
+            return null;
+         }
+      });
+      hibernateTransactionTemplate.execute(new TransactionCallback()
+      {
+         public Object doInTransaction(TransactionStatus status)
+         {
+            // Testing access through SessionFactory.getCurrentSession()
+            Hotel hotel = getFirstHotel(sessionFactory.getCurrentSession());
+            if (!HIBERNATE_HOTEL_NAME.equals(hotel.getName()))
+            {
+               throw new RuntimeException("Hotel name not set.  Hibernate integration not working.");
+            }
+            hotel.setAddress(HIBERNATE_HOTEL_ADDRESS);
+            return null;
+         }
+      });
+      hibernateTransactionTemplate.execute(new TransactionCallback()
+      {
+         public Object doInTransaction(TransactionStatus status)
+         {
+            // Testing access through SessionFactory.getCurrentSession()
+            Hotel hotel = getFirstHotel(sessionFactory.getCurrentSession());
+            if (!HIBERNATE_HOTEL_ADDRESS.equals(hotel.getAddress()))
+            {
+               throw new RuntimeException("Hotel address not set.  Hibernate integration not working.");
+            }
+            return null;
+         }
+      });
+   }
+
+   /**
+    * @return
+    */
+   private Hotel getFirstHotel(Session session)
+   {
+      List<Hotel> results = session.createQuery("from Hotel").list();
+      if (results.size() <= 0)
+      {
+         throw new RuntimeException("Hibernate integration is broken");
+      }
+      Hotel hotel = results.get(0);
+      return hotel;
+   }
+
+   /**
+    * @param transactionTemplate the transactionTemplate to set
+    */
+   public void setTransactionTemplate(TransactionTemplate transactionTemplate)
+   {
+      this.hibernateTransactionTemplate = transactionTemplate;
+   }
+
+   public void setSessionFactory(SessionFactory sessionFactory)
+   {
+      this.sessionFactory = sessionFactory;
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/Hotel.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/Hotel.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/Hotel.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,114 @@
+//$Id: Hotel.java 3945 2007-02-19 21:59:13Z nrichards $
+package org.jboss.seam.example.spring;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import javax.validation.constraints.Size;
+import javax.validation.constraints.NotNull;
+import org.jboss.seam.annotations.Name;
+
+ at Entity
+ at Name("hotel")
+public class Hotel implements Serializable
+{
+   private Long id;
+   private String name;
+   private String address;
+   private String city;
+   private String state;
+   private String zip;
+   private String country;
+   private BigDecimal price;
+   
+   @Id @GeneratedValue
+   public Long getId()
+   {
+      return id;
+   }
+   public void setId(Long id)
+   {
+      this.id = id;
+   }
+   
+   @Size(max=50) @NotNull
+   public String getName()
+   {
+      return name;
+   }
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+   
+   @Size(max=100) @NotNull
+   public String getAddress()
+   {
+      return address;
+   }
+   public void setAddress(String address)
+   {
+      this.address = address;
+   }
+   
+   @Size(max=40) @NotNull
+   public String getCity()
+   {
+      return city;
+   }
+   public void setCity(String city)
+   {
+      this.city = city;
+   }
+   
+   @Size(min=4, max=6) @NotNull
+   public String getZip()
+   {
+      return zip;
+   }
+   public void setZip(String zip)
+   {
+      this.zip = zip;
+   }
+   
+   @Size(min=2, max=10) @NotNull
+   public String getState()
+   {
+      return state;
+   }
+   public void setState(String state)
+   {
+      this.state = state;
+   }
+   
+   @Size(min=2, max=40) @NotNull
+   public String getCountry()
+   {
+      return country;
+   }
+   public void setCountry(String country)
+   {
+      this.country = country;
+   }
+
+   @Column(precision=6, scale=2)
+   public BigDecimal getPrice()
+   {
+      return price;
+   }
+   public void setPrice(BigDecimal price)
+   {
+      this.price = price;
+   }
+   
+   @Override
+   public String toString()
+   {
+      return "Hotel(" + name + "," + address + "," + city + "," + zip + ")";
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/HotelBookingAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/HotelBookingAction.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/HotelBookingAction.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,96 @@
+//$Id: HotelBookingAction.java 8033 2008-04-28 09:40:19Z pete.muir at jboss.org $
+package org.jboss.seam.example.spring;
+
+import java.util.Calendar;
+import javax.faces.application.FacesMessage;
+
+import org.jboss.seam.annotations.Begin;
+import org.jboss.seam.annotations.End;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Out;
+import org.jboss.seam.core.Events;
+import org.jboss.seam.faces.FacesMessages;
+import org.jboss.seam.log.Log;
+
+ at Name("hotelBooking")
+public class HotelBookingAction {
+    @In("#{bookingService}")
+    private BookingService bookingService;
+
+    @In
+    private User user;
+
+    @In(required = false)
+    @Out
+    private Hotel hotel;
+
+    @In(required = false)
+    @Out(required = false)
+    private Booking booking;
+
+    @In
+    private FacesMessages facesMessages;
+
+    @In
+    private Events events;
+
+    @Logger
+    private Log log;
+
+    private boolean bookingValid;
+
+    @Begin
+    public void selectHotel(Hotel selectedHotel) {
+        hotel = bookingService.findHotelById(selectedHotel.getId());
+    }
+
+    public void bookHotel() {
+        booking = new Booking(hotel, user);
+        Calendar calendar = Calendar.getInstance();
+        booking.setCheckinDate(calendar.getTime());
+        calendar.add(Calendar.DAY_OF_MONTH, 1);
+        booking.setCheckoutDate(calendar.getTime());
+    }
+
+    public void setBookingDetails() {
+        bookingValid = true;
+        try {
+            bookingService.validateBooking(booking);
+        } catch (ValidationException e) {
+            facesMessages.add(FacesMessage.SEVERITY_ERROR, e.getMessage());
+            bookingValid = false;
+        }
+    }
+
+    public boolean isBookingValid() {
+        return bookingValid;
+    }
+
+    @End
+    public String confirm() {
+        try {
+            bookingService.bookHotel(booking);
+        } catch (ValidationException e) {
+            facesMessages.add(FacesMessage.SEVERITY_ERROR, e.getMessage());
+            return null;
+        }
+        
+        BookingService.currentThread.set(true);
+        //Cannot call this.sendRegisterEmail because it won't hit the @Asynchronous intercepter
+        bookingService.sendRegisterEmail(booking.getUser().getUsername());
+        BookingService.currentThread.set(null);
+
+        facesMessages.add("Thank you, #{user.name}, your confimation number for #{hotel.name} is #{booking.id}");
+        log.info("New booking: #{booking.id} for #{user.username}");
+
+        events.raiseEvent("bookingConfirmed");
+        return "main";
+    }
+
+    @End
+    public void cancel() {
+    }
+
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/HotelSearchingAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/HotelSearchingAction.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/HotelSearchingAction.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,64 @@
+//$Id: HotelSearchingAction.java 5848 2007-07-17 18:43:56Z myoungstrom $
+package org.jboss.seam.example.spring;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.datamodel.DataModel;
+
+public class HotelSearchingAction implements Serializable
+{
+    @In("#{bookingService}")
+    private BookingService bookingService;
+
+    private String searchString;
+    private int pageSize;
+    private int page;
+
+    @DataModel
+    private List<Hotel> hotels;
+
+    public void find()
+    {
+        page = 0;
+        queryHotels();
+    }
+
+    public void nextPage()
+    {
+        page++;
+        queryHotels();
+    }
+
+    private void queryHotels()
+    {
+        String searchPattern = searchString==null ? "%" : '%' + searchString.toLowerCase().replace('*', '%') + '%';
+        hotels = bookingService.findHotels(searchPattern, page * pageSize, pageSize);
+    }
+
+    public boolean isNextPageAvailable()
+    {
+        return hotels!=null && hotels.size()==pageSize;
+    }
+
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(int pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public String getSearchString()
+    {
+        return searchString;
+    }
+
+    public void setSearchString(String searchString)
+    {
+        this.searchString = searchString;
+    }
+
+}
+

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/LoginAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/LoginAction.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/LoginAction.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,60 @@
+//$Id: LoginAction.java 8033 2008-04-28 09:40:19Z pete.muir at jboss.org $
+package org.jboss.seam.example.spring;
+
+import java.io.Serializable;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Out;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Synchronized;
+import org.jboss.seam.faces.FacesMessages;
+import org.jboss.seam.web.Session;
+
+ at Scope(ScopeType.SESSION)
+ at Synchronized
+ at Name("login")
+public class LoginAction implements Serializable {
+
+	@In(required = false)
+	@Out(required = false)
+	private User user;
+
+	@In("#{userService}")
+	private UserService userService;
+
+	@In
+	private FacesMessages facesMessages;
+
+	private boolean loggedIn;
+
+	public void login() {
+		User candidateUser = userService.findUser(user.getUsername(), user.getPassword());
+
+		if (candidateUser == null) {
+			facesMessages.add("Invalid login");
+		} else {
+			user = candidateUser;
+			loggedIn = true;
+			facesMessages.add("Welcome, #{user.name}");
+		}
+
+	}
+
+	public void logout() {
+		loggedIn = false;
+		Session.instance().invalidate();
+	}
+
+	public void validateLogin() {
+		if (!loggedIn) {
+			facesMessages.add("Please log in first");
+		}
+	}
+
+	public boolean isLoggedIn() {
+		return loggedIn;
+	}
+
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/RegisterAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/RegisterAction.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/RegisterAction.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,75 @@
+//$Id: RegisterAction.java 8033 2008-04-28 09:40:19Z pete.muir at jboss.org $
+package org.jboss.seam.example.spring;
+
+import static org.jboss.seam.ScopeType.EVENT;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.faces.FacesMessages;
+
+ at Scope(EVENT)
+ at Name("register")
+public class RegisterAction
+{
+    @In
+    private User user;
+
+    @In("#{userService}")
+    private UserService userService;
+
+    @In("#{hibernateTestService}")
+    private HibernateTestService hibernateTestService;
+
+    @SuppressWarnings("unused")
+    @In("hotelSearch")
+    private HotelSearchingAction hotelSearchingAction;
+
+    @In
+    private FacesMessages facesMessages;
+
+    private String verify;
+
+    private boolean registered;
+
+    public void register()
+    {
+        if ( user.getPassword().equals(verify) )
+        {
+
+            try {
+                userService.createUser(user);
+                hibernateTestService.testHibernateIntegration();
+                registered = true;
+            } catch(ValidationException e) {
+                facesMessages.add(e.getMessage());
+            }
+        }
+        else
+        {
+            facesMessages.add("verify", "Re-enter your password");
+            verify=null;
+        }
+    }
+
+    public void invalid()
+    {
+        facesMessages.add("Please try again");
+    }
+
+    public boolean isRegistered()
+    {
+        return registered;
+    }
+
+    public String getVerify()
+    {
+        return verify;
+    }
+
+    public void setVerify(String verify)
+    {
+        this.verify = verify;
+    }
+
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/User.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/User.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/User.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,77 @@
+//$Id: User.java 3972 2007-02-21 14:37:49Z nrichards $
+package org.jboss.seam.example.spring;
+
+import static org.jboss.seam.ScopeType.SESSION;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import javax.validation.constraints.Size;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+
+ at Entity
+ at Name("user")
+ at Scope(SESSION)
+ at Table(name="Customer")
+public class User implements Serializable
+{
+   private String username;
+   private String password;
+   private String name;
+   
+   public User(String name, String password, String username)
+   {
+      this.name = name;
+      this.password = password;
+      this.username = username;
+   }
+   
+   public User() {}
+
+   @NotNull
+   @Size(max=100)
+   public String getName()
+   {
+      return name;
+   }
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+   
+   @NotNull
+   @Size(min=4, max=15)
+   public String getPassword()
+   {
+      return password;
+   }
+   public void setPassword(String password)
+   {
+      this.password = password;
+   }
+   
+   @Id
+   @Size(min=4, max=15)
+   @Pattern(regexp="^\\w*$", message="not a valid username")
+   public String getUsername()
+   {
+      return username;
+   }
+   public void setUsername(String username)
+   {
+      this.username = username;
+   }
+   
+   @Override
+   public String toString() 
+   {
+      return "User(" + username + ")";
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/UserService.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/UserService.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/UserService.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,71 @@
+package org.jboss.seam.example.spring;
+
+import java.util.List;
+
+import org.springframework.dao.DataAccessException;
+import org.springframework.orm.jpa.support.JpaDaoSupport;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author Mike Youngstrom
+ * @author Marek Novotny
+ *
+ */
+public class UserService extends JpaDaoSupport {
+
+	@Transactional
+    public boolean changePassword(String username, String oldPassword, String newPassword) {
+        System.out.println("change password " + oldPassword + " to " + newPassword);
+        if (newPassword == null || newPassword.length()==0) {
+            throw new IllegalArgumentException("newPassword cannot be null.");
+        }
+
+        User user = findUser(username);
+        System.out.println("USER" + user);
+        if (user.getPassword().equals(oldPassword)) {
+            user.setPassword(newPassword);
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+	@Transactional
+    public User findUser(String username) {
+        if (username == null || "".equals(username)) {
+            throw new IllegalArgumentException("Username cannot be null");
+        }
+        return getJpaTemplate().find(User.class, username);
+    }
+
+	@Transactional
+    public User findUser(String username, String password) {
+        try {
+            List result = getJpaTemplate().find("select u from User u where u.username=?1 and u.password=?2", username, password);
+            if (result.size() > 0)
+            {
+               return (User) result.get(0);   
+            }
+            else
+            {
+               return null;
+            }
+        } catch (DataAccessException e) {
+            return null;
+        }
+    }
+
+	@Transactional
+    public void createUser(User user) throws ValidationException {
+        if (user == null) {
+            throw new IllegalArgumentException("User cannot be null");
+        }
+
+        User existingUser = findUser(user.getUsername());
+        if (existingUser != null) {
+            throw new ValidationException("Username "+user.getUsername()+" already exists");
+        }
+        getJpaTemplate().persist(user);
+        getJpaTemplate().flush();
+    }
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/ValidationException.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/ValidationException.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/java/org/jboss/seam/example/spring/ValidationException.java	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,13 @@
+package org.jboss.seam.example.spring;
+
+/**
+ * @author youngm
+ *
+ */
+public class ValidationException extends Exception {
+
+	public ValidationException(String message) {
+		super(message);
+	}
+
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/resources/META-INF/persistence-spring.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/resources/META-INF/persistence-spring.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/resources/META-INF/persistence-spring.xml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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-unit name="bookingDatabase" transaction-type="RESOURCE_LOCAL">
+        <provider>org.hibernate.ejb.HibernatePersistence</provider>
+        <!-- classes must be enumerated due to a known bug in Spring 2.5.6, SPR-5787 -->
+        <class>org.jboss.seam.example.spring.Booking</class>
+        <class>org.jboss.seam.example.spring.Hotel</class>
+        <class>org.jboss.seam.example.spring.User</class>
+        <properties>
+            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+            <property name="hibernate.show_sql" value="true"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
+            
+            <!-- Use these vendor-specific properties to setup JDBC connection instead of using Spring configuration -->
+            <!--
+            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
+            <property name="hibernate.connection.username" value="sa"/>
+            <property name="hibernate.connection.password" value=""/>
+            <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:defaultDB"/>
+            -->
+            </properties>
+    </persistence-unit>
+</persistence>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/resources/import.sql
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/resources/import.sql	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/resources/import.sql	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,22 @@
+insert into Customer (username, password, name) values ('gavin', 'foobar', 'Gavin King')
+insert into Customer (username, password, name) values ('demo', 'demo', 'Demo User')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (1, 120, 'Marriott Courtyard', 'Tower Place, Buckhead', 'Atlanta', 'GA', '30305', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (2, 180, 'Doubletree', 'Tower Place, Buckhead', 'Atlanta', 'GA', '30305', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (3, 450, 'W Hotel', 'Union Square, Manhattan', 'NY', 'NY', '10011', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (4, 450, 'W Hotel', 'Lexington Ave, Manhattan', 'NY', 'NY', '10011', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (5, 250, 'Hotel Rouge', '1315 16th Street NW', 'Washington', 'DC', '20036', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (6, 300, '70 Park Avenue Hotel', '70 Park Avenue', 'NY', 'NY', '10011', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (8, 300, 'Conrad Miami', '1395 Brickell Ave', 'Miami', 'FL', '33131', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (9, 80, 'Sea Horse Inn', '2106 N Clairemont Ave', 'Eau Claire', 'WI', '54703', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (10, 90, 'Super 8 Eau Claire Campus Area', '1151 W Macarthur Ave', 'Eau Claire', 'WI', '54701', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (11, 160, 'MarriottDowntown', '55 Fourth Street', 'San Francisco', 'CA', '94103', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (12, 200, 'Hilton Diagonal Mar', 'Passeig del Taulat 262-264', 'Barcelona', 'Catalunya', '08019', 'Spain')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (13, 210, 'Hilton Tel Aviv', 'Independence Park', 'Tel Aviv', '', '63405', 'Israel')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (14, 240, 'InterContinental Tokyo Bay', 'Takeshiba Pier', 'Tokyo', '', '105', 'Japan')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (15, 130, 'Hotel Beaulac', ' Esplanade Léopold-Robert 2', 'Neuchatel', '', '2000', 'Switzerland')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (16, 140, 'Conrad Treasury Place', 'William & George Streets', 'Brisbane', 'QLD', '4001', 'Australia')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (17, 230, 'Ritz Carlton', '1228 Sherbrooke St', 'West Montreal', 'Quebec', 'H3G1H6', 'Canada')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (18, 460, 'Ritz Carlton', 'Peachtree Rd, Buckhead', 'Atlanta', 'GA', '30326', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (19, 220, 'Swissotel', '68 Market Street', 'Sydney', 'NSW', '2000', 'Australia')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (20, 250, 'Meliá White House', 'Albany Street', 'Regents Park London', '', 'NW13UP', 'Great Britain')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (21, 210, 'Hotel Allegro', '171 West Randolph Street', 'Chicago', 'IL', '60601', 'USA')

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/resources/seam.properties
===================================================================
Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/applicationContext.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/applicationContext.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/applicationContext.xml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop"
+	xmlns:util="http://www.springframework.org/schema/util" xmlns:seam="http://jboss.com/products/seam/spring-seam"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
+	xmlns:jee="http://www.springframework.org/schema/jee"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+                           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
+                           http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd
+                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
+                           http://jboss.com/products/seam/spring-seam http://jboss.com/products/seam/spring-seam-2.3.xsd
+                           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
+	default-lazy-init="true">
+
+    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+        <property name="driverClassName" value="org.h2.Driver"/>
+        <property name="url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"/>
+        <property name="username" value="sa"/>
+        <property name="password" value="sa"/>
+    </bean>
+
+	<!-- Here we are using a spring configured EMF you can just as easily use a Seam configured EMF using
+	<persistence:entity-manager-factory/> unless your project depends upon some functionality spring
+	provides an EMF such as the ability to inject a dataSource.
+	-->
+	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+		<property name="dataSource" ref="dataSource"/>
+		<property name="persistenceUnitName" value="bookingDatabase"/>
+		<!-- Use alternate location to prevent JBoss AS from automatically loading persistence units (in-container) -->
+		<property name="persistenceXmlLocation" value="classpath*:/META-INF/persistence-spring.xml"/>
+	</bean>
+	
+    <bean id="entityManagerWrapper" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
+        <property name="entityManagerFactory" ref="entityManagerFactory"/>
+    </bean>
+
+
+	<!-- This example uses resource local JpaTransactionManager.  You could just as easily use a JtaTransactionManager -->
+	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+		<!-- Be sure to specify the SeamManagedEntityManagerFactory since that will manage the EM that will be
+		beginning and ending transactions.-->
+	   	<property name="entityManagerFactory" ref="seamEntityManagerFactory"/>
+	</bean>
+
+	<tx:annotation-driven proxy-target-class="true" />
+
+	<!-- Example using PersistenceAnnotationBeanPostProcessor for persistence -->
+	<bean id="userService" class="org.jboss.seam.example.spring.UserService">
+		<property name="entityManagerFactory" ref="seamEntityManagerFactory"/>
+	</bean>
+
+	<!-- Example using JpaDaoSupport for persistence -->
+	<bean id="bookingService" class="org.jboss.seam.example.spring.BookingService">
+		<property name="entityManagerFactory" ref="seamEntityManagerFactory" />
+		<seam:component/>
+	</bean>
+
+	<!-- Testing out a seam scoped spring bean -->
+	<bean id="hotelSearch" class="org.jboss.seam.example.spring.HotelSearchingAction" scope="seam.SESSION">
+		<!-- Testing creation time injection -->
+		<property name="pageSize" value="10" />
+	</bean>
+
+	<seam:configure-scopes default-auto-create="true" />
+
+	<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
+		<!-- Because we have multiple EntityManagerFactories in this applicationContext identify the
+		SeamManagedEntityManagerFactory as the default -->
+		<property name="defaultPersistenceUnitName" value="conversationScoped"/>
+	</bean>
+
+	<!-- EMF that wraps a Seam Managed EM instance for use in Spring -->
+	<bean id="seamEntityManagerFactory" class="org.jboss.seam.ioc.spring.SeamManagedEntityManagerFactoryBean">
+		<!-- The Seam managed-persistence-context component name. -->
+		<property name="persistenceContextName" value="entityManager" />
+		<!-- Optionally provide a unit name.  If not specified the default would be the persistenceContextName -->
+		<property name="persistenceUnitName" value="conversationScoped"/>
+	</bean>
+
+	<!-- TaskExecutor for example use of @Asynchronous -->
+	<bean id="springThreadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" />
+
+
+	<!-- Sample Hibernate Configuration -->
+
+	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
+		<property name="dataSource" ref="dataSource"/>
+		<property name="annotatedClasses">
+			<list>
+				<value>org.jboss.seam.example.spring.Hotel</value>
+				<value>org.jboss.seam.example.spring.User</value>
+				<value>org.jboss.seam.example.spring.Booking</value>
+			</list>
+		</property>
+	</bean>
+
+	<bean id="seamSessionFactory" class="org.jboss.seam.ioc.spring.SeamManagedSessionFactoryBean">
+		<property name="sessionName" value="hibernateSession"/>
+	</bean>
+
+	<bean id="hibernateTestService" class="org.jboss.seam.example.spring.HibernateTestService">
+		<property name="sessionFactory" ref="seamSessionFactory"/>
+		<property name="transactionTemplate" ref="hibernateTransactionTemplate"/>
+	</bean>
+
+	<bean id="hibernateTransactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
+		<property name="transactionManager" ref="hibernateTransactionManager"/>
+	</bean>
+
+	<bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
+	   	<property name="sessionFactory" ref="seamSessionFactory"/>
+	</bean>
+</beans>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/components.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/components.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/components.xml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<components xmlns="http://jboss.com/products/seam/components" 
+            xmlns:core="http://jboss.com/products/seam/core"
+            xmlns:persistence="http://jboss.com/products/seam/persistence"
+            xmlns:spring="http://jboss.com/products/seam/spring"
+            xmlns:async="http://jboss.com/products/seam/async"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.3.xsd 
+                                http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.3.xsd
+                                http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.3.xsd
+                                http://jboss.com/products/seam/spring http://jboss.com/products/seam/spring-2.3.xsd
+                                http://jboss.com/products/seam/async http://jboss.com/products/seam/async-2.3.xsd">
+
+
+    <core:manager conversation-timeout="120000" 
+                  concurrent-request-timeout="500" 
+                  conversation-id-parameter="cid"/>
+
+    <persistence:managed-persistence-context name="entityManager"
+                                      auto-create="true" 
+                                      entity-manager-factory="#{entityManagerFactory}" />
+    
+    <!-- Sample Hibernate Session -->
+    <persistence:managed-hibernate-session name="hibernateSession" auto-create="true" session-factory="#{sessionFactory}"/>
+     
+    <core:init debug="true"/>
+    
+    <spring:context-loader />
+
+	 <!-- Install a ThreadPoolDispatcher to handle scheduled asynchronous event -->
+	 <component name="threadPoolDispatcher" class="org.jboss.seam.async.ThreadPoolDispatcher" />
+    
+    <!-- Install the SpringDispatcher as default -->
+    <spring:spring-task-executor-dispatcher schedule-dispatcher="#{threadPoolDispatcher}" task-executor="#{springThreadPoolTaskExecutor}"/>
+    
+    <spring:spring-transaction platform-transaction-manager="#{transactionManager}"/>
+    
+</components>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/faces-config.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/faces-config.xml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faces-config version="2.1"
+              xmlns="http://java.sun.com/xml/ns/javaee"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd">
+
+    <!-- Facelets support -->
+    <application>
+        <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
+    </application>
+
+<!--
+    <navigation-rule>
+        <navigation-case>
+            <from-outcome>login</from-outcome>
+            <to-view-id>/home.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+
+        <navigation-case>
+            <from-outcome>register</from-outcome>
+            <to-view-id>/register.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+
+        <navigation-case>
+            <from-outcome>password</from-outcome>
+            <to-view-id>/password.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+
+        <navigation-case>
+            <from-outcome>main</from-outcome>
+            <to-view-id>/main.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+
+        <navigation-case>
+            <from-outcome>hotel</from-outcome>
+            <to-view-id>/hotel.xhtml</to-view-id>
+            <redirect />
+        </navigation-case>
+    </navigation-rule>
+
+    <navigation-rule>
+        <from-view-id>/hotel.xhtml</from-view-id>
+        <navigation-case>
+            <from-outcome>book</from-outcome>
+            <to-view-id>/book.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+    </navigation-rule>
+
+    <navigation-rule>
+        <from-view-id>/book.xhtml</from-view-id>
+
+        <navigation-case>
+            <from-outcome>confirm</from-outcome>
+            <to-view-id>/confirm.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+    </navigation-rule>
+
+
+    <navigation-rule>
+        <from-view-id>/confirm.xhtml</from-view-id>
+        <navigation-case>
+            <from-outcome>confirmed</from-outcome>
+            <to-view-id>/main.xhtml</to-view-id>
+
+            <redirect/>
+        </navigation-case>
+
+        <navigation-case>
+            <from-outcome>back</from-outcome>
+            <to-view-id>/book.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+    </navigation-rule>
+    -->
+    
+</faces-config>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/jboss-deployment-structure.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/jboss-deployment-structure.xml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,16 @@
+<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
+  <deployment>
+      <dependencies>
+          <module name="org.javassist" export="true"/>
+          <module name="org.apache.log4j" export="true"/>
+          <module name="org.dom4j" export="true"/>
+          <module name="org.apache.commons.logging" export="true"/>
+          <module name="org.apache.commons.collections" export="true"/>
+          <module name="javax.faces.api" export="true"/>
+          <module name="com.sun.jsf-impl" export="true"/>
+          <module name="org.hibernate" export="true"/>
+          <module name="org.hibernate.envers" export="true"/>
+          <module name="com.h2database.h2" export="true"/>
+        </dependencies>
+  </deployment>
+</jboss-deployment-structure>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/navigation.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/navigation.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/navigation.xml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faces-config version="2.1"
+              xmlns="http://java.sun.com/xml/ns/javaee"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd">
+
+    <navigation-rule>
+        <navigation-case>
+            <from-outcome>login</from-outcome>
+            <to-view-id>/home.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+
+        <navigation-case>
+            <from-outcome>register</from-outcome>
+            <to-view-id>/register.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+
+        <navigation-case>
+            <from-outcome>password</from-outcome>
+            <to-view-id>/password.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+
+        <navigation-case>
+            <from-outcome>main</from-outcome>
+            <to-view-id>/main.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+
+        <navigation-case>
+            <from-outcome>hotel</from-outcome>
+            <to-view-id>/hotel.xhtml</to-view-id>
+            <redirect />
+        </navigation-case>
+    </navigation-rule>
+
+    <navigation-rule>
+        <from-view-id>/hotel.xhtml</from-view-id>
+        <navigation-case>
+            <from-outcome>book</from-outcome>
+            <to-view-id>/book.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+    </navigation-rule>
+
+
+    <navigation-rule>
+        <from-view-id>/book.xhtml</from-view-id>
+
+        <navigation-case>
+            <from-outcome>confirm</from-outcome>
+            <to-view-id>/confirm.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+    </navigation-rule>
+
+
+    <navigation-rule>
+        <from-view-id>/confirm.xhtml</from-view-id>
+        <navigation-case>
+            <from-outcome>confirmed</from-outcome>
+            <to-view-id>/main.xhtml</to-view-id>
+
+            <redirect/>
+        </navigation-case>
+
+        <navigation-case>
+            <from-outcome>back</from-outcome>
+            <to-view-id>/book.xhtml</to-view-id>
+
+            <redirect />
+        </navigation-case>
+    </navigation-rule>
+</faces-config>
+

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/pages.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/pages.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/pages.xml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pages xmlns="http://jboss.com/products/seam/pages"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.3.xsd"
+       no-conversation-view-id="/main.xhtml">
+
+    <page view-id="/register.xhtml">
+    
+        <action if="#{validation.failed}"
+           execute="#{register.invalid}"/>
+    
+        <navigation>
+            <rule if="#{register.registered}">
+                <redirect view-id="/home.xhtml"/>
+            </rule>
+        </navigation>
+        
+    </page>
+
+    <page view-id="/home.xhtml">
+    
+        <navigation>
+            <rule if="#{login.loggedIn}">
+                <redirect view-id="/main.xhtml"/>
+            </rule>
+        </navigation>
+        
+    </page>
+    
+    <page view-id="/password.xhtml">
+        <action execute="#{login.validateLogin}"/>
+        
+        <navigation from-action="#{login.validateLogin}">
+            <rule if="#{not login.loggedIn}">
+                <redirect view-id="/home.xhtml"/>
+            </rule>
+        </navigation>    
+    
+    
+        <navigation>
+            <rule if="#{changePassword.changed}">
+                <redirect view-id="/main.xhtml"/>
+            </rule>
+        </navigation>
+        
+    </page>
+
+    <page view-id="/main.xhtml">
+    
+        <action execute="#{login.validateLogin}"/>
+        
+        <navigation from-action="#{login.validateLogin}">
+            <rule if="#{not login.loggedIn}">
+                <redirect view-id="/home.xhtml"/>
+            </rule>
+        </navigation>
+        
+        <navigation from-action="#{hotelBooking.selectHotel(hot)}">
+            <redirect view-id="/hotel.xhtml"/>
+        </navigation>
+        
+    </page>
+
+	<page view-id="/hotel.xhtml" 
+          conversation-required="true">
+          
+        <description>View hotel: #{hotel.name}</description>
+        
+        <navigation from-action="#{hotelBooking.bookHotel}">
+            <redirect view-id="/book.xhtml"/>
+        </navigation>
+        
+    </page>
+
+	<page view-id="/book.xhtml" 
+          conversation-required="true">
+          
+        <description>Book hotel: #{hotel.name}</description>
+        
+        <navigation from-action="#{hotelBooking.setBookingDetails}">
+        	<rule if="#{hotelBooking.bookingValid}">
+            	<redirect view-id="/confirm.xhtml"/>
+            </rule>
+        </navigation>
+        
+    </page>
+
+	<page view-id="/confirm.xhtml" 
+          conversation-required="true">
+          
+        <description>Confirm booking: #{booking.description}</description>
+        
+        <navigation from-action="#{hotelBooking.confirm}">
+            <redirect view-id="/main.xhtml"/>
+        </navigation>
+        
+    </page>
+    
+    <page view-id="*">
+    
+        <navigation from-action="#{login.logout}">
+            <redirect view-id="/home.xhtml"/>
+        </navigation>
+
+        <navigation from-action="#{hotelBooking.cancel}">
+            <redirect view-id="/main.xhtml"/>
+        </navigation>
+        
+    </page>
+    
+    <exception class="org.jboss.seam.security.NotLoggedInException">
+        <redirect view-id="/home.xhtml">
+            <message severity="warn">You must be logged in to use this feature</message>
+        </redirect>
+    </exception>
+    
+    <exception class="javax.faces.application.ViewExpiredException">
+        <redirect view-id="/home.xhtml">
+            <message severity="warn">Session expired, please log in again</message>
+        </redirect>
+    </exception>
+
+
+</pages>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/web.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/web.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/WEB-INF/web.xml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="3.0" 
+         xmlns="http://java.sun.com/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true">
+    
+    <!-- Seam -->
+    
+    <listener>
+        <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
+    </listener>
+
+    <filter>
+        <filter-name>Seam Filter</filter-name>
+        <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>Seam Filter</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+    
+    <servlet>
+        <servlet-name>Seam Resource Servlet</servlet-name>
+        <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
+    </servlet>
+    
+    <servlet-mapping>
+        <servlet-name>Seam Resource Servlet</servlet-name>
+        <url-pattern>/seam/resource/*</url-pattern>
+    </servlet-mapping>     
+
+    <context-param>
+        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+        <param-value>.xhtml</param-value>
+    </context-param>
+
+    <context-param>
+        <param-name>facelets.DEVELOPMENT</param-name>
+        <param-value>true</param-value>
+    </context-param>
+    
+    <!-- JSF -->
+
+    <servlet>
+        <servlet-name>Faces Servlet</servlet-name>
+        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    
+    <servlet-mapping>
+        <servlet-name>Faces Servlet</servlet-name>
+        <url-pattern>*.seam</url-pattern>
+    </servlet-mapping>
+    
+    <session-config>
+        <session-timeout>10</session-timeout> 
+    </session-config>     
+</web-app>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/book.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/book.xhtml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/book.xhtml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,178 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:s="http://jboss.com/products/seam/taglib"
+                xmlns:rich="http://richfaces.org/rich"
+                template="template.xhtml">
+
+    <!-- content -->
+    <ui:define name="content">
+        <div class="section">
+            <h1>Book Hotel</h1>
+        </div>
+        <div class="section">
+            <h:form id="booking">
+                <fieldset>
+                    <div class="entry">
+                        <div class="label">Name:</div>
+                        <div class="output">#{hotel.name}</div>
+                    </div>
+                    <div class="entry">
+                        <div class="label">Address:</div>
+                        <div class="output">#{hotel.address}</div>
+                    </div>
+                    <div class="entry">
+                        <div class="label">City, State:</div>
+                        <div class="output">#{hotel.city}, #{hotel.state}</div>
+                    </div>
+                    <div class="entry">
+                        <div class="label">Zip:</div>
+                        <div class="output">#{hotel.zip}</div>
+                    </div>
+                    <div class="entry">
+                        <div class="label">Country:</div>
+                        <div class="output">#{hotel.country}</div>
+                    </div>
+                    <div class="entry">
+                        <div class="label">Nightly rate:</div>
+                        <div class="output">
+                            <h:outputText value="#{hotel.price}">
+                                <f:convertNumber type="currency"  
+                                                 currencySymbol="$"/>
+                            </h:outputText>
+                        </div>
+                    </div>
+                    
+                    <s:validateAll>
+    
+                        <f:facet name="aroundInvalidField">
+                            <s:span id="Error" styleClass="errors"/>
+                        </f:facet>
+                        
+                        <div class="entry">
+                            <div class="label"><h:outputLabel for="checkinDate">Check In Date:</h:outputLabel></div>
+                            <div class="input">
+                                <s:decorate id="checkinDateDecorate">
+                                    <rich:calendar id="checkinDate" value="#{booking.checkinDate}" required="true" datePattern="MM/dd/yyyy" event="onblur" reRender="checkinDateDecorate" />
+                                    <br/>
+                                    <s:message/>
+                                </s:decorate>
+                            </div>
+			</div>
+			
+			<div class="entry">
+                            <div class="label"><h:outputLabel for="checkoutDate">Check Out Date:</h:outputLabel></div>
+                            <div class="input">
+                                <s:decorate id="checkoutDateDecorate">
+                                	<rich:calendar id="checkoutDate" value="#{booking.checkoutDate}" required="true" datePattern="MM/dd/yyyy" event="onblur" reRender="checkoutDateDecorate" />
+                                    <br/>
+                                    <s:message/>
+                                </s:decorate>
+                            </div>
+                        </div>
+                        
+                        <div class="entry">
+                            <div class="label"><h:outputLabel for="beds">Room Preference:</h:outputLabel></div>
+                            <div class="input">
+                                <s:decorate id="bedsDecorate">
+                                    <h:selectOneMenu id="beds" value="#{booking.beds}">
+                                        <f:selectItem itemLabel="One king-size bed" itemValue="1"/>
+                                        <f:selectItem itemLabel="Two double beds" itemValue="2"/>
+                                        <f:selectItem itemLabel="Three beds" itemValue="3"/>
+                                    </h:selectOneMenu>
+                                    <br/>
+                                </s:decorate>
+                            </div>
+                        </div>
+                        
+                        <div class="entry">
+                            <div class="label"><h:outputLabel for="smoking">Smoking Preference:</h:outputLabel></div>
+                            <div id="radio" class="input">
+                                <s:decorate id="smokingDecorate">
+                                    <h:selectOneRadio id="smoking" value="#{booking.smoking}" layout="pageDirection">
+                                        <f:selectItem itemLabel="Smoking" itemValue="true"/>
+                                        <f:selectItem itemLabel="Non Smoking" itemValue="false"/>
+                                    </h:selectOneRadio>
+                                    <br/>
+                                </s:decorate>
+                            </div>
+                        </div>
+                        
+                        <div class="entry">
+                            <div class="label"><h:outputLabel for="creditCard">Credit Card #:</h:outputLabel></div>
+                            <div class="input">
+                                <s:decorate id="creditCardDecorate">
+                                    <h:inputText id="creditCard" value="#{booking.creditCard}" required="true">
+                                    </h:inputText>
+                                    <br/>
+                                    <s:message />
+                                </s:decorate>
+                            </div>
+                        </div>
+                        
+                        <div class="entry">
+                            <div class="label"><h:outputLabel for="creditCardName">Credit Card Name:</h:outputLabel></div>
+                            <div class="input">
+                                <s:decorate id="creditCardNameDecorate">
+                                    <h:inputText id="creditCardName" value="#{booking.creditCardName}" required="true">
+                                    </h:inputText>
+                                    <br/>
+                                    <s:message/>
+                                </s:decorate>
+                            </div>
+                        </div>
+                        
+                        <div class="entry">
+                            <div class="label"><h:outputLabel for="creditCardExpiryMonth">Credit Card Expiry:</h:outputLabel></div>
+                            <div class="input">
+                                <s:decorate id="creditCardExpiryDecorate">
+                                    <h:selectOneMenu id="creditCardExpiryMonth" value="#{booking.creditCardExpiryMonth}">
+                                        <f:selectItem itemLabel="Jan" itemValue="1"/>
+                                        <f:selectItem itemLabel="Feb" itemValue="2"/>
+                                        <f:selectItem itemLabel="Mar" itemValue="3"/>
+                                        <f:selectItem itemLabel="Apr" itemValue="4"/>
+                                        <f:selectItem itemLabel="May" itemValue="5"/>
+                                        <f:selectItem itemLabel="Jun" itemValue="6"/>
+                                        <f:selectItem itemLabel="Jul" itemValue="7"/>
+                                        <f:selectItem itemLabel="Aug" itemValue="8"/>
+                                        <f:selectItem itemLabel="Sep" itemValue="9"/>
+                                        <f:selectItem itemLabel="Oct" itemValue="10"/>
+                                        <f:selectItem itemLabel="Nov" itemValue="11"/>
+                                        <f:selectItem itemLabel="Dec" itemValue="12"/>
+                                    </h:selectOneMenu>
+                                    <h:selectOneMenu id="creditCardExpiryYear" value="#{booking.creditCardExpiryYear}">
+                                        <f:selectItem itemLabel="2005" itemValue="2005"/>
+                                        <f:selectItem itemLabel="2006" itemValue="2006"/>
+                                        <f:selectItem itemLabel="2007" itemValue="2007"/>
+                                        <f:selectItem itemLabel="2008" itemValue="2008"/>
+                                        <f:selectItem itemLabel="2009" itemValue="2009"/>
+                                    </h:selectOneMenu>
+                                    <br/>
+                                </s:decorate>
+                            </div>
+                        </div>
+                        
+                    </s:validateAll>
+                    
+                    <div class="entry errors">
+                        <h:messages id="Messages" globalOnly="true"/>
+                    </div>
+		
+                    <div class="entry">
+                        <div class="label">&#160;</div>
+                        <div class="input">
+                            <h:commandButton id="proceed" value="Proceed" action="#{hotelBooking.setBookingDetails}"/>&#160;
+                            <s:button id="cancel" value="Cancel" action="#{hotelBooking.cancel}"/>
+                        </div>
+                    </div>		
+                </fieldset>
+            </h:form>
+        </div>
+    </ui:define>
+    
+    <!-- sidebar -->
+    <ui:define name="sidebar"> </ui:define>
+
+</ui:composition>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/confirm.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/confirm.xhtml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/confirm.xhtml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,84 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+	    		xmlns:ui="http://java.sun.com/jsf/facelets"
+	  			xmlns:h="http://java.sun.com/jsf/html"
+	  			xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:s="http://jboss.com/products/seam/taglib"
+				template="template.xhtml">
+
+<!-- content -->
+<ui:define name="content">
+<div class="section">
+	<h1>Confirm Hotel Booking</h1>
+</div>
+<div class="section">
+	<h:form id="confirm">
+	<fieldset>
+		<div class="entry">
+			<div class="label">Name:</div>
+			<div class="output">#{hotel.name}</div>
+		</div>
+		<div class="entry">
+			<div class="label">Address:</div>
+			<div class="output">#{hotel.address}</div>
+		</div>
+		<div class="entry">
+			<div class="label">City, State:</div>
+			<div class="output">#{hotel.city}, #{hotel.state}</div>
+		</div>
+		<div class="entry">
+			<div class="label">Zip:</div>
+			<div class="output">#{hotel.zip}</div>
+		</div>
+		<div class="entry">
+			<div class="label">Country:</div>
+			<div class="output">#{hotel.country}</div>
+		</div>
+        <div class="entry">
+            <div class="label">Total payment:</div>
+            <div class="output">
+                <h:outputText value="#{booking.total}">
+                    <f:convertNumber type="currency" 
+                                     currencySymbol="$"/>
+                </h:outputText>
+            </div>
+        </div>
+		<div class="entry">
+			<div class="label">Check In Date:</div>
+			<div class="output"><h:outputText value="#{booking.checkinDate}"/></div>
+		</div>
+		<div class="entry">
+			<div class="label">Check Out Date:</div>
+			<div class="output"><h:outputText value="#{booking.checkoutDate}"/></div>
+		</div>
+		<div class="entry">
+			<div class="label">Credit Card #:</div>
+			<div class="output">#{booking.creditCard}</div>
+		</div>
+		<div class="entry">
+			<div class="label">&#160;</div>
+			<div class="input">
+				<h:commandButton id="confirm" value="Confirm" action="#{hotelBooking.confirm}"/>&#160;
+    			<s:button id="revise" value="Revise" view="/book.xhtml"/>&#160;
+    			<h:commandButton id="cancel" value="Cancel" action="#{hotelBooking.cancel}"/>
+			</div>
+		</div>
+	</fieldset>
+	</h:form>
+</div>
+</ui:define>
+
+<!-- sidebar -->
+<ui:define name="sidebar">
+<h1>Back button navigation</h1>
+<p>
+   When you click "Confirm", the new booking is written to the database, the 
+   conversation ends, and state associated with the conversation is automatically 
+   destroyed by Seam. After you confirm your booking, try hitting the back button
+   on your web browser and clicking "Confirm" again. Seam makes it easy implement
+   applications that behave elegantly in response to the back, forward and refresh
+   buttons.
+</p>
+</ui:define>
+
+</ui:composition>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/conversations.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/conversations.xhtml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/conversations.xhtml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,36 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+     xmlns:c="http://java.sun.com/jstl/core"
+     xmlns:ui="http://java.sun.com/jsf/facelets"
+     xmlns:f="http://java.sun.com/jsf/core"
+     xmlns:h="http://java.sun.com/jsf/html"
+     xmlns:s="http://jboss.com/products/seam/taglib">
+	<div>
+	     
+	<div class="section">
+	    <h1><h:outputText rendered="#{not empty conversationList}" value="Workspaces"/></h1>
+	</div>
+	
+	<div class="section">
+	    <h:form id="ConversationListForm">
+	        <h:dataTable id="ConversationListDataTable" value="#{conversationList}" var="entry">
+	            <h:column id="column1">
+	                <h:commandLink id="EntryDescriptionLink" action="#{entry.select}" value="#{entry.description}"/>
+	                &#160;
+	                <h:outputText id="CurrentEntry" value="[current]" rendered="#{entry.current}"/>
+	            </h:column>
+	            <h:column id="column2">
+	                <h:outputText id="EntryStartDateTime" value="#{entry.startDatetime}">
+	                    <s:convertDateTime type="time" pattern="hh:mm"/>
+	                </h:outputText>
+	                -
+	                <h:outputText id="EntryLastDateTime" value="#{entry.lastDatetime}">
+	                    <s:convertDateTime type="time" pattern="hh:mm"/>
+	                </h:outputText>
+	            </h:column>
+	        </h:dataTable>
+	    </h:form>
+	</div>
+	
+	</div>
+</ui:composition>
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/date.css
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/date.css	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/date.css	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,185 @@
+div.seam-date 
+{
+  margin-top: 5px;
+  border: 1px solid #AAAAAA;
+  background: #fff url(../img/input.bg.gif) 0 0 repeat-x;
+  background-color: #FFFFFF;  
+  color: #505050;
+  font-family: Tahoma, Arial, Helvetica, sans-serif;
+  font-size: 12px;
+}
+
+table.seam-date td {
+  font-family: Tahoma, Arial, Helvetica, sans-serif;
+  font-size: 11px; 
+}
+
+.seam-date-monthNames
+{
+  width: 70px;
+  border: 1px solid #dddddd;
+  border-right: 3px solid #444444;
+  border-bottom: 3px solid #444444;
+  background-color: #ffffff; 
+  font-size: 12px;
+  cursor: pointer;	
+  font-family: Tahoma, Arial, Helvetica, sans-serif;
+  font-weight: normal;
+}
+
+a.seam-date-monthNameLink, a.seam-date-monthNameLink:visited
+{
+  text-align: center;
+  display: block;
+  color: #555555;  
+}
+
+a.seam-date-monthNameLink:hover
+{ 
+  background-color: #CCCCCC;
+  color: red;  
+}
+
+.seam-date-years
+{
+  height: 10em;
+  overflow: auto;
+  width: 60px;
+  border: 1px solid #dddddd;
+  border-right: 3px solid #444444;
+  border-bottom: 3px solid #444444;
+  background-color: #ffffff; 
+  font-size: 12px;
+  cursor: pointer;	
+  font-family: Tahoma, Arial, Helvetica, sans-serif;
+  font-weight: normal;
+}
+
+a.seam-date-yearLink, a.seam-date-yearLink:visited
+{
+  text-align: center;
+  display: block;
+  color: #555555;    
+}
+
+a.seam-date-yearLink:hover
+{
+  background-color: #CCCCCC;
+  color: red;    
+}  
+
+tr.seam-date-header
+{
+  padding: 2px 0px 2px 0px;
+}
+  
+td.seam-date-header
+{
+  padding: 0px 8px 0px 8px;
+  text-align: center;
+  color: gray;
+  font-family: Tahoma, Arial, Helvetica, sans-serif;
+  font-weight: bold;
+  font-size: 12px;  
+}
+
+td.seam-date-header-prevMonth
+{
+  background-image: url("../img/cal-prev.png");
+  background-repeat: no-repeat;
+  background-position: center;
+  padding: 0px 2px 0px 2px;
+  width: 17px;
+  height: 16px;
+  margin-left: 2px;
+}
+
+td.seam-date-header-nextMonth
+{
+  background-image: url("../img/cal-next.png");
+  background-repeat: no-repeat;
+  background-position: center;
+  padding: 0px 2px 0px 2px;
+  width: 17px;
+  height: 16px;
+  margin-right: 2px;
+}
+
+tr.seam-date-headerDays
+{
+  color: white;
+  font-weight: normal;
+}
+
+tr.seam-date-headerDays > td
+{
+  background-color: #CCCCCC;
+  border: 1px solid #AAAAAA;
+  color: white;
+  text-align: center;
+  width: 26px;   
+}
+
+tr.seam-date-footer
+{
+  background-color: white; 
+  color: #505050;
+  font-weight: bold;
+}
+
+tr.seam-date-footer > td
+{
+  text-align: center;
+}
+
+td.seam-date-inMonth
+{
+  background-color: white; 
+  color: black;
+  font-weight: normal;
+  cursor: pointer;
+  border: 1px solid #ece9d8;
+}
+
+td.seam-date-outMonth
+{
+  background-color: white; 
+  color: #999999;
+  font-weight: normal;
+  cursor: pointer;
+  border: 1px solid #ece9d8;
+}
+
+td.seam-date-selected
+{
+  background-color: #CCCCCC;        
+  border: 1px solid #AAAAAA; 
+  color: black;
+  font-weight: normal;
+}
+
+td.seam-date-dayOff-inMonth
+{
+  background-color: #efefef;
+  color: black;
+  font-weight: normal;
+  cursor: pointer;
+  border: 1px solid #ece9d8;
+}
+
+td.seam-date-dayOff-outMonth
+{
+  background-color: #efefef;
+  color: #999999;
+  font-weight: normal;
+  cursor: pointer;
+  border: 1px solid #ece9d8;
+}
+
+td.seam-date-hover 
+{
+  background-color: #CCCCCC;
+  border: 1px solid #AAAAAA;
+  cursor: pointer;
+  color: red;
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/screen.css
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/screen.css	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/screen.css	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,272 @@
+/* Setup defaults since variable in browsers
+----------------------------------------------- */
+body, div, dd, dt, dl, img, ul, ol, li, p, h1, h2, h3, h4, h5, form, hr, fieldset {
+	margin: 0;
+	padding: 0;
+}
+/* Element Defaults
+----------------------------------------------- */
+html {
+	height: 100%;
+	background-color: #DBD4C6;
+}
+img {
+	border: 0;
+}
+body {
+	font-family: Verdana, Arial, Helvetica, sans-serif;
+	font-size: small;
+	line-height: 1.25em;
+	color: #362F2D;
+	position: relative;
+	width: 760px;
+	height: 100%;
+	margin-left: auto;
+	margin-right: auto;
+}
+label {
+	font-weight: bold;
+	color: #5E5147;
+}
+input {
+	border: 1px solid #C3BBB6;
+	padding: 4px;
+	margin: 5px 0;
+	background: #fff url(../img/input.bg.gif) 0 0 repeat-x;
+}
+select {
+	border: 1px solid #C3BBB6;
+	padding: 4px;
+	margin: 5px 0;
+	background: #fff url(../img/input.bg.gif) 0 0 repeat-x;
+}ol, ul {
+	margin: 10px 0px 10px 6px;
+}
+li {
+	margin: 10px 12px;
+}
+fieldset {
+	border: 0;
+}
+/* Layout
+----------------------------------------------- */
+#document {
+	padding: 0 1px;
+	background: #fff url(../img/bg.gif) 0 0 repeat-y;
+	float: left;
+	border-bottom: 1px solid #C3BBB6;
+}
+#header {
+	float: left;
+	width: 758px;
+	height: 46px;
+	background: url(../img/hdr.bg.gif) 0 0 repeat-x;
+}
+#container {
+	float: left;
+	width: 758px;
+	background: url(../img/hdr.bar.jpg) 0 0 repeat-x;
+}
+#sidebar {
+	float: left;
+	width: 190px;
+	margin-top: 96px;
+	padding: 20px 10px 0 10px;
+	background: url(../img/sdb.bg.gif) 0 0 no-repeat;
+}
+#content {
+	float: left;
+	width: 548px;
+	margin-top: 75px;
+	padding-top: 5px;
+	background: #fff url(../img/cnt.bg.gif) 0 0 repeat-x;
+}
+#footer {
+	clear: both;
+	margin-top: 40px;
+	float: left;
+	padding: 20px;
+	border-top: 1px solid #C3BBB6;
+	background-color: #fff;
+	width: 718px;
+	text-align: right;
+}
+/* General
+----------------------------------------------- */
+input[type="submit"], input[type="button"] {
+	font-weight: bold;
+	color: #fff;
+	border: 1px solid #5D1414;
+	height: 26px;
+	background: #fff url(../img/btn.bg.gif) 0 0 repeat-x;
+	border-style: none;
+}
+.center {
+	text-align: center;
+}
+.entry {
+	clear: both;
+	padding-top: 10px;
+}
+.entry .label {
+	float: left;
+	padding-top: 10px;
+	padding-right: 5px;
+	font-weight: bold;
+	width: 150px;
+	text-align: right;
+}
+.entry .output {
+	float: left;
+	width: 250px;
+	padding-top: 10px;
+	text-align: left;
+}
+.entry .input {
+	float: left;
+	width: 250px;
+	text-align: left;
+}
+/* Sidebar
+----------------------------------------------- */
+.notes {
+	text-align: center;
+	font-size: small;
+}
+.subnotes {
+    margin-top: 1em;
+	font-size: small;
+}
+.errors {
+	font-size: small;
+	font-weight: bold;
+	text-align: center;
+	color: #600;
+}
+.errors div {
+	text-align: left;
+}
+.errors input {
+	border: 1px solid #600;
+}
+.errors ul {
+	list-style: none;
+}
+.buttonBox {
+	text-align: center;
+	padding: 5px 0;
+}
+#sidebar p {
+	font-size: small;
+	color: #8B7869;
+	line-height: 150%;
+	padding-bottom: 10px;
+}
+#sidebar li {
+	font-size: small;
+	color: #8B7869;
+}
+#sidebar h1 {
+	line-height: normal;
+	font-weight: bold;
+	font-size: small;
+}
+/*
+#sidebar p:hover {
+	color: #362F2D;
+}
+*/
+/* Content
+----------------------------------------------- */
+#content .section {
+	float: left;
+	width: 518px;
+	padding: 15px 15px 0 15px;
+}
+#content .section h1 {
+	font-family: "Trebuchet MS", Arial, sans-serif;
+	line-height: normal;
+	font-weight: normal;
+	font-size: large;
+}
+#content .section p {
+	line-height: 150%;
+	padding: 10px 0;
+	font-size: small;
+}
+#content table {
+	width: 100%;
+	border: 1px solid #D2C9C4;
+	border-collapse: collapse;
+}
+#content table caption {
+	padding-bottom: 6px;
+	text-align: left;
+	font-weight: bold;
+}
+#content table thead th {
+	border-left: 1px solid #D2C9C4;
+	background: #fff url(../img/th.bg.gif) 0 100% repeat-x;	
+	border-bottom: 1px solid #D2C9C4;
+	padding: 6px;
+	text-align: left;
+	font-size: small;
+}
+#content table tbody td {
+	border-left: 1px solid #E4DBD5;
+	padding: 4px;
+	border-bottom: 1px solid #D2C9C4;
+	font-size: small;
+}
+#content dt {
+	font-weight: bold;
+	float: left;
+	width: 33%;
+}
+#content dd {
+	padding-left: 10px;
+	float: left;
+	width: 66%;
+}
+#radio table {
+	border: 0px;
+}
+#radio table tr td {
+	border: 0px;
+	border-left: 0px;
+	border-bottom: 0px;
+}
+/* Header
+----------------------------------------------- */
+#title {
+	float: left;
+	padding: 1px 0 6px 15px;
+}
+#status {
+	color: #C7B299;
+	float: right;
+	font-family: Verdana, Arial, Helvetica, sans-serif;
+	font-weight: bold;
+	font-size: x-small;
+	text-align: right;
+	padding-top: 14px;
+	padding-right: 15px;
+}
+#status a {
+	color: #C7B299;
+	text-decoration: none;
+}
+/* Homepage Modifications
+----------------------------------------------- */
+#pgHome #container {
+	background: url(../img/hdr.ad.jpg) 0 0 repeat-x;
+}
+#pgHome #sidebar {
+	margin-top: 207px;
+}
+#pgHome #content {
+	margin-top: 183px;
+}
+#pgHome #sidebar input[type="submit"] {
+	height: 30px;
+}

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/trailblazer_main.css
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/trailblazer_main.css	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/css/trailblazer_main.css	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,148 @@
+* {
+    margin:  0px; 
+    padding: 0px; 
+    border:  none;
+}
+
+body {
+    font: 1em verdana, arial, sans-serif;
+    background: #CCCCCC;
+}
+
+div#main {
+    margin-left:  0px;
+    width: 751px;
+    background: #ecefdf;
+}
+
+div#top,div#pictures{
+}
+
+div#pictures img {
+    float:left;
+}
+
+img#head1 {
+    margin-right: 3px;
+} 
+
+img#head2 {
+    margin-right: 4px;
+} 
+
+div.trail {
+    clear:both;     
+    margin-left:  50px;
+    margin-top:   0px;
+    margin-right: 50px
+}
+
+div.foot {
+    margin-left:  50px;
+    margin-right: 50px;
+    margin-top:   50px;
+    text-align:   center;
+    font-size:    .5em;
+    height: 36px;
+}
+
+div.trail h1 {
+    margin-top:   -30px;
+    margin-left:  -50px;
+    font-size:    1.2em;   
+    font-weight:  bold;
+    padding-left: .4em;
+}
+
+div.trail h2 { 
+    float:        left;
+    font-size:    1em;   
+    font-weight:  bold;
+    padding-left: .4em;
+}
+
+div.trail h3 { 
+    float:        left;
+    font-size:    .8em;   
+    font-weight:  bold;
+    margin-left: -1.4em;
+    margin-bottom: 1em;
+}
+
+
+div.trail p {
+    clear:      both;
+    margin-top: 20px;
+    font-size: .8em;
+    text-decoration: none;
+}
+
+div#next_trail {
+    margin-left: 36px;
+}
+
+div.numbox {
+    border: thin solid black; 
+    margin-left: -.8em;
+    float:   left;
+    background: #ffffff;
+    padding: .2em .35em .3em;
+    font-style: normal;
+    font-weight: bold;
+    font-size: 1.4em;
+}
+
+div.figure {
+    text-align: center;
+    font-size: .6em;
+    margin-top: 30px;
+}
+
+div.figure img {
+    display: block;
+    margin-right: auto;
+    margin-left: auto;
+}
+
+code {
+    font: 1.1em "Courier New", Courier, mono;
+}
+
+code.block {
+    white-space: pre;
+    font: 10pt "Courier New", Courier, mono;
+    display: block;
+    border-style: dashed;
+    border-width: thin;
+    padding: .5em;
+    background: #ffffff;
+    margin: 20px;
+}
+
+div.foot_image {
+   float: left;
+   height: 86px;
+}
+
+a:active {
+    color : #666666;
+    text-decoration: none;
+}
+
+a:hover {
+    color : #000000;
+    background-color : #D6E0FE;
+    text-decoration: none;
+}
+
+a:link {
+    color : #005EB6;
+    text-decoration: none;
+}
+
+a:visited {
+    color : #888888;
+    text-decoration: none;
+}
+
+

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/home.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/home.xhtml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/home.xhtml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://java.sun.com/jsf/facelets"
+	  xmlns:h="http://java.sun.com/jsf/html"
+	  xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:s="http://jboss.com/products/seam/taglib">
+<h:head>
+	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+	<title>JBoss Suites: Seam Framework</title>
+	<link href="css/screen.css" rel="stylesheet" type="text/css" />
+</h:head>
+<h:body id="pgHome">
+<f:view>
+<div id="document">
+	<div id="header">
+		<div id="title"><img src="img/hdr.title.gif" alt="JBoss Suites: seam framework demo"/></div>
+	</div>
+	<div id="container">
+		<div id="sidebar">
+            <h:form id="login">
+			<fieldset>
+				<div>
+					<h:outputLabel for="username">Login Name</h:outputLabel>
+					<h:inputText id="username" value="#{user.username}" style="width: 175px;"/>
+					<div class="errors"><h:message for="username"/></div>
+				</div>
+				<div>
+					<h:outputLabel for="password">Password</h:outputLabel>
+					<h:inputSecret id="password" value="#{user.password}" style="width: 175px;"/>
+				</div>
+				<div class="errors"><h:messages globalOnly="true"/></div>
+				<div class="buttonBox"><h:commandButton id="login" action="#{login.login}" value="Account Login"/></div>
+				<div class="notes"><s:link id="register" view="/register.xhtml" value="Register New User"/></div>
+                <div class="subnotes">
+                    Or use a demo account:
+                    <ul>
+                        <li>gavin/foobar</li>
+                        <li>demo/demo</li>
+                    </ul>
+                </div>
+			</fieldset>
+            </h:form>
+		</div>
+		<div id="content">
+			<div class="section">
+				
+			    <h1>About this example application</h1>
+			    
+			    <p>
+			       This sample application demonstrates how easy it is to develop stateful web 
+			       applications using JBoss Seam. Just register, login, and book a room to see 
+			       Seam in action. Throughout the application you'll see popup links like 
+			       the ones at the bottom of this page. Click them to see how the application 
+			       works under the hood.
+                </p>
+			    
+			    <p>
+			       Note: Please do NOT enter personal information or your credit card number in 
+			       this sample application.
+			    </p>
+			    
+			</div>
+		</div>
+	</div>
+	<div id="footer">Created with JBoss EJB 3.0, Seam, JSF (Mojarra), and Facelets</div>
+</div>
+</f:view>
+</h:body>
+</html>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/hotel.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/hotel.xhtml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/hotel.xhtml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,77 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+	    		xmlns:ui="http://java.sun.com/jsf/facelets"
+	  			xmlns:h="http://java.sun.com/jsf/html"
+	  			xmlns:f="http://java.sun.com/jsf/core"
+                                xmlns:s="http://jboss.com/products/seam/taglib"
+				template="template.xhtml">
+
+<!-- content -->
+<ui:define name="content">
+<div class="section">
+	<h1>View Hotel</h1>
+</div>
+<div class="section">
+	<div class="entry">
+		<div class="label">Name:</div>
+		<div class="output">#{hotel.name}</div>
+	</div>
+	<div class="entry">
+		<div class="label">Address:</div>
+		<div class="output">#{hotel.address}</div>
+	</div>
+	<div class="entry">
+		<div class="label">City:</div>
+		<div class="output">#{hotel.city}</div>
+	</div>
+	<div class="entry">
+		<div class="label">State:</div>
+		<div class="output">#{hotel.state}</div>
+	</div>
+	<div class="entry">
+		<div class="label">Zip:</div>
+		<div class="output">#{hotel.zip}</div>
+	</div>
+	<div class="entry">
+		<div class="label">Country:</div>
+		<div class="output">#{hotel.country}</div>
+	</div>
+    <div class="entry">
+        <div class="label">Nightly rate:</div>
+        <div class="output">
+            <h:outputText value="#{hotel.price}">
+                <f:convertNumber type="currency" 
+                                 currencySymbol="$"/>
+            </h:outputText>
+        </div>
+    </div>
+</div>
+<div class="section">
+	<h:form id="hotel">
+	<fieldset class="buttonBox">
+		<h:commandButton id="bookHotel" action="#{hotelBooking.bookHotel}" value="Book Hotel"/>&#160;
+		<h:commandButton id="cancel" action="#{hotelBooking.cancel}" value="Back to Search"/>
+	</fieldset>
+	</h:form>
+</div>
+</ui:define>
+
+<!-- sidebar -->
+<ui:define name="sidebar">
+
+<h1>Don't kill your database</h1>
+<p>
+    Keeping conversational state in memory in the middle tier is a great way to
+    improve your application's scalability. It saves hitting the database every
+    time we refresh a page, to re-read the data we were just looking at five 
+    seconds ago. By using Seam's conversation context, we get a natural cache 
+    of data associated with the what the user is currently doing. By nature, 
+    this cache has a more efficient eviction policy than the MRU-type algorithms 
+    used by a typical second-level data cache in an O/R mapping engine like
+    Hibernate (at least for some kinds of data). Of course, you should use 
+    a clever combination of second-level caching and conversational data
+    caching to achieve the best performance for your application.
+</p>
+</ui:define>
+
+</ui:composition>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/hotels.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/hotels.xhtml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/hotels.xhtml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,132 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+	    		xmlns:ui="http://java.sun.com/jsf/facelets"
+	  			xmlns:h="http://java.sun.com/jsf/html"
+	  			xmlns:f="http://java.sun.com/jsf/core"
+	  			xmlns:s="http://jboss.com/products/seam/taglib"
+                xmlns:a="http://richfaces.org/a4j"
+				template="template.xhtml">
+
+<!-- content -->
+<ui:define name="content">
+
+<div class="section">
+  <h:form id="main">
+  
+    <span class="errors">
+       <h:messages globalOnly="true"/>
+    </span>
+    
+	<h1>Search Hotels</h1>
+	<fieldset> 
+	   <h:inputText id="searchString" value="#{hotelSearch.searchString}" style="width: 165px;">
+         <a:ajax event="keyup" listener="#{hotelSearch.find}" render="searchResults" />
+       </h:inputText>
+       &#160;
+	   <a:commandButton id="findHotels" value="Find Hotels" action="#{hotelSearch.find}" reRender="searchResults"/>
+       &#160;
+       <a:status>
+          <f:facet name="start">
+             <h:graphicImage value="/img/spinner.gif"/>
+          </f:facet>
+       </a:status>
+	   <br/>
+       <h:outputLabel for="pageSize">Maximum results:</h:outputLabel>&#160;
+       <h:selectOneMenu value="#{hotelSearch.pageSize}" id="pageSize">
+          <f:selectItem itemLabel="5" itemValue="5"/>
+          <f:selectItem itemLabel="10" itemValue="10"/>
+          <f:selectItem itemLabel="20" itemValue="20"/>
+       </h:selectOneMenu>
+    </fieldset>
+    
+  </h:form>
+</div>
+
+<a:outputPanel id="searchResults">
+  <div class="section">
+	<h:outputText value="No Hotels Found" rendered="#{hotels != null and hotels.rowCount==0}"/>
+	<h:dataTable id="hotels" value="#{hotels}" var="hot" rendered="#{hotels.rowCount>0}">
+		<h:column>
+			<f:facet name="header">Name</f:facet>
+			#{hot.name}
+		</h:column>
+		<h:column>
+			<f:facet name="header">Address</f:facet>
+			#{hot.address}
+		</h:column>
+		<h:column>
+			<f:facet name="header">City, State</f:facet>
+			#{hot.city}, #{hot.state}, #{hot.country}
+		</h:column> 
+		<h:column>
+			<f:facet name="header">Zip</f:facet>
+			#{hot.zip}
+		</h:column>
+		<h:column>
+			<f:facet name="header">Action</f:facet>
+			<s:link id="viewHotel" value="View Hotel" action="#{hotelBooking.selectHotel(hot)}"/>
+		</h:column>
+	</h:dataTable>
+	<s:link value="More results" action="#{hotelSearch.nextPage}" rendered="#{hotelSearch.nextPageAvailable}"/>
+  </div>
+</a:outputPanel>
+
+<div class="section">
+	<h1>Current Hotel Bookings</h1>
+</div>
+<div class="section">
+  <h:form id="bookings">
+	<h:outputText value="No Bookings Found" rendered="#{bookings.rowCount==0}"/>
+	<h:dataTable id="bookings" value="#{bookings}" var="book" rendered="#{bookings.rowCount>0}">
+		<h:column>
+			<f:facet name="header">Name</f:facet>
+			#{book.hotel.name}
+		</h:column>
+		<h:column>
+			<f:facet name="header">Address</f:facet>
+			#{book.hotel.address}
+		</h:column>
+		<h:column>
+			<f:facet name="header">City, State</f:facet>
+			#{book.hotel.city}, #{book.hotel.state}
+		</h:column>
+        <h:column>
+            <f:facet name="header">Check in date</f:facet>
+            <h:outputText value="#{book.checkinDate}"/>
+        </h:column>
+        <h:column>
+            <f:facet name="header">Check out date</f:facet>
+            <h:outputText value="#{book.checkoutDate}"/>
+        </h:column>
+		<h:column>
+			<f:facet name="header">Confirmation number</f:facet>
+			#{book.id}
+		</h:column>
+		<h:column>
+			<f:facet name="header">Action</f:facet>
+			<h:commandLink id="cancel" value="Cancel" action="#{bookingList.cancel}"/>
+		</h:column>
+	</h:dataTable>
+  </h:form>
+</div>
+
+</ui:define>
+
+<!-- sidebar -->
+<ui:define name="sidebar">
+
+<h1>State management in Seam</h1>
+<p>
+   State in Seam is <em>contextual</em>. When you click "Find Hotels", the application
+   retrieves a list of hotels from the database and caches it in the session context. When you
+   navigate to one of the hotel records by clicking the "View Hotel" link, a <em>conversation</em> 
+   begins. The conversation is attached to a particular tab, in a particular browser window. You can
+   navigate to multiple hotels using "open in new tab" or "open in new window" in your web browser.
+   Each window will execute in the context of a different conversation. The application keeps state
+   associated with your hotel booking in the conversation context, which ensures that the concurrent
+   conversations do not interfere with each other.
+</p>
+
+</ui:define>
+
+</ui:composition>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/bg.gif
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/bg.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/btn.bg.gif
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/btn.bg.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/cal-next.png
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/cal-next.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/cal-prev.png
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/cal-prev.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/cnt.bg.gif
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/cnt.bg.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/dtpick.gif
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/dtpick.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/hdr.ad.jpg
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/hdr.ad.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/hdr.bar.jpg
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/hdr.bar.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/hdr.bg.gif
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/hdr.bg.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/hdr.title.gif
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/hdr.title.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/header_line.gif
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/header_line.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/input.bg.gif
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/input.bg.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/sdb.bg.gif
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/sdb.bg.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/spinner.gif
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/spinner.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/th.bg.gif
===================================================================
(Binary files differ)


Property changes on: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/img/th.bg.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/index.html
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/index.html	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/index.html	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,5 @@
+<html>
+<head>
+<meta http-equiv="Refresh" content="0; URL=home.seam" />
+</head>
+</html>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/main.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/main.xhtml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/main.xhtml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,109 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:s="http://jboss.com/products/seam/taglib"
+                template="template.xhtml">
+    
+    <!-- content -->
+    <ui:define name="content">        
+        <div class="section">
+            <h:form id="main">
+                
+                <span class="errors">
+                    <h:messages id="messages" globalOnly="true"/>
+                </span>
+                
+                <h1>Search Hotels</h1>
+                <fieldset> 
+                    <h:inputText id="searchString" value="#{hotelSearch.searchString}" style="width: 165px;" />
+                    &#160;
+                    <h:commandButton id="findHotels" value="Find Hotels" action="#{hotelSearch.find}" />
+                    &#160;
+
+                    <br/>
+                    <h:outputLabel for="pageSize">Maximum results:</h:outputLabel>&#160;
+                    <h:selectOneMenu value="#{hotelSearch.pageSize}" id="pageSize">
+                        <f:selectItem itemLabel="5" itemValue="5"/>
+                        <f:selectItem itemLabel="10" itemValue="10"/>
+                        <f:selectItem itemLabel="20" itemValue="20"/>
+                    </h:selectOneMenu>
+                </fieldset>
+                
+            </h:form>
+        </div>
+
+
+        <div class="section">
+            <h:outputText id="NoHotelsFoundMessage" value="No Hotels Found" rendered="#{hotels != null and hotels.rowCount==0}"/>
+            <h:dataTable id="hotels" value="#{hotels}" var="hot" rendered="#{hotels.rowCount>0}">
+                <h:column>
+                    <f:facet name="header">Name</f:facet>
+                    #{hot.name}
+                </h:column>
+                <h:column>
+                    <f:facet name="header">Address</f:facet>
+                    #{hot.address}
+                </h:column>
+                <h:column>
+                    <f:facet name="header">City, State</f:facet>
+                    #{hot.city}, #{hot.state}, #{hot.country}
+                </h:column> 
+                <h:column>
+                    <f:facet name="header">Zip</f:facet>
+                    #{hot.zip}
+                </h:column>
+                <h:column>
+                    <f:facet name="header">Action</f:facet>
+                    <s:link id="viewHotel" value="View Hotel" action="#{hotelBooking.selectHotel(hot)}"/>
+                </h:column>
+            </h:dataTable>
+            <s:link id="MoreResultsLink" value="More results" action="#{hotelSearch.nextPage}" rendered="#{hotelSearch.nextPageAvailable}"/>
+        </div>
+        
+        <div class="section">
+            <h1>Current Hotel Bookings:</h1>
+        </div>
+        <div class="section">
+            <h:form id="bookings">
+                <h:outputText value="No Bookings Found" rendered="#{bookings.rowCount==0}"/>
+                <h:dataTable id="bookings" value="#{bookings}" var="book" rendered="#{bookings.rowCount>0}">
+                    <h:column>
+                        <f:facet name="header">Name</f:facet>
+                        #{book.hotel.name}
+                    </h:column>
+                    <h:column>
+                        <f:facet name="header">Address</f:facet>
+                        #{book.hotel.address}
+                    </h:column>
+                    <h:column>
+                        <f:facet name="header">City, State</f:facet>
+                        #{book.hotel.city}, #{book.hotel.state}
+                    </h:column>
+                    <h:column>
+                        <f:facet name="header">Check in date</f:facet>
+                        <h:outputText value="#{book.checkinDate}"/>
+                    </h:column>
+                    <h:column>
+                        <f:facet name="header">Check out date</f:facet>
+                        <h:outputText value="#{book.checkoutDate}"/>
+                    </h:column>
+                    <h:column>
+                        <f:facet name="header">Confirmation number</f:facet>
+                        #{book.id}
+                    </h:column>
+                    <h:column>
+                        <f:facet name="header">Action</f:facet>
+                        <h:commandLink id="cancel" value="Cancel" action="#{bookingList.cancel}"/>
+                    </h:column>
+                </h:dataTable>
+            </h:form>
+        </div>
+        
+    </ui:define>
+
+    <ui:define name="sidebar" /> 
+
+
+</ui:composition>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/password.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/password.xhtml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/password.xhtml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,68 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:s="http://jboss.com/products/seam/taglib"
+                template="template.xhtml">
+    
+    <!-- content -->
+    <ui:define name="content">
+        <div class="section">
+            <h1>Change Your Password</h1>
+        </div>
+        <div class="section">
+            <h:form id="setpassword">
+                
+                <f:facet name="afterInvalidField">
+                    <s:message id="Message"/>
+                </f:facet>
+                <f:facet name="aroundInvalidField">
+                    <s:span id="Error" styleClass="errors"/>
+                </f:facet>
+                
+                <fieldset>
+                    
+                    <div class="entry">
+                        <div class="label"><h:outputLabel for="password">New Password:</h:outputLabel></div>
+                        <div class="input">
+                            <s:decorate id="PasswordDecorate">
+                                <h:inputSecret id="password" value="#{user.password}" required="true">
+                                    <s:validate />
+                                </h:inputSecret>
+                                <br/>
+                            </s:decorate>
+                        </div>
+                    </div>
+                    
+                    <div class="entry">
+                        <div class="label"><h:outputLabel for="password">Old Password:</h:outputLabel></div>
+                        <div class="input">
+                            <s:decorate id="VerifyDecorate">
+                                <h:inputSecret id="verify" value="#{changePassword.verify}" required="true"/>
+                                <br/>
+                            </s:decorate>
+                        </div>
+                    </div>
+                    
+                    <div class="entry errors">
+                        <h:messages id="Messages" globalOnly="true"/>
+                    </div>
+                    
+                    <div class="entry">
+                        <div class="label">&#160;</div>
+                        <div class="input">
+                            <h:commandButton id="change" value="Change" 
+                                             action="#{changePassword.changePassword}"/>&#160;
+                            <s:button id="cancel" value="Cancel" view="/main.xhtml"/>
+                        </div>
+                    </div>
+                    
+                </fieldset>
+                
+            </h:form>
+        </div>
+    </ui:define>
+    
+    <ui:define name="sidebar" />
+</ui:composition>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/register.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/register.xhtml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/register.xhtml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://java.sun.com/jsf/facelets"
+	  xmlns:h="http://java.sun.com/jsf/html"
+	  xmlns:f="http://java.sun.com/jsf/core"
+	  xmlns:s="http://jboss.com/products/seam/taglib"
+      xmlns:a="http://richfaces.org/a4j">
+<h:head>
+	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+	<title>JBoss Suites: Seam Framework</title>
+	<link href="css/screen.css" rel="stylesheet" type="text/css" />
+</h:head>
+<h:body id="pgHome">
+<div id="document">
+	<div id="header">
+		<div id="title"><img src="img/hdr.title.gif" alt="JBoss Suites: seam framework demo"/></div>
+	</div>
+	<div id="container">
+		<div id="sidebar">		    
+			<h1>Integrated multi-layer validation</h1>
+			<p>
+			    Robust applications need data validation in several different places. Seam integrates Hibernate Validator,
+			    a set of annotations for expressing data model constraints in your domain model classes. Then, these 
+			    constraints are applied almost completely transparently at three levels of the application: by Seam when 
+			    the user first enters data, by EJB before persisting data to the database, and, if you use Hibernate to 
+			    generate your database schema, by the database constraints themselves. Multi-layer validation hardens
+			    your application and protects your data. Even better, it's self-documenting, and easy to change when
+			    your business rules change.
+			</p>
+		</div>
+		<div id="content">
+			<div class="section">
+				<h1>Register</h1>
+			</div>
+			<div class="section">
+                
+                <h:form id="register">
+				<fieldset>
+				
+					   <s:validateAll>
+
+					    <f:facet name="aroundInvalidField">
+					       <s:span styleClass="errors"/>
+					    </f:facet>
+		    
+						<div class="entry">
+							<div class="label"><h:outputLabel for="username">Username:</h:outputLabel></div>
+							<div class="input">
+								<s:decorate id="usernameDecorate">
+									<h:inputText id="username" value="#{user.username}" required="true">
+                                        <a:ajax event="blur" render="usernameErrors"/>
+                                    </h:inputText>
+                                    <br/>
+                                    <a:outputPanel id="usernameErrors"><s:message/></a:outputPanel>
+								</s:decorate>
+							</div>
+						</div>
+						
+						<div class="entry">
+							<div class="label"><h:outputLabel for="name">Real Name:</h:outputLabel></div>
+							<div class="input">
+								<s:decorate id="nameDecorate">
+									<h:inputText id="name" value="#{user.name}" required="true">
+                                        <a:ajax event="blur" render="nameErrors"/>
+                                    </h:inputText>
+                                    <br/>
+                                    <a:outputPanel id="nameErrors"><s:message/></a:outputPanel>
+								</s:decorate>
+							</div>
+						</div>
+						
+						<div class="entry">
+							<div class="label"><h:outputLabel for="password">Password:</h:outputLabel></div>
+							<div class="input">
+								<s:decorate id="passwordDecorate">
+									<h:inputSecret id="password" value="#{user.password}" required="true"/>
+                                    <br/>
+                                    <h:message for="password"/>
+								</s:decorate>
+							</div>
+						</div>
+						
+						<div class="entry">
+							<div class="label"><h:outputLabel for="verify">Verify Password:</h:outputLabel></div>
+							<div class="input">
+								<s:decorate id="verifyDecorate">
+									<h:inputSecret id="verify" value="#{register.verify}" required="true"/>
+                                    <br/>
+                                    <h:message for="verify"/>
+								</s:decorate>
+							</div>
+						</div>
+
+					</s:validateAll>
+					
+					<div class="entry errors">
+						<h:messages id="messages" globalOnly="true"/>
+					</div>
+					
+					<div class="entry">
+						<div class="label">&#160;</div>
+						<div class="input">
+							<h:commandButton id="register" value="Register" action="#{register.register}"/>&#160;
+							<s:button id="cancel" value="Cancel" view="/home.xhtml"/>
+						</div>
+					</div>
+					
+				</fieldset>
+                </h:form>
+                
+			</div>			
+		</div>
+	</div>
+	<div id="footer">Created with JBoss EJB 3.0, Seam, JSF (Mojarra), and Facelets</div>
+</div>
+</h:body>
+</html>

Added: branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/template.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/template.xhtml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/spring/spring-web/src/main/webapp/template.xhtml	2012-04-04 12:04:24 UTC (rev 14500)
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:s="http://jboss.com/products/seam/taglib">
+<h:head>
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+	<title>JBoss Suites: Seam Framework</title>
+	<link href="css/screen.css" rel="stylesheet" type="text/css" />
+	<link href="css/date.css" rel="stylesheet" type="text/css" />
+</h:head>
+<h:body>
+
+<div id="document">
+	<div id="header">
+		<div id="title"><img src="img/hdr.title.gif" alt="JBoss Suites: seam framework demo"/></div>
+		<div id="status">
+            Welcome #{user.name}
+            | <s:link id="search" view="/main.xhtml" value="Search" propagation="none"/>
+            | <s:link id="settings" view="/password.xhtml" value="Settings" propagation="none"/>
+            | <s:link id="logout" action="#{login.logout}" value="Logout"/>
+		</div>
+	</div>
+	<div id="container">
+		<div id="sidebar">
+			<ui:insert name="sidebar"/>
+		</div>
+		<div id="content">
+			<ui:insert name="content"/>
+		    <ui:include src="conversations.xhtml" />
+		</div>
+	</div>
+	<div id="footer">Created with JBoss EJB 3.0, Seam, JSF (Mojarra), and Facelets</div>
+</div>
+</h:body>
+</html>



More information about the seam-commits mailing list