I have a Roo-generated Spring MVC application related to PostgreSQL using Hibernate. I am trying to integrate Flyway 1.6 as a bean in the context of a Spring application. Something is stopping the migration from executing, and I get an error initializing the context caused by the Hibernate metadata check. There is no problem performing the migration using the Flyway 1.6 Maven plugin (clean, init, migrate).
Integration Flyway 1.5 (previous version) works fine.
What to do to integrate Flyway 1.6 migration? What additional configuration should I provide?
Environment: Ubuntu 11.10, Springsource Tool Suite 2.9.1 (Eclipse 3.7.2), OpenJDK 6b23, Tomcat 7.0.23, PostgreSQL 8.4.9 / 9.1, Spring 3.0 / 3.1, Hibernate 3.6.4.Final, PostgreSQL 8.4 JDBC3 source driver / 4 assembly 702.
pom.xml:
<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"> ... <dependencies> ... <dependency> <groupId>com.googlecode.flyway</groupId> <artifactId>flyway-core</artifactId> <version>1.6</version> <classifier/> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>com.googlecode.flyway</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>1.6</version> <configuration> <driver>org.postgresql.Driver</driver> <url>jdbc:postgresql://localhost:5432/library</url> <baseDir>db/migration</baseDir> <user>library</user> <password>library</password> </configuration> </plugin> ... </plugins> </build> </project>
database.properties:
database.password=library database.url=jdbc\:postgresql\://localhost\:5432/library database.username=library database.driverClassName=org.postgresql.Driver
persistence.xml:
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="validate"/> <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/> <property name="hibernate.connection.charSet" value="UTF-8"/> </properties> </persistence-unit> </persistence>
Spring contextual configuration:
<beans xmlns="http://www.springframework.org/schema/beans" ...> <context:property-placeholder location="classpath*:META-INF/spring/*.properties"/> <context:spring-configured/> <context:component-scan base-package="edu.sandbox.library"> <context:exclude-filter expression=".*_Roo_.*" type="regex"/> <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/> </context:component-scan> <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource"> <property name="driverClassName" value="${database.driverClassName}"/> <property name="url" value="${database.url}"/> <property name="username" value="${database.username}"/> <property name="password" value="${database.password}"/> <property name="testOnBorrow" value="true"/> <property name="testOnReturn" value="true"/> <property name="testWhileIdle" value="true"/> <property name="timeBetweenEvictionRunsMillis" value="1800000"/> <property name="numTestsPerEvictionRun" value="3"/> <property name="minEvictableIdleTimeMillis" value="1800000"/> <property name="validationQuery" value="SELECT version();"/> </bean> <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/> <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" depends-on="flyway" id="entityManagerFactory"> <property name="persistenceUnitName" value="persistenceUnit"/> <property name="dataSource" ref="dataSource"/> </bean> <bean class="com.googlecode.flyway.core.Flyway" id="flyway" init-method="migrate"> <property name="dataSource" ref="dataSource"/> </bean> </beans>
Journal:
... INFO org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.s pringframework.beans.factory.support.DefaultListableBeanFactory@ 19d03a4e: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer