From f09d67cc1c216b445d01f1893f37ff391bb3b4b7 Mon Sep 17 00:00:00 2001
From: Keith Donald <kdonald@vmware.com>
Date: Tue, 5 May 2009 17:22:49 +0000
Subject: [PATCH] petclinic 3 initial commit - wip

---
 .../.classpath                                |  14 +++
 .../.project                                  |  42 +++++++
 .../com.springsource.server.ide.jdt.core.xml  |   2 +
 .../.settings/org.eclipse.jdt.core.prefs      |  12 ++
 ...clipse.jst.common.project.facet.core.prefs |   3 +
 .../org.eclipse.wst.common.component          |  10 ++
 ....eclipse.wst.common.project.facet.core.xml |   7 ++
 .../org.eclipse.wst.validation.prefs          |   6 +
 .../.settings/org.maven.ide.eclipse.prefs     |   9 ++
 ...ringframework.ide.eclipse.beans.core.prefs |   3 +
 ...org.springframework.ide.eclipse.core.prefs |  67 +++++++++++
 .../.springBeans                              |  13 +++
 org.springframework.samples.petclinic/pom.xml | 106 ++++++++++++++++++
 .../samples/petclinic/HomeController.java     |  14 +++
 .../samples/petclinic/owner/Owner.java        |  26 +++++
 .../petclinic/owner/OwnerController.java      |  36 ++++++
 .../petclinic/owner/OwnerRepository.java      |  13 +++
 .../petclinic/owner/OwnersController.java     |  39 +++++++
 .../samples/petclinic/pet/Gender.java         |   5 +
 .../samples/petclinic/pet/Pet.java            |  25 +++++
 .../samples/petclinic/pet/PetController.java  |  41 +++++++
 .../samples/petclinic/pet/PetRepository.java  |   9 ++
 .../samples/petclinic/util/Measurement.java   |  10 ++
 .../petclinic/util/ResponseContext.java       |   9 ++
 .../samples/petclinic/util/Unit.java          |   5 +
 .../src/main/resources/log4j.xml              |  42 +++++++
 .../src/main/webapp/WEB-INF/home.jsp          |  12 ++
 .../main/webapp/WEB-INF/spring/app-config.xml |  14 +++
 .../main/webapp/WEB-INF/spring/mvc-config.xml |  36 ++++++
 .../src/main/webapp/WEB-INF/urlrewrite.xml    |  12 ++
 .../src/main/webapp/WEB-INF/web.xml           |  36 ++++++
 .../src/test/resources/log4j.xml              |  42 +++++++
 32 files changed, 720 insertions(+)
 create mode 100644 org.springframework.samples.petclinic/.classpath
 create mode 100644 org.springframework.samples.petclinic/.project
 create mode 100644 org.springframework.samples.petclinic/.settings/com.springsource.server.ide.jdt.core.xml
 create mode 100644 org.springframework.samples.petclinic/.settings/org.eclipse.jdt.core.prefs
 create mode 100644 org.springframework.samples.petclinic/.settings/org.eclipse.jst.common.project.facet.core.prefs
 create mode 100644 org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.component
 create mode 100644 org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.project.facet.core.xml
 create mode 100644 org.springframework.samples.petclinic/.settings/org.eclipse.wst.validation.prefs
 create mode 100644 org.springframework.samples.petclinic/.settings/org.maven.ide.eclipse.prefs
 create mode 100644 org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.beans.core.prefs
 create mode 100644 org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.core.prefs
 create mode 100644 org.springframework.samples.petclinic/.springBeans
 create mode 100644 org.springframework.samples.petclinic/pom.xml
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/HomeController.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/Owner.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnersController.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Gender.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Pet.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetController.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetRepository.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Measurement.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ResponseContext.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Unit.java
 create mode 100644 org.springframework.samples.petclinic/src/main/resources/log4j.xml
 create mode 100644 org.springframework.samples.petclinic/src/main/webapp/WEB-INF/home.jsp
 create mode 100644 org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/app-config.xml
 create mode 100644 org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/mvc-config.xml
 create mode 100644 org.springframework.samples.petclinic/src/main/webapp/WEB-INF/urlrewrite.xml
 create mode 100644 org.springframework.samples.petclinic/src/main/webapp/WEB-INF/web.xml
 create mode 100644 org.springframework.samples.petclinic/src/test/resources/log4j.xml

diff --git a/org.springframework.samples.petclinic/.classpath b/org.springframework.samples.petclinic/.classpath
new file mode 100644
index 0000000..5c40e0b
--- /dev/null
+++ b/org.springframework.samples.petclinic/.classpath
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>
+	<classpathentry kind="src" path="src/main/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry exported="true" kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.springframework.samples.petclinic/.project b/org.springframework.samples.petclinic/.project
new file mode 100644
index 0000000..ed4ca5e
--- /dev/null
+++ b/org.springframework.samples.petclinic/.project
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.springframework.samples.petclinic</name>
+	<comment></comment>
+	<projects>
+		<project>Servers</project>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.springframework.ide.eclipse.core.springbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.maven.ide.eclipse.maven2Nature</nature>
+		<nature>org.springframework.ide.eclipse.core.springnature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.springframework.samples.petclinic/.settings/com.springsource.server.ide.jdt.core.xml b/org.springframework.samples.petclinic/.settings/com.springsource.server.ide.jdt.core.xml
new file mode 100644
index 0000000..0a4413c
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/com.springsource.server.ide.jdt.core.xml
@@ -0,0 +1,2 @@
+<classpath>
+</classpath>
diff --git a/org.springframework.samples.petclinic/.settings/org.eclipse.jdt.core.prefs b/org.springframework.samples.petclinic/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9ec44e3
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Tue Mar 17 10:00:21 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.springframework.samples.petclinic/.settings/org.eclipse.jst.common.project.facet.core.prefs b/org.springframework.samples.petclinic/.settings/org.eclipse.jst.common.project.facet.core.prefs
new file mode 100644
index 0000000..763a150
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.eclipse.jst.common.project.facet.core.prefs
@@ -0,0 +1,3 @@
+#Tue Mar 17 09:59:19 EDT 2009
+classpath.helper/org.eclipse.jdt.launching.JRE_CONTAINER\:\:org.eclipse.jdt.internal.launching.macosx.MacOSXType\:\:JVM\ 1.5.0\ (MacOS\ X\ Default)/owners=jst.java\:5.0
+eclipse.preferences.version=1
diff --git a/org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.component b/org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..89d4f2a
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-modules id="moduleCoreId" project-version="1.5.0">
+	<wb-module deploy-name="org.springframework.samples.petclinic">
+		<wb-resource deploy-path="/" source-path="/src/main/webapp"/>
+		<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
+		<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
+		<property name="java-output-path" value="target/classes"/>
+		<property name="context-root" value="petclinic"/>
+	</wb-module>
+</project-modules>
diff --git a/org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.project.facet.core.xml b/org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..d24a733
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+  <fixed facet="jst.web"/>
+  <fixed facet="jst.java"/>
+  <installed facet="jst.java" version="5.0"/>
+  <installed facet="jst.web" version="2.5"/>
+</faceted-project>
diff --git a/org.springframework.samples.petclinic/.settings/org.eclipse.wst.validation.prefs b/org.springframework.samples.petclinic/.settings/org.eclipse.wst.validation.prefs
new file mode 100644
index 0000000..75abca5
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.eclipse.wst.validation.prefs
@@ -0,0 +1,6 @@
+#Fri Jun 06 17:00:12 BST 2008
+DELEGATES_PREFERENCE=delegateValidatorListorg.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator\=org.eclipse.wst.wsdl.validation.internal.eclipse.Validator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator\=org.eclipse.wst.xsd.core.internal.validation.eclipse.Validator;
+USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;org.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator;org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator;org.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.jst.jsp.core.internal.validation.JSPContentValidator;org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;
+USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;org.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator;org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator;org.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.jst.jsp.core.internal.validation.JSPContentValidator;org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;
+USER_PREFERENCE=overrideGlobalPreferencesfalse
+eclipse.preferences.version=1
diff --git a/org.springframework.samples.petclinic/.settings/org.maven.ide.eclipse.prefs b/org.springframework.samples.petclinic/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..0b75108
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Tue Mar 17 14:28:16 EDT 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.beans.core.prefs b/org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.beans.core.prefs
new file mode 100644
index 0000000..a7eb2b3
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.beans.core.prefs
@@ -0,0 +1,3 @@
+#Wed Dec 17 01:09:03 EST 2008
+eclipse.preferences.version=1
+org.springframework.ide.eclipse.beans.core.ignoreMissingNamespaceHandler=false
diff --git a/org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.core.prefs b/org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.core.prefs
new file mode 100644
index 0000000..e096d67
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.core.prefs
@@ -0,0 +1,67 @@
+#Tue Mar 17 10:00:21 EDT 2009
+eclipse.preferences.version=1
+org.springframework.ide.eclipse.core.builders.enable.aopreferencemodelbuilder=true
+org.springframework.ide.eclipse.core.builders.enable.beanmetadatabuilder=false
+org.springframework.ide.eclipse.core.builders.enable.osgibundleupdater=true
+org.springframework.ide.eclipse.core.enable.project.preferences=false
+org.springframework.ide.eclipse.core.validator.enable.com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.com.springsource.sts.server.quickfix.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=false
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.applicationSymbolicNameRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.applicationVersionRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleActivationPolicyRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleActivatorRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleManifestVersionRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleNameRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleSymbolicNameRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleVersionRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.exportPackageRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.importRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.parsingProblemsRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.requireBundleRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.AvoidDriverManagerDataSource-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.ImportElementsAtTopRulee-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.ParentBeanSpecifiesAbstractClassRule-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.RefElementRule-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.TooManyBeansInFileRule-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.UnnecessaryValueElementRule-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.UseBeanInheritance-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.legacyxmlusage.jndiobjectfactory-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.server.quickfix.importBundleVersionRule-com.springsource.sts.server.quickfix.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.server.quickfix.importLibraryVersionRule-com.springsource.sts.server.quickfix.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.server.quickfix.importPackageVersionRule-com.springsource.sts.server.quickfix.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.server.quickfix.requireBundleVersionRule-com.springsource.sts.server.quickfix.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanConstructorArgument-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinition-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinitionHolder-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanFactory-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanInitDestroyMethod-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanReference-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.methodOverride-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.parsingProblems-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.action-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.actionstate-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attributemapper-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.beanaction-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationaction-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationresult-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.exceptionhandler-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.import-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.inputattribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.mapping-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.outputattribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.set-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.state-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.subflowstate-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.transition-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.variable-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.webflowstate-org.springframework.ide.eclipse.webflow.core.validator=true
diff --git a/org.springframework.samples.petclinic/.springBeans b/org.springframework.samples.petclinic/.springBeans
new file mode 100644
index 0000000..24e2d65
--- /dev/null
+++ b/org.springframework.samples.petclinic/.springBeans
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beansProjectDescription>
+	<version>1</version>
+	<pluginVersion><![CDATA[2.2.3.RELEASE]]></pluginVersion>
+	<configSuffixes>
+		<configSuffix><![CDATA[xml]]></configSuffix>
+	</configSuffixes>
+	<enableImports><![CDATA[true]]></enableImports>
+	<configs>
+	</configs>
+	<configSets>
+	</configSets>
+</beansProjectDescription>
diff --git a/org.springframework.samples.petclinic/pom.xml b/org.springframework.samples.petclinic/pom.xml
new file mode 100644
index 0000000..e383597
--- /dev/null
+++ b/org.springframework.samples.petclinic/pom.xml
@@ -0,0 +1,106 @@
+<?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.springframework</groupId>
+	<artifactId>samples</artifactId>
+	<name>org.springframework.samples.petclinic</name>
+	<packaging>war</packaging>
+	<version>1.0.0-SNAPSHOT</version>
+	<properties>
+		<spring.version>2.5.6</spring.version>
+	</properties>	
+	<dependencies>
+		<!-- Compile dependencies -->
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>jstl</artifactId>
+			<version>1.2</version>
+		</dependency>
+		<dependency>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
+			<version>1.2.14</version>
+		</dependency>
+		<dependency>
+			<groupId>org.tuckey</groupId>
+			<artifactId>urlrewritefilter</artifactId>
+			<version>3.1.0</version>						
+		</dependency>		
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-core</artifactId>
+			<version>${spring.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-beans</artifactId>
+			<version>${spring.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-context</artifactId>
+			<version>${spring.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-web</artifactId>
+			<version>${spring.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-webmvc</artifactId>
+			<version>${spring.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-jdbc</artifactId>
+			<version>${spring.version}</version>
+		</dependency>
+		<!-- Container-provided dependencies-->
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>servlet-api</artifactId>
+			<version>2.4</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet.jsp</groupId>
+			<artifactId>jsp-api</artifactId>
+			<version>2.1</version>
+			<scope>provided</scope>
+		</dependency>		
+		<!-- Test dependencies -->
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.5</version>
+			<scope>test</scope>
+		</dependency>			
+	</dependencies>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<source>1.5</source>
+					<target>1.5</target>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>install</id>
+						<phase>install</phase>
+						<goals>
+							<goal>sources</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>	
+</project>
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/HomeController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/HomeController.java
new file mode 100644
index 0000000..b11f02c
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/HomeController.java
@@ -0,0 +1,14 @@
+package org.springframework.samples.petclinic;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+@Controller
+public class HomeController {
+
+	@RequestMapping(value="/", method = RequestMethod.GET)
+	public void getHome() {
+	}
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/Owner.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/Owner.java
new file mode 100644
index 0000000..4321ce3
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/Owner.java
@@ -0,0 +1,26 @@
+package org.springframework.samples.petclinic.owner;
+
+
+public class Owner {
+
+	private Long id;
+
+	private String firstName;
+
+	private String lastName;
+
+	private String address;
+
+	private String city;
+
+	private String telephone;
+	
+	public Long getId() {
+		return id;
+	}
+	
+	public String getName() {
+		return lastName;
+	}
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java
new file mode 100644
index 0000000..548889c
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java
@@ -0,0 +1,36 @@
+package org.springframework.samples.petclinic.owner;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.samples.petclinic.util.ResponseContext;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+@Controller
+@RequestMapping(value="/owners/{owner}")
+public class OwnerController {
+
+	private final OwnerRepository repository;
+
+	@Autowired
+	public OwnerController(OwnerRepository repository) {
+		this.repository = repository;
+	}
+	
+	@RequestMapping(method=RequestMethod.GET)
+	public Owner get(Long owner) {
+		return repository.getOwner(owner);
+	}
+	
+	@RequestMapping(value="/edit", method=RequestMethod.GET)
+	public Owner getEditForm(Long owner) {
+		return repository.getOwner(owner);
+	}
+	
+	@RequestMapping(method = RequestMethod.PUT)
+	public void put(Owner owner, ResponseContext response) {
+		repository.saveOwner(owner);
+		response.redirect(owner.getName());
+	}	
+	
+}
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java
new file mode 100644
index 0000000..e151f45
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java
@@ -0,0 +1,13 @@
+package org.springframework.samples.petclinic.owner;
+
+import java.util.Collection;
+
+public interface OwnerRepository {
+
+	Collection<Owner> findOwnersByLastName(String lastName);
+
+	Owner getOwner(Long id);
+
+	void saveOwner(Owner owner);
+
+}
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnersController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnersController.java
new file mode 100644
index 0000000..9c547d9
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnersController.java
@@ -0,0 +1,39 @@
+package org.springframework.samples.petclinic.owner;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.samples.petclinic.util.ResponseContext;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@Controller
+@RequestMapping("/owners")
+public class OwnersController {
+
+	private final OwnerRepository repository;
+
+	@Autowired
+	public OwnersController(OwnerRepository repository) {
+		this.repository = repository;
+	}
+	
+	@RequestMapping(method = RequestMethod.GET)
+	public Collection<Owner> get(@RequestParam String lastName) {
+		return repository.findOwnersByLastName(lastName);
+	}
+	
+	@RequestMapping(value="/new", method = RequestMethod.GET)
+	public Owner getNewForm() {
+		return new Owner();
+	}
+	
+	@RequestMapping(method = RequestMethod.POST)
+	public void post(Owner owner, ResponseContext response) {
+		repository.saveOwner(owner);
+		response.redirect(owner.getName());
+	}	
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Gender.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Gender.java
new file mode 100644
index 0000000..e67a95a
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Gender.java
@@ -0,0 +1,5 @@
+package org.springframework.samples.petclinic.pet;
+
+public enum Gender {
+	MALE, FEMALE
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Pet.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Pet.java
new file mode 100644
index 0000000..e0765ee
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Pet.java
@@ -0,0 +1,25 @@
+package org.springframework.samples.petclinic.pet;
+
+import java.util.Date;
+
+import org.springframework.samples.petclinic.util.Measurement;
+
+public class Pet {
+
+	private String name;
+
+	private String species;
+	
+	private String breed;
+
+	private Gender gender;
+	
+	private Date birthDate;
+
+	private Measurement weight;
+	
+	public String getName() {
+		return name;
+	}
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetController.java
new file mode 100644
index 0000000..1067540
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetController.java
@@ -0,0 +1,41 @@
+package org.springframework.samples.petclinic.pet;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.samples.petclinic.util.ResponseContext;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+@Controller
+@RequestMapping(value="/owners/{owner}/pets/{pet}")
+public class PetController {
+
+	private final PetRepository repository;
+
+	@Autowired
+	public PetController(PetRepository repository) {
+		this.repository = repository;
+	}
+	
+	@RequestMapping(method=RequestMethod.GET)
+	public Pet get(Long owner, String pet) {
+		return repository.getPet(owner, pet);
+	}
+	
+	@RequestMapping(value="/edit", method=RequestMethod.GET)
+	public Pet getEditForm(Long owner, String pet) {
+		return repository.getPet(owner, pet);
+	}
+	
+	@RequestMapping(method = RequestMethod.PUT)
+	public void put(Pet pet, ResponseContext response) {
+		repository.savePet(pet);
+		response.redirect(pet.getName());
+	}
+	
+	@RequestMapping(method = RequestMethod.DELETE)
+	public void delete(Long owner, String pet, ResponseContext context) {
+		context.forResource("owners").redirect(owner);
+	}
+	
+}
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetRepository.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetRepository.java
new file mode 100644
index 0000000..c3b52f4
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetRepository.java
@@ -0,0 +1,9 @@
+package org.springframework.samples.petclinic.pet;
+
+public interface PetRepository {
+	
+	Pet getPet(Long owner, String name);
+	
+	void savePet(Pet pet);
+	
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Measurement.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Measurement.java
new file mode 100644
index 0000000..9120e58
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Measurement.java
@@ -0,0 +1,10 @@
+package org.springframework.samples.petclinic.util;
+
+import java.math.BigDecimal;
+
+public class Measurement {
+	
+	private BigDecimal amount;
+	
+	private Unit unit;
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ResponseContext.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ResponseContext.java
new file mode 100644
index 0000000..fd9d5f6
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ResponseContext.java
@@ -0,0 +1,9 @@
+package org.springframework.samples.petclinic.util;
+
+public interface ResponseContext {
+
+	void redirect(Object resource);
+
+	ResponseContext forResource(Object resource);
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Unit.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Unit.java
new file mode 100644
index 0000000..6bcf4e2
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Unit.java
@@ -0,0 +1,5 @@
+package org.springframework.samples.petclinic.util;
+
+public enum Unit {
+	POUNDS
+}
diff --git a/org.springframework.samples.petclinic/src/main/resources/log4j.xml b/org.springframework.samples.petclinic/src/main/resources/log4j.xml
new file mode 100644
index 0000000..d65fd37
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/resources/log4j.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appenders -->
+	<appender name="console" class="org.apache.log4j.ConsoleAppender">
+		<param name="Target" value="System.out" />
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
+		</layout>
+	</appender>>
+	
+	<!-- Application Loggers -->
+	<logger name="org.springframework.samples">
+		<level value="info" />
+	</logger>
+	
+	<!-- 3rdparty Loggers -->
+	<logger name="org.springframework.core">
+		<level value="info" />
+	</logger>
+	
+	<logger name="org.springframework.beans">
+		<level value="info" />
+	</logger>
+	
+	<logger name="org.springframework.context">
+		<level value="info" />
+	</logger>
+
+	<logger name="org.springframework.web">
+		<level value="info" />
+	</logger>
+
+	<!-- Root Logger -->
+	<root>
+		<priority value="warn" />
+		<appender-ref ref="console" />
+	</root>
+	
+</log4j:configuration>
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/home.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/home.jsp
new file mode 100644
index 0000000..b37beed
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/home.jsp
@@ -0,0 +1,12 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ page session="false" %>
+<html>
+<head>
+	<title>Welcome</title>
+</head>
+<body>
+<h1>
+	Congratulations! You're running Spring!
+</h1>
+</body>
+</html>
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/app-config.xml b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/app-config.xml
new file mode 100644
index 0000000..63165f8
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/app-config.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:context="http://www.springframework.org/schema/context"
+	xsi:schemaLocation="
+		http://www.springframework.org/schema/beans
+		http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+		http://www.springframework.org/schema/context
+		http://www.springframework.org/schema/context/spring-context-2.5.xsd">
+	
+	<!-- Scans within the base package of the application for @Components to configure as beans -->
+	<context:component-scan base-package="org.springframework.samples.petclinic" />
+	
+</beans>
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/mvc-config.xml b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/mvc-config.xml
new file mode 100644
index 0000000..c9833d6
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/mvc-config.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:context="http://www.springframework.org/schema/context"
+	xsi:schemaLocation="
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
+
+	<!-- HANDLER MAPPING RULES -->
+	
+	<!-- Maps requests to @Controllers based on @RequestMapping("path") annotation values
+		 If no annotation-based path mapping is found, Spring MVC proceeds to the next HandlerMapping (order=2 below). -->
+	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
+		<property name="order" value="1" />
+	</bean>
+	
+	<!-- Maps requests to @Controllers based on controller class name convention; e.g. a request for /hotels or a /hotels sub-resource maps to HotelsController
+	     If no class mapping is found, Spring MVC sends a 404 response and logs a pageNotFound warning. -->
+	<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
+		<property name="order" value="2" />
+	</bean>
+
+	<!-- REGISTERED HANDLER TYPES -->
+
+	<!-- Enables annotated @Controllers; responsible for invoking an annotated POJO @Controller when one is mapped. -->
+	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
+
+	<!--  VIEW RESOLUTION AND RENDERING -->
+	
+	<!-- Resolves view names to protected .jsp resources within the /WEB-INF directory -->
+	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
+		<property name="prefix" value="/WEB-INF/"/>
+		<property name="suffix" value=".jsp"/>
+	</bean>
+	
+</beans>
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/urlrewrite.xml b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/urlrewrite.xml
new file mode 100644
index 0000000..26672b6
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/urlrewrite.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
+<urlrewrite default-match-type="wildcard">
+	<rule>
+		<from>/**</from>
+		<to>/app/$1</to>
+	</rule>
+	<outbound-rule>
+		<from>/app/**</from>
+		<to>/$1</to>
+	</outbound-rule>	
+</urlrewrite>
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/web.xml b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..95239d4
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="2.5" 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_2_5.xsd">
+
+	<!-- Enables clean URLs with JSP views e.g. /welcome instead of /app/welcome -->
+	<filter>
+		<filter-name>UrlRewriteFilter</filter-name>
+		<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
+	</filter>
+
+	<filter-mapping>
+		<filter-name>UrlRewriteFilter</filter-name>
+		<url-pattern>/*</url-pattern>
+	</filter-mapping>
+		
+	<!-- Handles all requests into the application -->
+	<servlet>
+		<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
+		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+		<init-param>
+			<param-name>contextConfigLocation</param-name>
+			<param-value>
+				/WEB-INF/spring/*.xml
+			</param-value>
+		</init-param>
+		<load-on-startup>1</load-on-startup>
+	</servlet>
+		
+	<!-- Maps all /app requests to the DispatcherServlet for handling -->
+	<servlet-mapping>
+		<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
+		<url-pattern>/app/*</url-pattern>
+	</servlet-mapping>
+	
+</web-app>
diff --git a/org.springframework.samples.petclinic/src/test/resources/log4j.xml b/org.springframework.samples.petclinic/src/test/resources/log4j.xml
new file mode 100644
index 0000000..6cd5957
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/test/resources/log4j.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appenders -->
+	<appender name="console" class="org.apache.log4j.ConsoleAppender">
+		<param name="Target" value="System.out" />
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
+		</layout>
+	</appender>>
+	
+	<!-- Application Loggers -->
+	<logger name="org.springframework.samples">
+		<level value="debug" />
+	</logger>
+	
+	<!-- 3rdparty Loggers -->
+	<logger name="org.springframework.core">
+		<level value="debug" />
+	</logger>	
+	
+	<logger name="org.springframework.beans">
+		<level value="debug" />
+	</logger>
+	
+	<logger name="org.springframework.context">
+		<level value="debug" />
+	</logger>
+
+	<logger name="org.springframework.web">
+		<level value="debug" />
+	</logger>
+
+	<!-- Root Logger -->
+	<root>
+		<priority value="warn" />
+		<appender-ref ref="console" />
+	</root>
+	
+</log4j:configuration>
-- 
GitLab