JNDI总结

本文介绍了Java命名和目录接口(JNDI)的基本概念及其在Tomcat中的配置方法。同时,通过实例展示了如何利用JNDI在不同应用程序间共享组件,并介绍了Spring框架下JNDI的使用方式。

JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。 (http://baike.baidu.com/view/209575.htm

 

JNDI服务是WEB容器提供的服务。WEB应用可以通过JNDI服务从容器中得到各种组件(包括但不限于数据源),实现各组件的解耦。

以下举一个例子。

在tomcat的conf/server.xml中配置:

Xml代码 复制代码  收藏代码
  1. <Context path="/jndi">    
  2.   
  3.     <Resource name="bean/MyBeanFactory" auth="Container"    
  4.             type="com.huawei.jndi.bean.MyBean"    
  5.             factory="org.apache.naming.factory.BeanFactory"    
  6.             bar="23"/>    
  7.   
  8. </Context>   

上面就在tomcat中声明了一个组件,接下来在代码中可以获取这个组件:
Java代码 复制代码  收藏代码
  1. try  
  2. {   
  3.     Context initContext = new InitialContext();   
  4.     Context envCtx = (Context) initContext.lookup("java:comp/env");   
  5.     MyBean bean = (MyBean) envCtx.lookup("bean/MyBeanFactory");   
  6.     System.out.println(bean.getBar());   
  7. }   
  8. catch (Exception e)   
  9. {   
  10.     e.printStackTrace();   
  11. }  
        try
        {
            Context initContext = new InitialContext();
            Context envCtx = (Context) initContext.lookup("java:comp/env");
            MyBean bean = (MyBean) envCtx.lookup("bean/MyBeanFactory");
            System.out.println(bean.getBar());
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

总结:在tomcat中配置jndi组件,然后在代码中获取已配好的组件。

各WEB容器的JNDI实现类是不同的,比如在JBOSS中,JNDI提供类是org.jnp.interfaces.NamingContextFactory,与tomcat是不同的。

这样看来,JNDI的作用和spring的依赖注入倒是差不多。但是 通过JNDI,可以实现跨应用,甚至跨域获取组件。在服务器A上配置的组件,在另一台服务器B上,可以通过JNDI获取到。

spring也提供了对jndi的封装,使用起来更加方便,以下是一个例子。
Xml代码 复制代码  收藏代码
  1. <!-- JNDI模板 -->  
  2. <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">  
  3.     <property name="environment">  
  4.         <props>  
  5.             <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>  
  6.             <prop key="java.naming.provider.url">10.137.96.212:18199</prop>  
  7.             <prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming</prop>  
  8.         </props>  
  9.     </property>  
  10. </bean>  
  11.   
  12. <!-- 创建连接工厂 -->  
  13. <bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">  
  14.     <property name="jndiTemplate" ref="jndiTemplate" />  
  15.     <property name="jndiName" value="TopicConnectionFactory" />  
  16. </bean>  

先声明JndiTemplate,配置好目标地址、JNDI服务提供类。然后通过JndiObjectFactoryBean,就可以很方便地获取JNDI组件,并进行类型转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值