全面介绍Hibernate Quartz

在向大家详细介绍Hibernate Quartz之前,首先让大家了解下我们的系统构架,然后全面介绍Hibernate Quartz。

首先介绍一下我们的系统构架,采用webwork,spring,Hibernate整合架构,现在引入Quartz框架,Hibernate Quartz各自拥有的自己数据库配置和连接池的配置,现在的任务是把两者用同一套配置.

先谈谈Quartz,我用的版本是1.5.1,后面的版本我没去看了,没时间,接下来说的都以这个版本为准.Quartz虽然在提供一个 ConnectionProvider接口,提供给程序扩展,但是看它的StdSchedulerFactory实现类,要对它进行扩展还是一件比较麻烦一件事情,所以我就直接修改了StdSchedulerFactory类,以达到的我的需求.

接下来的问题是既然要结合,那么让Quartz来提供连接池配置呢还是有Hibernate提供.研究了两者的连接池方面的源代码,发现 Hibernate的连接池设计远远好于Quartz,Quartz目前只提供一个连接池提供类PoolingConnectionProvider,而且使用的连接池是dbcp,这个连接池听说问题多多,相反Hibernate提供了更加灵活的配置,所以连接池由Hibernate提供.

首先实现一个Quartz中ConnectionProvider子类HibernateConnectionProvider

public class HibernateConnectionProvider implements ConnectionProvider {  



private Connection con = null;  




protected static ThreadLocal hibernateHolder = new ThreadLocal();  



public Connection getConnection() throws SQLException {  



con = null;  




SessionFactoryImpl sessionFactory = null;  




sessionFactory = (SessionFactoryImpl) Global.getSessionFacotry();  




con = sessionFactory.getConnectionProvider().getConnection();  



return con;  


}  


public void shutdown() throws SQLException {  


// FIXME Auto-generated method stub  


}  


} 

然后修改StdSchedulerFactory,在不破坏其本来的逻辑和可配置性下进行了相应的修改.修改的是private Scheduler instantiate() throws SchedulerException方法,找到//Set up any DataSources段进行修改,代码如下:

相关推荐