diff --git a/ejb/ejb-session-beans/pom.xml b/ejb/ejb-session-beans/pom.xml new file mode 100644 index 0000000000..a9b667baac --- /dev/null +++ b/ejb/ejb-session-beans/pom.xml @@ -0,0 +1,106 @@ + + 4.0.0 + + com.baeldung.ejb + ejb + 1.0-SNAPSHOT + + ejb-session-beans + + + UTF-8 + 1.1.12.Final + 2.2.6 + 1.1.12.Final + 1.0.0.Final + 4.12 + 7.0 + + + + + + org.jboss.arquillian + arquillian-bom + 1.1.13.Final + import + pom + + + + + + + + javax + javaee-api + ${javaee-api.version} + provided + + + + + junit + junit + 4.12 + test + + + + + org.jboss.arquillian.junit + arquillian-junit-container + test + + + + + + + arquillian-glassfish-embedded + + true + + + + org.jboss.arquillian.container + arquillian-glassfish-embedded-3.1 + 1.0.0.CR4 + test + + + org.glassfish.main.extras + glassfish-embedded-all + 3.1.2 + test + + + + + + + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + maven-war-plugin + 2.4 + + false + + + + maven-surefire-plugin + 2.17 + + + + + + \ No newline at end of file diff --git a/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/EJBClient1.java b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/EJBClient1.java new file mode 100644 index 0000000000..0387beeb3c --- /dev/null +++ b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/EJBClient1.java @@ -0,0 +1,11 @@ +package com.baeldung.ejb.stateful; + +import javax.ejb.EJB; + +public class EJBClient1 { + + @EJB + public StatefulEJB statefulEJB; + + +} \ No newline at end of file diff --git a/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/EJBClient2.java b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/EJBClient2.java new file mode 100644 index 0000000000..54f88a993d --- /dev/null +++ b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/EJBClient2.java @@ -0,0 +1,11 @@ +package com.baeldung.ejb.stateful; + +import javax.ejb.EJB; + +public class EJBClient2 { + + @EJB + public StatefulEJB statefulEJB; + + +} \ No newline at end of file diff --git a/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/StatefulEJB.java b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/StatefulEJB.java new file mode 100644 index 0000000000..17bb08491a --- /dev/null +++ b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/StatefulEJB.java @@ -0,0 +1,10 @@ +package com.baeldung.ejb.stateful; + +import javax.ejb.Stateful; + +@Stateful +public class StatefulEJB { + + public String name; + +} \ No newline at end of file diff --git a/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/EJBClient1.java b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/EJBClient1.java new file mode 100644 index 0000000000..0d6f06449b --- /dev/null +++ b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/EJBClient1.java @@ -0,0 +1,10 @@ +package com.baeldung.ejb.stateless; + +import javax.ejb.EJB; + +public class EJBClient1 { + + @EJB + public StatelessEJB statelessEJB; + +} \ No newline at end of file diff --git a/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/EJBClient2.java b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/EJBClient2.java new file mode 100644 index 0000000000..a7fe650b1b --- /dev/null +++ b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/EJBClient2.java @@ -0,0 +1,11 @@ +package com.baeldung.ejb.stateless; + +import javax.ejb.EJB; + +public class EJBClient2 { + + @EJB + public StatelessEJB statelessEJB; + + +} \ No newline at end of file diff --git a/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/StatelessEJB.java b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/StatelessEJB.java new file mode 100644 index 0000000000..d4e9749252 --- /dev/null +++ b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/StatelessEJB.java @@ -0,0 +1,11 @@ +package com.baeldung.ejb.stateless; + +import javax.ejb.Stateless; + + +@Stateless +public class StatelessEJB { + + public String name; + +} \ No newline at end of file diff --git a/ejb/ejb-session-beans/src/test/java/com/baeldung/ejb/test/stateful/StatefulEJBTest.java b/ejb/ejb-session-beans/src/test/java/com/baeldung/ejb/test/stateful/StatefulEJBTest.java new file mode 100644 index 0000000000..2f3e45a769 --- /dev/null +++ b/ejb/ejb-session-beans/src/test/java/com/baeldung/ejb/test/stateful/StatefulEJBTest.java @@ -0,0 +1,51 @@ +package com.baeldung.ejb.test.stateful; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.baeldung.ejb.stateful.EJBClient1; +import com.baeldung.ejb.stateful.EJBClient2; +import com.baeldung.ejb.stateful.StatefulEJB; + +import javax.inject.Inject; + + +@RunWith(Arquillian.class) +public class StatefulEJBTest { + + @Inject + private EJBClient1 ejbClient1; + + @Inject + private EJBClient2 ejbClient2; + + @Test + public void givenOneStatefulBean_whenTwoClientsSetValueOnBean_thenClientStateIsMaintained() { + + // act + ejbClient1.statefulEJB.name = "Client 1"; + ejbClient2.statefulEJB.name = "Client 2"; + + // assert + Assert.assertNotEquals(ejbClient1.statefulEJB.name, ejbClient2.statefulEJB.name); + Assert.assertEquals("Client 1", ejbClient1.statefulEJB.name); + Assert.assertEquals("Client 2", ejbClient2.statefulEJB.name); + + } + + @Deployment + public static JavaArchive createDeployment() { + return ShrinkWrap.create(JavaArchive.class) + .addClass(StatefulEJB.class) + .addClass(EJBClient1.class) + .addClass(EJBClient2.class) + .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); + } + +} diff --git a/ejb/ejb-session-beans/src/test/java/com/baeldung/ejb/test/stateless/StatelessEJBTest.java b/ejb/ejb-session-beans/src/test/java/com/baeldung/ejb/test/stateless/StatelessEJBTest.java new file mode 100644 index 0000000000..9f88d478b7 --- /dev/null +++ b/ejb/ejb-session-beans/src/test/java/com/baeldung/ejb/test/stateless/StatelessEJBTest.java @@ -0,0 +1,62 @@ +package com.baeldung.ejb.test.stateless; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.baeldung.ejb.stateless.EJBClient1; +import com.baeldung.ejb.stateless.EJBClient2; +import com.baeldung.ejb.stateless.StatelessEJB; + +import javax.inject.Inject; + + +@RunWith(Arquillian.class) +public class StatelessEJBTest { + + @Inject + private EJBClient1 ejbClient1; + + @Inject + private EJBClient2 ejbClient2; + + @Test + public void givenOneStatelessBean_whenStateIsSetInOneBean_secondBeanShouldHaveSameState() { + + // act + ejbClient1.statelessEJB.name = "Client 1"; + + // assert + Assert.assertEquals("Client 1", ejbClient1.statelessEJB.name); + Assert.assertEquals("Client 1", ejbClient2.statelessEJB.name); + + } + + + @Test + public void givenOneStatelessBean_whenStateIsSetInBothBeans_secondBeanShouldHaveSecondBeanState() { + + // act + ejbClient1.statelessEJB.name = "Client 1"; + ejbClient2.statelessEJB.name = "Client 2"; + + // assert + Assert.assertEquals("Client 2", ejbClient2.statelessEJB.name); + + } + + @Deployment + public static JavaArchive createDeployment() { + return ShrinkWrap.create(JavaArchive.class) + .addClass(StatelessEJB.class) + .addClass(EJBClient1.class) + .addClass(EJBClient2.class) + .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); + } + +} diff --git a/ejb/pom.xml b/ejb/pom.xml index 9495020266..b8aa32fab1 100755 --- a/ejb/pom.xml +++ b/ejb/pom.xml @@ -40,7 +40,12 @@ 1.0-SNAPSHOT ejb - + + com.baeldung.ejb + ejb-session-beans + 1.0-SNAPSHOT + ejb + javax javaee-api @@ -75,5 +80,7 @@ ejb-remote ejb-client + ejb-session-beans + ejb-session-beans-client \ No newline at end of file