Creating multiple stateful session beans from a java client. (EJB 3.0)

I'm having difficulties with the following:

To access the ShoppingCartBean, I have to put the following annotation in my standalone java client:

@EJB

private static ShoppingCartRemote shoppingCartBean;

The static must be there, thus only one ShoppingCartBean will exist within my java client. But as the ShoppingCartBean is a stateful session bean, I want to be able to get different beans of the same type.

What is the correct way to do this in EJB 3.0?

[492 byte] By [maartendca] at [2007-11-26 14:32:48]
# 1

Great question. Because Home interfaces have been removed for the EJB 3.0 simplified

API, stateful session bean creation happens as a side-effect of injection.However, the

same is true of EJB 3.0 business interface *lookups*. The easiest way to create additional

stateful session beans is to lookup the same dependency that was declared via your

@EJB annotation.

E.g.,

// Assuming the declaring class is pkg1.ShoppingCartClient.java

InitialContext ic = new InitialContext();

ShoppingCartRemote scr1 = (ShoppingCartRemote)

ic.lookup("java:comp/env/pkg1.ShoppingCartClient/shoppingCartBean");

Note that the name relative to java:comp/env is the default associated with your

@EJB annotation since the name() attribute wasn't used.Alternatively, you

could have used :

@EJB(name="scb") private static ShoppingCartRemote shoppingCartBean;

...

InitialContext ic = new InitialContext();

ShoppingCartRemote scr1 = (ShoppingCartRemote) ic.lookup("java:comp/env/scb");

Yet another alternative is to declare the @EJB at the *class*-level. This just defines

the dependency without any injection, which is fine if you want to create a bunch of

them via lookup anyway.

@EJB(name="scb", beanInterface=ShoppingCartRemote.class)

public class .... {

ksaksa at 2007-7-8 2:28:23 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...