使用JNDI配置Spring数据源

使用JNDI配置Spring数据源,spring,jndi,bitronix,Spring,Jndi,Bitronix,在Spring applicationContext.xml文件中使用JNDI配置数据源bean时遇到问题 以下是我的applicationContext.xml条目的外观: <jee:jndi-lookup id="dataSource" jndi-name="jdbc/myApp" expected-type="javax.sql.DataSource"/> 我在web.xml中做了一个条目: <resource-env-ref> <resourc

在Spring applicationContext.xml文件中使用JNDI配置数据源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>

jdbc/myApp
javax.sql.DataSource
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:Name[jdbc/myApp]未在此上下文中绑定。找不到[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.jndemplate$1.doInContext(jndemplate.java:155) 位于org.springframework.jndi.jndemplate.execute(jndemplate.java:87) 位于org.springframework.jndi.jndemplate.lookup(jndemplate.java:152) 位于org.springframework.jndi.jndemplate.lookup(jndemplate.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.afterPropertieSet(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事务工厂导致了问题。

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

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

如果使用
而不是
jee:jndi查找
会发生什么?