`
xiongzhenhui
  • 浏览: 205283 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Spring-JNDI配置

 
阅读更多

Spring对JNDI的支持

2008-02-22 16:01

 

 

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,配置上测试果然成功。

分享到:
评论
1 楼 辣油_ 2012-09-22  
    System.out.println("草");

相关推荐

Global site tag (gtag.js) - Google Analytics