初学spring,写了个程序,业务处理采用spring 的 IOC 模式,控制显示层,只是采用普通的servlet和jsp 报如下错误。 2007-10-9 10:59:22 org.logicalcobwebs.proxool.ConnectionResetter reset
警告: #1 - Problem calling connection.getAutoCommit()
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.validateClosedState(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.getAutoCommit(Unknown Source)
at org.logicalcobwebs.proxool.ConnectionResetter.reset(ConnectionResetter.java:219)
at org.logicalcobwebs.proxool.ConnectionPool.resetConnection(ConnectionPool.java:905)
at org.logicalcobwebs.proxool.AbstractProxyConnection.close(AbstractProxyConnection.java:218)
at org.logicalcobwebs.proxool.ProxyConnection.invoke(ProxyConnection.java:55)
at org.logicalcobwebs.cglib.proxy.Proxy$ProxyImpl$$EnhancerByCGLIB$$6b6a96a6.close( <generated >)
at org.apache.commons.dbcp.DelegatingConnection.close(DelegatingConnection.java:151)
at org.apache.commons.dbcp.PoolableConnection.reallyClose(PoolableConnection.java:95)
at org.apache.commons.dbcp.PoolableConnectionFactory.destroyObject(PoolableConnectionFactory.java:301)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:800)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:329)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:405)
at org.springframework.jdbc.core.JdbcTemplate.queryForRowSet(JdbcTemplate.java:448)
at cn.ehoo.sale8.db.DaoUtils.queryObject(DaoUtils.java:146)
at cn.ehoo.sale8.web.services.imp.CommodityServicesImp.getCommodityInfo(CommodityServicesImp.java:500)
at cn.ehoo.sale8.web.servlet.IndexServlet.doPost(IndexServlet.java:240)
at cn.ehoo.sale8.web.servlet.IndexServlet.doGet(IndexServlet.java:22)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:691)
at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:661)
at org.apache.jsp.commodity1_jsp._jspService(commodity1_jsp.java:76)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195)
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159)
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:406)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.jstripe.tomcat.probe.Tomcat55AgentValve.invoke(Tomcat55AgentValve.java:20)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:542)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:834)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
at java.lang.Thread.run(Thread.java:595)
代码如下
import javax.servlet.*;
import javax.servlet.http.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BaseServlet extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GBK";
//private XmlBeanFactory factory;
private ApplicationContext context;
//Initialize global variables
public void init() throws ServletException {
}
/**
private void init1()
{
Resource res = new ClassPathResource("Application-Context1.xml");
factory = new XmlBeanFactory(res);
} public Object getBean(String beanName)
{
if(factory == null)
init1();
return factory.getBean(beanName);
}**/ private void init1()
{
context = new ClassPathXmlApplicationContext("Application-Context1.xml");
} public Object getBean(String beanName)
{
if(context == null)
init1();
return context.getBean(beanName);
}
//Clean up resources
public void destroy() {
}
}
警告: #1 - Problem calling connection.getAutoCommit()
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.validateClosedState(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.getAutoCommit(Unknown Source)
at org.logicalcobwebs.proxool.ConnectionResetter.reset(ConnectionResetter.java:219)
at org.logicalcobwebs.proxool.ConnectionPool.resetConnection(ConnectionPool.java:905)
at org.logicalcobwebs.proxool.AbstractProxyConnection.close(AbstractProxyConnection.java:218)
at org.logicalcobwebs.proxool.ProxyConnection.invoke(ProxyConnection.java:55)
at org.logicalcobwebs.cglib.proxy.Proxy$ProxyImpl$$EnhancerByCGLIB$$6b6a96a6.close( <generated >)
at org.apache.commons.dbcp.DelegatingConnection.close(DelegatingConnection.java:151)
at org.apache.commons.dbcp.PoolableConnection.reallyClose(PoolableConnection.java:95)
at org.apache.commons.dbcp.PoolableConnectionFactory.destroyObject(PoolableConnectionFactory.java:301)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:800)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:329)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:405)
at org.springframework.jdbc.core.JdbcTemplate.queryForRowSet(JdbcTemplate.java:448)
at cn.ehoo.sale8.db.DaoUtils.queryObject(DaoUtils.java:146)
at cn.ehoo.sale8.web.services.imp.CommodityServicesImp.getCommodityInfo(CommodityServicesImp.java:500)
at cn.ehoo.sale8.web.servlet.IndexServlet.doPost(IndexServlet.java:240)
at cn.ehoo.sale8.web.servlet.IndexServlet.doGet(IndexServlet.java:22)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:691)
at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:661)
at org.apache.jsp.commodity1_jsp._jspService(commodity1_jsp.java:76)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195)
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159)
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:406)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.jstripe.tomcat.probe.Tomcat55AgentValve.invoke(Tomcat55AgentValve.java:20)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:542)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:834)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
at java.lang.Thread.run(Thread.java:595)
代码如下
import javax.servlet.*;
import javax.servlet.http.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BaseServlet extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GBK";
//private XmlBeanFactory factory;
private ApplicationContext context;
//Initialize global variables
public void init() throws ServletException {
}
/**
private void init1()
{
Resource res = new ClassPathResource("Application-Context1.xml");
factory = new XmlBeanFactory(res);
} public Object getBean(String beanName)
{
if(factory == null)
init1();
return factory.getBean(beanName);
}**/ private void init1()
{
context = new ClassPathXmlApplicationContext("Application-Context1.xml");
} public Object getBean(String beanName)
{
if(context == null)
init1();
return context.getBean(beanName);
}
//Clean up resources
public void destroy() {
}
}
public class DaoUtils { private JdbcTemplate jt;
public DaoUtils() { } public void setJt(JdbcTemplate jt) {
this.jt = jt;
} public JdbcTemplate getJt(){ return jt;
}
/**
*为调用其它JdbcTemplate函数提供接口
*/ public JdbcTemplate getJdbcTemplate(){ return jt;
}
/**
* Find Objects
* 返回查询结果集合,注意如果联合查询中有重复列以 columnName as otherName区别,
* 所有列类型均以String处理,不保证满足所有需求,以getJdbcTemplate()调用原始API
*/ public List<Map> queryOjects(String sql){ List ls = new LinkedList();
SqlRowSet rs = jt.queryForRowSet(sql);
SqlRowSetMetaData rm = rs.getMetaData();
while(rs.next()){
ls.add(ObjectMap(rs,rm));
}
return ls;
}
/**
* 返回满足一条记录,尽量确保唯一,如 id = xyz
*/ public Map queryObject (String sql){
SqlRowSet rs = jt.queryForRowSet(sql);
SqlRowSetMetaData rm = rs.getMetaData();
if(rs.first()){
return ObjectMap(rs,rm);
}
return null;
} private Map ObjectMap(SqlRowSet rs,SqlRowSetMetaData rm){
Map map = new HashMap();
for(int i=1; i<=rm.getColumnCount();i++){
map.put(rm.getColumnName(i),rs.getString(i));
}
return map;
} /**
* CRUD:update Object
* 返回操作影响纪录数
*/
public int updateObjects(String sql){ return getJdbcTemplate().update(sql);
} /**
* CRUD:create Object
*/
public void insertObject(String sql){ getJdbcTemplate().execute(sql);
} /**
* CRUD: delete object
* 返回操作影响纪录数
*/
public int deleteObjects(String sql){ return updateObjects(sql);
} /**
* 返回count,avg,sum等唯一查询int结果
*
*/
public int queryForInt(String sql){ return getJdbcTemplate().queryForInt(sql);
} public int[] batchObjects(String []sqls){
return getJdbcTemplate().batchUpdate(sqls);
}
该怎么改呢?
public Map queryMap (String sql){
return jt.queryForMap(sql);
}在servlet中只调用它,还是会出现上面的警告。 这样的警告并不是在一开始就出现的,是在多次访问页面以后,如果间隔一段时间再访问才会出现的,页面并不报错,只是后台会出现警告信息。
如果下面的方法
public Object getBean(String beanName)
{
if(context == null)
init1();
return context.getBean(beanName);
}
改成
public Object getBean(String beanName)
{
context = new ClassPathXmlApplicationContext("Application-Context1.xml"); return context.getBean(beanName);
}就不会出现上面的警告,但是每次调用getBean 的时候,tomcat就会加载所有的bean,我觉得这样失去了意义。是不是还是我哪里配置的问题呢?
如果一直访问页面没问题,只是如果中间停了一会再访问就会出现警告信息
这个是你的错误点,数据库都没有打开,怎么操作!!