Tag: rmi

是否可以在两个类之间使用RMI双向?

我想在两个类(A和B)之间共享一些信息,它们运行在不同的java程序中。 我没有编写完整的通信协议,而是想为此目的使用java内置rmi类。 目前,B类能够远程运行属于A类的方法。 是否有可能在A类中使用相同的“连接”来调用B类的方法? 否则我可能要实施第二个rmi服务…… BR, 马库斯

Java RMI和线程同步问题

我实际上有两个关于Java RMI和线程同步的问题: 1)如果我将RMI远程方法实现为同步,它们是否保证互斥? 我需要确保没有两个我的RMI方法(提供给客户端的方法)同时执行。 2)我有一个服务器定期执行的方法。 它用于清理。 当远程客户端运行/使用任何RMI方法时,我必须确保不执行此特定方法。 此外,当该方法运行时,不应该进行RMI调用。 即客户必须等待。 知道我怎么能这样做吗? 我读过有关Locks的内容,但我不知道如何在这种情况下使用它们。 我已经考虑过将RMI方法实现为静态并在RMI接口中包含清理方法,但它似乎并不是解决问题的优雅方法。 我还将RMI接口内的清理方法编写为synchronized。 当我运行它进行测试时,方法之间似乎没有冲突,但我无法确定。 谢谢你的时间和答案。

本地JVM之间的通信

我的问题:我可以/应该采用什么方法在本地运行的两个或多个JVM实例之间进行通信? 问题的一些描述: 我正在为一个项目开发一个系统,该系统需要单独的JVM实例来完全隔离某些任务。 在它运行时,’父’JVM将创建它将期望执行的’子’JVM,然后将结果返回给它(以相对简单的POJO类或结构化XML数据的格式)。 不应使用SysErr / SysOut / SysIn管道传输这些结果,因为孩子可能已经将这些结果用作其运行的一部分。 如果子JVM在一定时间内没有响应结果,则父JVM应该能够通知子进程停止处理或终止子进程。 否则,子JVM应在完成其任务结束时正常退出。 迄今为止的研究: 我知道有许多技术可能有用,例如…… 使用Java的RMI库 使用套接字传输对象 使用Cajo,Hessian等分发库 …但我有兴趣听取其他人在推行其中一种方案或其他方案之前可能会考虑的方法。 感谢您对此提供任何帮助或建议! 编辑: 要转移的数据量相对较小,它主要只是少数包含字符串的POJO,这些字符串将代表子项执行的结果。 如果任何解决方案在大量信息上效率低下,这在我的系统中不太可能成为问题。 传输的数量应该是非常静态的,因此不必是可扩展的。 转移的延迟 –在这种情况下不是一个关键问题,尽管如果需要对结果进行任何“轮询”,这应该能够相当频繁而没有显着的开销,因此我可以在以后维护响应式GUI(例如进度条)

配置RMI主机,以便它知道哪个客户端端口正在访问它

我一直在研究Spring RMI,我已经建立了一个主机和一个客户端。 以下是我的主机的代码。 我想以这样的方式修改它,主机应该知道哪个客户端正在访问它,所以换句话说服务器应该知道哪个客户端端口正在访问它。 我怎样才能在Spring RMI中实现这一点? 界面 : – package com.javatpoint; public interface Calculation { int cube(int number); } 上课 : – package com.javatpoint; public class CalculationImpl implements Calculation{ @Override public int cube(int number) { return number*number*number; } } 最后是主机配置xml 以下是我使用的类 界面 : – package com.javatpoint; public interface Calculation { int cube(int number); } 实施类 […]

RMI和CORBA的差异?

我正在学习决赛并且有一些关于RMI和CORBA的问题。 这些是从学习指南中获取的讨论问题,因此没有真正的应用背景。 为什么RMI和CORBA基于TCP? 问题表明要根据调用语义来回答。 到目前为止我所想到的是TCP将比UDP更可靠,而在RMI / CORBA中,我们需要网络可靠性。 我还读到了TCP深深嵌入本机Java网络类的地方。 我对此声明没有信心,因为CORBA可以用任何语言实现。 讨论RMI和CORBA名称服务之间的区别。 我对这个问题有点困惑,因为我到目前为止所读到的是RMI和CORBA是融合技术,RMI可以访问CORBA对象。 我现在如何理解,名称服务似乎非常相似,任何差异都不值得注意。 为什么RMI需要显式动态调用而不像CORBA? 我没想出任何东西。 我意识到我在问三个不同的问题,但它们似乎都有关系。

正在使用的远程方法调用端口

我用RMI创建了一个Server,Client类程序。 但是每当我从命令提示符启动rmiregistry后运行我的服务器时,就会抛出已经处于使用状态的端口错误。 只有我开始了这个体验。 我从netstat检查了它。 服务器代码: public class Server implements Runnable, Linker{ private static Server server = null; private static Linker l = null; private String name = null; public Server(){} public void setName(String name){ this.name = name; } public String getName(){ return name; } public void run(){ while(!(“Andy”).equalsIgnoreCase(name)){ } } public static void createStub(){ try{ […]

如何设置rmiregistry使用的类路径?

我正在尝试制作Java RMI客户端/服务器应用程序。 我在启动应用程序的服务器端时遇到问题,因为当我尝试启动应用程序的服务器端时,它在调用Registry.bind()方法期间一直运行到ClassNotFoundException 。 我从这里的简单教程开始: http : //docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html 。 按照这些说明操作后,它最初抛出一个ClassNotFoundException,抱怨它找不到“example.hello.Hello”。 我能够通过从教程中的destDir目录启动rmiregistry来解决这个问题,因为rmiregistry显然使用它的初始起始目录作为其类路径的一部分。 之后我开始使用我的其他测试应用程序,直到我开始在服务器类中使用第三方jar文件之前我一直很好。 现在,如果我的服务器类引用任何jar文件中的任何内容,则Registry.bind()会抛出ClassNotFoundException,因为rmiregistry应用程序不知道这些jar文件。 据我所知,rmiregistry不接受任何类型的路径启动arg,所以我想知道如何告诉它我想要它承认什么类路径。 根据这里的教程: http : //docs.oracle.com/javase/tutorial/rmi/running.html ,“你必须确保你将运行rmiregistry的shell或窗口没有设置CLASSPATH环境变量或有一个CLASSPATH环境变量,它不包含你想要下载到远程对象客户端的任何类的路径。“ 这听起来与我需要的相反……或者我读错了吗? 有没有人有任何成功启动使用第三方jar的RMI客户端/服务器(在我的情况下,commons-io,commons-logging和rmiio)? 这是在Windows上,顺便说一下。 更新我找到了解决方法。 请参阅下面的答案。

Applet – 服务器通信,我该怎么办呢?

我有一个applet,我必须向Web应用程序发送请求,以从数据库中的服务器获取数据。 我正在使用对象,服务器响应对象非常有用!! applet如何与服务器通信? 我认为Web服务方法,RMI和……让我开心,但哪个最好又可靠?

Rmi连接被localhost拒绝

我使用java rmi时遇到问题: 当我试图运行我的服务器时,我得到一个connectException(见下文)。 执行重新绑定方法时发生exception: Runtime.getRuntime().exec(“rmiregistry 2020”); MyServer server = new MyServer(); Naming.rebind(“//localhost:2020/RemoteDataPointHandler”, server); 当使用rmi:// localhost:2020 / RemoteDataPointHandler时,它也不起作用。 使用默认端口也不起作用。 我也尝试过使用127.0.0.1的ip-address,但效果相同。 我的运行时args: -Djava.security.policy=java.security.AllPermission 线程“main”中的exceptionjava.rmi.ConnectException:Connection拒绝主机:localhost; 嵌套exception是: java.net.ConnectException:连接被拒绝 at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574) at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185) at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171) at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:306) at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source) 在java.rmi.Naming.rebind(Naming.java:160) 在be.fortega.knx.server.Main。(Main.java:25) 在be.fortega.knx.server.Main.main(Main.java:16) 引起:java.net.ConnectException:连接被拒绝 at java.net.PlainSocketImpl.socketConnect(Native Method) 在java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 在java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:433) 在java.net.Socket.connect(Socket.java:524) 在java.net.Socket.connect(Socket.java:474) 在java.net.Socket。(Socket.java:371) 在java.net.Socket。(Socket.java:184) at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22) 在sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128) at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569) […]

Java RMI:连接被拒绝

我为RMI的客户编写了以下代码。 但是得到 java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: java.net.ConnectException: Connection refused: connect 代码: import java.rmi.*; import java.net.*; import java.rmi.registry.*; class client { public static void main(String [] ars) { Iface serv; Registry r; String serveraddr = ars[0]; String serverport = ars[1]; String text = “Hey jude”; System.out.println(“Sending” + text); try{ r = […]