TSK-1946: update to Spring Boot 2.7.8 (#1999)

* TSK-1946: H2 Update

* TSK-1946: add new run configurations

* TSK-1946: update to Spring Boot 2.7.3

Updated Spring Security Configs to new component-based configuration.
See https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

Co-authored-by: Marcel Bagemihl <marcel.bagemihl@novatec-gmbh.de>

* TSK-1946: wildfly now only starting postgres db

* TSK-1946: drop sup 4 sys prop db.type. We only execute PSQL

* TSK-1946: create new module 'taskana-rest-spring-test-lib' to simplify the Spring Security Configuration Setup for Spring Tests

* TSK-1946: H2 Update

* TSK-1946: add new run configurations

* TSK-1946: update to Spring Boot 2.7.3

Updated Spring Security Configs to new component-based configuration.
See https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

Co-authored-by: Marcel Bagemihl <marcel.bagemihl@novatec-gmbh.de>

* TSK-1946: wildfly now only starting postgres db

* TSK-1946: drop sup 4 sys prop db.type. We only execute PSQL

* TSK-1946: create new module 'taskana-rest-spring-test-lib' to simplify the Spring Security Configuration Setup for Spring Tests

* TSK-1946: update to Spring Boot 2.7.8

---------

Co-authored-by: Yakup Ensar Evli <54323073+ensarevlideveloper@users.noreply.github.com>
Co-authored-by: Mustapha Zorgati <15628173+mustaphazorgati@users.noreply.github.com>
Co-authored-by: Marcel Bagemihl <marcel.bagemihl@novatec-gmbh.de>
Co-authored-by: arolfes <arolfes@users.noreply.github.com>
This commit is contained in:
Norman Schmidt 2023-01-30 12:33:41 +01:00 committed by GitHub
parent 00be11caee
commit 48d85e0ee7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
118 changed files with 121149 additions and 11879 deletions

View File

@ -254,6 +254,7 @@ jobs:
- taskana-spi-routing-dmn-router - taskana-spi-routing-dmn-router
- taskana-routing-rest - taskana-routing-rest
- taskana-rest-spring - taskana-rest-spring
- taskana-rest-spring-test-lib
- taskana-rest-spring-example-common - taskana-rest-spring-example-common
- taskana-loghistory-provider - taskana-loghistory-provider
- taskana-simplehistory-provider - taskana-simplehistory-provider

View File

@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="All in taskana-core" type="JUnit" factoryName="JUnit" folderName="lib" nameIsGenerated="true"> <configuration default="false" name="All in taskana-core H2" type="JUnit" factoryName="JUnit" folderName="lib">
<module name="taskana-core" /> <module name="taskana-core" />
<option name="PACKAGE_NAME" value="" /> <option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" value="" /> <option name="MAIN_CLASS_NAME" value="" />

View File

@ -0,0 +1,21 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="All in taskana-core-test DB2" type="JUnit" factoryName="JUnit" folderName="lib">
<module name="taskana-core-test" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="pro.taskana.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="package" />
<envs>
<env name="DB" value="DB2" />
</envs>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>

View File

@ -0,0 +1,18 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="All in taskana-core-test H2" type="JUnit" factoryName="JUnit" folderName="lib">
<module name="taskana-core-test" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="pro.taskana.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="package" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>

View File

@ -0,0 +1,21 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="All in taskana-core-test POSTGRES" type="JUnit" factoryName="JUnit" folderName="lib">
<module name="taskana-core-test" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="pro.taskana.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="package" />
<envs>
<env name="DB" value="POSTGRES" />
</envs>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>

View File

@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="All in taskana-simplehistory-provider" type="JUnit" factoryName="JUnit" folderName="history" nameIsGenerated="true"> <configuration default="false" name="All in taskana-simplehistory-provider H2" type="JUnit" factoryName="JUnit" folderName="history">
<module name="taskana-simplehistory-provider" /> <module name="taskana-simplehistory-provider" />
<option name="PACKAGE_NAME" value="" /> <option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" value="" /> <option name="MAIN_CLASS_NAME" value="" />

View File

@ -76,6 +76,11 @@
<artifactId>taskana-rest-spring</artifactId> <artifactId>taskana-rest-spring</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-rest-spring-test-lib</artifactId>
<version>${project.version}</version>
</dependency>
<dependency> <dependency>
<groupId>pro.taskana</groupId> <groupId>pro.taskana</groupId>
<artifactId>taskana-routing-rest</artifactId> <artifactId>taskana-routing-rest</artifactId>

View File

@ -11,7 +11,8 @@ import pro.taskana.common.internal.configuration.DbSchemaCreator;
class SampleDataGeneratorTest { class SampleDataGeneratorTest {
private static final String JDBC_URL = private static final String JDBC_URL =
"jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0;INIT=CREATE SCHEMA IF NOT EXISTS TASKANA"; "jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;"
+ "IGNORECASE=TRUE;LOCK_MODE=0;INIT=CREATE SCHEMA IF NOT EXISTS TASKANA";
@Test @Test
void getScriptsValidSql() { void getScriptsValidSql() {

View File

@ -63,7 +63,7 @@ public final class DataSourceGenerator {
private static DataSource createDataSourceForH2() { private static DataSource createDataSourceForH2() {
String jdbcDriver = "org.h2.Driver"; String jdbcDriver = "org.h2.Driver";
String jdbcUrl = String jdbcUrl =
"jdbc:h2:mem:taskana;LOCK_MODE=0;" "jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;LOCK_MODE=0;"
+ "INIT=CREATE SCHEMA IF NOT EXISTS TASKANA\\;" + "INIT=CREATE SCHEMA IF NOT EXISTS TASKANA\\;"
+ "SET COLLATION DEFAULT_de_DE "; + "SET COLLATION DEFAULT_de_DE ";
String dbUserName = "sa"; String dbUserName = "sa";

View File

@ -60,7 +60,7 @@
<!-- test dependencies --> <!-- test dependencies -->
<dependency> <dependency>
<groupId>pro.taskana</groupId> <groupId>pro.taskana</groupId>
<artifactId>taskana-common-test</artifactId> <artifactId>taskana-rest-spring-test-lib</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>

View File

@ -1,79 +0,0 @@
package pro.taskana.simplehistory.rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter;
import pro.taskana.common.rest.SpringSecurityToJaasFilter;
@EnableWebSecurity
// this class is copied from taskana-rest-spring.
// We can't move it to taskana-common-test because we use the SpringSecurityToJaasFilter
// which is declared in taskana-rest-spring
public class HistoryWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
private final LdapAuthoritiesPopulator ldapAuthoritiesPopulator;
private final GrantedAuthoritiesMapper grantedAuthoritiesMapper;
private final String ldapServerUrl;
private final String ldapBaseDn;
private final String ldapGroupSearchBase;
private final String ldapUserDnPatterns;
@Autowired
public HistoryWebSecurityConfigurer(
@Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl,
@Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.userDnPatterns:uid={0},cn=users}") String ldapUserDnPatterns,
LdapAuthoritiesPopulator ldapAuthoritiesPopulator,
GrantedAuthoritiesMapper grantedAuthoritiesMapper) {
this.ldapServerUrl = ldapServerUrl;
this.ldapBaseDn = ldapBaseDn;
this.ldapGroupSearchBase = ldapGroupSearchBase;
this.ldapUserDnPatterns = ldapUserDnPatterns;
this.ldapAuthoritiesPopulator = ldapAuthoritiesPopulator;
this.grantedAuthoritiesMapper = grantedAuthoritiesMapper;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userDnPatterns(ldapUserDnPatterns)
.groupSearchBase(ldapGroupSearchBase)
.ldapAuthoritiesPopulator(ldapAuthoritiesPopulator)
.authoritiesMapper(grantedAuthoritiesMapper)
.contextSource()
.url(ldapServerUrl + "/" + ldapBaseDn)
.and()
.passwordCompare()
.passwordAttribute("userPassword");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.and()
.csrf()
.disable()
.httpBasic()
.and()
.addFilter(jaasApiIntegrationFilter())
.addFilterAfter(new SpringSecurityToJaasFilter(), JaasApiIntegrationFilter.class)
.authorizeRequests()
.anyRequest()
.fullyAuthenticated();
}
private JaasApiIntegrationFilter jaasApiIntegrationFilter() {
JaasApiIntegrationFilter filter = new JaasApiIntegrationFilter();
filter.setCreateEmptySubject(true);
return filter;
}
}

View File

@ -3,7 +3,7 @@ package pro.taskana.simplehistory.rest;
import static java.lang.String.CASE_INSENSITIVE_ORDER; import static java.lang.String.CASE_INSENSITIVE_ORDER;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE; import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
@ -25,8 +25,8 @@ import org.springframework.web.client.HttpStatusCodeException;
import org.springframework.web.util.UriComponentsBuilder; import org.springframework.web.util.UriComponentsBuilder;
import pro.taskana.common.rest.models.PageMetadata; import pro.taskana.common.rest.models.PageMetadata;
import pro.taskana.common.test.rest.RestHelper; import pro.taskana.rest.test.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.simplehistory.rest.models.TaskHistoryEventPagedRepresentationModel; import pro.taskana.simplehistory.rest.models.TaskHistoryEventPagedRepresentationModel;
import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel; import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel;

View File

@ -5,7 +5,7 @@ import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuild
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import pro.taskana.common.test.BaseRestDocTest; import pro.taskana.rest.test.BaseRestDocTest;
class TaskHistoryEventControllerRestDocTest extends BaseRestDocTest { class TaskHistoryEventControllerRestDocTest extends BaseRestDocTest {

View File

@ -6,7 +6,7 @@ import java.time.Instant;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel; import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel;
import pro.taskana.spi.history.api.events.task.TaskHistoryCustomField; import pro.taskana.spi.history.api.events.task.TaskHistoryCustomField;
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent; import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;

View File

@ -1,7 +1,11 @@
logging.level.pro.taskana=INFO logging.level.pro.taskana=INFO
taskana.schemaName=TASKANA
spring.main.allow-bean-definition-overriding=true spring.main.allow-bean-definition-overriding=true
######## Taskana DB #######
spring.datasource.url=jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;LOCK_MODE=0
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=sa
taskana.schemaName=TASKANA
####### Properties for AccessIdController to connect to LDAP ####### Properties for AccessIdController to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:10389 taskana.ldap.serverUrl=ldap://localhost:10389
taskana.ldap.bindDn=uid=admin taskana.ldap.bindDn=uid=admin
@ -29,7 +33,6 @@ taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3 taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50 taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=memberUid taskana.ldap.groupsOfUser=memberUid
# Embedded Spring LDAP server # Embedded Spring LDAP server
spring.ldap.embedded.base-dn=OU=Test,O=TASKANA spring.ldap.embedded.base-dn=OU=Test,O=TASKANA
spring.ldap.embedded.credential.username=uid=admin spring.ldap.embedded.credential.username=uid=admin

View File

@ -75,7 +75,8 @@ public class TaskanaProducersTest {
private Connection getConnection() throws Exception { private Connection getConnection() throws Exception {
return DriverManager.getConnection( return DriverManager.getConnection(
"jdbc:h2:~/taskana-h2-data/testdb;AUTO_SERVER=TRUE;IGNORECASE=TRUE;LOCK_MODE=0", "jdbc:h2:~/taskana-h2-data/testdb;NON_KEYWORDS=KEY,VALUE;AUTO_SERVER=TRUE;"
+ "IGNORECASE=TRUE;LOCK_MODE=0",
"SA", "SA",
"SA"); "SA");
} }

View File

@ -5,7 +5,7 @@ swarm:
data-sources: data-sources:
TestDS: TestDS:
driver-name: myh2 driver-name: myh2
connection-url: jdbc:h2:~/taskana-h2-data/testdb;AUTO_SERVER=TRUE;IGNORECASE=TRUE;LOCK_MODE=0 connection-url: jdbc:h2:~/taskana-h2-data/testdb;NON_KEYWORDS=KEY,VALUE;AUTO_SERVER=TRUE;IGNORECASE=TRUE;LOCK_MODE=0
user-name: SA user-name: SA
password: SA password: SA
jdbc-drivers: jdbc-drivers:
@ -13,3 +13,4 @@ swarm:
driver-class-name: org.h2.Driver driver-class-name: org.h2.Driver
xa-datasource-name: org.h2.jdbcx.JdbcDataSource xa-datasource-name: org.h2.jdbcx.JdbcDataSource
driver-module-name: com.h2database.h2 driver-module-name: com.h2database.h2

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -5832,15 +5832,15 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\ - Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\
- Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\ - Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\
- Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\ - Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:111)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:112)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:116)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:120)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:118)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:134)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:121)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:138)\ - Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:137)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:157)\ - Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:141)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:173)\ - Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:160)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:181)\ - Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:176)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:184)\
5. Dependencies of Slice common.internal\ 5. Dependencies of Slice common.internal\
- Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> calls constructor <pro.taskana.classification.internal.ClassificationServiceImpl.<init>(pro.taskana.common.internal.InternalTaskanaEngine, pro.taskana.spi.priority.internal.PriorityServiceManager, pro.taskana.classification.internal.ClassificationMapper, pro.taskana.task.internal.TaskMapper)> in (TaskanaEngineImpl.java:185)\ - Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> calls constructor <pro.taskana.classification.internal.ClassificationServiceImpl.<init>(pro.taskana.common.internal.InternalTaskanaEngine, pro.taskana.spi.priority.internal.PriorityServiceManager, pro.taskana.classification.internal.ClassificationMapper, pro.taskana.task.internal.TaskMapper)> in (TaskanaEngineImpl.java:185)\
- Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> references class object <pro.taskana.classification.internal.ClassificationMapper> in (TaskanaEngineImpl.java:188)\ - Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> references class object <pro.taskana.classification.internal.ClassificationMapper> in (TaskanaEngineImpl.java:188)\
@ -5892,7 +5892,7 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\ - Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\ - Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:171)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:172)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\
@ -5905,27 +5905,27 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:358)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:359)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:360)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:366)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:381)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:370)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:389)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:382)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:393)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:390)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:396)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:394)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:397)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:404)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:405)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:406)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:409)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:410)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:417)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:418)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:419)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:420)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:422)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:423)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\
@ -5949,9 +5949,9 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:620)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:621)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:624)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:625)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:634)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:635)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\
@ -6279,15 +6279,15 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\ - Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\
- Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\ - Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\
- Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\ - Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:111)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:112)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:116)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:120)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:118)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:134)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:121)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:138)\ - Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:137)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:157)\ - Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:141)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:173)\ - Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:160)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:181)\ - Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:176)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:184)\
6. Dependencies of Slice common.internal\ 6. Dependencies of Slice common.internal\
- Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> calls constructor <pro.taskana.classification.internal.ClassificationServiceImpl.<init>(pro.taskana.common.internal.InternalTaskanaEngine, pro.taskana.spi.priority.internal.PriorityServiceManager, pro.taskana.classification.internal.ClassificationMapper, pro.taskana.task.internal.TaskMapper)> in (TaskanaEngineImpl.java:185)\ - Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> calls constructor <pro.taskana.classification.internal.ClassificationServiceImpl.<init>(pro.taskana.common.internal.InternalTaskanaEngine, pro.taskana.spi.priority.internal.PriorityServiceManager, pro.taskana.classification.internal.ClassificationMapper, pro.taskana.task.internal.TaskMapper)> in (TaskanaEngineImpl.java:185)\
- Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> references class object <pro.taskana.classification.internal.ClassificationMapper> in (TaskanaEngineImpl.java:188)\ - Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> references class object <pro.taskana.classification.internal.ClassificationMapper> in (TaskanaEngineImpl.java:188)\
@ -6342,7 +6342,7 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\ - Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\ - Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:171)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:172)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\
@ -6355,27 +6355,27 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:358)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:359)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:360)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:366)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:381)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:370)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:389)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:382)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:393)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:390)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:396)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:394)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:397)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:404)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:405)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:406)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:409)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:410)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:417)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:418)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:419)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:420)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:422)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:423)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\
@ -6399,9 +6399,9 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:620)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:621)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:624)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:625)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:634)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:635)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\
@ -6742,15 +6742,15 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\ - Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\
- Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\ - Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\
- Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\ - Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:111)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:112)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:116)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:120)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:118)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:134)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:121)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:138)\ - Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:137)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:157)\ - Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:141)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:173)\ - Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:160)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:181)\ - Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:176)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:184)\
4. Dependencies of Slice common.internal\ 4. Dependencies of Slice common.internal\
- Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> calls constructor <pro.taskana.classification.internal.ClassificationServiceImpl.<init>(pro.taskana.common.internal.InternalTaskanaEngine, pro.taskana.spi.priority.internal.PriorityServiceManager, pro.taskana.classification.internal.ClassificationMapper, pro.taskana.task.internal.TaskMapper)> in (TaskanaEngineImpl.java:185)\ - Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> calls constructor <pro.taskana.classification.internal.ClassificationServiceImpl.<init>(pro.taskana.common.internal.InternalTaskanaEngine, pro.taskana.spi.priority.internal.PriorityServiceManager, pro.taskana.classification.internal.ClassificationMapper, pro.taskana.task.internal.TaskMapper)> in (TaskanaEngineImpl.java:185)\
- Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> references class object <pro.taskana.classification.internal.ClassificationMapper> in (TaskanaEngineImpl.java:188)\ - Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> references class object <pro.taskana.classification.internal.ClassificationMapper> in (TaskanaEngineImpl.java:188)\
@ -6801,7 +6801,7 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\ - Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\ - Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:171)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:172)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\
@ -6814,27 +6814,27 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:358)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:359)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:360)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:366)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:381)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:370)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:389)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:382)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:393)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:390)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:396)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:394)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:397)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:404)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:405)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:406)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:409)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:410)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:417)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:418)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:419)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:420)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:422)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:423)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\
@ -6858,9 +6858,9 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:620)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:621)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:624)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:625)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:634)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:635)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\
@ -17582,15 +17582,15 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\ - Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\
- Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\ - Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\
- Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\ - Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:111)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:112)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:116)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:120)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:118)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:134)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:121)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:138)\ - Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:137)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:157)\ - Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:141)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:173)\ - Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:160)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:181) - Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:176)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:184)
Cycle detected: Slice common.internal -> \ Cycle detected: Slice common.internal -> \
Slice task.internal -> \ Slice task.internal -> \
Slice workbasket.internal -> \ Slice workbasket.internal -> \
@ -17644,7 +17644,7 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\ - Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\ - Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:171)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:172)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\
@ -17657,27 +17657,27 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:358)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:359)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:360)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:366)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:381)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:370)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:389)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:382)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:393)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:390)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:396)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:394)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:397)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:404)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:405)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:406)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:409)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:410)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:417)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:418)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:419)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:420)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:422)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:423)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\
@ -17701,9 +17701,9 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:620)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:621)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:624)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:625)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:634)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:635)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\
@ -17759,15 +17759,15 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\ - Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\
- Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\ - Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\
- Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\ - Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:111)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:112)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:116)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:120)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:118)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:134)\ - Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:121)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:138)\ - Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:137)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:157)\ - Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:141)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:173)\ - Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:160)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:181) - Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:176)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:184)
Cycle detected: Slice common.internal -> \ Cycle detected: Slice common.internal -> \
Slice workbasket.internal -> \ Slice workbasket.internal -> \
Slice common.internal\ Slice common.internal\
@ -17809,7 +17809,7 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\ - Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\ - Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:171)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:172)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\
@ -17822,27 +17822,27 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:358)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:359)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:360)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:366)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:381)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:370)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:389)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:382)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:393)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:390)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:396)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:394)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:397)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:404)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:405)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:406)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:409)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:410)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:417)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:418)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:419)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:420)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:422)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:423)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\
@ -17866,9 +17866,9 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:620)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:621)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:624)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:625)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:634)\ - Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:635)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\ - Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\

View File

@ -0,0 +1,24 @@
Method <acceptance.PojoTest.equalsContract()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:39)
Method <acceptance.PojoTest.testsThatPojoClassesAreFound()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:34)
Method <acceptance.PojoTest.validateGetAndSet()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:70)
Method <acceptance.PojoTest.validateGetters()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:49)
Method <acceptance.PojoTest.validateNoPublicFields()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:90)
Method <acceptance.PojoTest.validateNoStaticExceptFinalFields()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:80)
Method <acceptance.PojoTest.validateSetters()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:59)
Method <acceptance.classification.create.CreateClassificationAccTest.should_ThrowException_TryingToCreateClassificationWithExplicitId()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateClassificationAccTest.java:250)
Method <acceptance.classification.create.CreateClassificationAccTest.should_ThrowException_TryingToCreateClassificationWithInvalidCategory()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateClassificationAccTest.java:211)
Method <acceptance.classification.create.CreateClassificationAccTest.should_ThrowException_TryingToCreateClassificationWithInvalidParentId()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateClassificationAccTest.java:238)
Method <acceptance.classification.create.CreateClassificationAccTest.should_ThrowException_TryingToCreateClassificationWithInvalidParentKey()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateClassificationAccTest.java:226)
Method <acceptance.classification.create.CreateClassificationAccTest.should_ThrowException_TryingToCreateClassificationWithInvalidType()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateClassificationAccTest.java:197)
Method <acceptance.jobs.helper.TaskUpdatePriorityWorkerAccTest$WithSpi.should_executeBatch()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (TaskUpdatePriorityWorkerAccTest.java:145)
Method <acceptance.jobs.helper.TaskUpdatePriorityWorkerAccTest.should_loadAnyRelevantTaskIds()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (TaskUpdatePriorityWorkerAccTest.java:87)
Method <acceptance.jobs.helper.TaskUpdatePriorityWorkerAccTest.should_loadExistingTaskIds()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (TaskUpdatePriorityWorkerAccTest.java:97)
Method <acceptance.jobs.helper.TaskUpdatePriorityWorkerAccTest.should_notLoadAnyIrrelevantTaskIds()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (TaskUpdatePriorityWorkerAccTest.java:108)
Method <acceptance.jobs.helper.TaskUpdatePriorityWorkerAccTest.should_noticeDifferentPriority_When_PriorityHasChanged()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (TaskUpdatePriorityWorkerAccTest.java:117)
Method <acceptance.task.create.CreateTaskWithSorAccTest.should_copyObjectReferences_When_DuplicatingTask()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateTaskWithSorAccTest.java:136)
Method <acceptance.task.create.CreateTaskWithSorAccTest.should_createObjectReferences_When_CreatingTask()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateTaskWithSorAccTest.java:68)
Method <acceptance.task.update.UpdateManualPriorityAccTest.should_setPriorityAccordingToClassification_When_NegativeManualPriority()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (UpdateManualPriorityAccTest.java:77)
Method <acceptance.task.update.UpdateManualPriorityAccTest.should_setPriorityToManualPriority_When_PositiveManualPriority()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (UpdateManualPriorityAccTest.java:65)
Method <acceptance.task.update.UpdateManualPriorityWithSpiAccTest$UpdateManualPriorityTest.should_setPriorityToManualAndNotUpdateAccordingToSpi_When_ManualPriorityPositive()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (UpdateManualPriorityWithSpiAccTest.java:87)
Method <acceptance.task.update.UpdateManualPriorityWithSpiAccTest$UpdateManualPriorityTest.should_setPriorityUsingSpi_When_ManualPriorityNegative()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (UpdateManualPriorityWithSpiAccTest.java:101)
Method <acceptance.taskpreprocessing.CreateTaskPreprocessingAccTest.should_processTaskBeforeCreation_When_CreateTaskPreprocessorEnabled()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateTaskPreprocessingAccTest.java:61)

View File

@ -1,6 +1,6 @@
# #
#Tue Oct 25 17:18:51 CEST 2022 #Sat Jan 28 10:53:15 CET 2023
slices\ matching\ 'pro.taskana.(**)'\ should\ be\ free\ of\ cycles=9652a208-0dfc-428f-9436-b7d5b718e2c1 slices\ matching\ 'pro.taskana.(**)'\ should\ be\ free\ of\ cycles=9e212b8e-ebae-4b84-83eb-0b18b9f8a8f3
methods\ that\ are\ annotated\ with\ @Test\ or\ annotated\ with\ @TestFactory\ or\ annotated\ with\ @TestTemplate\ and\ are\ not\ declared\ in\ acceptance.ArchitectureTest\ should\ be\ package\ private\ and\ should\ have\ name\ matching\ '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$'=974cd44c-bceb-4997-a1c3-18cb011ca438 methods\ that\ are\ annotated\ with\ @Test\ or\ annotated\ with\ @TestFactory\ or\ annotated\ with\ @TestTemplate\ and\ are\ not\ declared\ in\ acceptance.ArchitectureTest\ should\ be\ package\ private\ and\ should\ have\ name\ matching\ '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$'=74deb6a1-c507-47a1-b135-9308e42f4e71
slices\ assigned\ from\ every\ single\ class\ should\ be\ free\ of\ cycles=a54262d1-6fd5-453c-bef4-7481fef02511 slices\ assigned\ from\ every\ single\ class\ should\ be\ free\ of\ cycles=978ec381-cf0f-43f8-81ae-72f353d6ada3
no\ classes\ should\ use\ field\ injection,\ because\ field\ injection\ is\ considered\ harmful;\ use\ constructor\ injection\ or\ setter\ injection\ instead;\ see\ https\://stackoverflow.com/q/39890849\ for\ detailed\ explanations=e480c7e3-4001-4306-9859-39636786785d no\ classes\ should\ use\ field\ injection,\ because\ field\ injection\ is\ considered\ harmful;\ use\ constructor\ injection\ or\ setter\ injection\ instead;\ see\ https\://stackoverflow.com/q/39890849\ for\ detailed\ explanations=382817ff-573d-4d20-9597-c425d2698970

View File

@ -226,7 +226,8 @@ public class TaskanaEngineConfiguration {
public static DataSource createDefaultDataSource() { public static DataSource createDefaultDataSource() {
String driverClass = "org.h2.Driver"; String driverClass = "org.h2.Driver";
String jdbcUrl = String jdbcUrl =
"jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0;" "jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;"
+ "IGNORECASE=TRUE;LOCK_MODE=0;"
+ "INIT=CREATE SCHEMA IF NOT EXISTS TASKANA\\;" + "INIT=CREATE SCHEMA IF NOT EXISTS TASKANA\\;"
+ "SET COLLATION DEFAULT_de_DE"; + "SET COLLATION DEFAULT_de_DE";
String username = "sa"; String username = "sa";

View File

@ -30,9 +30,6 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
"pro.taskana.workbasket.internal.WorkbasketQueryMapper.countQueryWorkbaskets"; "pro.taskana.workbasket.internal.WorkbasketQueryMapper.countQueryWorkbaskets";
private static final String LINK_TO_VALUEMAPPER = private static final String LINK_TO_VALUEMAPPER =
"pro.taskana.workbasket.internal.WorkbasketQueryMapper.queryWorkbasketColumnValues"; "pro.taskana.workbasket.internal.WorkbasketQueryMapper.queryWorkbasketColumnValues";
private final InternalTaskanaEngine taskanaEngine;
private final List<String> orderBy;
private final List<String> orderColumns;
private WorkbasketQueryColumnName columnName; private WorkbasketQueryColumnName columnName;
private String[] accessIds; private String[] accessIds;
private String[] idIn; private String[] idIn;
@ -66,7 +63,11 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
private String[] orgLevel3Like; private String[] orgLevel3Like;
private String[] orgLevel4In; private String[] orgLevel4In;
private String[] orgLevel4Like; private String[] orgLevel4Like;
private boolean markedForDeletion; private Boolean markedForDeletion;
private InternalTaskanaEngine taskanaEngine;
private List<String> orderBy;
private List<String> orderColumns;
private boolean joinWithAccessList; private boolean joinWithAccessList;
private boolean checkReadPermission; private boolean checkReadPermission;
private boolean usedToAugmentTasks; private boolean usedToAugmentTasks;
@ -543,7 +544,7 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
return orgLevel4Like; return orgLevel4Like;
} }
public boolean isMarkedForDeletion() { public Boolean isMarkedForDeletion() {
return markedForDeletion; return markedForDeletion;
} }

View File

@ -7,8 +7,8 @@ spring.h2.console.enabled=true
security.basic.enabled=false security.basic.enabled=false
######## customdb / Taskana DB ####### ######## customdb / Taskana DB #######
customdb.datasource.url=jdbc:h2:mem:testdb;IGNORECASE=TRUE;LOCK_MODE=0 customdb.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;LOCK_MODE=0
#customdb.datasource.url=jdbc:h2:mem:testdb;TRACE_LEVEL_FIle=4 #customdb.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=KEY,VALUE;TRACE_LEVEL_FIle=4
customdb.datasource.schema=classpath:schema.sql customdb.datasource.schema=classpath:schema.sql
customdb.datasource.driverClassName=org.h2.Driver customdb.datasource.driverClassName=org.h2.Driver
customdb.datasource.hibernate.dialect=org.hibernate.dialect.H2 customdb.datasource.hibernate.dialect=org.hibernate.dialect.H2

View File

@ -16,7 +16,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.server.LocalServerPort; import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
@ -86,6 +86,8 @@ class TransactionTest {
private Connection getConnection() throws Exception { private Connection getConnection() throws Exception {
return DriverManager.getConnection( return DriverManager.getConnection(
"jdbc:h2:mem:task-engine;IGNORECASE=TRUE;LOCK_MODE=0", "SA", UUID.randomUUID().toString()); "jdbc:h2:mem:task-engine;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;LOCK_MODE=0",
"SA",
UUID.randomUUID().toString());
} }
} }

View File

@ -11,7 +11,7 @@
<bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> <bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="org.h2.Driver" /> <property name="driverClass" value="org.h2.Driver" />
<property name="url" <property name="url"
value="jdbc:h2:mem:task-engine;DB_CLOSE_DELAY=1000;IGNORECASE=TRUE;LOCK_MODE=0" /> value="jdbc:h2:mem:task-engine;NON_KEYWORDS=KEY,VALUE;DB_CLOSE_DELAY=1000;IGNORECASE=TRUE;LOCK_MODE=0" />
<property name="username" value="SA" /> <property name="username" value="SA" />
<property name="password" value="SA" /> <property name="password" value="SA" />
</bean> </bean>

View File

@ -92,7 +92,11 @@ public class TestContainerExtension implements InvocationInterceptor {
new PooledDataSource( new PooledDataSource(
Thread.currentThread().getContextClassLoader(), Thread.currentThread().getContextClassLoader(),
"org.h2.Driver", "org.h2.Driver",
"jdbc:h2:mem:taskana;LOCK_MODE=0;INIT=SET COLLATION DEFAULT_de_DE", "jdbc:h2:mem:"
+ "taskana"
+ ";NON_KEYWORDS=KEY,VALUE;LOCK_MODE=0;"
+ "INIT=CREATE SCHEMA IF NOT EXISTS TASKANA\\;"
+ "SET COLLATION DEFAULT_de_DE ",
"sa", "sa",
"sa"); "sa");
ds.setPoolTimeToWait(50); ds.setPoolTimeToWait(50);

View File

@ -65,8 +65,8 @@
<!-- spring dependencies --> <!-- spring dependencies -->
<version.javax.annotation-api>1.3.2</version.javax.annotation-api> <version.javax.annotation-api>1.3.2</version.javax.annotation-api>
<version.spring.core>2.0.0.RELEASE</version.spring.core> <version.spring.core>2.0.0.RELEASE</version.spring.core>
<version.spring.boot>2.6.6</version.spring.boot> <version.spring.boot>2.7.8</version.spring.boot>
<version.spring.mybatis>2.0.7</version.spring.mybatis> <version.spring.mybatis>2.1.0</version.spring.mybatis>
<!-- wildfly dependencies --> <!-- wildfly dependencies -->
<version.wildfly>15.0.1.Final</version.wildfly> <version.wildfly>15.0.1.Final</version.wildfly>

View File

@ -22,6 +22,7 @@
<module>taskana-rest-spring-example-common</module> <module>taskana-rest-spring-example-common</module>
<module>taskana-rest-spring-example-boot</module> <module>taskana-rest-spring-example-boot</module>
<module>taskana-rest-spring-example-wildfly</module> <module>taskana-rest-spring-example-wildfly</module>
<module>taskana-rest-spring-test-lib</module>
</modules> </modules>
</project> </project>

View File

@ -1,13 +1,25 @@
package pro.taskana.example.boot.security; package pro.taskana.example.boot.security;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.ldap.core.support.BaseLdapPathContextSource;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.ldap.LdapPasswordComparisonAuthenticationManagerFactory;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper; import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.ldap.DefaultSpringSecurityContextSource;
import org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator; import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository; import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter; import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
@ -15,16 +27,14 @@ import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import pro.taskana.common.rest.SpringSecurityToJaasFilter; import pro.taskana.common.rest.SpringSecurityToJaasFilter;
/** Default basic configuration for taskana web example. */ /** Default basic configuration for taskana web example. */
@EnableWebSecurity @Configuration
public class BootWebSecurityConfigurer extends WebSecurityConfigurerAdapter { public class BootWebSecurityConfigurer {
private final LdapAuthoritiesPopulator ldapAuthoritiesPopulator;
private final GrantedAuthoritiesMapper grantedAuthoritiesMapper;
private final String ldapServerUrl; private final String ldapServerUrl;
private final String ldapBaseDn; private final String ldapBaseDn;
private final String ldapGroupSearchBase;
private final String ldapUserDnPatterns; private final String ldapUserDnPatterns;
private final String ldapGroupSearchBase;
private final String ldapGroupSearchFilter;
private final boolean devMode; private final boolean devMode;
private final boolean enableCsrf; private final boolean enableCsrf;
@ -32,38 +42,22 @@ public class BootWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
public BootWebSecurityConfigurer( public BootWebSecurityConfigurer(
@Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl, @Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl,
@Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn, @Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.userDnPatterns:uid={0},cn=users}") String ldapUserDnPatterns, @Value("${taskana.ldap.userDnPatterns:uid={0},cn=users}") String ldapUserDnPatterns,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.groupSearchFilter:uniqueMember={0}}") String ldapGroupSearchFilter,
@Value("${enableCsrf:false}") boolean enableCsrf, @Value("${enableCsrf:false}") boolean enableCsrf,
LdapAuthoritiesPopulator ldapAuthoritiesPopulator,
GrantedAuthoritiesMapper grantedAuthoritiesMapper,
@Value("${devMode:false}") boolean devMode) { @Value("${devMode:false}") boolean devMode) {
this.enableCsrf = enableCsrf; this.enableCsrf = enableCsrf;
this.ldapAuthoritiesPopulator = ldapAuthoritiesPopulator;
this.grantedAuthoritiesMapper = grantedAuthoritiesMapper;
this.ldapServerUrl = ldapServerUrl; this.ldapServerUrl = ldapServerUrl;
this.ldapBaseDn = ldapBaseDn; this.ldapBaseDn = ldapBaseDn;
this.ldapGroupSearchBase = ldapGroupSearchBase; this.ldapGroupSearchBase = ldapGroupSearchBase;
this.ldapGroupSearchFilter = ldapGroupSearchFilter;
this.ldapUserDnPatterns = ldapUserDnPatterns; this.ldapUserDnPatterns = ldapUserDnPatterns;
this.devMode = devMode; this.devMode = devMode;
} }
@Override @Bean
protected void configure(AuthenticationManagerBuilder auth) throws Exception { public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
auth.ldapAuthentication()
.userDnPatterns(ldapUserDnPatterns)
.groupSearchBase(ldapGroupSearchBase)
.ldapAuthoritiesPopulator(ldapAuthoritiesPopulator)
.authoritiesMapper(grantedAuthoritiesMapper)
.contextSource()
.url(ldapServerUrl + "/" + ldapBaseDn)
.and()
.passwordCompare()
.passwordAttribute("userPassword");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
HttpSecurity httpSecurity = HttpSecurity httpSecurity =
http.authorizeRequests() http.authorizeRequests()
.antMatchers("/css/**", "/img/**") .antMatchers("/css/**", "/img/**")
@ -95,6 +89,7 @@ public class BootWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
} else { } else {
addLoginPageConfiguration(http); addLoginPageConfiguration(http);
} }
return http.build();
} }
protected void addLoginPageConfiguration(HttpSecurity http) throws Exception { protected void addLoginPageConfiguration(HttpSecurity http) throws Exception {
@ -117,9 +112,50 @@ public class BootWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
.permitAll(); .permitAll();
} }
@Bean
public LdapAuthoritiesPopulator authoritiesPopulator(
DefaultSpringSecurityContextSource contextSource) {
Function<Map<String, List<String>>, GrantedAuthority> authorityMapper =
recordVar -> new SimpleGrantedAuthority(recordVar.get("spring.security.ldap.dn").get(0));
DefaultLdapAuthoritiesPopulator populator =
new DefaultLdapAuthoritiesPopulator(contextSource, ldapGroupSearchBase);
populator.setGroupSearchFilter(ldapGroupSearchFilter);
populator.setSearchSubtree(true);
populator.setRolePrefix("");
populator.setAuthorityMapper(authorityMapper);
return populator;
}
@Bean
public DefaultSpringSecurityContextSource defaultSpringSecurityContextSource() {
return new DefaultSpringSecurityContextSource(ldapServerUrl + "/" + ldapBaseDn);
}
@Bean
public GrantedAuthoritiesMapper grantedAuthoritiesMapper() {
SimpleAuthorityMapper grantedAuthoritiesMapper = new SimpleAuthorityMapper();
grantedAuthoritiesMapper.setPrefix("");
return grantedAuthoritiesMapper;
}
protected JaasApiIntegrationFilter jaasApiIntegrationFilter() { protected JaasApiIntegrationFilter jaasApiIntegrationFilter() {
JaasApiIntegrationFilter filter = new JaasApiIntegrationFilter(); JaasApiIntegrationFilter filter = new JaasApiIntegrationFilter();
filter.setCreateEmptySubject(true); filter.setCreateEmptySubject(true);
return filter; return filter;
} }
@Bean
AuthenticationManager ldapAuthenticationManager(
BaseLdapPathContextSource contextSource, LdapAuthoritiesPopulator authorities) {
@SuppressWarnings("deprecation")
LdapPasswordComparisonAuthenticationManagerFactory factory =
new LdapPasswordComparisonAuthenticationManagerFactory(
contextSource, NoOpPasswordEncoder.getInstance());
factory.setUserDnPatterns(ldapUserDnPatterns);
factory.setLdapAuthoritiesPopulator(authorities);
factory.setAuthoritiesMapper(grantedAuthoritiesMapper());
factory.setPasswordAttribute("userPassword");
return factory.createAuthenticationManager();
}
} }

View File

@ -5,7 +5,7 @@ server.servlet.context-path=/taskana
######## Taskana DB ####### ######## Taskana DB #######
######## h2 configuration ######## ######## h2 configuration ########
########spring.datasource.url=jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0 ########spring.datasource.url=jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;LOCK_MODE=0
########spring.datasource.driverClassName=org.h2.Driver ########spring.datasource.driverClassName=org.h2.Driver
########spring.datasource.username=sa ########spring.datasource.username=sa
########spring.datasource.password=sa ########spring.datasource.password=sa

View File

@ -3,7 +3,7 @@ server.servlet.context-path=/taskana
### logging.level.org.springframework=DEBUG ### logging.level.org.springframework=DEBUG
######## Taskana DB ####### ######## Taskana DB #######
######## h2 configuration ######## ######## h2 configuration ########
########spring.datasource.url=jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0 ########spring.datasource.url=jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;LOCK_MODE=0
########spring.datasource.driverClassName=org.h2.Driver ########spring.datasource.driverClassName=org.h2.Driver
########spring.datasource.username=sa ########spring.datasource.username=sa
########spring.datasource.password=sa ########spring.datasource.password=sa

View File

@ -1,28 +1,22 @@
logging.level.pro.taskana=INFO logging.level.pro.taskana=INFO
logging.level.org.springframework.security=INFO logging.level.org.springframework.security=INFO
server.servlet.context-path=/taskana server.servlet.context-path=/taskana
taskana.routing.dmn.upload.path=/tmp/routing.dmn taskana.routing.dmn.upload.path=/tmp/routing.dmn
######## Taskana DB ####### ######## Taskana DB #######
######## h2 configuration ######## ######## h2 configuration ########
spring.datasource.url=jdbc:h2:mem:taskana;IGNORECASE=TRUE;DB_CLOSE_ON_EXIT=FALSE;LOCK_MODE=0 spring.datasource.url=jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;DB_CLOSE_ON_EXIT=FALSE;LOCK_MODE=0
spring.datasource.driverClassName=org.h2.Driver spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa spring.datasource.username=sa
spring.datasource.password=sa spring.datasource.password=sa
taskana.schemaName=TASKANA taskana.schemaName=TASKANA
######## h2 console configuration ######## ######## h2 console configuration ########
########spring.h2.console.enabled=true ########spring.h2.console.enabled=true
########spring.h2.console.path=/h2-console ########spring.h2.console.path=/h2-console
######## db2 configuration ######## ######## db2 configuration ########
########spring.datasource.driverClassName=com.ibm.db2.jcc.DB2Driver ########spring.datasource.driverClassName=com.ibm.db2.jcc.DB2Driver
########spring.datasource.url=jdbc:db2://localhost:5101/tskdb ########spring.datasource.url=jdbc:db2://localhost:5101/tskdb
########spring.datasource.username=db2inst1 ########spring.datasource.username=db2inst1
########spring.datasource.password=db2inst1-pwd ########spring.datasource.password=db2inst1-pwd
######## Postgres configuration ######## ######## Postgres configuration ########
########spring.datasource.url=jdbc:postgresql://localhost:5102/taskana ########spring.datasource.url=jdbc:postgresql://localhost:5102/taskana
########spring.datasource.driverClassName=org.postgresql.Driver ########spring.datasource.driverClassName=org.postgresql.Driver
@ -32,13 +26,10 @@ taskana.schemaName=TASKANA
########spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true ########spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
####### property that control rest api security deploy use true for no security. ####### property that control rest api security deploy use true for no security.
devMode=false devMode=false
# This property enables the support of XSRF tokens. This will not work together with devMode. # This property enables the support of XSRF tokens. This will not work together with devMode.
enableCsrf=true enableCsrf=true
####### property that control if the database is cleaned and sample data is generated ####### property that control if the database is cleaned and sample data is generated
generateSampleData=true generateSampleData=true
####### JobScheduler cron expression that specifies when the JobSchedler runs ####### JobScheduler cron expression that specifies when the JobSchedler runs
taskana.jobscheduler.async.cron=0 * * * * * taskana.jobscheduler.async.cron=0 * * * * *
####### cache static resources properties ####### cache static resources properties
@ -46,21 +37,17 @@ spring.web.resources.cache.cachecontrol.cache-private=true
####### for upload of big workbasket- or classification-files ####### for upload of big workbasket- or classification-files
spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB spring.servlet.multipart.max-request-size=10MB
####### serve compressed files for faster UI loading times ####### serve compressed files for faster UI loading times
server.compression.enabled=true server.compression.enabled=true
server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain,application/javascript,text/css,image/svg+xml server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain,application/javascript,text/css,image/svg+xml
server.compression.min-response-size=10240 server.compression.min-response-size=10240
spring.main.allow-bean-definition-overriding=true spring.main.allow-bean-definition-overriding=true
server.tomcat.max-http-form-post-size=-1 server.tomcat.max-http-form-post-size=-1
server.tomcat.max-save-post-size=-1 server.tomcat.max-save-post-size=-1
server.tomcat.max-swallow-size=-1 server.tomcat.max-swallow-size=-1
####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy ####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy
server.tomcat.remoteip.internal-proxies=.* server.tomcat.remoteip.internal-proxies=.*
server.forward-headers-strategy=native server.forward-headers-strategy=native
####### Properties for AccessIdController to connect to LDAP ####### Properties for AccessIdController to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:10389 taskana.ldap.serverUrl=ldap://localhost:10389
taskana.ldap.bindDn=uid=admin taskana.ldap.bindDn=uid=admin
@ -88,7 +75,6 @@ taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3 taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50 taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=uniquemember taskana.ldap.groupsOfUser=uniquemember
# Embedded Spring LDAP server # Embedded Spring LDAP server
spring.ldap.embedded.base-dn=OU=Test,O=TASKANA spring.ldap.embedded.base-dn=OU=Test,O=TASKANA
spring.ldap.embedded.credential.username=uid=admin spring.ldap.embedded.credential.username=uid=admin

View File

@ -80,7 +80,7 @@
<!-- test dependencies --> <!-- test dependencies -->
<dependency> <dependency>
<groupId>pro.taskana</groupId> <groupId>pro.taskana</groupId>
<artifactId>taskana-common-test</artifactId> <artifactId>taskana-rest-spring-test-lib</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>

View File

@ -1,20 +1,8 @@
package pro.taskana.example.rest; package pro.taskana.example.rest;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
import org.springframework.security.ldap.DefaultSpringSecurityContextSource;
import org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter; import org.springframework.web.filter.CorsFilter;
@ -24,23 +12,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration @Configuration
public class ExampleWebSecurityConfig { public class ExampleWebSecurityConfig {
private final String ldapServerUrl;
private final String ldapBaseDn;
private final String ldapGroupSearchBase;
private final String ldapGroupSearchFilter;
@Autowired
public ExampleWebSecurityConfig(
@Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl,
@Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.groupSearchFilter:uniqueMember={0}}") String ldapGroupSearchFilter) {
this.ldapServerUrl = ldapServerUrl;
this.ldapBaseDn = ldapBaseDn;
this.ldapGroupSearchBase = ldapGroupSearchBase;
this.ldapGroupSearchFilter = ldapGroupSearchFilter;
}
@Bean @Bean
public WebMvcConfigurer corsConfigurer() { public WebMvcConfigurer corsConfigurer() {
return new CorsWebMvcConfigurer(); return new CorsWebMvcConfigurer();
@ -51,7 +22,7 @@ public class ExampleWebSecurityConfig {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration(); CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true); config.setAllowCredentials(true);
config.addAllowedOriginPattern("*"); config.addAllowedOrigin("*");
config.addAllowedHeader("*"); config.addAllowedHeader("*");
config.addAllowedMethod("*"); config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config); source.registerCorsConfiguration("/**", config);
@ -60,33 +31,6 @@ public class ExampleWebSecurityConfig {
return bean; return bean;
} }
@Bean
public LdapAuthoritiesPopulator authoritiesPopulator(
DefaultSpringSecurityContextSource contextSource) {
Function<Map<String, List<String>>, GrantedAuthority> authorityMapper =
recordVar -> new SimpleGrantedAuthority(recordVar.get("spring.security.ldap.dn").get(0));
DefaultLdapAuthoritiesPopulator populator =
new DefaultLdapAuthoritiesPopulator(contextSource, ldapGroupSearchBase);
populator.setGroupSearchFilter(ldapGroupSearchFilter);
populator.setSearchSubtree(true);
populator.setRolePrefix("");
populator.setAuthorityMapper(authorityMapper);
return populator;
}
@Bean
public DefaultSpringSecurityContextSource defaultSpringSecurityContextSource() {
return new DefaultSpringSecurityContextSource(ldapServerUrl + "/" + ldapBaseDn);
}
@Bean
public GrantedAuthoritiesMapper grantedAuthoritiesMapper() {
SimpleAuthorityMapper grantedAuthoritiesMapper = new SimpleAuthorityMapper();
grantedAuthoritiesMapper.setPrefix("");
return grantedAuthoritiesMapper;
}
private static class CorsWebMvcConfigurer implements WebMvcConfigurer { private static class CorsWebMvcConfigurer implements WebMvcConfigurer {
@Override @Override

View File

@ -1,76 +0,0 @@
package pro.taskana.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter;
import pro.taskana.common.rest.SpringSecurityToJaasFilter;
@EnableWebSecurity
public class CommonWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
private final LdapAuthoritiesPopulator ldapAuthoritiesPopulator;
private final GrantedAuthoritiesMapper grantedAuthoritiesMapper;
private final String ldapServerUrl;
private final String ldapBaseDn;
private final String ldapGroupSearchBase;
private final String ldapUserDnPatterns;
@Autowired
public CommonWebSecurityConfigurer(
@Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl,
@Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.userDnPatterns:uid={0},cn=users}") String ldapUserDnPatterns,
LdapAuthoritiesPopulator ldapAuthoritiesPopulator,
GrantedAuthoritiesMapper grantedAuthoritiesMapper) {
this.ldapServerUrl = ldapServerUrl;
this.ldapBaseDn = ldapBaseDn;
this.ldapGroupSearchBase = ldapGroupSearchBase;
this.ldapUserDnPatterns = ldapUserDnPatterns;
this.ldapAuthoritiesPopulator = ldapAuthoritiesPopulator;
this.grantedAuthoritiesMapper = grantedAuthoritiesMapper;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userDnPatterns(ldapUserDnPatterns)
.groupSearchBase(ldapGroupSearchBase)
.ldapAuthoritiesPopulator(ldapAuthoritiesPopulator)
.authoritiesMapper(grantedAuthoritiesMapper)
.contextSource()
.url(ldapServerUrl + "/" + ldapBaseDn)
.and()
.passwordCompare()
.passwordAttribute("userPassword");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.and()
.csrf()
.disable()
.httpBasic()
.and()
.addFilter(jaasApiIntegrationFilter())
.addFilterAfter(new SpringSecurityToJaasFilter(), JaasApiIntegrationFilter.class)
.authorizeRequests()
.anyRequest()
.fullyAuthenticated();
}
private JaasApiIntegrationFilter jaasApiIntegrationFilter() {
JaasApiIntegrationFilter filter = new JaasApiIntegrationFilter();
filter.setCreateEmptySubject(true);
return filter;
}
}

View File

@ -1,7 +1,7 @@
package pro.taskana.example.jobs; package pro.taskana.example.jobs;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE; import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import java.time.Instant; import java.time.Instant;
import java.util.List; import java.util.List;
@ -18,8 +18,8 @@ import pro.taskana.classification.rest.assembler.ClassificationRepresentationMod
import pro.taskana.classification.rest.models.ClassificationRepresentationModel; import pro.taskana.classification.rest.models.ClassificationRepresentationModel;
import pro.taskana.common.api.exceptions.InvalidArgumentException; import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper; import pro.taskana.rest.test.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.models.Task; import pro.taskana.task.api.models.Task;
import pro.taskana.task.rest.assembler.TaskRepresentationModelAssembler; import pro.taskana.task.rest.assembler.TaskRepresentationModelAssembler;
import pro.taskana.task.rest.models.TaskRepresentationModel; import pro.taskana.task.rest.models.TaskRepresentationModel;

View File

@ -7,7 +7,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import pro.taskana.common.rest.models.AccessIdRepresentationModel; import pro.taskana.common.rest.models.AccessIdRepresentationModel;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test Ldap attachment. */ /** Test Ldap attachment. */
@TaskanaSpringBootTest @TaskanaSpringBootTest

View File

@ -11,7 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.rest.ldap.LdapClient; import pro.taskana.common.rest.ldap.LdapClient;
import pro.taskana.common.rest.models.AccessIdRepresentationModel; import pro.taskana.common.rest.models.AccessIdRepresentationModel;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.user.api.models.User; import pro.taskana.user.api.models.User;
/** Test Ldap attachment. */ /** Test Ldap attachment. */

View File

@ -1,54 +1,2 @@
logging.level.pro.taskana=INFO
logging.level.org.springframework.security=INFO
logging.level.org.springframework.ldap=INFO
### logging.level.org.springframework=DEBUG
######## Taskana DB #######
datasource.url=jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0
datasource.driverClassName=org.h2.Driver
datasource.username=sa
datasource.password=sa
taskana.schemaName=TASKANA
####### property that control rest api security deploy use true for no security.
devMode=false
####### Properties for AccessIdController to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:11389
taskana.ldap.bindDn=uid=admin
taskana.ldap.bindPassword=secret
taskana.ldap.baseDn=ou=Test,O=TASKANA
taskana.ldap.userSearchBase= taskana.ldap.userSearchBase=
taskana.ldap.userSearchFilterName=objectclass
taskana.ldap.userSearchFilterValue=person
taskana.ldap.userFirstnameAttribute=givenName
taskana.ldap.userLastnameAttribute=sn
taskana.ldap.userFullnameAttribute=cn
taskana.ldap.userPhoneAttribute=phoneNumber
taskana.ldap.userMobilePhoneAttribute=mobileNumber
taskana.ldap.userEmailAttribute=email
taskana.ldap.userOrglevel1Attribute=orgLevel1
taskana.ldap.userOrglevel2Attribute=orgLevel2
taskana.ldap.userOrglevel3Attribute=someDepartement
taskana.ldap.userOrglevel4Attribute=orgLevel4
taskana.ldap.userIdAttribute=uid
taskana.ldap.userMemberOfGroupAttribute=memberOf
taskana.ldap.groupSearchBase= taskana.ldap.groupSearchBase=
taskana.ldap.groupSearchFilterName=objectclass
taskana.ldap.groupSearchFilterValue=groupOfUniqueNames
taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=uniquemember
# Embedded Spring LDAP server
spring.ldap.embedded.base-dn=OU=Test,O=TASKANA
spring.ldap.embedded.credential.username=uid=admin
spring.ldap.embedded.credential.password=secret
spring.ldap.embedded.ldif=classpath:taskana-test.ldif
spring.ldap.embedded.port=11389
spring.ldap.embedded.validation.enabled=false
####### JobScheduler cron expression that specifies when the JobSchedler runs
taskana.jobscheduler.async.cron=0 0 * * * *
####### cache static resources properties
spring.web.resources.cache.cachecontrol.cache-private=true
spring.main.allow-bean-definition-overriding=true
####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy
server.tomcat.remoteip.internal-proxies=.*
server.forward-headers-strategy=native

View File

@ -3,10 +3,10 @@ logging.level.org.springframework.security=INFO
logging.level.org.springframework.ldap=INFO logging.level.org.springframework.ldap=INFO
### logging.level.org.springframework=DEBUG ### logging.level.org.springframework=DEBUG
######## Taskana DB ####### ######## Taskana DB #######
datasource.url=jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0 spring.datasource.url=jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;LOCK_MODE=0
datasource.driverClassName=org.h2.Driver spring.datasource.driverClassName=org.h2.Driver
datasource.username=sa spring.datasource.username=sa
datasource.password=sa spring.datasource.password=sa
taskana.schemaName=TASKANA taskana.schemaName=TASKANA
####### property that control rest api security deploy use true for no security. ####### property that control rest api security deploy use true for no security.
devMode=false devMode=false

View File

@ -69,12 +69,6 @@
<artifactId>javax.servlet-api</artifactId> <artifactId>javax.servlet-api</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.wildfly.security</groupId> <groupId>org.wildfly.security</groupId>
@ -98,8 +92,8 @@
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.slf4j</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId> <artifactId>slf4j-simple</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
@ -159,23 +153,6 @@
<build> <build>
<plugins> <plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>${version.maven.clean}</version>
<configuration>
<excludeDefaultDirectories>true</excludeDefaultDirectories>
<filesets>
<fileset>
<directory>target</directory>
<excludes>
<exclude>wildfly-${version.wildfly}</exclude>
<exclude>wildfly-${version.wildfly}/**</exclude>
</excludes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId> <artifactId>maven-dependency-plugin</artifactId>
@ -212,7 +189,7 @@
<groupId>org.postgresql</groupId> <groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId> <artifactId>postgresql</artifactId>
<outputDirectory> <outputDirectory>
${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/org/postgresql/main ${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/org/postgresql/postgresql/main
</outputDirectory> </outputDirectory>
</artifactItem> </artifactItem>
</artifactItems> </artifactItems>
@ -220,45 +197,20 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${version.maven.surefire}</version>
<executions>
<execution>
<id>default-test</id>
<configuration>
<skip>true</skip>
</configuration>
</execution>
<execution>
<id>integration-tests</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId> <artifactId>maven-resources-plugin</artifactId>
<version>${version.maven.resources}</version> <version>${version.maven.resources}</version>
<executions> <executions>
<execution> <execution>
<id>copy-module-xml</id> <id>copy-postgres-module-xml</id>
<phase>process-test-classes</phase> <phase>process-test-classes</phase>
<goals> <goals>
<goal>copy-resources</goal> <goal>copy-resources</goal>
</goals> </goals>
<configuration> <configuration>
<outputDirectory> <outputDirectory>
${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/org/postgresql/main ${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/org/postgresql/postgresql/main
</outputDirectory> </outputDirectory>
<resources> <resources>
<resource> <resource>

View File

@ -8,12 +8,9 @@ import javax.sql.DataSource;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.PlatformTransactionManager;
@ -29,18 +26,6 @@ public class TaskanaWildflyConfiguration {
return new DataSourceTransactionManager(dataSource); return new DataSourceTransactionManager(dataSource);
} }
@Bean
@Primary
@ConfigurationProperties(prefix = "datasource")
public DataSourceProperties dataSourceProperties(
@Value("${taskana.schemaName:TASKANA}") String schemaName) {
DataSourceProperties props = new DataSourceProperties();
props.setUrl(
"jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0;INIT=CREATE SCHEMA IF NOT EXISTS "
+ schemaName);
return props;
}
@Bean @Bean
@DependsOn("getTaskanaEngine") // generate sample data after schema was inserted @DependsOn("getTaskanaEngine") // generate sample data after schema was inserted
public SampleDataGenerator generateSampleData( public SampleDataGenerator generateSampleData(
@ -55,7 +40,7 @@ public class TaskanaWildflyConfiguration {
} }
@Bean @Bean
public DataSource dataSource(DataSourceProperties dsProperties) { public DataSource dataSource() throws Exception {
// First try to load Properties and get Datasource via jndi lookup // First try to load Properties and get Datasource via jndi lookup
Context ctx; Context ctx;
DataSource dataSource; DataSource dataSource;
@ -74,7 +59,7 @@ public class TaskanaWildflyConfiguration {
"Caught exception when attempting to start Taskana with Datasource " "Caught exception when attempting to start Taskana with Datasource "
+ "from Jndi. Using default H2 datasource. ", + "from Jndi. Using default H2 datasource. ",
e); e);
return dsProperties.initializeDataSourceBuilder().build(); throw e;
} }
} }
} }

View File

@ -1,23 +1,25 @@
package pro.taskana.example.wildfly.security; package pro.taskana.example.wildfly.security;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter; import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter;
/** /**
* Default basic configuration for taskana web example running on Wildfly / JBoss with Elytron or * Default basic configuration for taskana web example running on Wildfly / JBoss with Elytron or
* JAAS Security. * JAAS Security.
*/ */
@EnableWebSecurity @Configuration
public class WildflyWebSecurityConfigurer extends WebSecurityConfigurerAdapter { public class WildflyWebSecurityConfigurer {
@Override @Bean
protected void configure(HttpSecurity http) throws Exception { public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.addFilter(jaasApiIntegrationFilter()) http.addFilter(jaasApiIntegrationFilter())
.addFilterAfter(new ElytronToJaasFilter(), JaasApiIntegrationFilter.class) .addFilterAfter(new ElytronToJaasFilter(), JaasApiIntegrationFilter.class)
.csrf() .csrf()
.disable(); .disable();
return http.build();
} }
protected JaasApiIntegrationFilter jaasApiIntegrationFilter() { protected JaasApiIntegrationFilter jaasApiIntegrationFilter() {

View File

@ -1,6 +1,11 @@
package pro.taskana.common.test.rest; package pro.taskana.common.test.rest;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import javax.sql.DataSource; import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@ -17,9 +22,22 @@ import pro.taskana.sampledata.SampleDataGenerator;
@DependsOn("getTaskanaEngine") // wait for schema to be created BEFORE inserting test data @DependsOn("getTaskanaEngine") // wait for schema to be created BEFORE inserting test data
public class TestConfiguration { public class TestConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(TestConfiguration.class);
@Autowired @Autowired
public TestConfiguration( public TestConfiguration(
@Value("${taskana.schemaName:TASKANA}") String schemaName, DataSource dataSource) { @Value("${taskana.schemaName:TASKANA}") String schemaName, DataSource dataSource) {
if (LOGGER.isDebugEnabled()) {
try (Connection connection = dataSource.getConnection()) {
DatabaseMetaData metaData = connection.getMetaData();
LOGGER.debug(
"Using database of type {} with url '{}'",
metaData.getDatabaseProductName(),
metaData.getURL());
} catch (SQLException e) {
LOGGER.error(e.getMessage(), e);
}
}
new SampleDataGenerator(dataSource, schemaName).generateSampleData(); new SampleDataGenerator(dataSource, schemaName).generateSampleData();
} }

View File

@ -3,6 +3,8 @@ package pro.taskana.example.wildfly;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity; import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
@ -23,6 +25,8 @@ public class AbstractAccTest {
protected static final String DEPENDENCY_VERSION = "5.9.1-SNAPSHOT"; protected static final String DEPENDENCY_VERSION = "5.9.1-SNAPSHOT";
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractAccTest.class);
static { static {
Runtime.getRuntime().addShutdownHook(new Thread(AbstractAccTest::stopPostgresDb)); Runtime.getRuntime().addShutdownHook(new Thread(AbstractAccTest::stopPostgresDb));
@ -98,6 +102,7 @@ public class AbstractAccTest {
"sh", "-c", "docker-compose -f ../../docker-databases/docker-compose.yml down -v"); "sh", "-c", "docker-compose -f ../../docker-databases/docker-compose.yml down -v");
} }
Process process = builder.start(); Process process = builder.start();
LOGGER.info("Stopping POSTGRES...");
int exitCode = process.waitFor(); int exitCode = process.waitFor();
if (exitCode != 0) { if (exitCode != 0) {
throw new RuntimeException("could not start postgres db!"); throw new RuntimeException("could not start postgres db!");
@ -115,16 +120,17 @@ public class AbstractAccTest {
builder.command( builder.command(
"cmd.exe", "cmd.exe",
"/c", "/c",
"docker-compose -f ../../docker-databases/docker-compose.yml up -d", "docker-compose -f ../../docker-databases/docker-compose.yml up -d "
"taskana-postgres_10"); + "taskana-postgres_10");
} else { } else {
builder.command( builder.command(
"sh", "sh",
"-c", "-c",
"docker-compose -f ../../docker-databases/docker-compose.yml up -d", "docker-compose -f ../../docker-databases/docker-compose.yml up -d "
"taskana-postgres_10"); + "taskana-postgres_10");
} }
Process process = builder.start(); Process process = builder.start();
LOGGER.info("Starting POSTGRES...");
int exitCode = process.waitFor(); int exitCode = process.waitFor();
if (exitCode != 0) { if (exitCode != 0) {
throw new RuntimeException("could not start postgres db!"); throw new RuntimeException("could not start postgres db!");

View File

@ -1,51 +0,0 @@
######## Taskana DB #######
datasource.jndi=java:/TaskanaDS/H2
taskana.schemaName=TASKANA
devMode=true
####### properties to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:10389
taskana.ldap.bindDn=uid=admin
taskana.ldap.bindPassword=secret
taskana.ldap.baseDn=ou=Test,O=TASKANA
taskana.ldap.userSearchBase=cn=users
taskana.ldap.userSearchFilterName=objectclass
taskana.ldap.userSearchFilterValue=person
taskana.ldap.userFirstnameAttribute=givenName
taskana.ldap.userLastnameAttribute=sn
taskana.ldap.userFullnameAttribute=cn
taskana.ldap.userPhoneAttribute=phoneNumber
taskana.ldap.userMobilePhoneAttribute=mobileNumber
taskana.ldap.userEmailAttribute=email
taskana.ldap.userOrglevel1Attribute=orgLevel1
taskana.ldap.userOrglevel2Attribute=orgLevel2
taskana.ldap.userOrglevel3Attribute=someDepartement
taskana.ldap.userOrglevel4Attribute=orgLevel4
taskana.ldap.userIdAttribute=uid
taskana.ldap.userMemberOfGroupAttribute=memberOf
taskana.ldap.groupSearchBase=
taskana.ldap.groupSearchFilterName=objectclass
taskana.ldap.groupSearchFilterValue=groupOfUniqueNames
taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=uniquemember
####### JobScheduler cron expression that specifies when the JobSchedler runs
taskana.jobscheduler.async.cron=0 * * * * *
####### cache static resources propertiesgit add --
spring.resources.cache.cachecontrol.cache-private=true
spring.main.allow-bean-definition-overriding=true
####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy
server.tomcat.remoteip.internal-proxies=.*
server.forward-headers-strategy=native
# Embedded Spring LDAP server
spring.ldap.embedded.base-dn=OU=Test,O=TASKANA
spring.ldap.embedded.credential.username=uid=admin
spring.ldap.embedded.credential.password=secret
spring.ldap.embedded.ldif=classpath:taskana-test.ldif
spring.ldap.embedded.port=10389
spring.ldap.embedded.validation.enabled=false

View File

@ -1,52 +0,0 @@
######## Taskana DB #######
datasource.jndi=java:/TaskanaDS/PostgreSQL
taskana.schemaName=taskana
devMode=true
####### properties to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:10389
taskana.ldap.bindDn=uid=admin
taskana.ldap.bindPassword=secret
taskana.ldap.baseDn=ou=Test,O=TASKANA
taskana.ldap.userSearchBase=cn=users
taskana.ldap.userSearchFilterName=objectclass
taskana.ldap.userSearchFilterValue=person
taskana.ldap.userFirstnameAttribute=givenName
taskana.ldap.userLastnameAttribute=sn
taskana.ldap.userFullnameAttribute=cn
taskana.ldap.userPhoneAttribute=phoneNumber
taskana.ldap.userMobilePhoneAttribute=mobileNumber
taskana.ldap.userEmailAttribute=email
taskana.ldap.userOrglevel1Attribute=orgLevel1
taskana.ldap.userOrglevel2Attribute=orgLevel2
taskana.ldap.userOrglevel3Attribute=someDepartement
taskana.ldap.userOrglevel4Attribute=orgLevel4
taskana.ldap.userIdAttribute=uid
taskana.ldap.userMemberOfGroupAttribute=memberOf
taskana.ldap.groupSearchBase=
taskana.ldap.groupSearchFilterName=objectclass
taskana.ldap.groupSearchFilterValue=groupOfUniqueNames
taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=uniquemember
####### JobScheduler cron expression that specifies when the JobSchedler runs
taskana.jobscheduler.async.cron=0 * * * * *
####### cache static resources propertiesgit add --
spring.resources.cache.cachecontrol.cache-private=true
spring.main.allow-bean-definition-overriding=true
####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy
server.tomcat.remoteip.internal-proxies=.*
server.forward-headers-strategy=native
# Embedded Spring LDAP server
spring.ldap.embedded.base-dn= OU=Test,O=TASKANA
spring.ldap.embedded.credential.username= uid=admin
spring.ldap.embedded.credential.password= secret
spring.ldap.embedded.ldif=classpath:taskana-test.ldif
spring.ldap.embedded.port= 10389
spring.ldap.embedded.validation.enabled=false

View File

@ -1,9 +1,6 @@
######## Taskana DB ####### ######## Taskana DB #######
datasource.jndi=java:/TaskanaDS/PostgreSQL datasource.jndi=java:jboss/datasources/TaskanaDS
taskana.schemaName=taskana taskana.schemaName=taskana
devMode=true
####### properties to connect to LDAP ####### properties to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:10389 taskana.ldap.serverUrl=ldap://localhost:10389
taskana.ldap.bindDn=uid=admin taskana.ldap.bindDn=uid=admin
@ -31,18 +28,14 @@ taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3 taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50 taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=uniquemember taskana.ldap.groupsOfUser=uniquemember
####### JobScheduler cron expression that specifies when the JobSchedler runs ####### JobScheduler cron expression that specifies when the JobSchedler runs
taskana.jobscheduler.async.cron=0 * * * * * taskana.jobscheduler.async.cron=0 * * * * *
####### cache static resources propertiesgit add -- ####### cache static resources propertiesgit add --
spring.resources.cache.cachecontrol.cache-private=true spring.resources.cache.cachecontrol.cache-private=true
spring.main.allow-bean-definition-overriding=true spring.main.allow-bean-definition-overriding=true
####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy ####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy
server.tomcat.remoteip.internal-proxies=.* server.tomcat.remoteip.internal-proxies=.*
server.forward-headers-strategy=native server.forward-headers-strategy=native
# Embedded Spring LDAP server # Embedded Spring LDAP server
spring.ldap.embedded.base-dn=OU=Test,O=TASKANA spring.ldap.embedded.base-dn=OU=Test,O=TASKANA
spring.ldap.embedded.credential.username=uid=admin spring.ldap.embedded.credential.username=uid=admin

View File

@ -7,11 +7,14 @@
<configuration> <configuration>
<property name="jbossHome">target/wildfly-15.0.1.Final</property> <property name="jbossHome">target/wildfly-15.0.1.Final</property>
<property <property
name="serverConfig">../../../../src/test/resources/int-test-standalone.xml</property> name="serverConfig">../../../../src/test/resources/int-test-standalone.xml
<!-- <property name="javaVmArguments">-Xmx512m -XX:MaxPermSize=128m </property>
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y <!-- <property name="javaVmArguments">-->
</property> --> <!-- -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y-->
<property name="javaVmArguments">-Djava.util.logging.manager=org.jboss.logmanager.LogManager</property> <!-- -Djava.util.logging.manager=org.jboss.logmanager.LogManager-->
<!-- </property>-->
<property name="javaVmArguments">-Djava.util.logging.manager=org.jboss.logmanager.LogManager
</property>
</configuration> </configuration>
</container> </container>
</arquillian> </arquillian>

View File

@ -226,7 +226,8 @@
jndi-name="java:jboss/datasources/ExampleDS" jndi-name="java:jboss/datasources/ExampleDS"
pool-name="ExampleDS" enabled="true" pool-name="ExampleDS" enabled="true"
use-java-context="true"> use-java-context="true">
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE <connection-url>
jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;
</connection-url> </connection-url>
<driver>h2</driver> <driver>h2</driver>
<security> <security>
@ -235,26 +236,11 @@
</security> </security>
</datasource> </datasource>
<datasource jta="true" <datasource jta="true"
jndi-name="java:/TaskanaDS/H2" jndi-name="java:jboss/datasources/TaskanaDS"
pool-name="TASKANA Datasource" enabled="true"
use-ccm="false">
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
</connection-url>
<driver-class>org.h2.Driver</driver-class>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
<validation>
<background-validation>false
</background-validation>
</validation>
</datasource>
<datasource jta="true"
jndi-name="java:/TaskanaDS/PostgreSQL"
pool-name="TASKANA PostgreSQL Datasource" pool-name="TASKANA PostgreSQL Datasource"
enabled="true" use-ccm="false"> enabled="true"
use-ccm="false"
use-java-context="true">
<connection-url>jdbc:postgresql://localhost:5102/postgres <connection-url>jdbc:postgresql://localhost:5102/postgres
</connection-url> </connection-url>
<driver-class>org.postgresql.Driver</driver-class> <driver-class>org.postgresql.Driver</driver-class>
@ -273,8 +259,7 @@
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource <xa-datasource-class>org.h2.jdbcx.JdbcDataSource
</xa-datasource-class> </xa-datasource-class>
</driver> </driver>
<driver name="postgresql" <driver name="postgresql" module="org.postgresql.postgresql">
module="org.postgresql">
<driver-class>org.postgresql.Driver <driver-class>org.postgresql.Driver
</driver-class> </driver-class>
</driver> </driver>

View File

@ -1,6 +1,6 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<module xmlns="urn:jboss:module:1.1" name="org.postgresql"> <module xmlns="urn:jboss:module:1.1" name="org.postgresql.postgresql">
<dependencies> <dependencies>
<module name="javax.api"/> <module name="javax.api"/>
@ -8,7 +8,6 @@
</dependencies> </dependencies>
<resources> <resources>
<!--the name of your driver --> <resource-root path="postgresql-42.3.8.jar"/>
<resource-root path="postgresql-42.3.3.jar"/>
</resources> </resources>
</module> </module>

View File

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>taskana-rest-spring-test-lib</artifactId>
<name>${project.groupId}:${project.artifactId}</name>
<description>Test utils for TASKANA rest logic (based on spring).</description>
<parent>
<groupId>pro.taskana</groupId>
<artifactId>taskana-rest-parent</artifactId>
<version>5.9.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<properties>
<sonar.tests/>
</properties>
<dependencies>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-common-logging</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-common-data</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${version.javax.servlet}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
</dependency>
<dependency>
<groupId>capital.scalable</groupId>
<artifactId>spring-auto-restdocs-core</artifactId>
<version>${version.auto-restdocs}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,4 +1,4 @@
package pro.taskana.common.test; package pro.taskana.rest.test;
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
@ -30,9 +30,6 @@ import org.springframework.test.web.servlet.setup.MockMvcConfigurerAdapter;
import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
@TaskanaSpringBootTest @TaskanaSpringBootTest
@ExtendWith(RestDocumentationExtension.class) @ExtendWith(RestDocumentationExtension.class)
public class BaseRestDocTest { public class BaseRestDocTest {

View File

@ -1,4 +1,4 @@
package pro.taskana.common.test.rest; package pro.taskana.rest.test;
import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;

View File

@ -0,0 +1,114 @@
package pro.taskana.rest.test;
import java.io.IOException;
import java.security.AccessController;
import java.util.Optional;
import javax.security.auth.Subject;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.filter.GenericFilterBean;
import pro.taskana.common.api.exceptions.SystemException;
import pro.taskana.common.api.security.GroupPrincipal;
import pro.taskana.common.api.security.UserPrincipal;
// Duplicate of pro.taskana.common.rest.SpringSecurityToJaasFilter
/** Simple Filter to map all Spring Security Roles to JAAS-Principals. */
public class SpringSecurityToJaasFilter extends GenericFilterBean {
private static final Logger LOGGER = LoggerFactory.getLogger(SpringSecurityToJaasFilter.class);
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
Optional<Authentication> authentication = getCurrentAuthentication();
if (authentication.isPresent()) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Authentication found in Spring security context: {}", authentication);
}
obtainSubject()
.ifPresent(
subject -> {
initializeUserPrincipalFromAuthentication(authentication.get(), subject);
initializeGroupPrincipalsFromAuthentication(authentication.get(), subject);
});
} else {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(
"No authentication found in Spring security context. Continuing unauthenticatic.");
}
}
chain.doFilter(request, response);
}
/**
* Obtains the <code>Subject</code> to run as or <code>null</code> if no <code>Subject</code> is
* available.
*
* <p>The default implementation attempts to obtain the <code>Subject</code> from the <code>
* SecurityContext</code>'s <code>Authentication</code>. If it is of type <code>
* JaasAuthenticationToken</code> and is authenticated, the <code>Subject</code> is returned from
* it.
*
* @return the Subject to run.
*/
protected Optional<Subject> obtainSubject() {
Optional<Authentication> authentication = getCurrentAuthentication();
if (logger.isDebugEnabled()) {
logger.debug("Attempting to obtainSubject using authentication : " + authentication);
}
if (!authentication.isPresent() || !authentication.get().isAuthenticated()) {
return Optional.empty();
}
return Optional.of(Subject.getSubject(AccessController.getContext()));
}
Optional<Authentication> getCurrentAuthentication() {
return Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication());
}
private void initializeUserPrincipalFromAuthentication(
Authentication authentication, Subject subject) {
if (subject.getPrincipals().isEmpty()) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(
"Setting the principal of the subject with {}.", authentication.getPrincipal());
}
subject
.getPrincipals()
.add(new UserPrincipal(((UserDetails) authentication.getPrincipal()).getUsername()));
} else {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Principal of the subject is already set to {}.", subject.getPrincipals());
}
throw new SystemException("Finding an existing principal is unexpected. Please investigate.");
}
}
private void initializeGroupPrincipalsFromAuthentication(
Authentication authentication, Subject subject) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Adding roles {} to subject.", authentication.getAuthorities());
}
authentication
.getAuthorities()
.forEach(
grantedAuthority ->
subject.getPrincipals().add(new GroupPrincipal(grantedAuthority.getAuthority())));
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("{}", subject.getPublicCredentials(GroupPrincipal.class));
}
}
}

View File

@ -1,4 +1,4 @@
package pro.taskana.common.test.rest; package pro.taskana.rest.test;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package pro.taskana.common.test.rest; package pro.taskana.rest.test;
import javax.sql.DataSource; import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@ -1,4 +1,4 @@
package pro.taskana.common.test.rest; package pro.taskana.rest.test;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -8,13 +8,21 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.ldap.core.support.BaseLdapPathContextSource;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.ldap.LdapPasswordComparisonAuthenticationManagerFactory;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper; import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper; import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.ldap.DefaultSpringSecurityContextSource; import org.springframework.security.ldap.DefaultSpringSecurityContextSource;
import org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator; import org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator; import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter;
import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter; import org.springframework.web.filter.CorsFilter;
@ -27,6 +35,7 @@ public class TestWebSecurityConfig {
private final String ldapServerUrl; private final String ldapServerUrl;
private final String ldapBaseDn; private final String ldapBaseDn;
private final String ldapUserDnPatterns;
private final String ldapGroupSearchBase; private final String ldapGroupSearchBase;
private final String ldapGroupSearchFilter; private final String ldapGroupSearchFilter;
@ -34,10 +43,12 @@ public class TestWebSecurityConfig {
public TestWebSecurityConfig( public TestWebSecurityConfig(
@Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl, @Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl,
@Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn, @Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn,
@Value("${taskana.ldap.userDnPatterns:uid={0},cn=users}") String ldapUserDnPatterns,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase, @Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.groupSearchFilter:uniqueMember={0}}") String ldapGroupSearchFilter) { @Value("${taskana.ldap.groupSearchFilter:uniqueMember={0}}") String ldapGroupSearchFilter) {
this.ldapServerUrl = ldapServerUrl; this.ldapServerUrl = ldapServerUrl;
this.ldapBaseDn = ldapBaseDn; this.ldapBaseDn = ldapBaseDn;
this.ldapUserDnPatterns = ldapUserDnPatterns;
this.ldapGroupSearchBase = ldapGroupSearchBase; this.ldapGroupSearchBase = ldapGroupSearchBase;
this.ldapGroupSearchFilter = ldapGroupSearchFilter; this.ldapGroupSearchFilter = ldapGroupSearchFilter;
} }
@ -77,6 +88,7 @@ public class TestWebSecurityConfig {
} }
@Bean @Bean
@Primary
public DefaultSpringSecurityContextSource defaultSpringSecurityContextSource() { public DefaultSpringSecurityContextSource defaultSpringSecurityContextSource() {
return new DefaultSpringSecurityContextSource(ldapServerUrl + "/" + ldapBaseDn); return new DefaultSpringSecurityContextSource(ldapServerUrl + "/" + ldapBaseDn);
} }
@ -88,6 +100,44 @@ public class TestWebSecurityConfig {
return grantedAuthoritiesMapper; return grantedAuthoritiesMapper;
} }
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeRequests()
.and()
.csrf()
.disable()
.httpBasic()
.and()
.addFilter(jaasApiIntegrationFilter())
.addFilterAfter(new SpringSecurityToJaasFilter(), JaasApiIntegrationFilter.class)
.authorizeRequests()
.anyRequest()
.fullyAuthenticated();
return http.build();
}
@Bean
AuthenticationManager ldapAuthenticationManager(
BaseLdapPathContextSource contextSource,
LdapAuthoritiesPopulator authorities,
GrantedAuthoritiesMapper grantedAuthoritiesMapper) {
@SuppressWarnings("deprecation")
LdapPasswordComparisonAuthenticationManagerFactory factory =
new LdapPasswordComparisonAuthenticationManagerFactory(
contextSource, NoOpPasswordEncoder.getInstance());
factory.setUserDnPatterns(ldapUserDnPatterns);
factory.setLdapAuthoritiesPopulator(authorities);
factory.setAuthoritiesMapper(grantedAuthoritiesMapper);
factory.setPasswordAttribute("userPassword");
return factory.createAuthenticationManager();
}
private JaasApiIntegrationFilter jaasApiIntegrationFilter() {
JaasApiIntegrationFilter filter = new JaasApiIntegrationFilter();
filter.setCreateEmptySubject(true);
return filter;
}
private static class CorsWebMvcConfigurer implements WebMvcConfigurer { private static class CorsWebMvcConfigurer implements WebMvcConfigurer {
@Override @Override

View File

@ -82,7 +82,7 @@
<!-- test dependencies --> <!-- test dependencies -->
<dependency> <dependency>
<groupId>pro.taskana</groupId> <groupId>pro.taskana</groupId>
<artifactId>taskana-common-test</artifactId> <artifactId>taskana-rest-spring-test-lib</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
@ -170,6 +170,12 @@
<version>${version.archunit}</version> <version>${version.archunit}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-test-api</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -3,7 +3,7 @@ package pro.taskana.classification.rest;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.api.SharedConstants.MASTER_DOMAIN; import static pro.taskana.common.api.SharedConstants.MASTER_DOMAIN;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE; import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import org.assertj.core.api.ThrowableAssert.ThrowingCallable; import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -22,8 +22,8 @@ import pro.taskana.classification.rest.models.ClassificationRepresentationModel;
import pro.taskana.classification.rest.models.ClassificationSummaryPagedRepresentationModel; import pro.taskana.classification.rest.models.ClassificationSummaryPagedRepresentationModel;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel; import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper; import pro.taskana.rest.test.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test {@link ClassificationController}. */ /** Test {@link ClassificationController}. */
@TaskanaSpringBootTest @TaskanaSpringBootTest

View File

@ -14,7 +14,7 @@ import pro.taskana.classification.api.models.Classification;
import pro.taskana.classification.rest.assembler.ClassificationRepresentationModelAssembler; import pro.taskana.classification.rest.assembler.ClassificationRepresentationModelAssembler;
import pro.taskana.classification.rest.models.ClassificationRepresentationModel; import pro.taskana.classification.rest.models.ClassificationRepresentationModel;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.BaseRestDocTest; import pro.taskana.rest.test.BaseRestDocTest;
class ClassificationControllerRestDocTest extends BaseRestDocTest { class ClassificationControllerRestDocTest extends BaseRestDocTest {

View File

@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.api.SharedConstants.MASTER_DOMAIN; import static pro.taskana.common.api.SharedConstants.MASTER_DOMAIN;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE; import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File; import java.io.File;
@ -42,8 +42,8 @@ import pro.taskana.classification.rest.models.ClassificationCollectionRepresenta
import pro.taskana.classification.rest.models.ClassificationDefinitionRepresentationModel; import pro.taskana.classification.rest.models.ClassificationDefinitionRepresentationModel;
import pro.taskana.classification.rest.models.ClassificationRepresentationModel; import pro.taskana.classification.rest.models.ClassificationRepresentationModel;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper; import pro.taskana.rest.test.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test classification definitions. */ /** Test classification definitions. */
@TaskanaSpringBootTest @TaskanaSpringBootTest

View File

@ -13,7 +13,7 @@ import pro.taskana.classification.api.models.Classification;
import pro.taskana.classification.rest.assembler.ClassificationRepresentationModelAssembler; import pro.taskana.classification.rest.assembler.ClassificationRepresentationModelAssembler;
import pro.taskana.classification.rest.models.ClassificationCollectionRepresentationModel; import pro.taskana.classification.rest.models.ClassificationCollectionRepresentationModel;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.BaseRestDocTest; import pro.taskana.rest.test.BaseRestDocTest;
class ClassificationDefinitionControllerRestDocTest extends BaseRestDocTest { class ClassificationDefinitionControllerRestDocTest extends BaseRestDocTest {

View File

@ -12,7 +12,7 @@ import pro.taskana.classification.api.models.Classification;
import pro.taskana.classification.internal.models.ClassificationImpl; import pro.taskana.classification.internal.models.ClassificationImpl;
import pro.taskana.classification.rest.models.ClassificationRepresentationModel; import pro.taskana.classification.rest.models.ClassificationRepresentationModel;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test for {@link ClassificationRepresentationModelAssembler}. */ /** Test for {@link ClassificationRepresentationModelAssembler}. */
@TaskanaSpringBootTest @TaskanaSpringBootTest

View File

@ -17,7 +17,7 @@ import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.ClassificationSummary; import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.classification.internal.models.ClassificationSummaryImpl; import pro.taskana.classification.internal.models.ClassificationSummaryImpl;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel; import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test for {@link ClassificationSummaryRepresentationModelAssembler}. */ /** Test for {@link ClassificationSummaryRepresentationModelAssembler}. */
@TaskanaSpringBootTest @TaskanaSpringBootTest

View File

@ -2,7 +2,7 @@ package pro.taskana.common.rest;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE; import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import java.util.List; import java.util.List;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -21,8 +21,8 @@ import org.springframework.web.client.HttpStatusCodeException;
import pro.taskana.common.internal.util.Pair; import pro.taskana.common.internal.util.Pair;
import pro.taskana.common.rest.models.AccessIdRepresentationModel; import pro.taskana.common.rest.models.AccessIdRepresentationModel;
import pro.taskana.common.test.rest.RestHelper; import pro.taskana.rest.test.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
@TaskanaSpringBootTest @TaskanaSpringBootTest
class AccessIdControllerIntTest { class AccessIdControllerIntTest {

View File

@ -5,7 +5,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import pro.taskana.common.test.BaseRestDocTest; import pro.taskana.rest.test.BaseRestDocTest;
class AccessIdControllerRestDocTest extends BaseRestDocTest { class AccessIdControllerRestDocTest extends BaseRestDocTest {

View File

@ -1,7 +1,7 @@
package pro.taskana.common.rest; package pro.taskana.common.rest;
import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE; import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays; import java.util.Arrays;
@ -20,8 +20,8 @@ import org.springframework.web.client.HttpStatusCodeException;
import pro.taskana.classification.rest.models.ClassificationSummaryPagedRepresentationModel; import pro.taskana.classification.rest.models.ClassificationSummaryPagedRepresentationModel;
import pro.taskana.common.api.exceptions.ErrorCode; import pro.taskana.common.api.exceptions.ErrorCode;
import pro.taskana.common.rest.TaskanaRestExceptionHandler.MalformedQueryParameter; import pro.taskana.common.rest.TaskanaRestExceptionHandler.MalformedQueryParameter;
import pro.taskana.common.test.rest.RestHelper; import pro.taskana.rest.test.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.workbasket.api.WorkbasketPermission; import pro.taskana.workbasket.api.WorkbasketPermission;
import pro.taskana.workbasket.api.WorkbasketType; import pro.taskana.workbasket.api.WorkbasketType;
import pro.taskana.workbasket.rest.models.WorkbasketSummaryPagedRepresentationModel; import pro.taskana.workbasket.rest.models.WorkbasketSummaryPagedRepresentationModel;

View File

@ -15,7 +15,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.internal.configuration.DB; import pro.taskana.common.internal.configuration.DB;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.sampledata.SampleDataGenerator; import pro.taskana.sampledata.SampleDataGenerator;
/** Test that the schema name can be customized. */ /** Test that the schema name can be customized. */

View File

@ -14,8 +14,8 @@ import org.springframework.web.client.RestTemplate;
import pro.taskana.common.api.TaskanaRole; import pro.taskana.common.api.TaskanaRole;
import pro.taskana.common.rest.models.CustomAttributesRepresentationModel; import pro.taskana.common.rest.models.CustomAttributesRepresentationModel;
import pro.taskana.common.rest.models.TaskanaUserInfoRepresentationModel; import pro.taskana.common.rest.models.TaskanaUserInfoRepresentationModel;
import pro.taskana.common.test.rest.RestHelper; import pro.taskana.rest.test.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test TaskanaEngineController. */ /** Test TaskanaEngineController. */
@TaskanaSpringBootTest @TaskanaSpringBootTest

View File

@ -8,7 +8,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import pro.taskana.common.rest.models.CustomAttributesRepresentationModel; import pro.taskana.common.rest.models.CustomAttributesRepresentationModel;
import pro.taskana.common.test.BaseRestDocTest; import pro.taskana.rest.test.BaseRestDocTest;
class TaskanaEngineControllerRestDocTest extends BaseRestDocTest { class TaskanaEngineControllerRestDocTest extends BaseRestDocTest {

View File

@ -1,74 +0,0 @@
package pro.taskana.common.rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter;
@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
private final LdapAuthoritiesPopulator ldapAuthoritiesPopulator;
private final GrantedAuthoritiesMapper grantedAuthoritiesMapper;
private final String ldapServerUrl;
private final String ldapBaseDn;
private final String ldapGroupSearchBase;
private final String ldapUserDnPatterns;
@Autowired
public WebSecurityConfigurer(
@Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl,
@Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.userDnPatterns:uid={0},cn=users}") String ldapUserDnPatterns,
LdapAuthoritiesPopulator ldapAuthoritiesPopulator,
GrantedAuthoritiesMapper grantedAuthoritiesMapper) {
this.ldapServerUrl = ldapServerUrl;
this.ldapBaseDn = ldapBaseDn;
this.ldapGroupSearchBase = ldapGroupSearchBase;
this.ldapUserDnPatterns = ldapUserDnPatterns;
this.ldapAuthoritiesPopulator = ldapAuthoritiesPopulator;
this.grantedAuthoritiesMapper = grantedAuthoritiesMapper;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userDnPatterns(ldapUserDnPatterns)
.groupSearchBase(ldapGroupSearchBase)
.ldapAuthoritiesPopulator(ldapAuthoritiesPopulator)
.authoritiesMapper(grantedAuthoritiesMapper)
.contextSource()
.url(ldapServerUrl + "/" + ldapBaseDn)
.and()
.passwordCompare()
.passwordAttribute("userPassword");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.and()
.csrf()
.disable()
.httpBasic()
.and()
.addFilter(jaasApiIntegrationFilter())
.addFilterAfter(new SpringSecurityToJaasFilter(), JaasApiIntegrationFilter.class)
.authorizeRequests()
.anyRequest()
.fullyAuthenticated();
}
private JaasApiIntegrationFilter jaasApiIntegrationFilter() {
JaasApiIntegrationFilter filter = new JaasApiIntegrationFilter();
filter.setCreateEmptySubject(true);
return filter;
}
}

View File

@ -2,7 +2,7 @@ package pro.taskana.monitor.rest;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE; import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URLEncoder; import java.net.URLEncoder;
@ -18,11 +18,11 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.client.HttpClientErrorException.BadRequest; import org.springframework.web.client.HttpClientErrorException.BadRequest;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.monitor.rest.models.PriorityColumnHeaderRepresentationModel; import pro.taskana.monitor.rest.models.PriorityColumnHeaderRepresentationModel;
import pro.taskana.monitor.rest.models.ReportRepresentationModel; import pro.taskana.monitor.rest.models.ReportRepresentationModel;
import pro.taskana.monitor.rest.models.ReportRepresentationModel.RowRepresentationModel; import pro.taskana.monitor.rest.models.ReportRepresentationModel.RowRepresentationModel;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test MonitorController. */ /** Test MonitorController. */
@TaskanaSpringBootTest @TaskanaSpringBootTest

View File

@ -6,7 +6,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.BaseRestDocTest; import pro.taskana.rest.test.BaseRestDocTest;
class MonitorControllerRestDocTest extends BaseRestDocTest { class MonitorControllerRestDocTest extends BaseRestDocTest {

View File

@ -5,9 +5,9 @@ import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.monitor.api.reports.header.PriorityColumnHeader; import pro.taskana.monitor.api.reports.header.PriorityColumnHeader;
import pro.taskana.monitor.rest.models.PriorityColumnHeaderRepresentationModel; import pro.taskana.monitor.rest.models.PriorityColumnHeaderRepresentationModel;
import pro.taskana.rest.test.TaskanaSpringBootTest;
@TaskanaSpringBootTest @TaskanaSpringBootTest
class PriorityColumnHeaderRepresentationModelAssemblerTest { class PriorityColumnHeaderRepresentationModelAssemblerTest {

View File

@ -13,13 +13,13 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.monitor.api.reports.ClassificationReport; import pro.taskana.monitor.api.reports.ClassificationReport;
import pro.taskana.monitor.api.reports.WorkbasketReport; import pro.taskana.monitor.api.reports.WorkbasketReport;
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader; import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
import pro.taskana.monitor.api.reports.item.DetailedMonitorQueryItem; import pro.taskana.monitor.api.reports.item.DetailedMonitorQueryItem;
import pro.taskana.monitor.api.reports.item.MonitorQueryItem; import pro.taskana.monitor.api.reports.item.MonitorQueryItem;
import pro.taskana.monitor.rest.models.ReportRepresentationModel; import pro.taskana.monitor.rest.models.ReportRepresentationModel;
import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test for {@link ReportRepresentationModelAssembler}. */ /** Test for {@link ReportRepresentationModelAssembler}. */
@TaskanaSpringBootTest @TaskanaSpringBootTest

View File

@ -2,7 +2,7 @@ package pro.taskana.task.rest;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE; import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import java.time.Instant; import java.time.Instant;
import java.util.Comparator; import java.util.Comparator;
@ -18,8 +18,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.HttpStatusCodeException;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper; import pro.taskana.rest.test.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.rest.models.TaskCommentCollectionRepresentationModel; import pro.taskana.task.rest.models.TaskCommentCollectionRepresentationModel;
import pro.taskana.task.rest.models.TaskCommentRepresentationModel; import pro.taskana.task.rest.models.TaskCommentRepresentationModel;

View File

@ -11,13 +11,13 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.BaseRestDocTest; import pro.taskana.rest.test.BaseRestDocTest;
import pro.taskana.common.test.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId;
import pro.taskana.task.api.TaskService; import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.TaskComment; import pro.taskana.task.api.models.TaskComment;
import pro.taskana.task.rest.assembler.TaskCommentRepresentationModelAssembler; import pro.taskana.task.rest.assembler.TaskCommentRepresentationModelAssembler;
import pro.taskana.task.rest.models.TaskCommentRepresentationModel; import pro.taskana.task.rest.models.TaskCommentRepresentationModel;
import pro.taskana.testapi.security.JaasExtension;
import pro.taskana.testapi.security.WithAccessId;
@ExtendWith(JaasExtension.class) @ExtendWith(JaasExtension.class)
class TaskCommentControllerRestDocTest extends BaseRestDocTest { class TaskCommentControllerRestDocTest extends BaseRestDocTest {

View File

@ -3,7 +3,7 @@ package pro.taskana.task.rest;
import static java.nio.charset.StandardCharsets.UTF_8; import static java.nio.charset.StandardCharsets.UTF_8;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE; import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
@ -37,8 +37,8 @@ import org.springframework.web.client.HttpStatusCodeException;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel; import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper; import pro.taskana.rest.test.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.sampledata.SampleDataGenerator; import pro.taskana.sampledata.SampleDataGenerator;
import pro.taskana.task.api.TaskState; import pro.taskana.task.api.TaskState;
import pro.taskana.task.rest.models.IsReadRepresentationModel; import pro.taskana.task.rest.models.IsReadRepresentationModel;

View File

@ -11,16 +11,16 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.BaseRestDocTest; import pro.taskana.rest.test.BaseRestDocTest;
import pro.taskana.common.test.rest.RestHelper; import pro.taskana.rest.test.RestHelper;
import pro.taskana.common.test.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId;
import pro.taskana.task.api.TaskService; import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.Task; import pro.taskana.task.api.models.Task;
import pro.taskana.task.internal.models.ObjectReferenceImpl; import pro.taskana.task.internal.models.ObjectReferenceImpl;
import pro.taskana.task.rest.assembler.TaskRepresentationModelAssembler; import pro.taskana.task.rest.assembler.TaskRepresentationModelAssembler;
import pro.taskana.task.rest.models.IsReadRepresentationModel; import pro.taskana.task.rest.models.IsReadRepresentationModel;
import pro.taskana.task.rest.models.TaskRepresentationModel; import pro.taskana.task.rest.models.TaskRepresentationModel;
import pro.taskana.testapi.security.JaasExtension;
import pro.taskana.testapi.security.WithAccessId;
@ExtendWith(JaasExtension.class) @ExtendWith(JaasExtension.class)
class TaskControllerRestDocTest extends BaseRestDocTest { class TaskControllerRestDocTest extends BaseRestDocTest {

View File

@ -10,7 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.classification.api.ClassificationService; import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.ClassificationSummary; import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel; import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.TaskService; import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.Attachment; import pro.taskana.task.api.models.Attachment;
import pro.taskana.task.internal.models.AttachmentImpl; import pro.taskana.task.internal.models.AttachmentImpl;

View File

@ -9,7 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.classification.api.ClassificationService; import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.ClassificationSummary; import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel; import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.TaskService; import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.AttachmentSummary; import pro.taskana.task.api.models.AttachmentSummary;
import pro.taskana.task.internal.models.AttachmentSummaryImpl; import pro.taskana.task.internal.models.AttachmentSummaryImpl;

View File

@ -5,7 +5,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.models.ObjectReference; import pro.taskana.task.api.models.ObjectReference;
import pro.taskana.task.internal.models.ObjectReferenceImpl; import pro.taskana.task.internal.models.ObjectReferenceImpl;
import pro.taskana.task.rest.models.ObjectReferenceRepresentationModel; import pro.taskana.task.rest.models.ObjectReferenceRepresentationModel;

View File

@ -6,7 +6,7 @@ import java.time.Instant;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.TaskService; import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.TaskComment; import pro.taskana.task.api.models.TaskComment;
import pro.taskana.task.internal.models.TaskCommentImpl; import pro.taskana.task.internal.models.TaskCommentImpl;

View File

@ -13,7 +13,7 @@ import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel; import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.api.exceptions.InvalidArgumentException; import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.TaskCustomField; import pro.taskana.task.api.TaskCustomField;
import pro.taskana.task.api.TaskCustomIntField; import pro.taskana.task.api.TaskCustomIntField;
import pro.taskana.task.api.TaskService; import pro.taskana.task.api.TaskService;

View File

@ -26,7 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.classification.api.ClassificationService; import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.ClassificationSummary; import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel; import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.TaskCustomIntField; import pro.taskana.task.api.TaskCustomIntField;
import pro.taskana.task.api.TaskService; import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.TaskState; import pro.taskana.task.api.TaskState;

View File

@ -20,9 +20,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.api.TaskanaEngine; import pro.taskana.common.api.TaskanaEngine;
import pro.taskana.common.rest.ldap.LdapClient; import pro.taskana.common.rest.ldap.LdapClient;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.common.test.security.JaasExtension; import pro.taskana.testapi.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId; import pro.taskana.testapi.security.WithAccessId;
import pro.taskana.user.api.UserService; import pro.taskana.user.api.UserService;
import pro.taskana.user.api.models.User; import pro.taskana.user.api.models.User;

View File

@ -2,7 +2,7 @@ package pro.taskana.user.rest;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE; import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import java.util.Set; import java.util.Set;
import org.assertj.core.api.ThrowableAssert.ThrowingCallable; import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
@ -16,8 +16,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.HttpStatusCodeException;
import pro.taskana.common.rest.RestEndpoints; import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper; import pro.taskana.rest.test.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest; import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.user.rest.models.UserCollectionRepresentationModel; import pro.taskana.user.rest.models.UserCollectionRepresentationModel;
import pro.taskana.user.rest.models.UserRepresentationModel; import pro.taskana.user.rest.models.UserRepresentationModel;

Some files were not shown because too many files have changed in this diff Show More