急求解决RMI的疑问??

问题描述

本人刚接触有关rmi,jndi的知识,在学习的工程中遇到了一些疑问。在测试rmi的时候我用两种方法都能得到远程方法的调用,方法一:服务器端:StringserverName="//localhost:8089/Remote_Hello";intport=8089;Registryregistry=LocateRegistry.createRegistry(port);//生成远程对象RemoteHellohello=newRemoteHello();//绑定对象Naming.rebind(serverName,hello);System.out.println("服务启动1,正等待客户端调用...");客户端:StringremoteName="//localhost:8089/Remote_Hello";Registryregistry=LocateRegistry.getRegistry(8089);//获得远程对象IRemoteHellohello=(IRemoteHello)Naming.lookup(remoteName);System.out.println(hello.getDate());方法二:服务器端:StringserverName="Remote_Hello";intport=8089;Registryregistry=LocateRegistry.createRegistry(port);//生成远程对象RemoteHellohello=newRemoteHello();registry.bind(serverName,hello);System.out.println("服务启动21,正等待客户端调用...");客户端:StringremoteName="Remote_Hello";Registryregistry=LocateRegistry.getRegistry(8089);//获得远程对象IRemoteHellohello=(IRemoteHello)registry.lookup(remoteName);//获得远程调用结果System.out.println("二1:"+hello.getDate());疑问:为什么在服务器端既可以使用Naming来绑定对象也可以用registry来绑定对象?他们之间的区别和关联在什么地方?还有就是我在学习的时候总觉得rmi和jndi视乎是混杂在一起的,不能很好的将他们界定开来。jndi可以将设备或者对象用一个名字来命名,然后我们可以使用这个名字来找到相应的设备或者对象,那么这个时候我们不就可以操作对象了吗?然后在这个rmi中的一些操作感觉就像和jndi一样似的。就像上面对象的注册或者绑定,以及客户端使用的lookup方法,似乎也是一种关联和查找的操作。希望大家能帮帮小弟解决下我心中的困惑。谢谢!!

解决方案

解决方案二:
rmi是调用远程的方法!JNDI是去查找指定目录的服务!
解决方案三:
呵呵,这样的解释可不是我想看到的啊!!谢谢了!
解决方案四:
我的理解是rmi更像是一个高级的socket,从程序的角度看,传的是对象,socket传的是bytejndi与DNS那种模式很像,绑定服务,查找服务,而服务本身,由其它程序提供
解决方案五:
>疑问:为什么在服务器端既可以使用Naming来绑定对象也可以用registry来绑定对象?他们之间的区别和关联在什么地方?Naming绑定和registry绑定没有本质的区别,你使用Naming.bind(...)的时候,底层还是调用registry进行绑定的。关于这一点,建议LZ看jdk源码,一目瞭然。>总觉得rmi和jndi似乎是混杂在一起的有这样的感觉,纯属正常。特别是使用EJB的时候,感觉到JNDI和RMI同在...不过,只需要你仔细研究JDK文档中关于JNDI的说明,你就会恍然大悟。JNDI通常分为API和SPI,API不言而喻就是一般场景使用的客户端API;而SPI指的是JNDI服务提供商需要实现的,SPI的实现可以基于LDAP,DNS,CORBA,RMI等,其实就是说客户端使用API连接到JNDI服务器,他也许并不关心你JNDI服务提供者怎么存储和管理(服务提供商可以把对象存储在LDAP,CORBA服务器上,但是客户端可以不关心这个问题,只要他能lookup着就可以了)。上面可以看出来,JNDI的SPI可以选择使用RMI的registry。以下是JDK文档中关于【RMIRegistryServiceProviderfortheJavaNamingandDirectoryInterfaceTM(JNDI)】的介绍原文,你仔细阅读一下.---TheRMIregistryserviceproviderallowsJNDIapplicationstoaccessremoteobjectsregisteredwiththeRMIregistry.Giventhelocationofaregistry,theproviderwillcreateanamingcontextwithbindingsfortheobjectsregisteredthere.SuchacontextmaybeboundintoanotherJNDI-accessiblenamespace(suchasLDAP,forexample).Referencestoindividualremoteobjectsmaylikewisebeboundintoanothernamespace.---再者,你使用JNDI的时候,如果对方的SPI是基于RMI的,那么你JNDI客户端一定会有如下Forexample:env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.rmi.registry.RegistryContextFactory");env.put(Context.PROVIDER_URL,"rmi://server:1099");如果说JNDI客户端连接的JNDI服务器是基于LDAP的,那么相应的Context.INITIAL_CONTEXT_FACTORY就需要编程LDAP的,PROVIDER_URL相应也要变为ldap://......不知道有否打开你的疑问。
解决方案六:
该回复于2011-04-08 16:52:42被版主删除
解决方案七:
不知LZ的问题解决了没有,可否赐教?

时间: 2024-07-31 14:48:44

急求解决RMI的疑问??的相关文章

跳转路径-急求解决,jsp页面中循环生成的form表单,action路径错误

问题描述 急求解决,jsp页面中循环生成的form表单,action路径错误 在jsp页面中用循环生成的form表单,为什么action不是想要的呢,代码贴在下面了 reply=(Map)request.getAttribute("REPLY"); while(rsComment.next()) { // 评论编号 String CId = rsComment.getString("CId"); // 评论人 String name=rsComment.getStr

test-《matlab智能算法30个案例》中的第29个案例运行不出图为什么呢?急求解决

问题描述 <matlab智能算法30个案例>中的第29个案例运行不出图为什么呢?急求解决 如题,显示 Error using plot Vectors must be the same lengths. Error in test (line 72) plot(1:length(t_train),t_train,'r-*',1:length(t_train),predict_1,'b:o') 解决方案 出错了当然不会显示.说向量的长度必须相等.错在第72行.最好把你的代码贴出来看看 解决方案二

源代码-急求解决~~~~~!!!!网站后台上传二维码图片,总是改变尺寸

问题描述 急求解决~~~~~!!!!网站后台上传二维码图片,总是改变尺寸 源代码如下 微信平台(二维码): 解决方案 源码在哪里?看不到.插入代码时使用代码片

急用-rhel6.1网卡问题急求解决

问题描述 rhel6.1网卡问题急求解决 ifconfig -a 没有eth0网卡,只有lo怎么解决, 解决方案 还是要安装网卡驱动 解决方案二: 我看了下/lib/modules/*/kernel/net/drive下有r8169.ko网卡驱动.可是不知道怎么加载到内核里面, 解决方案三: 我看了下/lib/modules/*/kernel/net/drive下有r8169.ko网卡驱动.可是不知道怎么加载到内核里面, 解决方案四: 我看了下/lib/modules/*/kernel/net/

tcp/ip socket-TCP/IP客户端与服务器之间的通信问题。。急求解决方法!!!!!

问题描述 TCP/IP客户端与服务器之间的通信问题..急求解决方法!!!!! 在做一个项目,问题,客户端和服务器端可以都开两个线程.即客户端打开线程1和线程2,服务器端打开线程1和线程2.在通信过程中服务器线程1与客户端线程1通信,服务器线程2与客户端线程2通信,这样子怎么实现呢???急求 解决方案 你先搞懂socket怎么用,然后网上有很多socket的例子,有的很不错,自己研究一下 解决方案二: socket我已经了解过了,实现了多个客户端同时与服务器之间的通信,现在想做客户端开两个线程一个

虚幻4创建c++的问题,急求解决

问题描述 虚幻4创建c++的问题,急求解决 用虚幻4创建c++时显示错误,显示无法获得环境变量,然而vs2015完整安装,也可以单独编译c++程序. 解决方案 应该是它跟VS2015的兼容问题.

ios-iOS真机测试出现一个问题,急求解决

问题描述 iOS真机测试出现一个问题,急求解决 iOS真机测试the identify used to sign the executable is no longer vaild 急求 在buidsetting里面已经设置证书是auto但没用 解决方案 你的证书一定丢到废纸篓了.所以清空钥匙串和xcode preference里面的profile,然后重下 解决方案二: code sign 设置为 IOS developer profile设置为auto team设置为none,随便你玩. 解

c++-在codeblocks上成功编译的代码放到VS2010上各种报错急求解决

问题描述 在codeblocks上成功编译的代码放到VS2010上各种报错急求解决 代码在网盘里,求大神解决谢谢了http://pan.baidu.com/s/1hqeUza8 解决方案 哥们你不厚道啊,container.h呢,发全了啊. 解决方案二: 我改好了,文件怎么给你?

数据库管理-关于eclipse中将数据导入数据库的中文乱码问题。急求解决

问题描述 关于eclipse中将数据导入数据库的中文乱码问题.急求解决 我也在网上找过相关问题,在eclipse中也改了三个地方的字符编码,以及数据库管理软件中的编码.但是提交到数据库后 ,还是有乱码,全部都是问号,图如下:开发">计算机数据库管理"> 以及代码: <%@page import="java.sql.DriverManager"%> <%@page import="java.sql.PreparedStateme