From 9c39406c1686c4f3ddc637a8b85914a970639404 Mon Sep 17 00:00:00 2001 From: Pritam Banerjee Date: Sun, 26 Feb 2017 04:31:19 -0800 Subject: [PATCH] BAEL - 626 : EJB: Stateless and Stateful Session Beans(Initial Commit) --- ejb/ejb-session-beans-client/pom.xml | 54 +++++++++++ .../ejb/session/client/EJBStatefulClient.java | 85 +++++++++++++++++ .../session/client/EJBStatelessClient.java | 88 +++++++++++++++++ .../resources/jboss-ejb-client.properties | 8 ++ .../client/test/EJBStatefulClientTest.java | 17 ++++ .../client/test/EJBStatelessClientTest.java | 16 ++++ ejb/ejb-session-beans/pom.xml | 95 +++++++++++++++++++ .../ejb/stateful/beans/ItemStateful.java | 27 ++++++ .../stateful/beans/ItemStatefulRemote.java | 14 +++ .../ejb/stateless/beans/ItemStateless.java | 29 ++++++ .../stateless/beans/ItemStatelessRemote.java | 13 +++ .../src/main/resources/META-INF/ejb-jar.xml | 6 ++ ejb/pom.xml | 9 +- 13 files changed, 460 insertions(+), 1 deletion(-) create mode 100644 ejb/ejb-session-beans-client/pom.xml create mode 100644 ejb/ejb-session-beans-client/src/main/java/com/baeldung/ejb/session/client/EJBStatefulClient.java create mode 100644 ejb/ejb-session-beans-client/src/main/java/com/baeldung/ejb/session/client/EJBStatelessClient.java create mode 100755 ejb/ejb-session-beans-client/src/main/resources/jboss-ejb-client.properties create mode 100644 ejb/ejb-session-beans-client/src/test/java/com/baeldung/ejb/session/client/test/EJBStatefulClientTest.java create mode 100644 ejb/ejb-session-beans-client/src/test/java/com/baeldung/ejb/session/client/test/EJBStatelessClientTest.java create mode 100644 ejb/ejb-session-beans/pom.xml create mode 100644 ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/beans/ItemStateful.java create mode 100644 ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/beans/ItemStatefulRemote.java create mode 100644 ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/beans/ItemStateless.java create mode 100644 ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/beans/ItemStatelessRemote.java create mode 100755 ejb/ejb-session-beans/src/main/resources/META-INF/ejb-jar.xml diff --git a/ejb/ejb-session-beans-client/pom.xml b/ejb/ejb-session-beans-client/pom.xml new file mode 100644 index 0000000000..b5e107f23a --- /dev/null +++ b/ejb/ejb-session-beans-client/pom.xml @@ -0,0 +1,54 @@ + + + 4.0.0 + + com.baeldung.ejb + ejb + 1.0-SNAPSHOT + + ejb-session-beans-client + EJB3 Client Maven + EJB3 Client Maven + + + 4.12 + 2.19 + + + + + org.wildfly + wildfly-ejb-client-bom + pom + import + + + + com.baeldung.ejb + ejb-session-beans + ejb + + + + junit + junit + 4.12 + test + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.19 + + + **/*EJBSetupTest.java + + + + + + \ No newline at end of file diff --git a/ejb/ejb-session-beans-client/src/main/java/com/baeldung/ejb/session/client/EJBStatefulClient.java b/ejb/ejb-session-beans-client/src/main/java/com/baeldung/ejb/session/client/EJBStatefulClient.java new file mode 100644 index 0000000000..b2f79a2b13 --- /dev/null +++ b/ejb/ejb-session-beans-client/src/main/java/com/baeldung/ejb/session/client/EJBStatefulClient.java @@ -0,0 +1,85 @@ +package com.baeldung.ejb.session.client; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Properties; + +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; + +import com.baeldung.ejb.stateful.beans.ItemStatefulRemote; + +public class EJBStatefulClient { + + public EJBStatefulClient() { + } + + private Context context = null; + + public Boolean getEJBRemoteMessage() { + EJBStatefulClient ejb = new EJBStatefulClient(); + Boolean result = true; + try { + // 1. Obtaining Context + ejb.createInitialContext(); + // 2. Generate JNDI Lookup name and caste + ItemStatefulRemote itemStatefulOne = ejb.lookup(); + ItemStatefulRemote itemStatefulTwo = ejb.lookup(); + + itemStatefulOne.addItem("Book"); + itemStatefulOne.addItem("Pen"); + itemStatefulOne.addItem("Copy"); + itemStatefulOne.addItem("Pencil"); + + result = itemStatefulOne.getItemList().equals(itemStatefulTwo.getItemList()); + + return result; + } catch (NamingException e) { + e.printStackTrace(); + return false; + } finally { + try { + ejb.closeContext(); + } catch (NamingException e) { + e.printStackTrace(); + + } + } + } + + public ItemStatefulRemote lookup() throws NamingException { + + // The app name is the EAR name of the deployed EJB without .ear suffix. + // Since we haven't deployed the application as a .ear, the app name for + // us will be an empty string + final String appName = ""; + final String moduleName = "session-beans"; + final String distinctName = ""; + final String beanName = "ItemStatefulRemote"; + final String viewClassName = ItemStatefulRemote.class.getName() + "?stateful"; + final String toLookup = String.format("ejb:%s/%s/%s/%s!%s", appName, moduleName, distinctName, beanName, + viewClassName); + return (ItemStatefulRemote) context.lookup(toLookup); + } + + public void createInitialContext() throws NamingException { + Properties prop = new Properties(); + prop.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); + prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); + prop.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080"); + prop.put(Context.SECURITY_PRINCIPAL, "testUser"); + prop.put(Context.SECURITY_CREDENTIALS, "admin1234!"); + prop.put("jboss.naming.client.ejb.context", false); + + context = new InitialContext(prop); + } + + public void closeContext() throws NamingException { + if (context != null) { + context.close(); + } + } + +} diff --git a/ejb/ejb-session-beans-client/src/main/java/com/baeldung/ejb/session/client/EJBStatelessClient.java b/ejb/ejb-session-beans-client/src/main/java/com/baeldung/ejb/session/client/EJBStatelessClient.java new file mode 100644 index 0000000000..3d00771a07 --- /dev/null +++ b/ejb/ejb-session-beans-client/src/main/java/com/baeldung/ejb/session/client/EJBStatelessClient.java @@ -0,0 +1,88 @@ +package com.baeldung.ejb.session.client; + +import java.util.List; +import java.util.Properties; + +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; + +import com.baeldung.ejb.stateless.beans.ItemStatelessRemote; + +public class EJBStatelessClient { + + public EJBStatelessClient() { + } + + private Context context = null; + + public static void main(String[] arg) { + EJBStatelessClient ejb = new EJBStatelessClient(); + System.out.println(ejb.getEJBRemoteMessage()); + + } + + public Boolean getEJBRemoteMessage() { + EJBStatelessClient main = new EJBStatelessClient(); + Boolean result = true; + try { + // 1. Obtaining Context + main.createInitialContext(); + // 2. Generate JNDI Lookup name and caste + ItemStatelessRemote itemStatelessOne = main.lookup(); + ItemStatelessRemote itemStatelessTwo = main.lookup(); + + itemStatelessOne.addItem("Book"); + itemStatelessOne.addItem("Pen"); + itemStatelessOne.addItem("Pencil"); + itemStatelessOne.addItem("Eraser"); + + result = itemStatelessOne.getItemList().equals(itemStatelessTwo.getItemList()); + + return result; + } catch (NamingException e) { + e.printStackTrace(); + return false; + } finally { + try { + main.closeContext(); + } catch (NamingException e) { + e.printStackTrace(); + } + } + } + + public ItemStatelessRemote lookup() throws NamingException { + + // The app name is the EAR name of the deployed EJB without .ear suffix. + // Since we haven't deployed the application as a .ear, the app name for + // us will be an empty string + final String appName = ""; + final String moduleName = "session-beans"; + final String distinctName = ""; + final String beanName = "ItemStatelessRemote"; + final String viewClassName = ItemStatelessRemote.class.getName(); + final String toLookup = String.format("ejb:%s/%s/%s/%s!%s", appName, moduleName, distinctName, beanName, viewClassName); + + return (ItemStatelessRemote) context.lookup(toLookup); + } + + public void createInitialContext() throws NamingException { + Properties prop = new Properties(); + prop.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); + prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); + prop.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080"); + prop.put(Context.SECURITY_PRINCIPAL, "testUser"); + prop.put(Context.SECURITY_CREDENTIALS, "admin1234!"); + prop.put("jboss.naming.client.ejb.context", false); + + context = new InitialContext(prop); + } + + public void closeContext() throws NamingException { + if (context != null) { + context.close(); + } + } + +} diff --git a/ejb/ejb-session-beans-client/src/main/resources/jboss-ejb-client.properties b/ejb/ejb-session-beans-client/src/main/resources/jboss-ejb-client.properties new file mode 100755 index 0000000000..077cd7583f --- /dev/null +++ b/ejb/ejb-session-beans-client/src/main/resources/jboss-ejb-client.properties @@ -0,0 +1,8 @@ +remote.connections=default +remote.connection.default.host=127.0.0.1 +remote.connection.default.port=8080 +remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false +remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT=false +remote.connection.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS=${host.auth:JBOSS-LOCAL-USER} +remote.connection.default.username=testUser +remote.connection.default.password=admin1234! \ No newline at end of file diff --git a/ejb/ejb-session-beans-client/src/test/java/com/baeldung/ejb/session/client/test/EJBStatefulClientTest.java b/ejb/ejb-session-beans-client/src/test/java/com/baeldung/ejb/session/client/test/EJBStatefulClientTest.java new file mode 100644 index 0000000000..670dacc7aa --- /dev/null +++ b/ejb/ejb-session-beans-client/src/test/java/com/baeldung/ejb/session/client/test/EJBStatefulClientTest.java @@ -0,0 +1,17 @@ +package com.baeldung.ejb.session.client.test; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.baeldung.ejb.session.client.EJBStatefulClient; + +public class EJBStatefulClientTest { + + @Test + public void EJBClientTest() { + EJBStatefulClient ejbStatefulClient = new EJBStatefulClient(); + assertFalse(ejbStatefulClient.getEJBRemoteMessage()); + } + +} diff --git a/ejb/ejb-session-beans-client/src/test/java/com/baeldung/ejb/session/client/test/EJBStatelessClientTest.java b/ejb/ejb-session-beans-client/src/test/java/com/baeldung/ejb/session/client/test/EJBStatelessClientTest.java new file mode 100644 index 0000000000..90e3106130 --- /dev/null +++ b/ejb/ejb-session-beans-client/src/test/java/com/baeldung/ejb/session/client/test/EJBStatelessClientTest.java @@ -0,0 +1,16 @@ +package com.baeldung.ejb.session.client.test; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import com.baeldung.ejb.session.client.EJBStatelessClient; + +public class EJBStatelessClientTest { + + @Test + public void EJBClientTest() { + EJBStatelessClient ejbStatelessClient = new EJBStatelessClient(); + assertTrue(ejbStatelessClient.getEJBRemoteMessage()); + } + +} diff --git a/ejb/ejb-session-beans/pom.xml b/ejb/ejb-session-beans/pom.xml new file mode 100644 index 0000000000..c1b908c0aa --- /dev/null +++ b/ejb/ejb-session-beans/pom.xml @@ -0,0 +1,95 @@ + + + 4.0.0 + + + com.baeldung.ejb + ejb + 1.0-SNAPSHOT + + + ejb-session-beans + ejb + + + + javax + javaee-api + ${javaee-api.version} + provided + + + + + + + + wildfly-standalone + + true + + + + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + + + + wildfly10x + + http://download.jboss.org/wildfly/10.1.0.Final/wildfly-10.1.0.Final.zip + + + + + + 127.0.0.1 + 9990 + testUser:admin1234! + + + + + + + + + + + + wildfly-runtime + + false + + + + + org.wildfly.plugins + wildfly-maven-plugin + 1.1.0.Alpha5 + + 127.0.0.1 + 9990 + testUser + admin1234! + ${build.finalName}.jar + + + + + + + + + + 7.0 + 1.6.1 + + + + + diff --git a/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/beans/ItemStateful.java b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/beans/ItemStateful.java new file mode 100644 index 0000000000..faab0bd4b1 --- /dev/null +++ b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/beans/ItemStateful.java @@ -0,0 +1,27 @@ +package com.baeldung.ejb.stateful.beans; + +import java.util.ArrayList; +import java.util.List; + +import javax.ejb.Stateful; + +@Stateful(name = "ItemStatefulRemote") +public class ItemStateful implements ItemStatefulRemote { + + private List itemList; + + public ItemStateful() { + itemList = new ArrayList(); + } + + @Override + public void addItem(String itemName) { + itemList.add(itemName); + } + + @Override + public List getItemList() { + return itemList; + } + +} diff --git a/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/beans/ItemStatefulRemote.java b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/beans/ItemStatefulRemote.java new file mode 100644 index 0000000000..0d5313772d --- /dev/null +++ b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateful/beans/ItemStatefulRemote.java @@ -0,0 +1,14 @@ +package com.baeldung.ejb.stateful.beans; + +import java.util.List; + +import javax.ejb.Remote; + +@Remote +public interface ItemStatefulRemote { + + void addItem(String itemName); + + List getItemList(); + +} diff --git a/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/beans/ItemStateless.java b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/beans/ItemStateless.java new file mode 100644 index 0000000000..23d24a5f21 --- /dev/null +++ b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/beans/ItemStateless.java @@ -0,0 +1,29 @@ +package com.baeldung.ejb.stateless.beans; + +import java.util.ArrayList; +import java.util.List; + +import javax.ejb.Stateless; + +@Stateless(name = "ItemStatelessRemote") +public class ItemStateless implements ItemStatelessRemote { + + private List itemList; + + public ItemStateless() { + itemList = new ArrayList(); + } + + @Override + public void addItem(String itemName) { + + itemList.add(itemName); + } + + @Override + public List getItemList() { + + return itemList; + } + +} diff --git a/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/beans/ItemStatelessRemote.java b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/beans/ItemStatelessRemote.java new file mode 100644 index 0000000000..2ed2029cc8 --- /dev/null +++ b/ejb/ejb-session-beans/src/main/java/com/baeldung/ejb/stateless/beans/ItemStatelessRemote.java @@ -0,0 +1,13 @@ +package com.baeldung.ejb.stateless.beans; + +import java.util.List; + +import javax.ejb.Remote; + +@Remote +public interface ItemStatelessRemote { + + void addItem(String itemName); + + List getItemList(); +} diff --git a/ejb/ejb-session-beans/src/main/resources/META-INF/ejb-jar.xml b/ejb/ejb-session-beans/src/main/resources/META-INF/ejb-jar.xml new file mode 100755 index 0000000000..7ae4711863 --- /dev/null +++ b/ejb/ejb-session-beans/src/main/resources/META-INF/ejb-jar.xml @@ -0,0 +1,6 @@ + + + session-beans + \ No newline at end of file diff --git a/ejb/pom.xml b/ejb/pom.xml index bfcc972417..c8ffcc4a55 100755 --- a/ejb/pom.xml +++ b/ejb/pom.xml @@ -34,7 +34,12 @@ 1.0-SNAPSHOT ejb - + + com.baeldung.ejb + ejb-session-beans + 1.0-SNAPSHOT + ejb + javax javaee-api @@ -78,5 +83,7 @@ ejb-remote ejb-client + ejb-session-beans + ejb-session-beans-client \ No newline at end of file