/* JFox, the OpenSource J2EE Application Server
 *
 * Copyright (C) 2002 huihoo.com
 * Distributable under GNU LGPL license
 * See the GNU Lesser General Public License for more details.
 */

package org.jfox.ejb.examples.protocol;

import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionContext;
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.naming.Context;
import javax.naming.InitialContext;

import org.jfox.ejb.examples.stateful.WorldHome;
import org.jfox.ejb.examples.stateful.World;
import org.jfox.ejb.ExtendedEJBHome;

/**
 * 
 * @author <a href="mailto:young_yy@hotmail.com">Young Yang</a>
 */

public class HelloBean implements SessionBean {
  private int count = 0;

  public HelloBean() {
  }

  public String getVoice() throws RemoteException {
    count++;
    return "Hello,World";
  }

  /**
   * 访问另外一个 Bean,将默认使用 LOCAL 协议进行本地调用
   */
  public int getCount() throws RemoteException {
    return count;
  }

  public String getWordByLocal() throws RemoteException {
    try {
      Context ctx = new InitialContext();
      Object obj = ctx.lookup("" + WorldHome.class.getName().replace('.','/'));
      WorldHome home = (WorldHome)javax.rmi.PortableRemoteObject.narrow(obj,WorldHome.class);
      ((ExtendedEJBHome)home).useProtocol("LOCAL"); // 可以省略,ejb 之间的调用默认将采用 Local 协议调用
      World world = home.create();
      return world.getWord();
    }
    catch(Exception e){
      throw new RemoteException(e.getMessage(),e);
    }
  }

  public String getWordByJRMP() throws RemoteException {
    try {
      Context ctx = new InitialContext();
      Object obj = ctx.lookup("" + WorldHome.class.getName().replace('.','/'));
      WorldHome home = (WorldHome)javax.rmi.PortableRemoteObject.narrow(obj,WorldHome.class);
      ((ExtendedEJBHome)home).useProtocol("JRMP"); // EJB 之间的调用强行使用 JRMP 协议
      World world = home.create();
      return world.getWord();
    }
    catch(Exception e){
      throw new RemoteException(e.getMessage(),e);
    }
  }

  public void ejbCreate() throws CreateException, RemoteException  {
  }

  public void setSessionContext(SessionContext sessioncontext) throws EJBException {
  }

  public void ejbRemove() throws EJBException, RemoteException {

  }

  public void ejbActivate() throws EJBException, RemoteException  {

  }

  public void ejbPassivate() throws EJBException, RemoteException  {
  }
}