我想不通过RMI机制而通过Socket来实现这样一个远程方法调用:客户端(发出请求)
请求的内容是一个对象(包括要处理的数据和处理的方法),服务端(处理请求)通过预先定义好的接口持有这个对象,使用传过来的方法处理数据(服务端只有接口而没有具体的方法)。不想通过RMI实现的原因是想自主地控制网络层,而RMI依赖它的网络层实现。
问题的关键是我所知道的java标准对象序列化是不序列化方法的,方法怎么能和数据一起传递到服务端?方法到达服务端以后怎么执行,通过接口还是需要反射机制的配合?我看过一篇<代理模式与Socket联袂演绎远程方法调用的全过程>,它是在服务端预先定义方法,用代理模式通过socket传递一个call来执行服务端上的方法并返回结果。
我的情况很特殊,必须自己控制网络传输,并且服务端必须能执行一个客户端才有具体实现的方法。请高人指点,谢谢!

解决方案 »

  1.   

    http://www.jopener.com/category/web-services-tools/
      

  2.   

    中文版
    http://www.jopener.cn/category/web-services-tools/
      

  3.   

    首先,你需要一个classloader,将通过socket传送的类载入,注意,还有所有要被用到的类。
    然后用class.forname("xxx").newInstance();建立一个空对象。
    然后再通过反射将socket传过来的值注入新生成的对象中。
    如果你的客户端已经有了所要类的代码,那么就不需要做第一步了...
      

  4.   

    masse的http://www.jopener.cn/category/web-services-tools/
    没看明白什么意思,广告?我不是做J2EE、EJB的,这个程序是基于网络的桌面程序,所以我比较倾向于用socket解决问题,等我用timerri朋友给出的方法实现了,我再来个总结,呵呵,先谢过了,可能晚点结贴。
      

  5.   

    “我的情况很特殊,必须自己控制网络传输”不知道什么意思,不过你应该看下core java的卷2,里面有rmi工作原理的详细解释
    "并且服务端必须能执行一个客户端才有具体实现的方法。"你参数给客户端去算,算好了在接受结果就可以了
      

  6.   

    程序控制很困难的话考虑下其他方法,比如起个ftp上传然后远程控制部署这个类等等。
      

  7.   

    1.可以模拟java的序列化过程,
    自己实现这个过程.
    工作量不小.2.要么就强制使用java的序列化.3.要么就定义xml到java类的映射关系
    传递xml
    然后根据接收到xml来生成java对象.
      

  8.   

    http://www.ibm.com/developerworks/cn/xml/x-beans1
      

  9.   

    谢谢大家:)我想到了一个可能可用的方法,不过需要重载classLoader(),等我测试好了把代码发上来。我的问题的关键是要传递算法,不是传值,一般的序列化和xml还有beans都是传值的。这样一方没有class就不能成功反序列化。我想把class文件的内容保存在class对象里,class是可以序列化的,通过网路直接传到客户端,再实例化这个class,然后通过两边都有的接口操作事先约定好的API。总之就是传算法
      

  10.   

      jvm解析的是字节 一部分java对象可以. 传字节码过去..