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 2020/01/22 18:02:48 UTC

[isis-app-simpleapp] branch master updated (c57795c -> 2d79421)

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

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


    from c57795c  replaces tabs with spaces
     new 20644a6  adds support for flyway
     new 2d79421  updates docs for flyway

The 2 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.


Summary of changes:
 README.adoc                                        | 38 +++++++++++++-
 .../modules/simple/dom/impl/SimpleObject.java      |  3 +-
 pom.xml                                            |  2 +-
 webapp/pom.xml                                     | 22 ++++++++
 .../src/main/java/domainapp/webapp/SimpleApp.java  | 28 ++++++-----
 webapp/src/main/resources/application.yml          | 58 +---------------------
 .../config/application-SQLSERVER.properties        | 31 ++++++++++++
 .../main/resources/config/application.properties   |  5 +-
 .../V2020.01.20.14.10__create_schema_simple.sql    |  8 +++
 ....20.14.14__create_table_simple_SimpleObject.sql | 25 ++++++++++
 .../integtests/ApplicationIntegTestAbstract.java   |  1 +
 11 files changed, 147 insertions(+), 74 deletions(-)
 create mode 100644 webapp/src/main/resources/config/application-SQLSERVER.properties
 create mode 100644 webapp/src/main/resources/db/migration/SQLSERVER/V2020.01.20.14.10__create_schema_simple.sql
 create mode 100644 webapp/src/main/resources/db/migration/SQLSERVER/V2020.01.20.14.14__create_table_simple_SimpleObject.sql


[isis-app-simpleapp] 02/02: updates docs for flyway

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

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

commit 2d79421142da1d66dd553d74267fc757e75067bd
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 22 18:02:34 2020 +0000

    updates docs for flyway
---
 README.adoc    | 31 +++++++++++++++++++++++++++++++
 webapp/pom.xml |  3 ++-
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/README.adoc b/README.adoc
index 70bfe53..ca78503 100644
--- a/README.adoc
+++ b/README.adoc
@@ -233,5 +233,36 @@ Running an integration tests that trigger validations will result in these messa
 The generated file should be merged with any existing translations in `WEB-INF/translations.po`, and translations obtained for any new keys (there are numerous online services that support the format).
 
 
+== Flyway
 
+The application also demonstrates how to use Flyway to migrate the database schema.
+
+By default the app runs using an in-memory database.
+The Flyway example is activated using the "SQLSERVER" Spring Boot profile, eg:
+
+[source,bash]
+----
+mvn -Dspring.profiles.active=SQLSERVER -pl webapp install
+mvn -Dspring.profiles.active=SQLSERVER -pl webapp spring-boot:run
+----
+
+This causes the properties defined in  `config/application-SQLSERVER.properties` file to be used in preference to those in the default `config/application.properties` file.
+It defines the following:
+
+* `spring.flyway.url`, `spring.flyway.user` and `spring.flyway.password`
++
+The presence of these is enough to enable the Flyway integration
+
+* `spring.flyway.enabled`
++
+This is explicitly set to `true`, to override the value in the default `config/application.properties`.
+
+* `isis.persistence.jdo-datanucleus.impl.datanucleus.schema.autoCreateAll`
++
+This is set to `false`, also overriding the value in the default `config/application.properties`.
+It instructs the JDO/DataNucleus object store not to automatically create any tables etc.
+
+The Spring Boot profile is also used to add the dependency to the SQL Server driver is included (it is hidden behind a Maven profile).
+
+The prerequisites to try this out are a SQL Server database running on `localhost` and with the credentials as specified in `config/application-SQLSERVER.properties`; adjust as necessary.
 
diff --git a/webapp/pom.xml b/webapp/pom.xml
index 3bb4d5d..bfa08f9 100644
--- a/webapp/pom.xml
+++ b/webapp/pom.xml
@@ -227,7 +227,8 @@
             <id>jdbc-sqlserver</id>
             <activation>
                 <property>
-                    <name>!skip.jdbc-sqlserver</name>
+                    <name>spring.profiles.active</name>
+                    <value>SQLSERVER</value>
                 </property>
             </activation>
             <dependencies>


[isis-app-simpleapp] 01/02: adds support for flyway

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

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

commit 20644a6ef9f3cf48effca1ac1f3c29769e25e917
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 22 17:48:30 2020 +0000

    adds support for flyway
---
 README.adoc                                        |  7 ++-
 .../modules/simple/dom/impl/SimpleObject.java      |  3 +-
 pom.xml                                            |  2 +-
 webapp/pom.xml                                     | 21 ++++++++
 .../src/main/java/domainapp/webapp/SimpleApp.java  | 28 ++++++-----
 webapp/src/main/resources/application.yml          | 58 +---------------------
 .../config/application-SQLSERVER.properties        | 31 ++++++++++++
 .../main/resources/config/application.properties   |  5 +-
 .../V2020.01.20.14.10__create_schema_simple.sql    |  8 +++
 ....20.14.14__create_table_simple_SimpleObject.sql | 25 ++++++++++
 .../integtests/ApplicationIntegTestAbstract.java   |  1 +
 11 files changed, 115 insertions(+), 74 deletions(-)

diff --git a/README.adoc b/README.adoc
index 24c0b21..70bfe53 100644
--- a/README.adoc
+++ b/README.adoc
@@ -19,9 +19,10 @@ If all you want is get a feel for what the framework is all about, then take a l
 +
 [source,bash]
 ----
-REPO=isis-app-simpleapp
+APP=simpleapp
 BRANCH=master
 
+REPO=isis-app-$APP
 curl "https://codeload.github.com/apache/$REPO/zip/$BRANCH" | jar xv
 mv $REPO-$BRANCH $REPO
 cd $REPO
@@ -41,7 +42,9 @@ mvn clean install
 mvn -pl webapp spring-boot:run
 ----
 
-* Login using:
+* Browse to http://localhost:8080.
+
+* Login to using:
 
 ** username: `sven`
 ** password: `pass`
diff --git a/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java b/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
index c3bc635..6319cc7 100644
--- a/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
+++ b/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
@@ -37,7 +37,8 @@ public class SimpleObject implements Comparable<SimpleObject> {
 
     public static class ActionDomainEvent extends org.apache.isis.applib.events.domain.ActionDomainEvent<SimpleObject> {}
 
-    private SimpleObject() {}
+    private SimpleObject() {
+    }
 
     public String title() {
         return "Object: " + getName();
diff --git a/pom.xml b/pom.xml
index a3c0d71..613fe3f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>org.apache.isis.app</groupId>
         <artifactId>isis-app-starter-parent</artifactId>
-        <version>2.0.0-M2.20200116-1350-2dd6b3a2</version>
+        <version>2.0.0-M2.20200120-1800-910c8085</version>
 <!--
         <version>2.0.0-M3-SNAPSHOT</version>
 -->
diff --git a/webapp/pom.xml b/webapp/pom.xml
index f774f9a..3bb4d5d 100644
--- a/webapp/pom.xml
+++ b/webapp/pom.xml
@@ -115,6 +115,11 @@
             <artifactId>isis-testing-h2console-ui</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.isis.extensions</groupId>
+            <artifactId>isis-extensions-flyway-impl</artifactId>
+        </dependency>
+
         <!-- TESTING -->
         <dependency>
             <groupId>org.apache.isis.mavendeps</groupId>
@@ -217,6 +222,22 @@
                 </plugins>
             </build>
         </profile>
+
+        <profile>
+            <id>jdbc-sqlserver</id>
+            <activation>
+                <property>
+                    <name>!skip.jdbc-sqlserver</name>
+                </property>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>com.microsoft.sqlserver</groupId>
+                    <artifactId>mssql-jdbc</artifactId>
+                    <version>7.4.1.jre8</version>
+                </dependency>
+            </dependencies>
+        </profile>
     </profiles>
 
 </project>
diff --git a/webapp/src/main/java/domainapp/webapp/SimpleApp.java b/webapp/src/main/java/domainapp/webapp/SimpleApp.java
index 8243d99..39c1e56 100644
--- a/webapp/src/main/java/domainapp/webapp/SimpleApp.java
+++ b/webapp/src/main/java/domainapp/webapp/SimpleApp.java
@@ -1,26 +1,26 @@
 package domainapp.webapp;
 
-import domainapp.webapp.application.ApplicationModule;
-import domainapp.webapp.application.fixture.scenarios.DomainAppDemo;
-
-import org.apache.isis.core.runtime.IsisModuleCoreRuntime;
-import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
-import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
-import org.apache.isis.testing.h2console.ui.IsisModuleTestingH2ConsoleUi;
-import org.apache.isis.persistence.jdo.datanucleus5.IsisModuleJdoDataNucleus5;
-import org.apache.isis.viewer.restfulobjects.jaxrsresteasy4.IsisModuleViewerRestfulObjectsJaxrsResteasy4;
-import org.apache.isis.security.shiro.IsisModuleSecurityShiro;
-import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
-
-import org.apache.isis.core.config.presets.IsisPresets;
 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.extensions.flyway.impl.IsisModuleExtFlywayImpl;
+import org.apache.isis.persistence.jdo.datanucleus5.IsisModuleJdoDataNucleus5;
+import org.apache.isis.security.shiro.IsisModuleSecurityShiro;
+import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
+import org.apache.isis.testing.h2console.ui.IsisModuleTestingH2ConsoleUi;
+import org.apache.isis.viewer.restfulobjects.jaxrsresteasy4.IsisModuleViewerRestfulObjectsJaxrsResteasy4;
+import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
+
+import domainapp.webapp.application.ApplicationModule;
+import domainapp.webapp.application.fixture.scenarios.DomainAppDemo;
+
 @SpringBootApplication
 @Import({
     SimpleApp.AppManifest.class,
@@ -43,6 +43,8 @@ public class SimpleApp extends SpringBootServletInitializer {
             IsisModuleTestingFixturesApplib.class,
             IsisModuleTestingH2ConsoleUi.class,
 
+            IsisModuleExtFlywayImpl.class,
+
             ApplicationModule.class,
 
             // discoverable fixtures
diff --git a/webapp/src/main/resources/application.yml b/webapp/src/main/resources/application.yml
index 34c41fe..65ba537 100644
--- a/webapp/src/main/resources/application.yml
+++ b/webapp/src/main/resources/application.yml
@@ -13,54 +13,6 @@ isis:
         command: ignore_safe
         publishing: all
       action-layout:
-        css-class-fa:
-          patterns:
-            new.*:fa-plus,
-            add.*:fa-plus-square,
-            create.*:fa-plus,
-            update.*:fa-edit,
-            delete.*:fa-trash,
-            save.*:fa-floppy-o,
-            change.*:fa-edit,
-            edit.*:fa-pencil-square-o,
-            maintain.*:fa-edit,
-            remove.*:fa-minus-square,
-            copy.*:fa-copy,
-            move.*:fa-exchange,
-            first.*:fa-star,
-            find.*:fa-search,
-            lookup.*:fa-search,
-            search.*:fa-search,
-            view.*:fa-search,
-            clear.*:fa-remove,
-            previous.*:fa-step-backward,
-            next.*:fa-step-forward,
-            list.*:fa-list,
-            all.*:fa-list,
-            download.*:fa-download,
-            upload.*:fa-upload,
-            export.*:fa-download,
-            switch.*:fa-exchange,
-            import.*:fa-upload,
-            execute.*:fa-bolt,
-            run.*:fa-bolt,
-            calculate.*:fa-calculator,
-            verify.*:fa-check-circle,
-            refresh.*:fa-refresh,
-            install.*:fa-wrench,
-            stop.*:fa-stop,
-            terminate.*:fa-stop,
-            cancel.*:fa-stop,
-            discard.*:fa-trash-o,
-            pause.*:fa-pause,
-            suspend.*:fa-pause,
-            resume.*:fa-play,
-            renew.*:fa-repeat,
-            reset.*:fa-repeat,
-            categorise.*:fa-folder-open-o,
-            assign.*:fa-hand-o-right,
-            approve.*:fa-thumbs-o-up,
-            decline.*:fa-thumbs-o-down
         css-class:
           patterns:
             delete.*:btn-danger,
@@ -82,8 +34,6 @@ isis:
         allow-deprecated: false
         no-params-only: true
         explicit-object-type: true
-        service-actions-only: true
-        mixins-only: true
 
   viewer:
     wicket:
@@ -117,8 +67,8 @@ isis:
   persistence:
     jdo-datanucleus:
       impl:
-        # note that properties under 'isis.persistor.datanucleus.impl' are passed through directly
-        # to DataNucleus, and must use camelCase rather than kebab-case
+        # 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
@@ -133,10 +83,6 @@ isis:
               type: none
               mode: ENABLE_SELECTIVE
 
-  value:
-    format:
-      date: dd-MM-yyyy
-
 resteasy:
   jaxrs:
     app:
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..4747259
--- /dev/null
+++ b/webapp/src/main/resources/config/application-SQLSERVER.properties
@@ -0,0 +1,31 @@
+#
+# 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
+
+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}
+
+spring.flyway.enabled=true
+isis.persistence.jdo-datanucleus.impl.datanucleus.schema.autoCreateAll=false
diff --git a/webapp/src/main/resources/config/application.properties b/webapp/src/main/resources/config/application.properties
index 93135ec..8e3d195 100644
--- a/webapp/src/main/resources/config/application.properties
+++ b/webapp/src/main/resources/config/application.properties
@@ -9,9 +9,12 @@
 
 
 # note that properties under 'isis.persistence.jdo-datanucleus.impl' are passed through directly
-# to DataNucleus, and must use camelCase rather than kebab-case
+# to DataNucleus, and use variously camelCase or PascalCase rather than kebab-case
 
 isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionURL = jdbc:h2:mem:test
 isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionDriverName = org.h2.Driver
 isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionUserName = sa
 isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionPassword =
+
+spring.flyway.enabled=false
+isis.persistence.jdo-datanucleus.impl.datanucleus.schema.autoCreateAll=true
\ No newline at end of file
diff --git a/webapp/src/main/resources/db/migration/SQLSERVER/V2020.01.20.14.10__create_schema_simple.sql b/webapp/src/main/resources/db/migration/SQLSERVER/V2020.01.20.14.10__create_schema_simple.sql
new file mode 100644
index 0000000..447a66f
--- /dev/null
+++ b/webapp/src/main/resources/db/migration/SQLSERVER/V2020.01.20.14.10__create_schema_simple.sql
@@ -0,0 +1,8 @@
+IF NOT EXISTS (
+    SELECT  1
+    FROM    sys.schemas
+    WHERE   name = N'simple'
+)
+    EXEC('CREATE SCHEMA [simple]');
+GO
+
diff --git a/webapp/src/main/resources/db/migration/SQLSERVER/V2020.01.20.14.14__create_table_simple_SimpleObject.sql b/webapp/src/main/resources/db/migration/SQLSERVER/V2020.01.20.14.14__create_table_simple_SimpleObject.sql
new file mode 100644
index 0000000..0d727cf
--- /dev/null
+++ b/webapp/src/main/resources/db/migration/SQLSERVER/V2020.01.20.14.14__create_table_simple_SimpleObject.sql
@@ -0,0 +1,25 @@
+SET ANSI_NULLS ON
+GO
+
+SET QUOTED_IDENTIFIER ON
+GO
+
+CREATE TABLE [simple].[SimpleObject](
+    [id]      [bigint]        IDENTITY(1,1) NOT NULL,
+    [name]    [varchar](40)                 NOT NULL,
+    [notes]   [varchar](4000)               NULL,
+    [version] [datetime2](7)                NOT NULL,
+
+    CONSTRAINT [SimpleObject_PK] PRIMARY KEY CLUSTERED
+        ([id] ASC)
+        WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
+        ON [PRIMARY],
+
+    CONSTRAINT [SimpleObject_name_UNQ] UNIQUE NONCLUSTERED
+        ([name] ASC)
+        WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
+        ON [PRIMARY]
+)
+ON [PRIMARY]
+GO
+
diff --git a/webapp/src/test/java/domainapp/webapp/integtests/ApplicationIntegTestAbstract.java b/webapp/src/test/java/domainapp/webapp/integtests/ApplicationIntegTestAbstract.java
index f848c3b..ab5b46e 100644
--- a/webapp/src/test/java/domainapp/webapp/integtests/ApplicationIntegTestAbstract.java
+++ b/webapp/src/test/java/domainapp/webapp/integtests/ApplicationIntegTestAbstract.java
@@ -13,6 +13,7 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.TestPropertySource;
+import org.springframework.transaction.annotation.Transactional;
 
 @SpringBootTest(
         classes = ApplicationIntegTestAbstract.AppManifest.class