public interface SchemaMigrationMapper {
List<Integer> selectVersions();
+
+ void insert(String version);
}
+++ /dev/null
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.jpa.entity;
-
-import org.apache.commons.lang.builder.ReflectionToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-
-import javax.persistence.*;
-
-/**
- * Still used for Hibernate unit tests
- */
-@Entity
-@Table(name = "schema_migrations", uniqueConstraints = {@UniqueConstraint(columnNames = {"version"})})
-public class SchemaMigration {
-
- @Id
- @Column(name = "version", updatable = true)
- private String version;
-
- public String getVersion() {
- return version;
- }
-
- public void setVersion(String s) {
- this.version = s;
- }
-
- public void setVersion(int i) {
- this.version = String.valueOf(i);
- }
-
- @Override
- public String toString() {
- return new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).toString();
- }
-}
*/
package org.sonar.jpa.session;
+import java.util.Map;
+import java.util.Properties;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.core.persistence.Database;
-import org.sonar.core.persistence.DatabaseVersion;
import org.sonar.core.persistence.dialect.Dialect;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import java.util.Map;
-import java.util.Properties;
-
public abstract class AbstractDatabaseConnector implements DatabaseConnector {
protected static final Logger LOG = LoggerFactory.getLogger(AbstractDatabaseConnector.class);
database = null;
}
- @Override
- public EntityManagerFactory getEntityManagerFactory() {
- return factory;
- }
-
protected EntityManagerFactory createEntityManagerFactory() {
// other settings are stored into /META-INF/persistence.xml
Properties props = database.getHibernateProperties();
return factory.createEntityManager();
}
- @Override
- public final int getDatabaseVersion() {
- throw new UnsupportedOperationException("Moved to " + DatabaseVersion.class.getCanonicalName());
- }
-
@Override
public final Dialect getDialect() {
return database.getDialect();
*/
package org.sonar.jpa.session;
-import org.sonar.core.persistence.dialect.Dialect;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
import java.sql.Connection;
import java.sql.SQLException;
+import javax.persistence.EntityManager;
+import org.sonar.core.persistence.dialect.Dialect;
public interface DatabaseConnector {
Connection getConnection() throws SQLException;
- EntityManagerFactory getEntityManagerFactory();
-
EntityManager createEntityManager();
- int getDatabaseVersion();
-
}
+++ /dev/null
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.jpa.session;
-
-import org.sonar.core.persistence.Database;
-import org.sonar.core.persistence.DatabaseVersion;
-import org.sonar.jpa.entity.SchemaMigration;
-
-import javax.persistence.EntityManager;
-
-public class MemoryDatabaseConnector extends DefaultDatabaseConnector {
- private int version;
-
- public MemoryDatabaseConnector(Database database) {
- super(database);
- version = DatabaseVersion.LAST_VERSION;
- }
-
- @Override
- public void start() {
- super.start();
- setupSchemaVersion(version);
- }
-
- protected void setupSchemaVersion(int version) {
- SchemaMigration migration = new SchemaMigration();
- migration.setVersion(version);
- EntityManager manager = createEntityManager();
- try {
- manager.getTransaction().begin();
- manager.persist(migration);
- manager.getTransaction().commit();
-
- } finally {
- if (manager != null) {
- manager.close();
- }
- }
- }
-}
<persistence-unit name="sonar" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
- <class>org.sonar.jpa.entity.SchemaMigration</class>
<class>org.sonar.jpa.entity.ManualMeasure</class>
<class>org.sonar.api.database.configuration.Property</class>
<class>org.sonar.api.database.model.User</class>
<mapper namespace="org.sonar.core.persistence.SchemaMigrationMapper">
- <select id="selectVersions" resultType="int" >
- select * from schema_migrations
+ <select id="selectVersions" resultType="int">
+ select version from schema_migrations
</select>
+ <insert id="insert" parameterType="string" useGeneratedKeys="false">
+ insert into schema_migrations(version) values (#{version,jdbcType=VARCHAR})
+ </insert>
</mapper>
*/
package org.sonar.jpa.test;
+import java.io.InputStream;
+import java.sql.SQLException;
import org.apache.commons.io.IOUtils;
+import org.apache.ibatis.session.SqlSession;
import org.dbunit.Assertion;
import org.dbunit.DataSourceDatabaseTester;
import org.dbunit.DatabaseUnitException;
import org.sonar.core.config.Logback;
import org.sonar.core.persistence.Database;
import org.sonar.core.persistence.DatabaseCommands;
+import org.sonar.core.persistence.DatabaseVersion;
import org.sonar.core.persistence.H2Database;
import org.sonar.core.persistence.MyBatis;
+import org.sonar.core.persistence.SchemaMigrationMapper;
import org.sonar.jpa.session.DatabaseSessionFactory;
+import org.sonar.jpa.session.DefaultDatabaseConnector;
import org.sonar.jpa.session.JpaDatabaseSession;
-import org.sonar.jpa.session.MemoryDatabaseConnector;
-
-import java.io.InputStream;
-import java.sql.SQLException;
import static org.junit.Assert.fail;
private static Database database;
private static MyBatis myBatis;
private static DatabaseCommands databaseCommands;
- private static MemoryDatabaseConnector dbConnector;
+ private static DefaultDatabaseConnector dbConnector;
private IDatabaseTester databaseTester;
private JpaDatabaseSession session;
databaseCommands = DatabaseCommands.forDialect(database.getDialect());
- dbConnector = new MemoryDatabaseConnector(database);
- dbConnector.start();
-
myBatis = new MyBatis(database, new Logback(), new NullQueue());
myBatis.start();
+ try (SqlSession session = myBatis.openSession(false)) {
+ session.getMapper(SchemaMigrationMapper.class).insert(String.valueOf(DatabaseVersion.LAST_VERSION));
+ session.commit();
+ }
+
+ dbConnector = new DefaultDatabaseConnector(database);
+ dbConnector.start();
}
}