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/07/02 14:38:01 UTC

[isis-app-simpleapp] 01/01: ISIS-2789: hacking at jpa auditing

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2789
in repository https://gitbox.apache.org/repos/asf/isis-app-simpleapp.git

commit 7ca97ad9f80a2a772deec9dd02311fd512450e67
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Jul 2 15:37:42 2021 +0100

    ISIS-2789: hacking at jpa auditing
---
 .../modules/simple/dom/so/SimpleObject.java        | 13 ++++++----
 .../modules/simple/dom/so/SimpleObjects.java       | 10 +++++---
 webapp/pom.xml                                     |  2 +-
 .../main/java/domainapp/webapp/AppManifest.java    |  3 +--
 .../src/main/java/domainapp/webapp/SimpleApp.java  |  3 ++-
 .../services/health/HealthCheckServiceImpl.java    |  4 +--
 .../main/resources/config/application.properties   | 12 ++++++---
 webapp/src/main/resources/log4j2-spring.xml        |  5 ++++
 webapp/src/main/resources/menubars.layout.xml      | 30 +++++++++++++++++++++-
 9 files changed, 62 insertions(+), 20 deletions(-)

diff --git a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.java b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.java
index 1f7a255..e078a2a 100644
--- a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.java
+++ b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.java
@@ -10,12 +10,14 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.jaxb.PersistentEntityAdapter;
 import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.services.title.TitleService;
-import org.apache.isis.persistence.jpa.applib.integration.JpaEntityInjectionPointResolver;
+import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
 
 import static org.apache.isis.applib.annotation.SemanticsOf.IDEMPOTENT;
 import static org.apache.isis.applib.annotation.SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE;
@@ -33,7 +35,7 @@ import domainapp.modules.simple.types.Notes;
 
 @javax.persistence.Entity
 @javax.persistence.Table(
-    schema="SIMPLE",
+    schema="simple",
     uniqueConstraints = {
         @javax.persistence.UniqueConstraint(name = "SimpleObject_name_UNQ", columnNames = {"name"})
     }
@@ -46,8 +48,8 @@ import domainapp.modules.simple.types.Notes;
                         "WHERE so.name LIKE :name"
         )
 })
-@javax.persistence.EntityListeners(JpaEntityInjectionPointResolver.class) // injection support
-@DomainObject(objectType = "simple.SimpleObject")
+@javax.persistence.EntityListeners(IsisEntityListener.class)
+@DomainObject(logicalTypeName = "simple.SimpleObject", entityChangePublishing = Publishing.ENABLED)
 @DomainObjectLayout()
 @NoArgsConstructor(access = AccessLevel.PUBLIC)
 @XmlJavaTypeAdapter(PersistentEntityAdapter.class)
@@ -92,11 +94,12 @@ public class SimpleObject implements Comparable<SimpleObject> {
     @Notes
     @javax.persistence.Column(length = Notes.MAX_LEN, nullable = true)
     @Getter @Setter
+    @Property(commandPublishing = Publishing.ENABLED, executionPublishing = Publishing.ENABLED)
     @PropertyLayout(fieldSetId = "name", sequence = "2")
     private String notes;
 
 
-    @Action(semantics = IDEMPOTENT)
+    @Action(semantics = IDEMPOTENT, commandPublishing = Publishing.ENABLED, executionPublishing = Publishing.ENABLED)
     @ActionLayout(associateWith = "name", promptStyle = PromptStyle.INLINE)
     public SimpleObject updateName(
             @Name final String name) {
diff --git a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjects.java b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjects.java
index 329b107..e67d9bb 100644
--- a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjects.java
+++ b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjects.java
@@ -10,6 +10,7 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -22,13 +23,14 @@ import domainapp.modules.simple.types.Name;
 @DomainService(
         nature = NatureOfService.VIEW,
         objectType = "simple.SimpleObjects"
-        )
+)
+@javax.annotation.Priority(PriorityPrecedence.EARLY)
 @lombok.RequiredArgsConstructor(onConstructor_ = {@Inject} )
 public class SimpleObjects {
 
-    private final RepositoryService repositoryService;
-    private final JpaSupportService jpaSupportService;
-    private final SimpleObjectRepository simpleObjectRepository;
+    final RepositoryService repositoryService;
+    final JpaSupportService jpaSupportService;
+    final SimpleObjectRepository simpleObjectRepository;
 
 
     @Action(semantics = SemanticsOf.NON_IDEMPOTENT)
diff --git a/webapp/pom.xml b/webapp/pom.xml
index 1540bbf..f843b8e 100644
--- a/webapp/pom.xml
+++ b/webapp/pom.xml
@@ -13,7 +13,7 @@
 
     <description>
     	Assembles and runs both the Wicket viewer and the Restfulobjects viewer
-    	in a single webapp configured to run using the JDO/DataNucleus object store.
+    	in a single webapp configured to run using the JPA/EclipseLink object store.
     </description>
 
     <packaging>jar</packaging>
diff --git a/webapp/src/main/java/domainapp/webapp/AppManifest.java b/webapp/src/main/java/domainapp/webapp/AppManifest.java
index e02e4e7..73ccbc8 100644
--- a/webapp/src/main/java/domainapp/webapp/AppManifest.java
+++ b/webapp/src/main/java/domainapp/webapp/AppManifest.java
@@ -18,7 +18,6 @@ import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
 import domainapp.webapp.application.ApplicationModule;
 import domainapp.webapp.application.fixture.scenarios.DomainAppDemo;
 import domainapp.webapp.custom.CustomModule;
-import domainapp.webapp.quartz.QuartzModule;
 
 @Configuration
 @Import({
@@ -35,7 +34,7 @@ import domainapp.webapp.quartz.QuartzModule;
 
         ApplicationModule.class,
         CustomModule.class,
-        QuartzModule.class,
+        // QuartzModule.class,
 
         // discoverable fixtures
         DomainAppDemo.class
diff --git a/webapp/src/main/java/domainapp/webapp/SimpleApp.java b/webapp/src/main/java/domainapp/webapp/SimpleApp.java
index dcce3c6..7dedb13 100644
--- a/webapp/src/main/java/domainapp/webapp/SimpleApp.java
+++ b/webapp/src/main/java/domainapp/webapp/SimpleApp.java
@@ -9,7 +9,8 @@ import org.apache.isis.core.config.presets.IsisPresets;
 
 @SpringBootApplication
 @Import({
-    AppManifest.class,
+    AppManifest.class
+//    , XrayEnable.class
 })
 public class SimpleApp extends SpringBootServletInitializer {
 
diff --git a/webapp/src/main/java/domainapp/webapp/application/services/health/HealthCheckServiceImpl.java b/webapp/src/main/java/domainapp/webapp/application/services/health/HealthCheckServiceImpl.java
index 4f16352..3601a3b 100644
--- a/webapp/src/main/java/domainapp/webapp/application/services/health/HealthCheckServiceImpl.java
+++ b/webapp/src/main/java/domainapp/webapp/application/services/health/HealthCheckServiceImpl.java
@@ -3,14 +3,12 @@ package domainapp.webapp.application.services.health;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import org.springframework.stereotype.Service;
-
 import org.apache.isis.applib.services.health.Health;
 import org.apache.isis.applib.services.health.HealthCheckService;
 
 import domainapp.modules.simple.dom.so.SimpleObjects;
 
-@Service
+//@Service
 @Named("domainapp.HealthCheckServiceImpl")
 public class HealthCheckServiceImpl implements HealthCheckService {
 
diff --git a/webapp/src/main/resources/config/application.properties b/webapp/src/main/resources/config/application.properties
index 19442f0..2e8b2d7 100644
--- a/webapp/src/main/resources/config/application.properties
+++ b/webapp/src/main/resources/config/application.properties
@@ -11,12 +11,18 @@
 spring.flyway.enabled=false
 
 spring.sql.init.platform=h2
-spring.datasource.url=jdbc:h2:mem:simple
+spring.datasource.url=jdbc:h2:mem:simple;DATABASE_TO_UPPER=false
 spring.datasource.driver-class-name=org.h2.Driver
 
-isis.persistence.schema.create-schema-sql-template=CREATE SCHEMA IF NOT EXISTS %S
-isis.persistence.schema.auto-create-schemas=SIMPLE
+isis.persistence.schema.create-schema-sql-template=CREATE SCHEMA IF NOT EXISTS %s
+isis.persistence.schema.auto-create-schemas=simple
 
+eclipselink.deploy-on-startup=true
+eclipselink.ddl-generation.output-mode=both
+eclipselink.ddl-generation=create-tables
+eclipselink.create-ddl-jdbc-file-name=create-db-schema.sql
+eclipselink.application-location=.
+eclipselink.jpa.upper-case-column-names=false
 
 # uncomment to run during bootstrap
 #isis.testing.fixtures.initial-script = domainapp.webapp.application.fixture.scenarios.DomainAppDemo
diff --git a/webapp/src/main/resources/log4j2-spring.xml b/webapp/src/main/resources/log4j2-spring.xml
index ffa0765..dc4176e 100644
--- a/webapp/src/main/resources/log4j2-spring.xml
+++ b/webapp/src/main/resources/log4j2-spring.xml
@@ -18,6 +18,11 @@
         <!-- silence Wicket -->
         <Logger name="org.apache.wicket.page.PartialPageUpdate" level="error" />
 
+        <Logger name="org.apache.isis.applib.services.publishing.log.CommandLogger" level="debug" />
+        <Logger name="org.apache.isis.applib.services.publishing.log.ExecutionLogger" level="debug" />
+        <Logger name="org.apache.isis.applib.services.publishing.log.EntityChangesLogger" level="debug" />
+        <Logger name="org.apache.isis.applib.services.publishing.log.EntityPropertyChangeLogger" level="debug" />
+
         <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" />
diff --git a/webapp/src/main/resources/menubars.layout.xml b/webapp/src/main/resources/menubars.layout.xml
index d8d0d55..3d8cd56 100644
--- a/webapp/src/main/resources/menubars.layout.xml
+++ b/webapp/src/main/resources/menubars.layout.xml
@@ -31,6 +31,8 @@
                 <mb3:named>Meta Model and Features</mb3:named>
                 <mb3:serviceAction objectType="isis.applib.MetaModelServiceMenu" id="downloadMetaModelXml"/>
                 <mb3:serviceAction objectType="isis.applib.MetaModelServiceMenu" id="downloadMetaModelCsv"/>
+                <mb3:serviceAction objectType="isis.applib.MetaModelServiceMenu" id="downloadMetaModelAscii"/>
+                <mb3:serviceAction objectType="isis.applib.MetaModelServiceMenu" id="downloadMetaModelDiff"/>
                 <mb3:serviceAction objectType="isis.feat.ApplicationFeatureMenu" id="allNamespaces"/>
                 <mb3:serviceAction objectType="isis.feat.ApplicationFeatureMenu" id="allTypes"/>
                 <mb3:serviceAction objectType="isis.feat.ApplicationFeatureMenu" id="allActions"/>
@@ -56,6 +58,31 @@
                 <mb3:serviceAction objectType="isis.applib.TranslationServicePoMenu" id="switchToWritingTranslations"/>
             </mb3:section>
         </mb3:menu>
+        <mb3:menu>
+            <mb3:named>Security</mb3:named>
+            <mb3:section>
+                <mb3:named>Users</mb3:named>
+                <mb3:serviceAction objectType="isis.ext.secman.ApplicationUserMenu" id="userManager"/>
+                <mb3:serviceAction objectType="isis.ext.secman.ApplicationUserMenu" id="findUsers"/>
+            </mb3:section>
+            <mb3:section>
+                <mb3:named>Roles</mb3:named>
+                <mb3:serviceAction objectType="isis.ext.secman.ApplicationRoleMenu" id="findRoles"/>
+                <mb3:serviceAction objectType="isis.ext.secman.ApplicationRoleMenu" id="newRole"/>
+                <mb3:serviceAction objectType="isis.ext.secman.ApplicationRoleMenu" id="allRoles"/>
+            </mb3:section>
+            <mb3:section>
+                <mb3:named>Permissions</mb3:named>
+                <mb3:serviceAction objectType="isis.ext.secman.ApplicationPermissionMenu" id="allPermissions"/>
+                <mb3:serviceAction objectType="isis.ext.secman.ApplicationPermissionMenu" id="findOrphanedPermissions"/>
+            </mb3:section>
+            <mb3:section>
+                <mb3:named>Tenancies</mb3:named>
+                <mb3:serviceAction objectType="isis.ext.secman.ApplicationTenancyMenu" id="findTenancies"/>
+                <mb3:serviceAction objectType="isis.ext.secman.ApplicationTenancyMenu" id="newTenancy"/>
+                <mb3:serviceAction objectType="isis.ext.secman.ApplicationTenancyMenu" id="allTenancies"/>
+            </mb3:section>
+        </mb3:menu>
     </mb3:secondary>
     <mb3:tertiary>
         <mb3:menu>
@@ -68,9 +95,10 @@
                 <mb3:named>Impersonate</mb3:named>
                 <mb3:serviceAction objectType="isis.sudo.ImpersonateMenu" id="impersonate"/>
                 <mb3:serviceAction objectType="isis.sudo.ImpersonateMenu" id="impersonateWithRoles"/>
-                <mb3:serviceAction objectType="isis.sudo.ImpersonateMenu" id="stopImpersonating"/>
+                <mb3:serviceAction objectType="isis.applib.ImpersonateStopMenu" id="stopImpersonating"/>
             </mb3:section>
             <mb3:section>
+                <mb3:serviceAction objectType="isis.applib.UserMenu" id="me"/>
                 <mb3:serviceAction objectType="isis.security.LogoutMenu" id="logout"/>
             </mb3:section>
         </mb3:menu>