问题描述
|
从Eclipse运行它时,我的DataSource无法与JNDI和Tomcat 6一起使用。我已经在我的/ META-INF中添加了context.xml并包含以下内容:
<Context>
<Resource name=\"jdbc/myDB\" auth=\"Container\" type=\"javax.sql.DataSource\"
username=\"root\"
password=\"root\"
driverClassName=\"com.mysql.jdbc.Driver\"
url=\"jdbc:mysql://localhost/database\"
maxActive=\"15\"
maxIdle=\"7\"
validationQuery=\"Select 1\" />
</Context>
并将我的Spring Bean配置如下:
<bean id=\"UserDatabase\" class=\"org.springframework.jndi.JndiObjectFactoryBean\">
<property name=\"jndiName\" value=\"jdbc/myDB\"></property>
<property name=\"lookupOnStartup\" value=\"true\"></property>
<property name=\"cache\" value=\"true\"></property>
<property name=\"proxyInterface\" value=\"javax.sql.DataSource\"></property>
</bean>
我还将此行添加到了我的web.xml中:
<resource-ref>
<description>Connection Pool</description>
<res-ref-name>jdbc/myDB</res-ref-name>
<res-type>javax.sql.Datasource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
但是由于某种原因,我仍然会收到此错误:
javax.naming.NameNotFoundException: The name jdbc is not associated to this context
at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:152)
我不明白为什么这行不通...有什么主意吗?
解决方法
我更改了以下内容,现在可以使用:
在我的context.xml中,使用以下命令完成了
Context
标记:
<Context docBase=\"myApp\" path=\"/myApp\" reloadable=\"true\" source=\"org.eclipse.jst.jee.server:app\">
并且在连接URL中,字符“ 6”引起了“ 7”错误,不知道为什么,所以我的URL现在像这样:
jdbc:mysql://localhost/database?useUnicode=true&characterEncoding=utf-8
请注意网址中的&
int ...
, 如果我没记错的话,您应该以
<property name=\"jndiName\" value=\"java:comp/env/jdbc/myDB\"/>
, 在Spring应用程序上下文中,将您的定义替换为:
<bean id=\"dataSource\"
class=\"org.springframework.jndi.JndiObjectFactoryBean\">
<property name=\"jndiName\"
value=\"java:comp/env/jdbc/myDB\"/>
<property name=\"resourceRef\"
value=\"true\" />
</bean>