再谈quartz
来源:互联网 发布:销售数据分析表格 编辑:程序博客网 时间:2024/05/17 01:58
quartz集成到tomcat采用是使用 ServletContextListener方案,参见http://www.blogjava.net/Unmi/archive/2008/05/01/197657.html
tomcat运行一段时间后,控制台报以下错误
2009-03-06 09:38:21 [org.quartz.core.ErrorLogger]-[ERROR] An error occured while scanning for the next trigger to fire.
org.quartz.JobPersistenceException: Couldn't rollback jdbc connection.Io 异常: Connection reset by peer: socket write error [See nestedexception: java.sql.SQLException: Io 异常: Connection reset by peer:socket write error]
at org.quartz.impl.jdbcjobstore.JobStoreSupport.rollbackConnection(JobStoreSupport.java:2319)
at org.quartz.impl.jdbcjobstore.JobStoreTX.acquireNextTrigger(JobStoreTX.java:1222)
at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:233)
* Nested Exception (Underlying Cause) ---------------
java.sql.SQLException: Io 异常: Connection reset by peer: socket write error
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
at oracle.jdbc.driver.OracleConnection.rollback(OracleConnection.java:1380)
at org.apache.commons.dbcp.DelegatingConnection.rollback(DelegatingConnection.java:328)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.rollback(PoolingDataSource.java:312)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.rollbackConnection(JobStoreSupport.java:2317)
at org.quartz.impl.jdbcjobstore.JobStoreTX.acquireNextTrigger(JobStoreTX.java:1222)
at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:233)
附开发环境:
winxp+eclipse3.2.2+jdk5.0+tomcat5.5.20+quartz1.5.2+oracle 11g
解决方案参考采用http://www.javauu.com/thread-16-1-1.html
具体描述如下:
一直以来都相信从连接池获取过来的连接对象应该都是打开的,不可能引起的这个问题;
后面经过调试发现,在抛出异常之前Connection对象都不是null的,只是因为其状态已经被close了.
现在可以证实一点,从连接池里面获取过来的Connection并非全部是可用,如果你仔细去了解其他高级选项的配置,就会体会得到这一点.
由于quartz默认采用连接池是dbcp,而当使用DBCP时,数据库连接因为某种原因断掉后,再从连接池中取得连接又不进行验证,这时取得的连接实际已经时无效的数据库连接了
解决方法:
方法一:设置weblogic上面的连接池参数,打开要配置的连接池的配置页面,点击Connection选项卡,在下面找到一个show,点击,就会显示连接池的高级配置选项,
勾选"Test ReserverConnetion",勾选这个的意思,就是要让weblogic在向客户端提供Connection之前,都先自己测试一下这个Connection是否可用,防止weblogic向客户端发送已经关闭的Connection对象,导致应用程序抛出异常.
方法二:当然还有另一种方法就是在程序这边作相应的判断,每从数据连接池中获取一个Connection对象时,都要先判断其他状态是否是Open的,如果不是Open的,就重新到池里面再获取一个新的连接,直到获取的连接是可用的为止。
即
while(conn.isClosed()){
conn=getConnectionFromPool();
}
在配置连接池时,建议大家多了解其他里面的各个参数项,
补记:解决ObjectAlreadyExistsException异常导致调度器失效
2009-03-25 16:12:05 [vs.dascsl.dbaccess.datatransfer.ScheduleStartListener]-[ERROR] Quartz failed to initialize
org.quartz.ObjectAlreadyExistsException: Unable to store Job with name: 'b8d44040-f803-443c-8ce8-4b10738a579e' and group: 'DEFAULT', because one already exists with this identification.
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1098)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$3.execute(JobStoreSupport.java:1047)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$40.execute(JobStoreSupport.java:3688)
//在ScheduleStartListener加载所有定时器
for ( ....){
.....//代码略
通过try{
...//代码略
} catch (ObjectAlreadyExistsException e){//已经解决
continue;//捕获ObjectAlreadyExistsException后直接加载下一个定时器,否则调度器失效
}
.....//代码略
}
- 再谈quartz
- Quartz
- quartz
- Quartz
- Quartz
- quartz
- quartz
- quartz
- Quartz
- Quartz
- Quartz
- Quartz
- Quartz
- Quartz
- Quartz
- quartz
- Quartz
- Quartz
- 今天是一个新的开始
- 关于中英文乱码的问题详细解析
- 访问IIS元数据库失败 解决
- 嘟嘟会走了
- ACPI_BIOS_USING_OS_MEMORY
- 再谈quartz
- Head First C# 中文版 图文皆译 第七章 接口和抽象类 page252
- 我的大学生活2
- BCB 动态创建组件的事件响应
- 守株待兔
- 如何变更原始档的控制
- 基于Visual Studio 2005,为你的开发团队建立可重用的项目及文件项模板
- 9 个基于JavaScript 和 CSS 的 Web 图表框架
- Fedora 10 以root登陆的解决办法