eva2/src/wsi/ra/jproxy/RMIProxyRemote.java
2007-12-11 16:38:11 +00:00

117 lines
3.6 KiB
Java

package wsi.ra.jproxy;
/**
* Title: The JProxy Framework
* Description: API for distributed and parallel computing.
* Copyright: Copyright (c) 2004
* Company: University of Tuebingen
* @version: $Revision: 1.1 $
* $Date: 2004/04/15 09:12:30 $
* $Author: ulmerh $
*/
/*==========================================================================*
* IMPORTS
*==========================================================================*/
import java.io.Serializable;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/*==========================================================================*
* CLASS DECLARATION
*==========================================================================*/
/**
*
*/
public class RMIProxyRemote implements InvocationHandler,Serializable {
private static ComAdapter m_Adapter;
private static boolean TRACE = true;
private Object m_Object;
private String m_ObjectName;
private RMIInvocationHandler m_RMIHandler=null;
private long m_counter=0;
/**
*
*/
public static Object newInstance (Object c,MainAdapterClient Client) {
return java.lang.reflect.Proxy.newProxyInstance (
c.getClass().getClassLoader(),
c.getClass().getInterfaces(),
new RMIProxyRemote(c,Client));
}
/**
*
*/
public static Object newInstance (Object c,String host) {
return java.lang.reflect.Proxy.newProxyInstance (
c.getClass().getClassLoader(),
c.getClass().getInterfaces(),
new RMIProxyRemote(c,host));
}
/**
*
*/
public static Object newInstance (Object c) {
return java.lang.reflect.Proxy.newProxyInstance (
c.getClass().getClassLoader(),
c.getClass().getInterfaces(),
new RMIProxyRemote(c));
}
/**
*
*/
public static void setComAdaper(ComAdapter x) {
m_Adapter = x;
}
/**
*
*/
private RMIProxyRemote (Object c, String host) {
m_ObjectName = c.getClass().getName();
if (m_Adapter==null) m_Adapter = ComAdapter.getInstance();
m_RMIHandler = m_Adapter.getRMIHandler(c,host);
if (TRACE) System.out.println("creating RMIProxyRemote " + c.getClass() + " " + host);
}
/**
*
*/
private RMIProxyRemote (Object c, MainAdapterClient Client) {
m_ObjectName = c.getClass().getName();
try {
m_RMIHandler = Client.getRMIHandler(c);
} catch (Exception e) {
System.out.println("RMIProxyRemote error ex "+e.getMessage());
e.printStackTrace();
}
if (TRACE) System.out.println("creating RMIProxyRemote " + c.getClass() + " " + Client.getClass());
}
/**
*
*/
private RMIProxyRemote (Object c) {
m_ObjectName = c.getClass().getName();
if (m_Adapter==null) m_Adapter = ComAdapter.getInstance();
m_RMIHandler = m_Adapter.getRMIHandler(c);
}
/**
*
*/
public Object invoke (Object proxy, Method m, Object[] args) throws Throwable {
long start = System.currentTimeMillis();
++m_counter;
//System.out.println("Before invoke:" +m.getName());
Object ret = m_RMIHandler.invoke(m.getName(),args);
long finish = System.currentTimeMillis();
//System.out.println("Calling :"+m.getName()+" of "+m_ObjectName+ " time :"+(finish-start));
return ret;
}
/**
*
*/
// public static void main(String[] args) {
// Doit remotex = (Doit) RMIProxyRemote.newInstance(new DoitImpl(),"primergy4.informatik.uni-tuebingen.de");
// remotex.doit();
// remotex.doit();
// remotex.doit();
// remotex.doit();
// }
}