重用类状态通过Java反射调用相同的方法

时间:2014-08-27 08:41:47

标签: java reflection migration

我使用Java反射从本地应用程序调用远程服务器中的方法。作为调用该方法的请求的一部分,我还发送了Class对象的状态,该对象包含在运行时由方法修改的变量的值,这样当远程调用该方法并且应用程序获得来自服务器的结果,修改过的变量可以在我的本地应用程序中更新。

客户端

public MyClass {

double var1;
...


public long dotest(){
  Method toExecute;
  Class<?>[] paramTypes = null;
  Object[] paramValues = null;
  Long result = null;
        try{
          /*
          * Method specifications are stored and sent in a Class called MyPack to the server
          */
          toExecute = this.getClass().getDeclaredMethod("localdotest", paramTypes);
          Vector results = getCloudController().execute(toExecute,paramValues,this,this.getClass());
  if(results != null){
        result = (Long)results.get(0);
           copyState(results.get(1));
  }else{
           result = localdotest();
  }
  } catch (SecurityException se){
  } catch (NoSuchMethodException ns){
  } catch (Throwable th){
  } 
return result;

}

public void copyState(Object state){
   MyClass
   localstate = (MyClass) state;
   this.var1 = localstate.var1;
}

服务器

 myPack = (Pack) ois.readObject();
 functionName = myPack.getfunctionName();
 paramTypes = myPack.getparamTypes();
 paramValues = myPack.getparamValues();
 state = myPack.getstate();
 stateDType = myPack.getstateType();

 try {
   Class cls = Class.forName(stateDType.getName());
   Method method = cls.getDeclaredMethod(functionName, paramTypes);
   try{
        Object result = method.invoke(state, paramValues);
        ResultPack rp = new ResultPack(result, state);
        oos.writeObject(rp);
        oos.flush();
   } catch (IllegalAccessException ex) {
      returnnull(oos);
   } catch (InvocationTargetException ex) {
      returnnull(oos);
  } catch(Exception ex){
  ResultPack rp = new ResultPack(null, state);
  oos.writeObject(rp);
  oos.flush();
  }

但是,我注意到远程调用方法时发送的Class的状态始终相同。所以,我打算在服务器中缓存类的状态。目标是避免每次调用方法时发送相同的状态。

到目前为止,我认为没有任何问题。我试图找到相关的东西,这些链接12是我找到的最接近的主题,但我仍然无法摆脱这种“痒”。有人可以指出,如果采用这种策略有任何潜在的缺点。提前谢谢。

0 个答案:

没有答案