2014-05-16 298 views
2

我在Spring applicationContext.xml文件中使用JNDI配置dataSource bean時遇到問題。使用JNDI的Spring DataSource配置

這是我的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> 

context.xml文件在Tomcat中:

<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]。 at org.apache.naming.NamingContext.lookup(NamingContext.java:819) at org.apache.naming.NamingContext.lookup(NamingContext.java:167) at 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) at org.springframework.jndi.Jnd iObjectLocator.lookup(JndiObjectLocator.java:106) 在org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:231) 在org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:217) 在有機springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)

請幫我解決這個問題。在我看來,Context.xml中的bitronix事務工廠正在引發這個問題。

+0

會發生什麼你使用 ' 而不是'jee:jndi-lookup'? – geoand

回答

1

您需要使用不同的JNDI名稱,因爲在Tomcat中所有配置的條目和資源都放在JNDI名稱空間的java:comp/env部分,你需要指定,以及:如果

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