Tag: rmi

ehcache在同一主机上的2个实例之间自动发现(通过多播)

我在同一台主机上运行了2个tomcat实例。 每个实例都运行相同的Web应用程序,该应用程序尝试通过RMI复制来传递一些ehcache缓存。 我在ehcache中使用自动发现配置,因此我不必明确定义哪些是主机,哪些是我想要复制的高速缓存。 ehcache实例无法找到彼此并进行通信: DEBUG (RMIBootstrapCacheLoader.java:211) – cache peers: [] DEBUG (RMIBootstrapCacheLoader.java:133) – Empty list of cache peers for cache org.hibernate.cache.UpdateTimestampsCache. No cache peer to bootstrap from. 如果我尝试相同的东西,但这次在一个单独的主机(盒子)上运行每个tomcat实例,那么一切都像魅力。 我是做错了什么,或者当实例在同一主机上时,不能通过多播进行自动发现? 我的配置使用RMI分布式缓存文档中提供的默认值: 在我希望复制的每个缓存区域内,我有: 谢谢

涉及RMI调用的Spring分布式事务可能吗?

背景 我有Spring Client应用程序,它使用RMI为两台服务器提供服务。 在客户端中,我将实体保存到数据库(简单),并使用实体的详细信息对两个服务器进行rmi调用。 我在服务器上使用Spring 3.0.2,客户端是一个简单的Spring-mvc站点。 要求 我的要求是,如果任何rmi调用对整个事务回滚的服务器失败,那么实体不会保存在客户端上,如果rmi调用成功,那么它也会回滚。 我对分布式事务比较陌生,但我想我想要一个使用RMI调用的XA事务。 我确实找到了关于这个主题的一个很好的链接,但它没有提到调用两个远程方法调用到不同服务器时的模式。 我希望在推荐阅读方面听到更多有关该主题的内容,以及有关如何使用spring实现此目的的任何指示。 是否可以使用事务管理器? 谢谢。

我们真的需要在java RMI中创建Stub吗?

我正在阅读一些RMI文档,所有书籍都说我们需要为客户端创建Stub才能与服务器通信。 但是,我试图不创建存根,事情就像一个魅力。 我把客户端程序放在一台机器上,服务器放在另一台机器上,事情很完美。 那么,创建Stub的实际目的是什么?我们真的需要创建一个吗? 谢谢。

为什么RMI注册表忽略了java.rmi.server.codebase属性

我正在为java RMI运行Hello World示例 1)我在一个空文件夹中运行注册表 motta@motta-laptop ~/tmp $ rmiregistry 2)我启动HTTP服务器以在运行时检索类。 download文件夹包含客户端 – 服务器的远程接口 motta@motta-laptop ~/download $ java NanoHTTPD 8080 3)我按照java RMI教程的建议启动服务器传递java.rmi.server.codebase属性 motta@motta-laptop ~/server $ java -Djava.rmi.server.codebase=”http://localhost:8080″ WarehouseServer RMI注册表未联系HTTP服务器并抛出exception(请参阅问题后的详细​​信息)。 但如果我做以下事情 1)使用java.rmi.server.codebase属性启动rmi注册表 motta@motta-laptop ~/tmp $ rmiregistry -J-Djava.rmi.server.codebase=”http://localhost:8080/” 2)像以前一样启动HTTP服务器 3)没有任何选项启动服务器 motta@motta-laptop ~/server $ java WarehouseServer 它有效,但为什么呢? 似乎在第一个过程中,RMI注册表忽略了java.rmi.server.codebase属性 谢谢 ================================= 我在跑步 java version “1.7.0_21” Java(TM) SE Runtime Environment (build 1.7.0_21-b11) […]

JRMP连接建立错误

我正在跟踪exception跟踪: java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: java.net.SocketTimeoutException: Read timed out at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:293) at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:190) 我在这方面阅读了一些论坛,但没有弄清楚这个例外的根本原因。 这是由于以下原因之一吗? 内存不足。 RMI调用由于对服务器的请求数量增加而导致失败,导致其中一个请求等待并导致此请求处理超时。 不兼容的jre版本或与JRE版本相关的任何内容。 任何网络相关问题。 防火墙相关。

Java:套接字还是RMI?

我需要将我们的应用程序分成轻量级的gui应用程序和业务逻辑应用程序。 这不是客户端/服务器设置,因为“服务器”组件只有一个客户端。 应用程序的另一个限制是它只有一个入口/出口点。 因此,如果我们使用RMI,它将只能在一个函数上。 所有表单数据已经包装成一个字符串并通过一个传输区域。 我应该只使用Java套接字来增强此应用程序,还是使用RMI? 还是其他一些Java技术? 我之前的post概述了我们的应用程序的要求,但它没有得到答复。 https://stackoverflow.com/questions/2604528/terminal-panel-pc-single-server-solution-client-server-or-rdp 干杯。

用RMI链接exception的坏主意?

抛出RemoteExceptions时使用exception链接是一个坏主意吗? 我们有一个RMI服务器,它执行以下操作: public Object doSomething() throws RemoteException { try { return getData(); } catch (CustomException ex) { throw new RemoteException(ex); } } 我在客户端中遇到由ClassNotFoundException引起的UnmarshallException。 从好的方面来看,事实certificateCustomException本身是导出的。 不幸的是,这个人内部的另一个exception是没有导出,这是ClassNotFoundException的来源。我认为层次结构是这样的: RemoteException – > CustomException – > SQLException – > NotExportedException 我看到的问题是,即使我们可以保证导出CustomException,我们也无法保证任何较低级别的exception。 因为这个原因,我倾向于永远不要使用RemoteExceptions进行exception链接。 相反,我认为我应该在服务器端记录堆栈跟踪并抛出一个简单的vanilla RemoteException,并没有链接到它的“cause”exception。 以前有人处理过这种情况吗?

帮助解决java rmi任务中的问题

我想编写一个应用程序,用java rmi在客户端和服务器之间共享桌面。 这是界面: public interface IServer extends Remote{ public void share(BufferedImage image) throws RemoteException; } —————————– //这是服务器端代码: public class ServerFrame extends JFrame implements IServer{ public static void main(String args[]) { try { ServerFrame frame = new ServerFrame(); frame.setVisible(true); LocateRegistry.createRegistry(1099); Naming.bind(“test”, frame); System.out.println(“Server Started Successfully…”); } catch (Exception e) { e.printStackTrace(); } } . . . […]

在Java中伪造堆栈跟踪

当您在Java中使用RMI时,exception的远程堆栈跟踪将在您收到时添加,有点像这样: ERROR Client received error when doing stuff: myapp.FooBarException: bla at server.myMethod() at rmi.callHandler() // and now, on the next line comes the client at rmi.sendCall(); at client.doServerMethod() at Thread.run() 这种堆栈跟踪“伪造”怎么办? 我想要它是什么(除了被激活之外)? 好吧,如果我能做到这一点,它会对我有所帮助: outer() { thread = new Thread(… inner(); // inner() throws // RuntimeException // at inner(); // at Runnable.run(); // at Thread.run(); // […]

RMI有多快?

我已经看到了这样一个问题: 两个独立的Java桌面应用程序之间的通信 (答案:JGroups),我正在考虑用JavaGroups或直接RMI实现某些东西,但速度至关重要。 我不会发送大量数据(MIDI消息的内容,每个3个字节,不过每三毫秒说两个消息),这将全部在同一台机器上。 认为同一台物理机上的RMI / JGroups会慢吗? (我的想法是我承受不起超过1毫秒的延迟,因为我已经有了一些,但我不确定如何在这种情况下最好地谈论速度。) 我想我的真正问题是: Java中的interspp通信是否有任何选项可以通过比TCP / IP更快的速度? 我的意思是已经用Java实现的东西,而不是我需要实现的JNI可能性:) 我知道,不要尽早优化所有这些,但也比抱歉更安全。