JNDI(Java Naming and Directionary Interface)用来通过网络装载源(resources),如EJB组件,数据库驱动器,安全认证等。(详细情况如下)

解决方案 »

  1.   

    jndi是提供访问各种服务的统一API的标准Java扩展,是虚拟的,因为它允许一个目录服务通过简单的URL连接到另一个目录,使用用JNDI,你可以使用类似于HTML链接的链接,穿过目录到文件
    、打印机,EJBhome对象和其他资源。
    通俗地说,是JNDI提供了一组API去定位网上的各种资源。
      

  2.   

    JNDI是一个基于命名和目录服务的桥,一个对不同目录提供通用接口的API,使用它仅需下在一个包、学习一个访问目录的接口。它是标准的Java扩展,并被Sun公司等多家公司支持。理论上,通过它我们可以在不改变客户端代码的情况下更改基础目录结构。
    JNDI由两部分组成:客户API和服务提供者接口(SPI)。前者允许客户代码对目录进行操作,它对所有类型的目录都是统一的;后者是一个命名和服务供应商能够提供插件的接口,与客户API是对立的,当API允许客户编写一个单一的统一的接口时,SPI允许命名和服务供应商安装特定的所有权协议在系统中。我们可以想到,这与JDBC有些相似,它们针对不同的对象(数据库和源)都有统一的接口,都由产平供应商提供相应的服务(数据库驱动和命名目录服务)。
    JDNI中有几种名字,原子名、复合名。原子名是一个命名的单一的基础的和不可分割的部分,如jdbc/Oracle中,Oracle就是一个原子名。复合名由零个或多个复合名组成,如前述:jdbc/Oracle。名字和对象的联合,我们称为绑定(binding),而由零个或多个绑定组成的对象我们称为背景(context)。如UNIX文件系统中,假定一个名为/etc的文件夹包含了matb和exports两个文件,在JNDI中,/etc就是一个包含了由matb和exports原子名组成的绑定的背景。(待续)
      

  3.   

    (不好意思,我可不是吊大家胃口,我得把话写明白了。)
    “命名系统”是一个已连接的背景集合。如Sun公司的LDAP树型目录如文件系统中的文件夹树一样,就可以被认为是一种命名系统。但,每一种命名系统都有各自不同的语法,如LDAP的一个复合名例子“cn=liujun,ou=Peaple,o=NEUSOFT,c=PRC”,而文件命名则是“c:\j2sdkee1.2.1\lib\classes.zip”。在命名系统中名字空间是存放所有名字的抽象,如我们硬盘上所有命名和目录的集合或文件夹的集合就是我们硬盘上的命名空间;而LDAP服务的命名空间是指LDAP命名目录中所有命名的集合。而组合名(composite)(上面提到的复合名是:compound name)是一个跨越了多个命名系统的名字。如Web中的URL:http://java.sun.com/products/ejb/index.html是一个跨越了以下命名空间的组合名:http来自URL的"scheme-id"命名空间,java.sun.com用DNS解析机器名到IP地址,而products,ejb,index.html是Web服务器上文件系统的命名空间。
      

  4.   

    以weblogic的jndi为例,是不是bea公司提供了spi,运行了weblogic,我们才可以通过api调用weblogic提供的jndi
      

  5.   

    顺便再讲讲jndi ENC是什么东东?
      

  6.   

    BEA公司常将他们的所有权协议绑定在产品中,他们的目录服务容错性强,且具有很高的可用性 。同时他们提供了一个与诸如JDBC、RMI、EJB等企业Java服务相结合的统一的命名服务。
    所以,在weblogic中已经包含了BEA公司作为一个特殊的服务供应商所提供的命名目录服务,也就是说只要我们运行了weblogic,我们编写调用相关的JNDI的程序就可以被识别了。
    另外,weblogic对JNDI的实现实际上是一种意义上的分布式的实现,具体的说就是,它对JNDI的实现可以通过委派网络中其他的主机上的服务提供者来完成。这说明weblogic服务的提供者可以作为其他服务提供者的代理,比如,LDAP服务提供者。这样,weblogic就可以将服务提供者驻留在安全的主机上而对不安全的主机上的客户提供服务——比如未经数字印签的Java Applet。
      

  7.   

    实在抱歉,对于ENC我也不明白,不过,你可以去看看:http://java.sun.com/products/jndi/tutorial