自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

全面介紹Hibernate Quartz

開(kāi)發(fā) 后端
這里介紹Hibernate Quartz各自擁有的自己數(shù)據(jù)庫(kù)配置和連接池的配置,現(xiàn)在的任務(wù)是把兩者用同一套配置。

在向大家詳細(xì)介紹Hibernate Quartz之前,首先讓大家了解下我們的系統(tǒng)構(gòu)架,然后全面介紹Hibernate Quartz。

首先介紹一下我們的系統(tǒng)構(gòu)架,采用webwork,spring,Hibernate整合架構(gòu),現(xiàn)在引入Quartz框架,Hibernate Quartz各自擁有的自己數(shù)據(jù)庫(kù)配置和連接池的配置,現(xiàn)在的任務(wù)是把兩者用同一套配置.

先談?wù)凲uartz,我用的版本是1.5.1,后面的版本我沒(méi)去看了,沒(méi)時(shí)間,接下來(lái)說(shuō)的都以這個(gè)版本為準(zhǔn).Quartz雖然在提供一個(gè) ConnectionProvider接口,提供給程序擴(kuò)展,但是看它的StdSchedulerFactory實(shí)現(xiàn)類(lèi),要對(duì)它進(jìn)行擴(kuò)展還是一件比較麻煩一件事情,所以我就直接修改了StdSchedulerFactory類(lèi),以達(dá)到的我的需求.

接下來(lái)的問(wèn)題是既然要結(jié)合,那么讓Quartz來(lái)提供連接池配置呢還是有Hibernate提供.研究了兩者的連接池方面的源代碼,發(fā)現(xiàn) Hibernate的連接池設(shè)計(jì)遠(yuǎn)遠(yuǎn)好于Quartz,Quartz目前只提供一個(gè)連接池提供類(lèi)PoolingConnectionProvider,而且使用的連接池是dbcp,這個(gè)連接池聽(tīng)說(shuō)問(wèn)題多多,相反Hibernate提供了更加靈活的配置,所以連接池由Hibernate提供.

首先實(shí)現(xiàn)一個(gè)Quartz中ConnectionProvider子類(lèi)HibernateConnectionProvider

  1. public class HibernateConnectionProvider implements ConnectionProvider {  
  2. private Connection con = null;  
  3. protected static ThreadLocal hibernateHolder = new ThreadLocal();  
  4. public Connection getConnection() throws SQLException {  
  5. con = null;  
  6. SessionFactoryImpl sessionFactory = null;  
  7. sessionFactory = (SessionFactoryImpl) Global.getSessionFacotry();  
  8. con = sessionFactory.getConnectionProvider().getConnection();  
  9. return con;  
  10. }  
  11. public void shutdown() throws SQLException {  
  12. // FIXME Auto-generated method stub  
  13. }  

然后修改StdSchedulerFactory,在不破壞其本來(lái)的邏輯和可配置性下進(jìn)行了相應(yīng)的修改.修改的是private Scheduler instantiate() throws SchedulerException方法,找到//Set up any DataSources段進(jìn)行修改,代碼如下:

  1. String[] dsNames = cfg.getPropertyGroups(PROP_DATASOURCE_PREFIX);  
  2. for (int i = 0; i < dsNames.length; i++) {  
  3. PropertiesParser pp = new PropertiesParser
    (cfg.getPropertyGroup(PROP_DATASOURCE_PREFIX + "." + dsNames[i], true));  
  4.  
  5. String dsDriver = pp.getStringProperty(PROP_DATASOURCE_DRIVER, null);  
  6. String dsURL = pp.getStringProperty(PROP_DATASOURCE_URL, null);  
  7. boolean dsAlwaysLookup = pp.getBooleanProperty
    (PROP_DATASOURCE_JNDI_ALWAYS_LOOKUP, false);  
  8. String dsUser = pp.getStringProperty(PROP_DATASOURCE_USER, "");  
  9. String dsPass = pp.getStringProperty(PROP_DATASOURCE_PASSWORD, "");  
  10. int dsCnt = pp.getIntProperty(PROP_DATASOURCE_MAX_CONNECTIONS, 3);  
  11. String providerClass = pp.getStringProperty
    (PROP_DATASOURCE_PROVIDER_CLASS, null);  
  12. String dsJndi = pp.getStringProperty(PROP_DATASOURCE_JNDI_URL, null);  
  13. String dsJndiInitial = pp.getStringProperty(PROP_DATASOURCE_JNDI_INITIAL, null);  
  14. String dsJndiProvider = pp.getStringProperty(PROP_DATASOURCE_JNDI_PROVDER, null);  
  15. String dsJndiPrincipal = pp.getStringProperty(PROP_DATASOURCE_JNDI_PRINCIPAL, null);  
  16. String dsJndiCredentials = pp.getStringProperty
    (PROP_DATASOURCE_JNDI_CREDENTIALS, null);  
  17. String dsValidation = pp.getStringProperty(PROP_DATASOURCE_VALIDATION_QUERY, null);  
  18. if (providerClass == null  
  19. || providerClass.equals("")  
  20. || providerClass.equals("org.quartz.utils.PoolingConnectionProvider")) {  
  21. if (dsDriver == null) {  
  22. initException = new SchedulerException
    ("Driver not specified for DataSource: "+ dsNames[i]);  
  23. throw initException;  
  24. }  
  25. if (dsURL == null) {  
  26. initException = new SchedulerException
    ("DB URL not specified for DataSource: "+ dsNames[i]);  
  27. throw initException;  
  28. }  
  29. try {  
  30. PoolingConnectionProvider cp = new PoolingConnectionProvider
    (dsDriver, dsURL, dsUser, dsPass, dsCnt,dsValidation);  
  31. dbMgr = DBConnectionManager.getInstance();  
  32. dbMgr.addConnectionProvider(dsNames[i], cp);  
  33. }  
  34. catch (SQLException sqle) {  
  35. initException = new SchedulerException
    ("Could not initialize DataSource: " + dsNames[i],sqle);  
  36. throw initException;  
  37. }  
  38. }  
  39. else if (providerClass.equals("org.quartz.utils.JNDIConnectionProvider")) {  
  40. Properties props = null;  
  41. if (null != dsJndiInitial || null != dsJndiProvider  
  42. || null != dsJndiPrincipal || null != dsJndiCredentials) {  
  43. props = new Properties();  
  44. if (dsJndiInitial != null)props.put(PROP_DATASOURCE_JNDI_INITIAL, dsJndiInitial);  
  45. if (dsJndiProvider != null)props.put(PROP_DATASOURCE_JNDI_PROVDER, dsJndiProvider);  
  46. if (dsJndiPrincipal != null)props.put(PROP_DATASOURCE_JNDI_PRINCIPAL,dsJndiPrincipal);  
  47. if (dsJndiCredentials != null)props.put
    (PROP_DATASOURCE_JNDI_CREDENTIALS,dsJndiCredentials);  
  48. }  
  49. JNDIConnectionProvider cp = new JNDIConnectionProvider(dsJndi,props, dsAlwaysLookup);  
  50. dbMgr = DBConnectionManager.getInstance();  
  51. dbMgr.addConnectionProvider(dsNames[i], cp);  
  52. }  
  53. else if (providerClass  
  54. .equals("org.quartz.utils.HibernateConnectionProvider")) {  
  55. HibernateConnectionProvider cp = new HibernateConnectionProvider();  
  56. dbMgr = DBConnectionManager.getInstance();  
  57. dbMgr.addConnectionProvider(dsNames[i], cp);  
  58. }  
  59. else {  
  60. initException = new SchedulerException
    ("Provider_Class not Supported: " + providerClass);  
  61. throw initException;  
  62. }  

以上介紹Hibernate Quartz。

【編輯推薦】

  1. Hibernate對(duì)數(shù)據(jù)索引進(jìn)行緩存
  2. 剖析Hibernate主鍵生成幾種常用方式
  3. 淺析Hibernate實(shí)現(xiàn)實(shí)體對(duì)象延遲加載
  4. Hibernate集合類(lèi)型的延遲加載特性
  5. 概括Hibernate屬性延遲加載
責(zé)任編輯:佚名 來(lái)源: IT168
相關(guān)推薦

2009-09-25 09:46:03

Hibernate s

2009-09-23 17:41:05

Hibernate事務(wù)

2009-09-28 10:24:58

Hibernate基礎(chǔ)

2009-09-25 17:19:28

Hibernate持久

2009-09-29 10:12:03

Hibernate A

2009-09-24 10:50:31

Hibernate主鍵

2009-09-25 16:27:33

Hibernate S

2009-09-23 15:50:21

Hibernate u

2009-09-28 16:54:34

Hibernate示例

2009-09-21 16:56:14

Hibernateibatis

2009-09-28 17:27:27

Hibernate A

2009-09-21 17:46:34

Hibernate持久

2009-09-22 15:22:08

Hibernate性能

2009-09-22 11:24:07

Hibernate查詢(xún)

2009-06-17 11:18:02

Hibernate延遲

2009-09-27 14:41:05

Hibernate I

2009-09-22 09:27:29

Hibernate P

2009-09-25 13:55:05

Hibernate使用

2009-09-21 16:40:42

Hibernate可行

2009-09-27 17:46:22

Hibernate監(jiān)聽(tīng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)