Tag: rmi

我应该使用哪种Java RMI / RPC / IPC技术?

我正在开发一个Java应用程序,它包含一个服务器和一个客户端(将来可能是多个客户端),它可以在不同的主机上运行。 对于这两者之间的通信,我目前使用自定义协议,该协议由通过网络套接字发送的JSON消息组成,并且两端都转换回Java Bean对象。 然而,应用程序越复杂,我注意到这种方法不符合我的标准并且过于复杂。 我正在寻找一个完善的,可能标准化的替代方案。 我已经看过远程方法调用(RMI),但是读到协议很慢(网络开销很大)。 我正在寻找的技术应该是轻量级的(协议和库明智的),健壮的,可能支持压缩(如果它支持大的话!),可能支持加密,良好的文档和良好的建立(例如Apache项目)。 它应该像使用RMI在远程对象上调用方法一样简单,但没有缺点。 你能推荐什么?

如何使用Jconsole连接到EC2?

我在我的macbook上运行Jconsole并尝试连接到没有图形的ec2上的linux终端(只有命令行访问)。 我像这样运行我的代码: java -jar program.jar -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9005 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.remote.ssl=false 我在这里读到通过EC2访问时出现问题(连接后出现问题),解决方案似乎是’ java.rmi.server.hostname to the public hostname of the instance ‘ 我对如何做到这一点感到有点困惑。 我尝试了两件事,一件是将它直接放在我的代码中(在void static main部分中): System.setProperty( “java.rmi.server.hostname” , “external_EC2_address” ); //in my real code I have the correct address here 系统接受了它(当我创建/上传runnable jar时没有错误)。 我还在我的实例上打开防火墙以允许所有TCP流量。 没运气。 我也试过上述声明作为启动程序的标志,但仍然没有运气。 有什么想法怎么做? 更新:这将显示我在Java的绿色,我更进一步(仍然无法工作),但我意识到把java -jar filename.jar,然后选项没有给我与结果相同的结果-jar在命令的末尾。 我试过了,程序尝试连接,然后说连接失败(之前它只是在登录屏幕上说它)。

我是否需要客户端,服务器和注册表上的所有类才能使用RMI?

我正在用RMI做我的第一步,我有一个简单的问题。 我有一个.jar文件,它有一个库中的几个方法的实现。 我想使用RMI在.jar文件中调用此方法。 我正在尝试创建一种包装来做它。 所以,我正在做这样的事情: 接口类 :此接口具有远程对象要实现的方法。 实现类 :这个类,具有接口方法的实现,每个实现调用.jar文件中的相应方法。 例如,jar文件有一个名为getDetails()的方法,它返回一个“ResponseDetail”对象。 ResponseDetail是我在.jar中的响应类。 服务器类 :它将方法绑定到rmiregistry 客户端类 :它将使用实现中实现的方法。 到现在为止还挺好? 🙂 现在,我有一个lib文件夹,其中包含.jar文件。 在服务器机器中,我已经部署了Interface,Implementation和Server类。 我已经生成了存根,并成功运行了rmiregistry,但是,有了这些细节: 要启动rmiregistry,我必须在命令行中设置类路径以引用.jar文件,否则我得到java.lang.NoClassDefFoundError。 我用这个.sh文件做到了: THE_CLASSPATH= for i in `ls ./lib/*.jar` do THE_CLASSPATH=${THE_CLASSPATH}:${i} done rmiregistry -J-classpath -J”.:${THE_CLASSPATH}” 要启动服务器,我还必须设置类路径以引用.jar文件,否则,我得到java.lang.NoClassDefFoundError。 我用过这样的东西: THE_CLASSPATH= for i in `ls ./lib/*.jar` do THE_CLASSPATH=${THE_CLASSPATH}:${i} done java -classpath “.:${THE_CLASSPATH}” Server 客户端机器:要从客户端机器运行Client.class文件,我必须将.jar文件复制到它,并在类路径中引用它们,否则,它不会运行,我得到java.lang。 NoClassDefFoundError错误。 我不得不在客户端机器上使用它: THE_CLASSPATH= for i […]

还需要rmic吗?

是不是java 1.5或更新版本不需要rmi接口编译器,只编译使用javac定义UnicastRemoteObject的java文件就足够了?Rmic仍然有效,如果你给它类文件它会生成一个存根类文件远程对象的实现。

Java RMI客户端访问被拒绝

我正在编写一个小型Java RMI服务器和客户端程序。 我花了一些时间试图找出错误消息但没有成功。 客户端生成以下错误: 试图连接到:127.0.0.1:3232错误!!!:StockClient:main:无法连接到服务器:java.rmi.UnmarshalException:错误解组返回标头; 嵌套exception是:java.rmi.UnmarshalException:错误解组返回标头; 嵌套exception是:sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:209)的sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)sun中的java.io.EOFException java.io.EOFException StockClient.StockClient.main(StockClient.java:44)中的.rmi.registry.RegistryImpl_Stub.lookup(未知来源)引起:java.io.DataInputStream.readByte(DataInputStream.java:250)的java.io.EOFException .rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:195)… 3个其他 仅在客户端尝试连接时,服务器才会出现以下错误。 此地址= localhost / 127.0.0.1,port = 3232线程“RMI TCP连接(空闲)”中的exceptionjava.security.AccessControlException:java.security中的访问被拒绝(java.net.SocketPermission 127.0.0.1:62586 accept,resolve) .AccessControlContext.checkPermission(AccessControlContext.java:374)在java.security.AccessController.checkPermission(AccessController.java:549)java.lang.SecurityManager.checkPermission(SecurityManager.java:532)java.lang.SecurityManager.checkAccept( SecurityManager.java:1157)sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.checkAcceptPermission(TCPTransport.java:636)at sun.rmi.transport.tcp.TCPTransport.checkAcceptPermission(TCPTransport.java:275)at sun.rmi .transport.Transport $ 1.run(Transport.java:158)位于sun.rmi.transport的sun.rmi.transport.Transport.serviceCall(Transport.java:155)的java.security.AccessController.doPrivileged(Native Method)。 tcp.TCPTransport.handleMessages(TCPTransport.java:535)at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler。 run0(TCPTransport.java:790)在java.util.concurrent.ThreadPoolExecutor的sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run(TCPTransport.java:649)java的java.Man.runTask(ThreadPoolExecutor.java:886) java.lang.Thread.run中的.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)(Thread.java:680) 由于服务器错误,我很确定它是安全性或注册表错误,服务器的安全策略是: grant {permission java.security.AllPermission; }; 并使用以下参数运行 -Djava.security.policy = client.policy 我已经尝试了我能找到的所有东西,但似乎还是继续绕圈子。 相关方法: 服务器: public static […]

通过RMI进行Java文件传输

通过RMI传输文件的最简单方法是什么?

如何提高客户端 – 服务器架构应用程序的性能?

我们有一个基于客户端 – 服务器架构的产品。 有关使用的技术堆栈的一些细节。 客户端 – Java Swing 服务器 – RMI Java数据库 – Oracle 客户端位于世界的不同地方,但java服务器和oracle数据库位于瑞典的同一台机器上。 因此,存在大量网络延迟。 位于偏远地区的客户表现糟糕。 该应用程序用于处理大小超过50MB的文件。 每项操作一般需要超过1000次网络呼叫。 根据您的经验,您如何解决这个问题并提高性能? 编辑:回答几个问题 文件包含需要处理和更新到数据库的实际业务数据,不能部分发送。 某些网络调用可能是批处理的,但需要对代码进行重大重构。 这是一个非常古老的应用程序,写于2001年。应用程序的设计是这样的,服务器保存所有服务,它们可以在代码中重用,业务逻辑在客户端编写。 因此,这种业务逻辑多次调用服务器,因而是天文数字。 -Snehal

RMI何时进行TCP连接?

我有一个测试程序T : 从服务器S上的RMI注册表获取Remote对象O的存根 在数百个并行线程中,调用此对象O上的方法。 我可以看到服务器S有许多“RMI TCP连接”线程。 我原以为只有一个,因为T上只有一个O的存根。 这是如何运作的?

在不同的网络上JBoss UnknownHostException

让JBoss在网络上工作时遇到了一些问题。 作为一个快速概述,我们有一个开发网络(我称之为DEV)和一个客户端网络(比如说…客户端!)。 它们通过防火墙连接。 在Dev网络中,服务器称为192.168.100.50,在客户端网络上称为10.0.100.50。 两个网络中的DNS通过DNS(sqlserver.dev.net)解析相关的IP。 sqlserver提供2个服务,一个通过.NET Web服务,另一个通过JBoss。 在DEV网络上运行客户端时,两种服务都可以正常工作。 在CLIENT网络上时,只有.NET服务可用。 尝试在以下代码中执行ContextLookup时,JBoss客户端抛出UnknownHostException: Properties p = new Properties(); p.put(“java.naming.factory.initial”, “org.jnp.interfaces.NamingContextFactory”); p.put(“java.naming.factory.url.pkgs”, “=org.jboss.naming:org.jboss.jnp.interfaces”); p.put(“java.naming.provider.url”, “sqlserver.dev.net:1199”); try { Context c = new InitialContext(p); cm = (ServiceRemote)c.lookup(Service.RemoteJNDIName); } catch (NamingException e) { e.printStackTrace(); throw new RuntimeException(e); } 例外情况是: 根exception是java.rmi.UnknownHostException:未知主机:SQLserver 我可以确认问题是客户端正在尝试连接到没有域名的’sqlserver’。 这已经通过将’sqlserver’添加到客户端的主机文件中进行了测试,并且工作正常。 另外,“SQLserver”的拼写很有趣,因为这是Windows主机报告主机名的方式,而不是它如何存储在DNS中。 我最好的猜测是,一旦客户端进行初始连接,JBoss会告诉客户端将来连接到’SQLserver’,客户端无法解析。 我已经尝试将以下系统属性设置为sqlserver的FQDN: jgroups.bind_addr bind.address java.rmi.server.hostname 有没有人有任何想法?

什么是RMI的rmic?

我想知道什么是RMI中的rmic以及它如何为我创建代理..