请各位大虾帮忙看看这个问题该如何解决?谢谢
- Java code
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListenerorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/classes/spring/context-base.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name DSPPool is not bound in this Context at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) at org.apache.catalina.core.StandardService.start(StandardService.java:519) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:581) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)Caused by: javax.naming.NameNotFoundException: Name DSPPool is not bound in 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) at javax.naming.InitialContext.lookup(Unknown Source) at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155) at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:88) at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:153) at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178) at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95) at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105) at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:200) at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:186) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335) ... 30 more2012-5-22 15:31:15 org.apache.catalina.core.StandardContext start严重: Error listenerStart2012-5-22 15:31:15 org.apache.catalina.core.StandardContext start严重: Context [/dsp] startup failed due to previous errors2012-5-22 15:31:15 org.apache.catalina.core.ApplicationContext log信息: Closing Spring root WebApplicationContext
经检测配置的jndi,没有问题,但是当用myEclipse启动tomcat服务器的时候就报该异常~
context.xml配置
- XML code
<?xml version="1.0" encoding="UTF-8"?><Context> <Resource name="DSPPool" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="dsp" password="dsp" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@10.100.2.2:1521:orclbi" /></Context>
spring配置
- XML code
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>java:DSPPool</value> </property> </bean>
web.xml配置
- XML code
<resource-ref> <description>DB Connection</description> <res-ref-name>DSPPool</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
[解决办法]
貌似jndi名字错了吧?
<bean id="testDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/DSPPool</value>
</property>
</bean>
另外,最好前面加上jdbc,分类:
<Resource name="jdbc/DSPPool"
其它配置名称也对应增加。
[解决办法]
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:/DSPPool</value>
</property>
</bean>
应该加个 /
[解决办法]
Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
这个错误。。。说明完全没得到配置信息啊。。。
JDBC driver 是 空字符串
URL 直接是NULL
[解决办法]
把:web.xml 的这项配置删掉吧。
应该是跟你Context.xml的配置冲突了。用全局配置好了,别用web.xml的。
[解决办法]
这是SSH项目吗?怎么会这样配置的。
[解决办法]
你的context.xml应该是放在 tomcat\conf 下的吧?这样就是全局的。
比如(我这里用的是MySQL),tomcat700\conf\context.xml:
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="DSPPool" auth="Container"
type="javax.sql.DataSource" maxActive="20" maxIdle="10"
maxWait="10000" username="root" password=""
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3737/" />
</Context>
然后我直接用JSP测试:
- HTML code
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="false"%><%@page import="javax.naming.*"%><%@page import="java.sql.*"%><%@page import="javax.sql.*"%><%@page import="java.util.*"%><% Context initContext = new InitialContext(); DataSource ds = (DataSource)initContext.lookup("java:/comp/env/DSPPool"); Connection conn = ds.getConnection(); try { Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select 'HelloWorld'"); // 如果是Oracle,需要用 "Select 'HelloWorld' from dual" while (rs.next()) { String str = rs.getString(1); out.println(str); System.out.println(str); } } finally { conn.close(); }%>
[解决办法]
用web.xml的话应该也是覆盖更高层的相关配置的,more specific wins!
driverClassName
url
之类的数据源相关配置在web.xml中没填好吧
[解决办法]
[解决办法]
[解决办法]
现在另一种怀疑是Tomcat版本问题,我是7.0版本,web.xml是可以不需要配置引用。
不过我没有测试6或5是否需要。