diff --git a/.github/workflows/native-image.yml b/.github/workflows/native-image.yml
new file mode 100644
index 0000000..b799971
--- /dev/null
+++ b/.github/workflows/native-image.yml
@@ -0,0 +1,33 @@
+name: GraalVM Community Edition Continuous Integration
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ java: ['java11']
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/cache@v2.1.6
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
+ - name: Setup GraalVM Community Edition
+ uses: DeLaGuardo/setup-graalvm@5.0
+ with:
+ graalvm: 21.3.0
+ java: ${{ matrix.java }}
+ - name: Install Native Image
+ run: gu install native-image
+ - name: Build native image with Maven
+ working-directory: showcase-quarkus-eventsourcing
+ run: mvn verify --activate-profiles native --file pom.xml --batch-mode
\ No newline at end of file
diff --git a/showcase-quarkus-eventsourcing/README.md b/showcase-quarkus-eventsourcing/README.md
index 12600f1..2d1f51a 100644
--- a/showcase-quarkus-eventsourcing/README.md
+++ b/showcase-quarkus-eventsourcing/README.md
@@ -17,7 +17,7 @@
Details see [Building a native executable](https://quarkus.io/guides/building-native-image-guide)
* The substrate runner can be used to collect configuration data for the native image:
```
-$GRAALVM_HOME/bin/java -agentlib:native-image-agent=config-output-dir=native-image,caller-filter-file=native-image-caller-filter-rules.json -jar ./target/showcase-quarkus-eventsourcing-1.0-SNAPSHOT-runner.jar
+$GRAALVM_HOME/bin/java -agentlib:native-image-agent=config-output-dir=native-image,caller-filter-file=native-image-caller-filter-rules.json -jar ./target/showcase-quarkus-eventsourcing-1.3-SNAPSHOT-runner.jar
```
This is helpful to get a hint on how to configure ```reflection-config.json``` and ```resources-config.json```
These files were configured that way.
@@ -25,13 +25,13 @@ $GRAALVM_HOME/bin/java -agentlib:native-image-agent=config-output-dir=native-ima
Ideally, there would be a axon-extension for quarkus that manages these settings.
* The substrate runner can also be used to generate a trace of all reflection calls:
```
-$GRAALVM_HOME/bin/java -agentlib:native-image-agent=trace-output=native-image/trace-output.json,caller-filter-file=native-image-caller-filter-rules.json -jar ./target/showcase-quarkus-eventsourcing-1.0-SNAPSHOT-runner.jar
+$GRAALVM_HOME/bin/java -agentlib:native-image-agent=trace-output=native-image/trace-output.json,caller-filter-file=native-image-caller-filter-rules.json -jar ./target/showcase-quarkus-eventsourcing-1.3-SNAPSHOT-runner.jar
```
* More informations abount the `native-image-agent` can be found here:
[CONFIGURE.md](https://github.com/oracle/graal/blob/master/substratevm/CONFIGURE.md)
## Features
-* "Reactive" example using server sent events (tested with safari browser) and axon subscription query
+* "Reactive" example using server sent events (tested with safari & chrome browser) and axon subscription query
* Replay example. Use REST DELETE ```/nicknames/projection```
* Contains an axon upcaster example
* Works with H2 and PostgreSql. Just switch the regarding comments in ```application.properties``` and ```persistence.xml```.
@@ -42,7 +42,7 @@ $GRAALVM_HOME/bin/java -agentlib:native-image-agent=trace-output=native-image/tr
## Notes
* Code comments containing the marker ```Note:``` describes thoughts, background information, documented decisions and hints to problems.
-* ```ArchitectureRulesTest``` defines rules to assure low coupling between the business core, axon and the microprofile features.
+* ```ArchitectureRulesTest``` defines rules to assure low coupling between the business core, axon and microprofile features.
* These rules might seem a bit extreme. Some may even find them to be impractical. After all, this examples shows that it can be done.
* This is just a simple show case, not an full application.
diff --git a/showcase-quarkus-eventsourcing/pom.xml b/showcase-quarkus-eventsourcing/pom.xml
index fd7a41f..3dab750 100644
--- a/showcase-quarkus-eventsourcing/pom.xml
+++ b/showcase-quarkus-eventsourcing/pom.xml
@@ -5,7 +5,7 @@
io.github.joht.showcase.quarkuseventsourcing
showcase-quarkus-eventsourcing
- 1.2-SNAPSHOT
+ 1.3-SNAPSHOT
3.8.1
@@ -22,7 +22,7 @@
2.5.0.Final
2.5.0.Final
- 4.3.2
+ 4.5.5
1.6.1
1.2.10
diff --git a/showcase-quarkus-eventsourcing/reflection-config.json b/showcase-quarkus-eventsourcing/reflection-config.json
index 6ad6ac4..d013f43 100644
--- a/showcase-quarkus-eventsourcing/reflection-config.json
+++ b/showcase-quarkus-eventsourcing/reflection-config.json
@@ -219,45 +219,36 @@
},
{
"name": "org.axonframework.eventhandling.GapAwareTrackingToken",
- "allDeclaredFields": true,
"allDeclaredMethods": true,
"allDeclaredConstructors": true
},
{
"name": "org.axonframework.eventhandling.ReplayToken",
- "allDeclaredFields": true,
"allDeclaredMethods": true,
"allDeclaredConstructors": true
},
{
"name": "org.axonframework.eventhandling.TrackingToken",
- "allDeclaredConstructors": true,
"allDeclaredMethods": true,
"allDeclaredFields": true
},
{
"name": "org.axonframework.eventhandling.WrappedToken",
- "allDeclaredConstructors": true,
"allDeclaredMethods": true,
"allDeclaredFields": true
},
{
"name": "org.axonframework.eventhandling.Timestamp",
- "allDeclaredConstructors": true,
- "allDeclaredMethods": true,
- "allDeclaredFields": true
+ "allDeclaredMethods": true
},
{
"name": "org.axonframework.messaging.MetaData",
"allDeclaredConstructors": true,
- "allDeclaredMethods": true,
- "allDeclaredFields": true
+ "allDeclaredMethods": true
},
{
"name": "org.axonframework.serialization.upcasting.event.EventUpcaster",
- "allDeclaredConstructors": true,
- "allDeclaredMethods": true,
- "allDeclaredFields": true
+ "allDeclaredMethods": true
},
{
"name": "org.axonframework.serialization.upcasting.SingleEntryUpcaster",
@@ -267,27 +258,20 @@
},
{
"name": "org.axonframework.serialization.upcasting.Upcaster",
- "allDeclaredConstructors": true,
- "allDeclaredMethods": true,
- "allDeclaredFields": true
+ "allDeclaredMethods": true
},
{
"name": "org.axonframework.serialization.upcasting.event.EventUpcaster",
- "allDeclaredConstructors": true,
- "allDeclaredMethods": true,
- "allDeclaredFields": true
+ "allDeclaredMethods": true
},
{
"name": "org.axonframework.serialization.upcasting.event.IntermediateEventRepresentation",
- "allDeclaredConstructors": true,
- "allDeclaredMethods": true,
- "allDeclaredFields": true
+ "allDeclaredMethods": true
},
{
"name": "org.axonframework.serialization.upcasting.event.SingleEventUpcaster",
"allDeclaredConstructors": true,
- "allDeclaredMethods": true,
- "allDeclaredFields": true
+ "allDeclaredMethods": true
},
{
"name": "org.axonframework.modelling.command.AggregateIdentifier",
diff --git a/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/boundary/QueryModelResetHandler.java b/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/boundary/QueryModelResetHandler.java
index 4aeb3df..aa52c2d 100644
--- a/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/boundary/QueryModelResetHandler.java
+++ b/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/boundary/QueryModelResetHandler.java
@@ -6,8 +6,8 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.axonframework.eventhandling.EventHandler;
-import org.axonframework.eventhandling.ResetTriggeredEvent;
+import org.axonframework.eventhandling.replay.ResetContext;
+import org.axonframework.messaging.annotation.MessageHandler;
/**
* Used to mark a method inside a event handler ("projection") to be called,
@@ -16,7 +16,7 @@
@Documented
@Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
-@EventHandler(payloadType = ResetTriggeredEvent.class)
+@MessageHandler(messageType = ResetContext.class)
public @interface QueryModelResetHandler {
}
diff --git a/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/nativeimage/NatieImageReflectConfigTest.java b/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/nativeimage/NatieImageReflectionConfigTest.java
similarity index 95%
rename from showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/nativeimage/NatieImageReflectConfigTest.java
rename to showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/nativeimage/NatieImageReflectionConfigTest.java
index 99860e4..b9414b0 100644
--- a/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/nativeimage/NatieImageReflectConfigTest.java
+++ b/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/nativeimage/NatieImageReflectionConfigTest.java
@@ -32,7 +32,7 @@
*
* @author JohT
*/
-class NatieImageReflectConfigTest {
+class NatieImageReflectionConfigTest {
private static final Jsonb create = JsonbBuilder.create();
@Test
@@ -45,7 +45,7 @@ void missingInManualEditedFile() {
// .filter(name ->
// !classForName(name).map(Class::isInterface).orElse(Boolean.FALSE))
.collect(Collectors.joining("\n"));
- System.out.println("missingInManualEditedFile");
+ System.out.println("\nmissingInManualEditedFile:\n");
System.out.println(axonClasses);
}
@@ -54,7 +54,7 @@ void missingInGeneratedFile() {
Set mainConfig = classNamesRegisteredForReflections("reflection-config.json");
Set generatedConfig = classNamesRegisteredForReflections("native-image/432-reflect-config.json");
mainConfig.removeAll(generatedConfig);
- System.out.println("missingInGeneratedFile");
+ System.out.println("\nmissingInGeneratedFile:\n");
System.out.println(mainConfig.stream().collect(Collectors.joining("\n")));
}
diff --git a/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/account/AccountRessourceNativeImageIT.java b/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/account/AccountRessourceNativeImageIT.java
new file mode 100644
index 0000000..e4f2490
--- /dev/null
+++ b/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/account/AccountRessourceNativeImageIT.java
@@ -0,0 +1,8 @@
+package io.github.joht.showcase.quarkuseventsourcing.service.account;
+
+import io.quarkus.test.junit.NativeImageTest;
+
+@NativeImageTest
+public class AccountRessourceNativeImageIT extends AccountResourceTest {
+ // Execute the same tests but in native mode.
+}
diff --git a/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/nickname/NativeNicknamesProjectionManagementResourceIT.java b/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/nickname/NativeNicknamesProjectionManagementResourceIT.java
deleted file mode 100644
index e3639ac..0000000
--- a/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/nickname/NativeNicknamesProjectionManagementResourceIT.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package io.github.joht.showcase.quarkuseventsourcing.service.nickname;
-
-import io.quarkus.test.junit.NativeImageTest;
-
-@NativeImageTest
-public class NativeNicknamesProjectionManagementResourceIT extends NicknamesProjectionManagementResourceTest {
- // run the same tests
-}
diff --git a/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/nickname/NicknameEventStreamResourceNativeImageIT.java b/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/nickname/NicknameEventStreamResourceNativeImageIT.java
new file mode 100644
index 0000000..5ecf041
--- /dev/null
+++ b/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/nickname/NicknameEventStreamResourceNativeImageIT.java
@@ -0,0 +1,8 @@
+package io.github.joht.showcase.quarkuseventsourcing.service.nickname;
+
+import io.quarkus.test.junit.NativeImageTest;
+
+@NativeImageTest
+public class NicknameEventStreamResourceNativeImageIT extends NicknameEventStreamResourceTest {
+ // Execute the same tests but in native mode.
+}
diff --git a/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/nickname/NativeNicknameEventStreamResourceIT.java b/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/nickname/NicknamesProjectionManagementResourceNativeImageIT.java
similarity index 61%
rename from showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/nickname/NativeNicknameEventStreamResourceIT.java
rename to showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/nickname/NicknamesProjectionManagementResourceNativeImageIT.java
index ed8be01..fccc7ce 100644
--- a/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/nickname/NativeNicknameEventStreamResourceIT.java
+++ b/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/service/nickname/NicknamesProjectionManagementResourceNativeImageIT.java
@@ -3,7 +3,6 @@
import io.quarkus.test.junit.NativeImageTest;
@NativeImageTest
-public class NativeNicknameEventStreamResourceIT extends NicknameEventStreamResourceTest {
-
+public class NicknamesProjectionManagementResourceNativeImageIT extends NicknamesProjectionManagementResourceTest {
// Execute the same tests but in native mode.
}