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/01/17 13:00:22 UTC

[isis-app-simpleapp] branch v2.0.0-jpa-SNAPSHOT created (now e2ed5ef)

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

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


      at e2ed5ef  fixes use of jdo

This branch includes the following new commits:

     new d0aef8a  wip - converting to JPA
     new 5f050b9  wip - converting to JPA
     new 448eb13  Merge branch 'v2.0.0-jdo-SNAPSHOT' into v2.0.0-jpa-SNAPSHOT
     new e2ed5ef  fixes use of jdo

The 4 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] 03/04: Merge branch 'v2.0.0-jdo-SNAPSHOT' into v2.0.0-jpa-SNAPSHOT

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 448eb13346950f64e910cc86bc765119653d89b4
Merge: 5f050b9 c077b1d
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Jan 17 11:47:19 2021 +0000

    Merge branch 'v2.0.0-jdo-SNAPSHOT' into v2.0.0-jpa-SNAPSHOT



[isis-app-simpleapp] 04/04: fixes use of jdo

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit e2ed5ef382b587874d97b96603f32a2d05db8d7c
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Jan 17 13:00:01 2021 +0000

    fixes use of jdo
---
 .../domainapp/modules/simple/SimpleModule.java     |  9 +++---
 webapp/src/main/resources/application.yml          | 36 ++++++++--------------
 2 files changed, 17 insertions(+), 28 deletions(-)

diff --git a/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java b/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java
index a5fd57f..da09455 100644
--- a/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java
+++ b/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java
@@ -7,7 +7,6 @@ import org.springframework.context.annotation.Import;
 import org.springframework.validation.annotation.Validated;
 
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
-import org.apache.isis.testing.fixtures.applib.teardown.TeardownFixtureAbstract;
 import org.apache.isis.testing.fixtures.applib.modules.ModuleWithFixtures;
 
 import lombok.Data;
@@ -24,20 +23,20 @@ public class SimpleModule implements ModuleWithFixtures {
 
     @Override
     public FixtureScript getTeardownFixture() {
-        return new TeardownFixtureAbstract() {
+        return new FixtureScript() {
             @Override
             protected void execute(ExecutionContext executionContext) {
-                deleteFrom(SimpleObject.class);
+                repositoryService.removeAll(SimpleObject.class);
             }
         };
     }
 
     public static class PropertyDomainEvent<S,T>
             extends org.apache.isis.applib.events.domain.PropertyDomainEvent<S,T> {}
-    
+
     public static class CollectionDomainEvent<S,T>
             extends org.apache.isis.applib.events.domain.CollectionDomainEvent<S,T> {}
-    
+
     public static class ActionDomainEvent<S>
             extends org.apache.isis.applib.events.domain.ActionDomainEvent<S> {}
 
diff --git a/webapp/src/main/resources/application.yml b/webapp/src/main/resources/application.yml
index 7659e7c..1cae5e5 100644
--- a/webapp/src/main/resources/application.yml
+++ b/webapp/src/main/resources/application.yml
@@ -9,8 +9,8 @@ isis:
     annotation:
       action:
         explicit: true
-        command: ignore_safe
-        publishing: all
+        command-publishing: ignore_safe
+        execution-publishing: all
       action-layout:
         css-class:
           patterns:
@@ -21,8 +21,8 @@ isis:
         auditing: all
         publishing: all
       property:
-        command: all
-        publishing: all
+        command-publishing: all
+        execution-publishing: all
 
   core:
     meta-model:
@@ -66,25 +66,7 @@ isis:
         show-chooser: true
         show-drop-down-on-footer: true
 
-
-  persistence:
-    jdo-datanucleus:
-      impl:
-        # note that properties under 'isis.persistence.jdo-datanucleus.impl' are passed through directly
-        # to DataNucleus, and use variously camelCase or PascalCase rather than kebab-case
-        datanucleus:
-          schema:
-            validateTables: true
-            validateConstraints: true
-
-          persistenceByReachabilityAtCommit: false
-          identifier:
-            case: MixedCase
-
-          cache:
-            level2:
-              type: none
-              mode: ENABLE_SELECTIVE
+  #persistence:
 
 resteasy:
   jaxrs:
@@ -99,6 +81,14 @@ spring:
   banner:
     location: banner.txt
 
+  quartz:
+    job-store-type: memory
+
+management:
+  endpoint:
+    health:
+      enabled: true
+
 app:
   simple-module:
     types:


[isis-app-simpleapp] 01/04: wip - converting to JPA

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d0aef8a6b4921131328dd4883dc0fd06c3624bab
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Jan 17 09:14:34 2021 +0000

    wip - converting to JPA
---
 module-simple/pom.xml | 4 ++--
 webapp/pom.xml        | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/module-simple/pom.xml b/module-simple/pom.xml
index 2e9668e..5972370 100644
--- a/module-simple/pom.xml
+++ b/module-simple/pom.xml
@@ -57,7 +57,7 @@
 
         <dependency>
             <groupId>org.apache.isis.persistence</groupId>
-            <artifactId>isis-persistence-jdo-datanucleus</artifactId>
+            <artifactId>isis-persistence-jpa-eclipselink</artifactId>
         </dependency>
 
         <dependency>
@@ -88,7 +88,7 @@
 
         <dependency>
             <groupId>org.apache.isis.mavendeps</groupId>
-            <artifactId>isis-mavendeps-jdo</artifactId>
+            <artifactId>isis-mavendeps-jpa</artifactId>
             <type>pom</type>
             <scope>test</scope>
         </dependency>
diff --git a/webapp/pom.xml b/webapp/pom.xml
index 0eb9108..6c9b7e8 100644
--- a/webapp/pom.xml
+++ b/webapp/pom.xml
@@ -147,7 +147,7 @@
 
         <dependency>
             <groupId>org.apache.isis.mavendeps</groupId>
-            <artifactId>isis-mavendeps-jdo</artifactId>
+            <artifactId>isis-mavendeps-jpa</artifactId>
             <type>pom</type>
         </dependency>
 


[isis-app-simpleapp] 02/04: wip - converting to JPA

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 5f050b9bd9a2a724aaa2028445e71c2c30de206d
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Jan 17 11:43:45 2021 +0000

    wip - converting to JPA
---
 module-simple/logging-dn-enhance.properties        | 24 ----------
 .../modules/simple/dom/so/SimpleObject.java        | 53 ++++++++++++++--------
 .../simple/dom/so/SimpleObjectRepository.java      | 15 ++++++
 .../modules/simple/dom/so/SimpleObjects.java       | 50 ++++++++++----------
 .../java/domainapp/modules/simple/types/Name.java  |  2 -
 .../java/domainapp/modules/simple/types/Notes.java |  3 --
 .../modules/simple/dom/so/SimpleObjects_Test.java  | 11 +++--
 .../integtests/SimpleModuleIntegTestAbstract.java  |  4 +-
 .../integtests/tests/SimpleObject_IntegTest.java   | 12 -----
 .../integtests/tests/SimpleObjects_IntegTest.java  |  8 ++--
 webapp/pom.xml                                     |  1 +
 .../main/java/domainapp/webapp/AppManifest.java    |  4 +-
 .../integtests/ApplicationIntegTestAbstract.java   |  4 +-
 .../unittests/archunit/ArchitectureTests.java      | 10 ++--
 14 files changed, 98 insertions(+), 103 deletions(-)

diff --git a/module-simple/logging-dn-enhance.properties b/module-simple/logging-dn-enhance.properties
deleted file mode 100644
index 281bfb6..0000000
--- a/module-simple/logging-dn-enhance.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-# LOG4J Configuration
-# ===================
-
-# Basic logging goes to "datanucleus.log"
-log4j.appender.A1=org.apache.log4j.FileAppender
-log4j.appender.A1.File=datanucleus.log
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} (%t) %-5p [%c] - %m%n
-#log4j.appender.A1.Threshold=INFO
-
-# Categories
-# Each category can be set to a "level", and to direct to an appender
-
-# Default to DEBUG level for all DataNucleus categories
-log4j.logger.DataNucleus = DEBUG, A1
-
-log4j.category.com.mchange.v2.c3p0=INFO, A1
-log4j.category.com.mchange.v2.resourcepool=INFO, A1
-log4j.category.org.logicalcobwebs.proxool=INFO,A1
-
-
-# Hbase libs logging
-log4j.category.org.apache.hadoop=INFO,A1
-log4j.category.org.apache.zookeeper=INFO,A1
\ No newline at end of file
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 7155a96..21c7545 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
@@ -1,44 +1,59 @@
 package domainapp.modules.simple.dom.so;
 
+import java.time.LocalDateTime;
 import java.util.Comparator;
 
 import javax.inject.Inject;
-import javax.jdo.annotations.IdGeneratorStrategy;
-import javax.jdo.annotations.IdentityType;
-import javax.jdo.annotations.VersionStrategy;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.Programmatic;
 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.applib.jaxb.PersistentEntityAdapter;
 
 import static org.apache.isis.applib.annotation.SemanticsOf.IDEMPOTENT;
 import static org.apache.isis.applib.annotation.SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE;
 
-import domainapp.modules.simple.SimpleModule;
-import domainapp.modules.simple.types.Name;
-import domainapp.modules.simple.types.Notes;
-
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 import lombok.ToString;
 import lombok.val;
 
-@javax.jdo.annotations.PersistenceCapable(identityType=IdentityType.DATASTORE, schema = "simple")
-@javax.jdo.annotations.DatastoreIdentity(strategy=IdGeneratorStrategy.IDENTITY, column="id")
-@javax.jdo.annotations.Version(strategy= VersionStrategy.DATE_TIME, column="version")
-@javax.jdo.annotations.Unique(name="SimpleObject_name_UNQ", members = {"name"})
+import domainapp.modules.simple.SimpleModule;
+import domainapp.modules.simple.types.Name;
+import domainapp.modules.simple.types.Notes;
+
+@javax.persistence.Entity
+@javax.persistence.Table(
+    schema="simple",
+    uniqueConstraints = {
+        @javax.persistence.UniqueConstraint(name = "SimpleObject_name_UNQ", columnNames = {"name"})
+    }
+)
 @DomainObject()
 @DomainObjectLayout()
+@NoArgsConstructor
 @XmlJavaTypeAdapter(PersistentEntityAdapter.class)
 @ToString(onlyExplicitlyIncluded = true)
 public class SimpleObject implements Comparable<SimpleObject> {
 
+    @javax.persistence.Id
+    @javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
+    @javax.persistence.Column(nullable = false)
+    @Programmatic
+    @Getter @Setter
+    private Long id;
+
+    @javax.persistence.Version
+    @Programmatic
+    private LocalDateTime version;
+
     public static SimpleObject withName(String name) {
         val simpleObject = new SimpleObject();
         simpleObject.setName(name);
@@ -47,27 +62,27 @@ public class SimpleObject implements Comparable<SimpleObject> {
 
     public static class ActionDomainEvent extends SimpleModule.ActionDomainEvent<SimpleObject> {}
 
-    @Inject RepositoryService repositoryService;
-    @Inject TitleService titleService;
-    @Inject MessageService messageService;
+    @Inject @javax.persistence.Transient RepositoryService repositoryService;
+    @Inject @javax.persistence.Transient TitleService titleService;
+    @Inject @javax.persistence.Transient MessageService messageService;
 
-    private SimpleObject() {
-    }
 
     public String title() {
         return "Object: " + getName();
     }
 
     @Name
+    @javax.persistence.Column(length = Name.MAX_LEN, nullable = false)
     @Getter @Setter @ToString.Include
     private String name;
 
     @Notes
+    @javax.persistence.Column(length = Notes.MAX_LEN, nullable = true)
     @Getter @Setter
     private String notes;
 
 
-    public static class UpdateNameActionDomainEvent extends SimpleObject.ActionDomainEvent {}
+    public static class UpdateNameActionDomainEvent extends ActionDomainEvent {}
     @Action(semantics = IDEMPOTENT,
             commandPublishing = Publishing.ENABLED, executionPublishing = Publishing.ENABLED,
             associateWith = "name", domainEvent = UpdateNameActionDomainEvent.class)
@@ -81,7 +96,7 @@ public class SimpleObject implements Comparable<SimpleObject> {
         return getName();
     }
 
-    public static class DeleteActionDomainEvent extends SimpleObject.ActionDomainEvent {}
+    public static class DeleteActionDomainEvent extends ActionDomainEvent {}
     @Action(semantics = NON_IDEMPOTENT_ARE_YOU_SURE, domainEvent = DeleteActionDomainEvent.class)
     public void delete() {
         final String title = titleService.titleOf(this);
diff --git a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjectRepository.java b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjectRepository.java
new file mode 100644
index 0000000..257f7bb
--- /dev/null
+++ b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjectRepository.java
@@ -0,0 +1,15 @@
+package domainapp.modules.simple.dom.so;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface SimpleObjectRepository extends JpaRepository<SimpleObject, Long> {
+
+    List<SimpleObject> findByNameContaining(final String name);
+
+    SimpleObject findByName(final String name);
+
+    List<SimpleObject> find();
+
+}
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 b5d9496..bf9642b 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
@@ -3,11 +3,18 @@ package domainapp.modules.simple.dom.so;
 import java.util.List;
 
 import javax.inject.Inject;
-import javax.jdo.JDOQLTypedQuery;
+import javax.persistence.TypedQuery;
 
-import org.apache.isis.applib.annotation.*;
+import org.apache.isis.applib.annotation.Action;
+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.Programmatic;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.repository.RepositoryService;
-import org.apache.isis.persistence.jdo.applib.integration.JdoSupportService;
+import org.apache.isis.persistence.jpa.applib.services.JpaSupportService;
 
 import domainapp.modules.simple.SimpleModule;
 import domainapp.modules.simple.types.Name;
@@ -20,7 +27,8 @@ import domainapp.modules.simple.types.Name;
 public class SimpleObjects {
 
     private final RepositoryService repositoryService;
-    private final JdoSupportService jdoSupportService;
+    private final JpaSupportService jpaSupportService;
+    private final SimpleObjectRepository simpleObjectRepository;
 
     public static class ActionDomainEvent extends SimpleModule.ActionDomainEvent<SimpleObjects> {}
 
@@ -38,41 +46,35 @@ public class SimpleObjects {
     public List<SimpleObject> findByName(
             @Name final String name
             ) {
-        JDOQLTypedQuery<SimpleObject> q = jdoSupportService.newTypesafeQuery(SimpleObject.class);
-        final QSimpleObject cand = QSimpleObject.candidate();
-        q = q.filter(
-                cand.name.indexOf(q.stringParameter("name")).ne(-1)
-                );
-        return q.setParameter("name", name)
-                .executeList();
+        return simpleObjectRepository.findByNameContaining(name);
     }
 
     @Programmatic
     public SimpleObject findByNameExact(final String name) {
-        JDOQLTypedQuery<SimpleObject> q = jdoSupportService.newTypesafeQuery(SimpleObject.class);
-        final QSimpleObject cand = QSimpleObject.candidate();
-        q = q.filter(
-                cand.name.eq(q.stringParameter("name"))
-                );
-        return q.setParameter("name", name)
-                .executeUnique();
+        return simpleObjectRepository.findByName(name);
     }
 
     public static class ListAllActionDomainEvent extends ActionDomainEvent {}
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(bookmarking = BookmarkPolicy.AS_ROOT)
     public List<SimpleObject> listAll() {
-        return repositoryService.allInstances(SimpleObject.class);
+        return simpleObjectRepository.find();
     }
 
+
     @Programmatic
     public void ping() {
-        JDOQLTypedQuery<SimpleObject> q = jdoSupportService.newTypesafeQuery(SimpleObject.class);
-        final QSimpleObject candidate = QSimpleObject.candidate();
-        q.range(0,2);
-        q.orderBy(candidate.name.asc());
-        q.executeList();
+        jpaSupportService.getEntityManager(SimpleObject.class).ifSuccess(x -> {
+            final TypedQuery<SimpleObject> q = x.createQuery("SELECT p FROM SimpleObject p ORDER BY p.name",
+                    SimpleObject.class).setMaxResults(1);
+            q.getResultList();
+        });
+
+//        final TypedQuery<SimpleObject> q = entityManager.createQuery("SELECT p FROM SimpleObject p ORDER BY p.name",
+//                SimpleObject.class).setMaxResults(1);
+//        q.getResultList();
     }
 
+//    @PersistenceContext EntityManager entityManager;
 
 }
diff --git a/module-simple/src/main/java/domainapp/modules/simple/types/Name.java b/module-simple/src/main/java/domainapp/modules/simple/types/Name.java
index 02fab8c..a04b05c 100644
--- a/module-simple/src/main/java/domainapp/modules/simple/types/Name.java
+++ b/module-simple/src/main/java/domainapp/modules/simple/types/Name.java
@@ -6,7 +6,6 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 import javax.inject.Inject;
-import javax.jdo.annotations.Column;
 
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -18,7 +17,6 @@ import lombok.val;
 
 import domainapp.modules.simple.SimpleModule;
 
-@Column(length = Name.MAX_LEN, allowsNull = "false")
 @Property(mustSatisfy = Name.Specification.class, maxLength = Name.MAX_LEN)
 @Parameter(mustSatisfy = Name.Specification.class, maxLength = Name.MAX_LEN)
 @ParameterLayout(named = "Name")
diff --git a/module-simple/src/main/java/domainapp/modules/simple/types/Notes.java b/module-simple/src/main/java/domainapp/modules/simple/types/Notes.java
index afd987e..73525e5 100644
--- a/module-simple/src/main/java/domainapp/modules/simple/types/Notes.java
+++ b/module-simple/src/main/java/domainapp/modules/simple/types/Notes.java
@@ -5,8 +5,6 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-import javax.jdo.annotations.Column;
-
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -14,7 +12,6 @@ import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Where;
 
-@Column(length = Notes.MAX_LEN, allowsNull = "true")
 @Property(editing = Editing.ENABLED, maxLength = Notes.MAX_LEN)
 @PropertyLayout(named = "Notes", multiLine = 10, hidden = Where.ALL_TABLES)
 @Parameter(maxLength = Notes.MAX_LEN)
diff --git a/module-simple/src/test/java/domainapp/modules/simple/dom/so/SimpleObjects_Test.java b/module-simple/src/test/java/domainapp/modules/simple/dom/so/SimpleObjects_Test.java
index 547f402..a0d19f2 100644
--- a/module-simple/src/test/java/domainapp/modules/simple/dom/so/SimpleObjects_Test.java
+++ b/module-simple/src/test/java/domainapp/modules/simple/dom/so/SimpleObjects_Test.java
@@ -4,9 +4,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
-import org.apache.isis.persistence.jdo.applib.integration.JdoSupportService;
-
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -16,6 +15,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.stubbing.Answer;
 
 import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.persistence.jpa.applib.services.JpaSupportService;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.argThat;
@@ -25,15 +25,17 @@ import static org.mockito.Mockito.when;
 class SimpleObjects_Test {
 
     @Mock RepositoryService mockRepositoryService;
-    @Mock JdoSupportService mockJdoSupportService;
+    @Mock JpaSupportService mockJpaSupportService;
+    @Mock SimpleObjectRepository mockSimpleObjectRepository;
 
     SimpleObjects objects;
 
     @BeforeEach
     public void setUp() {
-        objects = new SimpleObjects(mockRepositoryService, mockJdoSupportService);
+        objects = new SimpleObjects(mockRepositoryService, mockJpaSupportService, mockSimpleObjectRepository);
     }
 
+    @Disabled("TODO - to be ported over")
     @Nested
     class create {
 
@@ -57,6 +59,7 @@ class SimpleObjects_Test {
         }
     }
 
+    @Disabled("TODO - to be ported over")
     @Nested
     class ListAll {
 
diff --git a/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java b/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
index 6e76bd2..2386763 100644
--- a/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
+++ b/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
@@ -7,7 +7,7 @@ import org.springframework.test.context.TestPropertySource;
 
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
-import org.apache.isis.persistence.jdo.integration.IsisModuleJdoIntegration;
+import org.apache.isis.persistence.jpa.integration.IsisModuleJpaIntegration;
 import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
 import org.apache.isis.testing.fixtures.applib.IsisIntegrationTestAbstractWithFixtures;
 import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
@@ -29,7 +29,7 @@ public abstract class SimpleModuleIntegTestAbstract extends IsisIntegrationTestA
     @Import({
         IsisModuleCoreRuntimeServices.class,
         IsisModuleSecurityBypass.class,
-        IsisModuleJdoIntegration.class,
+        IsisModuleJpaIntegration.class,
         IsisModuleTestingFixturesApplib.class,
 
         SimpleModule.class
diff --git a/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java b/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java
index 9ba75f1..7d113d7 100644
--- a/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java
+++ b/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java
@@ -16,7 +16,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.services.wrapper.DisabledException;
 import org.apache.isis.applib.services.wrapper.InvalidException;
-import org.apache.isis.persistence.jdo.datanucleus.mixins.Persistable_datanucleusIdLong;
 
 import lombok.Getter;
 
@@ -107,16 +106,5 @@ public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract {
         }
     }
 
-    public static class dataNucleusId extends SimpleObject_IntegTest {
-
-        @Test
-        public void should_be_populated() {
-            // when
-            final Long id = mixin(Persistable_datanucleusIdLong.class, simpleObject).prop();
-
-            // then
-            assertThat(id).isGreaterThanOrEqualTo(0);
-        }
-    }
 
 }
diff --git a/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjects_IntegTest.java b/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjects_IntegTest.java
index dcd2302..b3e1b02 100644
--- a/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjects_IntegTest.java
+++ b/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjects_IntegTest.java
@@ -3,10 +3,10 @@ package domainapp.modules.simple.integtests.tests;
 import java.util.List;
 
 import javax.inject.Inject;
-import javax.jdo.JDODataStoreException;
 
 import org.hamcrest.MatcherAssert;
 import org.junit.jupiter.api.Test;
+import org.springframework.orm.jpa.JpaSystemException;
 import org.springframework.transaction.annotation.Transactional;
 
 import org.apache.isis.testing.integtestsupport.applib.ThrowableMatchers;
@@ -81,12 +81,12 @@ public class SimpleObjects_IntegTest extends SimpleModuleIntegTestAbstract {
             });
 
             // also expect
-            MatcherAssert.assertThat(cause, 
-                    ThrowableMatchers.causedBy(JDODataStoreException.class));
+            MatcherAssert.assertThat(cause,
+                    ThrowableMatchers.causedBy(JpaSystemException.class));
 
         }
 
     }
 
 
-}
\ No newline at end of file
+}
diff --git a/webapp/pom.xml b/webapp/pom.xml
index 6c9b7e8..38a6602 100644
--- a/webapp/pom.xml
+++ b/webapp/pom.xml
@@ -74,6 +74,7 @@
 			        <goal>run</goal>
 			      </goals>
 			      <configuration>
+                    <skip>${skipBDD}</skip>
 			        <target>
 			          <echo message="Running Cucumber CLI" />
 			          <java classname="io.cucumber.core.cli.Main"
diff --git a/webapp/src/main/java/domainapp/webapp/AppManifest.java b/webapp/src/main/java/domainapp/webapp/AppManifest.java
index 262063d..cf05432 100644
--- a/webapp/src/main/java/domainapp/webapp/AppManifest.java
+++ b/webapp/src/main/java/domainapp/webapp/AppManifest.java
@@ -8,7 +8,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.extensions.flyway.impl.IsisModuleExtFlywayImpl;
-import org.apache.isis.persistence.jdo.integration.IsisModuleJdoIntegration;
+import org.apache.isis.persistence.jpa.integration.IsisModuleJpaIntegration;
 import org.apache.isis.security.shiro.IsisModuleSecurityShiro;
 import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
 import org.apache.isis.testing.h2console.ui.IsisModuleTestingH2ConsoleUi;
@@ -23,7 +23,7 @@ import domainapp.webapp.custom.CustomModule;
 @Import({
         IsisModuleCoreRuntimeServices.class,
         IsisModuleSecurityShiro.class,
-        IsisModuleJdoIntegration.class,
+        IsisModuleJpaIntegration.class,
         IsisModuleViewerRestfulObjectsJaxrsResteasy4.class,
         IsisModuleViewerWicketViewer.class,
 
diff --git a/webapp/src/test/java/domainapp/webapp/integtests/ApplicationIntegTestAbstract.java b/webapp/src/test/java/domainapp/webapp/integtests/ApplicationIntegTestAbstract.java
index 1d37d79..ef051e1 100644
--- a/webapp/src/test/java/domainapp/webapp/integtests/ApplicationIntegTestAbstract.java
+++ b/webapp/src/test/java/domainapp/webapp/integtests/ApplicationIntegTestAbstract.java
@@ -8,7 +8,7 @@ import org.springframework.test.context.TestPropertySource;
 
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
-import org.apache.isis.persistence.jdo.integration.IsisModuleJdoIntegration;
+import org.apache.isis.persistence.jpa.integration.IsisModuleJpaIntegration;
 import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
 import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
 import org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
@@ -38,7 +38,7 @@ public abstract class ApplicationIntegTestAbstract extends IsisIntegrationTestAb
     @Configuration
     @Import({
         IsisModuleCoreRuntimeServices.class,
-        IsisModuleJdoIntegration.class,
+        IsisModuleJpaIntegration.class,
         IsisModuleSecurityBypass.class,
         IsisModuleTestingFixturesApplib.class,
 
diff --git a/webapp/src/test/java/domainapp/webapp/unittests/archunit/ArchitectureTests.java b/webapp/src/test/java/domainapp/webapp/unittests/archunit/ArchitectureTests.java
index 09da224..2bdb7bd 100644
--- a/webapp/src/test/java/domainapp/webapp/unittests/archunit/ArchitectureTests.java
+++ b/webapp/src/test/java/domainapp/webapp/unittests/archunit/ArchitectureTests.java
@@ -1,6 +1,6 @@
 package domainapp.webapp.unittests.archunit;
 
-import javax.jdo.annotations.PersistenceCapable;
+import javax.persistence.Entity;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import com.tngtech.archunit.core.importer.ImportOption;
@@ -32,15 +32,15 @@ public class ArchitectureTests {
             .whereLayer("simple module").mayOnlyBeAccessedByLayers("webapp");
 
     @ArchTest
-    static ArchRule classes_annotated_with_PersistenceCapable_are_also_annotated_with_DomainObject =
+    static ArchRule classes_annotated_with_Entity_are_also_annotated_with_DomainObject =
             classes()
-                   .that().areAnnotatedWith(PersistenceCapable.class)
+                   .that().areAnnotatedWith(Entity.class)
             .should().beAnnotatedWith(DomainObject.class);
 
     @ArchTest
-    static ArchRule classes_annotated_with_PersistenceCapable_are_also_annotated_with_XmlJavaTypeAdapter =
+    static ArchRule classes_annotated_with_Entity_are_also_annotated_with_XmlJavaTypeAdapter =
             classes()
-                   .that().areAnnotatedWith(PersistenceCapable.class)
+                   .that().areAnnotatedWith(Entity.class)
             .should().beAnnotatedWith(XmlJavaTypeAdapter.class);
 
     @ArchTest