spring对JNDI的支持

本文介绍了Spring框架中如何利用JNDI进行数据源及事务管理的配置,包括JndiTemplate、JndiObjectTargetSource及JndiObjectFactoryBean等核心类的使用,并给出了具体的XML配置实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# Spring中对于JNDI的访问,提供了便捷的方法,在Spring的org.springframework.jndi包中包含了所有的类。其中提供了一下核心类:  
# (1)JndiTemplate:它是这个包的核心类,用来简化对JNDI的操作。它提供了对于lookup、bind方法。同时,允许JndiCallback接口的实现在其提供的JNDI上下文中执行任何操作。  
#   
# 使用JndiTemplate实现InitialContext环境变量的配置  
#   
# <bean id="queueTarget" class="org.springframework.jndi.JndiObjectTargetSource">  
#     <property name="jndiName">  
#         <value>queue/testQueue</value>  
#     </property>  
#     <property name="jndiTemplate">  
#         <ref local="jndiTemplate"/>  
#     </property>  
# </bean>  
# <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">   
#     <property name="environment">  
#         <props>  
#      <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>  
#             <prop key="java.naming.provider.url">jnp://localhost:1099</prop>  
#             <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>  
#         </props>  
#     </property>   
# </bean>  
#   
# (2)JndiObjectTargetSource  
#   
# 使用JndiObjectTargetSource,例如  
#   
# <bean id="queueTarget" class="org.springframework.jndi.JndiObjectTargetSource">  
#     <property name="jndiName">  
#         <value>queue/testQueue</value>  
#     </property>  
# </bean>  
#   
# (3)JndiObjectFactoryBean:  
#   
# 使用JndiObjectFactoryBean,例如  
# <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">  
#     <property name="jndiName">  
#         <value>java:/MySqlDS</value>  
#     </property>  
# </bean>  
#   
# 总结(事例):  
#   
# 数据源的配置:  
#   
# (1)配置可以访问到同一应用服务器的jndi数据源  
# <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">  
#     <property name="jndiName">  
#         <value>jdbc/cqccms</value>  
#     </property>  
# </bean>  
# (2)配置能访问远程jndi数据源  
# <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">  
# <property name="jndiName">  
#   <value>jdbc/cqccms</value>  
# </property>  
# <property name="jndiEnvironment">   
#      <props>   
#         <prop key="java.naming.factory.initial">   
#           weblogic.jndi.WLInitialContextFactory   
#         </prop>   
#         <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>   
#         <prop key="java.naming.security.principal">weblogic</prop>   
#         <prop key="java.naming.security.credentials">weblogic</prop>   
#      </props>      
#    </property>   
#   </bean>  
# 事务的配置:  
#   
# 不过事务对象远程访问好像没那么顺利,同理查看 org.springframework.transaction.jta.JtaTransactionManager类,没有发现上述方法,不过看到了setJndiTemplate()方法,也不错现配置一个jndiTemplate,如下:  
# <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" singleton="true"  
#   lazy-init="default" autowire="default" dependency-check="default">  
#   <property name="environment">   
#      <props>   
#         <prop key="java.naming.factory.initial">   
#           weblogic.jndi.WLInitialContextFactory   
#         </prop>   
#         <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>   
#         <prop key="java.naming.security.principal">weblogic</prop>   
#         <prop key="java.naming.security.credentials">weblogic</prop>   
#      </props>      
#    </property>   
# </bean>  
#       然后在配置一下transactionManager,如下  
# <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" singleton="true"  
#   lazy-init="default" autowire="default" dependency-check="default">  
#   <property name="jndiTemplate">  
#    <ref local="jndiTemplate" />  
#   </property>  
#   <property name="userTransactionName">  
#    <value>weblogic/transaction/UserTransaction</value>  
#   </property>  
# </bean>  
#       不过JtaTransactionManager默认找jndi name为UserTransaction的jta对象,在同一应用服务器上可以,远程访问不到,后直接查看weblogic的jndi树找到这个jndi名weblogic/transaction/UserTransaction,配置上测试果然成功。 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值