package com.fourinone; import java.rmi.RemoteException; public class WorkerServiceProxy extends PoolExector { Worker wk; private RecallException rx; private static boolean InetFlag = true; private String host=null; private int port; protected WorkerServiceProxy(String host, int port, String sn) { this.host = host; this.port = port; wk = BeanContext.getWorker(host, port, sn); rx = new RecallException(); } @Delegate(interfaceName="com.fourinone.Workman",methodName="receive",policy=DelegatePolicy.Implements) public boolean receiveMaterials(WareHouse inhouse) { boolean received = false; try{ received = wk.receiveMaterials(inhouse); }catch(Exception e){ LogUtil.info("receiveMaterials", "exception", e); } return received; } @Delegate(interfaceName="com.fourinone.WorkerLocal",methodName="getHost",policy=DelegatePolicy.Implements) public String getHostName(){ return host; } @Delegate(interfaceName="com.fourinone.WorkerLocal",methodName="getPort",policy=DelegatePolicy.Implements) public int getPortNum(){ return port; } @Delegate(interfaceName="com.fourinone.Workman",methodName="getHost",policy=DelegatePolicy.Implements) public String getHost(){ return host; } @Delegate(interfaceName="com.fourinone.Workman",methodName="getPort",policy=DelegatePolicy.Implements) public int getPort(){ return port; } @Delegate(interfaceName="com.fourinone.WorkerLocal",methodName="setWorker",policy=DelegatePolicy.Implements) public void setWorkerObject(MigrantWorker mwobj){ try{ //System.out.println("setWorkerObject:"+mwobj); InetStart(); wk.setMigrantWorker(mwobj); }catch(Exception e){ LogUtil.info("setWorkerObject", "exception", e); } } @Delegate(interfaceName="com.fourinone.CtorLocal",methodName="giveTask",policy=DelegatePolicy.Implements) public WareHouse giveTaskServiceProxy(WareHouse inhouse){ return doTaskServiceProxy(inhouse); } @Delegate(interfaceName="com.fourinone.WorkerLocal",methodName="interrupt",policy=DelegatePolicy.Implements) public void cancel(){ try{ wk.stopTask(); }catch(Exception e){ LogUtil.info("Interrupt", "exception", e); } } @Delegate(interfaceName="com.fourinone.WorkerLocal",methodName="doTask",policy=DelegatePolicy.Implements) public WareHouse doTaskServiceProxy(WareHouse inhouse){ return doTaskServiceProxy(inhouse, 0); } @Delegate(interfaceName="com.fourinone.WorkerLocal",methodName="doTask",policy=DelegatePolicy.Implements) public WareHouse doTaskServiceProxy(final WareHouse inhouse, long t) { if(!ConfigContext.getServiceFlag()&&rx.tryRecall(inhouse)==-1) return null; final WareHouse outhouse = new WareHouse(false); execute(new Runnable(){ public void run(){ try{ //System.out.println(inhouse); WareHouse wh = wk.doTask(inhouse); if(wh!=null) { if(!ConfigContext.getServiceFlag()) rx.setRecall(false); outhouse.putAll(wh); } //System.out.println(outhouse); outhouse.setReady(FileResult.READY); }catch(Exception e){ //System.out.println("doTaskServiceProxy:"+e); LogUtil.info("doTaskServiceProxy", "exception", e);//e.getMessage() cant log worker exception info //e.printStackTrace(); rx.setRecall(false); outhouse.setReady(FileResult.EXCEPTION); } //outhouse.setReady(true); } },new Runnable(){ public void run(){ cancel(); } },t); return outhouse; } public WareHouse dotaskimpl(final WareHouse inhouse){ final WareHouse outhouse = new WareHouse(); //final WareHouse aehouse = new WareHouse("doTask",new WareHouse()); new AsyncExector(){ public void task(){ try{ outhouse.putAll(wk.doTask(inhouse)); }catch(RemoteException e){ LogUtil.info("AsyncExector", "WareHouse", e); } } }.run(); return outhouse;//(WareHouse)aehouse.getObj("doTask"); } private static void InetStart(){ if(InetFlag){ BeanContext.startInetServer(); InetFlag = false; } } }