2

我在 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] 未绑定在此上下文中。找不到 [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。

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

4

1 回答 1

1

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

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/myApp" expected-type="javax.sql.DataSource"/>
于 2014-05-16T14:39:38.590 回答