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/03/15 06:10:18 UTC
[isis-app-simpleapp] branch jdo-SNAPSHOT updated: updates for M5,
resurrecting flyway config
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch jdo-SNAPSHOT
in repository https://gitbox.apache.org/repos/asf/isis-app-simpleapp.git
The following commit(s) were added to refs/heads/jdo-SNAPSHOT by this push:
new 41377f8 updates for M5, resurrecting flyway config
41377f8 is described below
commit 41377f83fd18ec15097f7af0a4106f76c4147116
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Mar 15 06:09:39 2021 +0000
updates for M5, resurrecting flyway config
---
.../integtests/SimpleModuleIntegTestAbstract.java | 38 +++++++++++++-
.../integtests/SimpleModuleTestConfiguration.java | 58 ----------------------
.../modules/simple/dom/so/SimpleObject.java | 29 +++++++----
.../modules/simple/dom/so/SimpleObjects.java | 35 ++++++-------
.../main/java/domainapp/webapp/AppManifest.java | 4 --
.../fixture/scenarios/DomainAppDemo.java | 5 +-
.../services/homepage/HomePageViewModel.java | 4 +-
.../webapp/custom/restapi/CustomController.java | 4 +-
webapp/src/main/resources/application.yml | 2 +-
.../config/application-SQLSERVER.properties | 40 +++++++++++++++
.../config/todo~application-POSTGRESQL.properties | 34 -------------
.../config/todo~application-SQLSERVER.properties | 33 ------------
12 files changed, 119 insertions(+), 167 deletions(-)
diff --git a/module-simple-tests/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java b/module-simple-tests/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
index dc42df0..ff7480e 100644
--- a/module-simple-tests/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
+++ b/module-simple-tests/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
@@ -1,15 +1,51 @@
package domainapp.modules.simple.integtests;
+import org.springframework.boot.SpringBootConfiguration;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.annotation.PropertySources;
import org.springframework.test.context.ActiveProfiles;
+import org.apache.isis.core.config.presets.IsisPresets;
+import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
+import org.apache.isis.persistence.jdo.datanucleus.IsisModuleJdoDatanucleus;
+import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
import org.apache.isis.testing.fixtures.applib.IsisIntegrationTestAbstractWithFixtures;
+import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
+
+import domainapp.modules.simple.SimpleModule;
@SpringBootTest(
- classes = SimpleModuleTestConfiguration.class
+ classes = SimpleModuleIntegTestAbstract.TestApp.class
)
@ActiveProfiles("test")
public abstract class SimpleModuleIntegTestAbstract extends IsisIntegrationTestAbstractWithFixtures {
+ /**
+ * Compared to the production app manifest <code>domainapp.webapp.AppManifest</code>,
+ * here we in effect disable security checks, and we exclude any web/UI modules.
+ */
+ @SpringBootConfiguration
+ @EnableAutoConfiguration
+ @Import({
+
+ IsisModuleCoreRuntimeServices.class,
+ IsisModuleSecurityBypass.class,
+ IsisModuleJdoDatanucleus.class,
+ IsisModuleTestingFixturesApplib.class,
+
+ SimpleModule.class
+ })
+ @PropertySources({
+ @PropertySource(IsisPresets.H2InMemory_withUniqueSchema),
+ @PropertySource(IsisPresets.DatanucleusAutocreateNoValidate),
+ @PropertySource(IsisPresets.UseLog4j2Test),
+ })
+ public static class TestApp {
+
+ }
+
}
diff --git a/module-simple-tests/src/test/java/domainapp/modules/simple/integtests/SimpleModuleTestConfiguration.java b/module-simple-tests/src/test/java/domainapp/modules/simple/integtests/SimpleModuleTestConfiguration.java
deleted file mode 100644
index be30e32..0000000
--- a/module-simple-tests/src/test/java/domainapp/modules/simple/integtests/SimpleModuleTestConfiguration.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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 domainapp.modules.simple.integtests;
-
-import org.springframework.boot.SpringBootConfiguration;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.PropertySource;
-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.persistence.jdo.datanucleus.IsisModuleJdoDatanucleus;
-import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
-import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
-
-import domainapp.modules.simple.SimpleModule;
-
-/**
- * Compared to the production app manifest <code>domainapp.webapp.AppManifest</code>,
- * here we in effect disable security checks, and we exclude any web/UI modules.
- */
-@SpringBootConfiguration
-@EnableAutoConfiguration
-@Import({
-
- IsisModuleCoreRuntimeServices.class,
- IsisModuleSecurityBypass.class,
- IsisModuleJdoDatanucleus.class,
- IsisModuleTestingFixturesApplib.class,
-
- SimpleModule.class
-})
-@PropertySources({
- @PropertySource(IsisPresets.H2InMemory_withUniqueSchema),
- @PropertySource(IsisPresets.DatanucleusAutocreateNoValidate),
- @PropertySource(IsisPresets.UseLog4j2Test),
-})
-public class SimpleModuleTestConfiguration {
-
-
-}
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 8fbf95a..ff0b6d5 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
@@ -31,6 +31,20 @@ import lombok.val;
@javax.jdo.annotations.PersistenceCapable(identityType=IdentityType.DATASTORE, schema = "simple")
@javax.jdo.annotations.DatastoreIdentity(strategy=IdGeneratorStrategy.IDENTITY, column="id")
+@javax.jdo.annotations.Queries({
+ @javax.jdo.annotations.Query(
+ name = "findByName",
+ value = "SELECT " +
+ "FROM domainapp.modules.simple.dom.so.SimpleObject " +
+ "WHERE name.indexOf(:name) >= 0"
+ ),
+ @javax.jdo.annotations.Query(
+ name = "findByNameExact",
+ value = "SELECT " +
+ "FROM domainapp.modules.simple.dom.so.SimpleObject " +
+ "WHERE name == :name"
+ )
+})
@javax.jdo.annotations.Version(strategy= VersionStrategy.DATE_TIME, column="version")
@javax.jdo.annotations.Unique(name="SimpleObject_name_UNQ", members = {"name"})
@DomainObject()
@@ -45,8 +59,6 @@ public class SimpleObject implements Comparable<SimpleObject> {
return simpleObject;
}
- public static class ActionDomainEvent extends SimpleModule.ActionDomainEvent<SimpleObject> {}
-
@Inject RepositoryService repositoryService;
@Inject TitleService titleService;
@Inject MessageService messageService;
@@ -58,6 +70,7 @@ public class SimpleObject implements Comparable<SimpleObject> {
return "Object: " + getName();
}
+
@Name
@Getter @Setter @ToString.Include
private String name;
@@ -67,28 +80,26 @@ public class SimpleObject implements Comparable<SimpleObject> {
private String notes;
- public static class UpdateNameActionDomainEvent extends ActionDomainEvent {}
- @Action(semantics = IDEMPOTENT,
- commandPublishing = Publishing.ENABLED, executionPublishing = Publishing.ENABLED,
- associateWith = "name", domainEvent = UpdateNameActionDomainEvent.class)
+ @Action(semantics = IDEMPOTENT)
public SimpleObject updateName(
@Name final String name) {
setName(name);
return this;
}
-
public String default0UpdateName() {
return getName();
}
- public static class DeleteActionDomainEvent extends ActionDomainEvent {}
- @Action(semantics = NON_IDEMPOTENT_ARE_YOU_SURE, domainEvent = DeleteActionDomainEvent.class)
+
+ @Action(semantics = NON_IDEMPOTENT_ARE_YOU_SURE)
public void delete() {
final String title = titleService.titleOf(this);
messageService.informUser(String.format("'%s' deleted", title));
repositoryService.removeAndFlush(this);
}
+
+
private final static Comparator<SimpleObject> comparator =
Comparator.comparing(SimpleObject::getName);
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 4e7e1b6..04407a9 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
@@ -13,6 +13,7 @@ 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.query.Query;
import org.apache.isis.applib.services.repository.RepositoryService;
import org.apache.isis.persistence.jdo.applib.services.JdoSupportService;
@@ -29,49 +30,43 @@ public class SimpleObjects {
private final RepositoryService repositoryService;
private final JdoSupportService jdoSupportService;
- public static class ActionDomainEvent extends SimpleModule.ActionDomainEvent<SimpleObjects> {}
- public static class CreateActionDomainEvent extends ActionDomainEvent {}
- @Action(semantics = SemanticsOf.NON_IDEMPOTENT, domainEvent = CreateActionDomainEvent.class)
+ @Action(semantics = SemanticsOf.NON_IDEMPOTENT)
@ActionLayout(promptStyle = PromptStyle.DIALOG_SIDEBAR)
public SimpleObject create(
@Name final String name) {
return repositoryService.persist(SimpleObject.withName(name));
}
- public static class FindByNameActionDomainEvent extends ActionDomainEvent {}
- @Action(semantics = SemanticsOf.SAFE, domainEvent = FindByNameActionDomainEvent.class)
+ @Action(semantics = SemanticsOf.SAFE)
@ActionLayout(bookmarking = BookmarkPolicy.AS_ROOT, promptStyle = PromptStyle.DIALOG_SIDEBAR)
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 repositoryService.allMatches(
+ Query.named(SimpleObject.class, "findByName")
+ .withParameter("name", 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 repositoryService.firstMatch(
+ Query.named(SimpleObject.class, "findByNameExact")
+ .withParameter("name", name))
+ .orElse(null);
}
- public static class ListAllActionDomainEvent extends ActionDomainEvent {}
+
+
@Action(semantics = SemanticsOf.SAFE)
@ActionLayout(bookmarking = BookmarkPolicy.AS_ROOT)
public List<SimpleObject> listAll() {
return repositoryService.allInstances(SimpleObject.class);
}
+
+
+
@Programmatic
public void ping() {
JDOQLTypedQuery<SimpleObject> q = jdoSupportService.newTypesafeQuery(SimpleObject.class);
diff --git a/webapp/src/main/java/domainapp/webapp/AppManifest.java b/webapp/src/main/java/domainapp/webapp/AppManifest.java
index b24aff8..3effeab 100644
--- a/webapp/src/main/java/domainapp/webapp/AppManifest.java
+++ b/webapp/src/main/java/domainapp/webapp/AppManifest.java
@@ -9,7 +9,6 @@ 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.datanucleus.IsisModuleJdoDatanucleus;
-
import org.apache.isis.security.shiro.IsisModuleSecurityShiro;
import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
import org.apache.isis.testing.h2console.ui.IsisModuleTestingH2ConsoleUi;
@@ -18,7 +17,6 @@ import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
import domainapp.webapp.application.ApplicationModule;
import domainapp.webapp.application.fixture.scenarios.DomainAppDemo;
-import domainapp.webapp.application.services.health.HealthCheckServiceImpl;
import domainapp.webapp.custom.CustomModule;
@Configuration
@@ -36,8 +34,6 @@ import domainapp.webapp.custom.CustomModule;
ApplicationModule.class,
CustomModule.class,
-
- HealthCheckServiceImpl.class,
// discoverable fixtures
DomainAppDemo.class
diff --git a/webapp/src/main/java/domainapp/webapp/application/fixture/scenarios/DomainAppDemo.java b/webapp/src/main/java/domainapp/webapp/application/fixture/scenarios/DomainAppDemo.java
index e0445b2..3b18a98 100644
--- a/webapp/src/main/java/domainapp/webapp/application/fixture/scenarios/DomainAppDemo.java
+++ b/webapp/src/main/java/domainapp/webapp/application/fixture/scenarios/DomainAppDemo.java
@@ -9,13 +9,12 @@ import domainapp.modules.simple.fixture.SimpleObject_persona;
public class DomainAppDemo extends FixtureScript {
- @Inject
- ModuleWithFixturesService moduleWithFixturesService;
-
@Override
protected void execute(final ExecutionContext ec) {
ec.executeChildren(this, moduleWithFixturesService.getTeardownFixture());
ec.executeChild(this, new SimpleObject_persona.PersistAll());
}
+ @Inject ModuleWithFixturesService moduleWithFixturesService;
+
}
diff --git a/webapp/src/main/java/domainapp/webapp/application/services/homepage/HomePageViewModel.java b/webapp/src/main/java/domainapp/webapp/application/services/homepage/HomePageViewModel.java
index 9b87197..0326492 100644
--- a/webapp/src/main/java/domainapp/webapp/application/services/homepage/HomePageViewModel.java
+++ b/webapp/src/main/java/domainapp/webapp/application/services/homepage/HomePageViewModel.java
@@ -21,8 +21,8 @@ import domainapp.modules.simple.dom.so.SimpleObjects;
@DomainObjectLayout()
public class HomePageViewModel {
- public TranslatableString title() {
- return TranslatableString.tr("{num} objects", "num", getObjects().size());
+ public String title() {
+ return getObjects().size() + " objects";
}
public List<SimpleObject> getObjects() {
diff --git a/webapp/src/main/java/domainapp/webapp/custom/restapi/CustomController.java b/webapp/src/main/java/domainapp/webapp/custom/restapi/CustomController.java
index 39972d8..abd4e01 100644
--- a/webapp/src/main/java/domainapp/webapp/custom/restapi/CustomController.java
+++ b/webapp/src/main/java/domainapp/webapp/custom/restapi/CustomController.java
@@ -25,11 +25,11 @@ class CustomController {
private final InteractionFactory interactionFactory;
private final TransactionalProcessor transactionalProcessor;
- private final SimpleObjects repository;
+ private final SimpleObjects simpleObjects;
@GetMapping("/custom/simpleObjects")
List<SimpleObject> all() {
- return callAuthenticated(newAuthentication(), () -> repository.listAll())
+ return callAuthenticated(newAuthentication(), () -> simpleObjects.listAll())
.optionalElseFail() // re-throws exception that has occurred, if any
.orElse(Collections.emptyList()); // handles null case, if required
}
diff --git a/webapp/src/main/resources/application.yml b/webapp/src/main/resources/application.yml
index 42dda6d..01820c7 100644
--- a/webapp/src/main/resources/application.yml
+++ b/webapp/src/main/resources/application.yml
@@ -71,7 +71,7 @@ isis:
schema:
auto-create-schemas: simple
create-schema-sql-template: "CREATE SCHEMA IF NOT EXISTS %S"
-
+
# note that properties under 'datanucleus' must use camelCase rather than kebab-case
datanucleus:
schema:
diff --git a/webapp/src/main/resources/config/application-SQLSERVER.properties b/webapp/src/main/resources/config/application-SQLSERVER.properties
new file mode 100644
index 0000000..ae61e11
--- /dev/null
+++ b/webapp/src/main/resources/config/application-SQLSERVER.properties
@@ -0,0 +1,40 @@
+#
+# Recommend use for configuration that changes between environments.
+#
+# To override externally, see Spring Boot docs
+# https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
+#
+# See also /application.yml
+#
+
+#
+# to enable this profile use:
+#
+# -Dspring.profiles.active=SQLSERVER
+#
+# Prereq is an empty database called 'simpleapp', with user and password also 'simpleapp'
+#
+
+# note that properties under 'isis.persistence.jdo-datanucleus.impl' are passed through directly
+# to DataNucleus, and must use camelCase rather than kebab-case
+
+spring.datasource.url=jdbc:sqlserver://localhost;databaseName=simpleapp
+spring.datasource.username=simpleapp
+spring.datasource.password=simpleapp
+spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
+
+#javax.jdo.option.ConnectionURL=jdbc:sqlserver://localhost;databaseName=simpleapp
+#javax.jdo.option.ConnectionDriverName=com.microsoft.sqlserver.jdbc.SQLServerDriver
+#javax.jdo.option.ConnectionUserName=simpleapp
+#javax.jdo.option.ConnectionPassword=simpleapp
+
+datanucleus.schema.autoCreateAll=false
+
+isis.persistence.schema.auto-create-schemas=
+
+spring.flyway.enabled=true
+
+#spring.flyway.url=${javax.jdo.option.ConnectionURL}
+#spring.flyway.user=${javax.jdo.option.ConnectionUserName}
+#spring.flyway.password=${javax.jdo.option.ConnectionPassword}
+
diff --git a/webapp/src/main/resources/config/todo~application-POSTGRESQL.properties b/webapp/src/main/resources/config/todo~application-POSTGRESQL.properties
deleted file mode 100644
index 5448bd1..0000000
--- a/webapp/src/main/resources/config/todo~application-POSTGRESQL.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Recommend use for configuration that changes between environments.
-#
-# To override externally, see Spring Boot docs
-# https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
-#
-# See also /application.yml
-#
-
-#
-# to enable this profile use:
-#
-# -Dspring.profiles.active=POSTGRESQL
-#
-# Prereq is an empty database called 'postgres', with user and password also 'postgres'
-#
-
-# note that properties under 'isis.persistence.jdo-datanucleus.impl' are passed through directly
-# to DataNucleus, and must use camelCase rather than kebab-case
-
-isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionURL=jdbc:postgresql://localhost:5432/postgres
-isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionDriverName=org.postgresql.Driver
-isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionUserName=postgres
-isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionPassword=postgres
-
-isis.persistence.jdo-datanucleus.impl.datanucleus.schema.autoCreateAll=false
-
-spring.flyway.enabled=true
-
-spring.flyway.url=${isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionURL}
-spring.flyway.user=${isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionUserName}
-spring.flyway.password=${isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionPassword}
-
-
diff --git a/webapp/src/main/resources/config/todo~application-SQLSERVER.properties b/webapp/src/main/resources/config/todo~application-SQLSERVER.properties
deleted file mode 100644
index d9a71f6..0000000
--- a/webapp/src/main/resources/config/todo~application-SQLSERVER.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Recommend use for configuration that changes between environments.
-#
-# To override externally, see Spring Boot docs
-# https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
-#
-# See also /application.yml
-#
-
-#
-# to enable this profile use:
-#
-# -Dspring.profiles.active=SQLSERVER
-#
-# Prereq is an empty database called 'simpleapp', with user and password also 'simpleapp'
-#
-
-# note that properties under 'isis.persistence.jdo-datanucleus.impl' are passed through directly
-# to DataNucleus, and must use camelCase rather than kebab-case
-
-isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionURL = jdbc:sqlserver://localhost;databaseName=simpleapp
-isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionDriverName = com.microsoft.sqlserver.jdbc.SQLServerDriver
-isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionUserName = simpleapp
-isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionPassword = simpleapp
-
-isis.persistence.jdo-datanucleus.impl.datanucleus.schema.autoCreateAll=false
-
-spring.flyway.enabled=true
-
-spring.flyway.url=${isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionURL}
-spring.flyway.user=${isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionUserName}
-spring.flyway.password=${isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionPassword}
-