jndi的介绍与用法

来源:互联网 发布:ubuntu系统有什么用 编辑:程序博客网 时间:2024/05/19 02:21

JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
主要优点:
包含了大量的命名和目录服务,使用通用接口来访问不同种类的服务;

可以同时连接到多个命名或目录服务上;

建立起逻辑关联,允许把名称同Java对象或资源关联起来,而不必知道对象或资源的物理ID。

JNDI程序包:

javax.naming:命名操作;

javax.naming.directory:目录操作;

javax.naming.event:在命名目录服务器中请求事件通知;

javax.naming.ldap:提供LDAP支持;

javax.naming.spi:允许动态插入不同实现。

利用JNDI的命名与服务功能来满足企业级API对命名与服务的访问,诸如EJB、JMS、JDBC 2.0以及IIOP上的RMI通过JNDI来使用CORBA的命名服务。

先配置context.xml

  <Resource name="jdbc/EmployeeDB"            auth="Container"            type="javax.sql.DataSource"            username="dbusername"            password="dbpassword"            driverClassName="org.hsql.jdbcDriver"            url="jdbc:HypersonicSQL:database"            maxTotal="8"            maxIdle="4"/>

然后web.xml

<resource-env-ref>  <description>    Object factory for MyBean instances.  </description>  <resource-env-ref-name>    bean/MyBeanFactory  </resource-env-ref-name>  <resource-env-ref-type>    com.mycompany.MyBean  </resource-env-ref-type></resource-env-ref>

最后就可以编写代码了

Context initCtx = new InitialContext();Context envCtx = (Context) initCtx.lookup("java:comp/env");MyBean bean = (MyBean) envCtx.lookup("bean/MyBeanFactory");writer.println("foo = " + bean.getFoo() + ", bar = " +               bean.getBar());
package com.mycompany;public class MyBean {  private String foo = "Default Foo";  public String getFoo() {    return (this.foo);  }  public void setFoo(String foo) {    this.foo = foo;  }  private int bar = 0;  public int getBar() {    return (this.bar);  }  public void setBar(int bar) {    this.bar = bar;  }}