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/13 05:43:00 UTC

[isis-app-simpleapp] branch jpa-SNAPSHOT updated: improvements

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

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


The following commit(s) were added to refs/heads/jpa-SNAPSHOT by this push:
     new 95f8238  improvements
95f8238 is described below

commit 95f8238777ba0fec36058eb300e4435636275274
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jul 13 06:31:55 2021 +0100

    improvements
    
    - lowercase schema
    - eclipselink properties to generate create-db-schema.sql
    - associateWith fix
    - bump version of spring-instrument
    - remove old reference to JDO in README
    - add commented out code for XrayEnable
    - logger entries for auditing etc.
    - update menubars.layout for security and impersonation
---
 .gitignore                                         |   4 ++-
 lib/README.txt                                     |   2 +-
 lib/spring-instrument-5.3.5.jar                    | Bin 7429 -> 0 bytes
 lib/spring-instrument-5.3.8.jar                    | Bin 0 -> 7429 bytes
 .../modules/simple/dom/so/SimpleObject.java        |  20 +++++++-------
 .../modules/simple/dom/so/SimpleObjects.java       |  10 ++++---
 webapp/pom.xml                                     |   2 +-
 .../src/main/java/domainapp/webapp/SimpleApp.java  |   3 ++-
 .../java/domainapp/webapp/quartz/QuartzModule.java |   4 ---
 webapp/src/main/resources/application.yml          |   4 +--
 .../main/resources/config/application.properties   |  15 ++++++++---
 webapp/src/main/resources/log4j2-spring.xml        |   5 ++++
 webapp/src/main/resources/menubars.layout.xml      |  30 ++++++++++++++++++++-
 13 files changed, 72 insertions(+), 27 deletions(-)

diff --git a/.gitignore b/.gitignore
index 371262a..568bbd5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,4 +40,6 @@ pom.xml.versionsBackup
 rebel.xml
 translations.pot
 
-.flattened-pom.xml
\ No newline at end of file
+.flattened-pom.xml
+
+create-db-schema.sql
diff --git a/lib/README.txt b/lib/README.txt
index 8cd1712..db3c441 100644
--- a/lib/README.txt
+++ b/lib/README.txt
@@ -1,3 +1,3 @@
 If eclipselink.weaving=true, then run using JVM argument:
 
- -javaagent:lib/spring-instrument-5.3.5.jar
+ -javaagent:lib/spring-instrument-5.3.8.jar
diff --git a/lib/spring-instrument-5.3.5.jar b/lib/spring-instrument-5.3.5.jar
deleted file mode 100644
index 164db3b..0000000
Binary files a/lib/spring-instrument-5.3.5.jar and /dev/null differ
diff --git a/lib/spring-instrument-5.3.8.jar b/lib/spring-instrument-5.3.8.jar
new file mode 100644
index 0000000..c0a0a9b
Binary files /dev/null and b/lib/spring-instrument-5.3.8.jar differ
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..48c143c 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) {
@@ -116,11 +119,10 @@ public class SimpleObject implements Comparable<SimpleObject> {
     }
 
 
-    @Action(semantics = NON_IDEMPOTENT_ARE_YOU_SURE, associateWith = "name")
+    @Action(semantics = NON_IDEMPOTENT_ARE_YOU_SURE)
     @ActionLayout(
-            position = ActionLayout.Position.PANEL,
-            describedAs = "Deletes this object from the persistent datastore"
-    )
+            associateWith = "name", position = ActionLayout.Position.PANEL,
+            describedAs = "Deletes this object from the persistent datastore")
     public void delete() {
         final String title = titleService.titleOf(this);
         messageService.informUser(String.format("'%s' deleted", title));
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/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/quartz/QuartzModule.java b/webapp/src/main/java/domainapp/webapp/quartz/QuartzModule.java
index 6bb080d..3220d64 100644
--- a/webapp/src/main/java/domainapp/webapp/quartz/QuartzModule.java
+++ b/webapp/src/main/java/domainapp/webapp/quartz/QuartzModule.java
@@ -2,16 +2,12 @@ package domainapp.webapp.quartz;
 
 import org.quartz.JobDetail;
 import org.quartz.SimpleTrigger;
-import org.quartz.Trigger;
-import org.quartz.TriggerBuilder;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.quartz.JobDetailFactoryBean;
 import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;
 
-import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
-
 import lombok.val;
 
 import domainapp.webapp.quartz.job.SampleJob;
diff --git a/webapp/src/main/resources/application.yml b/webapp/src/main/resources/application.yml
index a9ba650..acb197c 100644
--- a/webapp/src/main/resources/application.yml
+++ b/webapp/src/main/resources/application.yml
@@ -77,11 +77,11 @@ isis:
 
 eclipselink:
   # if enabled, then must be run with JVM arg:
-  # -javaagent:lib/spring-instrument-5.3.5.jar
+  # -javaagent:lib/spring-instrument-5.3.8.jar
   weaving: false
   # if weaving subproperties are required, then specify all eclipselink.weaving
   # properties using application.properties instead (it's not possible to
-  # specify both eclipselink.weaving property and its subsproperties using yaml syntax)
+  # specify both eclipselink.weaving property and its subproperties using yaml syntax)
 
 resteasy:
   jaxrs:
diff --git a/webapp/src/main/resources/config/application.properties b/webapp/src/main/resources/config/application.properties
index 19442f0..8a7dcce 100644
--- a/webapp/src/main/resources/config/application.properties
+++ b/webapp/src/main/resources/config/application.properties
@@ -11,12 +11,21 @@
 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.weaving=true
+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>