javarmi:如何通过POJO
我成功地创建了RMI服务和客户端。我可以调用方法等等。但现在我想尝试以下方法:我想在服务上托管一个标准Java对象,比如LinkedList。 另外,我想“假装”我已经有了使用LinkedList的现有代码。我想要的是得到一个实际上由服务管理的LinkedList,但是我可以像访问普通LinkedList一样在本地访问它。除此之外,我还想做一些简单的日志记录,比如如果调用.add(),它会在服务器上写:“add called” 这不是为了生产,只是为了帮助我了解它是如何工作的 到目前为止,我已经尝试了很多东西。最有希望的是,我创建了一个扩展LinkedList并实现远程的类。此类尝试在构造函数中的注册表中注册自身,如下所示:javarmi:如何通过POJO,java,rmi,pojo,Java,Rmi,Pojo,我成功地创建了RMI服务和客户端。我可以调用方法等等。但现在我想尝试以下方法:我想在服务上托管一个标准Java对象,比如LinkedList。 另外,我想“假装”我已经有了使用LinkedList的现有代码。我想要的是得到一个实际上由服务管理的LinkedList,但是我可以像访问普通LinkedList一样在本地访问它。除此之外,我还想做一些简单的日志记录,比如如果调用.add(),它会在服务器上写:“add called” 这不是为了生产,只是为了帮助我了解它是如何工作的 到目前为止,我已经
试一试{
exportObject((远程)this);
Naming.rebind(“theList”,(Remote)this);
}
捕获(例外e){
系统输出打印项次(“失败”);
System.out.println(e.getMessage());
}
我必须这样做,因为我需要扩展LinkedList,因此我无法扩展UnicastRemoteObject
尝试在服务器端运行此操作时获得的输出:
fail
Connection refused to host: 192.168.178.27; nested exception is:
java.net.ConnectException: Connection refused
失败
拒绝主机连接:192.168.178.27;嵌套异常是:
java.net.ConnectException:连接被拒绝
在客户端:
java.lang.ClassCastException: MyList_Stub cannot be cast to java.util.LinkedList
at $Proxy0.createList(Unknown Source)
at RemoteProgram.main(RemoteProgram.java:27)
java.lang.ClassCastException:MyList_存根不能强制转换为java.util.LinkedList
位于$Proxy0.createList(未知源)
位于RemoteProgram.main(RemoteProgram.java:27)
提前谢谢 你想做的事情效率很低,不是一个好主意。基本上,您可以在方法调用中发送任何可以序列化的内容。如果您想要良好的性能,我建议您只有一个远程对象来表示您的服务,并充当您需要的所有服务的门面(每个远程对象都会产生单独的文件描述符,因此拥有大量远程对象通常不是一个好主意)。此外,如果您经常添加和删除对象,那么每次添加或删除元素时发送消息实际上是不明智的。我建议使用以下两种非常简单的方法创建一个远程对象:
LinkedList retrieveLinkedListByName(String);
boolean commitNewVersionOfLinkedListByName(String,LinkedList);
在应用程序启动时,您可以下载链接列表,然后定期在应用程序退出时发回链接列表。这应该比每次在链接列表中添加或删除元素时使用网络更有效。只要LinkedList的元素是可序列化的,你就不需要为它的发送做任何魔术(比如扩展remote)。你试图做的事情效率很低,也不是一个好主意。基本上,您可以在方法调用中发送任何可以序列化的内容。如果您想要良好的性能,我建议您只有一个远程对象来表示您的服务,并充当您需要的所有服务的门面(每个远程对象都会产生单独的文件描述符,因此拥有大量远程对象通常不是一个好主意)。此外,如果您经常添加和删除对象,那么每次添加或删除元素时发送消息实际上是不明智的。我建议使用以下两种非常简单的方法创建一个远程对象:
LinkedList retrieveLinkedListByName(String);
boolean commitNewVersionOfLinkedListByName(String,LinkedList);
java.lang.ClassCastException: MyList_Stub cannot be cast to java.util.LinkedList
at $Proxy0.createList(Unknown Source)
at RemoteProgram.main(RemoteProgram.java:27)
在应用程序启动时,您可以下载链接列表,然后定期在应用程序退出时发回链接列表。这应该比每次在链接列表中添加或删除元素时使用网络更有效。只要LinkedList的元素是可序列化的,就不需要为它的发送做任何魔术(比如扩展remote)
java.lang.ClassCastException: MyList_Stub cannot be cast to java.util.LinkedList
at $Proxy0.createList(Unknown Source)
at RemoteProgram.main(RemoteProgram.java:27)
LinkedList是一个具体的类,RMI与接口一起工作,因此您应该在客户端强制转换到List接口
LinkedList是一个具体的类,RMI使用接口,因此您应该在客户端强制转换到列表接口。同意其他海报,这是一个非常低效的设计
至于您的例外情况,我不知道如何在服务器中获得“拒绝连接”并仍然能够运行客户端。您需要发布堆栈跟踪。同意其他海报,这是一个非常低效的设计
至于您的例外情况,我不知道如何在服务器中获得“拒绝连接”并仍然能够运行客户端。您需要发布堆栈跟踪。…对于拒绝连接的异常,我将首先查看您正在使用的安全策略(假设没有防火墙等外部问题)…对于拒绝连接的异常,我将首先查看您正在使用的安全策略(假设没有防火墙等外部问题).嘿,迈克尔,谢谢你的回复。但我只是想理解这些概念。我指定的方式-您将如何进行,以便每次更改内容时都将其传输到服务器,尽管效率非常低?嘿,Michael,谢谢您的回复。但我只是想理解这些概念。按照我指定的方式—您将如何进行操作,以便每次更改某些内容时都将其传输到服务器,尽管效率非常低?