package com.fourinone;
public class WorkerLocalProxy extends PoolExector
{
MigrantWorker mwobj;
Thread mwThread;
private RecallException rx;
protected WorkerLocalProxy(){
rx = new RecallException();
}
@Delegate(interfaceName="com.fourinone.WorkerLocal",methodName="setWorker",policy=DelegatePolicy.Implements)
public void setWorkerObject(MigrantWorker mwobj){
this.mwobj = mwobj;
}
@Delegate(interfaceName="com.fourinone.WorkerLocal",methodName="interrupt",policy=DelegatePolicy.Implements)
public void cancel(){
try{
mwobj.interrupted(true);
mwThread.interrupt();
}catch(Exception e){
LogUtil.info("Interrupt", "exception", e);
}
}
@Delegate(interfaceName="com.fourinone.WorkerLocal",methodName="getHost",policy=DelegatePolicy.Implements)
public String getHost(){
return null;
}
@Delegate(interfaceName="com.fourinone.WorkerLocal",methodName="getPort",policy=DelegatePolicy.Implements)
public int getPort(){
return -1;
}
@Delegate(interfaceName="com.fourinone.WorkerLocal",methodName="doTask",policy=DelegatePolicy.Implements)
public WareHouse doTaskLocalProxy(WareHouse inhouse){
return doTaskLocalProxy(inhouse, 0);
}
@Delegate(interfaceName="com.fourinone.WorkerLocal",methodName="doTask",policy=DelegatePolicy.Implements)
public WareHouse doTaskLocalProxy(final WareHouse inhouse, long t)
{
if(rx.tryRecall(inhouse)==-1)
return null;
final WareHouse outhouse = new WareHouse(false);
execute(new Runnable(){
public void run(){
try{
mwThread = Thread.currentThread();
WareHouse wh = mwobj.doTask(inhouse);
if(wh!=null){
rx.setRecall(false);
outhouse.putAll(wh);
}
outhouse.setReady(FileResult.READY);
}catch(Exception e){
LogUtil.info("doTaskLocalProxy", "exception", e);
rx.setRecall(false);
outhouse.setReady(FileResult.EXCEPTION);
}
}
},new Runnable(){
public void run(){
cancel();
}
},t);
return outhouse;
}
}