package org.jfox.ejb.invoker;

import javax.naming.Context;

import org.huihoo.jfox.util.InitialContextHelper;
import org.jfox.ejb.ObjectId;

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

public class ContainerInvokerHelper {
  public final static String INVOKER_JNDI_PREFIX = "container-service";
  public static transient Context INITIAL_CONTEXT = InitialContextHelper.getInitialConext();

  public static ContainerRemote lookupContainerInvoker(String protocol) {
    try {
      return (ContainerRemote)javax.rmi.PortableRemoteObject.narrow(INITIAL_CONTEXT.lookup("/" + INVOKER_JNDI_PREFIX +"/" + protocol.toUpperCase()), ContainerRemote.class);
    }
    catch(Exception e){
      throw new RuntimeException(e);
    }
  }

  public static ClientContainerInvoker createClientInvocationHandler(String protocol,ObjectId objectId, ContainerRemote invoker) {
    try {
      Class invocationHandlerClass = Thread.currentThread().getContextClassLoader().loadClass("org.jfox.ejb.invoker." + protocol.toLowerCase() + "." + protocol.toUpperCase() + "ContainerInvoker");
      return (ClientContainerInvoker)invocationHandlerClass.getConstructor(new Class[]{ObjectId.class,ContainerRemote.class}).newInstance(new Object[]{objectId,invoker});
    }
    catch(Exception e){
      throw new RuntimeException(e);
    }
  }

  public static void main(String[] args) {

  }
}