【问题标题】:Is it possible to pass an anonymous object as argument of an RMI method?是否可以将匿名对象作为 RMI 方法的参数传递?
【发布时间】:2015-01-23 11:16:40
【问题描述】:

我正在尝试通过 RMI 调用一个远程方法,该方法采用 MyData 类型的 1 个参数,这是服务器端和客户端都知道的接口。

在我的客户端类MyClass中,我创建了一个MyData类型的匿名对象,并将它传递给远程方法,结果出现异常:

Caused by: java.lang.reflect.InvocationTargetException
    at wt.method.RemoteMethodServer.invoke(RemoteMethodServer.java:795)
    at 
    ... 2 more
Caused by: java.lang.ClassNotFoundException: MyClass$1 (no security manager: RMI class loader disabled)

问题:我必须使用接口MyData实现 来传递RMI 方法参数吗?该实现在服务器端和客户端都是已知的。

【问题讨论】:

  • 您的注册表似乎不知道它。
  • @PeterLawrey 这里没有证据表明涉及到 Registry,如果客户端正在调用远程方法,它一定已经成功地完成了 Registry 查找。

标签: java rmi anonymous-class


【解决方案1】:

有可能:

  1. 该类部署到对等方的 CLASSPATH,或通过代码库功能提供,
  2. 定义它的类是Serializable
  3. 您意识到并接受外部类实例将与匿名类一起发送,因为它是内部类并且具有对其外部类的引用,因此外部类也必须部署到对等方或可通过代码库功能获得。

(2) 可能不正确,并且可能出于除此之外的任何原因不需要为真,并且 (3) 很可能是不正确的,因为它很可能是一个仅限客户端的类与服务器无关。

不要这样做。没有优点,也有几个缺点。使用外部或静态类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多