diff --git a/docs/modules/ROOT/pages/includes/attributes.adoc b/docs/modules/ROOT/pages/includes/attributes.adoc index 8d86ca5..a4360c7 100644 --- a/docs/modules/ROOT/pages/includes/attributes.adoc +++ b/docs/modules/ROOT/pages/includes/attributes.adoc @@ -1,3 +1,3 @@ :project-version: 1.0.0 -:infinispan-version: 15.0.8.Final +:infinispan-version: 15.0.11.Final :examples-dir: ./../examples/ diff --git a/integration-tests/src/main/java/org/infinispan/quarkus/embedded/Book.java b/integration-tests/src/main/java/org/infinispan/quarkus/embedded/Book.java new file mode 100644 index 0000000..2667755 --- /dev/null +++ b/integration-tests/src/main/java/org/infinispan/quarkus/embedded/Book.java @@ -0,0 +1,14 @@ +package org.infinispan.quarkus.embedded; + +import org.infinispan.protostream.GeneratedSchema; +import org.infinispan.protostream.annotations.Proto; +import org.infinispan.protostream.annotations.ProtoSchema; + +@Proto +public record Book(String name, String author) { + + @ProtoSchema(includeClasses = Book.class, schemaPackageName = "it.quarkus") + public interface BookSchema extends GeneratedSchema { + + } +} diff --git a/integration-tests/src/main/java/org/infinispan/quarkus/embedded/TestServlet.java b/integration-tests/src/main/java/org/infinispan/quarkus/embedded/TestServlet.java index b77d97e..dd107fa 100644 --- a/integration-tests/src/main/java/org/infinispan/quarkus/embedded/TestServlet.java +++ b/integration-tests/src/main/java/org/infinispan/quarkus/embedded/TestServlet.java @@ -1,5 +1,7 @@ package org.infinispan.quarkus.embedded; +import static org.infinispan.commons.dataconversion.MediaType.APPLICATION_PROTOSTREAM; + import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -10,6 +12,7 @@ import jakarta.inject.Inject; import jakarta.transaction.Transactional; import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; @@ -17,6 +20,7 @@ import jakarta.ws.rs.core.MediaType; import org.infinispan.Cache; +import org.infinispan.commons.api.CacheContainerAdmin; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.manager.DefaultCacheManager; @@ -117,4 +121,29 @@ public String simpleCluster() throws IOException { } return "Success"; } + + @Path("PROTO/GET/books/{id}") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Book get(@PathParam("id") String id) { + Cache books = emc.administration() + .withFlags(CacheContainerAdmin.AdminFlag.VOLATILE) + .getOrCreateCache("books", new ConfigurationBuilder() + .encoding().mediaType(APPLICATION_PROTOSTREAM) + .build()); + return books.get(id); + } + + @Path("PROTO/POST/books/{id}") + @POST + @Produces(MediaType.TEXT_PLAIN) + public String create(@PathParam("id") String id, Book book) { + Cache books = emc.administration() + .withFlags(CacheContainerAdmin.AdminFlag.VOLATILE) + .getOrCreateCache("books", new ConfigurationBuilder() + .encoding().mediaType(APPLICATION_PROTOSTREAM) + .build()); + books.put(id, book); + return id; + } } diff --git a/integration-tests/src/test/java/org/infinispan/quarkus/embedded/InfinispanEmbeddedFunctionalityTest.java b/integration-tests/src/test/java/org/infinispan/quarkus/embedded/InfinispanEmbeddedFunctionalityTest.java index fb17240..bfeca59 100644 --- a/integration-tests/src/test/java/org/infinispan/quarkus/embedded/InfinispanEmbeddedFunctionalityTest.java +++ b/integration-tests/src/test/java/org/infinispan/quarkus/embedded/InfinispanEmbeddedFunctionalityTest.java @@ -1,5 +1,6 @@ package org.infinispan.quarkus.embedded; +import static io.restassured.RestAssured.given; import static io.restassured.RestAssured.when; import static org.hamcrest.Matchers.is; @@ -9,12 +10,14 @@ import java.nio.file.Paths; import java.util.stream.Stream; +import org.hamcrest.CoreMatchers; import org.infinispan.commons.util.Util; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; import io.quarkus.logging.Log; import io.quarkus.test.junit.QuarkusTest; +import io.restassured.http.ContentType; /** * @author William Burns @@ -101,4 +104,25 @@ public void testSimpleCluster() { Log.info("Running cluster test"); when().get("/test/CLUSTER").then().body(is("Success")); } + + @Test + public void testProtostreamCache() { + Log.info("Protostream marshalling class"); + given() + .contentType(ContentType.JSON) + .body("{\"name\":\"Infinispan Book\",\"author\":\"Jack Nicholson\"}") + .when() + .post("/test/PROTO/POST/books/123") + .then() + .statusCode(200) + .body(CoreMatchers.is("123")); + + given() + .when().get("/test/PROTO/GET/books/123") + .then() + .statusCode(200) + .body(CoreMatchers.is( + "{\"name\":\"Infinispan Book\",\"author\":\"Jack Nicholson\"}")); + + } } diff --git a/pom.xml b/pom.xml index 2dcf02d..dc825da 100644 --- a/pom.xml +++ b/pom.xml @@ -106,7 +106,6 @@ docs - it diff --git a/sample/src/main/java/io/quarkiverse/infinispan/embedded/sample/Greeting.java b/sample/src/main/java/io/quarkiverse/infinispan/embedded/sample/Greeting.java index 97d81dd..0841f58 100644 --- a/sample/src/main/java/io/quarkiverse/infinispan/embedded/sample/Greeting.java +++ b/sample/src/main/java/io/quarkiverse/infinispan/embedded/sample/Greeting.java @@ -1,4 +1,12 @@ package io.quarkiverse.infinispan.embedded.sample; +import org.infinispan.protostream.GeneratedSchema; +import org.infinispan.protostream.annotations.Proto; +import org.infinispan.protostream.annotations.ProtoSchema; + +@Proto public record Greeting(String name, String message) { + @ProtoSchema(includeClasses = { Greeting.class }, schemaPackageName = "io.quarkiverse.infinispan") + public interface GameSchema extends GeneratedSchema { + } } diff --git a/sample/src/main/java/io/quarkiverse/infinispan/embedded/sample/InfinispanGreetingResource.java b/sample/src/main/java/io/quarkiverse/infinispan/embedded/sample/InfinispanGreetingResource.java index abcc97b..e1b5702 100644 --- a/sample/src/main/java/io/quarkiverse/infinispan/embedded/sample/InfinispanGreetingResource.java +++ b/sample/src/main/java/io/quarkiverse/infinispan/embedded/sample/InfinispanGreetingResource.java @@ -9,9 +9,11 @@ import org.infinispan.Cache; import org.infinispan.commons.api.CacheContainerAdmin; +import org.infinispan.commons.dataconversion.MediaType; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; +import org.infinispan.health.ClusterHealth; import org.infinispan.manager.EmbeddedCacheManager; import io.quarkus.logging.Log; @@ -28,6 +30,7 @@ public class InfinispanGreetingResource { @Startup void init() { Configuration config = new ConfigurationBuilder() + .encoding().mediaType(MediaType.APPLICATION_PROTOSTREAM) .clustering().cacheMode(CacheMode.DIST_ASYNC).build(); Log.info("Create mycache with config " + config); cacheManager.administration() @@ -35,6 +38,11 @@ void init() { .getOrCreateCache(CACHE_NAME, config); } + @GET + public ClusterHealth clusterHealth() { + return cacheManager.getHealth().getClusterHealth(); + } + @POST @Path("/{id}") public CompletionStage postGreeting(String id, Greeting greeting) {