97 lines
2.7 KiB
Java
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;
|
|
}
|
|
}
|