diff --git a/ejb/ejb-client/pom.xml b/ejb/ejb-client/pom.xml
new file mode 100755
index 0000000000..d1d245ba6d
--- /dev/null
+++ b/ejb/ejb-client/pom.xml
@@ -0,0 +1,28 @@
+
+
+ 4.0.0
+
+ com.baeldung.ejb
+ ejb
+ 1.0-SNAPSHOT
+
+ ejb-client
+ EJB3 Client Maven
+ EJB3 Client Maven
+
+
+
+ org.wildfly
+ wildfly-ejb-client-bom
+ pom
+ import
+
+
+ com.baeldung.ejb
+ ejb-remote
+ ejb
+
+
+
+
\ No newline at end of file
diff --git a/ejb/ejb-client/src/main/java/com/baeldung/ejb/client/EJBClient.java b/ejb/ejb-client/src/main/java/com/baeldung/ejb/client/EJBClient.java
new file mode 100755
index 0000000000..5426bbdc81
--- /dev/null
+++ b/ejb/ejb-client/src/main/java/com/baeldung/ejb/client/EJBClient.java
@@ -0,0 +1,71 @@
+package com.baeldung.ejb.client;
+
+import java.util.Properties;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import com.baeldung.ejb.tutorial.HelloWorld;
+
+public class EJBClient {
+
+ public EJBClient() {
+ }
+
+ private Context context = null;
+
+ public String getEJBRemoteMessage() {
+ EJBClient main = new EJBClient();
+ try {
+ // 1. Obtaining Context
+ main.createInitialContext();
+ // 2. Generate JNDI Lookup name and caste
+ HelloWorld helloWorld = main.lookup();
+ return helloWorld.getHelloWorld();
+ } catch (NamingException e) {
+ e.printStackTrace();
+ return "";
+ } finally {
+ try {
+ main.closeContext();
+ } catch (NamingException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public HelloWorld 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 = "remote";
+ final String distinctName = "";
+ final String beanName = "HelloWorld";
+ final String viewClassName = HelloWorld.class.getName();
+ final String toLookup = "ejb:" + appName + "/" + moduleName
+ + "/" + distinctName + "/" + beanName + "!" + viewClassName;
+ return (HelloWorld) 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, "pritamtest");
+ prop.put(Context.SECURITY_CREDENTIALS, "iamtheki9g");
+ 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-client/src/main/resources/jboss-ejb-client.properties b/ejb/ejb-client/src/main/resources/jboss-ejb-client.properties
new file mode 100755
index 0000000000..e17d8ba17e
--- /dev/null
+++ b/ejb/ejb-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=pritamtest
+remote.connection.default.password=iamtheki9g
\ No newline at end of file
diff --git a/ejb/ejb-client/src/test/java/com/baeldung/ejb/setup/test/EJBSetupTest.java b/ejb/ejb-client/src/test/java/com/baeldung/ejb/setup/test/EJBSetupTest.java
new file mode 100755
index 0000000000..1a8165cee6
--- /dev/null
+++ b/ejb/ejb-client/src/test/java/com/baeldung/ejb/setup/test/EJBSetupTest.java
@@ -0,0 +1,16 @@
+package com.baeldung.ejb.setup.test;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import com.baeldung.ejb.client.EJBClient;
+import com.baeldung.ejb.tutorial.HelloWorldBean;
+
+public class EJBSetupTest {
+
+ @Test
+ public void testEJBClient() {
+ EJBClient ejbClient = new EJBClient();
+ HelloWorldBean bean = new HelloWorldBean();
+ assertEquals(bean.getHelloWorld(), ejbClient.getEJBRemoteMessage());
+ }
+}
diff --git a/ejb/ejb-remote/pom.xml b/ejb/ejb-remote/pom.xml
new file mode 100755
index 0000000000..14c02edd0e
--- /dev/null
+++ b/ejb/ejb-remote/pom.xml
@@ -0,0 +1,25 @@
+
+
+ 4.0.0
+
+ com.baeldung.ejb
+ ejb
+ 1.0-SNAPSHOT
+
+ ejb-remote
+ ejb
+
+ ejb-remote
+
+
+ org.jboss.spec.javax.ejb
+ jboss-ejb-api_3.2_spec
+ provided
+
+
+
+
+ ejb-remote
+
+
\ No newline at end of file
diff --git a/ejb/ejb-remote/src/main/java/com/baeldung/ejb/tutorial/HelloWorld.java b/ejb/ejb-remote/src/main/java/com/baeldung/ejb/tutorial/HelloWorld.java
new file mode 100755
index 0000000000..79684de1a8
--- /dev/null
+++ b/ejb/ejb-remote/src/main/java/com/baeldung/ejb/tutorial/HelloWorld.java
@@ -0,0 +1,8 @@
+package com.baeldung.ejb.tutorial;
+
+import javax.ejb.Remote;
+
+@Remote
+public interface HelloWorld {
+ String getHelloWorld();
+}
diff --git a/ejb/ejb-remote/src/main/java/com/baeldung/ejb/tutorial/HelloWorldBean.java b/ejb/ejb-remote/src/main/java/com/baeldung/ejb/tutorial/HelloWorldBean.java
new file mode 100755
index 0000000000..6c5ee34afe
--- /dev/null
+++ b/ejb/ejb-remote/src/main/java/com/baeldung/ejb/tutorial/HelloWorldBean.java
@@ -0,0 +1,18 @@
+package com.baeldung.ejb.tutorial;
+
+import javax.annotation.Resource;
+import javax.ejb.SessionContext;
+import javax.ejb.Stateless;
+
+@Stateless(name = "HelloWorld")
+public class HelloWorldBean implements HelloWorld {
+
+ @Resource
+ private SessionContext context;
+
+ @Override
+ public String getHelloWorld() {
+ return "Welcome to EJB Tutorial!";
+ }
+
+}
diff --git a/ejb/ejb-remote/src/main/resources/META-INF/ejb-jar.xml b/ejb/ejb-remote/src/main/resources/META-INF/ejb-jar.xml
new file mode 100755
index 0000000000..d6c2200198
--- /dev/null
+++ b/ejb/ejb-remote/src/main/resources/META-INF/ejb-jar.xml
@@ -0,0 +1,7 @@
+
+
+ remote
+
+
diff --git a/ejb/pom.xml b/ejb/pom.xml
new file mode 100755
index 0000000000..49ddc694e9
--- /dev/null
+++ b/ejb/pom.xml
@@ -0,0 +1,83 @@
+
+
+ 4.0.0
+ com.baeldung.ejb
+ ejb
+ 1.0-SNAPSHOT
+ pom
+ ejb
+ EJB Tutorial
+
+
+
+ jboss-public-repository-group
+ JBoss Public Maven Repository Group
+ http://repository.jboss.org/nexus/content/groups/public/
+ default
+
+ true
+ never
+
+
+ true
+ never
+
+
+
+
+
+
+
+ com.baeldung.ejb
+ ejb-remote
+ 1.0-SNAPSHOT
+ ejb
+
+
+
+ org.jboss.spec
+ jboss-javaee-7.0
+ 1.0.1.Final
+ pom
+ import
+
+
+
+ org.wildfly
+ wildfly-ejb-client-bom
+ 10.1.0.Final
+ pom
+ import
+
+
+
+
+
+
+
+
+ maven-compiler-plugin
+ 3.1
+
+
+ 1.7
+
+
+
+
+ maven-ejb-plugin
+ 2.4
+
+ 3.2
+
+
+
+
+
+
+
+ ejb-remote
+ ejb-client
+
+
\ No newline at end of file