2 Replies Latest reply on Sep 1, 2006 2:24 AM by paata lominadze

    Stateful Session Beans Interaction

    paata lominadze Master

      hi 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.