JavaRMI,我可以发送一个序列化对象而不将类文件放在webserver上吗?

JavaRMI,我可以发送一个序列化对象而不将类文件放在webserver上吗?,java,serialization,rmi,Java,Serialization,Rmi,我最近在试验RMI,发现如果类文件没有存储在Web服务器上,我似乎无法发送序列化对象。这是否意味着我的所有可序列化类都需要放在Web服务器的类路径中 在我看来,这并不是最好的设计。是的,类必须在两侧都存在。是的,类文件也必须存在于Web服务器上,正如RMI(很久以前)打算通过网络发送类的实例一样。如果您只是希望在没有任何封装类业务行为的情况下将数据发送到web服务器,那么有许多更新和更简单的方法(JSON、XML、SOAP等)来简单地发送数据。否。所有这些答案都是错误的 如果使用RMI代码基特性

我最近在试验RMI,发现如果类文件没有存储在Web服务器上,我似乎无法发送序列化对象。这是否意味着我的所有可序列化类都需要放在Web服务器的类路径中


在我看来,这并不是最好的设计。

是的,类必须在两侧都存在。

是的,类文件也必须存在于Web服务器上,正如RMI(很久以前)打算通过网络发送类的实例一样。如果您只是希望在没有任何封装类业务行为的情况下将数据发送到web服务器,那么有许多更新和更简单的方法(JSON、XML、SOAP等)来简单地发送数据。

否。所有这些答案都是错误的


如果使用RMI代码基特性,则类不需要同时存在于两侧。您可以设置一个Web服务器来托管JAR文件,并设置-Djava.rmi.server.codebase=来定义这些类在何处作为这些JAR文件的URL列表可用。您可以在服务器或客户机上设置,也可以在两者上设置,这取决于谁将发送另一方没有的类。然后RMI用这些URL注释这些类,以便目标知道从何处获取它们,并根据需要下载它们。

是的,它们需要同时存在于服务器和客户端类路径中。由于它不是最好的设计,请记住,它与JavaEE本身一样古老,在当时是相当先进的。在SOAP和web服务的时代,虽然它是一个遗物。谢谢,现在你提到它是那么古老,我可以理解为什么有些事情没有我希望的那么顺利。好吧,对象的方法实现不在对象的序列化版本中。为此,您需要类定义。我想您可以定义自己的类加载器,并提前发送尚未遇到的对象的类定义。当然,您最好相信您的客户机只发送您觉得执行起来舒服的代码,这样就可以将类放在两者上sides@MauricePerry它将动态地从代码库端加载到目标端。它与静态的“put”不同。@EJP好吧,OP明确表示他不想要that@MauricePerry他明确表示,他不想“将序列化的类放入Web服务器的类路径”。RMI代码库特性会根据需要自动、动态地将它们加载到服务器VM中。它与类路径没有任何关系。因此,这不是他“明确表示他不想要的”。