使用JNDI的Spring DataSource配置

时间:2014-05-16 02:45:27

标签: spring jndi bitronix

我在使用Spring applicationContext.xml文件中的JNDI配置dataSource bean时遇到了问题。

这就是我的applicationContext.xml条目的样子:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/myApp" expected-type="javax.sql.DataSource"/>

我在web.xml中输入了一个条目:

<resource-env-ref>
    <resource-env-ref-name>jdbc/myApp</resource-env-ref-name>
    <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
<resource-env-ref>

Tomcat中的Context.xml文件:

<Resource 
    auth="Container" 
    factory="bitronix.tm.resource.ResourceObjectFactory" 
    name="jdbc/myApp" type="javax.sql.DataSource" 
    uniqueName="jdbc/myApp" />

使用这些配置,我在Tomcat控制台上不断收到此错误:

  

引起:javax.naming.NameNotFoundException:名称[jdbc / myApp]未绑定在此Context中。无法找到[jdbc]。       在org.apache.naming.NamingContext.lookup(NamingContext.java:819)       在org.apache.naming.NamingContext.lookup(NamingContext.java:167)       在org.apache.naming.SelectorContext.lookup(SelectorContext.java:156)       在javax.naming.InitialContext.lookup(InitialContext.java:392)       在org.springframework.jndi.JndiTemplate $ 1.doInContext(JndiTemplate.java:155)       在org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87)       在org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152)       在org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:179)       在org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:104)       在org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:106)       在org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:231)       在org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:217)       在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)       在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)

请帮我解决这个问题。在我看来,Context.xml中的bitronix事务工厂导致了这个问题。

1 个答案:

答案 0 :(得分:1)

您需要使用不同的jndi名称,因为在Tomcat中,所有已配置的条目和资源都放在JNDI名称空间的java:comp/env部分中,您还需要指定它:

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/myApp" expected-type="javax.sql.DataSource"/>