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:00 UTC

[isis-app-simpleapp] branch ISIS-2789 created (now 7ca97ad)

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

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


      at 7ca97ad  ISIS-2789: hacking at jpa auditing

This branch includes the following new commits:

     new 7ca97ad  ISIS-2789: hacking at jpa auditing

The 1 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-app-simpleapp] 01/01: ISIS-2789: hacking at jpa auditing

Posted by da...@apache.org.
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>