You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/08/01 22:35:09 UTC
[isis] branch ISIS-2719 created (now 21296cf)
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a change to branch ISIS-2719
in repository https://gitbox.apache.org/repos/asf/isis.git.
at 21296cf ISIS-2719: implements ApplicationPermissionRepository queries more effectively. Also ...
This branch includes the following new commits:
new d842757 ISIS-2719: adds findByRoleNames (for permissions)
new 21296cf ISIS-2719: implements ApplicationPermissionRepository queries more effectively. Also ...
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[isis] 01/02: ISIS-2719: adds findByRoleNames (for permissions)
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch ISIS-2719
in repository https://gitbox.apache.org/repos/asf/isis.git
commit d8427576c4dc3f07df33c34fb7c4e91ef1722f01
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Aug 1 16:58:10 2021 +0100
ISIS-2719: adds findByRoleNames (for permissions)
and adds more sophisticated implementation of findByUser for JPA.
---
.../permission/dom/ApplicationPermission.java | 1 +
.../dom/ApplicationPermissionRepository.java | 22 +++++++++++++++++---
.../ApplicationPermissionRepositoryAbstract.java | 24 +++++++++++-----------
.../jdo/permission/dom/ApplicationPermission.java | 5 +++++
.../jpa/permission/dom/ApplicationPermission.java | 13 ++++++++----
.../dom/ApplicationPermissionRepository.java | 19 -----------------
6 files changed, 46 insertions(+), 38 deletions(-)
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermission.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermission.java
index d26dd1f..b93d525 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermission.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermission.java
@@ -91,6 +91,7 @@ public abstract class ApplicationPermission implements Comparable<ApplicationPer
public static final String NAMED_QUERY_FIND_BY_ROLE_RULE_FEATURE = "ApplicationPermission.findByRoleAndRuleAndFeature";
public static final String NAMED_QUERY_FIND_BY_ROLE_RULE_FEATURE_FQN = "ApplicationPermission.findByRoleAndRuleAndFeatureAndFqn";
public static final String NAMED_QUERY_FIND_BY_USER = "ApplicationPermission.findByUser";
+ public static final String NAMED_QUERY_FIND_BY_ROLE_NAMES = "ApplicationPermission.findByRoleNames";
@Inject transient ApplicationFeatureRepository featureRepository;
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepository.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepository.java
index 482bb99..1ddfdd9 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepository.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepository.java
@@ -87,14 +87,30 @@ public interface ApplicationPermissionRepository {
ApplicationFeatureSort sort,
String featureFqn);
+ /**
+ * Uses the {@link ApplicationRole}s associated with the {@link ApplicationUser}.
+ */
List<ApplicationPermission> findByUser(ApplicationUser applicationUser);
List<ApplicationPermission> findByRole(ApplicationRole applicationRole);
/**
- * To support impersonation by role
- * @param user
- * @return
+ * Uses the {@link UserMemento#getRoles() roles} held within the provided {@link UserMemento}.
+ *
+ * <p>
+ * Added to support {@link org.apache.isis.applib.services.user.ImpersonateMenu#impersonateWithRoles(String, List) impersonation by role}.
+ * </p>
+ *
+ * @see #findByRoleNames(List)
*/
List<ApplicationPermission> findByUserMemento(UserMemento user);
+
+ /**
+ * Returns the set of permissions associated with the provided list of roles (identified by
+ * their role name).
+ *
+ * @see #findByUserMemento(UserMemento).
+ */
+ List<ApplicationPermission> findByRoleNames(List<String> roleNames);
+
}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java
index a559bad..1addd95 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
+import java.util.stream.Collectors;
import javax.inject.Inject;
@@ -97,19 +98,18 @@ implements ApplicationPermissionRepository {
}
public List<ApplicationPermission> findByUserMemento(@NonNull final UserMemento userMemento) {
- val permissions = new ArrayList<ApplicationPermission>();
-
- // TODO: this is naive in the extreme...
- userMemento.getRoles().stream()
+ val roleNames = userMemento.getRoles().stream()
.map(RoleMemento::getName)
- .map(roleRepository::findByName)
- .filter(Optional::isPresent)
- .map(Optional::get)
- .forEach(role -> {
- final List<ApplicationPermission> byRole = findByRole(role);
- permissions.addAll(byRole);
- });
- return permissions;
+ .collect(Collectors.toList());
+ return findByRoleNames(roleNames);
+ }
+
+ public List<ApplicationPermission> findByRoleNames(@NonNull final List<String> roleNames) {
+ return _Casts.uncheckedCast(
+ repository.allMatches(
+ Query.named(this.applicationPermissionClass, ApplicationPermission.NAMED_QUERY_FIND_BY_USER)
+ .withParameter("roleNames", roleNames))
+ );
}
private List<ApplicationPermission> findByUser(final String username) {
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermission.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermission.java
index 46496de..e9b15c0 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermission.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermission.java
@@ -66,6 +66,11 @@ import org.apache.isis.extensions.secman.applib.role.dom.ApplicationRole;
+ " WHERE (u.roles.contains(role) && u.username == :username) "
+ "VARIABLES org.apache.isis.extensions.secman.jdo.user.dom.ApplicationUser u"),
@Query(
+ name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_ROLE_NAMES,
+ value = "SELECT "
+ + "FROM " + ApplicationPermission.FQCN
+ + " WHERE :roleNames.contains(role.name) "),
+ @Query(
name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_FEATURE,
value = "SELECT "
+ "FROM " + ApplicationPermission.FQCN
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java
index 27d66a1..16fc5e1 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java
@@ -61,12 +61,17 @@ import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
+ " WHERE p.role = :role"),
@NamedQuery(
name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_USER,
- //TODO this query returns empty result
query = "SELECT p "
+ "FROM ApplicationPermission p "
- + " , ApplicationUser u "
- + "WHERE u.username = :username"
- + " AND p.role MEMBER OF u.roles"),
+ + "INNER JOIN ApplicationRole r "
+ + "INNER JOIN ApplicationUser u "
+ + "WHERE u.username = :username"),
+ @NamedQuery(
+ name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_ROLE_NAMES,
+ query = "SELECT p "
+ + "FROM ApplicationPermission p "
+ + "INNER JOIN ApplicationRole r "
+ + "WHERE r.name IN :roleNames"),
@NamedQuery(
name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_FEATURE,
query = "SELECT p "
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository.java
index 13bf8d0..72d4dd9 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository.java
@@ -43,23 +43,4 @@ extends ApplicationPermissionRepositoryAbstract<ApplicationPermission> {
super(ApplicationPermission.class);
}
- // TODO NAMED_QUERY_FIND_BY_USER not working yet, using workaround ...
- @Override
- public List<org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission>
- findByUser(final @NonNull ApplicationUser user) {
- final String username = user.getUsername();
-
- return userRepository.findByUsername(username)
- .map(ApplicationUser::getRoles)
- .map(_NullSafe::stream)
- .map(roleStream -> roleStream
- .map(this::findByRole)
- .flatMap(List::stream)
- .map(org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.class::cast)
- .collect(Collectors.toList()))
- .orElse(Collections.emptyList());
- }
-
- @Inject private ApplicationUserRepository userRepository;
-
}
[isis] 02/02: ISIS-2719: implements ApplicationPermissionRepository
queries more effectively. Also ...
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch ISIS-2719
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 21296cf0f64977db543fb4656d4527e2d2667e58
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Aug 1 23:34:33 2021 +0100
ISIS-2719: implements ApplicationPermissionRepository queries more effectively. Also ...
... rationalizes the IsisModulePersistence{Jdo/Jpa} module class names (adds in "Persistence" where necessary).
... makes the Secman Jdo/Jpa depend on the IsisModulePersistence Jdo/Jpa modules automatically
... corresponding updates to pom.xml's
also:
- tests the perm repos with new integ tests.
---
.../isis/applib/services/user/UserService.java | 10 ++-
.../org/apache/isis/applib/value/Password.java | 4 +
.../src/main/java/demoapp/dom/DemoModuleJdo.java | 4 +-
.../src/main/java/demoapp/dom/DemoModuleJpa.java | 4 +-
extensions/security/secman/applib/pom.xml | 7 ++
.../secman/applib/IsisModuleExtSecmanApplib.java | 4 +
.../ApplicationPermissionRepositoryAbstract.java | 3 +-
.../mixins/ApplicationPermission_updateRole.java | 2 +-
.../applib/role/dom/ApplicationRoleRepository.java | 2 -
.../dom/ApplicationRoleRepositoryAbstract.java | 1 +
.../applib/seed/SeedSecurityModuleService.java | 11 ++-
...ationPermissionRepositoryIntegTestAbstract.java | 95 ++++++++++++++++++++++
.../extensions/secman/applib/mmm/MmmModule.java | 19 +++++
.../secman/applib/mmm/dom/ChaseCatsService.java | 10 +++
.../secman/applib/mmm/dom/EatCheeseService.java | 10 +++
.../applib/mmm/dom/PressLiftButtonService.java | 10 +++
.../secman/applib/mmm/dom/RideLiftService.java | 10 +++
.../secman/persistence-jdo/log4j2-test.xml | 78 ++++++++++++++++++
extensions/security/secman/persistence-jdo/pom.xml | 25 +++---
.../jdo/IsisModuleExtSecmanPersistenceJdo.java | 4 +-
.../ApplicationPermissionRepository_IntegTest.java | 40 +++++++++
.../src/test/resources/application-test.yml | 29 +++++++
.../secman/persistence-jpa/log4j2-test.xml | 78 ++++++++++++++++++
extensions/security/secman/persistence-jpa/pom.xml | 18 +++-
.../jpa/IsisModuleExtSecmanPersistenceJpa.java | 4 +-
.../jpa/permission/dom/ApplicationPermission.java | 18 ++--
.../ApplicationPermissionRepository_IntegTest.java | 40 +++++++++
.../src/test/resources/application-test.yml | 24 ++++++
extensions/security/secman/pom.xml | 16 ++++
persistence/jdo/datanucleus/pom.xml | 6 +-
...va => IsisModulePersistenceJdoDatanucleus.java} | 6 +-
...va => IsisModulePersistenceJdoIntegration.java} | 6 +-
...java => IsisModulePersistenceJdoMetamodel.java} | 2 +-
.../jdo/metamodel/menu/JdoMetamodelMenu.java | 4 +-
...ng.java => IsisModulePersistenceJdoSpring.java} | 2 +-
.../applib/IsisModulePersistenceJpaApplib.java} | 7 +-
...va => IsisModulePersistenceJpaEclipselink.java} | 8 +-
persistence/jpa/integration/pom.xml | 5 --
...va => IsisModulePersistenceJpaIntegration.java} | 5 +-
...java => IsisModulePersistenceJpaMetamodel.java} | 8 +-
.../testdomain/conf/Configuration_usingJdo.java | 4 +-
.../conf/Configuration_usingJdoAndShiro.java | 4 +-
.../testdomain/conf/Configuration_usingJpa.java | 4 +-
.../conf/Configuration_usingSpringDataJpa.java | 4 +-
44 files changed, 573 insertions(+), 82 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java
index 9e37265..e031623 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java
@@ -25,14 +25,16 @@ import javax.annotation.Nullable;
import javax.annotation.Priority;
import javax.inject.Inject;
import javax.inject.Named;
+import javax.inject.Provider;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.PriorityPrecedence;
import org.apache.isis.applib.services.iactnlayer.InteractionContext;
import org.apache.isis.applib.services.iactnlayer.InteractionLayerTracker;
import org.apache.isis.applib.services.sudo.SudoService;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import lombok.val;
@@ -75,7 +77,7 @@ public class UserService {
*/
public static final String NOBODY = "__isis_nobody";
- private final InteractionLayerTracker iInteractionLayerTracker;
+ private final Provider<InteractionLayerTracker> iInteractionLayerTrackerProvider;
private final List<ImpersonatedUserHolder> impersonatedUserHolders;
@@ -88,7 +90,7 @@ public class UserService {
val impersonatedUserIfAny = impersonatedUserIfAny();
return impersonatedUserIfAny.isPresent()
? impersonatedUserIfAny
- : iInteractionLayerTracker.currentInteractionContext().map(InteractionContext::getUser);
+ : iInteractionLayerTrackerProvider.get().currentInteractionContext().map(InteractionContext::getUser);
}
/**
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Password.java b/api/applib/src/main/java/org/apache/isis/applib/value/Password.java
index 81746f1..a53c671 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/Password.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/Password.java
@@ -47,6 +47,10 @@ public class Password implements Serializable {
private final String password;
+ public static Password of(final String password) {
+ return new Password(password);
+ }
+
// in support of XML un-marshaling
@SuppressWarnings("unused")
private Password() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJdo.java
index c394472..a57d43b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJdo.java
@@ -26,13 +26,13 @@ import org.springframework.context.annotation.PropertySources;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.extensions.commandlog.jdo.IsisModuleExtCommandLogJdo;
-import org.apache.isis.persistence.jdo.datanucleus.IsisModuleJdoDatanucleus;
+import org.apache.isis.persistence.jdo.datanucleus.IsisModulePersistenceJdoDatanucleus;
@Configuration
@Profile("demo-jdo")
@Import({
DemoModuleCommon.class,
- IsisModuleJdoDatanucleus.class,
+ IsisModulePersistenceJdoDatanucleus.class,
IsisModuleExtCommandLogJdo.class,
})
@PropertySources({
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
index cbccf06..851b6f1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
@@ -24,7 +24,7 @@ import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Profile;
import org.apache.isis.extensions.commandlog.jpa.IsisModuleExtCommandLogJpa;
-import org.apache.isis.persistence.jpa.eclipselink.IsisModuleJpaEclipselink;
+import org.apache.isis.persistence.jpa.eclipselink.IsisModulePersistenceJpaEclipselink;
import demoapp.dom.domain.actions.Action.commandPublishing.jpa.ActionCommandPublishingJpa;
import demoapp.dom.domain.actions.Action.executionPublishing.jpa.ActionExecutionPublishingJpa;
@@ -81,7 +81,7 @@ import demoapp.dom.types.primitive.shorts.jpa.PrimitiveShortJpa;
@Profile("demo-jpa")
@Import({
DemoModuleCommon.class,
- IsisModuleJpaEclipselink.class,
+ IsisModulePersistenceJpaEclipselink.class,
IsisModuleExtCommandLogJpa.class,
})
@EntityScan(basePackageClasses = {
diff --git a/extensions/security/secman/applib/pom.xml b/extensions/security/secman/applib/pom.xml
index 2f724d6..341c626 100644
--- a/extensions/security/secman/applib/pom.xml
+++ b/extensions/security/secman/applib/pom.xml
@@ -50,6 +50,13 @@
</exclusions>
</dependency>
+ <dependency>
+ <groupId>org.apache.isis.mavendeps</groupId>
+ <artifactId>isis-mavendeps-integtests</artifactId>
+ <type>pom</type>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
</project>
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java
index c26d878..96aba84 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java
@@ -75,12 +75,16 @@ import org.apache.isis.extensions.secman.applib.user.dom.mixins.perms.Applicatio
import org.apache.isis.extensions.secman.applib.user.dom.mixins.perms.UserPermissionViewModel;
import org.apache.isis.extensions.secman.applib.user.menu.ApplicationUserMenu;
import org.apache.isis.extensions.secman.applib.user.menu.MeService;
+import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
/**
* @since 2.0 {@index}
*/
@Configuration
@Import({
+ // modules
+ IsisModuleTestingFixturesApplib.class,
+
ApplicationFeatureChoices.class,
// @DomainService
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java
index 1addd95..df8bbfe 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java
@@ -18,7 +18,6 @@
*/
package org.apache.isis.extensions.secman.applib.permission.dom;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
@@ -107,7 +106,7 @@ implements ApplicationPermissionRepository {
public List<ApplicationPermission> findByRoleNames(@NonNull final List<String> roleNames) {
return _Casts.uncheckedCast(
repository.allMatches(
- Query.named(this.applicationPermissionClass, ApplicationPermission.NAMED_QUERY_FIND_BY_USER)
+ Query.named(this.applicationPermissionClass, ApplicationPermission.NAMED_QUERY_FIND_BY_ROLE_NAMES)
.withParameter("roleNames", roleNames))
);
}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/mixins/ApplicationPermission_updateRole.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/mixins/ApplicationPermission_updateRole.java
index db0fd67..09f11cb 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/mixins/ApplicationPermission_updateRole.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/mixins/ApplicationPermission_updateRole.java
@@ -50,7 +50,7 @@ public class ApplicationPermission_updateRole {
public static class DomainEvent
extends IsisModuleExtSecmanApplib.ActionDomainEvent<ApplicationPermission_updateRole> {}
- @Inject private ApplicationRoleRepository applicationRoleRepository;
+ @Inject ApplicationRoleRepository applicationRoleRepository;
private final ApplicationPermission target;
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepository.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepository.java
index cb7008e..dd052dc 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepository.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepository.java
@@ -62,6 +62,4 @@ public interface ApplicationRoleRepository {
void deleteRole(ApplicationRole holder);
-
-
}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepositoryAbstract.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepositoryAbstract.java
index 0a36714..5ab94da 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepositoryAbstract.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepositoryAbstract.java
@@ -178,4 +178,5 @@ implements ApplicationRoleRepository {
return user.getRoles();
}
+
}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/seed/SeedSecurityModuleService.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/seed/SeedSecurityModuleService.java
index 30f0f60..6d912bb 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/seed/SeedSecurityModuleService.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/seed/SeedSecurityModuleService.java
@@ -27,10 +27,12 @@ import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.PriorityPrecedence;
+import org.apache.isis.applib.services.iactnlayer.InteractionService;
import org.apache.isis.core.metamodel.events.MetamodelEvent;
import org.apache.isis.extensions.secman.applib.seed.scripts.SeedUsersAndRolesFixtureScript;
import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
+import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
/**
@@ -49,15 +51,12 @@ import lombok.extern.log4j.Log4j2;
@Service
@Named("isis.ext.secman.SeedSecurityModuleService")
@Qualifier("Default")
+@RequiredArgsConstructor(onConstructor_ = {@Inject })
@Log4j2
public class SeedSecurityModuleService {
private final FixtureScripts fixtureScripts;
-
- @Inject
- public SeedSecurityModuleService(final FixtureScripts fixtureScripts) {
- this.fixtureScripts = fixtureScripts;
- }
+ private final InteractionService interactionService;
@EventListener(MetamodelEvent.class)
@Order(PriorityPrecedence.MIDPOINT - 100)
@@ -68,7 +67,7 @@ public class SeedSecurityModuleService {
if (event.isPostMetamodel()) {
log.info("SEED security fixtures (Users and Roles)");
- fixtureScripts.run(new SeedUsersAndRolesFixtureScript());
+ interactionService.runAnonymous(() -> fixtureScripts.run(new SeedUsersAndRolesFixtureScript()));
}
}
}
diff --git a/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/ApplicationPermissionRepositoryIntegTestAbstract.java b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/ApplicationPermissionRepositoryIntegTestAbstract.java
new file mode 100644
index 0000000..bc218a5
--- /dev/null
+++ b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/ApplicationPermissionRepositoryIntegTestAbstract.java
@@ -0,0 +1,95 @@
+package org.apache.isis.extensions.secman.applib;
+
+import java.util.Arrays;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.applib.value.Password;
+import org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission;
+import org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermissionRepository;
+import org.apache.isis.extensions.secman.applib.role.dom.ApplicationRole;
+import org.apache.isis.extensions.secman.applib.role.dom.ApplicationRoleRepository;
+import org.apache.isis.extensions.secman.applib.user.dom.ApplicationUser;
+import org.apache.isis.extensions.secman.applib.user.dom.ApplicationUserRepository;
+import org.apache.isis.extensions.secman.applib.user.dom.ApplicationUserStatus;
+import org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
+
+import static org.apache.isis.applib.services.appfeat.ApplicationFeatureId.newType;
+import static org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermissionMode.CHANGING;
+import static org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermissionRule.ALLOW;
+
+import lombok.val;
+
+public abstract class ApplicationPermissionRepositoryIntegTestAbstract extends IsisIntegrationTestAbstract {
+
+ protected ApplicationUser maryUser, mungoUser, midgeUser;
+ protected ApplicationRole girlRole, dogRole, mouseRole, littleRole, flatDwellerRole;
+ protected ApplicationPermission rideLiftForGirlRolePerm, rideLiftForDogRolePerm, rideLiftForMouseRolePerm;
+ protected ApplicationPermission liftButtonForGirlRolePerm;
+ protected ApplicationPermission chaseCatsForDogRolePerm;
+ protected ApplicationPermission eatCheeseForMouseRolePerm;
+
+ @BeforeEach
+ void setUp() {
+ maryUser = userRepository
+ .upsertLocal("mary", Password.of("marypass"), ApplicationUserStatus.UNLOCKED);
+ mungoUser = userRepository
+ .upsertLocal("mungo", Password.of("mungopass"), ApplicationUserStatus.UNLOCKED);
+ midgeUser = userRepository.upsertLocal("midge", Password.of("midgepass"), ApplicationUserStatus.UNLOCKED);
+
+ girlRole = roleRepository.upsert("girl", "Girl");
+ dogRole = roleRepository.upsert("dog", "Dog");
+ mouseRole = roleRepository.upsert("mouse", "Mouse");
+
+ littleRole = roleRepository.upsert("little", "Little");
+ flatDwellerRole = roleRepository.upsert("flat-dweller", "Flat Dweller");
+
+ roleRepository.addRoleToUser(girlRole, maryUser);
+ roleRepository.addRoleToUser(littleRole, maryUser);
+ roleRepository.addRoleToUser(flatDwellerRole, maryUser);
+
+ roleRepository.addRoleToUser(dogRole, mungoUser);
+ roleRepository.addRoleToUser(flatDwellerRole, mungoUser);
+
+ roleRepository.addRoleToUser(mouseRole, midgeUser);
+ roleRepository.addRoleToUser(littleRole, midgeUser);
+ roleRepository.addRoleToUser(flatDwellerRole, midgeUser);
+
+ ApplicationFeatureId rideLiftFeature = newType("mmm.RideLiftService");
+
+ liftButtonForGirlRolePerm = permissionRepository.newPermission(girlRole, ALLOW, CHANGING, newType("mmm.PressLiftButtonService"));
+ rideLiftForGirlRolePerm = permissionRepository.newPermission(girlRole, ALLOW, CHANGING, rideLiftFeature);
+ rideLiftForDogRolePerm = permissionRepository.newPermission(dogRole, ALLOW, CHANGING, rideLiftFeature);
+ chaseCatsForDogRolePerm = permissionRepository.newPermission(dogRole, ALLOW, CHANGING, newType("mmm.ChaseCatsService"));
+ rideLiftForMouseRolePerm = permissionRepository.newPermission(mouseRole, ALLOW, CHANGING, rideLiftFeature);
+ eatCheeseForMouseRolePerm = permissionRepository.newPermission(mouseRole, ALLOW, CHANGING, newType("mmm.EatsCheeseService"));
+ }
+
+ @Test
+ void end_to_end() {
+
+ // when
+ val maryPermissions = permissionRepository.findByUser(maryUser);
+
+ // then
+ Assertions.assertThat(maryPermissions).containsExactlyInAnyOrder(liftButtonForGirlRolePerm, rideLiftForGirlRolePerm);
+
+ // when
+ final List<ApplicationPermission> adhocPermissions = permissionRepository.findByRoleNames(Arrays.asList(girlRole.getName(), mouseRole.getName()));
+
+ // then
+ Assertions.assertThat(adhocPermissions).containsExactlyInAnyOrder(liftButtonForGirlRolePerm, rideLiftForGirlRolePerm, rideLiftForMouseRolePerm, eatCheeseForMouseRolePerm);
+
+ }
+
+ @Inject ApplicationPermissionRepository permissionRepository;
+ @Inject ApplicationRoleRepository roleRepository;
+ @Inject ApplicationUserRepository userRepository;
+
+}
\ No newline at end of file
diff --git a/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/MmmModule.java b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/MmmModule.java
new file mode 100644
index 0000000..92b86a3
--- /dev/null
+++ b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/MmmModule.java
@@ -0,0 +1,19 @@
+package org.apache.isis.extensions.secman.applib.mmm;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+import org.apache.isis.extensions.secman.applib.mmm.dom.ChaseCatsService;
+import org.apache.isis.extensions.secman.applib.mmm.dom.EatCheeseService;
+import org.apache.isis.extensions.secman.applib.mmm.dom.PressLiftButtonService;
+import org.apache.isis.extensions.secman.applib.mmm.dom.RideLiftService;
+
+@Configuration
+@Import({
+ PressLiftButtonService.class,
+ RideLiftService.class,
+ ChaseCatsService.class,
+ EatCheeseService.class,
+})
+public class MmmModule {
+}
diff --git a/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/ChaseCatsService.java b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/ChaseCatsService.java
new file mode 100644
index 0000000..088fae4
--- /dev/null
+++ b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/ChaseCatsService.java
@@ -0,0 +1,10 @@
+package org.apache.isis.extensions.secman.applib.mmm.dom;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.DomainService;
+
+@DomainService(logicalTypeName = "mmm.ChaseCatsService")
+public class ChaseCatsService {
+ @Action
+ public void chaseCats() {}
+}
diff --git a/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/EatCheeseService.java b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/EatCheeseService.java
new file mode 100644
index 0000000..30e1e920
--- /dev/null
+++ b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/EatCheeseService.java
@@ -0,0 +1,10 @@
+package org.apache.isis.extensions.secman.applib.mmm.dom;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.DomainService;
+
+@DomainService(logicalTypeName = "mmm.EatsCheeseService")
+public class EatCheeseService {
+ @Action
+ public void eatCheese() {}
+}
diff --git a/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/PressLiftButtonService.java b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/PressLiftButtonService.java
new file mode 100644
index 0000000..79d7ec0
--- /dev/null
+++ b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/PressLiftButtonService.java
@@ -0,0 +1,10 @@
+package org.apache.isis.extensions.secman.applib.mmm.dom;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.DomainService;
+
+@DomainService(logicalTypeName = "mmm.PressLiftButtonService")
+public class PressLiftButtonService {
+ @Action
+ public void pressLiftButton() {}
+}
diff --git a/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/RideLiftService.java b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/RideLiftService.java
new file mode 100644
index 0000000..5b4e7a9
--- /dev/null
+++ b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/RideLiftService.java
@@ -0,0 +1,10 @@
+package org.apache.isis.extensions.secman.applib.mmm.dom;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.DomainService;
+
+@DomainService(logicalTypeName = "mmm.RideLiftService")
+public class RideLiftService {
+ @Action
+ public void rideLift() {}
+}
diff --git a/extensions/security/secman/persistence-jdo/log4j2-test.xml b/extensions/security/secman/persistence-jdo/log4j2-test.xml
new file mode 100644
index 0000000..0ed7986
--- /dev/null
+++ b/extensions/security/secman/persistence-jdo/log4j2-test.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<Configuration status="WARN">
+ <Properties>
+ <Property name="PID">????</Property>
+ <Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
+ <Property name="LOG_LEVEL_PATTERN">%5p</Property>
+ <Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
+ <Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
+ <Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
+ </Properties>
+ <Appenders>
+ <Console name="Console" target="SYSTEM_OUT" follow="true">
+ <PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
+ </Console>
+ </Appenders>
+ <Loggers>
+ <Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
+ <Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
+ <Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
+ <logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
+ <Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
+ <Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
+ <Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
+ <logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
+
+ <logger name="org.apache.directory" level="warn"/>
+ <logger name="org.apache.directory.api.ldap.model.entry.Value" level="off"/>
+
+ <logger name="DataNucleus.Persistence" level="info"/>
+ <logger name="DataNucleus.Transaction" level="info"/>
+ <logger name="DataNucleus.Datastore.Schema" level="info"/>
+ <logger name="DataNucleus.Datastore.Native" level="info"/>
+
+ <Root level="info">
+ <AppenderRef ref="Console" />
+ </Root>
+ </Loggers>
+</Configuration>
+
+<!-- # DataNucleus Logging Categories -->
+<!-- DataNucleus.Persistence - All messages relating to the persistence process -->
+<!-- DataNucleus.Transaction - All messages relating to transactions -->
+<!-- DataNucleus.Connection - All messages relating to Connections. -->
+<!-- DataNucleus.Query - All messages relating to queries -->
+<!-- DataNucleus.Cache - All messages relating to the DataNucleus Cache -->
+<!-- DataNucleus.MetaData - All messages relating to MetaData -->
+<!-- DataNucleus.Datastore - All general datastore messages -->
+<!-- DataNucleus.Datastore.Schema - All schema related datastore log messages -->
+<!-- DataNucleus.Datastore.Persist - All datastore persistence messages -->
+<!-- DataNucleus.Datastore.Retrieve - All datastore retrieval messages -->
+<!-- DataNucleus.Datastore.Native - Log of all 'native' statements sent to the datastore -->
+<!-- DataNucleus.General - All general operational messages -->
+<!-- DataNucleus.Lifecycle - All messages relating to object lifecycle changes -->
+<!-- DataNucleus.ValueGeneration - All messages relating to value generation -->
+<!-- DataNucleus.Enhancer - All messages from the DataNucleus Enhancer. -->
+<!-- DataNucleus.SchemaTool - All messages from DataNucleus SchemaTool -->
+<!-- DataNucleus.JDO - All messages general to JDO -->
+<!-- DataNucleus.JPA - All messages general to JPA -->
+<!-- DataNucleus.JCA - All messages relating to Connector JCA. -->
+<!-- DataNucleus.IDE - Messages from the DataNucleus IDE. -->
\ No newline at end of file
diff --git a/extensions/security/secman/persistence-jdo/pom.xml b/extensions/security/secman/persistence-jdo/pom.xml
index accef62..3c57db0 100644
--- a/extensions/security/secman/persistence-jdo/pom.xml
+++ b/extensions/security/secman/persistence-jdo/pom.xml
@@ -37,19 +37,23 @@
</properties>
-
<dependencies>
<dependency>
- <groupId>org.apache.isis.persistence</groupId>
- <artifactId>isis-persistence-jdo-applib</artifactId>
- <scope>provided</scope>
+ <groupId>org.apache.isis.extensions</groupId>
+ <artifactId>isis-extensions-secman-applib</artifactId>
+ <scope>test</scope>
+ <type>test-jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.isis.extensions</groupId>
+ <artifactId>isis-extensions-secman-integration</artifactId>
</dependency>
<dependency>
<groupId>org.apache.isis.persistence</groupId>
<artifactId>isis-persistence-jdo-datanucleus</artifactId>
- <scope>provided</scope>
</dependency>
<dependency>
@@ -59,14 +63,15 @@
</dependency>
<dependency>
- <groupId>org.apache.isis.extensions</groupId>
- <artifactId>isis-extensions-secman-integration</artifactId>
- <scope>provided</scope>
+ <groupId>org.apache.isis.testing</groupId>
+ <artifactId>isis-testing-fixtures-applib</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.isis.testing</groupId>
- <artifactId>isis-testing-fixtures-applib</artifactId>
+ <groupId>org.apache.isis.mavendeps</groupId>
+ <artifactId>isis-mavendeps-integtests</artifactId>
+ <type>pom</type>
+ <scope>test</scope>
</dependency>
</dependencies>
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/IsisModuleExtSecmanPersistenceJdo.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/IsisModuleExtSecmanPersistenceJdo.java
index 14de30b..0a1e446 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/IsisModuleExtSecmanPersistenceJdo.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/IsisModuleExtSecmanPersistenceJdo.java
@@ -21,6 +21,7 @@ package org.apache.isis.extensions.secman.jdo;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
+import org.apache.isis.extensions.secman.integration.IsisModuleExtSecmanIntegration;
import org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermission;
import org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermissionRepository;
import org.apache.isis.extensions.secman.jdo.role.dom.ApplicationRole;
@@ -30,7 +31,7 @@ import org.apache.isis.extensions.secman.jdo.tenancy.dom.ApplicationTenancyRepos
import org.apache.isis.extensions.secman.jdo.user.dom.ApplicationUser;
import org.apache.isis.extensions.secman.jdo.user.dom.ApplicationUserRepository;
import org.apache.isis.extensions.secman.jdo.util.RegexReplacer;
-import org.apache.isis.extensions.secman.integration.IsisModuleExtSecmanIntegration;
+import org.apache.isis.persistence.jdo.datanucleus.IsisModulePersistenceJdoDatanucleus;
/**
* @since 2.0 {@index}
@@ -39,6 +40,7 @@ import org.apache.isis.extensions.secman.integration.IsisModuleExtSecmanIntegrat
@Import({
// modules
IsisModuleExtSecmanIntegration.class,
+ IsisModulePersistenceJdoDatanucleus.class,
// services
ApplicationPermissionRepository.class,
diff --git a/extensions/security/secman/persistence-jdo/src/test/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermissionRepository_IntegTest.java b/extensions/security/secman/persistence-jdo/src/test/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermissionRepository_IntegTest.java
new file mode 100644
index 0000000..ad75eb0
--- /dev/null
+++ b/extensions/security/secman/persistence-jdo/src/test/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermissionRepository_IntegTest.java
@@ -0,0 +1,40 @@
+package org.apache.isis.extensions.secman.jdo.permission.dom;
+
+import org.springframework.boot.SpringBootConfiguration;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.annotation.PropertySources;
+import org.springframework.test.context.ActiveProfiles;
+
+import org.apache.isis.core.config.presets.IsisPresets;
+import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
+import org.apache.isis.extensions.secman.applib.ApplicationPermissionRepositoryIntegTestAbstract;
+import org.apache.isis.extensions.secman.applib.mmm.MmmModule;
+import org.apache.isis.extensions.secman.jdo.IsisModuleExtSecmanPersistenceJdo;
+import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
+
+@SpringBootTest(
+ classes = ApplicationPermissionRepository_IntegTest.AppManifest.class
+)
+@ActiveProfiles("test")
+class ApplicationPermissionRepository_IntegTest extends ApplicationPermissionRepositoryIntegTestAbstract {
+
+ @SpringBootConfiguration
+ @EnableAutoConfiguration
+ @Import({
+ IsisModuleCoreRuntimeServices.class,
+ IsisModuleSecurityBypass.class,
+ IsisModuleExtSecmanPersistenceJdo.class,
+
+ MmmModule.class,
+ })
+ @PropertySources({
+ @PropertySource(IsisPresets.UseLog4j2Test),
+ })
+ public static class AppManifest {
+ }
+
+
+}
\ No newline at end of file
diff --git a/extensions/security/secman/persistence-jdo/src/test/resources/application-test.yml b/extensions/security/secman/persistence-jdo/src/test/resources/application-test.yml
new file mode 100644
index 0000000..170aea7
--- /dev/null
+++ b/extensions/security/secman/persistence-jdo/src/test/resources/application-test.yml
@@ -0,0 +1,29 @@
+isis:
+ extensions:
+ secman:
+ seed:
+ admin:
+ user-name: "sven"
+ password: "pass"
+ role-name: "isis-ext-secman-admin"
+ namespace-permissions:
+ sticky: "isis"
+ additional: "mmm"
+ regular-user:
+ role-name: "isis-ext-secman-user"
+ permissionsEvaluationPolicy: "ALLOW_BEATS_VETO"
+
+
+ persistence:
+ schema:
+ auto-create-schemas: "ISISEXTENSIONSSECMAN"
+
+
+spring:
+ jpa:
+ show-sql: true
+
+
+datanucleus:
+ schema:
+ autoCreateTables: true
diff --git a/extensions/security/secman/persistence-jpa/log4j2-test.xml b/extensions/security/secman/persistence-jpa/log4j2-test.xml
new file mode 100644
index 0000000..0ed7986
--- /dev/null
+++ b/extensions/security/secman/persistence-jpa/log4j2-test.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<Configuration status="WARN">
+ <Properties>
+ <Property name="PID">????</Property>
+ <Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
+ <Property name="LOG_LEVEL_PATTERN">%5p</Property>
+ <Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
+ <Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
+ <Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
+ </Properties>
+ <Appenders>
+ <Console name="Console" target="SYSTEM_OUT" follow="true">
+ <PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
+ </Console>
+ </Appenders>
+ <Loggers>
+ <Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
+ <Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
+ <Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
+ <logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
+ <Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
+ <Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
+ <Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
+ <logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
+
+ <logger name="org.apache.directory" level="warn"/>
+ <logger name="org.apache.directory.api.ldap.model.entry.Value" level="off"/>
+
+ <logger name="DataNucleus.Persistence" level="info"/>
+ <logger name="DataNucleus.Transaction" level="info"/>
+ <logger name="DataNucleus.Datastore.Schema" level="info"/>
+ <logger name="DataNucleus.Datastore.Native" level="info"/>
+
+ <Root level="info">
+ <AppenderRef ref="Console" />
+ </Root>
+ </Loggers>
+</Configuration>
+
+<!-- # DataNucleus Logging Categories -->
+<!-- DataNucleus.Persistence - All messages relating to the persistence process -->
+<!-- DataNucleus.Transaction - All messages relating to transactions -->
+<!-- DataNucleus.Connection - All messages relating to Connections. -->
+<!-- DataNucleus.Query - All messages relating to queries -->
+<!-- DataNucleus.Cache - All messages relating to the DataNucleus Cache -->
+<!-- DataNucleus.MetaData - All messages relating to MetaData -->
+<!-- DataNucleus.Datastore - All general datastore messages -->
+<!-- DataNucleus.Datastore.Schema - All schema related datastore log messages -->
+<!-- DataNucleus.Datastore.Persist - All datastore persistence messages -->
+<!-- DataNucleus.Datastore.Retrieve - All datastore retrieval messages -->
+<!-- DataNucleus.Datastore.Native - Log of all 'native' statements sent to the datastore -->
+<!-- DataNucleus.General - All general operational messages -->
+<!-- DataNucleus.Lifecycle - All messages relating to object lifecycle changes -->
+<!-- DataNucleus.ValueGeneration - All messages relating to value generation -->
+<!-- DataNucleus.Enhancer - All messages from the DataNucleus Enhancer. -->
+<!-- DataNucleus.SchemaTool - All messages from DataNucleus SchemaTool -->
+<!-- DataNucleus.JDO - All messages general to JDO -->
+<!-- DataNucleus.JPA - All messages general to JPA -->
+<!-- DataNucleus.JCA - All messages relating to Connector JCA. -->
+<!-- DataNucleus.IDE - Messages from the DataNucleus IDE. -->
\ No newline at end of file
diff --git a/extensions/security/secman/persistence-jpa/pom.xml b/extensions/security/secman/persistence-jpa/pom.xml
index d304cd3..d4bb98a 100644
--- a/extensions/security/secman/persistence-jpa/pom.xml
+++ b/extensions/security/secman/persistence-jpa/pom.xml
@@ -37,18 +37,23 @@
</properties>
-
<dependencies>
<dependency>
<groupId>org.apache.isis.extensions</groupId>
+ <artifactId>isis-extensions-secman-applib</artifactId>
+ <scope>test</scope>
+ <type>test-jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.isis.extensions</groupId>
<artifactId>isis-extensions-secman-integration</artifactId>
</dependency>
<dependency>
<groupId>org.apache.isis.persistence</groupId>
- <artifactId>isis-persistence-jpa-applib</artifactId>
- <scope>provided</scope>
+ <artifactId>isis-persistence-jpa-eclipselink</artifactId>
</dependency>
<dependency>
@@ -69,6 +74,13 @@
</exclusions>
</dependency>
+ <dependency>
+ <groupId>org.apache.isis.mavendeps</groupId>
+ <artifactId>isis-mavendeps-integtests</artifactId>
+ <type>pom</type>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
</project>
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/IsisModuleExtSecmanPersistenceJpa.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/IsisModuleExtSecmanPersistenceJpa.java
index 8649137..09ba54b 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/IsisModuleExtSecmanPersistenceJpa.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/IsisModuleExtSecmanPersistenceJpa.java
@@ -22,6 +22,7 @@ import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
+import org.apache.isis.extensions.secman.integration.IsisModuleExtSecmanIntegration;
import org.apache.isis.extensions.secman.jpa.permission.dom.ApplicationPermission;
import org.apache.isis.extensions.secman.jpa.permission.dom.ApplicationPermissionRepository;
import org.apache.isis.extensions.secman.jpa.role.dom.ApplicationRole;
@@ -31,7 +32,7 @@ import org.apache.isis.extensions.secman.jpa.tenancy.dom.ApplicationTenancyRepos
import org.apache.isis.extensions.secman.jpa.user.dom.ApplicationUser;
import org.apache.isis.extensions.secman.jpa.user.dom.ApplicationUserRepository;
import org.apache.isis.extensions.secman.jpa.util.RegexReplacer;
-import org.apache.isis.extensions.secman.integration.IsisModuleExtSecmanIntegration;
+import org.apache.isis.persistence.jpa.eclipselink.IsisModulePersistenceJpaEclipselink;
/**
* @since 2.0 {@index}
@@ -40,6 +41,7 @@ import org.apache.isis.extensions.secman.integration.IsisModuleExtSecmanIntegrat
@Import({
// modules
IsisModuleExtSecmanIntegration.class,
+ IsisModulePersistenceJpaEclipselink.class,
// services
ApplicationPermissionRepository.class,
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java
index 16fc5e1..f53e04d 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java
@@ -61,17 +61,17 @@ import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
+ " WHERE p.role = :role"),
@NamedQuery(
name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_USER,
- query = "SELECT p "
- + "FROM ApplicationPermission p "
- + "INNER JOIN ApplicationRole r "
- + "INNER JOIN ApplicationUser u "
- + "WHERE u.username = :username"),
+ query = "SELECT perm "
+ + "FROM ApplicationPermission perm "
+ + "JOIN perm.role role "
+ + "JOIN role.users user "
+ + "WHERE user.username = :username"),
@NamedQuery(
name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_ROLE_NAMES,
- query = "SELECT p "
- + "FROM ApplicationPermission p "
- + "INNER JOIN ApplicationRole r "
- + "WHERE r.name IN :roleNames"),
+ query = "SELECT perm "
+ + "FROM ApplicationPermission perm "
+ + "JOIN perm.role role "
+ + "WHERE role.name IN :roleNames"),
@NamedQuery(
name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_FEATURE,
query = "SELECT p "
diff --git a/extensions/security/secman/persistence-jpa/src/test/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository_IntegTest.java b/extensions/security/secman/persistence-jpa/src/test/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository_IntegTest.java
new file mode 100644
index 0000000..1c0be86
--- /dev/null
+++ b/extensions/security/secman/persistence-jpa/src/test/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository_IntegTest.java
@@ -0,0 +1,40 @@
+package org.apache.isis.extensions.secman.jpa.permission.dom;
+
+import org.springframework.boot.SpringBootConfiguration;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.annotation.PropertySources;
+import org.springframework.test.context.ActiveProfiles;
+
+import org.apache.isis.core.config.presets.IsisPresets;
+import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
+import org.apache.isis.extensions.secman.applib.ApplicationPermissionRepositoryIntegTestAbstract;
+import org.apache.isis.extensions.secman.applib.mmm.MmmModule;
+import org.apache.isis.extensions.secman.jpa.IsisModuleExtSecmanPersistenceJpa;
+import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
+
+@SpringBootTest(
+ classes = ApplicationPermissionRepository_IntegTest.AppManifest.class
+)
+@ActiveProfiles("test")
+class ApplicationPermissionRepository_IntegTest extends ApplicationPermissionRepositoryIntegTestAbstract {
+
+ @SpringBootConfiguration
+ @EnableAutoConfiguration
+ @Import({
+ IsisModuleCoreRuntimeServices.class,
+ IsisModuleSecurityBypass.class,
+ IsisModuleExtSecmanPersistenceJpa.class,
+
+ MmmModule.class,
+ })
+ @PropertySources({
+ @PropertySource(IsisPresets.UseLog4j2Test),
+ })
+ public static class AppManifest {
+ }
+
+
+}
\ No newline at end of file
diff --git a/extensions/security/secman/persistence-jpa/src/test/resources/application-test.yml b/extensions/security/secman/persistence-jpa/src/test/resources/application-test.yml
new file mode 100644
index 0000000..9cd5cf3
--- /dev/null
+++ b/extensions/security/secman/persistence-jpa/src/test/resources/application-test.yml
@@ -0,0 +1,24 @@
+isis:
+ extensions:
+ secman:
+ seed:
+ admin:
+ user-name: "sven"
+ password: "pass"
+ role-name: "isis-ext-secman-admin"
+ namespace-permissions:
+ sticky: "isis"
+ additional: "mmm"
+ regular-user:
+ role-name: "isis-ext-secman-user"
+ permissionsEvaluationPolicy: "ALLOW_BEATS_VETO"
+
+
+ persistence:
+ schema:
+ auto-create-schemas: "ISISEXTENSIONSSECMAN"
+
+
+spring:
+ jpa:
+ show-sql: true
diff --git a/extensions/security/secman/pom.xml b/extensions/security/secman/pom.xml
index 94fb4a0..6ddedf2 100644
--- a/extensions/security/secman/pom.xml
+++ b/extensions/security/secman/pom.xml
@@ -47,6 +47,13 @@
</dependency>
<dependency>
<groupId>org.apache.isis.extensions</groupId>
+ <artifactId>isis-extensions-secman-applib</artifactId>
+ <scope>test</scope>
+ <type>test-jar</type>
+ <version>2.0.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.isis.extensions</groupId>
<artifactId>isis-extensions-secman-encryption-jbcrypt</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
@@ -65,6 +72,15 @@
<artifactId>isis-extensions-secman-shiro-realm</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.isis.testing</groupId>
+ <artifactId>isis-testing-integtestsupport</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+
</dependencies>
</dependencyManagement>
diff --git a/persistence/jdo/datanucleus/pom.xml b/persistence/jdo/datanucleus/pom.xml
index 920590b..c21981f 100644
--- a/persistence/jdo/datanucleus/pom.xml
+++ b/persistence/jdo/datanucleus/pom.xml
@@ -36,7 +36,7 @@
<dependency>
<groupId>org.apache.isis.persistence</groupId>
- <artifactId>isis-persistence-jdo-applib</artifactId>
+ <artifactId>isis-persistence-jdo-integration</artifactId>
</dependency>
<dependency>
@@ -70,10 +70,6 @@
<artifactId>datanucleus-jodatime</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.isis.persistence</groupId>
- <artifactId>isis-persistence-jdo-integration</artifactId>
- </dependency>
<!-- not required by the JDO integration modules, but enables
Spring Boot DataSource Auto-configuration -->
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java
similarity index 98%
rename from persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.java
rename to persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java
index 9ff7938..a5e8870 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java
@@ -50,7 +50,7 @@ import org.apache.isis.persistence.jdo.datanucleus.jdosupport.JdoSupportServiceD
import org.apache.isis.persistence.jdo.datanucleus.mixins.Persistable_datanucleusVersionLong;
import org.apache.isis.persistence.jdo.datanucleus.mixins.Persistable_datanucleusVersionTimestamp;
import org.apache.isis.persistence.jdo.datanucleus.mixins.Persistable_downloadJdoMetadata;
-import org.apache.isis.persistence.jdo.integration.IsisModuleJdoIntegration;
+import org.apache.isis.persistence.jdo.integration.IsisModulePersistenceJdoIntegration;
import org.apache.isis.persistence.jdo.spring.integration.JdoDialect;
import org.apache.isis.persistence.jdo.spring.integration.JdoTransactionManager;
import org.apache.isis.persistence.jdo.spring.integration.LocalPersistenceManagerFactoryBean;
@@ -66,7 +66,7 @@ import lombok.extern.log4j.Log4j2;
@Configuration
@Import({
// modules
- IsisModuleJdoIntegration.class,
+ IsisModulePersistenceJdoIntegration.class,
// @Component's
DnEntityDiscoveryListener.class,
@@ -83,7 +83,7 @@ import lombok.extern.log4j.Log4j2;
})
@EnableConfigurationProperties(DnSettings.class)
@Log4j2
-public class IsisModuleJdoDatanucleus {
+public class IsisModulePersistenceJdoDatanucleus {
/**
* Conveniently registers this dialect as a {@link PersistenceExceptionTranslator} with <i>Spring</i>.
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModuleJdoIntegration.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModulePersistenceJdoIntegration.java
similarity index 88%
rename from persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModuleJdoIntegration.java
rename to persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModulePersistenceJdoIntegration.java
index 9e1718b..aa7a5c0 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModuleJdoIntegration.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModulePersistenceJdoIntegration.java
@@ -24,18 +24,18 @@ import org.springframework.context.annotation.Import;
import org.apache.isis.core.runtime.IsisModuleCoreRuntime;
import org.apache.isis.persistence.jdo.applib.IsisModulePersistenceJdoApplib;
import org.apache.isis.persistence.jdo.integration.changetracking.EntityChangeTrackerJdo;
-import org.apache.isis.persistence.jdo.metamodel.IsisModuleJdoMetamodel;
+import org.apache.isis.persistence.jdo.metamodel.IsisModulePersistenceJdoMetamodel;
@Configuration
@Import({
// modules
IsisModuleCoreRuntime.class,
IsisModulePersistenceJdoApplib.class,
- IsisModuleJdoMetamodel.class,
+ IsisModulePersistenceJdoMetamodel.class,
// services
EntityChangeTrackerJdo.class,
})
-public class IsisModuleJdoIntegration {
+public class IsisModulePersistenceJdoIntegration {
}
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModuleJdoMetamodel.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModulePersistenceJdoMetamodel.java
similarity index 96%
rename from persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModuleJdoMetamodel.java
rename to persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModulePersistenceJdoMetamodel.java
index bd391a9..60769ed 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModuleJdoMetamodel.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModulePersistenceJdoMetamodel.java
@@ -38,7 +38,7 @@ import org.apache.isis.persistence.jdo.metamodel.menu.JdoMetamodelMenu;
// @Service's
})
-public class IsisModuleJdoMetamodel {
+public class IsisModulePersistenceJdoMetamodel {
public static final String NAMESPACE = "isis.persistence.jdo";
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java
index 09f75ce..c7f1657 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java
@@ -35,7 +35,7 @@ import org.apache.isis.applib.util.ZipWriter;
import org.apache.isis.applib.value.Blob;
import org.apache.isis.applib.value.NamedWithMimeType.CommonMimeType;
import org.apache.isis.persistence.jdo.applib.services.JdoSupportService;
-import org.apache.isis.persistence.jdo.metamodel.IsisModuleJdoMetamodel;
+import org.apache.isis.persistence.jdo.metamodel.IsisModulePersistenceJdoMetamodel;
import org.apache.isis.persistence.jdo.provider.entities.JdoFacetContext;
import lombok.RequiredArgsConstructor;
@@ -53,7 +53,7 @@ import lombok.val;
@RequiredArgsConstructor(onConstructor_ = { @Inject })
public class JdoMetamodelMenu {
- public final static String LOGICAL_TYPE_NAME = IsisModuleJdoMetamodel.NAMESPACE + ".JdoMetamodelMenu";
+ public final static String LOGICAL_TYPE_NAME = IsisModulePersistenceJdoMetamodel.NAMESPACE + ".JdoMetamodelMenu";
final JdoSupportService jdoSupport;
final JdoFacetContext jdoFacetContext;
diff --git a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java b/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModulePersistenceJdoSpring.java
similarity index 95%
copy from persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java
copy to persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModulePersistenceJdoSpring.java
index 5e5afbb..e68ae34 100644
--- a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java
+++ b/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModulePersistenceJdoSpring.java
@@ -21,6 +21,6 @@ package org.apache.isis.persistence.jdo.spring;
import org.springframework.context.annotation.Configuration;
@Configuration
-public class IsisModuleJdoSpring {
+public class IsisModulePersistenceJdoSpring {
}
diff --git a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java b/persistence/jpa/applib/src/main/java/org/apache/isis/persistence/jpa/applib/IsisModulePersistenceJpaApplib.java
similarity index 84%
rename from persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java
rename to persistence/jpa/applib/src/main/java/org/apache/isis/persistence/jpa/applib/IsisModulePersistenceJpaApplib.java
index 5e5afbb..faa749a 100644
--- a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java
+++ b/persistence/jpa/applib/src/main/java/org/apache/isis/persistence/jpa/applib/IsisModulePersistenceJpaApplib.java
@@ -16,11 +16,14 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.persistence.jdo.spring;
+package org.apache.isis.persistence.jpa.applib;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
@Configuration
-public class IsisModuleJdoSpring {
+@Import({
+})
+public class IsisModulePersistenceJpaApplib {
}
diff --git a/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java b/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModulePersistenceJpaEclipselink.java
similarity index 97%
rename from persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java
rename to persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModulePersistenceJpaEclipselink.java
index a1ea08f..06594c5 100644
--- a/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java
+++ b/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModulePersistenceJpaEclipselink.java
@@ -43,7 +43,7 @@ import org.springframework.transaction.jta.JtaTransactionManager;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.config.IsisConfiguration;
import org.apache.isis.persistence.jpa.eclipselink.config.ElSettings;
-import org.apache.isis.persistence.jpa.integration.IsisModuleJpaIntegration;
+import org.apache.isis.persistence.jpa.integration.IsisModulePersistenceJpaIntegration;
import lombok.SneakyThrows;
import lombok.val;
@@ -61,15 +61,15 @@ import lombok.extern.log4j.Log4j2;
*/
@Configuration
@Import({
- IsisModuleJpaIntegration.class
+ IsisModulePersistenceJpaIntegration.class
})
@EnableConfigurationProperties(ElSettings.class)
@Log4j2
-public class IsisModuleJpaEclipselink extends JpaBaseConfiguration {
+public class IsisModulePersistenceJpaEclipselink extends JpaBaseConfiguration {
@Inject private ElSettings elSettings;
- protected IsisModuleJpaEclipselink(
+ protected IsisModulePersistenceJpaEclipselink(
IsisConfiguration isisConfiguration,
DataSource dataSource,
JpaProperties properties,
diff --git a/persistence/jpa/integration/pom.xml b/persistence/jpa/integration/pom.xml
index 14d197b..c0f9fe2 100644
--- a/persistence/jpa/integration/pom.xml
+++ b/persistence/jpa/integration/pom.xml
@@ -70,11 +70,6 @@
<dependency>
<groupId>org.apache.isis.persistence</groupId>
- <artifactId>isis-persistence-jpa-applib</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.apache.isis.persistence</groupId>
<artifactId>isis-persistence-jpa-metamodel</artifactId>
</dependency>
diff --git a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModuleJpaIntegration.java b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java
similarity index 91%
rename from persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModuleJpaIntegration.java
rename to persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java
index 84c418a..34d193d 100644
--- a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModuleJpaIntegration.java
+++ b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java
@@ -27,12 +27,13 @@ import org.apache.isis.persistence.jpa.integration.changetracking.PersistenceMet
import org.apache.isis.persistence.jpa.integration.metamodel.JpaProgrammingModel;
import org.apache.isis.persistence.jpa.integration.services.JpaSupportServiceUsingSpring;
import org.apache.isis.persistence.jpa.integration.typeconverters.JavaAwtBufferedImageByteArrayConverter;
+import org.apache.isis.persistence.jpa.metamodel.IsisModulePersistenceJpaMetamodel;
@Configuration
@Import({
// modules
IsisModuleCoreRuntime.class,
-// IsisModulePersistenceJpaApplib.class,
+ IsisModulePersistenceJpaMetamodel.class,
// @Component's
JpaProgrammingModel.class,
@@ -47,6 +48,6 @@ import org.apache.isis.persistence.jpa.integration.typeconverters.JavaAwtBuffere
// @Converter's
JavaAwtBufferedImageByteArrayConverter.class
})
-public class IsisModuleJpaIntegration {
+public class IsisModulePersistenceJpaIntegration {
}
diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModuleJpaMetamodel.java b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModulePersistenceJpaMetamodel.java
similarity index 79%
rename from persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModuleJpaMetamodel.java
rename to persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModulePersistenceJpaMetamodel.java
index 8372797..2e06999 100644
--- a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModuleJpaMetamodel.java
+++ b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModulePersistenceJpaMetamodel.java
@@ -22,20 +22,22 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.apache.isis.core.runtime.IsisModuleCoreRuntime;
+import org.apache.isis.persistence.jpa.applib.IsisModulePersistenceJpaApplib;
@Configuration
@Import({
// modules
IsisModuleCoreRuntime.class,
- //IsisModulePersistenceJpaApplib.class,
+ IsisModulePersistenceJpaApplib.class,
+ // TODO: to rationalise with the jpa integration module; JpaProgrammingModel defined in both.
// @Component's
- JpaProgrammingModel.class,
+ // JpaProgrammingModel.class,
//JpaMetamodelMenu.class,
// @Service's
})
-public class IsisModuleJpaMetamodel {
+public class IsisModulePersistenceJpaMetamodel {
}
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdo.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdo.java
index 542790e..76026ab 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdo.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdo.java
@@ -26,7 +26,7 @@ import org.springframework.context.annotation.PropertySources;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
-import org.apache.isis.persistence.jdo.datanucleus.IsisModuleJdoDatanucleus;
+import org.apache.isis.persistence.jdo.datanucleus.IsisModulePersistenceJdoDatanucleus;
import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
import org.apache.isis.testdomain.jdo.JdoTestDomainModule;
import org.apache.isis.testdomain.model.stereotypes.MyService;
@@ -38,7 +38,7 @@ import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
MyService.class, // testing injection into entities
IsisModuleCoreRuntimeServices.class,
IsisModuleSecurityBypass.class,
- IsisModuleJdoDatanucleus.class,
+ IsisModulePersistenceJdoDatanucleus.class,
IsisModuleTestingFixturesApplib.class,
KVStoreForTesting.class, // Helper for JUnit Tests
})
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdoAndShiro.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdoAndShiro.java
index 0a23200..99b7084 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdoAndShiro.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdoAndShiro.java
@@ -32,7 +32,7 @@ import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
import org.apache.isis.extensions.secman.applib.SecmanConfiguration;
import org.apache.isis.extensions.secman.applib.permission.spi.PermissionsEvaluationService;
import org.apache.isis.extensions.secman.applib.permission.spi.PermissionsEvaluationServiceAllowBeatsVeto;
-import org.apache.isis.persistence.jdo.datanucleus.IsisModuleJdoDatanucleus;
+import org.apache.isis.persistence.jdo.datanucleus.IsisModulePersistenceJdoDatanucleus;
import org.apache.isis.security.shiro.IsisModuleSecurityShiro;
import org.apache.isis.testdomain.jdo.JdoTestDomainModule;
import org.apache.isis.testdomain.util.kv.KVStoreForTesting;
@@ -42,7 +42,7 @@ import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
@Import({
IsisModuleCoreRuntimeServices.class,
IsisModuleSecurityShiro.class,
- IsisModuleJdoDatanucleus.class,
+ IsisModulePersistenceJdoDatanucleus.class,
IsisModuleTestingFixturesApplib.class,
KVStoreForTesting.class, // Helper for JUnit Tests
})
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJpa.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJpa.java
index 3740082..a282dd5 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJpa.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJpa.java
@@ -26,7 +26,7 @@ import org.springframework.context.annotation.PropertySources;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
-import org.apache.isis.persistence.jpa.eclipselink.IsisModuleJpaEclipselink;
+import org.apache.isis.persistence.jpa.eclipselink.IsisModulePersistenceJpaEclipselink;
import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
import org.apache.isis.testdomain.jpa.JpaTestDomainModule;
import org.apache.isis.testdomain.model.stereotypes.MyService;
@@ -46,7 +46,7 @@ import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
IsisModuleCoreRuntimeServices.class
,IsisModuleSecurityBypass.class
- ,IsisModuleJpaEclipselink.class
+ ,IsisModulePersistenceJpaEclipselink.class
,IsisModuleTestingFixturesApplib.class
,KVStoreForTesting.class, // Helper for JUnit Tests
})
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingSpringDataJpa.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingSpringDataJpa.java
index f76598e..b64c36e 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingSpringDataJpa.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingSpringDataJpa.java
@@ -26,7 +26,7 @@ import org.springframework.context.annotation.PropertySources;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
-import org.apache.isis.persistence.jpa.eclipselink.IsisModuleJpaEclipselink;
+import org.apache.isis.persistence.jpa.eclipselink.IsisModulePersistenceJpaEclipselink;
import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
import org.apache.isis.testdomain.jpa.springdata.SpringDataJpaTestModule;
import org.apache.isis.testdomain.model.stereotypes.MyService;
@@ -43,7 +43,7 @@ import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
IsisModuleCoreRuntimeServices.class
,IsisModuleSecurityBypass.class
- ,IsisModuleJpaEclipselink.class
+ ,IsisModulePersistenceJpaEclipselink.class
//,IsisModuleTestingFixturesApplib.class
,KVStoreForTesting.class, // Helper for JUnit Tests
})