全面介绍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段进行修改,代码如下: