# 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,配置上测试果然成功。
spring对JNDI的支持
最新推荐文章于 2019-07-19 09:26:40 发布