Oct 16, 2016

A Simple EJB3 project (Jboss-as-7.1.1 , Eclipse and Maven)


Eclipse Project Structure (EJB & Client


EJB Demo (EJB project)



  
1. HelloWorld .java (Interface )

package com.test.ejb;
import javax.ejb.Remote;
@Remote
public interface HelloWorld {
 public String sayHello();
}

2. HelloWorldBean

package com.test.ejb;
import javax.ejb.Stateless;
/**
 * Session Bean implementation class HelloWorldBean
 */
@Stateless
public class HelloWorldBean implements HelloWorld {
    /**
     * Default constructor.
     */
    public HelloWorldBean() {
        // TODO Auto-generated constructor stub
    }
 @Override
 public String sayHello() {
  // TODO Auto-generated method stub
  return "Hello World !!!";
    }
}

3. jboss-ejb-client.properties (This needs to be under SRC folder)

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.username=userName
remote.connection.default.password=password123

4. pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

 <modelVersion>4.0.0</modelVersion>
 <groupId>EJBDemo</groupId>
 <artifactId>EJBDemo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
 <name>EJBDemo</name>
 <url>http://maven.apache.org</url>
 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <!-- JBoss dependency versions -->
  <version.org.jboss.as.plugins.maven.plugin>7.1.Final</version.org.jboss.as.plugins.maven.plugin>
  <version.org.jboss.spec.jboss.javaee.6.0>3.0.0.Final</version.org.jboss.spec.jboss.javaee.6.0>
  <!-- other plugin versions -->
  <version.compiler.plugin>2.3.1</version.compiler.plugin>
  <version.ejb.plugin>2.3</version.ejb.plugin>
  <!-- maven-compiler-plugin -->
  <maven.compiler.target>1.6</maven.compiler.target>
  <maven.compiler.source>1.6</maven.compiler.source>
 </properties>
 <dependencyManagement>
  <dependencies>
   <dependency>
    <groupId>org.jboss.spec</groupId>
    <artifactId>jboss-javaee-6.0</artifactId>
    <version>${version.org.jboss.spec.jboss.javaee.6.0}</version>
    <type>pom</type>
    <scope>import</scope>
   </dependency>
  </dependencies>
 </dependencyManagement>
 <dependencies>
  <dependency>
   <groupId>org.jboss.spec.javax.annotation</groupId>
   <artifactId>jboss-annotations-api_1.1_spec</artifactId>
   <scope>provided</scope>
  </dependency>
  <dependency>
   <groupId>org.jboss.spec.javax.ejb</groupId>
   <artifactId>jboss-ejb-api_3.1_spec</artifactId>
   <scope>provided</scope>
  </dependency>
 </dependencies>
 <build>
  <!-- Set the name of the deployment -->
  <plugins>
   <!-- JBoss AS plugin to deploy the application -->
   <plugin>
    <groupId>org.jboss.as.plugins</groupId>
    <artifactId>jboss-as-maven-plugin</artifactId>
    <version>${version.org.jboss.as.plugins.maven.plugin}</version>
    <configuration>
     <filename>${project.build.finalName}.jar</filename>
    </configuration>
   </plugin>
   <!-- Compiler plugin enforces Java 1.6 compatibility and activates annotation
    processors -->
   <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>${version.compiler.plugin}</version>
    <configuration>
     <source>${maven.compiler.source}</source>
     <target>${maven.compiler.target}</target>
    </configuration>
   </plugin>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ejb-plugin</artifactId>
    <version>${version.ejb.plugin}</version>
    <configuration>
     <ejbVersion>3.1</ejbVersion>
     <!-- this is false by default -->
     <generateClient>true</generateClient>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project>

EJB EAR folder structure


After successfully compiled please deploy EJBDemoEAR.ear to JBoss server




EJB client





















ClientUtility.java

package com.test.ejbclient;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class ClientUtility {

 private static Context initialContext;
 private static final String PKG_INTERFACES = "org.jboss.ejb.client.naming";
 public static Context getInitialContext() throws NamingException {
  if (initialContext == null) {
   Properties properties = new Properties();
   properties.put(Context.URL_PKG_PREFIXES, PKG_INTERFACES);
   initialContext = new InitialContext(properties);
  }
  return initialContext;
 }
}

Client.java (Run as Java Application)

package com.test.ejbclient;
import javax.naming.Context;
import javax.naming.NamingException;
import com.test.ejb.HelloWorld;
public class Client {

 public static void main(String[] args) {

  HelloWorld bean = doLookup();
  // 4. Call business logic
  System.out.println(bean.sayHello());
 }
 private static HelloWorld doLookup() {
  Context context = null;
  HelloWorld bean = null;
  try {
   // 1. Obtaining Context
   context = ClientUtility.getInitialContext();
   System.out.println("Context::::::::" + context);
   // 2. Generate JNDI Lookup name
   String lookupName = getLookupName();
   System.out.println("lookup::::::::" + lookupName);
   // 3. Lookup and cast
   bean = (HelloWorld) context.lookup(lookupName);
   System.out.println("Bean look up ..........." + bean);
   context.close();
  } catch (NamingException e) {
   e.printStackTrace();
  }
  return bean;
 }
 private static String getLookupName() {
  /*
   * 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
   */
  String appName = "EJBDemoEAR";
  /*
   * The module name is the JAR name of the deployed EJB without the .jar
   * suffix.
   */
  String moduleName = "EJBDemo";
  /*
   * AS7 allows each deployment to have an (optional) distinct name. This
   * can be an empty string if distinct name is not specified.
   */
  String distinctName = "";
  // The EJB bean implementation class name
  String beanName = "HelloWorldBean";
  // Fully qualified remote interface name
  final String interfaceName = "com.test.ejb.HelloWorld";
  // Create a look up string name
  String name = "ejb:" + appName + "/" + moduleName + distinctName + "/"
    + beanName + "!" + interfaceName;

  return name;
 }
}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

 <modelVersion>4.0.0</modelVersion>
 <groupId>EJBDemo</groupId>
 <artifactId>EJBDemoClient</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
 <name>EJBDemoClient</name>
 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <!-- JBoss dependency versions -->
  <version.org.jboss.as>7.1.1.Final</version.org.jboss.as>
  <version.org.jboss.as.plugins.maven.plugin>7.3.Final</version.org.jboss.as.plugins.maven.plugin>
  <version.org.jboss.spec.jboss.javaee.6.0>3.0.0.Final</version.org.jboss.spec.jboss.javaee.6.0>
  <!-- other plugin versions -->
  <version.compiler.plugin>2.3.1</version.compiler.plugin>
  <version.exec.plugin>1.2.1</version.exec.plugin>
  <!-- maven-compiler-plugin -->
  <maven.compiler.target>1.6</maven.compiler.target>
  <maven.compiler.source>1.6</maven.compiler.source>
 </properties>
 <dependencyManagement>
  <dependencies>
   <dependency>
    <groupId>org.jboss.spec</groupId>
    <artifactId>jboss-javaee-6.0</artifactId>
    <version>${version.org.jboss.spec.jboss.javaee.6.0}</version>
    <type>pom</type>
    <scope>import</scope>
   </dependency>
   <dependency>
    <groupId>org.jboss.as</groupId>
    <artifactId>jboss-as-ejb-client-bom</artifactId>
    <version>${version.org.jboss.as}</version>
    <type>pom</type>
    <scope>import</scope>
   </dependency>
  </dependencies>
 </dependencyManagement>
 <dependencies>
  <dependency>
   <groupId>org.jboss.spec.javax.transaction</groupId>
   <artifactId>jboss-transaction-api_1.1_spec</artifactId>
   <scope>runtime</scope>
  </dependency>
  <dependency>
   <groupId>org.jboss.spec.javax.ejb</groupId>
   <artifactId>jboss-ejb-api_3.1_spec</artifactId>
   <scope>runtime</scope>
  </dependency>
  <dependency>
   <groupId>EJBDemo</groupId>
   <artifactId>EJBDemo</artifactId>
   <type>ejb-client</type>
   <version>${project.version}</version>
  </dependency>
  <dependency>
   <groupId>org.jboss</groupId>
   <artifactId>jboss-ejb-client</artifactId>
   <scope>runtime</scope>
  </dependency>
  <dependency>
   <groupId>org.jboss.xnio</groupId>
   <artifactId>xnio-api</artifactId>
   <scope>runtime</scope>
  </dependency>
  <dependency>
   <groupId>org.jboss.xnio</groupId>
   <artifactId>xnio-nio</artifactId>
   <scope>runtime</scope>
  </dependency>
  <dependency>
   <groupId>org.jboss.remoting3</groupId>
   <artifactId>jboss-remoting</artifactId>
   <scope>runtime</scope>
  </dependency>
  <!-- Remote EJB accesses can be secured -->
  <dependency>
   <groupId>org.jboss.sasl</groupId>
   <artifactId>jboss-sasl</artifactId>
   <scope>runtime</scope>
  </dependency>
  <!-- data serialization for invoking remote EJBs -->
  <dependency>
   <groupId>org.jboss.marshalling</groupId>
   <artifactId>jboss-marshalling-river</artifactId>
   <scope>runtime</scope>
  </dependency>
  <dependency>
   <groupId>org.jboss</groupId>
   <artifactId>jboss-remote-naming</artifactId>
   <version>1.0.7.Final</version>
  </dependency>
 </dependencies>
 <build>
  <plugins>
   <!-- Enforce Java 1.6 -->
   <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>${version.compiler.plugin}</version>
    <configuration>
     <source>${maven.compiler.source}</source>
     <target>${maven.compiler.target}</target>
    </configuration>
   </plugin>
   <!-- Add the maven exec plugin to allow us to run a java program via maven -->
   <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>${version.exec.plugin}</version>
    <executions>
     <execution>
      <goals>
       <goal>exec</goal>
      </goals>
     </execution>
    </executions>
    <configuration>
     <executable>java</executable>
     <workingDirectory>${project.build.directory}/exec-working-directory</workingDirectory>
     <arguments>
      <!-- automatically creates the classpath using all project dependencies,
       also adding the project build directory -->
      <argument>-classpath</argument>
      <classpath>
      </classpath>
      <argument>com.test.ejbclient.Client</argument>
     </arguments>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project>

Output :











Thank you ! :)