概述

  JNDI,Java Naming Directory Interface,J2EE的标准之一,是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互,所有的J2EE容器都必须提供一个JNDI的服务。
  集群JNDI实现了高可靠性JNDI,通过服务器的集群,保证了JNDI的负载平衡和错误恢复。在集群环境下配置JNDI与非集群配置无区别。
  JNDI 的主要功能是 使用哈希树表来存储键值对,即特定命名对应相应的对象。每个应用服务器在把部署的服务对象绑定到自己本地的JNDI树的同时,还绑定到一个共享的全局JNDI树,实现全局JNDI和自身JNDI的联系。
  以前很少接触过JNDI,只有把数据源配置在weblogic或者tomcat时候会使用。对JNDI和RMI一直有混淆。RMI只是一种远程对象访问的接口规范,遵循此规范的对象可被远程访问,但是要使用rmi的服务注册程序注册之后才能够被远程调用。JNDI是Java命名和目录服务访问接口,通过JNDI,可以访问已经在命名和目录服务器中注册的服务对象,因此,可以把rmi对象注册在LDAP(Lightweight Directory Access Protocol)命名目录服务器中,然后使用JNDI对远程对象进行访问和调用。
    spring框架配置JNDI数据源方式:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" >
   <property name="jndiName">
      <value>服务器上JNDI配置命名</value>
   </property>
</bean>

 

 

JNDI的一个类javax.naming.InitialContext,它读取JNDI的一些配置信息,并内含对象和其在JNDI中的注册名称的映射信息。

在JndiTemplate类中:

 初始化:Context ctx=new InitialContext();

public Object lookup(final String name) throws NamingException {
if (logger.isDebugEnabled()) {
logger.debug("Looking up JNDI object with name [" + name + "]");
}
return execute(new JndiCallback<Object>() {
@Override
public Object doInContext(Context ctx) throws NamingException {
Object located = ctx.lookup(name);
if (located == null) {
throw new NameNotFoundException(
"JNDI object with [" + name + "] not found: JNDI implementation returned null");
}
return located;
}
});
}

返回一个DataSource对象。
如有不对,请指正,谢谢~
 
  
 
posted on 2017-06-14 17:44  奥秘  阅读(216)  评论(0编辑  收藏  举报