Tag: rmi

如何让JMX绑定到特定的接口?

我目前正在使用com.sun.management.jmxremote.*属性启动Java VM,以便我可以通过JConsole连接到它以进行管理和监视。 不幸的是,它会侦听机器上的所有接口(IP地址)。 在我们的环境中,通常情况下,同时在一台机器上运行多个Java VM。 虽然可以告诉JMX监听不同的TCP端口(使用com.sun.management.jmxremote.port ),但是让JMX使用标准JMX端口并绑定到特定的IP地址(而不是全部)会很好。他们)。 这样可以更容易地找出我们通过JConsole连接到哪个VM(因为每个VM实际上“拥有”自己的IP地址)。 有没有人想出如何让JMX监听单个IP地址或主机名?

Java RMI – UnicastRemoteObject:UnicastRemoteObject.exportObject()和扩展UnicastRemoteObject()有什么区别?

我正在准备考试,我有一个问题,我希望有人能回答我。 它关于RMI和远程对象。 我想知道为什么这两个实现之间存在很大差异。 一个是扩展UnicastRemoteObject而另一个是将对象导出为UnicastRemoteObject。 我真的没有区别 – 顺便说一下,这只是一个快速而肮脏的例子:-) 接口: public interface EchoI extends Remote { public String echo() throws RemoteException } 这是服务器代码(版本1): public class EchoImpl extends UnicastRemoteObject implements EchoI { public EchoImpl { super(); } public static void main (String[] args) { try { LocateRegistry.createRegistry(Registry.REGISTRY_PORT); StoreHouse storehouseImpl = new StorehouseImpl(); Naming.rebind(“//localhost/StoreHouse.SERVICE_NAME”, storehouseImpl); System.out.println(“Server ready”); } catch […]

Java RMI和同步方法

我正在研究“分布式系统”一书(由Tanenbaum和Van Steen撰写),他们说的东西似乎与许多人在Java RMI和同步方法上的想法相冲突。 我认为在远程对象实现上使用synchronized方法 (因此在服务器上运行的实际实现)即使对该方法的调用来自不同的客户端机器(通过代理调用该方法),也会阻止该方法的并发执行……又名Stub)。 我已经看到很多人都有相同的看法,例如在这里看看: Java RMI和线程同步问题 在本书中,它表示使用RMI时不会阻止同步方法的并发执行。 这是本书的相关摘录(您只能阅读粗体句子,但如果您愿意,可以阅读上下文): 逻辑上,远程对象中的阻塞很简单。 假设客户端A调用远程对象的同步方法。 要使对远程对象的访问看起来与本地对象完全相同,有必要在实现对象接口的客户端存根中阻止A,并且A有直接访问权限。 同样,在将其请求发送到服务器之前,还需要在本地阻止另一台机器上的另一个客户端。 结果是我们需要在不同的机器上同步不同的客户端。 正如我们在Chap中讨论的那样。 6,分布式同步可能相当复杂。 另一种方法是仅允许在服务器上进行阻止。 原则上,这样可以正常工作,但是当客户端在服务器处理其调用时崩溃时会出现问题。 正如我们在Chap中讨论的那样。 8,我们可能需要相对复杂的协议来处理这种情况,这可能会显着影响远程方法调用的整体性能。 因此,Java RMI的设计者选择仅限制对代理的远程对象的阻塞(Wollrath等,1996)。 这意味着将阻止同一进程中的线程同时访问同一个远程对象,但不同进程中的线程不会。 显然,这些同步语义很棘手:在语法层面(即,在阅读源代码时),我们可能会看到一个漂亮,干净的设计。 只有在实际执行分布式应用程序时,才能观察到应该在设计时处理的意外行为。 […] 我认为文章“Java系统的分布式对象模型”( 可在此处获得 )在文本中引用了Wollrath et all, 1996括号内。 然而,我在该论文中找到的唯一相关段落就是这一段: 由于本地和远程对象的故障模式不同,分布式等待和通知要求所涉及的实体之间的协议更复杂(例如,客户端崩溃不会导致远程对象永久锁定),因此,不能轻易地适应Java中的本地线程模型。 因此,客户端可以在远程引用上使用notify和wait方法,但该客户端必须知道此类操作不涉及实际的远程对象,只涉及远程对象的本地代理(存根)。 我是以错误的方式解释文本还是事实上说使用RMI时同步方法“不是那么同步”?

如何使用Java RMI从服务器向客户端发送消息?

该应用程序是LAN的项目管理应用程序,它具有项目,任务等对象。因此RMI似乎是要走的路。 但是,当其他客户端触发事件时,它还会向某些客户端发送实时通知。 我读到服务器无法跟踪已在RMI中连接到它的客户端。 因此,作为一个选项,我认为服务器可以像预先连接到服务器的客户端一样连接到客户端。 这是怎么做的? 如果没有,我应该在这种情况下使用套接字编程吗? 如果这是一个愚蠢的问题,请提前道歉。

在RMI中通过引用问题?

有人可以告诉我,为什么这个RMI聊天应用程序无法正常工作,我的目标是通过远程对象或序列化对象实现客户端,服务器和逻辑之间的分离。 import javax.swing.*; import java.awt.event.*; import java.rmi.*; import java.rmi.server.*; public class ChatClient1 implements ICallback { JFrame frame = new JFrame(“Chat Client”); private JTextArea myText; private static JTextArea TAUinDispMsg; private JScrollPane myTextScroll; private JScrollPane TAUinDispMsgScroll; private String textString = “”; private boolean firstMessage = true; private static String name = null; private static final int HOR_SIZE […]

java.rmi.MarshalException

每当我尝试从客户端调用我的ejb时,我都会收到此错误: java.rmi.MarshalException: Failed to communicate. Problem during marshalling/unmarshalling; nested exception is: java.io.InvalidClassException: com.afrikbrain.util.message.MessageInfo; local class incompatible: stream classdesc serialVersionUID = 2285009932770474121, local class serialVersionUID = -2900394430145132451 at org.jboss.remoting.transport.socket.SocketClientInvoker.handleException(SocketClientInvoker .java:122) 它为什么会发生? 以及如何解决?

导出内部对象

可以说我有一台服务器和一台客户端。 客户端从服务器请求服务对象。 该对象通过复制传输,但也提供回调方法(bar)。 如果客户端然后要求服务器更新该对象(updateValue),则服务器将使用RMI调用bar()。 我试过这样的东西,但是当从服务器请求对象时我得到一个错误:“无法将com.sun.proxy。$ Proxy1的实例分配给ServiceObjImpl类型的ServiceObjImpl.barWrapper $ ServiceWbImpl实例中的BarWrapper” 服务对象接口: public interface ServiceObject{ public int foo(); public void bar(int var) throws RemoteException; } 服务器接口 public interface Service extends Remote { public ServiceObject get() throws RemoteException; public void updateValue(int var) throws RemoteException; } 服务器实现 public class Server extends UnicastRemoteObject implements Service { private static final long serialVersionUID […]

Java RMI ServerException – java.lang.ClassNotFoundException:org.prog.rmi.RmiServer_Stub

我inheritance了一些Java RMI客户端/服务器代码,虽然它在一台机器上运行良好,但我还没能让它在我的开发环境中运行。 问题是当我使用以下java.exe -Djava.security.policy=conf\server.policy -SRC;. -Djava.library.path=. org.prog.rmi.RmiServer运行服务器时java.exe -Djava.security.policy=conf\server.policy -SRC;. -Djava.library.path=. org.prog.rmi.RmiServer java.exe -Djava.security.policy=conf\server.policy -SRC;. -Djava.library.path=. org.prog.rmi.RmiServer 我收到以下错误: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: org.prog.rmi.RmiServer_Stub (no security manager: RMI class loader disabled) at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250) at sun.rmi.transport.Transport$1.run(Transport.java:159) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:155) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) […]

无法启动RMI Fibonacci服务器

我正在学习Java RMI,我创建了一个非常简单的服务器来计算Fibonacci数。 服务器(FibonacciServer)创建一个负责计算序列(Fibonacci)的对象,该对象实现一个接口(IFibonacci): FibonacciServer.java: package myrmifibonacciserver; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.RemoteException; public class FibonacciServer { public static void main(String args[]){ try{ Fibonacci fib = new Fibonacci(); Naming.rebind(“fibonacci”, fib); System.out.println(“Fibonacci Server ready.”); }catch(RemoteException rex){ System.err.println(“Exception in Fibonacci.main ” + rex); } catch (MalformedURLException ex) { System.err.println(“MalformedURLException ” + ex); } } } 斐波那契: package myrmifibonacciserver; […]

无法与远程计算机建立RMI连接

我似乎无法使用RMI连接2台机器。 为了确保我的代码没有问题,我复制了维基百科( http://en.wikipedia.org/wiki/Java_remote_method_invocation )中的简单示例,并编辑了代码以打印出一个简单的int。 我尝试提供所有权限并关闭所有防火墙,我仍然收到此错误: java.rmi.ConnectException: Connection refused to host 55.229.xx.xxx; nested exception is:java.net.ConnectException: Connection timed out: connect 在过去的3天里我一直在努力做到这一点,我似乎仍然无法克服基本的配置问题。