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