diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/AutocommitFailedException.java b/lib/taskana-core/src/main/java/pro/taskana/exceptions/AutocommitFailedException.java new file mode 100644 index 000000000..1fd2bdaa4 --- /dev/null +++ b/lib/taskana-core/src/main/java/pro/taskana/exceptions/AutocommitFailedException.java @@ -0,0 +1,13 @@ +package pro.taskana.exceptions; + +/** + * Thrown in ConnectionManagementMode AUTOCOMMIT when an attempt to commit fails. + * + */ +@SuppressWarnings("serial") +public class AutocommitFailedException extends RuntimeException { + public AutocommitFailedException(Throwable cause) { + super("Autocommit failed", cause); + } + +} diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/persistence/ClassificationQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java similarity index 98% rename from lib/taskana-core/src/main/java/pro/taskana/impl/persistence/ClassificationQueryImpl.java rename to lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java index ce9b6d272..5b1bf1016 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/persistence/ClassificationQueryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java @@ -1,8 +1,7 @@ -package pro.taskana.impl.persistence; +package pro.taskana.impl; import org.apache.ibatis.session.RowBounds; import pro.taskana.TaskanaEngine; -import pro.taskana.impl.TaskanaEngineImpl; import pro.taskana.model.Classification; import pro.taskana.persistence.ClassificationQuery; diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java index 08f08ef34..ffaff45e2 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java @@ -3,7 +3,6 @@ package pro.taskana.impl; import pro.taskana.ClassificationService; import pro.taskana.TaskanaEngine; import pro.taskana.exceptions.NotAuthorizedException; -import pro.taskana.impl.persistence.ClassificationQueryImpl; import pro.taskana.impl.util.IdGenerator; import pro.taskana.model.Classification; import pro.taskana.model.mappings.ClassificationMapper; diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/persistence/ObjectReferenceQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/ObjectReferenceQueryImpl.java similarity index 97% rename from lib/taskana-core/src/main/java/pro/taskana/impl/persistence/ObjectReferenceQueryImpl.java rename to lib/taskana-core/src/main/java/pro/taskana/impl/ObjectReferenceQueryImpl.java index 40f81d382..f7886acda 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/persistence/ObjectReferenceQueryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/ObjectReferenceQueryImpl.java @@ -1,10 +1,9 @@ -package pro.taskana.impl.persistence; +package pro.taskana.impl; import java.util.List; import org.apache.ibatis.session.RowBounds; import pro.taskana.TaskanaEngine; -import pro.taskana.impl.TaskanaEngineImpl; import pro.taskana.model.ObjectReference; import pro.taskana.persistence.ObjectReferenceQuery; diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/persistence/TaskQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java similarity index 98% rename from lib/taskana-core/src/main/java/pro/taskana/impl/persistence/TaskQueryImpl.java rename to lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java index 3a97609dc..5bf5d075f 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/persistence/TaskQueryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java @@ -1,11 +1,10 @@ -package pro.taskana.impl.persistence; +package pro.taskana.impl; import java.util.List; import org.apache.ibatis.session.RowBounds; import pro.taskana.TaskanaEngine; import pro.taskana.exceptions.NotAuthorizedException; -import pro.taskana.impl.TaskanaEngineImpl; import pro.taskana.model.Task; import pro.taskana.model.TaskState; import pro.taskana.model.WorkbasketAuthorization; diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java index 8b887fd4b..790d169cb 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java @@ -14,7 +14,6 @@ import pro.taskana.TaskanaEngine; import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException; -import pro.taskana.impl.persistence.TaskQueryImpl; import pro.taskana.impl.util.IdGenerator; import pro.taskana.model.DueWorkbasketCounter; import pro.taskana.model.ObjectReference; diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskanaEngineImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskanaEngineImpl.java index 488c5dbf0..d1074b922 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskanaEngineImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskanaEngineImpl.java @@ -1,6 +1,5 @@ package pro.taskana.impl; -import java.sql.SQLException; import java.util.Stack; import org.apache.ibatis.mapping.Environment; @@ -20,6 +19,7 @@ import pro.taskana.TaskService; import pro.taskana.TaskanaEngine; import pro.taskana.WorkbasketService; import pro.taskana.configuration.TaskanaEngineConfiguration; +import pro.taskana.exceptions.AutocommitFailedException; import pro.taskana.exceptions.ConnectionNotSetException; import pro.taskana.impl.persistence.MapTypeHandler; import pro.taskana.model.mappings.ClassificationMapper; @@ -79,103 +79,25 @@ public class TaskanaEngineImpl implements TaskanaEngine { return this.taskanaEngineConfiguration; } - /** - * Open the connection to the database. - * to be called at the begin of each Api call that accesses the database - * - */ - public void openConnection() { - initSqlSession(); - if (mode != ConnectionManagementMode.EXPLICIT) { - pushSessionToStack(this.sessionManager); - } - } - - /** - * Initializes the SqlSessionManager. - * - */ - void initSqlSession() { - if (mode == ConnectionManagementMode.EXPLICIT && this.connection == null) { - throw new ConnectionNotSetException(); - } else if (mode != ConnectionManagementMode.EXPLICIT) { - if (!this.sessionManager.isManagedSessionStarted()) { - this.sessionManager.startManagedSession(); - } - } - } - - /** - * closes the connection to the database in mode EXPLICIT. - * In mode EXPLICIT, closes the client's connection, sets it to null and switches to mode PARTICIPATE - * Has the same effect as setConnection(null) - */ - @Override - public void closeConnection() { - if (this.mode == ConnectionManagementMode.EXPLICIT) { - this.connection = null; - if (sessionManager.isManagedSessionStarted()) { - sessionManager.close(); - } - mode = ConnectionManagementMode.PARTICIPATE; - } - } - - /** - * Returns the database connection into the pool. - * In the case of nested calls, simply pops the latest session from the session stack. - * Closes the connection if the session stack is empty. - * In mode AUTOCOMMIT commits before the connection is closed. - * To be called at the end of each Api call that accesses the database - */ - public void returnConnection() { - if (this.mode != ConnectionManagementMode.EXPLICIT) { - popSessionFromStack(); - if (getSessionStack().isEmpty() - && this.sessionManager != null && this.sessionManager.isManagedSessionStarted()) { - if (this.mode == ConnectionManagementMode.AUTOCOMMIT) { - try { - this.sessionManager.commit(); - } catch (Exception e) { - LOGGER.debug("closeSession(): Tried to Autocommit and caught exception" + e); - } - } - this.sessionManager.close(); - } - } - } - /** * sets the connection management mode. * * @param mode - the connection management mode * Valid values are - * PARTICIPATE - to be used in managed environments where taskana participates in surrounding transactions - * AUTOCOMMIT - to be used in non-managed environments. Taskana commits each single API call explicitly - * EXPLICIT - to be used in non-managed environments. Gives commit control to the client. + * PARTICIPATE - taskana participates in global transaction. This is the default mode + * AUTOCOMMIT - taskana commits each API call separately + * EXPLICIT - commit processing is managed explicitly by the client */ @Override public void setConnectionManagementMode(ConnectionManagementMode mode) { if (this.mode == ConnectionManagementMode.EXPLICIT && connection != null && mode != ConnectionManagementMode.EXPLICIT) { - try { - connection.close(); - } catch (SQLException e) { - LOGGER.debug("setConnectionManagementMode(" + mode + ") tried to close connection and caught " + e); + if (sessionManager.isManagedSessionStarted()) { + sessionManager.close(); } connection = null; - this.mode = mode; - } else { - this.mode = mode; } - } - - /** - * retrieve the SqlSession used by taskana. - * @return the myBatis SqlSession object used by taskana - */ - public SqlSession getSqlSession() { - return this.sessionManager; + this.mode = mode; } /** @@ -202,6 +124,81 @@ public class TaskanaEngineImpl implements TaskanaEngine { } } + /** + * closes the connection to the database in mode EXPLICIT. + * In mode EXPLICIT, closes the client's connection, sets it to null and switches to mode PARTICIPATE + * Has the same effect as setConnection(null) + */ + @Override + public void closeConnection() { + if (this.mode == ConnectionManagementMode.EXPLICIT) { + this.connection = null; + if (sessionManager.isManagedSessionStarted()) { + sessionManager.close(); + } + mode = ConnectionManagementMode.PARTICIPATE; + } + } + + /** + * Open the connection to the database. + * to be called at the begin of each Api call that accesses the database + * + */ + void openConnection() { + initSqlSession(); + if (mode != ConnectionManagementMode.EXPLICIT) { + pushSessionToStack(this.sessionManager); + } + } + + /** + * Initializes the SqlSessionManager. + * + */ + void initSqlSession() { + if (mode == ConnectionManagementMode.EXPLICIT && this.connection == null) { + throw new ConnectionNotSetException(); + } else if (mode != ConnectionManagementMode.EXPLICIT) { + if (!this.sessionManager.isManagedSessionStarted()) { + this.sessionManager.startManagedSession(); + } + } + } + + /** + * Returns the database connection into the pool. + * In the case of nested calls, simply pops the latest session from the session stack. + * Closes the connection if the session stack is empty. + * In mode AUTOCOMMIT commits before the connection is closed. + * To be called at the end of each Api call that accesses the database + */ + void returnConnection() { + if (this.mode != ConnectionManagementMode.EXPLICIT) { + popSessionFromStack(); + if (getSessionStack().isEmpty() + && this.sessionManager != null && this.sessionManager.isManagedSessionStarted()) { + if (this.mode == ConnectionManagementMode.AUTOCOMMIT) { + try { + this.sessionManager.commit(); + } catch (Exception e) { + LOGGER.error("closeSession(): Tried to Autocommit and caught exception" + e); + throw new AutocommitFailedException(e); + } + } + this.sessionManager.close(); + } + } + } + + /** + * retrieve the SqlSession used by taskana. + * @return the myBatis SqlSession object used by taskana + */ + SqlSession getSqlSession() { + return this.sessionManager; + } + /** * This method creates the sqlSessionManager of myBatis. It integrates all the * SQL mappers diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/QueryMapper.java b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/QueryMapper.java index 7f02e78aa..e04cc2555 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/QueryMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/QueryMapper.java @@ -4,9 +4,10 @@ import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; -import pro.taskana.impl.persistence.ClassificationQueryImpl; -import pro.taskana.impl.persistence.ObjectReferenceQueryImpl; -import pro.taskana.impl.persistence.TaskQueryImpl; + +import pro.taskana.impl.ClassificationQueryImpl; +import pro.taskana.impl.ObjectReferenceQueryImpl; +import pro.taskana.impl.TaskQueryImpl; import pro.taskana.model.Classification; import pro.taskana.model.ObjectReference; import pro.taskana.model.Task; diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/persistence/ClassificationQueryImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationQueryImplTest.java similarity index 96% rename from lib/taskana-core/src/test/java/pro/taskana/impl/persistence/ClassificationQueryImplTest.java rename to lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationQueryImplTest.java index 40016d86b..bd43f7d2c 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/persistence/ClassificationQueryImplTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationQueryImplTest.java @@ -1,4 +1,4 @@ -package pro.taskana.impl.persistence; +package pro.taskana.impl; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; @@ -13,8 +13,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; + import pro.taskana.exceptions.NotAuthorizedException; -import pro.taskana.impl.TaskanaEngineImpl; import pro.taskana.model.Classification; /** diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationServiceImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationServiceImplTest.java index b2942c497..9673adf30 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationServiceImplTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationServiceImplTest.java @@ -1,5 +1,18 @@ package pro.taskana.impl; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.atLeast; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.sql.Date; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -7,19 +20,11 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; + import pro.taskana.exceptions.NotAuthorizedException; -import pro.taskana.impl.persistence.TestClassificationQuery; import pro.taskana.model.Classification; import pro.taskana.model.mappings.ClassificationMapper; -import java.sql.Date; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; - /** * Unit Test for ClassificationServiceImpl. * @author EH diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/persistence/ObjectReferenceQueryImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/ObjectReferenceQueryImplTest.java similarity index 96% rename from lib/taskana-core/src/test/java/pro/taskana/impl/persistence/ObjectReferenceQueryImplTest.java rename to lib/taskana-core/src/test/java/pro/taskana/impl/ObjectReferenceQueryImplTest.java index 2538152bd..64ab8aeb0 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/persistence/ObjectReferenceQueryImplTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/ObjectReferenceQueryImplTest.java @@ -1,4 +1,4 @@ -package pro.taskana.impl.persistence; +package pro.taskana.impl; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; @@ -13,8 +13,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; + import pro.taskana.exceptions.NotAuthorizedException; -import pro.taskana.impl.TaskanaEngineImpl; import pro.taskana.model.ObjectReference; /** diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/persistence/TaskQueryImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/TaskQueryImplTest.java similarity index 96% rename from lib/taskana-core/src/test/java/pro/taskana/impl/persistence/TaskQueryImplTest.java rename to lib/taskana-core/src/test/java/pro/taskana/impl/TaskQueryImplTest.java index 10eec9b11..d2e0da618 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/persistence/TaskQueryImplTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/TaskQueryImplTest.java @@ -1,4 +1,4 @@ -package pro.taskana.impl.persistence; +package pro.taskana.impl; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; @@ -13,8 +13,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; + import pro.taskana.exceptions.NotAuthorizedException; -import pro.taskana.impl.TaskanaEngineImpl; import pro.taskana.model.Task; import pro.taskana.model.TaskState; diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/persistence/TestClassificationQuery.java b/lib/taskana-core/src/test/java/pro/taskana/impl/TestClassificationQuery.java similarity index 99% rename from lib/taskana-core/src/test/java/pro/taskana/impl/persistence/TestClassificationQuery.java rename to lib/taskana-core/src/test/java/pro/taskana/impl/TestClassificationQuery.java index 3fc0e49b8..d589f3104 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/persistence/TestClassificationQuery.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/TestClassificationQuery.java @@ -1,4 +1,4 @@ -package pro.taskana.impl.persistence; +package pro.taskana.impl; import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.model.Classification; diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/configuration/DBCleaner.java b/lib/taskana-core/src/test/java/pro/taskana/impl/configuration/DBCleaner.java index c80b79cf3..4e77f112b 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/configuration/DBCleaner.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/configuration/DBCleaner.java @@ -19,6 +19,7 @@ import pro.taskana.configuration.DbScriptRunner; public class DBCleaner { private static final Logger LOGGER = LoggerFactory.getLogger(DbScriptRunner.class); private static final String DB_CLEAR_SCRIPT = "/sql/clear-db.sql"; + private static final String DB_DROP_TABLES_SCRIPT = "/sql/drop-tables.sql"; private StringWriter outWriter = new StringWriter(); private PrintWriter logWriter = new PrintWriter(outWriter); @@ -28,21 +29,26 @@ public class DBCleaner { /** * Clears the db. + * @param dropTables if true drop tables, else clean tables * @throws SQLException */ - public void clearDb(DataSource dataSource) throws SQLException { - Connection connection = dataSource.getConnection(); - ScriptRunner runner = new ScriptRunner(connection); - LOGGER.debug(connection.getMetaData().toString()); + public void clearDb(DataSource dataSource, boolean dropTables) throws SQLException { + try (Connection connection = dataSource.getConnection()) { + ScriptRunner runner = new ScriptRunner(connection); + LOGGER.debug(connection.getMetaData().toString()); - runner.setStopOnError(true); - runner.setLogWriter(logWriter); - runner.setErrorLogWriter(errorLogWriter); - - runner.runScript(new InputStreamReader(this.getClass().getResourceAsStream(DB_CLEAR_SCRIPT))); - - runner.closeConnection(); + runner.setStopOnError(true); + runner.setLogWriter(logWriter); + runner.setErrorLogWriter(errorLogWriter); + if (dropTables) { + runner.runScript(new InputStreamReader(this.getClass().getResourceAsStream(DB_DROP_TABLES_SCRIPT))); + } else { + runner.runScript(new InputStreamReader(this.getClass().getResourceAsStream(DB_CLEAR_SCRIPT))); + } + } catch (Exception e) { + LOGGER.error("caught Exception " + e); + } LOGGER.debug(outWriter.toString()); if (!errorWriter.toString().trim().isEmpty()) { LOGGER.error(errorWriter.toString()); diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntAutoCommitTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntAutoCommitTest.java index b5f39487b..616dd772f 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntAutoCommitTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntAutoCommitTest.java @@ -13,6 +13,7 @@ import org.h2.store.fs.FileUtils; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import pro.taskana.ClassificationService; @@ -38,6 +39,12 @@ public class ClassificationServiceImplIntAutoCommitTest { private TaskanaEngine taskanaEngine; private TaskanaEngineImpl taskanaEngineImpl; + @BeforeClass + public static void resetDb() throws SQLException { + DataSource ds = TaskanaEngineConfigurationTest.getDataSource(); + DBCleaner cleaner = new DBCleaner(); + cleaner.clearDb(ds, true); + } @Before public void setup() throws FileNotFoundException, SQLException, LoginException { @@ -48,7 +55,7 @@ public class ClassificationServiceImplIntAutoCommitTest { taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine; taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT); DBCleaner cleaner = new DBCleaner(); - cleaner.clearDb(dataSource); + cleaner.clearDb(dataSource, false); } @Test diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntExplicitTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntExplicitTest.java index b7d099920..bf9e2894e 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntExplicitTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntExplicitTest.java @@ -15,6 +15,7 @@ import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import pro.taskana.ClassificationService; @@ -41,6 +42,12 @@ public class ClassificationServiceImplIntExplicitTest { private TaskanaEngine taskanaEngine; private TaskanaEngineImpl taskanaEngineImpl; + @BeforeClass + public static void resetDb() throws SQLException { + DataSource ds = TaskanaEngineConfigurationTest.getDataSource(); + DBCleaner cleaner = new DBCleaner(); + cleaner.clearDb(ds, true); + } @Before public void setup() throws FileNotFoundException, SQLException, LoginException { @@ -51,7 +58,7 @@ public class ClassificationServiceImplIntExplicitTest { taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine; taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.EXPLICIT); DBCleaner cleaner = new DBCleaner(); - cleaner.clearDb(dataSource); + cleaner.clearDb(dataSource, false); } @Test diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntAutocommitTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntAutocommitTest.java index 93884770c..915b04bb5 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntAutocommitTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntAutocommitTest.java @@ -11,6 +11,7 @@ import org.h2.store.fs.FileUtils; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import pro.taskana.TaskanaEngine; @@ -18,12 +19,12 @@ import pro.taskana.TaskanaEngine.ConnectionManagementMode; import pro.taskana.configuration.TaskanaEngineConfiguration; import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.TaskNotFoundException; +import pro.taskana.impl.ClassificationQueryImpl; +import pro.taskana.impl.ObjectReferenceQueryImpl; import pro.taskana.impl.TaskServiceImpl; import pro.taskana.impl.TaskanaEngineImpl; import pro.taskana.impl.configuration.DBCleaner; import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest; -import pro.taskana.impl.persistence.ClassificationQueryImpl; -import pro.taskana.impl.persistence.ObjectReferenceQueryImpl; import pro.taskana.impl.util.IdGenerator; import pro.taskana.model.Task; import pro.taskana.model.TaskState; @@ -42,6 +43,13 @@ public class TaskServiceImplIntAutocommitTest { private TaskanaEngine taskanaEngine; private TaskanaEngineImpl taskanaEngineImpl; + @BeforeClass + public static void resetDb() throws SQLException { + DataSource ds = TaskanaEngineConfigurationTest.getDataSource(); + DBCleaner cleaner = new DBCleaner(); + cleaner.clearDb(ds, true); + } + @Before public void setup() throws FileNotFoundException, SQLException, LoginException { dataSource = TaskanaEngineConfigurationTest.getDataSource(); @@ -52,7 +60,7 @@ public class TaskServiceImplIntAutocommitTest { taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT); taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService(); DBCleaner cleaner = new DBCleaner(); - cleaner.clearDb(dataSource); + cleaner.clearDb(dataSource, false); } @Test diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntExplicitTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntExplicitTest.java index a64dfdb19..c18c802c9 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntExplicitTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntExplicitTest.java @@ -13,6 +13,7 @@ import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import pro.taskana.TaskanaEngine; @@ -20,12 +21,12 @@ import pro.taskana.TaskanaEngine.ConnectionManagementMode; import pro.taskana.configuration.TaskanaEngineConfiguration; import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.TaskNotFoundException; +import pro.taskana.impl.ClassificationQueryImpl; +import pro.taskana.impl.ObjectReferenceQueryImpl; import pro.taskana.impl.TaskServiceImpl; import pro.taskana.impl.TaskanaEngineImpl; import pro.taskana.impl.configuration.DBCleaner; import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest; -import pro.taskana.impl.persistence.ClassificationQueryImpl; -import pro.taskana.impl.persistence.ObjectReferenceQueryImpl; import pro.taskana.impl.util.IdGenerator; import pro.taskana.model.Task; import pro.taskana.model.TaskState; @@ -44,6 +45,13 @@ public class TaskServiceImplIntExplicitTest { private TaskanaEngine taskanaEngine; private TaskanaEngineImpl taskanaEngineImpl; + @BeforeClass + public static void resetDb() throws SQLException { + DataSource ds = TaskanaEngineConfigurationTest.getDataSource(); + DBCleaner cleaner = new DBCleaner(); + cleaner.clearDb(ds, true); + } + @Before public void setup() throws FileNotFoundException, SQLException, LoginException { dataSource = TaskanaEngineConfigurationTest.getDataSource(); @@ -53,7 +61,7 @@ public class TaskServiceImplIntExplicitTest { taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine; taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.EXPLICIT); DBCleaner cleaner = new DBCleaner(); - cleaner.clearDb(dataSource); + cleaner.clearDb(dataSource, false); } @Test @@ -65,7 +73,7 @@ public class TaskServiceImplIntExplicitTest { String id1 = IdGenerator.generateWithPrefix("TWB"); task.setWorkbasketId(id1); task = taskServiceImpl.create(task); - taskanaEngineImpl.getSqlSession().commit(); // needed so that the change is visible in the other session + connection.commit(); // needed so that the change is visible in the other session TaskanaEngine te2 = taskanaEngineConfiguration.buildTaskanaEngine(); TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService(); diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntAutocommitTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntAutocommitTest.java index 34a948b3a..8560fe01d 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntAutocommitTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntAutocommitTest.java @@ -1,7 +1,19 @@ package pro.taskana.impl.integration; +import java.io.FileNotFoundException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import javax.security.auth.login.LoginException; +import javax.sql.DataSource; + import org.h2.store.fs.FileUtils; -import org.junit.*; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; import pro.taskana.TaskanaEngine; import pro.taskana.TaskanaEngine.ConnectionManagementMode; @@ -16,13 +28,6 @@ import pro.taskana.impl.util.IdGenerator; import pro.taskana.model.Workbasket; import pro.taskana.model.WorkbasketAccessItem; -import javax.security.auth.login.LoginException; -import javax.sql.DataSource; -import java.io.FileNotFoundException; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; - /** * Integration Test for workbasketServiceImpl with connection management mode AUTOCOMMIT. @@ -41,6 +46,13 @@ public class WorkbasketServiceImplIntAutocommitTest { private TaskanaEngineImpl taskanaEngineImpl; private WorkbasketService workBasketService; + @BeforeClass + public static void resetDb() throws SQLException { + DataSource ds = TaskanaEngineConfigurationTest.getDataSource(); + DBCleaner cleaner = new DBCleaner(); + cleaner.clearDb(ds, true); + } + @Before public void setup() throws FileNotFoundException, SQLException, LoginException { dataSource = TaskanaEngineConfigurationTest.getDataSource(); @@ -50,7 +62,7 @@ public class WorkbasketServiceImplIntAutocommitTest { taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT); workBasketService = taskanaEngine.getWorkbasketService(); DBCleaner cleaner = new DBCleaner(); - cleaner.clearDb(dataSource); + cleaner.clearDb(dataSource, false); } @Test @@ -206,11 +218,6 @@ public class WorkbasketServiceImplIntAutocommitTest { workBasketService.getWorkbasketAuthorization(accessItem.getId()).getAccessId()); } - @After - public void cleanUp() { - taskanaEngineImpl.returnConnection(); - } - @AfterClass public static void cleanUpClass() { FileUtils.deleteRecursive("~/data", true); diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntExplicitTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntExplicitTest.java index a954c69ce..27fc97d6a 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntExplicitTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntExplicitTest.java @@ -14,6 +14,7 @@ import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import pro.taskana.TaskanaEngine; @@ -47,6 +48,13 @@ public class WorkbasketServiceImplIntExplicitTest { private TaskanaEngineImpl taskanaEngineImpl; private WorkbasketService workBasketService; + @BeforeClass + public static void resetDb() throws SQLException { + DataSource ds = TaskanaEngineConfigurationTest.getDataSource(); + DBCleaner cleaner = new DBCleaner(); + cleaner.clearDb(ds, true); + } + @Before public void setup() throws FileNotFoundException, SQLException, LoginException { dataSource = TaskanaEngineConfigurationTest.getDataSource(); @@ -55,7 +63,7 @@ public class WorkbasketServiceImplIntExplicitTest { taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine; taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.EXPLICIT); DBCleaner cleaner = new DBCleaner(); - cleaner.clearDb(dataSource); + cleaner.clearDb(dataSource, false); } @Test diff --git a/lib/taskana-core/src/test/resources/sql/drop-tables.sql b/lib/taskana-core/src/test/resources/sql/drop-tables.sql new file mode 100644 index 000000000..7441b43f5 --- /dev/null +++ b/lib/taskana-core/src/test/resources/sql/drop-tables.sql @@ -0,0 +1,8 @@ +DROP TABLE TASKANA_SCHEMA_VERSION; +DROP TABLE TASK; +DROP TABLE WORKBASKET; +DROP TABLE DISTRIBUTION_TARGETS; +DROP TABLE CLASSIFICATION; +DROP TABLE WORKBASKET_ACCESS_LIST; +DROP TABLE OBJECT_REFERENCE; +COMMIT;