diff --git a/common/taskana-common-logging/pom.xml b/common/taskana-common-logging/pom.xml index 3dac43a3b..eecab98c1 100644 --- a/common/taskana-common-logging/pom.xml +++ b/common/taskana-common-logging/pom.xml @@ -45,8 +45,7 @@ org.mockito - ${version.mockito-inline} - mockito-inline + mockito-core test diff --git a/history/taskana-loghistory-provider/pom.xml b/history/taskana-loghistory-provider/pom.xml index f75d902de..c6529c887 100644 --- a/history/taskana-loghistory-provider/pom.xml +++ b/history/taskana-loghistory-provider/pom.xml @@ -59,8 +59,7 @@ org.mockito - ${version.mockito-inline} - mockito-inline + mockito-core test diff --git a/history/taskana-simplehistory-provider/pom.xml b/history/taskana-simplehistory-provider/pom.xml index b7205be7d..c2a2bccc1 100644 --- a/history/taskana-simplehistory-provider/pom.xml +++ b/history/taskana-simplehistory-provider/pom.xml @@ -66,8 +66,7 @@ org.mockito - ${version.mockito-inline} - mockito-inline + mockito-core test diff --git a/history/taskana-simplehistory-rest-spring/pom.xml b/history/taskana-simplehistory-rest-spring/pom.xml index 75be5376e..5d4db6d58 100644 --- a/history/taskana-simplehistory-rest-spring/pom.xml +++ b/history/taskana-simplehistory-rest-spring/pom.xml @@ -104,7 +104,7 @@ org.springframework.plugin spring-plugin-core - ${version.spring.core} + ${version.spring.plugin.core} test diff --git a/lib/taskana-cdi-example/pom.xml b/lib/taskana-cdi-example/pom.xml index 21346f922..f509cff79 100644 --- a/lib/taskana-cdi-example/pom.xml +++ b/lib/taskana-cdi-example/pom.xml @@ -19,12 +19,25 @@ + + + + org.wildfly.bom + wildfly-ee + ${version.wildfly} + import + pom + + + org.jboss.arquillian + arquillian-bom + ${version.arquillian} + import + pom + + + - - pro.taskana - taskana-common-logging - ${project.version} - jakarta.platform jakarta.jakartaee-api @@ -36,5 +49,171 @@ taskana-cdi ${project.version} + + + org.slf4j + jcl-over-slf4j + test + + + org.slf4j + slf4j-simple + test + + + org.assertj + assertj-core + ${version.assertj} + test + + + org.awaitility + awaitility + test + + + org.junit.jupiter + junit-jupiter + test + + + org.junit.vintage + junit-vintage-engine + test + + + jakarta.servlet + jakarta.servlet-api + test + + + com.h2database + h2 + test + + + org.jboss.arquillian.junit + arquillian-junit-container + test + + + org.jboss.shrinkwrap.resolver + shrinkwrap-resolver-impl-maven + test + + + org.jboss.shrinkwrap.resolver + shrinkwrap-resolver-api-maven + test + + + org.wildfly.arquillian + wildfly-arquillian-container-managed + ${version.arquillian.managed.wildfly} + test + + + + + + org.apache.maven.plugins + maven-dependency-plugin + ${version.maven.dependency} + + + unpack-wildfly + process-test-classes + + unpack + + + + + org.wildfly + wildfly-dist + ${version.wildfly} + zip + false + ${project.build.directory} + + + + + + copy-latest-h2-db-driver + process-test-classes + + copy + + + + + com.h2database + h2 + + ${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/com/h2database/h2/main + + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + ${version.maven.resources} + + + copy-h2-module-xml + process-test-classes + + copy-resources + + + + ${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/com/h2database/h2/main + + + + src/test/resources + + module.xml + + + + + + + copy-wildfly-config-xml + process-test-classes + + copy-resources + + + + ${project.build.directory}/wildfly-${version.wildfly}/standalone/configuration + + + + src/test/resources + + int-test-standalone.xml + + + + + + + + + + + + + jboss + https://repository.jboss.org/nexus/content/groups/public-jboss/ + + diff --git a/lib/taskana-cdi-example/src/main/java/pro/taskana/example/ExampleBootstrap.java b/lib/taskana-cdi-example/src/main/java/pro/taskana/example/ExampleBootstrap.java index d56886abe..2e8596855 100644 --- a/lib/taskana-cdi-example/src/main/java/pro/taskana/example/ExampleBootstrap.java +++ b/lib/taskana-cdi-example/src/main/java/pro/taskana/example/ExampleBootstrap.java @@ -1,57 +1,77 @@ package pro.taskana.example; -import jakarta.annotation.PostConstruct; -import jakarta.ejb.EJB; import jakarta.enterprise.context.ApplicationScoped; -import jakarta.enterprise.context.Initialized; import jakarta.enterprise.event.Observes; -import pro.taskana.classification.api.exceptions.ClassificationNotFoundException; -import pro.taskana.common.api.exceptions.InvalidArgumentException; -import pro.taskana.task.api.exceptions.AttachmentPersistenceException; -import pro.taskana.task.api.exceptions.InvalidOwnerException; -import pro.taskana.task.api.exceptions.InvalidTaskStateException; -import pro.taskana.task.api.exceptions.ObjectReferencePersistenceException; -import pro.taskana.task.api.exceptions.TaskAlreadyExistException; -import pro.taskana.task.api.exceptions.TaskNotFoundException; +import jakarta.enterprise.event.Startup; +import jakarta.inject.Inject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import pro.taskana.classification.api.models.Classification; +import pro.taskana.common.api.exceptions.TaskanaException; import pro.taskana.task.api.models.Task; import pro.taskana.task.internal.models.ObjectReferenceImpl; -import pro.taskana.workbasket.api.exceptions.NotAuthorizedOnWorkbasketException; -import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException; +import pro.taskana.workbasket.api.WorkbasketType; +import pro.taskana.workbasket.api.models.Workbasket; /** Example Bootstrap Application. */ @ApplicationScoped public class ExampleBootstrap { - @EJB private TaskanaEjb taskanaEjb; + private static final Logger LOGGER = LoggerFactory.getLogger(ExampleBootstrap.class); - @PostConstruct - public void init(@Observes @Initialized(ApplicationScoped.class) Object init) - throws TaskNotFoundException, - WorkbasketNotFoundException, - ClassificationNotFoundException, - InvalidOwnerException, - TaskAlreadyExistException, - InvalidArgumentException, - AttachmentPersistenceException, - ObjectReferencePersistenceException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException { - System.out.println("---------------------------> Start App"); - ObjectReferenceImpl objRef = new ObjectReferenceImpl(); - objRef.setCompany("aCompany"); - objRef.setSystem("aSystem"); - objRef.setSystemInstance("anInstance"); - objRef.setType("aType"); - objRef.setValue("aValue"); - Task task = taskanaEjb.getTaskService().newTask(null); - task.setPrimaryObjRef(objRef); - task = taskanaEjb.getTaskService().createTask(task); - System.out.println("---------------------------> Task started: " + task.getId()); - taskanaEjb.getTaskService().claim(task.getId()); - System.out.println( - "---------------------------> Task claimed: " - + taskanaEjb.getTaskService().getTask(task.getId()).getOwner()); - taskanaEjb.getTaskService().completeTask(task.getId()); - System.out.println("---------------------------> Task completed"); + private static final String CDIDOMAIN = "CDIDOMAIN"; + private static final String CLASSIFICATION_TYPE = "T1"; + + private final TaskanaEjb taskanaEjb; + + public ExampleBootstrap() { + this.taskanaEjb = null; + } + + @Inject + public ExampleBootstrap(TaskanaEjb taskanaEjb) { + this.taskanaEjb = taskanaEjb; + } + + /** + * The parameter `@Observes Startup` makes sure that the dependency injection framework calls this + * method on system startup. And to do that, it needs to call `@PostConstruct start()` first. + * + * @param startup just the startup event + * @throws ExampleStartupException in case of task creation fails + */ + public void init(@Observes Startup startup) throws ExampleStartupException { + try { + LOGGER.info("---------------------------> Start App -- {}", startup); + Workbasket workbasket = taskanaEjb.getWorkbasketService().newWorkbasket("KEY", CDIDOMAIN); + workbasket.setName("wb"); + workbasket.setType(WorkbasketType.PERSONAL); + workbasket = taskanaEjb.getWorkbasketService().createWorkbasket(workbasket); + Classification classification = + taskanaEjb + .getClassificationService() + .newClassification("TEST", CDIDOMAIN, CLASSIFICATION_TYPE); + taskanaEjb.getClassificationService().createClassification(classification); + ObjectReferenceImpl objRef = new ObjectReferenceImpl(); + objRef.setCompany("aCompany"); + objRef.setSystem("aSystem"); + objRef.setSystemInstance("anInstance"); + objRef.setType("aType"); + objRef.setValue("aValue"); + Task task = taskanaEjb.getTaskService().newTask(workbasket.getId()); + task.setClassificationKey(classification.getKey()); + task.setName("BootstrapTask"); + task.setPrimaryObjRef(objRef); + task = taskanaEjb.getTaskService().createTask(task); + LOGGER.info("---------------------------> Task started: {}", task.getId()); + taskanaEjb.getTaskService().claim(task.getId()); + LOGGER.info( + "---------------------------> Task claimed: {}", + taskanaEjb.getTaskService().getTask(task.getId()).getOwner()); + taskanaEjb.getTaskService().completeTask(task.getId()); + LOGGER.info("---------------------------> Task completed"); + } catch (TaskanaException e) { + throw new ExampleStartupException(e); + } } } diff --git a/lib/taskana-cdi-example/src/main/java/pro/taskana/example/ExampleStartupException.java b/lib/taskana-cdi-example/src/main/java/pro/taskana/example/ExampleStartupException.java new file mode 100644 index 000000000..80cc1ba1a --- /dev/null +++ b/lib/taskana-cdi-example/src/main/java/pro/taskana/example/ExampleStartupException.java @@ -0,0 +1,8 @@ +package pro.taskana.example; + +public class ExampleStartupException extends RuntimeException { + + public ExampleStartupException(Throwable cause) { + super("Can't bootstrap CDI example application", cause); + } +} diff --git a/lib/taskana-cdi-example/src/main/java/pro/taskana/example/TaskanaEjb.java b/lib/taskana-cdi-example/src/main/java/pro/taskana/example/TaskanaEjb.java index 72f294748..8c18e0b1e 100644 --- a/lib/taskana-cdi-example/src/main/java/pro/taskana/example/TaskanaEjb.java +++ b/lib/taskana-cdi-example/src/main/java/pro/taskana/example/TaskanaEjb.java @@ -2,15 +2,45 @@ package pro.taskana.example; import jakarta.ejb.Stateless; import jakarta.inject.Inject; +import pro.taskana.classification.api.ClassificationService; import pro.taskana.task.api.TaskService; +import pro.taskana.workbasket.api.WorkbasketService; /** example Taskana EJB. */ @Stateless public class TaskanaEjb { - @Inject private TaskService taskService; + private final TaskService taskService; + + private final ClassificationService classificationService; + + private final WorkbasketService workbasketService; + + public TaskanaEjb() { + this.taskService = null; + this.classificationService = null; + this.workbasketService = null; + } + + @Inject + public TaskanaEjb( + TaskService taskService, + ClassificationService classificationService, + WorkbasketService workbasketService) { + this.taskService = taskService; + this.classificationService = classificationService; + this.workbasketService = workbasketService; + } public TaskService getTaskService() { return taskService; } + + public ClassificationService getClassificationService() { + return classificationService; + } + + public WorkbasketService getWorkbasketService() { + return workbasketService; + } } diff --git a/lib/taskana-cdi-example/src/main/resources/META-INF/beans.xml b/lib/taskana-cdi-example/src/main/resources/META-INF/beans.xml new file mode 100644 index 000000000..3235afa2f --- /dev/null +++ b/lib/taskana-cdi-example/src/main/resources/META-INF/beans.xml @@ -0,0 +1,3 @@ + + \ No newline at end of file diff --git a/lib/taskana-cdi-example/src/main/resources/taskana.properties b/lib/taskana-cdi-example/src/main/resources/taskana.properties index 61c2f89cd..8c44c99cf 100644 --- a/lib/taskana-cdi-example/src/main/resources/taskana.properties +++ b/lib/taskana-cdi-example/src/main/resources/taskana.properties @@ -1 +1,19 @@ datasource.jndi=java:jboss/datasources/Taskana +taskana.domains=CDIDOMAIN +taskana.classification.types=T1 +taskana.classification.categories.T1=DEFAULT +# enable or disable the jobscheduler at all +# set it to false and no jobs are running +taskana.jobs.scheduler.enabled=true +# wait time before the first job run +taskana.jobs.scheduler.initialStartDelay=100 +# sleeping time befor the next job runs +taskana.jobs.scheduler.period=1 +# timeunit for the initial start delay and the sleeping period +# Possible values: MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS +taskana.jobs.scheduler.periodTimeUnit=HOURS +taskana.jobs.cleanup.task.enable=true +taskana.jobs.priority.task.enable=true +taskana.jobs.cleanup.workbasket.enable=true +taskana.jobs.refresh.user.enable=false +taskana.jobs.cleanup.history.simple.enable=false diff --git a/lib/taskana-cdi-example/src/main/webapp/META-INF/MANIFEST.MF b/lib/taskana-cdi-example/src/main/webapp/META-INF/MANIFEST.MF deleted file mode 100644 index 254272e1c..000000000 --- a/lib/taskana-cdi-example/src/main/webapp/META-INF/MANIFEST.MF +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -Class-Path: - diff --git a/lib/taskana-cdi-example/src/main/webapp/WEB-INF/beans.xml b/lib/taskana-cdi-example/src/main/webapp/WEB-INF/beans.xml deleted file mode 100644 index df8f4fd28..000000000 --- a/lib/taskana-cdi-example/src/main/webapp/WEB-INF/beans.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/lib/taskana-cdi-example/src/main/webapp/WEB-INF/web.xml b/lib/taskana-cdi-example/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index a0d739cc7..000000000 --- a/lib/taskana-cdi-example/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,4 +0,0 @@ - - \ No newline at end of file diff --git a/lib/taskana-cdi-example/src/test/java/pro/taskana/example/ExampleBootstrapTest.java b/lib/taskana-cdi-example/src/test/java/pro/taskana/example/ExampleBootstrapTest.java new file mode 100644 index 000000000..dd5612ffa --- /dev/null +++ b/lib/taskana-cdi-example/src/test/java/pro/taskana/example/ExampleBootstrapTest.java @@ -0,0 +1,111 @@ +package pro.taskana.example; + +import static org.awaitility.Awaitility.await; +import static org.awaitility.Durations.ONE_HUNDRED_MILLISECONDS; +import static org.awaitility.Durations.TWO_SECONDS; +import static org.hamcrest.CoreMatchers.equalTo; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import org.apache.commons.io.FileUtils; +import org.h2.jdbc.JdbcSQLNonTransientConnectionException; +import org.h2.jdbc.JdbcSQLSyntaxErrorException; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.EnterpriseArchive; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(Arquillian.class) +public class ExampleBootstrapTest { + + @Deployment(testable = false, order = 10) + public static Archive createDeployment() throws Exception { + EnterpriseArchive deployment = ShrinkWrap.create(EnterpriseArchive.class, "taskana.ear"); + + File[] libs = + Maven.resolver() + .loadPomFromFile("pom.xml") + .importCompileAndRuntimeDependencies() + .resolve() + .withTransitivity() + .asFile(); + deployment.addAsLibraries(libs); + + JavaArchive ejbModule = ShrinkWrap.create(JavaArchive.class, "taskana.jar"); + ejbModule.addClasses(TaskanaEjb.class, ExampleBootstrap.class, ExampleStartupException.class); + ejbModule.addAsResource("taskana.properties"); + deployment.addAsModule(ejbModule); + + deployment.addAsManifestResource("META-INF/beans.xml", "beans.xml"); + return deployment; + } + + @BeforeClass + public static void cleanTaskanaH2DataFolder() throws IOException { + // Delete Taskana folder if exists + Path taskanaH2Data = Path.of(System.getProperty("user.home"), "taskana-h2-data"); + if (Files.exists(taskanaH2Data)) { + FileUtils.deleteDirectory(taskanaH2Data.toFile()); + } + } + + @Test + public void should_count_tasks_after_example_cdi_application_was_deployed() throws Exception { + // this test method is started that fast that the commit + // from pro.taskana.example.ExampleBootstrap.init is not completed + // so we need to wait here a bit + // https://www.baeldung.com/awaitility-testing + await() + .atLeast(ONE_HUNDRED_MILLISECONDS) + .atMost(TWO_SECONDS) + .with() + .pollInterval(ONE_HUNDRED_MILLISECONDS) + .until( + () -> { + try { + return countTasksByName("BootstrapTask"); + } catch (JdbcSQLSyntaxErrorException | JdbcSQLNonTransientConnectionException e) { + // ignore this Exception, because in the beginning the schema is not created + return 0; + } + }, + equalTo(1)); + } + + private Connection getConnection() throws Exception { + return DriverManager.getConnection( + "jdbc:h2:~/taskana-h2-data/testdb;NON_KEYWORDS=KEY,VALUE;AUTO_SERVER=TRUE;" + + "IGNORECASE=TRUE;LOCK_MODE=0", + "sa", + ""); + } + + private int countTasksByName(String taskName) throws Exception { + + Class.forName("org.h2.Driver"); + int resultCount = 0; + try (Connection conn = getConnection(); + PreparedStatement statement = + conn.prepareStatement("SELECT COUNT(ID) FROM TASKANA.TASK WHERE NAME = ?")) { + statement.setString(1, taskName); + ResultSet rs = statement.executeQuery(); + + while (rs.next()) { + resultCount = rs.getInt(1); + } + } + return resultCount; + } +} diff --git a/lib/taskana-cdi-example/src/test/resources/arquillian.xml b/lib/taskana-cdi-example/src/test/resources/arquillian.xml new file mode 100644 index 000000000..3fcbf32bf --- /dev/null +++ b/lib/taskana-cdi-example/src/test/resources/arquillian.xml @@ -0,0 +1,19 @@ + + + + + target/wildfly-27.0.1.Final + int-test-standalone.xml + + + + + + -Djava.util.logging.manager=org.jboss.logmanager.LogManager + + + + \ No newline at end of file diff --git a/lib/taskana-cdi-example/src/test/resources/int-test-standalone.xml b/lib/taskana-cdi-example/src/test/resources/int-test-standalone.xml new file mode 100644 index 000000000..e08f36936 --- /dev/null +++ b/lib/taskana-cdi-example/src/test/resources/int-test-standalone.xml @@ -0,0 +1,673 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + h2 + + sa + + + + + + jdbc:h2:~/taskana-h2-data/testdb;NON_KEYWORDS=KEY,VALUE;AUTO_SERVER=TRUE;IGNORECASE=TRUE;LOCK_MODE=0 + + h2 + + sa + + + + + + org.h2.jdbcx.JdbcDataSource + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${jboss.bind.address:127.0.0.1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/taskana-cdi-example/src/test/resources/module.xml b/lib/taskana-cdi-example/src/test/resources/module.xml new file mode 100644 index 000000000..933f1e534 --- /dev/null +++ b/lib/taskana-cdi-example/src/test/resources/module.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/taskana-cdi/pom.xml b/lib/taskana-cdi/pom.xml index b638ea470..666f1280b 100644 --- a/lib/taskana-cdi/pom.xml +++ b/lib/taskana-cdi/pom.xml @@ -18,7 +18,7 @@ org.wildfly.bom - wildfly-jakartaee8 + wildfly-ee ${version.wildfly} import pom @@ -35,33 +35,14 @@ pro.taskana - taskana-common-logging + taskana-core ${project.version} jakarta.platform jakarta.jakartaee-api ${version.jakartaee-api} - - - jakarta.enterprise - jakarta.enterprise.cdi-api - ${version.jakarta.enterprise.cdi-api} - - - jakarta.annotation - jakarta.annotation-api - ${version.jakarta.annotation-api} - - - jakarta.inject - jakarta.inject-api - ${version.jakarta.inject-api} - - - pro.taskana - taskana-core - ${project.version} + provided @@ -119,7 +100,7 @@ org.wildfly.arquillian wildfly-arquillian-container-managed - 3.0.1.Final + ${version.arquillian.managed.wildfly} test @@ -195,6 +176,26 @@ + + copy-wildfly-config-xml + process-test-classes + + copy-resources + + + + ${project.build.directory}/wildfly-${version.wildfly}/standalone/configuration + + + + src/test/resources + + int-test-standalone.xml + + + + + @@ -203,7 +204,7 @@ jboss - http://repository.jboss.org/nexus/content/groups/public-jboss/ + https://repository.jboss.org/nexus/content/groups/public-jboss/ diff --git a/lib/taskana-cdi/src/main/java/pro/taskana/common/internal/TaskanaCdiStartupException.java b/lib/taskana-cdi/src/main/java/pro/taskana/common/internal/TaskanaCdiStartupException.java new file mode 100644 index 000000000..a4e716784 --- /dev/null +++ b/lib/taskana-cdi/src/main/java/pro/taskana/common/internal/TaskanaCdiStartupException.java @@ -0,0 +1,8 @@ +package pro.taskana.common.internal; + +public class TaskanaCdiStartupException extends RuntimeException { + + public TaskanaCdiStartupException(Throwable cause) { + super("Can't init TaskanaProducers", cause); + } +} diff --git a/lib/taskana-cdi/src/main/java/pro/taskana/common/internal/TaskanaProducers.java b/lib/taskana-cdi/src/main/java/pro/taskana/common/internal/TaskanaProducers.java index 76d499d13..5e475c1b6 100644 --- a/lib/taskana-cdi/src/main/java/pro/taskana/common/internal/TaskanaProducers.java +++ b/lib/taskana-cdi/src/main/java/pro/taskana/common/internal/TaskanaProducers.java @@ -2,6 +2,8 @@ package pro.taskana.common.internal; import jakarta.annotation.PostConstruct; import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.event.Observes; +import jakarta.enterprise.event.Startup; import jakarta.enterprise.inject.Produces; import jakarta.inject.Inject; import java.io.IOException; @@ -30,10 +32,31 @@ public class TaskanaProducers { private static final String TASKANA_PROPERTIES = "taskana.properties"; - @Inject private TaskanaEngine taskanaEngine; - + // initalized during post construct private TaskanaConfiguration taskanaConfiguration; + private final TaskanaEngine taskanaEngine; + + public TaskanaProducers() { + this.taskanaEngine = null; + } + + @Inject + public TaskanaProducers(TaskanaEngine taskanaEngine) { + this.taskanaEngine = taskanaEngine; + } + + /** + * The parameter `@Observes Startup` makes sure that the dependency injection framework calls this + * method on system startup. And to do that, it needs to call `@PostConstruct start()` first. + * + * @param startup just the startup event + */ + @SuppressWarnings("unused") + private void forceEagerInitialization(@Observes Startup startup) { + LOGGER.info("startup={}", startup); + } + @PostConstruct public void init() { // Load Properties and get Datasource via Context @@ -57,7 +80,7 @@ public class TaskanaProducers { .initTaskanaProperties() .build(); } catch (NamingException | SQLException | IOException e) { - LOGGER.error("Could not start Taskana: ", e); + throw new TaskanaCdiStartupException(e); } } diff --git a/lib/taskana-cdi/src/main/resources/META-INF/beans.xml b/lib/taskana-cdi/src/main/resources/META-INF/beans.xml index b02d9578c..3235afa2f 100644 --- a/lib/taskana-cdi/src/main/resources/META-INF/beans.xml +++ b/lib/taskana-cdi/src/main/resources/META-INF/beans.xml @@ -1,8 +1,3 @@ - - - + + \ No newline at end of file diff --git a/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaCdiTestRestController.java b/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaCdiTestRestController.java index 9f745e8a4..df06ea0be 100644 --- a/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaCdiTestRestController.java +++ b/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaCdiTestRestController.java @@ -1,6 +1,5 @@ package pro.taskana; -import jakarta.ejb.EJB; import jakarta.inject.Inject; import jakarta.ws.rs.DELETE; import jakarta.ws.rs.GET; @@ -24,9 +23,21 @@ public class TaskanaCdiTestRestController { private static final String CDIDOMAIN = "CDIDOMAIN"; private static final String CLASSIFICATION_TYPE = "T1"; - @EJB private TaskanaEjb taskanaEjb; + private final TaskanaEjb taskanaEjb; - @Inject private ClassificationService classificationService; + private final ClassificationService classificationService; + + public TaskanaCdiTestRestController() { + this.taskanaEjb = null; + this.classificationService = null; + } + + @Inject + public TaskanaCdiTestRestController( + TaskanaEjb taskanaEjb, ClassificationService classificationService) { + this.taskanaEjb = taskanaEjb; + this.classificationService = classificationService; + } @GET public Response startTask() throws Exception { diff --git a/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaEjb.java b/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaEjb.java index bc2822fd8..8d74d2c3a 100644 --- a/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaEjb.java +++ b/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaEjb.java @@ -11,11 +11,27 @@ import pro.taskana.workbasket.api.WorkbasketService; @Stateless public class TaskanaEjb { - @Inject private TaskService taskService; + private final TaskService taskService; - @Inject private ClassificationService classificationService; + private final ClassificationService classificationService; - @Inject private WorkbasketService workbasketService; + private final WorkbasketService workbasketService; + + public TaskanaEjb() { + this.taskService = null; + this.classificationService = null; + this.workbasketService = null; + } + + @Inject + public TaskanaEjb( + TaskService taskService, + ClassificationService classificationService, + WorkbasketService workbasketService) { + this.taskService = taskService; + this.classificationService = classificationService; + this.workbasketService = workbasketService; + } public TaskService getTaskService() { return taskService; diff --git a/lib/taskana-cdi/src/test/java/pro/taskana/common/internal/TaskanaProducersTest.java b/lib/taskana-cdi/src/test/java/pro/taskana/common/internal/TaskanaProducersTest.java index e438ef42c..7fad289d9 100644 --- a/lib/taskana-cdi/src/test/java/pro/taskana/common/internal/TaskanaProducersTest.java +++ b/lib/taskana-cdi/src/test/java/pro/taskana/common/internal/TaskanaProducersTest.java @@ -49,14 +49,15 @@ public class TaskanaProducersTest { File[] libs = Maven.resolver() .loadPomFromFile("pom.xml") - .importRuntimeAndTestDependencies() + .importCompileAndRuntimeDependencies() .resolve() .withTransitivity() .asFile(); deployment.addAsLibraries(libs); JavaArchive ejbModule = ShrinkWrap.create(JavaArchive.class, "taskana.jar"); - ejbModule.addClasses(TaskanaProducers.class, TaskanaEjb.class); + ejbModule.addClasses( + TaskanaProducers.class, TaskanaEjb.class, TaskanaCdiStartupException.class); ejbModule.addAsResource("taskana.properties"); deployment.addAsModule(ejbModule); diff --git a/lib/taskana-cdi/src/test/resources/arquillian.xml b/lib/taskana-cdi/src/test/resources/arquillian.xml index 909953c08..3fcbf32bf 100644 --- a/lib/taskana-cdi/src/test/resources/arquillian.xml +++ b/lib/taskana-cdi/src/test/resources/arquillian.xml @@ -2,22 +2,16 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> - + - target/wildfly-25.0.1.Final - ../../../../src/test/resources/int-test-standalone.xml - + target/wildfly-27.0.1.Final + int-test-standalone.xml - - - --add-opens java.base/java.util=ALL-UNNAMED - -Dh2.bindAddress=127.0.0.1 -Djava.util.logging.manager=org.jboss.logmanager.LogManager diff --git a/lib/taskana-cdi/src/test/resources/int-test-standalone.xml b/lib/taskana-cdi/src/test/resources/int-test-standalone.xml index ffdf2454c..356454a3c 100644 --- a/lib/taskana-cdi/src/test/resources/int-test-standalone.xml +++ b/lib/taskana-cdi/src/test/resources/int-test-standalone.xml @@ -1,6 +1,6 @@ - + - + @@ -12,7 +12,6 @@ - @@ -24,6 +23,7 @@ + @@ -95,6 +95,9 @@ + + + @@ -115,7 +118,7 @@ - + @@ -128,7 +131,7 @@ - + - + + + + + + @@ -209,7 +221,7 @@ managed-thread-factory="java:jboss/ee/concurrency/factory/default"/> - + @@ -233,13 +245,9 @@ - - + + - - - @@ -267,7 +275,7 @@ - @@ -416,31 +424,43 @@ - + - + - + + + + + + + + + + + + + - + + modules="org.wildfly.clustering.singleton.server"> @@ -464,10 +484,9 @@ - - + @@ -496,13 +515,12 @@ - - + - + @@ -555,12 +573,12 @@ - + - + @@ -581,10 +599,11 @@ statistics-enabled="${wildfly.transactions.statistics-enabled:${wildfly.statistics-enabled:false}}"/> - + - + diff --git a/lib/taskana-cdi/src/test/resources/module.xml b/lib/taskana-cdi/src/test/resources/module.xml index 6ef36ea27..933f1e534 100644 --- a/lib/taskana-cdi/src/test/resources/module.xml +++ b/lib/taskana-cdi/src/test/resources/module.xml @@ -1,13 +1,28 @@ - + - + - - - + + + + + + + + + + + + diff --git a/lib/taskana-core/pom.xml b/lib/taskana-core/pom.xml index 68c1846db..c7f9ae008 100644 --- a/lib/taskana-core/pom.xml +++ b/lib/taskana-core/pom.xml @@ -65,8 +65,7 @@ org.mockito - ${version.mockito-inline} - mockito-inline + mockito-core test diff --git a/lib/taskana-spring-example/src/main/java/pro/taskana/example/ExampleBootstrap.java b/lib/taskana-spring-example/src/main/java/pro/taskana/example/ExampleBootstrap.java index 1923b4e99..a32aea1e9 100644 --- a/lib/taskana-spring-example/src/main/java/pro/taskana/example/ExampleBootstrap.java +++ b/lib/taskana-spring-example/src/main/java/pro/taskana/example/ExampleBootstrap.java @@ -1,11 +1,14 @@ package pro.taskana.example; import jakarta.annotation.PostConstruct; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import pro.taskana.classification.api.models.Classification; import pro.taskana.common.api.TaskanaEngine; +import pro.taskana.common.api.exceptions.TaskanaException; import pro.taskana.task.api.TaskService; import pro.taskana.task.api.models.Task; import pro.taskana.task.internal.models.ObjectReferenceImpl; @@ -17,40 +20,52 @@ import pro.taskana.workbasket.api.models.Workbasket; @Transactional public class ExampleBootstrap { - @Autowired private TaskService taskService; + private static final Logger LOGGER = LoggerFactory.getLogger(ExampleBootstrap.class); - @Autowired private TaskanaEngine taskanaEngine; + private final TaskService taskService; + + private final TaskanaEngine taskanaEngine; + + public ExampleBootstrap( + @Autowired TaskService taskService, @Autowired TaskanaEngine taskanaEngine) { + this.taskService = taskService; + this.taskanaEngine = taskanaEngine; + } @PostConstruct - public void test() throws Exception { - System.out.println("---------------------------> Start App"); + public void postConstruct() throws Exception { + try { + LOGGER.info("---------------------------> Start App"); - Workbasket wb = taskanaEngine.getWorkbasketService().newWorkbasket("workbasket", "DOMAIN_A"); - wb.setName("workbasket"); - wb.setType(WorkbasketType.GROUP); - taskanaEngine.getWorkbasketService().createWorkbasket(wb); - Classification classification = - taskanaEngine.getClassificationService().newClassification("TEST", "DOMAIN_A", "TASK"); - classification.setServiceLevel("P1D"); - taskanaEngine.getClassificationService().createClassification(classification); + Workbasket wb = taskanaEngine.getWorkbasketService().newWorkbasket("workbasket", "DOMAIN_A"); + wb.setName("workbasket"); + wb.setType(WorkbasketType.GROUP); + taskanaEngine.getWorkbasketService().createWorkbasket(wb); + Classification classification = + taskanaEngine.getClassificationService().newClassification("TEST", "DOMAIN_A", "TASK"); + classification.setServiceLevel("P1D"); + taskanaEngine.getClassificationService().createClassification(classification); - Task task = taskanaEngine.getTaskService().newTask(wb.getId()); - task.setName("Spring example task"); - task.setClassificationKey(classification.getKey()); - ObjectReferenceImpl objRef = new ObjectReferenceImpl(); - objRef.setCompany("aCompany"); - objRef.setSystem("aSystem"); - objRef.setSystemInstance("anInstance"); - objRef.setType("aType"); - objRef.setValue("aValue"); - task.setPrimaryObjRef(objRef); - task = taskService.createTask(task); - System.out.println("---------------------------> Task started: " + task.getId()); - taskService.claim(task.getId()); - System.out.println( - "---------------------------> Task claimed: " - + taskService.getTask(task.getId()).getOwner()); - taskService.forceCompleteTask(task.getId()); - System.out.println("---------------------------> Task completed"); + Task task = taskanaEngine.getTaskService().newTask(wb.getId()); + task.setName("Spring example task"); + task.setClassificationKey(classification.getKey()); + ObjectReferenceImpl objRef = new ObjectReferenceImpl(); + objRef.setCompany("aCompany"); + objRef.setSystem("aSystem"); + objRef.setSystemInstance("anInstance"); + objRef.setType("aType"); + objRef.setValue("aValue"); + task.setPrimaryObjRef(objRef); + task = taskService.createTask(task); + LOGGER.info("---------------------------> Task started: {}", task.getId()); + taskService.claim(task.getId()); + LOGGER.info( + "---------------------------> Task claimed: {}", + taskService.getTask(task.getId()).getOwner()); + taskService.forceCompleteTask(task.getId()); + LOGGER.info("---------------------------> Task completed"); + } catch (TaskanaException e) { + throw new ExampleStartupException(e); + } } } diff --git a/lib/taskana-spring-example/src/main/java/pro/taskana/example/ExampleStartupException.java b/lib/taskana-spring-example/src/main/java/pro/taskana/example/ExampleStartupException.java new file mode 100644 index 000000000..6259f0850 --- /dev/null +++ b/lib/taskana-spring-example/src/main/java/pro/taskana/example/ExampleStartupException.java @@ -0,0 +1,8 @@ +package pro.taskana.example; + +public class ExampleStartupException extends RuntimeException { + + public ExampleStartupException(Throwable cause) { + super("Can't bootstrap Spring example application", cause); + } +} diff --git a/lib/taskana-spring-example/src/main/java/pro/taskana/example/TaskanaConfig.java b/lib/taskana-spring-example/src/main/java/pro/taskana/example/TaskanaConfig.java index e2c23c107..f66f315d2 100644 --- a/lib/taskana-spring-example/src/main/java/pro/taskana/example/TaskanaConfig.java +++ b/lib/taskana-spring-example/src/main/java/pro/taskana/example/TaskanaConfig.java @@ -96,8 +96,8 @@ public class TaskanaConfig { } @Bean - public ExampleBootstrap exampleBootstrap() { - return new ExampleBootstrap(); + public ExampleBootstrap exampleBootstrap(TaskService taskService, TaskanaEngine taskanaEngine) { + return new ExampleBootstrap(taskService, taskanaEngine); } @Profile("inmemorydb") diff --git a/lib/taskana-spring-example/src/test/java/pro/taskana/example/ExampleBootstrapTest.java b/lib/taskana-spring-example/src/test/java/pro/taskana/example/ExampleBootstrapTest.java new file mode 100644 index 000000000..75232d887 --- /dev/null +++ b/lib/taskana-spring-example/src/test/java/pro/taskana/example/ExampleBootstrapTest.java @@ -0,0 +1,41 @@ +package pro.taskana.example; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.ClassOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestClassOrder; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@ExtendWith(SpringExtension.class) +@SpringBootTest( + classes = TaskanaConfigTestApplication.class, + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles({"inmemorydb", "dev"}) +@Import({TransactionalJobsConfiguration.class}) +// This BootstrapTest must be executed before all other tests +// especially before TaskanaTransactionIntTest (There is everything deleted... +// here we only test the execution of PostConstruct method +@TestClassOrder(ClassOrderer.OrderAnnotation.class) +@Order(1) +class ExampleBootstrapTest { + + @Autowired private JdbcTemplate jdbcTemplate; + + @Test + void should_count_tasks_after_psotConstruc_method_was_executed() { + Integer actualNumberOfTasks = jdbcTemplate.queryForObject( + "SELECT COUNT(ID) FROM TASK WHERE NAME = ?", + Integer.class, + "Spring example task"); + + assertThat(actualNumberOfTasks).isEqualTo(1); + } +} diff --git a/lib/taskana-spring-example/src/test/java/pro/taskana/example/TaskanaTransactionIntTest.java b/lib/taskana-spring-example/src/test/java/pro/taskana/example/TaskanaTransactionIntTest.java index 9fdec444c..e6bf0f5f8 100644 --- a/lib/taskana-spring-example/src/test/java/pro/taskana/example/TaskanaTransactionIntTest.java +++ b/lib/taskana-spring-example/src/test/java/pro/taskana/example/TaskanaTransactionIntTest.java @@ -9,7 +9,10 @@ import java.util.List; import javax.sql.DataSource; import org.assertj.core.api.ThrowableAssert.ThrowingCallable; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.ClassOrderer; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestClassOrder; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -47,6 +50,8 @@ import pro.taskana.workbasket.internal.models.WorkbasketImpl; webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @ActiveProfiles({"inmemorydb", "dev"}) @Import({TransactionalJobsConfiguration.class}) +@TestClassOrder(ClassOrderer.OrderAnnotation.class) +@Order(2) class TaskanaTransactionIntTest { private static final String INTERNAL_SERVER_ERROR_MESSAGE = "Internal Server Error"; @@ -59,6 +64,7 @@ class TaskanaTransactionIntTest { @BeforeEach void before() { + JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.execute("DELETE FROM TASK"); jdbcTemplate.execute("DELETE FROM WORKBASKET"); diff --git a/lib/taskana-spring-example/src/test/resources/junit-platform.properties b/lib/taskana-spring-example/src/test/resources/junit-platform.properties new file mode 100644 index 000000000..b7f5acdc8 --- /dev/null +++ b/lib/taskana-spring-example/src/test/resources/junit-platform.properties @@ -0,0 +1,2 @@ +junit.jupiter.testclass.order.default=org.junit.jupiter.api.ClassOrderer$OrderAnnotation + diff --git a/lib/taskana-test-api/pom.xml b/lib/taskana-test-api/pom.xml index 2aacd5ca2..ce8a47934 100644 --- a/lib/taskana-test-api/pom.xml +++ b/lib/taskana-test-api/pom.xml @@ -35,8 +35,7 @@ org.mockito - ${version.mockito-inline} - mockito-inline + mockito-core org.testcontainers diff --git a/pom.xml b/pom.xml index 29114f9ed..055ee6d55 100644 --- a/pom.xml +++ b/pom.xml @@ -65,24 +65,21 @@ 2.1.1 - 3.0.0 + 3.0.0 3.1.5 - 2.1.1 + 3.0.2 - 25.0.1.Final + 27.0.1.Final 7.20.0 - 2.7.0.Final 10.0.0 - 4.0.1 - 2.0.1 6.0.0 - 1.5.0.Final - 3.0.1.Final + 1.7.1.Final + 5.0.1.Final 3.24.2 @@ -93,7 +90,6 @@ 3.0.1 2.0.11 1.19.0 - 5.2.0 1.14.0 @@ -101,9 +97,9 @@ 0.3.0 - 2.3.3 - 2.3.0.1 - 2.3.8 + 4.0.1 + 4.0.3 + 4.0.3 2.1.2 @@ -128,9 +124,12 @@ common lib - rest - + history + rest ci/taskana-sonar-test-coverage routing diff --git a/rest/taskana-rest-spring-example-common/pom.xml b/rest/taskana-rest-spring-example-common/pom.xml index acc226842..a0db7459e 100644 --- a/rest/taskana-rest-spring-example-common/pom.xml +++ b/rest/taskana-rest-spring-example-common/pom.xml @@ -50,7 +50,7 @@ org.springframework.plugin spring-plugin-core - ${version.spring.core} + ${version.spring.plugin.core} org.springframework.ldap diff --git a/rest/taskana-rest-spring-example-wildfly/pom.xml b/rest/taskana-rest-spring-example-wildfly/pom.xml index 91306e758..d7fcbf7d2 100644 --- a/rest/taskana-rest-spring-example-wildfly/pom.xml +++ b/rest/taskana-rest-spring-example-wildfly/pom.xml @@ -19,7 +19,7 @@ org.wildfly.bom - wildfly-jakartaee8 + wildfly-ee ${version.wildfly} import pom @@ -62,7 +62,7 @@ org.springframework.plugin spring-plugin-core - ${version.spring.core} + ${version.spring.plugin.core} jakarta.servlet @@ -218,6 +218,26 @@ + + copy-wildfly-config-xml + process-test-classes + + copy-resources + + + + ${project.build.directory}/wildfly-${version.wildfly}/standalone/configuration + + + + src/test/resources + + int-test-standalone.xml + + + + + copy-documentation-to-static-folder prepare-package @@ -245,7 +265,7 @@ jboss - http://repository.jboss.org/nexus/content/groups/public-jboss/ + https://repository.jboss.org/nexus/content/groups/public-jboss/ diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/AbstractAccTest.java b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/AbstractAccTest.java index d0a30ac9a..e7b049b6d 100644 --- a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/AbstractAccTest.java +++ b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/AbstractAccTest.java @@ -77,7 +77,7 @@ public class AbstractAccTest { protected String parseServerLog() throws Exception { // TO-DO: make log4j log into rollingFile from log4j.xml - File file = new File("target/wildfly-25.0.1.Final/standalone/log/server.log"); + File file = new File("target/wildfly-27.0.1.Final/standalone/log/server.log"); BufferedReader br = new BufferedReader(new FileReader(file)); diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyTest.java b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyTest.java index ea282f9e6..66baa4253 100644 --- a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyTest.java +++ b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyTest.java @@ -51,7 +51,7 @@ public class TaskanaWildflyTest extends AbstractAccTest { File[] files = Maven.resolver() .loadPomFromFile("pom.xml") - .importRuntimeDependencies() + .importCompileAndRuntimeDependencies() .resolve() .withTransitivity() .asFile(); diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithHistoryLoggerEnabledTest.java b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithHistoryLoggerEnabledTest.java index 791db072b..114b63cde 100644 --- a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithHistoryLoggerEnabledTest.java +++ b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithHistoryLoggerEnabledTest.java @@ -57,8 +57,7 @@ public class TaskanaWildflyWithHistoryLoggerEnabledTest extends AbstractAccTest File[] files = Maven.resolver() .loadPomFromFile("pom.xml") - .importRuntimeDependencies() - .addDependency(historyLoggerDependency) + .importCompileAndRuntimeDependencies() .resolve() .withTransitivity() .asFile(); diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabledTest.java b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabledTest.java index ac2e08ef2..c286e69a4 100644 --- a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabledTest.java +++ b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabledTest.java @@ -73,7 +73,7 @@ public class TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabledTest extends File[] files = Maven.resolver() .loadPomFromFile("pom.xml") - .importRuntimeDependencies() + .importCompileAndRuntimeDependencies() .addDependency(simpleHistoryDependency) .addDependency(historyLoggerDependency) .resolve() diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithSimpleHistoryEnabledTest.java b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithSimpleHistoryEnabledTest.java index 1224ef318..b97705bf2 100644 --- a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithSimpleHistoryEnabledTest.java +++ b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithSimpleHistoryEnabledTest.java @@ -55,14 +55,13 @@ public class TaskanaWildflyWithSimpleHistoryEnabledTest extends AbstractAccTest DEPENDENCY_VERSION, PackagingType.JAR, null); - MavenDependency simpleHistoryDependency = new MavenDependencyImpl(simpleHistoryCoordinate, ScopeType.TEST, false); File[] files = Maven.resolver() .loadPomFromFile("pom.xml") - .importRuntimeDependencies() + .importCompileAndRuntimeDependencies() .addDependency(simpleHistoryDependency) .resolve() .withTransitivity() diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithUserConfigTest.java b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithUserConfigTest.java index 44efb8e26..b38521ea2 100644 --- a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithUserConfigTest.java +++ b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/TaskanaWildflyWithUserConfigTest.java @@ -54,7 +54,7 @@ public class TaskanaWildflyWithUserConfigTest extends AbstractAccTest { File[] files = Maven.resolver() .loadPomFromFile("pom.xml") - .importRuntimeDependencies() + .importCompileAndRuntimeDependencies() .resolve() .withTransitivity() .asFile(); diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/resources/arquillian.xml b/rest/taskana-rest-spring-example-wildfly/src/test/resources/arquillian.xml index 1b3f293b7..10043bef1 100644 --- a/rest/taskana-rest-spring-example-wildfly/src/test/resources/arquillian.xml +++ b/rest/taskana-rest-spring-example-wildfly/src/test/resources/arquillian.xml @@ -2,24 +2,18 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> - - + + - target/wildfly-25.0.1.Final - ../../../../src/test/resources/int-test-standalone.xml - - - - - - - - + target/wildfly-27.0.1.Final + int-test-standalone.xml + + + + + - --add-opens java.base/java.util=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED - -Dh2.bindAddress=127.0.0.1 -Djava.util.logging.manager=org.jboss.logmanager.LogManager diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/resources/int-test-standalone.xml b/rest/taskana-rest-spring-example-wildfly/src/test/resources/int-test-standalone.xml index 3e2855a46..d0084b89f 100644 --- a/rest/taskana-rest-spring-example-wildfly/src/test/resources/int-test-standalone.xml +++ b/rest/taskana-rest-spring-example-wildfly/src/test/resources/int-test-standalone.xml @@ -1,6 +1,6 @@ - + - + @@ -12,7 +12,6 @@ - @@ -24,6 +23,7 @@ + @@ -168,7 +168,7 @@ - + @@ -181,7 +181,7 @@ - + - org.postgresql.Driver - + org.postgresql.Driver @@ -233,7 +232,16 @@ runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"/> - + + + + + + @@ -275,7 +283,7 @@ managed-thread-factory="java:jboss/ee/concurrency/factory/default"/> - + @@ -299,13 +307,9 @@ - - + + - - - @@ -333,7 +337,7 @@ - @@ -513,31 +517,43 @@ - + - + - + + + + + + + + + + + + + - + + modules="org.wildfly.clustering.singleton.server"> @@ -561,10 +577,9 @@ - - + @@ -593,13 +608,12 @@ - - + - + @@ -652,12 +666,12 @@ - + - + @@ -678,10 +692,11 @@ statistics-enabled="${wildfly.transactions.statistics-enabled:${wildfly.statistics-enabled:false}}"/> - + - @@ -702,7 +716,7 @@ + header-name="Server" header-value="WildFly/27"/> @@ -726,7 +740,7 @@ - + diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/resources/module.xml b/rest/taskana-rest-spring-example-wildfly/src/test/resources/module.xml index 6fb52c877..00aacf6e6 100644 --- a/rest/taskana-rest-spring-example-wildfly/src/test/resources/module.xml +++ b/rest/taskana-rest-spring-example-wildfly/src/test/resources/module.xml @@ -1,13 +1,15 @@ - + - - - - - - + - + + + + + + + + diff --git a/rest/taskana-rest-spring/pom.xml b/rest/taskana-rest-spring/pom.xml index c36bc5f7f..9464b502a 100644 --- a/rest/taskana-rest-spring/pom.xml +++ b/rest/taskana-rest-spring/pom.xml @@ -126,7 +126,7 @@ org.springframework.plugin spring-plugin-core - ${version.spring.core} + ${version.spring.plugin.core} test diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/task/rest/TaskController.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/task/rest/TaskController.java index afe334153..4f5b35b7d 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/task/rest/TaskController.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/task/rest/TaskController.java @@ -600,7 +600,7 @@ public class TaskController { if (!taskRepresentationModel.getAttachments().stream() .filter(att -> Objects.nonNull(att.getTaskId())) .filter(att -> !att.getTaskId().equals(taskRepresentationModel.getTaskId())) - .collect(Collectors.toList()) + .toList() .isEmpty()) { throw new InvalidArgumentException( "An attachments' taskId must be empty or equal to the id of the task it belongs to"); diff --git a/routing/taskana-routing-rest/pom.xml b/routing/taskana-routing-rest/pom.xml index 12d3c2da6..9f4e9ec3c 100644 --- a/routing/taskana-routing-rest/pom.xml +++ b/routing/taskana-routing-rest/pom.xml @@ -37,14 +37,14 @@ ${version.jakarta.xml.bind-api} - com.sun.xml.bind + org.glassfish.jaxb jaxb-core - ${version.jaxb-core} + ${version.glassfish-jaxb-core} - com.sun.xml.bind - jaxb-impl - ${version.jaxb-impl} + org.glassfish.jaxb + jaxb-runtime + ${version.glassfish-jaxb-runtime} jakarta.activation @@ -105,7 +105,7 @@ org.springframework.plugin spring-plugin-core - ${version.spring.core} + ${version.spring.plugin.core} test