diff --git a/build.gradle b/build.gradle index c84895cf..a03a47c6 100644 --- a/build.gradle +++ b/build.gradle @@ -582,7 +582,7 @@ configure(rootProject) { from 'spring-statemachine-samples/eventservice/src/main/java/' from 'spring-statemachine-samples/datajpa/src/main/java/' from 'spring-statemachine-samples/datajpa/src/main/resources/' - from 'spring-statemachine-samples/datajpapersist/src/main/java/' + from 'spring-statemachine-samples/datapersist/src/main/java/' from 'spring-statemachine-samples/monitoring/src/main/java/' include '**/*.java' include '**/*.uml' diff --git a/docs/src/reference/asciidoc/sm-examples.adoc b/docs/src/reference/asciidoc/sm-examples.adoc index 39dbcaa2..b9299b73 100644 --- a/docs/src/reference/asciidoc/sm-examples.adoc +++ b/docs/src/reference/asciidoc/sm-examples.adoc @@ -38,7 +38,7 @@ normal build cycle. Samples in this chapter are: <> JPA Config. -<> JPA Persist. +<> Data Persist. <> Monitoring. @@ -1497,12 +1497,12 @@ Actual source for populator data is shown below. include::samples/data.json[] ---- -[[statemachine-examples-datajpapersist]] -== JPA Persist -JPA Persist is an example how state machine concepts can be used -with persisting machine in a database. This sample is using +[[statemachine-examples-datapersist]] +== Data Persist +Data Persist is an example how state machine concepts can be used +with persisting machine in an external repository. This sample is using embedded _H2_ database with a _H2 Console_ to ease playing with a -database. +database. Optionally it's also possible to enable _Redis_ or _MongoDB_. This sample uses `spring-statemachine-autoconfigure` which on default auto-configures repositories and entity classes needed for JPA. @@ -1510,25 +1510,39 @@ Thus only `@SpringBootApplication` is needed. [source,java,indent=0] ---- -include::samples/demo/datajpapersist/Application.java[tags=snippetA] +include::samples/demo/datapersist/Application.java[tags=snippetA] ---- `StateMachineRuntimePersister` is a new interface working on a runtime -level of a 'StateMachine' and its implementation +level of a `StateMachine` and its implementation `JpaPersistingStateMachineInterceptor` is meant to be used with a -'JPA'. +_JPA_. [source,java,indent=0] ---- -include::samples/demo/datajpapersist/StateMachineConfig.java[tags=snippetA] +include::samples/demo/datapersist/StateMachineConfig.java[tags=snippetA] ---- -'StateMachine' can be configured to use runtime persistence by using +Same configuration optionally enabled with _mongo_ profile. + +[source,java,indent=0] +---- +include::samples/demo/datapersist/StateMachineConfig.java[tags=snippetB] +---- + +Same configuration optionally enabled with _redis_ profile. + +[source,java,indent=0] +---- +include::samples/demo/datapersist/StateMachineConfig.java[tags=snippetC] +---- + +`StateMachine` can be configured to use runtime persistence by using `withPersistence` config method. [source,java,indent=0] ---- -include::samples/demo/datajpapersist/StateMachineConfig.java[tags=snippetB] +include::samples/demo/datapersist/StateMachineConfig.java[tags=snippetD] ---- In this sample we also use `DefaultStateMachineService` which makes it @@ -1536,21 +1550,34 @@ easier to work with multiple machines [source,java,indent=0] ---- -include::samples/demo/datajpapersist/StateMachineConfig.java[tags=snippetC] +include::samples/demo/datapersist/StateMachineConfig.java[tags=snippetE] ---- A logic using a `StateMachineService` in this sample is show below. [source,java,indent=0] ---- -include::samples/demo/datajpapersist/StateMachineController.java[tags=snippetA] +include::samples/demo/datapersist/StateMachineController.java[tags=snippetA] ---- Let's get into actual demo. Run the boot based sample application: [source,text,subs="attributes"] ---- -# java -jar spring-statemachine-samples-datajpapersist-{revnumber}.jar +# java -jar spring-statemachine-samples-datapersist-{revnumber}.jar +---- + +[NOTE] +==== +Profile _jpa_ is enabled on default in _application.yml_. If you want to try +other backends, enable _mongo_ or _redis_ profile. +==== + +[source,text,subs="attributes"] +---- +# java -jar spring-statemachine-samples-datapersist-{revnumber}.jar --spring.profiles.active=jpa +# java -jar spring-statemachine-samples-datapersist-{revnumber}.jar --spring.profiles.active=mongo +# java -jar spring-statemachine-samples-datapersist-{revnumber}.jar --spring.profiles.active=redis ---- Accessing application via _http://localhost:8080_ brings up a new diff --git a/settings.gradle b/settings.gradle index a20b621a..58ac7be0 100644 --- a/settings.gradle +++ b/settings.gradle @@ -28,7 +28,7 @@ include 'spring-statemachine-samples:eventservice' include 'spring-statemachine-samples:deploy' include 'spring-statemachine-samples:ordershipping' include 'spring-statemachine-samples:datajpa' -include 'spring-statemachine-samples:datajpapersist' +include 'spring-statemachine-samples:datapersist' include 'spring-statemachine-samples:monitoring' include 'spring-statemachine-data' diff --git a/spring-statemachine-samples/build.gradle b/spring-statemachine-samples/build.gradle index becaeb9d..0cdf11a6 100644 --- a/spring-statemachine-samples/build.gradle +++ b/spring-statemachine-samples/build.gradle @@ -127,8 +127,8 @@ project('spring-statemachine-samples-datajpa') { } } -project('spring-statemachine-samples-datajpapersist') { - description = 'Spring State Machine Data Jpa Persist Sample' +project('spring-statemachine-samples-datapersist') { + description = 'Spring State Machine Data Persist Sample' dependencies { compile project(":spring-statemachine-autoconfigure") compile project(":spring-statemachine-data-common:spring-statemachine-data-jpa") diff --git a/spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/Application.java b/spring-statemachine-samples/datapersist/src/main/java/demo/datapersist/Application.java similarity index 96% rename from spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/Application.java rename to spring-statemachine-samples/datapersist/src/main/java/demo/datapersist/Application.java index 2f851de3..a3476aef 100644 --- a/spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/Application.java +++ b/spring-statemachine-samples/datapersist/src/main/java/demo/datapersist/Application.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package demo.datajpapersist; +package demo.datapersist; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineConfig.java b/spring-statemachine-samples/datapersist/src/main/java/demo/datapersist/StateMachineConfig.java similarity index 99% rename from spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineConfig.java rename to spring-statemachine-samples/datapersist/src/main/java/demo/datapersist/StateMachineConfig.java index ed6b942e..1f39a0c8 100644 --- a/spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineConfig.java +++ b/spring-statemachine-samples/datapersist/src/main/java/demo/datapersist/StateMachineConfig.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package demo.datajpapersist; +package demo.datapersist; import java.util.EnumSet; diff --git a/spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineController.java b/spring-statemachine-samples/datapersist/src/main/java/demo/datapersist/StateMachineController.java similarity index 96% rename from spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineController.java rename to spring-statemachine-samples/datapersist/src/main/java/demo/datapersist/StateMachineController.java index 344cb766..0a9f1b4e 100644 --- a/spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineController.java +++ b/spring-statemachine-samples/datapersist/src/main/java/demo/datapersist/StateMachineController.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package demo.datajpapersist; +package demo.datapersist; import java.util.EnumSet; import java.util.List; @@ -29,8 +29,8 @@ import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; -import demo.datajpapersist.StateMachineConfig.Events; -import demo.datajpapersist.StateMachineConfig.States; +import demo.datapersist.StateMachineConfig.Events; +import demo.datapersist.StateMachineConfig.States; @Controller public class StateMachineController { diff --git a/spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineLogListener.java b/spring-statemachine-samples/datapersist/src/main/java/demo/datapersist/StateMachineLogListener.java similarity index 92% rename from spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineLogListener.java rename to spring-statemachine-samples/datapersist/src/main/java/demo/datapersist/StateMachineLogListener.java index 5bdf7e76..aaa8ebf7 100644 --- a/spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineLogListener.java +++ b/spring-statemachine-samples/datapersist/src/main/java/demo/datapersist/StateMachineLogListener.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package demo.datajpapersist; +package demo.datapersist; import java.util.LinkedList; import java.util.List; @@ -22,8 +22,8 @@ import org.springframework.statemachine.StateContext; import org.springframework.statemachine.StateContext.Stage; import org.springframework.statemachine.listener.StateMachineListenerAdapter; -import demo.datajpapersist.StateMachineConfig.Events; -import demo.datajpapersist.StateMachineConfig.States; +import demo.datapersist.StateMachineConfig.Events; +import demo.datapersist.StateMachineConfig.States; public class StateMachineLogListener extends StateMachineListenerAdapter { diff --git a/spring-statemachine-samples/datajpapersist/src/main/resources/application.yml b/spring-statemachine-samples/datapersist/src/main/resources/application.yml similarity index 100% rename from spring-statemachine-samples/datajpapersist/src/main/resources/application.yml rename to spring-statemachine-samples/datapersist/src/main/resources/application.yml diff --git a/spring-statemachine-samples/datajpapersist/src/main/resources/templates/states.html b/spring-statemachine-samples/datapersist/src/main/resources/templates/states.html similarity index 100% rename from spring-statemachine-samples/datajpapersist/src/main/resources/templates/states.html rename to spring-statemachine-samples/datapersist/src/main/resources/templates/states.html diff --git a/spring-statemachine-samples/datajpapersist/src/test/java/demo/datajpapersist/DataJpaPersistTests.java b/spring-statemachine-samples/datapersist/src/test/java/demo/datapersist/DataJpaPersistTests.java similarity index 97% rename from spring-statemachine-samples/datajpapersist/src/test/java/demo/datajpapersist/DataJpaPersistTests.java rename to spring-statemachine-samples/datapersist/src/test/java/demo/datapersist/DataJpaPersistTests.java index ed718f1f..eb7d500d 100644 --- a/spring-statemachine-samples/datajpapersist/src/test/java/demo/datajpapersist/DataJpaPersistTests.java +++ b/spring-statemachine-samples/datapersist/src/test/java/demo/datapersist/DataJpaPersistTests.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package demo.datajpapersist; +package demo.datapersist; import static org.hamcrest.Matchers.allOf; import static org.hamcrest.Matchers.containsString; @@ -34,7 +34,8 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; -import demo.datajpapersist.Application; +import demo.datapersist.Application; +import demo.datapersist.StateMachineController; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = { Application.class })