EJB 3.0 Stateful Session Bean Example

Sanskruti's Avatar author of EJB 3.0 Stateful Session Bean Example
This is an article on EJB 3.0 Stateful Session Bean Example in Java.
This article demonstrates how to write a simple Stateful Session Bean. It consists of three POJO's: Remote interface Cart.java, Bean class CartBean.java and EJB client CartClient.java.

Prerequisites



In order to complete the example application, you should be familiar with the following:
* EJB 3.0
This demonstration requires that the following software components are installed and configured correctly:
* Application Server such as J2EE, or other
* Sun JDK version 1.5 or above

Remote Interface: Cart.java



Code: Java
package ejb_stateful;

import java.util.Collection;
import javax.ejb.Remote;

@Remote
public interface Cart {
    public void addItem(String item);
    public void removeItem(String item);
    public Collection getItems();
}

Stateful Session Bean: CartBean.java


Code: Java
package ejb_stateful;

import java.util.ArrayList;
import java.util.Collection;
import javax.annotation.PostConstruct;
import javax.ejb.Stateful;

@Stateful
public class CartBean implements Cart {
    private ArrayList items;

    @PostConstruct
    public void initialize() {
        items = new ArrayList();
    }
   
    public void addItem(String item) {
        items.add(item);
    }

    public void removeItem(String item) {
        items.remove(item);
    }

    public Collection getItems() {
        return items;
    }
}

EJB Client: CartClient.java


Code: Java
package ejb_stateful;

import java.util.Collection;
import java.util.Iterator;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class CartClient {
    public static void main(String [] args) throws NamingException {
       
        try {
            final Context context = getInitialContext();
            Cart cart = (Cart)context.lookup("CartBean");
           
            System.out.println("Adding items to cart");
           
            cart.addItem("Pizza");
            cart.addItem("Pasta");
            cart.addItem("Noodles");
            cart.addItem("Bread");
            cart.addItem("Butter");
           
           
            System.out.println("Listing cart contents");
            Collection items = cart.getItems();
            for (Iterator i = items.iterator(); i.hasNext();) {
            String item = (String) i.next();
            System.out.println("  " + item);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private static Context getInitialContext() throws NamingException {
        return new InitialContext();
    }
}
Compile all the programs, start the server and execute CartClient. You will see following Output:
Code:
Adding items to cart
Listing cart contents
  Pizza
  Pasta
  Noodles
  Bread
  Butter
nirav.ahm's Avatar, Join Date: Aug 2008
Newbie Member
Hi,
I tried out this example using glassfish and netbeans but getting following error can you guide me?

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(Init ialContext.java:247)
at javax.naming.InitialContext.getURLOrDefaultInitCtx (InitialContext.java:284)
at javax.naming.InitialContext.lookup(InitialContext. java:351)
at ejb_stateful.CartClient.main(CartClient.java:14)


Thanks
Nirav Shah
sabbir's Avatar, Join Date: Aug 2008
Newbie Member
Quote:
Originally Posted by nirav.ahm
Hi,
I tried out this example using glassfish and netbeans but getting following error can you guide me?

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(Init ialContext.java:247)
at javax.naming.InitialContext.getURLOrDefaultInitCtx (InitialContext.java:284)
at javax.naming.InitialContext.lookup(InitialContext. java:351)
at ejb_stateful.CartClient.main(CartClient.java:14)


Thanks
Nirav Shah

just add app-serv-rt.jar(for GlassFish 2.0) in your client project it would be working fine

Thanx
Sabbirali Kadiwala
BrentAston's Avatar
Banned
Hi



I tried out this example using glassfish and netbeans
akash2008's Avatar, Join Date: Jan 2009
Newbie Member
write a simple Stateful Session Bean. It consists of three POJO's: Remote interface Cart.java, Bean class CartBean.java and EJB client CartClient.java. Prerequisites In order to complete the example application, you should
Venkat3's Avatar, Join Date: Jul 2010
Newbie Member
hello,

i know that a stateful bean retains the state. but in this example, i don't see the strength of maintaining the "state" of the so called stateful bean.

In this example, what is the so called "state"?
Or can someone explain where in this example the difference with a stateless bean comes above???

Thanks!
abcde12345's Avatar, Join Date: Aug 2010
Newbie Member
What a dumb example. How about actually exercising the state of the session bean by making multiple calls. Calling it once demonstrates nothing.
Sujata420's Avatar, Join Date: Feb 2011
Newbie Member
what are the jar files which i have import for this example?