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