User: starksm 
  Date: 01/06/01 15:08:46

  Added:       src/main/test/jboss/jrmp AString.java Client.java
                        Handler.java IRemote.java IString.java
                        MiniAppServer.java RemoteImpl.java
  Log:
  Simple tests of dynamic class loading for RMI/JRMP
  
  Revision  Changes    Path
  1.1                  jboss/src/main/test/jboss/jrmp/AString.java
  
  Index: AString.java
  ===================================================================
  package test.jboss.jrmp;
  
  import java.io.Serializable;
  
  public class AString implements IString, Serializable
  {
      private String theString;
  
      public AString(String theString)
      {
          this.theString = theString;
      }
      public String toString()
      {
          return theString;
      }
  }
  
  
  
  1.1                  jboss/src/main/test/jboss/jrmp/Client.java
  
  Index: Client.java
  ===================================================================
  package test.jboss.jrmp;
  
  import java.io.File;
  import java.io.InputStream;
  import java.io.ObjectInputStream;
  import java.net.Socket;
  import java.net.URL;
  import java.net.URLClassLoader;
  import java.rmi.MarshalledObject;
  import java.rmi.Remote;
  import java.rmi.RemoteException;
  import java.rmi.server.UnicastRemoteObject;
  import java.rmi.registry.LocateRegistry;
  import java.rmi.registry.Registry;
  
  /**
   *
   * @author  [EMAIL PROTECTED]
   * @version 
   */
  public class Client
  {
      public static void main(String[] args) throws Exception
      {
          IRemote remote = null;
          if( args.length == 1 )
          {
              Registry registry = LocateRegistry.getRegistry(args[0]);
              remote = (IRemote) registry.lookup("IRemote");
          }
          else
          {
              Socket cs = new Socket(args[0], 1100);
              InputStream is = cs.getInputStream();
              ObjectInputStream ois = new ObjectInputStream(is);
              MarshalledObject marshalledProxy = (MarshalledObject) ois.readObject();
              remote = (IRemote) marshalledProxy.get();
          }
          System.out.println("Found IRemote: "+remote);
          IString str = remote.copy("Hello");
          System.out.println("IRemote.copy -> "+str);
      }
  }
  
  
  
  1.1                  jboss/src/main/test/jboss/jrmp/Handler.java
  
  Index: Handler.java
  ===================================================================
  package test.jboss.jrmp;
  
  import java.io.Serializable;
  import java.lang.reflect.InvocationHandler;
  import java.lang.reflect.Method;
  import java.rmi.Remote;
  import java.rmi.RemoteException;
  
  /**
   *
   * @author  [EMAIL PROTECTED]
   * @version 
   */
  public class Handler implements InvocationHandler, Serializable
  {
      Remote remote;
      Handler(Remote remote)
      {
          this.remote = remote;
      }
      public Object invoke(Object proxy, Method method, Object[] args)      
            throws Throwable
      {
          return method.invoke(remote, args);
      }
  }
  
  
  
  1.1                  jboss/src/main/test/jboss/jrmp/IRemote.java
  
  Index: IRemote.java
  ===================================================================
  package test.jboss.jrmp;
  
  import java.rmi.Remote;
  import java.rmi.RemoteException;
  
  public interface IRemote extends Remote
  {
      public IString copy(String arg) throws RemoteException;
  }
  
  
  
  1.1                  jboss/src/main/test/jboss/jrmp/IString.java
  
  Index: IString.java
  ===================================================================
  package test.jboss.jrmp;
  
  public interface IString
  {
      public String toString();
  }
  
  
  
  1.1                  jboss/src/main/test/jboss/jrmp/MiniAppServer.java
  
  Index: MiniAppServer.java
  ===================================================================
  package test.jboss.jrmp;
  
  import java.io.File;
  import java.io.ObjectOutputStream;
  import java.io.OutputStream;
  import java.io.Serializable;
  import java.lang.reflect.Proxy;
  import java.net.ServerSocket;
  import java.net.Socket;
  import java.net.URL;
  import java.net.URLClassLoader;
  import java.rmi.MarshalledObject;
  import java.rmi.Remote;
  import java.rmi.RemoteException;
  import java.rmi.server.UnicastRemoteObject;
  import java.rmi.registry.LocateRegistry;
  import java.rmi.registry.Registry;
  
  /** A test server for dynamic class loading.
   *
   * @author [EMAIL PROTECTED]
   * @version $Revision: 1.1 $
   */
  public class MiniAppServer
  {
      private Registry registry;
      private Remote remoteImpl;
      private Remote stub;
      private URLClassLoader loader;
  
      public MiniAppServer() throws RemoteException
      {
          registry = LocateRegistry.createRegistry(1099);
      }
  
      private void loadObjects(String jarPath) throws Exception
      {
          File jarFile = new File(jarPath);
          URL[] urls = {jarFile.toURL()};
          ClassLoader parent = Thread.currentThread().getContextClassLoader();
          loader = new URLClassLoader(urls, parent);
          Thread.currentThread().setContextClassLoader(loader);
          // This causes the java.rmi.server.codebase value to be used for any classes 
loaded by loader
          //sun.rmi.server.LoaderHandler.registerCodebaseLoader(loader);
          remoteImpl = (Remote) 
loader.loadClass("test.jboss.jrmp.RemoteImpl").newInstance();
          stub = UnicastRemoteObject.exportObject(remoteImpl);
          System.out.println("Exported: "+stub);
      }
      private void bindToRegistry() throws Exception
      {
          registry.bind("IRemote", stub);
          System.out.println("Bound object under IRemote");
      }
      private void exportAsProxy() throws Exception
      {
          Handler handler = new Handler(stub);
          Class[] interfaces = {loader.loadClass("test.jboss.jrmp.IRemote")};
          Remote proxy = (Remote) Proxy.newProxyInstance(loader, interfaces, handler);
          MarshalledObject marshalledProxy = new MarshalledObject(proxy);
          // Wait for a client request for the proxy
          ServerSocket ss = new ServerSocket(1100);
          System.out.println("Waiting for client on port 1100...");
          Socket cs = ss.accept();
          System.out.println("Accepted client connection: "+cs);
          OutputStream os = cs.getOutputStream();
          ObjectOutputStream oos = new ObjectOutputStream(os);
          oos.writeObject(marshalledProxy);
          oos.close();
          cs.close();
          ss.close();
          System.out.println("Sent remote proxy");
      }
  
      public static void main(String[] args) throws Exception
      {
          System.setProperty("java.rmi.server.codebase", 
"http://siren:8080/jboss/remote.jar";);
          System.setProperty("java.rmi.server.hostname", "succubus");
          MiniAppServer appServer = new MiniAppServer();
          String jarPath = args.length > 0 ? args[0] : "remote.jar";
          appServer.loadObjects(jarPath);
          //appServer.bindToRegistry();
          appServer.exportAsProxy();
      }
  }
  
  
  
  1.1                  jboss/src/main/test/jboss/jrmp/RemoteImpl.java
  
  Index: RemoteImpl.java
  ===================================================================
  package test.jboss.jrmp;
  
  import java.rmi.Remote;
  import java.rmi.RemoteException;
  
  public class RemoteImpl implements IRemote
  {
      public IString copy(String arg) throws RemoteException
      {
          return new AString(arg);
      }
  }
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to