JNDI全称 Java Naming and Directory Interface
JNDI是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。JNDI目前所支持的技术包括LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。
JDNI通过绑定的概念将对象和名称联系起来。在一个文件系统中,文件名被绑定给文件。在DNS中,一个IP地址绑定一个URL。在目录服务中,一个对象名被绑定给一个对象实体。
JNDI中的一组绑定作为上下文来引用。每个上下文暴露的一组操作是一致的。例如,每个上下文提供了一个查找操作,返回指定名字的相应对象。每个上下文都提供了绑定和撤除绑定名字到某个对象的操作。JNDI使用通用的方式来暴露命名空间,即使用分层上下文以及使用相同命名语法的子上下文。
JNDI是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。JNDI目前所支持的技术包括LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。
JDNI通过绑定的概念将对象和名称联系起来。在一个文件系统中,文件名被绑定给文件。在DNS中,一个IP地址绑定一个URL。在目录服务中,一个对象名被绑定给一个对象实体。
JNDI中的一组绑定作为上下文来引用。每个上下文暴露的一组操作是一致的。例如,每个上下文提供了一个查找操作,返回指定名字的相应对象。每个上下文都提供了绑定和撤除绑定名字到某个对象的操作。JNDI使用通用的方式来暴露命名空间,即使用分层上下文以及使用相同命名语法的子上下文。
解决方案 »
- 网站支持多语言?
- 项目在本地正常上传到空间上(Resin 3.0.23 )jsp可以访问,action访问不了?这个问题困扰我好几天了,希望有高手帮忙
- Hibernate annotation
- URL与Socket ,DatagramSocket区别 和传送信息问题
- org.dom4j.DocumentException: Can't find bundle for base name
- 求救,myeclipse发布到tomcat丢失文件!
- 用过infoglue进来帮忙看看
- 在JBUILDER下将一个页面转化为struts格式的页面后,出现问题。请各位指教
- ejb开发查询的小问题?
- j2ee服务停止~~~,不是简单的事情
- 关于学习EJB 大家进来帮帮我谢谢
- 用excel做报表时候,怎样在excel中显示从数据库里读取的图片???
我想请教你,这句话如何理解?上下文是什么?JNDI绑定与上下文是怎么联系起来的?
谢谢!
jndi就是高级一点的对象命名机制,简单分开为命名服务和在此基础上的目录服务。
命名服务很简单啊,就是给个对象起个名,就像String s = "test String"是用s表示一个字符串一样。
但jndi的命名服务高级就高级在适用范围上。比如上面的例子里的s被绑定到了一个字符串上,但这个s的适用范围只在于某个方法执行周期(如果s是局部变量)或只在该jvm进程内,其它jvm进程内根本不可能通过s来引用到这个字符串,更不用说在其它机器上了。而jndi的命名服务中绑定的对象可以跨jvm进程甚至跨机器(通过网络)获取到。
怎么实现的呢?jndi服务,顾名思义就是有服务器和客户端的啦。我们用context.lookup(String name)方法查找到某个对象时,我们就是在利用jndi客户端获取该name对应的对象,而在某背后,肯定是在jndi服务器的啦。这个jndi服务器可能是Sun的LDAP服务器,也可能是Microsoft Active Directory,当然也可能是其它很简单的服务实现^_^
至于是哪种服务器,则使用该服务时在new InitialContext(Properties props)时指定是哪种服务器以及它在哪里以及可能携带的安全验证等等……
这种命名服务主要目的当然是用来共享数据啦,有时候可以当数据库用呢^_^
至于目录服务嘛,还不是很理解,但感觉其实也很简单,就是在用一个名绑定一个对象的基础上引进一个概念:一个对象是有很多属性的,除了name外,也可能有email、phone或size或……,这样扩展出来的就叫目录服务啦^_^
再至于……上下文之类的,理解成类似于文件系统时的一个个目录就差不多了吧^_^,说得好听而已……呵呵
比如EJB里的上下文“EJBContext”,或它的子接口“SessionContext”或“EntityContext”,就是指某个EJB周围的对象和容器所提供的服务所构成的环境。查看一下这些Context接口的定义就会发现,从这些Context里可以get出EJBObject、Home接口、Handle来,以及可以调用到底层提供的安全、事务等服务。
EJB所处的环境就是由这些对象和服务所构成的。而对于JNDI的Context,也是一个环境,对于某一个Context,你可以get出包含在其中的被绑定到某一个name的value,也可以get出所有包含在其中的name-value,也可以get出其它的一些属性。
又因为Context还可以包含subcontext,这成了一种嵌套关系,就变得很像文件夹一样。当然,环境由什么构成也就意味着你有什么东西可以利用。呵呵,其实遇到某一个Context的时候,关键在于查看一下它能提供什么信息,你能怎么利用而已……很多地方都谈到Context,但都有一个共同点,就是把一些与特定功能类无直接关系、但又有可能被这些类用到的信息包含在其中。所以从概念上来说,Context不是什么复杂的东西吧?^_^它的作用就在于提供信息,而绝不会是架构的核心组成……