You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/05/24 07:41:00 UTC
[isis] branch master updated: ISIS-2513: Demo: add JPA support for
WrapperFactory
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 9113b98 ISIS-2513: Demo: add JPA support for WrapperFactory
9113b98 is described below
commit 9113b98e306f59dd929fc2be281340339a7dd698
Author: andi-huber <ah...@apache.org>
AuthorDate: Mon May 24 09:40:51 2021 +0200
ISIS-2513: Demo: add JPA support for WrapperFactory
---
.../src/main/java/demoapp/dom/DemoModuleJpa.java | 2 ++
.../demoapp/dom/services/core/ServicesMenu.java | 10 +++---
.../WrapperFactoryJdo-description.adoc} | 4 +++
.../core/wrapperFactory/jdo/WrapperFactoryJdo.java | 2 +-
.../WrapperFactoryJpa-description.adoc} | 5 +++
.../WrapperFactoryJpa.java} | 42 ++++++++++++++--------
.../jpa/WrapperFactoryJpaEntities.java | 40 +++++++++++++++++++++
7 files changed, 84 insertions(+), 21 deletions(-)
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 c2abcfc..9f1b90e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
@@ -26,6 +26,7 @@ import org.springframework.context.annotation.Profile;
import org.apache.isis.extensions.commandlog.jpa.IsisModuleExtCommandLogJpa;
import org.apache.isis.persistence.jpa.eclipselink.IsisModuleJpaEclipselink;
+import demoapp.dom.services.core.wrapperFactory.jpa.WrapperFactoryJpa;
import demoapp.dom.services.extensions.secman.apptenancy.jpa.TenantedJpa;
import demoapp.dom.types.isis.blobs.jpa.IsisBlobJpa;
import demoapp.dom.types.isis.clobs.jpa.IsisClobJpa;
@@ -118,6 +119,7 @@ import demoapp.dom.types.primitive.shorts.jpa.PrimitiveShortJpa;
WrapperByteJpa.class,
TenantedJpa.class,
+ WrapperFactoryJpa.class,
})
public class DemoModuleJpa {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/ServicesMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/ServicesMenu.java
index e51bf86..c5e4bf9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/ServicesMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/ServicesMenu.java
@@ -27,11 +27,11 @@ import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.applib.services.factory.FactoryService;
+import demoapp.dom._infra.values.ValueHolderRepository;
import demoapp.dom.services.core.errorreportingservice.ErrorReportingServiceDemoVm;
import demoapp.dom.services.core.eventbusservice.EventBusServiceDemoVm;
import demoapp.dom.services.core.messageservice.MessageServiceDemoVm;
-import demoapp.dom.services.core.wrapperFactory.jdo.WrapperFactoryJdo;
-import demoapp.dom.services.core.wrapperFactory.jdo.WrapperFactoryJdoEntities;
+import demoapp.dom.services.core.wrapperFactory.WrapperFactoryEntity;
import demoapp.dom.services.core.xmlSnapshotService.XmlSnapshotParentVm;
import demoapp.dom.services.core.xmlSnapshotService.peer.XmlSnapshotPeerVm;
import lombok.RequiredArgsConstructor;
@@ -42,7 +42,7 @@ import lombok.val;
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class ServicesMenu {
- final WrapperFactoryJdoEntities wrapperFactoryJdoEntities;
+ final ValueHolderRepository<String, ? extends WrapperFactoryEntity> wrapperFactoryEntities;
final FactoryService factoryService;
@@ -66,8 +66,8 @@ public class ServicesMenu {
@Action(semantics = SemanticsOf.SAFE)
@ActionLayout(cssClassFa="fa-gift", describedAs = "Formal object interactions + async")
- public WrapperFactoryJdo wrapperFactory(){
- return wrapperFactoryJdoEntities.first().orElse(null);
+ public WrapperFactoryEntity wrapperFactory(){
+ return wrapperFactoryEntities.first().orElse(null);
}
@Action(semantics = SemanticsOf.SAFE)
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo-description.adoc
similarity index 92%
copy from examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity-description.adoc
copy to examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo-description.adoc
index c93da7c..32dc53a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo-description.adoc
@@ -2,3 +2,7 @@
CAUTION: TODO - to document
+[source,java]
+----
+include::WrapperFactoryJdo.java[tags=class]
+----
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
index 461d645..4842bb4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
@@ -50,7 +50,7 @@ import lombok.val;
@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
@DomainObject(
nature=Nature.ENTITY
- , objectType = "demo.WrapperFactoryJdo"
+ , objectType = "demo.WrapperFactoryEntity"
, editing = Editing.DISABLED
)
public class WrapperFactoryJdo
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa-description.adoc
similarity index 91%
rename from examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa-description.adoc
index c93da7c..66a65fd 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa-description.adoc
@@ -2,3 +2,8 @@
CAUTION: TODO - to document
+[source,java]
+----
+include::WrapperFactoryJpa.java[tags=class]
+----
+
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa.java
similarity index 79%
copy from examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
copy to examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa.java
index 461d645..40d9586 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa.java
@@ -16,13 +16,14 @@
* specific language governing permissions and limitations
* under the License.
*/
-package demoapp.dom.services.core.wrapperFactory.jdo;
+package demoapp.dom.services.core.wrapperFactory.jpa;
import javax.inject.Inject;
-import javax.jdo.annotations.DatastoreIdentity;
-import javax.jdo.annotations.IdGeneratorStrategy;
-import javax.jdo.annotations.IdentityType;
-import javax.jdo.annotations.PersistenceCapable;
+import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
import org.springframework.context.annotation.Profile;
@@ -37,23 +38,30 @@ import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.applib.services.factory.FactoryService;
import org.apache.isis.applib.services.wrapper.WrapperFactory;
import org.apache.isis.applib.services.wrapper.control.AsyncControl;
+import org.apache.isis.persistence.jpa.applib.integration.JpaEntityInjectionPointResolver;
import demoapp.dom.services.core.wrapperFactory.WrapperFactoryEntity;
import demoapp.dom.services.core.wrapperFactory.WrapperFactoryEntity_updatePropertyAsyncMixin;
import lombok.Getter;
+import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.val;
-@Profile("demo-jdo")
+@Profile("demo-jpa")
//tag::class[]
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
-@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Entity
+@Table(
+ schema = "demo",
+ name = "WrapperFactoryJpa"
+)
+@EntityListeners(JpaEntityInjectionPointResolver.class)
@DomainObject(
nature=Nature.ENTITY
- , objectType = "demo.WrapperFactoryJdo"
+ , objectType = "demo.WrapperFactoryEntity"
, editing = Editing.DISABLED
)
-public class WrapperFactoryJdo
+@NoArgsConstructor
+public class WrapperFactoryJpa
extends WrapperFactoryEntity {
@Inject transient WrapperFactory wrapperFactory;
@@ -62,7 +70,7 @@ public class WrapperFactoryJdo
// ...
//end::class[]
- public WrapperFactoryJdo(String initialValue) {
+ public WrapperFactoryJpa(String initialValue) {
this.propertyAsync = initialValue;
this.propertyAsyncMixin = initialValue;
}
@@ -71,6 +79,10 @@ public class WrapperFactoryJdo
return "WrapperFactory";
}
+ @Id
+ @GeneratedValue
+ private Long id;
+
//tag::property[]
@Property()
@PropertyLayout(fieldSetId = "async", sequence = "1")
@@ -92,7 +104,7 @@ public class WrapperFactoryJdo
, associateWith = "propertyAsync"
, sequence = "1"
)
- public WrapperFactoryJdo updatePropertyAsync(final String value) {
+ public WrapperFactoryJpa updatePropertyAsync(final String value) {
val control = AsyncControl.returningVoid().withSkipRules();
val wrapperFactoryJdo = this.wrapperFactory.asyncWrap(this, control);
wrapperFactoryJdo.setPropertyAsync(value);
@@ -115,10 +127,10 @@ public class WrapperFactoryJdo
, associateWith = "propertyAsyncMixin"
, sequence = "1"
)
- public WrapperFactoryJdo updatePropertyUsingAsyncWrapMixin(final String value) {
- val control = AsyncControl.returning(WrapperFactoryJdo.class).withSkipRules();
+ public WrapperFactoryJpa updatePropertyUsingAsyncWrapMixin(final String value) {
+ val control = AsyncControl.returning(WrapperFactoryJpa.class).withSkipRules();
val mixin = this.wrapperFactory.asyncWrapMixin(WrapperFactoryEntity_updatePropertyAsyncMixin.class, this, control);
- WrapperFactoryJdo act = (WrapperFactoryJdo) mixin.act(value);
+ WrapperFactoryJpa act = (WrapperFactoryJpa) mixin.act(value);
return this;
}
public String default0UpdatePropertyUsingAsyncWrapMixin() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpaEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpaEntities.java
new file mode 100644
index 0000000..573a98a
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpaEntities.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+package demoapp.dom.services.core.wrapperFactory.jpa;
+
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Service;
+
+import demoapp.dom._infra.values.ValueHolderRepository;
+
+@Profile("demo-jpa")
+@Service
+public class WrapperFactoryJpaEntities
+extends ValueHolderRepository<String, WrapperFactoryJpa> {
+
+ protected WrapperFactoryJpaEntities() {
+ super(WrapperFactoryJpa.class);
+ }
+
+ @Override
+ protected WrapperFactoryJpa newDetachedEntity(String value) {
+ return new WrapperFactoryJpa(value);
+ }
+
+}