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

97 lines
2.7 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.2 $
* $Date: 2004/04/28 07:50:33 $
* $Author: ulmerh $
*/
/*==========================================================================*
* IMPORTS
*==========================================================================*/
import java.io.Serializable;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/*==========================================================================*
* CLASS DECLARATION
*==========================================================================*/
/**
*
*/
public class ThreadProxy implements InvocationHandler,
Serializable {
private Object m_Object;
private ThreadWrapper m_ThreadWrapper;
private int m_maxthreads = 8;
/**
*
*/
public static Object newInstance (Object obj) {
return Proxy.newProxyInstance(
obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(),
new ThreadProxy(obj));
}
/**
*
*/
public static Object newInstance (Object obj,int maxthreads) {
return Proxy.newProxyInstance(
obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(),
new ThreadProxy(obj,maxthreads));
}
/**
*
*/
public ThreadProxy (Object obj) {
m_Object = obj;
}
/**
*
*/
public ThreadProxy (Object obj,int maxthreads) {
m_Object = obj;
m_maxthreads = maxthreads;
}
/**
*
*/
public Object invoke (Object proxy,Method method,Object[] args) throws Throwable {
Class rettype = method.getReturnType();
if (rettype.equals(Void.TYPE)== true) {
if (m_ThreadWrapper == null) {
m_ThreadWrapper = new ThreadWrapper(m_maxthreads);
}
else {
m_ThreadWrapper.pleasewait();
}
m_ThreadWrapper.invoke(m_Object,method,args);
return null;
}
Object ret = null;
try {
if (method.getName().equals("isAlive")) {
if (m_ThreadWrapper != null) {
Boolean rret = new Boolean(m_ThreadWrapper.isAlive());
// System.out.println("calling is alive" +rret);
return rret;
}
}
if (m_ThreadWrapper != null)
m_ThreadWrapper.pleasewait();
ret = method.invoke(m_Object, args);
} catch (Exception e) {
System.out.println("ERROR +" + e.getMessage());
e.printStackTrace();
}
return ret;
}
}