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.