Skip to main content

EJB3 Stateless Maven example with Jboss Application server

Step 1 :

Download jboss 5.1 application server from below (Which supporting for JDK 1.6)
http://jbossas.jboss.org/downloads

Extract and start the Jboss server.

Step 2 :

Create sample maven project as below


<?xml version="1.0" encoding="UTF-8"?>
<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>ejb</groupId>
    <artifactId>ejb-stateless</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>javax.ejb</groupId>
            <artifactId>ejb-api</artifactId>
            <version>3.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.jbossas</groupId>
            <artifactId>jboss-as-client</artifactId>
            <version>5.1.0.GA</version>
            <type>pom</type>
        </dependency>
    </dependencies>
</project>


Step 3:

Create Stateless bean as remote.

package ejb.statless;

import javax.ejb.*;
import java.util.*;

@Remote
public interface LibrarySessionBeanRemote {

    void addBook(String bookName);

    List<String> getBooks();
}




package ejb.statless;

import javax.ejb.*;
import java.util.*;

@Stateless
public class LibrarySessionBean implements LibrarySessionBeanRemote {

    List<String> bookShell = new ArrayList<String>();

    public LibrarySessionBean() {
    }

    @Override
    public void addBook(String bookName) {
        System.out.println(bookShell + "book shell....................");
        System.out.println(bookName + "book name....................");
        bookShell.add(bookName);
    }

    @Override
    public List<String> getBooks() {
        return bookShell;
    }
}


Step 4: Build the project and upload jar to Jboss server EJB3 container.
Step 5: Create sample client

package ejb.statless;

import javax.naming.*;
import java.io.*;
import java.util.*;

public class EJBTestClient {

    BufferedReader brConsoleReader = null;
    Properties props;
    InitialContext ctx;
    {
/*        props = new Properties();
        try {
            props.load(new FileInputStream("jndi.properties"));

        } catch (IOException ex) {
            ex.printStackTrace();
        }*/
        Hashtable hashtable = new Hashtable();
        hashtable.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        hashtable.put(Context.PROVIDER_URL, "jnp://localhost:1099");
        hashtable.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
        try {
            ctx = new InitialContext(hashtable);
        } catch (NamingException ex) {
            ex.printStackTrace();
        }
        brConsoleReader = new BufferedReader(new InputStreamReader(System.in));
    }

    public static void main(String[] args) {

        EJBTestClient ejbTester = new EJBTestClient();

        ejbTester.testStatelessEjb();
    }

    private void showGUI(){
        System.out.println("**********************");
        System.out.println("Welcome to Book Store");
        System.out.println("**********************");
        System.out.print("Options \n1. Add Book\n2. Exit \nEnter Choice: ");
    }

    private void testStatelessEjb(){

        try {
            int choice = 1;

            LibrarySessionBeanRemote libraryBean = (LibrarySessionBeanRemote) ctx.lookup ("LibrarySessionBean/remote");

            while (true) {
                String bookName;
                showGUI();
                String strChoice = brConsoleReader.readLine();

                choice = Integer.parseInt(strChoice);
                if (choice == 1) {
                    System.out.print("Enter book name: ");
                    bookName = brConsoleReader.readLine();
                    assert libraryBean != null;
                    libraryBean.addBook(bookName);
                } else if (choice == 2) {
                    break;
                }
            }

            List<String> booksList = libraryBean.getBooks();

            System.out.println("Book(s) entered so far: " + booksList.size());
            int i = 0;
            for (String book:booksList) {
                System.out.println((i+1)+". " + book);
                i++;
            }
            LibrarySessionBeanRemote libraryBean1 =
                    (LibrarySessionBeanRemote)ctx.lookup("LibrarySessionBean/remote");
            List<String> booksList1 = libraryBean1.getBooks();
            System.out.println(
                    "Book(s) entered so far: " + booksList1.size());
            for (i = 0; i < booksList1.size(); ++i) {
                System.out.println((i+1)+". " + booksList1.get(i));
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }finally {
            try {
                if(brConsoleReader !=null){
                    brConsoleReader.close();
                }
            } catch (IOException ex) {
                System.out.println(ex.getMessage());
            }
        }
    }
}


Run main method and check the result :)

Sample code : git clone https://github.com/malithmeee/jboss-ejb3.git

Comments

Popular posts from this blog

Prevent hot deployments memory leaks in Tomcat

Since we are mostly using Tomcat as App Container, it's making tough environment when deploying a patch or existing application without restarting tomcat server (Hot deployments) due to reaching the PermGen size due to memory leaks. Hence most of the cases we have to increase PermGen size more than required to deployed applications and it's wasting of memory in the system.  There is a solution for them to release PermGen size and let it clean by GC in JVM at hot deployment. Step 01: Include below dependency to pom.xml <dependency>               <groupId>se.jiderhamn.classloa der-leak-prevention</groupId>         <artifactId>classloader-leak-p revention-servlet</artifactId>   <version>2.2.0</version> </dependency> Step 02: Add listener to web.xml <listener>   <listener-class>se.jiderhamn.c lassloader.leak.prevention.Cla ssLoaderL...

Jboss 5.1.0_GA, Maven, Mysql, EJB3, JSF2 sample

I thought to write this because of no completed sample found with using above technologies. Environment JDK 1.6 Jboss-5.1.0.GA JSF2 Maven 3 EJB3 Note : Please copy the mysql connector jar to Jboss lib e.x. I copied mysql-connector-java-5.1.29.jar to jboss-5.1.0.GA/server/default/lib Clone the sample from github here git clone https://github.com/malithmeee/library.git Build the entire project and copy the library.ear to Jboss server. Try to access the web page using http://localhost:8080/library.web/home.jsf Note : Database needed to be created, and change properties in relevant files.

Birt Dynamic Table Creation from JDBC Mysql Connection with Maven

In this post refers how to create dynamic Birt reports using given customizing fields list using Birt Runtime 4.2.2 Step 01 : First need to download birt runtime. Download from here For view/Edit the rptdesign files, it's better to use Eclipes 4.2.2 Birt integration. Download eclipes here Step 02 : Extract the birt-runtime-4_2_2. and set the birt runtime home environment variable. e.g. in my case i'm set the environment variable in .bash_profile since i'm using Fedora. (we can specify the Birt home in java code as wel) export BIRT_HOME=/home/malith/usr/eclips/birt-runtime-4_2_2 Step 03 : Create Maven project and insert the dependency for Birt Runtime         <dependency>             <groupId>org.eclipse.birt.runtime</groupId>             <artifactId>org.eclipse.birt.runtime</artifactId>  ...