日期:2014-05-19  浏览次数:20705 次

关于JNDI的原理,求解惑,经思考后提出的问题.麻烦大家了.
最进学习Java JNDI
有点问题想不明白

在学习Java RMI的时候用到了JNDI

Context namingContext = new InitialContext();
namingContext.rebind("rmi:Service1", service1);
//将对象(Service1)注册到本机(或其他机器)上监听1099(默认)端口的rmiregistry注册表进程中

问题一:那个rmiregistry算不算JNDI的提供者呢?

问题二:如果rmiregistry 是 JNDI 的提供者 , 
  那么所有的 JNDI提供者 都是通过 监听某一端口 来监听 其他主机或本机 对 注册对象的 访问 

吗?

之所以有以上的想法,是因为在学JMS的时候在jndi.properties中看到这样的配置,
java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://localhost:61616

通过 JNDI 调用是不是类似于以下的方式:
1.配置JNDI提供者.
2.通过JNDI接口取得绑定的对象(类似于存根).
3.调用绑定对象的方法.
4.绑定对象 序列化方法参数等信息 然后 通过它内部的URL 发送请求 阻塞线程
5.服务器监听到请求,,反序列化,调用相关类的相关方法,将返回值序列化并通知客户端绑定对象
6绑定对象端收到结果反序列花,线程继续.

大体是这样的流程吗?

上面问题都是经过思考后提出来的,希望大家能帮帮我.
新手,分不多
谢谢大家了.

------解决方案--------------------
JNDI是用来访问目录服务的一套接口
这其实分成了两块
一个是JNDI访问
一个是实际数据存放的目录服务

关于目录服务,可以去GOOGLE一下,看看LDAP,AD之类的说明应该就清楚了
简单的说就是一组键值对的数据

JNDI其实并不做什么特别的事情,只是根据你提供的键名,在目录服务中查找到对应的键值返回给你
设计JNDI的目的是为了用一个通用的接口来访问到系统上的一些特殊资源,从而屏蔽了对于不同资源的访问方式的不同

JNDI可访问的现有的目录及服务有:   DNS、XNam 、Novell目录服务、LDAP、 CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS