Stateful Session Beans Interaction
grdzeli_kaci Aug 31, 2006 3:37 AMhi all .............
here is my small example :
1.Fierst Remote Interface
import javax.ejb.Remote;
@Remote
public interface Person {
public void addPersonName(String a);
public void printNames();
}
2. And It's Implementation :
import java.util.ArrayList;
import javax.ejb.Remote;
import javax.ejb.Stateful;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
@Stateful
@Remote(Person.class)
public class PersonBean implements Person
{
ArrayList<String> list = new ArrayList<String>();
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void addPersonName(String name)
{
list.add(name);
}
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public void printNames()
{
for (int i = 0; i < list.size(); i++)
{
System.out.println("Name = "+list.get(i));
}
}
}
3. Second Remote Interface :
import javax.ejb.Remote;
@Remote
public interface UsePerson {
public void callPrint()throws Exception;
}
4. And It's Implementation :
@Stateful
@Remote(Fasade.class)
public class UsePersonBean implements UsePerson
{
@EJB
Person person;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void callPrint() throws Exception
{
try
{
test.printNames();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
5. Client code :
public class TestClient
{
public static void main(String[] args)
{
try
{
Properties jndiProps = new Properties();
jndiProps.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
jndiProps.setProperty(Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interface");
jndiProps.setProperty(Context.PROVIDER_URL,
"jnp://127.0.0.1:1099");
InitialContext ctx = new InitialContext(jndiProps);
UsePerson useperson = (UsePerson) ctx.lookup("UsePersonBean/remote");
Person person = (Person) ctx.lookup("PersonBean/remote");
person.addPersonName("Piter");
person.addPersonName("John");
person.addPersonName("Miles");
person.addPersonName("Trubambas"); // :)
bean.callPrint();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
my task is that i want to get current Person reference in UsePersonBean which created by client.
i think @EJB annotation alwayes makes new reference.
could anybody tell me how i can get current session objects ??
like HTTPSession in Servlets ....
is it right if i use
private @Resource SessionContext ctx;
but somewhere i found that "private @Resource SessionContext ctx;" and "@EJB annotation" are the same.
thanks.