r436 - in jpa2-validation/trunk: . jsr303-validation jsr303-validation/src jsr303-validation/src/it jsr303-validation/src/it/hibernate jsr303-validation/src/it/hibernate/src jsr303-validation/src/it/hibernate/src/main jsr303-validation/src/it/hibernate/src/main/java jsr303-validation/src/it/hibernate/src/main/java/org jsr303-validation/src/it/hibernate/src/main/java/org/nuiton jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox jsr303-validation/src/it/hibernate/src/main/ja
Author: fdesbois Date: 2010-11-22 11:36:05 +0100 (Mon, 22 Nov 2010) New Revision: 436 Url: http://nuiton.org/repositories/revision/sandbox/436 Log: - Add basic example for validation - Add unworking it test using hibernate implementation... Added: jpa2-validation/trunk/jsr303-validation/src/ jpa2-validation/trunk/jsr303-validation/src/it/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/invoker.properties jpa2-validation/trunk/jsr303-validation/src/it/hibernate/pom.xml jpa2-validation/trunk/jsr303-validation/src/it/hibernate/settings.xml jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox/jsr303/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox/jsr303/validation/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox/jsr303/validation/hibernate/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox/jsr303/validation/hibernate/Launcher.java jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox/jsr303/validation/hibernate/TransactionTest.java jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/META-INF/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/META-INF/persistence.xml jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/META-INF/validation.xml jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/log4j.properties jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/spring/ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/spring/hibernate-spring-context.xml jpa2-validation/trunk/jsr303-validation/src/it/hibernate/verify.groovy jpa2-validation/trunk/jsr303-validation/src/main/ jpa2-validation/trunk/jsr303-validation/src/main/java/ jpa2-validation/trunk/jsr303-validation/src/main/java/org/ jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/ jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/ jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/ jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/ jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/Email.java jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/ValidationConstants.java jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/ jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/BaseService.java jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/ServiceCustomer.java jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/ServiceCustomerImpl.java jpa2-validation/trunk/jsr303-validation/src/main/resources/ jpa2-validation/trunk/jsr303-validation/src/main/resources/jsr303-spring-context.xml jpa2-validation/trunk/jsr303-validation/src/main/resources/org/ jpa2-validation/trunk/jsr303-validation/src/main/resources/org/nuiton/ jpa2-validation/trunk/jsr303-validation/src/main/resources/org/nuiton/sandbox/ jpa2-validation/trunk/jsr303-validation/src/main/resources/org/nuiton/sandbox/jsr303/ jpa2-validation/trunk/jsr303-validation/src/main/resources/org/nuiton/sandbox/jsr303/validation/ jpa2-validation/trunk/jsr303-validation/src/main/resources/org/nuiton/sandbox/jsr303/validation/constraints-customer.xml jpa2-validation/trunk/jsr303-validation/src/test/ jpa2-validation/trunk/jsr303-validation/src/test/java/ jpa2-validation/trunk/jsr303-validation/src/test/java/org/ jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/ jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/sandbox/ jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/sandbox/jsr303/ jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/sandbox/jsr303/validation/ jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/sandbox/jsr303/validation/CustomerValidationTest.java jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/sandbox/jsr303/validation/test/ jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/sandbox/jsr303/validation/test/BaseTest.java jpa2-validation/trunk/jsr303-validation/src/test/resources/ jpa2-validation/trunk/jsr303-validation/src/test/resources/META-INF/ jpa2-validation/trunk/jsr303-validation/src/test/resources/META-INF/persistence.xml jpa2-validation/trunk/jsr303-validation/src/test/resources/META-INF/validation.xml jpa2-validation/trunk/jsr303-validation/src/test/resources/log4j.properties jpa2-validation/trunk/jsr303-validation/src/test/resources/test-spring-context.xml jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/JpaConfig.java jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/JpaConfigSource.java jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/JpaHelper.java jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/UpdateTechnicalFieldListener.java jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/ModelContext.java jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/ModelContextImpl.java Removed: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/JpaConfig.java jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/JpaConfigSource.java jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/JpaHelper.java jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/UpdateTechnicalFieldListener.java Modified: jpa2-validation/trunk/jsr303-validation/ jpa2-validation/trunk/jsr303-validation/pom.xml jpa2-validation/trunk/jsr317-jpa2/ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/entity/BaseEntityImpl.java jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/entity/CustomerImpl.java jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/persistence/CustomerDAOImplTest.java jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/test/AddressFake.java jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/test/JpaConfigTestSource.java jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/test/SpringTestConfig.java jpa2-validation/trunk/pom.xml Property changes on: jpa2-validation/trunk/jsr303-validation ___________________________________________________________________ Modified: svn:ignore - *.iml + *.iml target Modified: jpa2-validation/trunk/jsr303-validation/pom.xml =================================================================== --- jpa2-validation/trunk/jsr303-validation/pom.xml 2010-11-21 19:27:40 UTC (rev 435) +++ jpa2-validation/trunk/jsr303-validation/pom.xml 2010-11-22 10:36:05 UTC (rev 436) @@ -1,4 +1,5 @@ -<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"> +<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> @@ -17,10 +18,99 @@ <dependencies> <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> + <groupId>${project.groupId}</groupId> + <artifactId>jsr317-jpa2</artifactId> + <version>${project.version}</version> </dependency> + <!-- SPRING --> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-beans</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-tx</artifactId> + </dependency> + + <!-- COMMONS --> + <dependency> + <groupId>commons-lang</groupId> + <artifactId>commons-lang</artifactId> + </dependency> + + <dependency> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-utils</artifactId> + </dependency> + + <!-- JPA : JSR-317- --> + <dependency> + <groupId>org.hibernate.javax.persistence</groupId> + <artifactId>hibernate-jpa-2.0-api</artifactId> + </dependency> + + <!-- Bean Validation : JSR-303 --> + <dependency> + <groupId>javax.validation</groupId> + <artifactId>validation-api</artifactId> + </dependency> + + <!-- LOGGING --> + <dependency> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </dependency> + + <!-- TESTS --> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + </dependency> + + <!-- Hibernate implementation used in tests --> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-entitymanager</artifactId> + </dependency> + + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-core</artifactId> + </dependency> + + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-validator</artifactId> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + </dependency> + + </dependencies> <!-- ************************************************************* --> @@ -31,13 +121,13 @@ <description>Validation tests</description> <inceptionYear>2010</inceptionYear> <url>http://maven-site.nuiton.org/${project.artifactId}</url> - + <!-- ************************************************************* --> <!-- *** Build Settings ****************************************** --> <!-- ************************************************************* --> <packaging>jar</packaging> - + <build> <resources> @@ -52,12 +142,55 @@ </build> + <profiles> + + <profile> + <id>run-its</id> + <activation> + <property> + <name>performRelease</name> + <value>true</value> + </property> + </activation> + <build> + <plugins> + <plugin> + <artifactId>maven-invoker-plugin</artifactId> + <configuration> + <pomIncludes> + <pomInclude>hibernate/pom.xml</pomInclude> + </pomIncludes> + <postBuildHookScript>verify</postBuildHookScript> + <localRepositoryPath>${basedir}/target/local-repo + </localRepositoryPath> + <settingsFile>src/it/settings.xml</settingsFile> + <cloneProjectsTo>${project.build.directory}/its</cloneProjectsTo> + <debug>${maven.verbose}</debug> + </configuration> + <executions> + <execution> + <id>integration-test</id> + <goals> + <goal>install</goal> + <goal>run</goal> + </goals> + <phase>integration-test</phase> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + + </profiles> + <!-- Source control management. --> <scm> <connection>scm:svn:http://svn.nuiton.org/svn/sandbox/jpa2-validation/trunk/jsr303-validation</connection> - <developerConnection>scm:svn:http://svn.nuiton.org/svn/sandbox/jpa2-validation/trunk/jsr303-validation</developerConnection> + <developerConnection>scm:svn:http://svn.nuiton.org/svn/sandbox/jpa2-validation/trunk/jsr303-validation + </developerConnection> <url>http://www.nuiton.org/repositories/browse/sandbox/jpa2-validation/trunk/jsr303-validation</url> </scm> - + </project> Added: jpa2-validation/trunk/jsr303-validation/src/it/hibernate/invoker.properties =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/it/hibernate/invoker.properties (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/invoker.properties 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,22 @@ + +# A comma or space separated list of goals/phases to execute, may +# specify an empty list to execute the default goal of the IT project +invoker.goals=clean exec:java -Dexec.mainClass="org.nuiton.sandbox.jsr303.validation.hibernate.Launcher" + +# Optionally, a list of goals to run during further invocations of Maven +#invoker.goals.2=${project.groupId}:${project.artifactId}:${project.version}:run + +# A comma or space separated list of profiles to activate +#invoker.profiles=run-all run-once + +# The value for the environment variable MAVEN_OPTS +#invoker.mavenOpts=-Dfile.encoding=UTF-16 -Xms32m -Xmx256m + +# Possible values are "fail-fast" (default), "fail-at-end" and "fail-never" +invoker.failureBehavior=fail-fast + +# The expected result of the build, possible values are "success" (default) and "failure" +#invoker.buildResult=success + +# A boolean value controlling the -N flag, defaults to "false" +#invoker.nonRecursive=false Added: jpa2-validation/trunk/jsr303-validation/src/it/hibernate/pom.xml =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/it/hibernate/pom.xml (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/pom.xml 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,103 @@ +<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> + <groupId>org.nuiton.sandbox</groupId> + <artifactId>jsr-tests</artifactId> + <version>@pom.version@</version> + </parent> + + <artifactId>hibernate-test</artifactId> + + <packaging>jar</packaging> + <name>jpa2-validation :: hibernate implementation</name> + <description>Tests using Hibernate as JPA implementation</description> + + <dependencies> + + <!--<dependency>--> + <!--<groupId>${project.groupId}</groupId>--> + <!--<artifactId>tivimmo-services</artifactId>--> + <!--<version>${project.version}</version>--> + <!--</dependency>--> + + <!--<dependency>--> + <!--<groupId>${project.groupId}</groupId>--> + <!--<artifactId>tivimmo-model</artifactId>--> + <!--<version>${project.version}</version>--> + <!--</dependency>--> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-beans</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-tx</artifactId> + </dependency> + + <!-- Bean Validation : JSR-303 --> + <dependency> + <groupId>javax.validation</groupId> + <artifactId>validation-api</artifactId> + </dependency> + + <!-- LOGGING --> + <dependency> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </dependency> + + <!-- RUNTIME scope for implementations --> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <scope>runtime</scope> + </dependency> + + <!-- Hibernate implementation used in tests --> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-entitymanager</artifactId> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-validator</artifactId> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + <scope>runtime</scope> + </dependency> + + <!--<dependency>--> + <!--<groupId>junit</groupId>--> + <!--<artifactId>junit</artifactId>--> + <!--</dependency>--> + + <!--<dependency>--> + <!--<groupId>org.springframework</groupId>--> + <!--<artifactId>spring-test</artifactId>--> + <!--</dependency>--> + + </dependencies> + +</project> \ No newline at end of file Added: jpa2-validation/trunk/jsr303-validation/src/it/hibernate/settings.xml =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/it/hibernate/settings.xml (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/settings.xml 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<settings> + + <profiles> + <profile> + <id>it-repo</id> + <activation> + <activeByDefault>true</activeByDefault> + </activation> + + <!--<mirrors>--> + <!--<mirror>--> + <!--<id>internal-proxy</id>--> + <!--<name>internal proxy</name>--> + <!--<url>http://maven.lan.wiztivi.com/repository/central-proxy</url>--> + <!--<mirrorOf>central</mirrorOf>--> + <!--</mirror>--> + <!--</mirrors>--> + + <repositories> + <repository> + <id>local.central</id> + <url>file:///@localRepository@</url> + <releases> + <enabled>true</enabled> + </releases> + <snapshots> + <enabled>true</enabled> + </snapshots> + </repository> + + <!-- depot des releases nuiton --> + <!--<repository>--> + <!--<id>nuiton.release</id>--> + <!--<name>NuitonReleaseRepository</name>--> + <!--<url>http://maven.nuiton.org/release</url>--> + <!--<snapshots>--> + <!--<enabled>false</enabled>--> + <!--</snapshots>--> + <!--<releases>--> + <!--<enabled>true</enabled>--> + <!--<checksumPolicy>warn</checksumPolicy>--> + <!--</releases>--> + <!--</repository>--> + </repositories> + <pluginRepositories> + <pluginRepository> + <id>local.central</id> + <url>file:///@localRepository@</url> + <releases> + <enabled>true</enabled> + </releases> + <snapshots> + <enabled>true</enabled> + </snapshots> + </pluginRepository> + + <!--<pluginRepository>--> + <!--<id>nuiton.release</id>--> + <!--<name>NuitonReleaseRepository</name>--> + <!--<url>http://maven.nuiton.org/release</url>--> + <!--<snapshots>--> + <!--<enabled>false</enabled>--> + <!--</snapshots>--> + <!--<releases>--> + <!--<enabled>true</enabled>--> + <!--</releases>--> + <!--</pluginRepository>--> + </pluginRepositories> + </profile> + </profiles> +</settings> Added: jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox/jsr303/validation/hibernate/Launcher.java =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox/jsr303/validation/hibernate/Launcher.java (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox/jsr303/validation/hibernate/Launcher.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,36 @@ +package org.nuiton.sandbox.jsr303.validation.hibernate; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * Created on 19 nov. 2010 + * + * @author fdesbois <florian.desbois@wiztivi.com> + * @version $Id$ + */ +public class Launcher { + + private static final Log logger = LogFactory.getLog(Launcher.class); + + public static void main(String[] args) { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/hibernate-spring-context.xml"); + + if (logger.isDebugEnabled()) { + logger.debug("> > > ApplicationContext loaded"); + } + + TransactionTest transactionTest = new TransactionTest(applicationContext); + + if (logger.isDebugEnabled()) { + logger.debug("> > > Execute TransactionTest"); + } + + transactionTest.executeAll(); + + } + + +} Added: jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox/jsr303/validation/hibernate/TransactionTest.java =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox/jsr303/validation/hibernate/TransactionTest.java (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/java/org/nuiton/sandbox/jsr303/validation/hibernate/TransactionTest.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,64 @@ +package org.nuiton.sandbox.jsr303.validation.hibernate; + +import javax.validation.ConstraintViolationException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.sandbox.jsr303.validation.services.ServiceCustomer; +import org.nuiton.sandbox.jsr317.jpa2.entity.Customer; +import org.nuiton.sandbox.jsr317.jpa2.persistence.CustomerDAO; +import org.springframework.context.ApplicationContext; +import org.springframework.transaction.annotation.Transactional; + +/** + * Created on 19 nov. 2010 + * + * @author fdesbois <florian.desbois@wiztivi.com> + * @version $Id$ + */ +public class TransactionTest { + + private static final Log logger = LogFactory.getLog(TransactionTest.class); + + protected ApplicationContext context; + + public TransactionTest(ApplicationContext context) { + this.context = context; + } + + public void executeAll() { + testSaveAgency(); + } + + public void testSaveAgency() { + ServiceCustomer serviceCustomer = context.getBean(ServiceCustomer.class); + CustomerDAO customerDAO = context.getBean(CustomerDAO.class); + + Customer customerOk = serviceCustomer.newCustomer(); + customerOk.setFirstName("FIRST_NAME"); + customerOk.setFirstName("LAST_NAME"); + + serviceCustomer.saveCustomer(customerOk); + + Customer customerKo = serviceCustomer.newCustomer(); + + // Will throw an ConstraintViolationException and rollback, but first agency is still in database + try { + serviceCustomer.saveCustomer(customerKo); + throw new Error("FAILED ConstraintViolationException is expected"); + } catch (ConstraintViolationException ex) { + + logger.info("ConstraintViolationException", ex); + + } finally { + // Check number of agency in safe transaction + logger.info("CountCustomers = " + countCustomers(customerDAO)); + } + } + + @Transactional + protected static int countCustomers(CustomerDAO customerDAO) { + return customerDAO.count(); + } + +} Added: jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/META-INF/persistence.xml =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/META-INF/persistence.xml (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/META-INF/persistence.xml 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,11 @@ +<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_2_0.xsd" + version="2.0"> + + <persistence-unit name="tivimmo" transaction-type="RESOURCE_LOCAL"> + <class>org.nuiton.sandbox.jsr317.jpa2.entity.CustomerImpl</class> + <!--<validation-mode>NONE</validation-mode>--> + </persistence-unit> + +</persistence> \ No newline at end of file Added: jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/META-INF/validation.xml =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/META-INF/validation.xml (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/META-INF/validation.xml 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,7 @@ +<validation-config xmlns="http://jboss.org/xml/ns/javax/validation/configuration" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration http://jboss.org/xml/ns/javax/validation/configuration/validation-configuration-1.0.xsd"> + + <constraint-mapping>/org/nuiton/sandbox/jsr303/validation/constraints-customer.xml</constraint-mapping> + +</validation-config> \ No newline at end of file Added: jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/log4j.properties =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/log4j.properties (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/log4j.properties 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,12 @@ +# Default to info level output; this is very handy if you eventually use Hibernate as well. +log4j.rootCategory=warn, A1 + +# A1 is set to be a ConsoleAppender. +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +# A1 uses PatternLayout. +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%d [%p] (%c:%L) %m%n + +log4j.logger.org.nuiton.sandbox=debug +log4j.logger.org.hibernate=info Added: jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/spring/hibernate-spring-context.xml =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/spring/hibernate-spring-context.xml (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/src/main/resources/spring/hibernate-spring-context.xml 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,48 @@ +<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-3.0.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> + + <!-- SERVICES CONFIGURATION --> + <import resource="classpath:/jsr303-spring-context.xml"/> + + <!-- MODEL INJECTION and JPA CONFIGURATION --> + <import resource="classpath:/jsr317-spring-context.xml"/> + + <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> + <property name="url" + value="jdbc:h2:file:./target/surefire-data/hibernate"/> + <property name="username" value="sa"/> + <property name="password" value=""/> + </bean> + + <bean id="transactionManager" + class="org.springframework.orm.jpa.JpaTransactionManager"> + <property name="entityManagerFactory" ref="entityManagerFactory"/> + </bean> + + <bean id="entityManagerFactory" + class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> + <property name="dataSource" ref="dataSource"/> + <property name="jpaVendorAdapter"> + <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> + <property name="showSql" value="true"/> + <property name="generateDdl" value="true"/> + <property name="databasePlatform" value="org.hibernate.dialect.H2Dialect"/> + </bean> + </property> + <property name="jpaProperties"> + <props> + <prop key="hibernate.hbm2ddl.auto">create</prop> + <!-- IdGenerator Strategy : one unique number for each row for all database --> + <prop key="hibernate.id.new_generator_mappings">true</prop> + </props> + </property> + <property name="loadTimeWeaver"> + <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/> + </property> + </bean> + +</beans> \ No newline at end of file Added: jpa2-validation/trunk/jsr303-validation/src/it/hibernate/verify.groovy =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/it/hibernate/verify.groovy (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/it/hibernate/verify.groovy 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,2 @@ +return true; + Added: jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/Email.java =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/Email.java (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/Email.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,38 @@ +package org.nuiton.sandbox.jsr303.validation; + +import javax.validation.Constraint; +import javax.validation.Payload; +import javax.validation.ReportAsSingleViolation; +import javax.validation.constraints.Pattern; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Email constraint for bean com.wiztivi.apps.tivimmo.validation. Use this annotation to check email elements. This + * constraint use a regex {@link Pattern} defined by {@link ValidationConstants#PATTERN_EMAIL}. This constraint is also + * declared as {@link ReportAsSingleViolation} to retrieve only principle custom message defined by {@link #message()} + * method instead of pattern default one. An other solution could be to override message param directly in Pattern + * annotation but in this case, user would not be able to override the Email annotation message. + * <p/> + * Created on 25 oct. 2010 + * + * @author fdesbois <florian.desbois@wiztivi.com> + * @version $Id: Email.java 46947 2010-10-25 16:01:51Z fdesbois $ + */ +@Pattern(regexp = ValidationConstants.PATTERN_EMAIL) +@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = {}) +@Documented +@ReportAsSingleViolation +public @interface Email { + + String message() default "{com.wiztivi.apps.tivimmo.validation.email}"; + + Class<?>[] groups() default {}; + + Class<? extends Payload>[] payload() default {}; +} Added: jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/ValidationConstants.java =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/ValidationConstants.java (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/ValidationConstants.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,13 @@ +package org.nuiton.sandbox.jsr303.validation; + +/** + * Created on 27 oct. 2010 + * + * @author fdesbois <florian.desbois@wiztivi.com> + * @version $Id$ + */ +public class ValidationConstants { + + public static final String PATTERN_EMAIL = + "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; +} Added: jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/BaseService.java =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/BaseService.java (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/BaseService.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,51 @@ +package org.nuiton.sandbox.jsr303.validation.services; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.Validator; +import java.util.HashSet; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.sandbox.jsr317.jpa2.persistence.ModelContext; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * Created on 28 oct. 2010 + * + * @author fdesbois <florian.desbois@wiztivi.com> + * @version $Id: BaseService.java 48517 2010-11-16 09:58:27Z fdesbois $ + */ +public abstract class BaseService { + + protected final Log logger = LogFactory.getLog(getClass()); + + @Autowired + protected ModelContext modelContext; + + @Autowired + protected Validator validator; + + protected <T> void checkConstraints(T object, Class<?>... groups) throws ConstraintViolationException { + Set<ConstraintViolation<T>> errors = validator.validate(object, groups); + + if (!errors.isEmpty()) { + + if (logger.isTraceEnabled()) { + for (ConstraintViolation<T> constraint : errors) { + logger.trace("constraint.getMessageTemplate = " + constraint.getMessageTemplate()); + logger.trace("constraint.getMessage = " + constraint.getMessage()); + logger.trace("constraint.getInvalidValue = " + constraint.getInvalidValue()); + logger.trace("constraint.getLeafBean = " + constraint.getLeafBean()); + logger.trace("constraint.getPropertyPath = " + constraint.getPropertyPath()); + logger.trace("constraint.getRootBean = " + constraint.getRootBean()); + logger.trace("constraint.getRootBeanClass = " + constraint.getRootBeanClass()); + } + } + + throw new ConstraintViolationException(new HashSet<ConstraintViolation<?>>(errors)); + } + } + +} Added: jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/ServiceCustomer.java =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/ServiceCustomer.java (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/ServiceCustomer.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,18 @@ +package org.nuiton.sandbox.jsr303.validation.services; + +import javax.validation.ConstraintViolationException; + +import org.nuiton.sandbox.jsr317.jpa2.entity.Customer; + +/** + * Created on 22 nov. 2010 + * + * @author fdesbois <florian.desbois@wiztivi.com> + * @version $Id$ + */ +public interface ServiceCustomer { + + void saveCustomer(Customer customer) throws ConstraintViolationException; + + Customer newCustomer(); +} Added: jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/ServiceCustomerImpl.java =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/ServiceCustomerImpl.java (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/main/java/org/nuiton/sandbox/jsr303/validation/services/ServiceCustomerImpl.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,38 @@ +package org.nuiton.sandbox.jsr303.validation.services; + +import javax.validation.ConstraintViolationException; + +import org.nuiton.sandbox.jsr317.jpa2.entity.Customer; +import org.nuiton.sandbox.jsr317.jpa2.persistence.CustomerDAO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * Created on 22 nov. 2010 + * + * @author fdesbois <florian.desbois@wiztivi.com> + * @version $Id$ + */ +@Service +@Transactional(readOnly = true) +public class ServiceCustomerImpl extends BaseService implements ServiceCustomer { + + @Autowired + protected CustomerDAO customerDAO; + + @Override + @Transactional(readOnly = false) + public void saveCustomer(Customer customer) throws ConstraintViolationException { + + checkConstraints(customer); + + customerDAO.save(customer); + } + + @Override + public Customer newCustomer() { + return customerDAO.newInstance(); + } + +} Added: jpa2-validation/trunk/jsr303-validation/src/main/resources/jsr303-spring-context.xml =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/main/resources/jsr303-spring-context.xml (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/main/resources/jsr303-spring-context.xml 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,15 @@ +<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-3.0.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> + + + <!-- Component scanner for Services : detected from @Service annotation --> + <context:component-scan base-package="org.nuiton.sandbox.jsr303.validation.services"/> + + <!-- VALIDATION INJECTION --> + <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> + +</beans> \ No newline at end of file Added: jpa2-validation/trunk/jsr303-validation/src/main/resources/org/nuiton/sandbox/jsr303/validation/constraints-customer.xml =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/main/resources/org/nuiton/sandbox/jsr303/validation/constraints-customer.xml (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/main/resources/org/nuiton/sandbox/jsr303/validation/constraints-customer.xml 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,19 @@ +<constraint-mappings xmlns="http://jboss.org/xml/ns/javax/validation/mapping" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping http://jboss.org/xml/ns/javax/validation/mapping/validation-mapping-1.0.xsd"> + + <default-package>org.nuiton.sandbox.jsr317.jpa2.entity</default-package> + + <bean class="Customer" ignore-annotations="true"> + <getter name="firstName"> + <constraint annotation="javax.validation.constraints.NotNull"/> + </getter> + <getter name="lastName"> + <constraint annotation="javax.validation.constraints.NotNull"/> + </getter> + <getter name="email"> + <constraint annotation="org.nuiton.sandbox.jsr303.validation.Email"/> + </getter> + </bean> + +</constraint-mappings> \ No newline at end of file Added: jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/sandbox/jsr303/validation/CustomerValidationTest.java =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/sandbox/jsr303/validation/CustomerValidationTest.java (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/sandbox/jsr303/validation/CustomerValidationTest.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,122 @@ +package org.nuiton.sandbox.jsr303.validation; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import java.util.Set; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.sandbox.jsr303.validation.test.BaseTest; +import org.nuiton.sandbox.jsr317.jpa2.entity.Customer; +import org.nuiton.sandbox.jsr317.jpa2.persistence.CustomerDAO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +/** + * Created on 27 oct. 2010 + * + * @author fdesbois <florian.desbois@wiztivi.com> + * @version $Id: CustomerValidationTest.java 48934 2010-11-18 16:17:46Z fdesbois $ + */ +public class CustomerValidationTest extends BaseTest { + + private static final Log log = LogFactory.getLog(CustomerValidationTest.class); + + @Autowired + protected CustomerDAO userDAO; + + @Test + @Transactional + public void testCreateCustomerNeedFields() { + + // ---- PREPARE DATA ---- // + Customer user = userDAO.newInstance(); + + // Create user without setting any field will throw a ConstraintViolationException. FirstName and LastName are needed + try { + // ---- EXECUTE ---- // + userDAO.save(user); + Assert.fail(); + } catch (ConstraintViolationException ex) { + + // ---- CHECK DATA ---- // + Set<ConstraintViolation<?>> errors = ex.getConstraintViolations(); + Assert.assertEquals(2, errors.size()); + } + } + + @Test + @Transactional + public void testCreateCustomerValidEmail() { + + // ---- PREPARE DATA ---- // + Customer user = userDAO.newInstance(); + user.setLastName("createCustomerValidEmailLastName"); + user.setFirstName("createCustomerValidEmailFirstName"); + + user.setEmail("validEmail@domain.fr"); + + Assert.assertTrue(Pattern.matches(ValidationConstants.PATTERN_EMAIL, user.getEmail())); + + // ---- EXECUTE ---- // + log.info("test 1 : create user with correct email"); + userDAO.create(user); + + user.setEmail("invalidEmail"); + + Assert.assertFalse(Pattern.matches(ValidationConstants.PATTERN_EMAIL, user.getEmail())); + + try { + log.info("test 2 : update the same user with fake email : throw ConstraintViolationException"); + user = userDAO.update(user); + Assert.fail(); + + } catch (ConstraintViolationException ex) { + // ---- CHECK DATA ---- // + Set<ConstraintViolation<?>> errors = ex.getConstraintViolations(); + Assert.assertEquals(1, errors.size()); + + ConstraintViolation<?> error = errors.iterator().next(); + + // Ensure retrieving custom constraint Email and not the one from Hibernate. Depends on configuration + if (error instanceof Email) { + Assert.assertEquals("{com.wiztivi.apps.tivimmo.validation.email}", error.getMessageTemplate()); + } + Assert.assertEquals(user, error.getRootBean()); + } + } + + @Test + @Transactional + public void testManualValidation() { + + // ---- PREPARE DATA ---- // + Customer user = userDAO.newInstance(); + user.setLastName("manualValidationLastName"); + user.setFirstName("manualValidationFirstName"); + user.setEmail("manualValidation@email.fr"); + + // ---- EXECUTE ---- // + + log.info("test 1 : manual validation : nothing wrong"); + try { + validator.validate(user); + } catch (ConstraintViolationException ex) { + Assert.fail(); + } + + user.setEmail("fakeEmail"); + // Set null will normally throw Constraint exception but in this test we will only validate the email property + user.setFirstName(null); + + log.info("test 2 : manual validation only on email property : throw ConstraintViolationException"); + try { + validator.validateProperty(user, "email"); + } catch (ConstraintViolationException ex) { + Assert.assertEquals(1, ex.getConstraintViolations().size()); + } + } +} Added: jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/sandbox/jsr303/validation/test/BaseTest.java =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/sandbox/jsr303/validation/test/BaseTest.java (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/test/java/org/nuiton/sandbox/jsr303/validation/test/BaseTest.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,115 @@ +package org.nuiton.sandbox.jsr303.validation.test; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.Validator; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Rule; +import org.junit.rules.TestName; +import org.junit.runner.RunWith; +import org.junit.runners.model.FrameworkMethod; +import org.nuiton.sandbox.jsr317.jpa2.persistence.BaseDAOImpl.SaveStrategy; +import org.nuiton.sandbox.jsr317.jpa2.persistence.ModelContext; +import org.nuiton.sandbox.jsr317.jpa2.sample.DataSampleProvider; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * Created on 26 oct. 2010 + * + * @author fdesbois <florian.desbois@wiztivi.com> + * @version $Id: BaseTest.java 48934 2010-11-18 16:17:46Z fdesbois $ + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = {"/test-spring-context.xml"}) +public abstract class BaseTest { + + private static final Log logger = LogFactory.getLog(BaseTest.class); + + @Autowired + protected ModelContext modelContext; + + @Autowired + protected DataSampleProvider dataProvider; + + @Autowired + protected Validator validator; + + @Rule + public TestName rule = new TestName() { + + @Override + public void starting(FrameworkMethod method) { + super.starting(method); + + // Apply persist flush saveStrategy for all tests, this will effectively keep instance in session and flush + // it after each {@link BaseDAO#save()} call + modelContext.setSaveStrategy(SaveStrategy.PERSIST_FLUSH); + + // Use DataProvider depends on annotation declaration in tests +// useDataProvider(method.getAnnotation(UseDataProvider.class)); + } + +// protected void useDataProvider(UseDataProvider useDataProvider) { +// boolean useData = DataSampleProvider.isUseDataProviderFromMethod(BaseTest.this.getClass(), useDataProvider); +// +// if (useData) { +// try { +// dataProvider.createAllData(); +// } catch (ConstraintViolationException ex) { +// logger.error(ex); +// if (logger.isInfoEnabled()) { +// for (ConstraintViolation<?> constraint : ex.getConstraintViolations()) { +// logger.info("constraint.getRootBeanClass = " + constraint.getRootBeanClass()); +// logger.info("constraint.getPropertyPath = " + constraint.getPropertyPath()); +// logger.info("constraint.getMessageTemplate = " + constraint.getMessageTemplate()); +// logger.info("constraint.getInvalidValue = " + constraint.getInvalidValue()); +// } +// } +// throw new TivimmoRuntimeException("Error while creating all data", ex); +// } catch (Exception ex) { +// logger.error(ex.getClass().getSimpleName(), ex); +// throw new TivimmoRuntimeException("Error while creating all data", ex); +// } +// } +// } + }; + + protected interface ConstraintChecker { + + void execute(); + } + + protected void assertConstraintViolationException(ConstraintChecker checker, String field, Class<?> annotationClass) { + + try { + checker.execute(); + Assert.fail(); + + } catch (ConstraintViolationException ex) { + + if (logger.isDebugEnabled()) { + logger.debug("Expected error", ex); + } + + ConstraintViolation<?> constraint = ex.getConstraintViolations().iterator().next(); + Assert.assertEquals(field, constraint.getPropertyPath().toString()); + Assert.assertTrue(constraint.getMessageTemplate().contains(annotationClass.getSimpleName())); + + if (logger.isDebugEnabled()) { + logger.debug("constraint.getMessageTemplate = " + constraint.getMessageTemplate()); + logger.debug("constraint.getMessage = " + constraint.getMessage()); + logger.debug("constraint.getInvalidValue = " + constraint.getInvalidValue()); + logger.debug("constraint.getLeafBean = " + constraint.getLeafBean()); + logger.debug("constraint.getPropertyPath = " + constraint.getPropertyPath()); + logger.debug("constraint.getRootBean = " + constraint.getRootBean()); + logger.debug("constraint.getRootBeanClass = " + constraint.getRootBeanClass()); + } + + } + } +} Added: jpa2-validation/trunk/jsr303-validation/src/test/resources/META-INF/persistence.xml =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/test/resources/META-INF/persistence.xml (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/test/resources/META-INF/persistence.xml 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,11 @@ +<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_2_0.xsd" + version="2.0"> + + <persistence-unit name="jsr303-test" transaction-type="RESOURCE_LOCAL"> + <class>org.nuiton.sandbox.jsr317.jpa2.entity.CustomerImpl</class> + <!--<validation-mode>NONE</validation-mode>--> + </persistence-unit> + +</persistence> \ No newline at end of file Added: jpa2-validation/trunk/jsr303-validation/src/test/resources/META-INF/validation.xml =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/test/resources/META-INF/validation.xml (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/test/resources/META-INF/validation.xml 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,7 @@ +<validation-config xmlns="http://jboss.org/xml/ns/javax/validation/configuration" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration http://jboss.org/xml/ns/javax/validation/configuration/validation-configuration-1.0.xsd"> + + <constraint-mapping>/org/nuiton/sandbox/jsr303/validation/constraints-customer.xml</constraint-mapping> + +</validation-config> \ No newline at end of file Added: jpa2-validation/trunk/jsr303-validation/src/test/resources/log4j.properties =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/test/resources/log4j.properties (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/test/resources/log4j.properties 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,12 @@ +# Default to info level output; this is very handy if you eventually use Hibernate as well. +log4j.rootCategory=warn, A1 + +# A1 is set to be a ConsoleAppender. +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +# A1 uses PatternLayout. +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%d [%p] (%c:%L) %m%n + +log4j.logger.org.nuiton.sandbox=debug +log4j.logger.org.hibernate=info Added: jpa2-validation/trunk/jsr303-validation/src/test/resources/test-spring-context.xml =================================================================== --- jpa2-validation/trunk/jsr303-validation/src/test/resources/test-spring-context.xml (rev 0) +++ jpa2-validation/trunk/jsr303-validation/src/test/resources/test-spring-context.xml 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,51 @@ +<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-3.0.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> + + <!-- TEST CONFIGURATION :: sample used to fill database --> + <context:component-scan base-package="org.nuiton.sandbox.jsr317.jpa2.sample"/> + + <!-- SERVICES CONFIGURATION --> + <import resource="classpath:/jsr303-spring-context.xml"/> + + <!-- MODEL INJECTION and JPA CONFIGURATION --> + <import resource="classpath:/jsr317-spring-context.xml"/> + + <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> + <property name="url" + value="jdbc:h2:file:./target/surefire-data/jsr303"/> + <property name="username" value="sa"/> + <property name="password" value=""/> + </bean> + + <bean id="transactionManager" + class="org.springframework.orm.jpa.JpaTransactionManager"> + <property name="entityManagerFactory" ref="entityManagerFactory"/> + </bean> + + <bean id="entityManagerFactory" + class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> + <property name="dataSource" ref="dataSource"/> + <property name="jpaVendorAdapter"> + <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> + <property name="showSql" value="false"/> + <property name="generateDdl" value="true"/> + <property name="databasePlatform" value="org.hibernate.dialect.H2Dialect"/> + </bean> + </property> + <property name="jpaProperties"> + <props> + <prop key="hibernate.hbm2ddl.auto">create</prop> + <!-- IdGenerator Strategy : one unique number for each row for all database --> + <prop key="hibernate.id.new_generator_mappings">true</prop> + </props> + </property> + <property name="loadTimeWeaver"> + <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/> + </property> + </bean> + +</beans> \ No newline at end of file Property changes on: jpa2-validation/trunk/jsr317-jpa2 ___________________________________________________________________ Modified: svn:ignore - *.iml + *.iml target Added: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/JpaConfig.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/JpaConfig.java (rev 0) +++ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/JpaConfig.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,80 @@ +package org.nuiton.sandbox.jsr317.jpa2.config; + +import javax.persistence.EntityManagerFactory; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; +import org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver; +import org.springframework.instrument.classloading.LoadTimeWeaver; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; + +/** + * Created on 21 oct. 2010 + * + * @author fdesbois <fdesbois@codelutin.com> + * @version $Id: JpaConfig.java 433 2010-11-12 17:53:20Z fdesbois $ + */ +@Configuration +@ImportResource("classpath:/jsr317-spring-context.xml") +public class JpaConfig { + + private static final Log log = LogFactory.getLog(JpaConfig.class); + + @Autowired + private JpaConfigSource configSource; + + /** + * Create bean transactionManager used for injection of EntityManager. Need EntityManagerFactory bean provided by + * {@link #entityManagerFactory()}. + * + * @return the JpaTransactionManager used for Jpa transactions in EntityManager + */ + @Bean + public JpaTransactionManager transactionManager() { + JpaTransactionManager transactionManager = new JpaTransactionManager(); + transactionManager.setEntityManagerFactory(entityManagerFactory()); + return transactionManager; + } + + /** + * Create bean entityManagerFactory used by transactionManager. The factory is created using {@link + * LocalContainerEntityManagerFactoryBean}. {@link JpaConfigSource} implementation is needed to provide parameters + * for the BeanFactory. The FactoryBean is directly used to provide EntityManagerFactory as object returned by this + * method. + * + * @return the EntityManagerFactory constructed by a BeanFactory provided by Spring. + * @see JpaConfigSource + */ + @Bean + public EntityManagerFactory entityManagerFactory() { + LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); + + if (log.isDebugEnabled()) { + log.debug("new LocalContainerEntityManagerFactoryBean()"); + } + + // DataSource to specify Database connection + factoryBean.setDataSource(configSource.dataSource()); + + // Extra VendorAdapter + factoryBean.setJpaVendorAdapter(configSource.jpaVendorAdapter()); + + // Extra JPA properties + factoryBean.setJpaProperties(configSource.jpaProperties()); + + // Instrumentation + LoadTimeWeaver loadTimeWeaver = new InstrumentationLoadTimeWeaver(); + factoryBean.setLoadTimeWeaver(loadTimeWeaver); + + // Ensure properties for the EntityManagerFactory object + factoryBean.afterPropertiesSet(); + + return factoryBean.getObject(); + } + +} Added: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/JpaConfigSource.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/JpaConfigSource.java (rev 0) +++ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/JpaConfigSource.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,45 @@ +package org.nuiton.sandbox.jsr317.jpa2.config; + +import javax.sql.DataSource; +import java.util.Properties; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.orm.jpa.JpaVendorAdapter; + +/** + * Defined ConfigSource used for Jpa configuration. This will provide parameters to configure the Jpa connection that + * depends from implementation. Jpa will not work until some implementation implement this contract. + * <p/> + * Created on 21 oct. 2010 + * + * @author fdesbois <fdesbois@codelutin.com> + * @version $Id: JpaConfigSource.java 433 2010-11-12 17:53:20Z fdesbois $ + */ +@Configuration +public interface JpaConfigSource { + + /** + * DataSource to use to configure connection with database. + * + * @return the DataSource to used in EntityManagerFactory as database connection. + */ + @Bean + DataSource dataSource(); + + /** + * Additional properties from Vendor implementation of JPA. + * + * @return the JpaVendorAdapter to used in EntityManagerFactory + */ + @Bean + JpaVendorAdapter jpaVendorAdapter(); + + /** + * Additional Jpa properties. + * + * @return the Properties to set directly as Jpa Properties in EntityManagerFactory + */ + @Bean + Properties jpaProperties(); +} Added: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/JpaHelper.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/JpaHelper.java (rev 0) +++ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/JpaHelper.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,51 @@ +package org.nuiton.sandbox.jsr317.jpa2.config; + +import javax.persistence.Embeddable; + +/** + * Created on 25 oct. 2010 + * + * @author fdesbois <fdesbois@codelutin.com> + * @version $Id: JpaHelper.java 433 2010-11-12 17:53:20Z fdesbois $ + */ +public class JpaHelper { + + /** + * Util method to check embeddable assignment from an {@code inputInstance} to an {@code embeddableImplClass}. JPA + * doesn't provide property or annotation to use other target as attribute type for Embedded classes. In our case, + * we use only interfaces for all objects, so as Embedded ones. It's better to call this method before each manual + * cast to Embedded object in setter methods because the declaration need to be of implementation type. This method + * resulting a safe cast to correct implementation class for Embeddable objects. + * + * @param inputInstance Input type to check + * @param embeddableImplClass Embeddable instance with {@link Embeddable} annotation + * @return the correct embeddable type to use for persistence support + * @throws ClassCastException Exception thrown if inputInstance doesn't correspond to implementation class + * @throws IllegalArgumentException Exception thrown if embeddable implementation class doesn't have Embeddable + * annotation + */ + public static <T> T safeEmbeddableCast(Object inputInstance, Class<T> embeddableImplClass) + throws ClassCastException, IllegalArgumentException { + + if (inputInstance == null) { + return null; + } + + if (!embeddableImplClass.isAnnotationPresent(Embeddable.class)) { + throw new IllegalArgumentException(String.format( + "Embeddable implementation '%s' doesn't have correct @Embeddable annotation", + embeddableImplClass.getName() + )); + } + + if (!inputInstance.getClass().isAssignableFrom(embeddableImplClass)) { + throw new ClassCastException(String.format( + "Unable to set element of type '%s', it is not supported as Embeddable instance '%s'", + inputInstance.getClass().getName(), + embeddableImplClass.getName() + )); + } + + return embeddableImplClass.cast(inputInstance); + } +} Added: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/UpdateTechnicalFieldListener.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/UpdateTechnicalFieldListener.java (rev 0) +++ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/config/UpdateTechnicalFieldListener.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,59 @@ +package org.nuiton.sandbox.jsr317.jpa2.config; + +import javax.persistence.PrePersist; +import javax.persistence.PreUpdate; +import java.util.Date; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.sandbox.jsr317.jpa2.entity.BaseEntityImpl; + +/** + * Listener used to update technical fields such as {@code createDate}, {@code updateDate} and {@code version} defined + * in {@link BaseEntityImpl}. + * <p/> + * Created on 18 oct. 2010 + * + * @author fdesbois <fdesbois@codelutin.com> + * @version $Id: UpdateTechnicalFieldListener.java 433 2010-11-12 17:53:20Z fdesbois $ + */ +public class UpdateTechnicalFieldListener { + + private static final Log log = LogFactory.getLog(UpdateTechnicalFieldListener.class); + + /** + * Callback to set updateDate and increment version on each entity update. + * + * @param entity Entity to update + */ + @PreUpdate + public void onPreUpdate(BaseEntityImpl entity) { + + // Update date + Date updateDate = new Date(); + entity.setUpdateDate(updateDate); + // Update version + int newVersion = entity.getVersion() + 1; + entity.setVersion(newVersion); + + if (log.isTraceEnabled()) { + log.trace("PreUpdate :: " + entity + " _ updateDate = " + updateDate + " _ version = " + newVersion); + } + } + + /** + * Callback to set createDate on each entity creation. + * + * @param entity Entity to update + */ + @PrePersist + public void onPrePersist(BaseEntityImpl entity) { + + Date createDate = new Date(); + entity.setCreateDate(createDate); + + if (log.isTraceEnabled()) { + log.trace("PrePersist :: " + entity + " _ createDate = " + createDate); + } + } +} Modified: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/entity/BaseEntityImpl.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/entity/BaseEntityImpl.java 2010-11-21 19:27:40 UTC (rev 435) +++ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/entity/BaseEntityImpl.java 2010-11-22 10:36:05 UTC (rev 436) @@ -9,8 +9,9 @@ import javax.persistence.TemporalType; import javax.persistence.Version; import java.util.Date; -import org.nuiton.sandbox.jsr317.jpa2.persistence.UpdateTechnicalFieldListener; +import org.nuiton.sandbox.jsr317.jpa2.config.UpdateTechnicalFieldListener; + /** * Created on 18 oct. 2010 * Modified: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/entity/CustomerImpl.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/entity/CustomerImpl.java 2010-11-21 19:27:40 UTC (rev 435) +++ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/entity/CustomerImpl.java 2010-11-22 10:36:05 UTC (rev 436) @@ -6,8 +6,9 @@ import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.Table; -import org.nuiton.sandbox.jsr317.jpa2.persistence.JpaHelper; +import org.nuiton.sandbox.jsr317.jpa2.config.JpaHelper; + /** * @author fdesbois <fdesbois@codelutin.com> * @version $Id$ @@ -172,5 +173,5 @@ public void setAccessCode(AccessCode accessCode) { this.accessCode = accessCode; } - + } Deleted: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/JpaConfig.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/JpaConfig.java 2010-11-21 19:27:40 UTC (rev 435) +++ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/JpaConfig.java 2010-11-22 10:36:05 UTC (rev 436) @@ -1,79 +0,0 @@ -package org.nuiton.sandbox.jsr317.jpa2.persistence; - -import javax.persistence.EntityManagerFactory; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.ImportResource; -import org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver; -import org.springframework.instrument.classloading.LoadTimeWeaver; -import org.springframework.orm.jpa.JpaTransactionManager; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; - -/** - * Created on 21 oct. 2010 - * - * @author fdesbois <fdesbois@codelutin.com> - * @version $Id$ - */ -@Configuration -@ImportResource("classpath:/jsr317-spring-context.xml") -public class JpaConfig { - - private static final Log log = LogFactory.getLog(JpaConfig.class); - - @Autowired - private JpaConfigSource configSource; - - /** - * Create bean transactionManager used for injection of EntityManager. Need EntityManagerFactory bean provided by - * {@link #entityManagerFactory()}. - * - * @return the JpaTransactionManager used for Jpa transactions in EntityManager - */ - @Bean - public JpaTransactionManager transactionManager() { - JpaTransactionManager transactionManager = new JpaTransactionManager(); - transactionManager.setEntityManagerFactory(entityManagerFactory()); - return transactionManager; - } - - /** - * Create bean entityManagerFactory used by transactionManager. The factory is created using - * {@link LocalContainerEntityManagerFactoryBean}. {@link JpaConfigSource} implementation is needed to provide - * parameters for the BeanFactory. The FactoryBean is directly used to provide EntityManagerFactory as object - * returned by this method. - * - * @return the EntityManagerFactory constructed by a BeanFactory provided by Spring. - * @see JpaConfigSource - */ - @Bean - public EntityManagerFactory entityManagerFactory() { - LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); - - if (log.isDebugEnabled()) { - log.debug("new LocalContainerEntityManagerFactoryBean()"); - } - - // DataSource to specify Database connection - factoryBean.setDataSource(configSource.dataSource()); - - // Extra VendorAdapter - factoryBean.setJpaVendorAdapter(configSource.jpaVendorAdapter()); - - // Extra JPA properties - factoryBean.setJpaProperties(configSource.jpaProperties()); - - // Instrumentation - LoadTimeWeaver loadTimeWeaver = new InstrumentationLoadTimeWeaver(); - factoryBean.setLoadTimeWeaver(loadTimeWeaver); - - // Ensure properties for the EntityManagerFactory object - factoryBean.afterPropertiesSet(); - - return factoryBean.getObject(); - } - -} Deleted: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/JpaConfigSource.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/JpaConfigSource.java 2010-11-21 19:27:40 UTC (rev 435) +++ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/JpaConfigSource.java 2010-11-22 10:36:05 UTC (rev 436) @@ -1,44 +0,0 @@ -package org.nuiton.sandbox.jsr317.jpa2.persistence; - -import javax.sql.DataSource; -import java.util.Properties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.orm.jpa.JpaVendorAdapter; - -/** - * Defined ConfigSource used for Jpa configuration. This will provide parameters to configure the Jpa connection that - * depends from implementation. Jpa will not work until some implementation implement this contract. - * <p /> - * Created on 21 oct. 2010 - * - * @author fdesbois <fdesbois@codelutin.com> - * @version $Id$ - */ -@Configuration -public interface JpaConfigSource { - - /** - * DataSource to use to configure connection with database. - * - * @return the DataSource to used in EntityManagerFactory as database connection. - */ - @Bean - DataSource dataSource(); - - /** - * Additional properties from Vendor implementation of JPA. - * - * @return the JpaVendorAdapter to used in EntityManagerFactory - */ - @Bean - JpaVendorAdapter jpaVendorAdapter(); - - /** - * Additional Jpa properties. - * - * @return the Properties to set directly as Jpa Properties in EntityManagerFactory - */ - @Bean - Properties jpaProperties(); -} Deleted: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/JpaHelper.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/JpaHelper.java 2010-11-21 19:27:40 UTC (rev 435) +++ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/JpaHelper.java 2010-11-22 10:36:05 UTC (rev 436) @@ -1,50 +0,0 @@ -package org.nuiton.sandbox.jsr317.jpa2.persistence; - -import javax.persistence.Embeddable; - -/** - * Created on 25 oct. 2010 - * - * @author fdesbois <fdesbois@codelutin.com> - * @version $Id$ - */ -public class JpaHelper { - - /** - * Util method to check embeddable assignment from an {@code inputInstance} to an {@code embeddableImplClass}. - * JPA doesn't provide property or annotation to use other target as attribute type for Embedded classes. In our case, we use - * only interfaces for all objects, so as Embedded ones. It's better to call this method before each manual cast to Embedded object - * in setter methods because the declaration need to be of implementation type. This method resulting a safe cast to correct - * implementation class for Embeddable objects. - * - * @param inputInstance Input type to check - * @param embeddableImplClass Embeddable instance with {@link Embeddable} annotation - * @return the correct embeddable type to use for persistence support - * @throws ClassCastException Exception thrown if inputInstance doesn't correspond to implementation class - * @throws IllegalArgumentException Exception thrown if embeddable implementation class doesn't have Embeddable annotation - */ - public static <T> T safeEmbeddableCast(Object inputInstance, Class<T> embeddableImplClass) - throws ClassCastException, IllegalArgumentException { - - if (inputInstance == null) { - return null; - } - - if (!embeddableImplClass.isAnnotationPresent(Embeddable.class)) { - throw new IllegalArgumentException(String.format( - "Embeddable implementation '%s' doesn't have correct @Embeddable annotation", - embeddableImplClass.getName() - )); - } - - if (!inputInstance.getClass().isAssignableFrom(embeddableImplClass)) { - throw new ClassCastException(String.format( - "Unable to set element of type '%s', it is not supported as Embeddable instance '%s'", - inputInstance.getClass().getName(), - embeddableImplClass.getName() - )); - } - - return embeddableImplClass.cast(inputInstance); - } -} Added: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/ModelContext.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/ModelContext.java (rev 0) +++ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/ModelContext.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,28 @@ +package org.nuiton.sandbox.jsr317.jpa2.persistence; + +import org.nuiton.sandbox.jsr317.jpa2.persistence.BaseDAOImpl.SaveStrategy; + +/** + * Global context for Model. Useful for manual flushing or change strategy for saving. + * <p/> + * Created on 19 nov. 2010 + * + * @author fdesbois <florian.desbois@wiztivi.com> + * @version $Id$ + */ +public interface ModelContext { + + /** + * Set the {@code strategy} to apply on each call to {@link BaseDAO#save(Object)} method. + * + * @param strategy SaveStrategy to use everywhere + */ + void setSaveStrategy(SaveStrategy strategy); + + /** + * Manual flushing of the persistent session to ensure data being saved in database. This could be useful inside a + * transactional method to have persisted results at a specified moment. + */ + void flushSession(); + +} Added: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/ModelContextImpl.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/ModelContextImpl.java (rev 0) +++ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/ModelContextImpl.java 2010-11-22 10:36:05 UTC (rev 436) @@ -0,0 +1,53 @@ +package org.nuiton.sandbox.jsr317.jpa2.persistence; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import java.util.Map; + +import org.nuiton.sandbox.jsr317.jpa2.persistence.BaseDAOImpl.SaveStrategy; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Service; + +/** + * Created on 19 nov. 2010 + * + * @author fdesbois <florian.desbois@wiztivi.com> + * @version $Id$ + */ +@Service +public class ModelContextImpl implements ModelContext { + + @Autowired + protected ApplicationContext context; + + @PersistenceContext + protected EntityManager entityManager; + + protected Map<String, BaseDAOImpl> daos; + + /** + * Retrieve daos from Spring applicationContext if needed. + * + * @return the registered DAOs + */ + public Map<String, BaseDAOImpl> getDAOs() { + if (daos == null) { + daos = context.getBeansOfType(BaseDAOImpl.class); + } + return daos; + } + + @Override + public void setSaveStrategy(SaveStrategy strategy) { + for (BaseDAOImpl dao : getDAOs().values()) { + dao.setSaveStrategy(strategy); + } + } + + @Override + public void flushSession() { + entityManager.flush(); + } + +} Deleted: jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/UpdateTechnicalFieldListener.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/UpdateTechnicalFieldListener.java 2010-11-21 19:27:40 UTC (rev 435) +++ jpa2-validation/trunk/jsr317-jpa2/src/main/java/org/nuiton/sandbox/jsr317/jpa2/persistence/UpdateTechnicalFieldListener.java 2010-11-22 10:36:05 UTC (rev 436) @@ -1,59 +0,0 @@ -package org.nuiton.sandbox.jsr317.jpa2.persistence; - -import javax.persistence.PrePersist; -import javax.persistence.PreUpdate; -import java.util.Date; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.sandbox.jsr317.jpa2.entity.BaseEntityImpl; - -/** - * - * Listener used to update technical fields such as {@code createDate}, {@code updateDate} - * and {@code version} defined in {@link BaseEntityImpl}. - * - * Created on 18 oct. 2010 - * - * @author fdesbois <fdesbois@codelutin.com> - * @version $Id$ - */ -public class UpdateTechnicalFieldListener { - - private static final Log log = LogFactory.getLog(UpdateTechnicalFieldListener.class); - - /** - * Callback to set updateDate and increment version on each entity update. - * - * @param entity Entity to update - */ - @PreUpdate - public void onPreUpdate(BaseEntityImpl entity) { - - // Update date - Date updateDate = new Date(); - entity.setUpdateDate(updateDate); - // Update version - int newVersion = entity.getVersion() + 1; - entity.setVersion(newVersion); - - if (log.isTraceEnabled()) { - log.trace("PreUpdate :: " + entity + " _ updateDate = " + updateDate + " _ version = " + newVersion); - } - } - - /** - * Callback to set createDate on each entity creation. - * - * @param entity Entity to update - */ - @PrePersist - public void onPrePersist(BaseEntityImpl entity) { - - Date createDate = new Date(); - entity.setCreateDate(createDate); - - if (log.isTraceEnabled()) { - log.trace("PrePersist :: " + entity + " _ createDate = " + createDate); - } - } -} Modified: jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/persistence/CustomerDAOImplTest.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/persistence/CustomerDAOImplTest.java 2010-11-21 19:27:40 UTC (rev 435) +++ jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/persistence/CustomerDAOImplTest.java 2010-11-22 10:36:05 UTC (rev 436) @@ -1,8 +1,10 @@ package org.nuiton.sandbox.jsr317.jpa2.persistence; import javax.persistence.PersistenceException; + import org.junit.Assert; import org.junit.Test; +import org.nuiton.sandbox.jsr317.jpa2.config.JpaHelper; import org.nuiton.sandbox.jsr317.jpa2.entity.Address; import org.nuiton.sandbox.jsr317.jpa2.entity.Customer; import org.nuiton.sandbox.jsr317.jpa2.test.AddressFake; @@ -37,13 +39,13 @@ user.setAddress(address); Assert.assertNotNull(user.getAddress()); - Assert.assertEquals("createStreet", user.getAddress().getStreet()); + Assert.assertEquals("createStreet", user.getAddress().getStreet()); } /** - * Test to check that an other address that AddressImpl can't be save into Customer entity.. - * This test is for {@link JpaHelper#safeEmbeddableCast(Object, Class)} method in real context. Note that @Transactional will break - * this test because flushing the session reproduce the Exception a second time after saving the entity. + * Test to check that an other address that AddressImpl can't be save into Customer entity.. This test is for {@link + * JpaHelper#safeEmbeddableCast(Object, Class)} method in real context. Note that @Transactional will break this + * test because flushing the session reproduce the Exception a second time after saving the entity. */ @Test(expected = PersistenceException.class) public void testCreateCustomerWithFakeAddressImplementation() { Modified: jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/test/AddressFake.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/test/AddressFake.java 2010-11-21 19:27:40 UTC (rev 435) +++ jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/test/AddressFake.java 2010-11-22 10:36:05 UTC (rev 436) @@ -1,12 +1,12 @@ package org.nuiton.sandbox.jsr317.jpa2.test; +import org.nuiton.sandbox.jsr317.jpa2.config.JpaHelper; import org.nuiton.sandbox.jsr317.jpa2.entity.Address; -import org.nuiton.sandbox.jsr317.jpa2.persistence.JpaHelper; /** * Fake implementation of address to test Embeddable target management (need explicit cast provided by {@link * JpaHelper#safeEmbeddableCast(Object, Class)} - * + * <p/> * Created on 22 oct. 2010 * * @author fdesbois <fdesbois@codelutin.com> Modified: jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/test/JpaConfigTestSource.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/test/JpaConfigTestSource.java 2010-11-21 19:27:40 UTC (rev 435) +++ jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/test/JpaConfigTestSource.java 2010-11-22 10:36:05 UTC (rev 436) @@ -2,8 +2,9 @@ import javax.sql.DataSource; import java.util.Properties; + import org.hibernate.dialect.H2Dialect; -import org.nuiton.sandbox.jsr317.jpa2.persistence.JpaConfigSource; +import org.nuiton.sandbox.jsr317.jpa2.config.JpaConfigSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -13,7 +14,7 @@ /** * Jpa configuration for tests. - * <p /> + * <p/> * Created on 21 oct. 2010 * * @author fdesbois <fdesbois@codelutin.com> @@ -39,7 +40,7 @@ jpaVendorAdapter.setGenerateDdl(true); jpaVendorAdapter.setDatabasePlatform(H2Dialect.class.getName()); return jpaVendorAdapter; - } + } @Bean @Override Modified: jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/test/SpringTestConfig.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/test/SpringTestConfig.java 2010-11-21 19:27:40 UTC (rev 435) +++ jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/test/SpringTestConfig.java 2010-11-22 10:36:05 UTC (rev 436) @@ -1,7 +1,7 @@ package org.nuiton.sandbox.jsr317.jpa2.test; -import org.nuiton.sandbox.jsr317.jpa2.persistence.JpaConfig; -import org.nuiton.sandbox.jsr317.jpa2.persistence.JpaConfigSource; +import org.nuiton.sandbox.jsr317.jpa2.config.JpaConfig; +import org.nuiton.sandbox.jsr317.jpa2.config.JpaConfigSource; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -9,9 +9,9 @@ import org.springframework.core.io.ClassPathResource; /** - * Configuration used for tests. This will import default {@link JpaConfig} and use {@link JpaConfigTestSource} as {@link JpaConfigSource} - * implementation needed by the JpaConfig. - * <p /> + * Configuration used for tests. This will import default {@link JpaConfig} and use {@link JpaConfigTestSource} as + * {@link JpaConfigSource} implementation needed by the JpaConfig. + * <p/> * Created on 21 oct. 2010 * * @author fdesbois <fdesbois@codelutin.com> @@ -21,9 +21,10 @@ @Configuration @Import({JpaConfig.class, JpaConfigTestSource.class}) public class SpringTestConfig { - + /** - * Used to retrieve properties from jdbc-test.properties file. @Value annotation can be used to inject those properties + * Used to retrieve properties from jdbc-test.properties file. @Value annotation can be used to inject those + * properties * * @return PropertyPlaceholderConfigurer defined */ Modified: jpa2-validation/trunk/pom.xml =================================================================== --- jpa2-validation/trunk/pom.xml 2010-11-21 19:27:40 UTC (rev 435) +++ jpa2-validation/trunk/pom.xml 2010-11-22 10:36:05 UTC (rev 436) @@ -2,200 +2,215 @@ 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> + <modelVersion>4.0.0</modelVersion> - <!-- ************************************************************* --> - <!-- *** POM Relationships *************************************** --> - <!-- ************************************************************* --> + <!-- ************************************************************* --> + <!-- *** POM Relationships *************************************** --> + <!-- ************************************************************* --> - <parent> - <groupId>org.nuiton</groupId> - <artifactId>mavenpom</artifactId> - <version>2.4.1</version> - </parent> + <parent> + <groupId>org.nuiton</groupId> + <artifactId>mavenpom</artifactId> + <version>2.4.1</version> + </parent> - <groupId>org.nuiton.sandbox</groupId> - <artifactId>jsr-tests</artifactId> - <version>0.1-SNAPSHOT</version> + <groupId>org.nuiton.sandbox</groupId> + <artifactId>jsr-tests</artifactId> + <version>0.1-SNAPSHOT</version> - <modules> - <!-- JSR-317 --> - <module>jsr317-jpa2</module> - <!-- JSR-303 --> - <module>jsr303-validation</module> - </modules> + <modules> + <!-- JSR-317 --> + <module>jsr317-jpa2</module> + <!-- JSR-303 --> + <module>jsr303-validation</module> + </modules> - <dependencyManagement> - <dependencies> + <dependencyManagement> + <dependencies> - <dependency> - <groupId>org.nuiton</groupId> - <artifactId>nuiton-utils</artifactId> - <version>1.4.2</version> - </dependency> + <dependency> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-utils</artifactId> + <version>1.4.2</version> + </dependency> - <!-- SPRING --> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-orm</artifactId> - <version>${springVersion}</version> - </dependency> + <!-- SPRING --> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-orm</artifactId> + <version>${springVersion}</version> + </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-core</artifactId> - <version>${springVersion}</version> - </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-core</artifactId> + <version>${springVersion}</version> + </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-jdbc</artifactId> - <version>${springVersion}</version> - </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-jdbc</artifactId> + <version>${springVersion}</version> + </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-beans</artifactId> - <version>${springVersion}</version> - </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-beans</artifactId> + <version>${springVersion}</version> + </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-context</artifactId> - <version>${springVersion}</version> - </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + <version>${springVersion}</version> + </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-tx</artifactId> - <version>${springVersion}</version> - </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-tx</artifactId> + <version>${springVersion}</version> + </dependency> - <!-- JPA : JSR-317- --> - <dependency> - <groupId>org.hibernate.javax.persistence</groupId> - <artifactId>hibernate-jpa-2.0-api</artifactId> - <version>${jpa2ApiVersion}</version> - </dependency> + <!-- JPA : JSR-317- --> + <dependency> + <groupId>org.hibernate.javax.persistence</groupId> + <artifactId>hibernate-jpa-2.0-api</artifactId> + <version>${jpa2ApiVersion}</version> + </dependency> - <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-jpamodelgen</artifactId> - <version>${jpa2ApiVersion}</version> - <scope>provided</scope> - </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-jpamodelgen</artifactId> + <version>${jpa2ApiVersion}</version> + <scope>provided</scope> + </dependency> - <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-core</artifactId> - <version>${hibernateVersion}</version> - <scope>test</scope> - </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-core</artifactId> + <version>${hibernateVersion}</version> + <scope>test</scope> + </dependency> - <!-- Bean Validation : JSR-303 --> - <dependency> - <groupId>javax.validation</groupId> - <artifactId>validation-api</artifactId> - <version>${validationApiVersion}</version> - </dependency> + <!-- Bean Validation : JSR-303 --> + <dependency> + <groupId>javax.validation</groupId> + <artifactId>validation-api</artifactId> + <version>${validationApiVersion}</version> + </dependency> - <!-- LOGGING --> - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - <version>${log4jVersion}</version> - <scope>runtime</scope> - </dependency> + <!-- LOGGING --> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4jVersion}</version> + <scope>runtime</scope> + </dependency> - <!-- TESTS --> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <version>1.2.143</version> - <scope>test</scope> - </dependency> + <!-- TESTS --> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <version>1.2.143</version> + <scope>test</scope> + </dependency> - <!-- Hibernate implementation used for tests --> - <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-entitymanager</artifactId> - <version>${hibernateVersion}</version> - <scope>test</scope> - </dependency> + <!-- Hibernate implementation used for tests --> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-entitymanager</artifactId> + <version>${hibernateVersion}</version> + <scope>test</scope> + </dependency> - <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-validator</artifactId> - <version>${hibernateValidatorVersion}</version> - <scope>test</scope> - </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-validator</artifactId> + <version>${hibernateValidatorVersion}</version> + <scope>test</scope> + </dependency> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> - <version>${slf4jVersion}</version> - <scope>test</scope> - </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4jVersion}</version> + <scope>test</scope> + </dependency> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-log4j12</artifactId> - <version>${slf4jVersion}</version> - <scope>test</scope> - </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + <version>${slf4jVersion}</version> + <scope>test</scope> + </dependency> - <!-- Testing --> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-test</artifactId> - <version>${springVersion}</version> - <scope>test</scope> - </dependency> + <!-- Testing --> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + <version>${springVersion}</version> + <scope>test</scope> + </dependency> - </dependencies> - </dependencyManagement> + </dependencies> + </dependencyManagement> - <!-- ************************************************************* --> - <!-- *** Project Information ************************************* --> - <!-- ************************************************************* --> + <!-- ************************************************************* --> + <!-- *** Project Information ************************************* --> + <!-- ************************************************************* --> - <name>JSR Tests</name> - <description>JPA2 and Validation tests</description> - <inceptionYear>2010</inceptionYear> - <url>http://maven-site.nuiton.org/${project.artifactId}</url> + <name>JSR Tests</name> + <description>JPA2 and Validation tests</description> + <inceptionYear>2010</inceptionYear> + <url>http://maven-site.nuiton.org/${project.artifactId}</url> - <!-- ************************************************************* --> - <!-- *** Build Settings ****************************************** --> - <!-- ************************************************************* --> + <!-- ************************************************************* --> + <!-- *** Build Settings ****************************************** --> + <!-- ************************************************************* --> - <packaging>pom</packaging> + <packaging>pom</packaging> - <properties> + <properties> - <!-- Dependencies versions --> - <springVersion>3.0.4.RELEASE</springVersion> - <jpa2ApiVersion>1.0.0.Final</jpa2ApiVersion> - <validationApiVersion>1.0.0.GA</validationApiVersion> + <!-- Dependencies versions --> + <springVersion>3.0.4.RELEASE</springVersion> + <jpa2ApiVersion>1.0.0.Final</jpa2ApiVersion> + <validationApiVersion>1.0.0.GA</validationApiVersion> - <!-- For test only : Hibernate implementation for JSR used --> - <hibernateVersion>3.5.6-Final</hibernateVersion> - <hibernateValidatorVersion>4.0.2.GA</hibernateValidatorVersion> - <slf4jVersion>1.6.1</slf4jVersion> + <!-- For test only : Hibernate implementation for JSR used --> + <hibernateVersion>3.5.6-Final</hibernateVersion> + <hibernateValidatorVersion>4.0.2.GA</hibernateValidatorVersion> + <slf4jVersion>1.6.1</slf4jVersion> - </properties> + </properties> - <!-- Source control management. --> - <scm> - <connection> - scm:svn:http://svn.nuiton.org/svn/sandbox/jpa2-validation/trunk - </connection> - <developerConnection> - scm:svn:http://svn.nuiton.org/svn/sandbox/jpa2-validation/trunk - </developerConnection> - <url> - http://www.nuiton.org/repositories/browse/sandbox/jpa2-validation/trunk - </url> - </scm> + <build> + <finalName>${project.artifactId}-${project.version}</finalName> + <pluginManagement> + <plugins> + <plugin> + <artifactId>maven-invoker-plugin</artifactId> + <version>1.5</version> + </plugin> + + </plugins> + </pluginManagement> + </build> + + <!-- Source control management. --> + <scm> + <connection> + scm:svn:http://svn.nuiton.org/svn/sandbox/jpa2-validation/trunk + </connection> + <developerConnection> + scm:svn:http://svn.nuiton.org/svn/sandbox/jpa2-validation/trunk + </developerConnection> + <url> + http://www.nuiton.org/repositories/browse/sandbox/jpa2-validation/trunk + </url> + </scm> + + </project>
participants (1)
-
fdesbois@users.nuiton.org