Я разрабатываю веб-приложение, используя Spring (3.1.x), JSF 2, JPA 2 (Hibernate Provider) для tomcat 6.x. Я хочу проверить свои классы DAO.
Моя база данных приложений находится под MySql.
Для теста я хочу использовать HSQLDB в памяти.
Я сделал несколько скриптов, которые создают схему и таблицы в hsqldb, я вызываю их с помощью плагина maven sql.
pom.xml:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.5</version>
<dependencies>
<!-- specify the dependent jdbc driver here -->
<dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>1.8.0.10</version>
</dependency>
</dependencies>
<!-- common configuration shared by all executions -->
<configuration>
<driver>org.hsqldb.jdbcDriver</driver>
<url>jdbc:hsqldb:mem:testOpen</url>
<username>sa</username>
<password></password>
<!-- You can comment out username/password configurations and
have maven to look them up in your settings.xml using ${settingsKey}
-->
<settingsKey>sensibleKey</settingsKey>
<!--all executions are ignored if -Dmaven.test.skip=true-->
<skip>${maven.test.skip}</skip>
</configuration>
<executions>
<execution>
<id>drop-db-before-test-if-any</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<!-- need another database to drop the targeted one -->
<url>jdbc:hsqldb:mem:testOpen</url>
<autocommit>true</autocommit>
<sqlCommand>DROP SCHEMA testOpen CASCADE</sqlCommand>
<!-- ignore error when database is not avaiable -->
<onError>continue</onError>
</configuration>
</execution>
<execution>
<id>create-db</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<url>jdbc:hsqldb:mem:testOpen</url>
<!-- no transaction -->
<autocommit>true</autocommit>
<sqlCommand>CREATE SCHEMA testOpen AUTHORIZATION DBA</sqlCommand>
</configuration>
</execution>
<execution>
<id>create-tables</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<url>jdbc:hsqldb:mem:testOpen</url>
<autocommit>true</autocommit>
<srcFiles>
<srcFile>conf/script_sql/hsqldb/create_tables.sql</srcFile>
</srcFiles>
</configuration>
</execution>
<execution>
<id>check-data</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<url>jdbc:hsqldb:mem:testOpen</url>
<autocommit>true</autocommit>
<printResultSet>true</printResultSet>
<sqlCommand>SELECT * FROM INFORMATION_SCHEMA.SYSTEM_COLUMNS WHERE TABLE_NAME NOT LIKE 'SYSTEM_%'</sqlCommand>
</configuration>
</execution>
</executions>
</plugin>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="C4OpenPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>java:comp/env/jdbc/open_tomcat</non-jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.transaction.flush_before_completion" value="true"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
<property name="hibernate.connection.zeroDateTimeBehavior" value="convertToNull"/>
</properties>
</persistence-unit>
<persistence-unit name="C4OpenTestPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" />
<property name="hibernate.connection.username" value="sa" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.connection.url" value="jdbc:hsqldb:mem:testOpen" />
<property name="hibernate.default_schema" value="testLineopen"/>
</properties>
</persistence-unit>
</persistence>
Проблема в том, что когда мой тестовый класс вызывается во время фазы тестирования, моя схема, кажется, не существует. При выполнении проверочных данных таблицы существуют в хорошей схеме.
В чем проблема ? Где таблицы?
РЕДАКТИРОВАТЬ:
Я также пытаюсь с файловой базой данных, но это не удается, проблема блокировки.
Ошибка получения блокировки базы данных: lockFile.
Спасибо.