From 514fbcbf0e2fb7b543d08c17d542bf0b35d8c138 Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Tue, 3 Jan 2017 23:48:09 +0100 Subject: [PATCH 01/35] upgraded to wildfly-10.1.0.Final, using Weld 3.0.0.Beta1 as a wildfly patch replaced org.jboss.weld.experimental.Priority by javax.annotation.Priority from javax.annotation-api 1.3 upgraded pom.xml, inspired by both javaee7-samples and weld-api-parent 3.0.Beta1 --- README.asciidoc | 12 +- .../cdi/events/priority/GreetingReceiver.java | 34 +++-- .../cdi/events/priority/GreetingTest.java | 13 +- pom.xml | 142 +++++++++++++----- 4 files changed, 138 insertions(+), 63 deletions(-) diff --git a/README.asciidoc b/README.asciidoc index 43d8f64d..febdefd9 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -1,19 +1,21 @@ Java EE 8 Samples ================= -. Download http://download.jboss.org/wildfly/8.2.0.Final/wildfly-8.2.0.Final.zip[WildFly 8.2.0] and unzip -. Download Weld3 Alpha 3 +Only CDI 2.0 related samples are covered by now. + +. Download http://download.jboss.org/wildfly/10.1.0.Final/wildfly-10.1.0.Final.zip[WildFly 10.1] and unzip +. Download Weld 3.0.0.Beta1 as a patch for WildFly 10.1 + [source, text] ---- -curl -L -o weld3-alpha3-patch-wildfly8.2.zip http://sourceforge.net/projects/jboss/files/Weld/3.0.0.Alpha3/wildfly-8.2.0.Final-weld-3.0.0.Alpha3-patch.zip/download +curl -L http://download.jboss.org/weld/3.0.0.Beta1/wildfly-10.1.0.Final-weld-3.0.0.Beta1-patch.zip -o wildfly-10.1.0.Final-weld-3.0.0.Beta1-patch.zip ---- + . Apply the patch + [source, text] ---- -./wildfly-8.2.0.Final/bin/jboss-cli.sh --command="patch apply ./weld3-alpha3-patch-wildfly8.2.zip" +./wildfly-10.1.0.Final/bin/jboss-cli.sh --command="patch apply ./wildfly-10.1.0.Final-weld-3.0.0.Beta1-patch.zip" { "outcome" : "success", "result" : {} @@ -24,7 +26,7 @@ curl -L -o weld3-alpha3-patch-wildfly8.2.zip http://sourceforge.net/projects/jbo + [source, text] ---- -./wildfly-8.2.0.Final/bin/standalone.sh +./wildfly-10.1.0.Final/bin/standalone.sh ---- + . Run tests diff --git a/cdi/events-priority/src/main/java/org/javaee8/cdi/events/priority/GreetingReceiver.java b/cdi/events-priority/src/main/java/org/javaee8/cdi/events/priority/GreetingReceiver.java index 94941cc2..6a5849af 100644 --- a/cdi/events-priority/src/main/java/org/javaee8/cdi/events/priority/GreetingReceiver.java +++ b/cdi/events-priority/src/main/java/org/javaee8/cdi/events/priority/GreetingReceiver.java @@ -1,34 +1,44 @@ package org.javaee8.cdi.events.priority; -import javax.enterprise.context.SessionScoped; +import javax.annotation.Priority; +import javax.enterprise.context.RequestScoped; import javax.enterprise.event.Observes; -import java.io.Serializable; import javax.interceptor.Interceptor; -import org.jboss.weld.experimental.Priority; +import java.io.Serializable; /** + * Using {@link javax.annotation.Priority} annotation to define an order in which observer methods are called.
+ * Observers with smaller priority values are called first. + * * @author Radim Hanus * @author Arun Gupta + * + * @see relevant chapter in cdi-2.0 spec */ -@SessionScoped +@RequestScoped public class GreetingReceiver implements EventReceiver, Serializable { private String greet = "Willkommen"; /** - * Lower priority - * @param greet + * Higher priority */ - void receive(@Observes @Priority(Interceptor.Priority.APPLICATION + 200) String greet) { - this.greet += greet + "2"; + void receiveFirst(@Observes @Priority(Interceptor.Priority.APPLICATION) String greet) { + this.greet = greet + "First "; } /** - * Higher priority - * @param greet + * Middle priority, uses default priority Interceptor.Priority.APPLICATION + 500 + */ + void receiveSecond(@Observes String greet) { + this.greet += greet + "Second "; + } + + /** + * Lower priority */ - void receive2(@Observes @Priority(Interceptor.Priority.APPLICATION) String greet) { - this.greet = greet + "1"; + void receiveThird(@Observes @Priority(Interceptor.Priority.APPLICATION + 1000) String greet) { + this.greet += greet + "Third"; } @Override diff --git a/cdi/events-priority/src/test/java/org/javaee8/cdi/events/priority/GreetingTest.java b/cdi/events-priority/src/test/java/org/javaee8/cdi/events/priority/GreetingTest.java index 45780880..74f21a9c 100644 --- a/cdi/events-priority/src/test/java/org/javaee8/cdi/events/priority/GreetingTest.java +++ b/cdi/events-priority/src/test/java/org/javaee8/cdi/events/priority/GreetingTest.java @@ -1,9 +1,5 @@ package org.javaee8.cdi.events.priority; -import org.javaee8.cdi.events.priority.EventSender; -import org.javaee8.cdi.events.priority.GreetingSender; -import org.javaee8.cdi.events.priority.GreetingReceiver; -import org.javaee8.cdi.events.priority.EventReceiver; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.Archive; @@ -15,8 +11,6 @@ import javax.inject.Inject; import static org.hamcrest.CoreMatchers.instanceOf; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; @@ -41,17 +35,14 @@ public static Archive deploy() { @Test public void test() throws Exception { - assertThat(sender, is(notNullValue())); assertThat(sender, instanceOf(GreetingSender.class)); - - assertThat(receiver, is(notNullValue())); assertThat(receiver, instanceOf(GreetingReceiver.class)); // default greet assertEquals("Willkommen", receiver.getGreet()); // send a new greet - sender.send("Welcome"); + sender.send("Welcome:"); // receiver must not belongs to the dependent pseudo-scope since we are checking the result - assertEquals("Welcome1Welcome2", receiver.getGreet()); + assertEquals("Welcome:First Welcome:Second Welcome:Third", receiver.getGreet()); } } diff --git a/pom.xml b/pom.xml index 541a37c9..8f145481 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,8 @@ 1.8 3.0.0 + 1.8 + 1.8 UTF-8 1.3.1 @@ -23,6 +25,7 @@ cdi + @@ -30,7 +33,7 @@ org.jboss.arquillian arquillian-bom - 1.1.5.Final + 1.1.11.Final import pom @@ -38,18 +41,54 @@ + + + + + + javax.inject + javax.inject + 1 + provided + + + org.jboss.spec.javax.interceptor + jboss-interceptors-api_1.2_spec + 1.0.0.Final + provided + + + javax.annotation + javax.annotation-api + 1.3 provided - - org.jboss.weld - weld-api - 3.0.Alpha3 + javax.enterprise + cdi-api + 2.0.Beta1 provided + + + javax.el + javax.el-api + + + javax.interceptor + javax.interceptor-api + + @@ -57,9 +96,22 @@ junit junit - 4.11 + 4.12 test + + org.hamcrest + hamcrest-core + 1.3 + test + + + org.hamcrest + hamcrest-library + 1.3 + test + + org.jboss.arquillian.junit arquillian-junit-container @@ -89,26 +141,16 @@ org.apache.maven.plugins maven-compiler-plugin - 3.1 - - - org.apache.maven.plugins - maven-surefire-plugin - 2.17 - - - default-test - test - - test - - - + 3.5.1 + + ${java.min.version} + ${java.min.version} + org.apache.maven.plugins maven-surefire-report-plugin - 2.17 + 2.19.1 true true @@ -117,18 +159,24 @@ org.apache.maven.plugins maven-war-plugin - 2.5 + 3.0.0 + + true + false + maven-enforcer-plugin - At least Maven in version ${maven.min.version} is required. + At least Maven in version ${maven.min.version} is + required. ${maven.min.version} - At least a JDK in version ${java.min.version} is required. + At least a JDK in version ${java.min.version} is + required. ${java.min.version} @@ -163,7 +211,7 @@ org.apache.maven.plugins maven-surefire-report-plugin - 2.18 + 2.19.1 true true @@ -180,34 +228,58 @@ true + + + + + + + + org.jboss.logging + jboss-logging + 3.3.0.Final + test + + + + +--> + + - org.wildfly + org.wildfly.arquillian wildfly-arquillian-container-remote - 8.2.0.Final + 2.0.0.Final test From 56bedc86b20661aaae50a7007fa2d55d1f57f1ed Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Tue, 10 Jan 2017 11:37:23 +0100 Subject: [PATCH 02/35] added both jcache and jsonb samples --- README.asciidoc | 24 ++++++- .../src/test/resources/beans.xml | 5 +- cdi/pom.xml | 7 +- jcache/cache-put/pom.xml | 12 ++++ .../jcache/annotation/CachePutService.java | 20 ++++++ .../annotation/CachePutServiceTest.java | 38 +++++++++++ jcache/cache-put/src/test/resources/beans.xml | 16 +++++ .../resources/jboss-deployment-structure.xml | 10 +++ jcache/cache-result/pom.xml | 12 ++++ .../jcache/annotation/NamedCacheService.java | 26 +++++++ .../jcache/annotation/SimpleCacheService.java | 17 +++++ .../annotation/NamedCacheServiceTest.java | 41 ++++++++++++ .../annotation/SimpleCacheServiceTest.java | 37 ++++++++++ .../cache-result/src/test/resources/beans.xml | 16 +++++ .../resources/jboss-deployment-structure.xml | 10 +++ jcache/pom.xml | 50 ++++++++++++++ jsonb/mapping-object/pom.xml | 12 ++++ .../java/org/javaee8/jsonb/mapping/Dog.java | 67 +++++++++++++++++++ .../org/javaee8/jsonb/mapping/DogTest.java | 48 +++++++++++++ jsonb/pom.xml | 60 +++++++++++++++++ pom.xml | 33 +++++---- 21 files changed, 541 insertions(+), 20 deletions(-) create mode 100644 jcache/cache-put/pom.xml create mode 100644 jcache/cache-put/src/main/java/org/javaee8/jcache/annotation/CachePutService.java create mode 100644 jcache/cache-put/src/test/java/org/javaee8/jcache/annotation/CachePutServiceTest.java create mode 100644 jcache/cache-put/src/test/resources/beans.xml create mode 100644 jcache/cache-put/src/test/resources/jboss-deployment-structure.xml create mode 100644 jcache/cache-result/pom.xml create mode 100644 jcache/cache-result/src/main/java/org/javaee8/jcache/annotation/NamedCacheService.java create mode 100644 jcache/cache-result/src/main/java/org/javaee8/jcache/annotation/SimpleCacheService.java create mode 100644 jcache/cache-result/src/test/java/org/javaee8/jcache/annotation/NamedCacheServiceTest.java create mode 100644 jcache/cache-result/src/test/java/org/javaee8/jcache/annotation/SimpleCacheServiceTest.java create mode 100644 jcache/cache-result/src/test/resources/beans.xml create mode 100644 jcache/cache-result/src/test/resources/jboss-deployment-structure.xml create mode 100644 jcache/pom.xml create mode 100644 jsonb/mapping-object/pom.xml create mode 100644 jsonb/mapping-object/src/main/java/org/javaee8/jsonb/mapping/Dog.java create mode 100644 jsonb/mapping-object/src/test/java/org/javaee8/jsonb/mapping/DogTest.java create mode 100644 jsonb/pom.xml diff --git a/README.asciidoc b/README.asciidoc index febdefd9..8c8b2074 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -1,8 +1,13 @@ Java EE 8 Samples -================= - -Only CDI 2.0 related samples are covered by now. +----------------- +Covered JSRs +~~~~~~~~~~~~ +* JSR 365: CDI 2.0 +* JSR 107: JCACHE +* JSR 367: JSON-B +Running the tests +~~~~~~~~~~~~~~~~~ . Download http://download.jboss.org/wildfly/10.1.0.Final/wildfly-10.1.0.Final.zip[WildFly 10.1] and unzip . Download Weld 3.0.0.Beta1 as a patch for WildFly 10.1 + @@ -22,6 +27,19 @@ curl -L http://download.jboss.org/weld/3.0.0.Beta1/wildfly-10.1.0.Final-weld-3.0 } ---- + +. Download Infinispan 9.0.0.Beta1 packaged modules for deploying in WildFly ++ +[source, text] +---- +curl -L http://downloads.jboss.org/infinispan/9.0.0.Beta1/infinispan-wildfly-modules-9.0.0.Beta1.zip -o infinispan-wildfly-modules-9.0.0.Beta1.zip +---- +. Unzip and copy modules ++ +[source, text] +---- +unzip ./infinispan-wildfly-modules-9.0.0.Beta1.zip -d /wildfly-10.1.0.Final/modules +---- ++ . Start WildFly + [source, text] diff --git a/cdi/events-priority/src/test/resources/beans.xml b/cdi/events-priority/src/test/resources/beans.xml index aa8e5774..dc8b6e83 100644 --- a/cdi/events-priority/src/test/resources/beans.xml +++ b/cdi/events-priority/src/test/resources/beans.xml @@ -1,8 +1,7 @@ - - diff --git a/cdi/pom.xml b/cdi/pom.xml index fb364e1a..fa3d8696 100644 --- a/cdi/pom.xml +++ b/cdi/pom.xml @@ -1,6 +1,8 @@ - + 4.0.0 + org.javaee8 javaee8-samples @@ -12,9 +14,10 @@ cdi-samples 1.0-SNAPSHOT pom - Java EE 8 CDI Samples + JSR 365: CDI 2.0 Samples events-priority + diff --git a/jcache/cache-put/pom.xml b/jcache/cache-put/pom.xml new file mode 100644 index 00000000..99a45cb1 --- /dev/null +++ b/jcache/cache-put/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + org.javaee8.jcache + jcache-samples + 1.0-SNAPSHOT + ../pom.xml + + + cache-put + diff --git a/jcache/cache-put/src/main/java/org/javaee8/jcache/annotation/CachePutService.java b/jcache/cache-put/src/main/java/org/javaee8/jcache/annotation/CachePutService.java new file mode 100644 index 00000000..065918d9 --- /dev/null +++ b/jcache/cache-put/src/main/java/org/javaee8/jcache/annotation/CachePutService.java @@ -0,0 +1,20 @@ +package org.javaee8.jcache.annotation; + +import javax.cache.annotation.CachePut; +import javax.cache.annotation.CacheResult; +import javax.cache.annotation.CacheValue; + + +/** + * @author Radim Hanus + */ +public class CachePutService { + @CachePut(cacheName = "cache.put.sample") + public void create(String id, @CacheValue String data) { + } + + @CacheResult(cacheName = "cache.put.sample") + public String find(String id) { + return null; + } +} diff --git a/jcache/cache-put/src/test/java/org/javaee8/jcache/annotation/CachePutServiceTest.java b/jcache/cache-put/src/test/java/org/javaee8/jcache/annotation/CachePutServiceTest.java new file mode 100644 index 00000000..78ab8411 --- /dev/null +++ b/jcache/cache-put/src/test/java/org/javaee8/jcache/annotation/CachePutServiceTest.java @@ -0,0 +1,38 @@ +package org.javaee8.jcache.annotation; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; + +import static org.junit.Assert.*; + + +@RunWith(Arquillian.class) +public class CachePutServiceTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(CachePutService.class) + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + + @Inject + private CachePutService service; + + @Test + public void test() throws Exception { + service.create("ticket_1", "JCACHE"); + + assertNotNull(service.find("ticket_1")); + assertEquals("JCACHE", service.find("ticket_1")); + + assertNull(service.find("ticket_2")); + } +} diff --git a/jcache/cache-put/src/test/resources/beans.xml b/jcache/cache-put/src/test/resources/beans.xml new file mode 100644 index 00000000..a57407b9 --- /dev/null +++ b/jcache/cache-put/src/test/resources/beans.xml @@ -0,0 +1,16 @@ + + + + + + org.infinispan.jcache.annotation.InjectedCacheResultInterceptor + org.infinispan.jcache.annotation.InjectedCachePutInterceptor + org.infinispan.jcache.annotation.InjectedCacheRemoveEntryInterceptor + org.infinispan.jcache.annotation.InjectedCacheRemoveAllInterceptor + + + diff --git a/jcache/cache-put/src/test/resources/jboss-deployment-structure.xml b/jcache/cache-put/src/test/resources/jboss-deployment-structure.xml new file mode 100644 index 00000000..3171299a --- /dev/null +++ b/jcache/cache-put/src/test/resources/jboss-deployment-structure.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/jcache/cache-result/pom.xml b/jcache/cache-result/pom.xml new file mode 100644 index 00000000..c3b72955 --- /dev/null +++ b/jcache/cache-result/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + org.javaee8.jcache + jcache-samples + 1.0-SNAPSHOT + ../pom.xml + + + cache-result + diff --git a/jcache/cache-result/src/main/java/org/javaee8/jcache/annotation/NamedCacheService.java b/jcache/cache-result/src/main/java/org/javaee8/jcache/annotation/NamedCacheService.java new file mode 100644 index 00000000..5ca8eb18 --- /dev/null +++ b/jcache/cache-result/src/main/java/org/javaee8/jcache/annotation/NamedCacheService.java @@ -0,0 +1,26 @@ +package org.javaee8.jcache.annotation; + +import javax.cache.annotation.CacheDefaults; +import javax.cache.annotation.CacheResult; + + +/** + * @author Radim Hanus + */ +@CacheDefaults(cacheName = "org.javaee8.jcache.annotation.DefaultCache") +public class NamedCacheService { + private int nameCallCount = 0; + private int dataCallCount = 0; + + @CacheResult + public String getName(String name) { + nameCallCount++; + return name + "_" + nameCallCount; + } + + @CacheResult(cacheName = "org.javaee8.jcache.annotation.DataCache") + public String getData(String name) { + dataCallCount++; + return name + "_data_" + dataCallCount; + } +} diff --git a/jcache/cache-result/src/main/java/org/javaee8/jcache/annotation/SimpleCacheService.java b/jcache/cache-result/src/main/java/org/javaee8/jcache/annotation/SimpleCacheService.java new file mode 100644 index 00000000..b04f99eb --- /dev/null +++ b/jcache/cache-result/src/main/java/org/javaee8/jcache/annotation/SimpleCacheService.java @@ -0,0 +1,17 @@ +package org.javaee8.jcache.annotation; + +import javax.cache.annotation.CacheResult; + + +/** + * @author Radim Hanus + */ +public class SimpleCacheService { + private int callCount = 0; + + @CacheResult + public String getName(String name) { + callCount++; + return name + "_" + callCount; + } +} diff --git a/jcache/cache-result/src/test/java/org/javaee8/jcache/annotation/NamedCacheServiceTest.java b/jcache/cache-result/src/test/java/org/javaee8/jcache/annotation/NamedCacheServiceTest.java new file mode 100644 index 00000000..dc60e620 --- /dev/null +++ b/jcache/cache-result/src/test/java/org/javaee8/jcache/annotation/NamedCacheServiceTest.java @@ -0,0 +1,41 @@ +package org.javaee8.jcache.annotation; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; + +import static org.junit.Assert.assertEquals; + + +@RunWith(Arquillian.class) +public class NamedCacheServiceTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(NamedCacheService.class) + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + + @Inject + private NamedCacheService service; + + @Test + public void test() throws Exception { + assertEquals("Dude_1", service.getName("Dude")); + assertEquals("Dude_data_1", service.getData("Dude")); + assertEquals("Dude_1", service.getName("Dude")); + assertEquals("Dude_data_1", service.getData("Dude")); + + assertEquals("Joe_2", service.getName("Joe")); + assertEquals("Joe_data_2", service.getData("Joe")); + assertEquals("Joe_2", service.getName("Joe")); + assertEquals("Joe_data_2", service.getData("Joe")); + } +} diff --git a/jcache/cache-result/src/test/java/org/javaee8/jcache/annotation/SimpleCacheServiceTest.java b/jcache/cache-result/src/test/java/org/javaee8/jcache/annotation/SimpleCacheServiceTest.java new file mode 100644 index 00000000..1bd170a4 --- /dev/null +++ b/jcache/cache-result/src/test/java/org/javaee8/jcache/annotation/SimpleCacheServiceTest.java @@ -0,0 +1,37 @@ +package org.javaee8.jcache.annotation; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; + +import static org.junit.Assert.assertEquals; + + +@RunWith(Arquillian.class) +public class SimpleCacheServiceTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(SimpleCacheService.class) + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + + @Inject + private SimpleCacheService service; + + @Test + public void test() throws Exception { + assertEquals("Dude_1", service.getName("Dude")); + assertEquals("Dude_1", service.getName("Dude")); + + assertEquals("Joe_2", service.getName("Joe")); + assertEquals("Joe_2", service.getName("Joe")); + } +} diff --git a/jcache/cache-result/src/test/resources/beans.xml b/jcache/cache-result/src/test/resources/beans.xml new file mode 100644 index 00000000..a57407b9 --- /dev/null +++ b/jcache/cache-result/src/test/resources/beans.xml @@ -0,0 +1,16 @@ + + + + + + org.infinispan.jcache.annotation.InjectedCacheResultInterceptor + org.infinispan.jcache.annotation.InjectedCachePutInterceptor + org.infinispan.jcache.annotation.InjectedCacheRemoveEntryInterceptor + org.infinispan.jcache.annotation.InjectedCacheRemoveAllInterceptor + + + diff --git a/jcache/cache-result/src/test/resources/jboss-deployment-structure.xml b/jcache/cache-result/src/test/resources/jboss-deployment-structure.xml new file mode 100644 index 00000000..3171299a --- /dev/null +++ b/jcache/cache-result/src/test/resources/jboss-deployment-structure.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/jcache/pom.xml b/jcache/pom.xml new file mode 100644 index 00000000..ac2ce2f9 --- /dev/null +++ b/jcache/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + + org.javaee8 + javaee8-samples + 1.0-SNAPSHOT + ../pom.xml + + + org.javaee8.jcache + jcache-samples + 1.0-SNAPSHOT + pom + JSR 107: JCACHE Samples + + + + + + + cache-put + cache-result + + + + + diff --git a/jsonb/mapping-object/pom.xml b/jsonb/mapping-object/pom.xml new file mode 100644 index 00000000..55711290 --- /dev/null +++ b/jsonb/mapping-object/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + org.javaee8.json-b + json-b-samples + 1.0-SNAPSHOT + ../pom.xml + + + mapping-object + diff --git a/jsonb/mapping-object/src/main/java/org/javaee8/jsonb/mapping/Dog.java b/jsonb/mapping-object/src/main/java/org/javaee8/jsonb/mapping/Dog.java new file mode 100644 index 00000000..7b41de5c --- /dev/null +++ b/jsonb/mapping-object/src/main/java/org/javaee8/jsonb/mapping/Dog.java @@ -0,0 +1,67 @@ +package org.javaee8.jsonb.mapping; + +import java.util.Objects; + + +public class Dog { + private String name; + private int age; + private boolean bitable; + + public Dog() { + } + + public Dog(String name, int age, boolean bitable) { + this.name = name; + this.age = age; + this.bitable = bitable; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Dog dog = (Dog) o; + return age == dog.age && + bitable == dog.bitable && + Objects.equals(name, dog.name); + } + + @Override + public int hashCode() { + return Objects.hash(name, age, bitable); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public boolean isBitable() { + return bitable; + } + + public void setBitable(boolean bitable) { + this.bitable = bitable; + } + + @Override + public String toString() { + return "Dog{" + + "name='" + name + '\'' + + ", age=" + age + + ", bitable=" + bitable + + '}'; + } +} diff --git a/jsonb/mapping-object/src/test/java/org/javaee8/jsonb/mapping/DogTest.java b/jsonb/mapping-object/src/test/java/org/javaee8/jsonb/mapping/DogTest.java new file mode 100644 index 00000000..a59bd616 --- /dev/null +++ b/jsonb/mapping-object/src/test/java/org/javaee8/jsonb/mapping/DogTest.java @@ -0,0 +1,48 @@ +package org.javaee8.jsonb.mapping; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.json.bind.Jsonb; +import javax.json.bind.JsonbBuilder; +import java.io.File; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; + + +@RunWith(Arquillian.class) +public class DogTest { + @Deployment + public static Archive deploy() { + File[] files = Maven.resolver().loadPomFromFile("pom.xml").importRuntimeDependencies() + .resolve().withoutTransitivity().asFile(); + return ShrinkWrap.create(WebArchive.class) + .addClasses(Dog.class) + .addAsLibraries(files); + } + + @Test + public void test() throws Exception { + // json text of dog instance + String jsonDog = "{\"name\":\"Falco\",\"age\":4,\"bitable\":false}"; + // dog instance + Dog dog = new Dog("Falco", 4, false); + + // create Jsonb and serialize + Jsonb jsonb = JsonbBuilder.create(); + + // deserialize test + Dog deserializedDog = jsonb.fromJson(jsonDog, Dog.class); + assertThat(dog, equalTo(deserializedDog)); + // serialization test + String serializedDog = jsonb.toJson(dog); + assertThat(deserializedDog, equalTo(jsonb.fromJson(serializedDog, Dog.class))); + } +} diff --git a/jsonb/pom.xml b/jsonb/pom.xml new file mode 100644 index 00000000..08b9e53d --- /dev/null +++ b/jsonb/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + + org.javaee8 + javaee8-samples + 1.0-SNAPSHOT + ../pom.xml + + + org.javaee8.json-b + json-b-samples + 1.0-SNAPSHOT + pom + JSR 367: JSON-B Samples + + + 1.0-SNAPSHOT + 1.0-SNAPSHOT + 1.1.0-SNAPSHOT + + + + mapping-object + + + + + java.net-Public + Maven Java Net Snapshots and Releases + https://maven.java.net/content/groups/public/ + + + yasson-snapshots + Yasson Snapshots repository + https://repo.eclipse.org/content/repositories/yasson-snapshots + + + + + + javax.json.bind + javax.json.bind-api + ${version.javax.json.bind-api} + + + org.eclipse + yasson + ${version.yasson} + + + org.glassfish + javax.json + ${version.glassfish.javax.json} + + + + diff --git a/pom.xml b/pom.xml index 8f145481..e2dc1875 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,8 @@ cdi - + jcache + jsonb @@ -33,7 +34,7 @@ org.jboss.arquillian arquillian-bom - 1.1.11.Final + 1.1.12.Final import pom @@ -41,9 +42,7 @@ - + - + javax.inject javax.inject @@ -63,17 +60,22 @@ provided - org.jboss.spec.javax.interceptor - jboss-interceptors-api_1.2_spec - 1.0.0.Final + javax.interceptor + javax.interceptor-api + 1.2 provided + + javax.annotation javax.annotation-api 1.3 provided + + + javax.enterprise cdi-api @@ -90,9 +92,16 @@ + + + + javax.cache + cache-api + 1.0.0 + provided + - junit junit From fc532747174c433223bb8b2cdb7d9d8dff731679 Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Tue, 10 Jan 2017 15:14:24 +0100 Subject: [PATCH 03/35] added jcache samples: cache-basics, cache-remove & cache-remove-all --- jcache/cache-basics/pom.xml | 12 +++++ .../jcache/basics/SimpleDataService.java | 42 +++++++++++++++++ .../jcache/basics/SimpleDataServiceTest.java | 40 +++++++++++++++++ .../cache-basics/src/test/resources/beans.xml | 9 ++++ .../resources/jboss-deployment-structure.xml | 10 +++++ .../jcache/annotation/CachePutService.java | 6 ++- jcache/cache-remove-all/pom.xml | 12 +++++ .../annotation/CacheRemoveAllService.java | 29 ++++++++++++ .../annotation/CacheRemoveAllServiceTest.java | 45 +++++++++++++++++++ .../src/test/resources/beans.xml | 16 +++++++ .../resources/jboss-deployment-structure.xml | 10 +++++ jcache/cache-remove/pom.xml | 12 +++++ .../jcache/annotation/CacheRemoveService.java | 24 ++++++++++ .../annotation/CacheRemoveServiceTest.java | 37 +++++++++++++++ .../cache-remove/src/test/resources/beans.xml | 16 +++++++ .../resources/jboss-deployment-structure.xml | 10 +++++ .../jcache/annotation/NamedCacheService.java | 4 +- jcache/pom.xml | 5 ++- 18 files changed, 334 insertions(+), 5 deletions(-) create mode 100644 jcache/cache-basics/pom.xml create mode 100644 jcache/cache-basics/src/main/java/org/javaee8/jcache/basics/SimpleDataService.java create mode 100644 jcache/cache-basics/src/test/java/org/javaee8/jcache/basics/SimpleDataServiceTest.java create mode 100644 jcache/cache-basics/src/test/resources/beans.xml create mode 100644 jcache/cache-basics/src/test/resources/jboss-deployment-structure.xml create mode 100644 jcache/cache-remove-all/pom.xml create mode 100644 jcache/cache-remove-all/src/main/java/org/javaee8/jcache/annotation/CacheRemoveAllService.java create mode 100644 jcache/cache-remove-all/src/test/java/org/javaee8/jcache/annotation/CacheRemoveAllServiceTest.java create mode 100644 jcache/cache-remove-all/src/test/resources/beans.xml create mode 100644 jcache/cache-remove-all/src/test/resources/jboss-deployment-structure.xml create mode 100644 jcache/cache-remove/pom.xml create mode 100644 jcache/cache-remove/src/main/java/org/javaee8/jcache/annotation/CacheRemoveService.java create mode 100644 jcache/cache-remove/src/test/java/org/javaee8/jcache/annotation/CacheRemoveServiceTest.java create mode 100644 jcache/cache-remove/src/test/resources/beans.xml create mode 100644 jcache/cache-remove/src/test/resources/jboss-deployment-structure.xml diff --git a/jcache/cache-basics/pom.xml b/jcache/cache-basics/pom.xml new file mode 100644 index 00000000..f927b473 --- /dev/null +++ b/jcache/cache-basics/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + org.javaee8.jcache + jcache-samples + 1.0-SNAPSHOT + ../pom.xml + + + cache-basics + diff --git a/jcache/cache-basics/src/main/java/org/javaee8/jcache/basics/SimpleDataService.java b/jcache/cache-basics/src/main/java/org/javaee8/jcache/basics/SimpleDataService.java new file mode 100644 index 00000000..f5964fe8 --- /dev/null +++ b/jcache/cache-basics/src/main/java/org/javaee8/jcache/basics/SimpleDataService.java @@ -0,0 +1,42 @@ +package org.javaee8.jcache.basics; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.cache.Cache; +import javax.cache.CacheManager; +import javax.cache.Caching; +import javax.cache.configuration.MutableConfiguration; +import javax.cache.spi.CachingProvider; + + +/** + * @author Radim Hanus + */ +public class SimpleDataService { + private Cache cache; + + @PostConstruct + void init() { + CachingProvider cachingProvider = Caching.getCachingProvider(); + CacheManager cacheManager = cachingProvider.getCacheManager(); + MutableConfiguration config = new MutableConfiguration<>(); + cache = cacheManager.createCache("cache.default", config); + } + + @PreDestroy + void destroy() { + cache.close(); + } + + public void put(String key, String value) { + cache.put(key, value); + } + + public String get(String key) { + return cache.get(key); + } + + public void remove(String key) { + cache.remove(key); + } +} diff --git a/jcache/cache-basics/src/test/java/org/javaee8/jcache/basics/SimpleDataServiceTest.java b/jcache/cache-basics/src/test/java/org/javaee8/jcache/basics/SimpleDataServiceTest.java new file mode 100644 index 00000000..d5ce27da --- /dev/null +++ b/jcache/cache-basics/src/test/java/org/javaee8/jcache/basics/SimpleDataServiceTest.java @@ -0,0 +1,40 @@ +package org.javaee8.jcache.basics; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + + +@RunWith(Arquillian.class) +public class SimpleDataServiceTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(SimpleDataService.class) + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + + @Inject + private SimpleDataService service; + + @Test + public void test() throws Exception { + assertNull(service.get("Dude")); + + service.put("Dude", "White Russian"); + assertEquals("White Russian", service.get("Dude")); + + service.remove("Dude"); + assertNull(service.get("Dude")); + } +} diff --git a/jcache/cache-basics/src/test/resources/beans.xml b/jcache/cache-basics/src/test/resources/beans.xml new file mode 100644 index 00000000..ae366cab --- /dev/null +++ b/jcache/cache-basics/src/test/resources/beans.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/jcache/cache-basics/src/test/resources/jboss-deployment-structure.xml b/jcache/cache-basics/src/test/resources/jboss-deployment-structure.xml new file mode 100644 index 00000000..3171299a --- /dev/null +++ b/jcache/cache-basics/src/test/resources/jboss-deployment-structure.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/jcache/cache-put/src/main/java/org/javaee8/jcache/annotation/CachePutService.java b/jcache/cache-put/src/main/java/org/javaee8/jcache/annotation/CachePutService.java index 065918d9..525cc665 100644 --- a/jcache/cache-put/src/main/java/org/javaee8/jcache/annotation/CachePutService.java +++ b/jcache/cache-put/src/main/java/org/javaee8/jcache/annotation/CachePutService.java @@ -1,5 +1,6 @@ package org.javaee8.jcache.annotation; +import javax.cache.annotation.CacheDefaults; import javax.cache.annotation.CachePut; import javax.cache.annotation.CacheResult; import javax.cache.annotation.CacheValue; @@ -8,12 +9,13 @@ /** * @author Radim Hanus */ +@CacheDefaults(cacheName = "cache.put.default") public class CachePutService { - @CachePut(cacheName = "cache.put.sample") + @CachePut public void create(String id, @CacheValue String data) { } - @CacheResult(cacheName = "cache.put.sample") + @CacheResult public String find(String id) { return null; } diff --git a/jcache/cache-remove-all/pom.xml b/jcache/cache-remove-all/pom.xml new file mode 100644 index 00000000..604c6410 --- /dev/null +++ b/jcache/cache-remove-all/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + org.javaee8.jcache + jcache-samples + 1.0-SNAPSHOT + ../pom.xml + + + cache-remove-all + diff --git a/jcache/cache-remove-all/src/main/java/org/javaee8/jcache/annotation/CacheRemoveAllService.java b/jcache/cache-remove-all/src/main/java/org/javaee8/jcache/annotation/CacheRemoveAllService.java new file mode 100644 index 00000000..779580c5 --- /dev/null +++ b/jcache/cache-remove-all/src/main/java/org/javaee8/jcache/annotation/CacheRemoveAllService.java @@ -0,0 +1,29 @@ +package org.javaee8.jcache.annotation; + +import javax.cache.annotation.CacheDefaults; +import javax.cache.annotation.CacheRemove; +import javax.cache.annotation.CacheRemoveAll; +import javax.cache.annotation.CacheResult; + + +/** + * @author Radim Hanus + */ +@CacheDefaults(cacheName = "cache.default") +public class CacheRemoveAllService { + private int callCount = 0; + + @CacheResult + public String find(String key) { + callCount++; + return key + "_" + callCount; + } + + @CacheRemove + public void delete(String key) { + } + + @CacheRemoveAll + public void deleteAll() { + } +} diff --git a/jcache/cache-remove-all/src/test/java/org/javaee8/jcache/annotation/CacheRemoveAllServiceTest.java b/jcache/cache-remove-all/src/test/java/org/javaee8/jcache/annotation/CacheRemoveAllServiceTest.java new file mode 100644 index 00000000..56cf37ff --- /dev/null +++ b/jcache/cache-remove-all/src/test/java/org/javaee8/jcache/annotation/CacheRemoveAllServiceTest.java @@ -0,0 +1,45 @@ +package org.javaee8.jcache.annotation; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; + +import static org.junit.Assert.assertEquals; + + +@RunWith(Arquillian.class) +public class CacheRemoveAllServiceTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(CacheRemoveAllService.class) + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + + @Inject + private CacheRemoveAllService service; + + @Test + public void test() throws Exception { + assertEquals("Dude_1", service.find("Dude")); + assertEquals("Joe_2", service.find("Joe")); + + assertEquals("Dude_1", service.find("Dude")); + assertEquals("Joe_2", service.find("Joe")); + + service.delete("Dude"); + assertEquals("Dude_3", service.find("Dude")); + assertEquals("Joe_2", service.find("Joe")); + + service.deleteAll(); + assertEquals("Dude_4", service.find("Dude")); + assertEquals("Joe_5", service.find("Joe")); + } +} diff --git a/jcache/cache-remove-all/src/test/resources/beans.xml b/jcache/cache-remove-all/src/test/resources/beans.xml new file mode 100644 index 00000000..a57407b9 --- /dev/null +++ b/jcache/cache-remove-all/src/test/resources/beans.xml @@ -0,0 +1,16 @@ + + + + + + org.infinispan.jcache.annotation.InjectedCacheResultInterceptor + org.infinispan.jcache.annotation.InjectedCachePutInterceptor + org.infinispan.jcache.annotation.InjectedCacheRemoveEntryInterceptor + org.infinispan.jcache.annotation.InjectedCacheRemoveAllInterceptor + + + diff --git a/jcache/cache-remove-all/src/test/resources/jboss-deployment-structure.xml b/jcache/cache-remove-all/src/test/resources/jboss-deployment-structure.xml new file mode 100644 index 00000000..3171299a --- /dev/null +++ b/jcache/cache-remove-all/src/test/resources/jboss-deployment-structure.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/jcache/cache-remove/pom.xml b/jcache/cache-remove/pom.xml new file mode 100644 index 00000000..9b2bdb9b --- /dev/null +++ b/jcache/cache-remove/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + org.javaee8.jcache + jcache-samples + 1.0-SNAPSHOT + ../pom.xml + + + cache-remove + diff --git a/jcache/cache-remove/src/main/java/org/javaee8/jcache/annotation/CacheRemoveService.java b/jcache/cache-remove/src/main/java/org/javaee8/jcache/annotation/CacheRemoveService.java new file mode 100644 index 00000000..e31cceb4 --- /dev/null +++ b/jcache/cache-remove/src/main/java/org/javaee8/jcache/annotation/CacheRemoveService.java @@ -0,0 +1,24 @@ +package org.javaee8.jcache.annotation; + +import javax.cache.annotation.CacheDefaults; +import javax.cache.annotation.CacheRemove; +import javax.cache.annotation.CacheResult; + + +/** + * @author Radim Hanus + */ +@CacheDefaults(cacheName = "cache.remove.default") +public class CacheRemoveService { + private int callCount = 0; + + @CacheResult + public String find(String key) { + callCount++; + return key + "_" + callCount; + } + + @CacheRemove + public void delete(String key) { + } +} diff --git a/jcache/cache-remove/src/test/java/org/javaee8/jcache/annotation/CacheRemoveServiceTest.java b/jcache/cache-remove/src/test/java/org/javaee8/jcache/annotation/CacheRemoveServiceTest.java new file mode 100644 index 00000000..be795727 --- /dev/null +++ b/jcache/cache-remove/src/test/java/org/javaee8/jcache/annotation/CacheRemoveServiceTest.java @@ -0,0 +1,37 @@ +package org.javaee8.jcache.annotation; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; + +import static org.junit.Assert.assertEquals; + + +@RunWith(Arquillian.class) +public class CacheRemoveServiceTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(CacheRemoveService.class) + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + + @Inject + private CacheRemoveService service; + + @Test + public void test() throws Exception { + assertEquals("Dude_1", service.find("Dude")); + assertEquals("Dude_1", service.find("Dude")); + + service.delete("Dude"); + assertEquals("Dude_2", service.find("Dude")); + } +} diff --git a/jcache/cache-remove/src/test/resources/beans.xml b/jcache/cache-remove/src/test/resources/beans.xml new file mode 100644 index 00000000..a57407b9 --- /dev/null +++ b/jcache/cache-remove/src/test/resources/beans.xml @@ -0,0 +1,16 @@ + + + + + + org.infinispan.jcache.annotation.InjectedCacheResultInterceptor + org.infinispan.jcache.annotation.InjectedCachePutInterceptor + org.infinispan.jcache.annotation.InjectedCacheRemoveEntryInterceptor + org.infinispan.jcache.annotation.InjectedCacheRemoveAllInterceptor + + + diff --git a/jcache/cache-remove/src/test/resources/jboss-deployment-structure.xml b/jcache/cache-remove/src/test/resources/jboss-deployment-structure.xml new file mode 100644 index 00000000..3171299a --- /dev/null +++ b/jcache/cache-remove/src/test/resources/jboss-deployment-structure.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/jcache/cache-result/src/main/java/org/javaee8/jcache/annotation/NamedCacheService.java b/jcache/cache-result/src/main/java/org/javaee8/jcache/annotation/NamedCacheService.java index 5ca8eb18..70db0287 100644 --- a/jcache/cache-result/src/main/java/org/javaee8/jcache/annotation/NamedCacheService.java +++ b/jcache/cache-result/src/main/java/org/javaee8/jcache/annotation/NamedCacheService.java @@ -7,7 +7,7 @@ /** * @author Radim Hanus */ -@CacheDefaults(cacheName = "org.javaee8.jcache.annotation.DefaultCache") +@CacheDefaults(cacheName = "cache.default") public class NamedCacheService { private int nameCallCount = 0; private int dataCallCount = 0; @@ -18,7 +18,7 @@ public String getName(String name) { return name + "_" + nameCallCount; } - @CacheResult(cacheName = "org.javaee8.jcache.annotation.DataCache") + @CacheResult(cacheName = "cache.data") public String getData(String name) { dataCallCount++; return name + "_data_" + dataCallCount; diff --git a/jcache/pom.xml b/jcache/pom.xml index ac2ce2f9..f32ee0e1 100644 --- a/jcache/pom.xml +++ b/jcache/pom.xml @@ -21,8 +21,11 @@ - cache-put + cache-basics cache-result + cache-put + cache-remove + cache-remove-all + + 8.2.4.Final @@ -32,9 +33,9 @@ configure-cache-store-by runtime-cache-types infinispan-max-entries + infinispan-externalizer - - From 7f03ca1923384a5f32eefc508de7036f2495febd Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Tue, 24 Jan 2017 17:01:30 +0100 Subject: [PATCH 28/35] upgraded to Infinispan 9.0.0.Beta2, using new memory configuration --- README.asciidoc | 6 +++--- .../javaee8/jcache/configuration/KeyValueService.java | 2 +- .../src/test/resources/infinispan.xml | 10 +++++++--- .../javaee8/jcache/configuration/KeyValueService.java | 2 +- .../src/test/resources/infinispan.xml | 10 +++++++--- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/README.asciidoc b/README.asciidoc index 40d95696..eb74be96 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -32,17 +32,17 @@ curl -L http://download.jboss.org/weld/3.0.0.Beta1/wildfly-10.1.0.Final-weld-3.0 } ---- + -. Download Infinispan 9.0.0.Beta1 packaged modules for deploying in WildFly +. Download Infinispan 9.0.0.Beta2 packaged modules for deploying in WildFly + [source, text] ---- -curl -L http://downloads.jboss.org/infinispan/9.0.0.Beta1/infinispan-wildfly-modules-9.0.0.Beta1.zip -o infinispan-wildfly-modules-9.0.0.Beta1.zip +curl -L http://downloads.jboss.org/infinispan/9.0.0.Beta2/infinispan-wildfly-modules-9.0.0.Beta2.zip -o infinispan-wildfly-modules-9.0.0.Beta2.zip ---- . Unzip and copy modules + [source, text] ---- -unzip ./infinispan-wildfly-modules-9.0.0.Beta1.zip -d ./wildfly-10.1.0.Final/modules +unzip ./infinispan-wildfly-modules-9.0.0.Beta2.zip -d ./wildfly-10.1.0.Final/modules ---- + . Start WildFly diff --git a/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java b/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java index 652ec777..52f9a5b8 100644 --- a/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java +++ b/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java @@ -13,7 +13,7 @@ * @author Radim Hanus */ public class KeyValueService { - public static final String CACHE_NAME = "cache.from.xml.config"; + public static final String CACHE_NAME = "defaultCache"; private CacheManager cacheManager; diff --git a/jcache/infinispan-externalizer/src/test/resources/infinispan.xml b/jcache/infinispan-externalizer/src/test/resources/infinispan.xml index dca27be3..29e50024 100644 --- a/jcache/infinispan-externalizer/src/test/resources/infinispan.xml +++ b/jcache/infinispan-externalizer/src/test/resources/infinispan.xml @@ -1,12 +1,16 @@ - + - - + + + + + + \ No newline at end of file diff --git a/jcache/infinispan-max-entries/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java b/jcache/infinispan-max-entries/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java index 652ec777..52f9a5b8 100644 --- a/jcache/infinispan-max-entries/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java +++ b/jcache/infinispan-max-entries/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java @@ -13,7 +13,7 @@ * @author Radim Hanus */ public class KeyValueService { - public static final String CACHE_NAME = "cache.from.xml.config"; + public static final String CACHE_NAME = "defaultCache"; private CacheManager cacheManager; diff --git a/jcache/infinispan-max-entries/src/test/resources/infinispan.xml b/jcache/infinispan-max-entries/src/test/resources/infinispan.xml index 99f6b496..df751bb2 100644 --- a/jcache/infinispan-max-entries/src/test/resources/infinispan.xml +++ b/jcache/infinispan-max-entries/src/test/resources/infinispan.xml @@ -1,9 +1,13 @@ - - - + + + + + + + \ No newline at end of file From 6414891497b2b3020692ac34bd25c4c015fdc085 Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Wed, 25 Jan 2017 15:38:13 +0100 Subject: [PATCH 29/35] upgraded to Weld 3.0.0.CR1 --- README.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.asciidoc b/README.asciidoc index eb74be96..041daed8 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -14,18 +14,18 @@ Running the tests ---- curl -L http://download.jboss.org/wildfly/10.1.0.Final/wildfly-10.1.0.Final.zip -o wildfly-10.1.0.Final.zip ---- -. Download Weld 3.0.0.Beta1 as a patch for WildFly 10.1 +. Download Weld 3.0.0.CR1 as a patch for WildFly 10.1 + [source, text] ---- -curl -L http://download.jboss.org/weld/3.0.0.Beta1/wildfly-10.1.0.Final-weld-3.0.0.Beta1-patch.zip -o wildfly-10.1.0.Final-weld-3.0.0.Beta1-patch.zip +curl -L http://download.jboss.org/weld/3.0.0.CR1/wildfly-10.1.0.Final-weld-3.0.0.CR1-patch.zip -o wildfly-10.1.0.Final-weld-3.0.0.CR1-patch.zip ---- + . Apply the patch + [source, text] ---- -./wildfly-10.1.0.Final/bin/jboss-cli.sh --command="patch apply ./wildfly-10.1.0.Final-weld-3.0.0.Beta1-patch.zip" +./wildfly-10.1.0.Final/bin/jboss-cli.sh --command="patch apply ./wildfly-10.1.0.Final-weld-3.0.0.CR1-patch.zip" { "outcome" : "success", "result" : {} From c6bba03c6e342cfcf0f51743c63822b4ba2887a0 Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Wed, 25 Jan 2017 15:40:42 +0100 Subject: [PATCH 30/35] renamed jcache sample infinispan-max-entries to infinispan-eviction sample for each memory configuration --- .../pom.xml | 2 +- .../infinispan/eviction}/KeyValueService.java | 13 ++++- .../eviction/BinaryStorageTest.java | 25 +++++++++ .../eviction/KeyValueServiceTest.java | 40 ++++++++++++++ .../eviction/ObjectStorageTest.java | 25 +++++++++ .../eviction/OffHeapStorageTest.java | 25 +++++++++ .../src/test/resources/beans.xml | 0 .../src/test/resources/infinispan-binary.xml | 12 +++++ .../src/test/resources/infinispan-object.xml} | 3 +- .../test/resources/infinispan-off-heap.xml | 12 +++++ .../resources/jboss-deployment-structure.xml | 0 .../configuration/KeyValueServiceTest.java | 53 ------------------- jcache/pom.xml | 2 +- 13 files changed, 154 insertions(+), 58 deletions(-) rename jcache/{infinispan-max-entries => infinispan-eviction}/pom.xml (90%) rename jcache/{infinispan-max-entries/src/main/java/org/javaee8/jcache/configuration => infinispan-eviction/src/main/java/org/javaee8/jcache/infinispan/eviction}/KeyValueService.java (74%) create mode 100644 jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/BinaryStorageTest.java create mode 100644 jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/KeyValueServiceTest.java create mode 100644 jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/ObjectStorageTest.java create mode 100644 jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/OffHeapStorageTest.java rename jcache/{infinispan-max-entries => infinispan-eviction}/src/test/resources/beans.xml (100%) create mode 100644 jcache/infinispan-eviction/src/test/resources/infinispan-binary.xml rename jcache/{infinispan-max-entries/src/test/resources/infinispan.xml => infinispan-eviction/src/test/resources/infinispan-object.xml} (73%) create mode 100644 jcache/infinispan-eviction/src/test/resources/infinispan-off-heap.xml rename jcache/{infinispan-max-entries => infinispan-eviction}/src/test/resources/jboss-deployment-structure.xml (100%) delete mode 100644 jcache/infinispan-max-entries/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java diff --git a/jcache/infinispan-max-entries/pom.xml b/jcache/infinispan-eviction/pom.xml similarity index 90% rename from jcache/infinispan-max-entries/pom.xml rename to jcache/infinispan-eviction/pom.xml index e7c272fd..70783b78 100644 --- a/jcache/infinispan-max-entries/pom.xml +++ b/jcache/infinispan-eviction/pom.xml @@ -8,5 +8,5 @@ ../pom.xml - infinispan-max-entries + infinispan-eviction diff --git a/jcache/infinispan-max-entries/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java b/jcache/infinispan-eviction/src/main/java/org/javaee8/jcache/infinispan/eviction/KeyValueService.java similarity index 74% rename from jcache/infinispan-max-entries/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java rename to jcache/infinispan-eviction/src/main/java/org/javaee8/jcache/infinispan/eviction/KeyValueService.java index 52f9a5b8..9910f3e7 100644 --- a/jcache/infinispan-max-entries/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java +++ b/jcache/infinispan-eviction/src/main/java/org/javaee8/jcache/infinispan/eviction/KeyValueService.java @@ -1,4 +1,4 @@ -package org.javaee8.jcache.configuration; +package org.javaee8.jcache.infinispan.eviction; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -7,6 +7,8 @@ import javax.cache.Caching; import javax.cache.spi.CachingProvider; import java.net.URI; +import java.util.HashSet; +import java.util.Set; /** @@ -38,4 +40,13 @@ public V get(K key) { Cache cache = cacheManager.getCache(CACHE_NAME); return cache.get(key); } + + public Set getKeys() { + Cache cache = cacheManager.getCache(CACHE_NAME); + Set keys = new HashSet<>(); + for (Cache.Entry entry : cache) { + keys.add(entry.getKey()); + } + return keys; + } } diff --git a/jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/BinaryStorageTest.java b/jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/BinaryStorageTest.java new file mode 100644 index 00000000..fa7c962b --- /dev/null +++ b/jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/BinaryStorageTest.java @@ -0,0 +1,25 @@ +package org.javaee8.jcache.infinispan.eviction; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.runner.RunWith; + + +/** + * @author Radim Hanus + */ +@RunWith(Arquillian.class) +public class BinaryStorageTest extends KeyValueServiceTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(KeyValueService.class, KeyValueServiceTest.class) + .addAsResource("infinispan-binary.xml", "META-INF/infinispan.xml") + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + +} diff --git a/jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/KeyValueServiceTest.java b/jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/KeyValueServiceTest.java new file mode 100644 index 00000000..c064172c --- /dev/null +++ b/jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/KeyValueServiceTest.java @@ -0,0 +1,40 @@ +package org.javaee8.jcache.infinispan.eviction; + +import org.junit.Test; + +import javax.inject.Inject; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + + +/** + * @author Radim Hanus + */ +abstract class KeyValueServiceTest { + @Inject + private KeyValueService service; + + @Test + public void test() throws Exception { + assertNull(service.get("JSR107")); + service.put("JSR107", "JCACHE"); + assertEquals("JCACHE", service.get("JSR107")); + assertEquals(1, service.getKeys().size()); + + assertNull(service.get("JSR365")); + service.put("JSR365", "CDI 2.0"); + assertEquals("CDI 2.0", service.get("JSR365")); + assertEquals(2, service.getKeys().size()); + + assertNull(service.get("JSR367")); + service.put("JSR367", "JSON-B"); + assertEquals("JSON-B", service.get("JSR367")); + assertEquals(2, service.getKeys().size()); + + assertNull(service.get("JSR371")); + service.put("JSR371", "MVC 1.0"); + assertEquals("MVC 1.0", service.get("JSR371")); + assertEquals(2, service.getKeys().size()); + } +} diff --git a/jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/ObjectStorageTest.java b/jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/ObjectStorageTest.java new file mode 100644 index 00000000..ccf85e95 --- /dev/null +++ b/jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/ObjectStorageTest.java @@ -0,0 +1,25 @@ +package org.javaee8.jcache.infinispan.eviction; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.runner.RunWith; + + +/** + * @author Radim Hanus + */ +@RunWith(Arquillian.class) +public class ObjectStorageTest extends KeyValueServiceTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(KeyValueService.class, KeyValueServiceTest.class) + .addAsResource("infinispan-object.xml", "META-INF/infinispan.xml") + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + +} diff --git a/jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/OffHeapStorageTest.java b/jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/OffHeapStorageTest.java new file mode 100644 index 00000000..9ec4c1f0 --- /dev/null +++ b/jcache/infinispan-eviction/src/test/java/org/javaee8/jcache/infinispan/eviction/OffHeapStorageTest.java @@ -0,0 +1,25 @@ +package org.javaee8.jcache.infinispan.eviction; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.runner.RunWith; + + +/** + * @author Radim Hanus + */ +@RunWith(Arquillian.class) +public class OffHeapStorageTest extends KeyValueServiceTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(KeyValueService.class, KeyValueServiceTest.class) + .addAsResource("infinispan-off-heap.xml", "META-INF/infinispan.xml") + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + +} diff --git a/jcache/infinispan-max-entries/src/test/resources/beans.xml b/jcache/infinispan-eviction/src/test/resources/beans.xml similarity index 100% rename from jcache/infinispan-max-entries/src/test/resources/beans.xml rename to jcache/infinispan-eviction/src/test/resources/beans.xml diff --git a/jcache/infinispan-eviction/src/test/resources/infinispan-binary.xml b/jcache/infinispan-eviction/src/test/resources/infinispan-binary.xml new file mode 100644 index 00000000..3bce22d4 --- /dev/null +++ b/jcache/infinispan-eviction/src/test/resources/infinispan-binary.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/jcache/infinispan-max-entries/src/test/resources/infinispan.xml b/jcache/infinispan-eviction/src/test/resources/infinispan-object.xml similarity index 73% rename from jcache/infinispan-max-entries/src/test/resources/infinispan.xml rename to jcache/infinispan-eviction/src/test/resources/infinispan-object.xml index df751bb2..b03e61bb 100644 --- a/jcache/infinispan-max-entries/src/test/resources/infinispan.xml +++ b/jcache/infinispan-eviction/src/test/resources/infinispan-object.xml @@ -3,8 +3,7 @@ - - + diff --git a/jcache/infinispan-eviction/src/test/resources/infinispan-off-heap.xml b/jcache/infinispan-eviction/src/test/resources/infinispan-off-heap.xml new file mode 100644 index 00000000..0517b4e5 --- /dev/null +++ b/jcache/infinispan-eviction/src/test/resources/infinispan-off-heap.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/jcache/infinispan-max-entries/src/test/resources/jboss-deployment-structure.xml b/jcache/infinispan-eviction/src/test/resources/jboss-deployment-structure.xml similarity index 100% rename from jcache/infinispan-max-entries/src/test/resources/jboss-deployment-structure.xml rename to jcache/infinispan-eviction/src/test/resources/jboss-deployment-structure.xml diff --git a/jcache/infinispan-max-entries/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java b/jcache/infinispan-max-entries/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java deleted file mode 100644 index 699ea88a..00000000 --- a/jcache/infinispan-max-entries/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.javaee8.jcache.configuration; - -import org.jboss.arquillian.container.test.api.Deployment; -import org.jboss.arquillian.junit.Arquillian; -import org.jboss.shrinkwrap.api.Archive; -import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.spec.WebArchive; -import org.junit.Test; -import org.junit.runner.RunWith; - -import javax.inject.Inject; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - - -/** - * @author Radim Hanus - */ -@RunWith(Arquillian.class) -public class KeyValueServiceTest { - @Deployment - public static Archive deploy() { - return ShrinkWrap.create(WebArchive.class) - .addClasses(KeyValueService.class) - .addAsResource("infinispan.xml", "META-INF/infinispan.xml") - .addAsWebInfResource("beans.xml") - .addAsWebInfResource("jboss-deployment-structure.xml"); - } - - @Inject - private KeyValueService service; - - @Test - public void test() throws Exception { - assertNull(service.get("JSR107")); - service.put("JSR107", "JCACHE"); - assertEquals("JCACHE", service.get("JSR107")); - - assertNull(service.get("JSR365")); - service.put("JSR365", "CDI 2.0"); - assertEquals("CDI 2.0", service.get("JSR365")); - - assertNull(service.get("JSR367")); - service.put("JSR367", "JSON-B"); - assertEquals("JSON-B", service.get("JSR367")); - - assertNull(service.get("JSR107")); - assertNotNull(service.get("JSR365")); - assertNotNull(service.get("JSR367")); - } -} diff --git a/jcache/pom.xml b/jcache/pom.xml index b10d4c24..4365c7b5 100644 --- a/jcache/pom.xml +++ b/jcache/pom.xml @@ -32,7 +32,7 @@ configure-cache-filter configure-cache-store-by runtime-cache-types - infinispan-max-entries + infinispan-eviction infinispan-externalizer From 1bd5999e6656e1db08588581fb33715625b8e151 Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Wed, 25 Jan 2017 15:46:02 +0100 Subject: [PATCH 31/35] renamed package --- .../externalize}/KeyValueService.java | 2 +- .../{configuration => infinispan/externalize}/MyValue.java | 2 +- .../externalize}/MyValueExternalizer.java | 2 +- .../externalize}/KeyValueServiceTest.java | 2 +- .../infinispan-externalizer/src/test/resources/infinispan.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) rename jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/{configuration => infinispan/externalize}/KeyValueService.java (95%) rename jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/{configuration => infinispan/externalize}/MyValue.java (93%) rename jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/{configuration => infinispan/externalize}/MyValueExternalizer.java (94%) rename jcache/infinispan-externalizer/src/test/java/org/javaee8/jcache/{configuration => infinispan/externalize}/KeyValueServiceTest.java (96%) diff --git a/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java b/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/infinispan/externalize/KeyValueService.java similarity index 95% rename from jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java rename to jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/infinispan/externalize/KeyValueService.java index 52f9a5b8..16d799e7 100644 --- a/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java +++ b/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/infinispan/externalize/KeyValueService.java @@ -1,4 +1,4 @@ -package org.javaee8.jcache.configuration; +package org.javaee8.jcache.infinispan.externalize; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; diff --git a/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/MyValue.java b/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/infinispan/externalize/MyValue.java similarity index 93% rename from jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/MyValue.java rename to jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/infinispan/externalize/MyValue.java index b9d77aa2..f8e0f37b 100644 --- a/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/MyValue.java +++ b/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/infinispan/externalize/MyValue.java @@ -1,4 +1,4 @@ -package org.javaee8.jcache.configuration; +package org.javaee8.jcache.infinispan.externalize; import java.io.Serializable; import java.util.Objects; diff --git a/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/MyValueExternalizer.java b/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/infinispan/externalize/MyValueExternalizer.java similarity index 94% rename from jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/MyValueExternalizer.java rename to jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/infinispan/externalize/MyValueExternalizer.java index f2d0d9ff..2a37bb1f 100644 --- a/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/configuration/MyValueExternalizer.java +++ b/jcache/infinispan-externalizer/src/main/java/org/javaee8/jcache/infinispan/externalize/MyValueExternalizer.java @@ -1,4 +1,4 @@ -package org.javaee8.jcache.configuration; +package org.javaee8.jcache.infinispan.externalize; import org.infinispan.commons.marshall.AdvancedExternalizer; diff --git a/jcache/infinispan-externalizer/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java b/jcache/infinispan-externalizer/src/test/java/org/javaee8/jcache/infinispan/externalize/KeyValueServiceTest.java similarity index 96% rename from jcache/infinispan-externalizer/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java rename to jcache/infinispan-externalizer/src/test/java/org/javaee8/jcache/infinispan/externalize/KeyValueServiceTest.java index 8296eff1..511bf4d4 100644 --- a/jcache/infinispan-externalizer/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java +++ b/jcache/infinispan-externalizer/src/test/java/org/javaee8/jcache/infinispan/externalize/KeyValueServiceTest.java @@ -1,4 +1,4 @@ -package org.javaee8.jcache.configuration; +package org.javaee8.jcache.infinispan.externalize; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; diff --git a/jcache/infinispan-externalizer/src/test/resources/infinispan.xml b/jcache/infinispan-externalizer/src/test/resources/infinispan.xml index 29e50024..b3fe2b55 100644 --- a/jcache/infinispan-externalizer/src/test/resources/infinispan.xml +++ b/jcache/infinispan-externalizer/src/test/resources/infinispan.xml @@ -3,7 +3,7 @@ - + From f6e5da4d73d418323296a735281cc659306a5fd8 Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Thu, 26 Jan 2017 18:04:23 +0100 Subject: [PATCH 32/35] added jcache sample infinispan-transaction-mode --- jcache/infinispan-transaction-mode/pom.xml | 21 +++++++ .../jcache/configuration/KeyValueService.java | 43 +++++++++++++++ .../configuration/KeyValueServiceTest.java | 55 +++++++++++++++++++ .../src/test/resources/beans.xml | 9 +++ .../src/test/resources/infinispan.xml | 13 +++++ .../resources/jboss-deployment-structure.xml | 10 ++++ jcache/pom.xml | 1 + pom.xml | 6 ++ 8 files changed, 158 insertions(+) create mode 100644 jcache/infinispan-transaction-mode/pom.xml create mode 100644 jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java create mode 100644 jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java create mode 100644 jcache/infinispan-transaction-mode/src/test/resources/beans.xml create mode 100644 jcache/infinispan-transaction-mode/src/test/resources/infinispan.xml create mode 100644 jcache/infinispan-transaction-mode/src/test/resources/jboss-deployment-structure.xml diff --git a/jcache/infinispan-transaction-mode/pom.xml b/jcache/infinispan-transaction-mode/pom.xml new file mode 100644 index 00000000..2e2392d2 --- /dev/null +++ b/jcache/infinispan-transaction-mode/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + org.javaee8.jcache + jcache-samples + 1.0-SNAPSHOT + ../pom.xml + + + infinispan-transaction-mode + + + + org.infinispan + infinispan-commons + provided + + + + diff --git a/jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java b/jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java new file mode 100644 index 00000000..19cc1240 --- /dev/null +++ b/jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java @@ -0,0 +1,43 @@ +package org.javaee8.jcache.configuration; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.cache.Cache; +import javax.cache.CacheManager; +import javax.cache.Caching; +import javax.cache.spi.CachingProvider; +import javax.transaction.Transactional; +import java.net.URI; + + +/** + * @author Radim Hanus + */ +@Transactional +public class KeyValueService { + public static final String CACHE_NAME = "defaultCache"; + + private CacheManager cacheManager; + + @PostConstruct + void init() { + CachingProvider cachingProvider = Caching.getCachingProvider(); + URI configUri = URI.create("META-INF/infinispan.xml"); + cacheManager = cachingProvider.getCacheManager(configUri, cachingProvider.getDefaultClassLoader()); + } + + @PreDestroy + void destroy() { + cacheManager.close(); + } + + public void put(K key, V value) { + Cache cache = cacheManager.getCache(CACHE_NAME); + cache.put(key, value); + } + + public V get(K key) { + Cache cache = cacheManager.getCache(CACHE_NAME); + return cache.get(key); + } +} diff --git a/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java b/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java new file mode 100644 index 00000000..3e8367e8 --- /dev/null +++ b/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java @@ -0,0 +1,55 @@ +package org.javaee8.jcache.configuration; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; +import javax.transaction.UserTransaction; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + + +/** + * @author Radim Hanus + */ +@RunWith(Arquillian.class) +public class KeyValueServiceTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(KeyValueService.class) + .addAsResource("infinispan.xml", "META-INF/infinispan.xml") + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + + @Inject + private KeyValueService service; + @Inject + private UserTransaction transaction; + + @Test + public void test() throws Exception { + transaction.begin(); + service.put("JSR107", "JCACHE"); + service.put("JSR365", "CDI 2.0"); + transaction.commit(); + + assertEquals("JCACHE", service.get("JSR107")); + assertEquals("CDI 2.0", service.get("JSR365")); + + transaction.begin(); + service.put("JSR367", "JSON-B"); + service.put("JSR371", "MVC 1.0"); + transaction.rollback(); + + assertNull(service.get("JSR367")); + assertNull(service.get("JSR371")); + } +} diff --git a/jcache/infinispan-transaction-mode/src/test/resources/beans.xml b/jcache/infinispan-transaction-mode/src/test/resources/beans.xml new file mode 100644 index 00000000..ae366cab --- /dev/null +++ b/jcache/infinispan-transaction-mode/src/test/resources/beans.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/jcache/infinispan-transaction-mode/src/test/resources/infinispan.xml b/jcache/infinispan-transaction-mode/src/test/resources/infinispan.xml new file mode 100644 index 00000000..33bc399b --- /dev/null +++ b/jcache/infinispan-transaction-mode/src/test/resources/infinispan.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/jcache/infinispan-transaction-mode/src/test/resources/jboss-deployment-structure.xml b/jcache/infinispan-transaction-mode/src/test/resources/jboss-deployment-structure.xml new file mode 100644 index 00000000..3171299a --- /dev/null +++ b/jcache/infinispan-transaction-mode/src/test/resources/jboss-deployment-structure.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/jcache/pom.xml b/jcache/pom.xml index 4365c7b5..f25bbc69 100644 --- a/jcache/pom.xml +++ b/jcache/pom.xml @@ -34,6 +34,7 @@ runtime-cache-types infinispan-eviction infinispan-externalizer + infinispan-transaction-mode diff --git a/pom.xml b/pom.xml index e2dc1875..dd930c0f 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,12 @@ 1.2 provided + + javax.transaction + javax.transaction-api + 1.2 + provided + From a271ed26970ad9b77fb1f55c54b195a83459aaa9 Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Sun, 29 Jan 2017 23:11:26 +0100 Subject: [PATCH 33/35] refactored jcache sample infinispan-transaction-mode --- .../txmode}/KeyValueService.java | 2 +- .../txmode/NonXaTransactionTest.java} | 8 ++- .../txmode/NoneTransactionTest.java | 56 +++++++++++++++++++ ...ispan.xml => infinispan-txmode-non_xa.xml} | 1 + .../test/resources/infinispan-txmode-none.xml | 14 +++++ 5 files changed, 77 insertions(+), 4 deletions(-) rename jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/{configuration => infinispan/txmode}/KeyValueService.java (95%) rename jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/{configuration/KeyValueServiceTest.java => infinispan/txmode/NonXaTransactionTest.java} (83%) create mode 100644 jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NoneTransactionTest.java rename jcache/infinispan-transaction-mode/src/test/resources/{infinispan.xml => infinispan-txmode-non_xa.xml} (84%) create mode 100644 jcache/infinispan-transaction-mode/src/test/resources/infinispan-txmode-none.xml diff --git a/jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java b/jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/infinispan/txmode/KeyValueService.java similarity index 95% rename from jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java rename to jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/infinispan/txmode/KeyValueService.java index 19cc1240..06023358 100644 --- a/jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/configuration/KeyValueService.java +++ b/jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/infinispan/txmode/KeyValueService.java @@ -1,4 +1,4 @@ -package org.javaee8.jcache.configuration; +package org.javaee8.jcache.infinispan.txmode; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; diff --git a/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java b/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NonXaTransactionTest.java similarity index 83% rename from jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java rename to jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NonXaTransactionTest.java index 3e8367e8..dcd76296 100644 --- a/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/configuration/KeyValueServiceTest.java +++ b/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NonXaTransactionTest.java @@ -1,4 +1,4 @@ -package org.javaee8.jcache.configuration; +package org.javaee8.jcache.infinispan.txmode; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; @@ -19,12 +19,12 @@ * @author Radim Hanus */ @RunWith(Arquillian.class) -public class KeyValueServiceTest { +public class NonXaTransactionTest { @Deployment public static Archive deploy() { return ShrinkWrap.create(WebArchive.class) .addClasses(KeyValueService.class) - .addAsResource("infinispan.xml", "META-INF/infinispan.xml") + .addAsResource("infinispan-txmode-non_xa.xml", "META-INF/infinispan.xml") .addAsWebInfResource("beans.xml") .addAsWebInfResource("jboss-deployment-structure.xml"); } @@ -41,6 +41,7 @@ public void test() throws Exception { service.put("JSR365", "CDI 2.0"); transaction.commit(); + // after commit entries should be available assertEquals("JCACHE", service.get("JSR107")); assertEquals("CDI 2.0", service.get("JSR365")); @@ -49,6 +50,7 @@ public void test() throws Exception { service.put("JSR371", "MVC 1.0"); transaction.rollback(); + // after rollback entries shouldn't be available assertNull(service.get("JSR367")); assertNull(service.get("JSR371")); } diff --git a/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NoneTransactionTest.java b/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NoneTransactionTest.java new file mode 100644 index 00000000..d9707810 --- /dev/null +++ b/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NoneTransactionTest.java @@ -0,0 +1,56 @@ +package org.javaee8.jcache.infinispan.txmode; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; +import javax.transaction.UserTransaction; + +import static org.junit.Assert.assertEquals; + + +/** + * @author Radim Hanus + */ +@RunWith(Arquillian.class) +public class NoneTransactionTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(KeyValueService.class) + .addAsResource("infinispan-txmode-none.xml", "META-INF/infinispan.xml") + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + + @Inject + private KeyValueService service; + @Inject + private UserTransaction transaction; + + @Test + public void test() throws Exception { + transaction.begin(); + service.put("JSR107", "JCACHE"); + service.put("JSR365", "CDI 2.0"); + transaction.commit(); + + // no matter of transaction result entries should be available + assertEquals("JCACHE", service.get("JSR107")); + assertEquals("CDI 2.0", service.get("JSR365")); + + transaction.begin(); + service.put("JSR367", "JSON-B"); + service.put("JSR371", "MVC 1.0"); + transaction.rollback(); + + // no matter of transaction result entries should be available + assertEquals("JSON-B", service.get("JSR367")); + assertEquals("MVC 1.0", service.get("JSR371")); + } +} diff --git a/jcache/infinispan-transaction-mode/src/test/resources/infinispan.xml b/jcache/infinispan-transaction-mode/src/test/resources/infinispan-txmode-non_xa.xml similarity index 84% rename from jcache/infinispan-transaction-mode/src/test/resources/infinispan.xml rename to jcache/infinispan-transaction-mode/src/test/resources/infinispan-txmode-non_xa.xml index 33bc399b..c86cfe88 100644 --- a/jcache/infinispan-transaction-mode/src/test/resources/infinispan.xml +++ b/jcache/infinispan-transaction-mode/src/test/resources/infinispan-txmode-non_xa.xml @@ -6,6 +6,7 @@ + diff --git a/jcache/infinispan-transaction-mode/src/test/resources/infinispan-txmode-none.xml b/jcache/infinispan-transaction-mode/src/test/resources/infinispan-txmode-none.xml new file mode 100644 index 00000000..b120a9d3 --- /dev/null +++ b/jcache/infinispan-transaction-mode/src/test/resources/infinispan-txmode-none.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file From bb5a3fee0df8e1617598a90a997712713d27b727 Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Thu, 2 Feb 2017 10:17:38 +0100 Subject: [PATCH 34/35] added jcache sample infinispan-transaction-isolation --- .../infinispan-transaction-isolation/pom.xml | 21 +++++ .../isolation/KeyValueService.java | 45 +++++++++ .../isolation/ReadCommittedIsolationTest.java | 91 ++++++++++++++++++ .../RepeatableReadIsolationTest.java | 94 +++++++++++++++++++ .../src/test/resources/beans.xml | 9 ++ .../infinispan-isolation-read_commited.xml | 14 +++ .../infinispan-isolation-repeatable_read.xml | 14 +++ .../resources/jboss-deployment-structure.xml | 10 ++ jcache/pom.xml | 1 + pom.xml | 6 ++ 10 files changed, 305 insertions(+) create mode 100644 jcache/infinispan-transaction-isolation/pom.xml create mode 100644 jcache/infinispan-transaction-isolation/src/main/java/org/javaee8/jcache/infinispan/transaction/isolation/KeyValueService.java create mode 100644 jcache/infinispan-transaction-isolation/src/test/java/org/javaee8/jcache/infinispan/transaction/isolation/ReadCommittedIsolationTest.java create mode 100644 jcache/infinispan-transaction-isolation/src/test/java/org/javaee8/jcache/infinispan/transaction/isolation/RepeatableReadIsolationTest.java create mode 100644 jcache/infinispan-transaction-isolation/src/test/resources/beans.xml create mode 100644 jcache/infinispan-transaction-isolation/src/test/resources/infinispan-isolation-read_commited.xml create mode 100644 jcache/infinispan-transaction-isolation/src/test/resources/infinispan-isolation-repeatable_read.xml create mode 100644 jcache/infinispan-transaction-isolation/src/test/resources/jboss-deployment-structure.xml diff --git a/jcache/infinispan-transaction-isolation/pom.xml b/jcache/infinispan-transaction-isolation/pom.xml new file mode 100644 index 00000000..d470b846 --- /dev/null +++ b/jcache/infinispan-transaction-isolation/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + org.javaee8.jcache + jcache-samples + 1.0-SNAPSHOT + ../pom.xml + + + infinispan-transaction-isolation + + + + org.infinispan + infinispan-commons + provided + + + + diff --git a/jcache/infinispan-transaction-isolation/src/main/java/org/javaee8/jcache/infinispan/transaction/isolation/KeyValueService.java b/jcache/infinispan-transaction-isolation/src/main/java/org/javaee8/jcache/infinispan/transaction/isolation/KeyValueService.java new file mode 100644 index 00000000..8bf76615 --- /dev/null +++ b/jcache/infinispan-transaction-isolation/src/main/java/org/javaee8/jcache/infinispan/transaction/isolation/KeyValueService.java @@ -0,0 +1,45 @@ +package org.javaee8.jcache.infinispan.transaction.isolation; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.cache.Cache; +import javax.cache.CacheManager; +import javax.cache.Caching; +import javax.cache.spi.CachingProvider; +import javax.enterprise.context.ApplicationScoped; +import javax.transaction.Transactional; +import java.net.URI; + + +/** + * @author Radim Hanus + */ +@ApplicationScoped +@Transactional +public class KeyValueService { + private static final String CACHE_NAME = "defaultCache"; + + private CacheManager cacheManager; + private Cache cache; + + @PostConstruct + void init() { + CachingProvider cachingProvider = Caching.getCachingProvider(); + URI configUri = URI.create("META-INF/infinispan.xml"); + cacheManager = cachingProvider.getCacheManager(configUri, cachingProvider.getDefaultClassLoader()); + cache = cacheManager.getCache(CACHE_NAME); + } + + @PreDestroy + void destroy() { + cacheManager.close(); + } + + public void put(String key, String value) { + cache.put(key, value); + } + + public String get(String key) { + return cache.get(key); + } +} diff --git a/jcache/infinispan-transaction-isolation/src/test/java/org/javaee8/jcache/infinispan/transaction/isolation/ReadCommittedIsolationTest.java b/jcache/infinispan-transaction-isolation/src/test/java/org/javaee8/jcache/infinispan/transaction/isolation/ReadCommittedIsolationTest.java new file mode 100644 index 00000000..c2b6eb00 --- /dev/null +++ b/jcache/infinispan-transaction-isolation/src/test/java/org/javaee8/jcache/infinispan/transaction/isolation/ReadCommittedIsolationTest.java @@ -0,0 +1,91 @@ +package org.javaee8.jcache.infinispan.transaction.isolation; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.annotation.Resource; +import javax.enterprise.concurrent.ManagedExecutorService; +import javax.inject.Inject; +import javax.naming.InitialContext; +import javax.transaction.UserTransaction; +import java.util.concurrent.CyclicBarrier; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + + +/** + * @author Radim Hanus + */ +@RunWith(Arquillian.class) +public class ReadCommittedIsolationTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(KeyValueService.class) + .addAsResource("infinispan-isolation-read_commited.xml", "META-INF/infinispan.xml") + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + + @Resource + private ManagedExecutorService executorService; + + @Inject + private KeyValueService service; + + @Test + public void test() throws Exception { + // put an entry + service.put("JSR107", "JCACHE"); + + final CyclicBarrier barrier = new CyclicBarrier(2); + + executorService.execute(() -> { + try { + UserTransaction transaction = InitialContext.doLookup("java:comp/UserTransaction"); + transaction.begin(); + + // ensure both threads started a tx and see expected value + assertEquals("JCACHE", service.get("JSR107")); + barrier.await(); + + // update the entry value + service.put("JSR107", "CDI 2.0"); + + transaction.commit(); + + // signal the change + barrier.await(); + } catch (Throwable e) { + fail(e.getMessage()); + } + }); + + executorService.execute(() -> { + try { + UserTransaction transaction = InitialContext.doLookup("java:comp/UserTransaction"); + transaction.begin(); + + // ensure both threads started a tx and see expected value + assertEquals("JCACHE", service.get("JSR107")); + barrier.await(); + + // entry value has been changed + barrier.await(); + + // should see the change in existing tx + assertEquals("CDI 2.0", service.get("JSR107")); + + transaction.commit(); + } catch (Throwable e) { + fail(e.getMessage()); + } + }); + } +} diff --git a/jcache/infinispan-transaction-isolation/src/test/java/org/javaee8/jcache/infinispan/transaction/isolation/RepeatableReadIsolationTest.java b/jcache/infinispan-transaction-isolation/src/test/java/org/javaee8/jcache/infinispan/transaction/isolation/RepeatableReadIsolationTest.java new file mode 100644 index 00000000..92801380 --- /dev/null +++ b/jcache/infinispan-transaction-isolation/src/test/java/org/javaee8/jcache/infinispan/transaction/isolation/RepeatableReadIsolationTest.java @@ -0,0 +1,94 @@ +package org.javaee8.jcache.infinispan.transaction.isolation; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.annotation.Resource; +import javax.enterprise.concurrent.ManagedExecutorService; +import javax.inject.Inject; +import javax.naming.InitialContext; +import javax.transaction.UserTransaction; +import java.util.concurrent.CyclicBarrier; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + + +/** + * @author Radim Hanus + */ +@RunWith(Arquillian.class) +public class RepeatableReadIsolationTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(WebArchive.class) + .addClasses(KeyValueService.class) + .addAsResource("infinispan-isolation-repeatable_read.xml", "META-INF/infinispan.xml") + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("jboss-deployment-structure.xml"); + } + + @Resource + private ManagedExecutorService executorService; + + @Inject + private KeyValueService service; + + @Test + public void test() throws Exception { + // put an entry + service.put("JSR107", "JCACHE"); + + final CyclicBarrier barrier = new CyclicBarrier(2); + + executorService.submit(() -> { + try { + UserTransaction transaction = InitialContext.doLookup("java:comp/UserTransaction"); + transaction.begin(); + + // ensure both threads started a tx and see expected value + assertEquals("JCACHE", service.get("JSR107")); + barrier.await(); + + // update the entry value + service.put("JSR107", "CDI 2.0"); + + transaction.commit(); + + // signal the change + barrier.await(); + } catch (Throwable e) { + fail(e.getMessage()); + } + }); + + executorService.submit(() -> { + try { + UserTransaction transaction = InitialContext.doLookup("java:comp/UserTransaction"); + transaction.begin(); + + // ensure both threads started a tx and see expected value + assertEquals("JCACHE", service.get("JSR107")); + barrier.await(); + + // entry value has been changed + barrier.await(); + + // shouldn't see the change in existing tx + assertEquals("JCACHE", service.get("JSR107")); + + transaction.commit(); + + // should see the change in new tx + assertEquals("CDI 2.0", service.get("JSR107")); + } catch (Throwable e) { + fail(e.getMessage()); + } + }); + } +} diff --git a/jcache/infinispan-transaction-isolation/src/test/resources/beans.xml b/jcache/infinispan-transaction-isolation/src/test/resources/beans.xml new file mode 100644 index 00000000..4bb6b47b --- /dev/null +++ b/jcache/infinispan-transaction-isolation/src/test/resources/beans.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/jcache/infinispan-transaction-isolation/src/test/resources/infinispan-isolation-read_commited.xml b/jcache/infinispan-transaction-isolation/src/test/resources/infinispan-isolation-read_commited.xml new file mode 100644 index 00000000..c4e20daa --- /dev/null +++ b/jcache/infinispan-transaction-isolation/src/test/resources/infinispan-isolation-read_commited.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/jcache/infinispan-transaction-isolation/src/test/resources/infinispan-isolation-repeatable_read.xml b/jcache/infinispan-transaction-isolation/src/test/resources/infinispan-isolation-repeatable_read.xml new file mode 100644 index 00000000..beed0372 --- /dev/null +++ b/jcache/infinispan-transaction-isolation/src/test/resources/infinispan-isolation-repeatable_read.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/jcache/infinispan-transaction-isolation/src/test/resources/jboss-deployment-structure.xml b/jcache/infinispan-transaction-isolation/src/test/resources/jboss-deployment-structure.xml new file mode 100644 index 00000000..3171299a --- /dev/null +++ b/jcache/infinispan-transaction-isolation/src/test/resources/jboss-deployment-structure.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/jcache/pom.xml b/jcache/pom.xml index f25bbc69..ebc8c016 100644 --- a/jcache/pom.xml +++ b/jcache/pom.xml @@ -35,6 +35,7 @@ infinispan-eviction infinispan-externalizer infinispan-transaction-mode + infinispan-transaction-isolation diff --git a/pom.xml b/pom.xml index dd930c0f..96a24976 100644 --- a/pom.xml +++ b/pom.xml @@ -71,6 +71,12 @@ 1.2 provided + + javax.enterprise.concurrent + javax.enterprise.concurrent-api + 1.0 + provided + From 2d75f5506b892402b967319950962f672b3f50fa Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Thu, 2 Feb 2017 10:20:14 +0100 Subject: [PATCH 35/35] renamed package of jcache sample infinispan-transaction-mode --- .../{txmode => transaction/mode}/KeyValueService.java | 2 +- .../{txmode => transaction/mode}/NonXaTransactionTest.java | 2 +- .../{txmode => transaction/mode}/NoneTransactionTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/infinispan/{txmode => transaction/mode}/KeyValueService.java (95%) rename jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/{txmode => transaction/mode}/NonXaTransactionTest.java (96%) rename jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/{txmode => transaction/mode}/NoneTransactionTest.java (96%) diff --git a/jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/infinispan/txmode/KeyValueService.java b/jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/infinispan/transaction/mode/KeyValueService.java similarity index 95% rename from jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/infinispan/txmode/KeyValueService.java rename to jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/infinispan/transaction/mode/KeyValueService.java index 06023358..43270cca 100644 --- a/jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/infinispan/txmode/KeyValueService.java +++ b/jcache/infinispan-transaction-mode/src/main/java/org/javaee8/jcache/infinispan/transaction/mode/KeyValueService.java @@ -1,4 +1,4 @@ -package org.javaee8.jcache.infinispan.txmode; +package org.javaee8.jcache.infinispan.transaction.mode; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; diff --git a/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NonXaTransactionTest.java b/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/transaction/mode/NonXaTransactionTest.java similarity index 96% rename from jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NonXaTransactionTest.java rename to jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/transaction/mode/NonXaTransactionTest.java index dcd76296..879cc881 100644 --- a/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NonXaTransactionTest.java +++ b/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/transaction/mode/NonXaTransactionTest.java @@ -1,4 +1,4 @@ -package org.javaee8.jcache.infinispan.txmode; +package org.javaee8.jcache.infinispan.transaction.mode; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; diff --git a/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NoneTransactionTest.java b/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/transaction/mode/NoneTransactionTest.java similarity index 96% rename from jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NoneTransactionTest.java rename to jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/transaction/mode/NoneTransactionTest.java index d9707810..6bc03506 100644 --- a/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/txmode/NoneTransactionTest.java +++ b/jcache/infinispan-transaction-mode/src/test/java/org/javaee8/jcache/infinispan/transaction/mode/NoneTransactionTest.java @@ -1,4 +1,4 @@ -package org.javaee8.jcache.infinispan.txmode; +package org.javaee8.jcache.infinispan.transaction.mode; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian;