/*
 * JBoss, the OpenSource J2EE webOS
 *
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 */
package org.jboss.ejb3.remoting;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.metadata.SimpleMetaData;

/**
 * Comment
 *
 * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
 * @version $Revision: 1.3.2.4 $
 */
public abstract class BaseRemoteProxy implements java.io.Serializable, InvocationHandler, RemoteProxy
{
   protected Object containerId;
   protected Interceptor[] interceptors;
   protected SimpleMetaData metadata;

   protected BaseRemoteProxy(Object containerId, Interceptor[] interceptors)
   {
      this.containerId = containerId;
      this.interceptors = interceptors;
   }

   protected BaseRemoteProxy()
   {
   }

   public SimpleMetaData getMetaData()
   {
      synchronized (this)
      {
         if (metadata == null) metadata = new SimpleMetaData();
      }
      return metadata;
   }

   public abstract Object invoke(Object proxy, Method method, Object[] args)
           throws Throwable;

   //Force all remote proxies to override toString()
   public abstract String toString();
}
