成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

全面介紹Hibernate Quartz

開發 后端
這里介紹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

  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,在不破壞其本來的邏輯和可配置性下進行了相應的修改.修改的是private Scheduler instantiate() throws SchedulerException方法,找到//Set up any DataSources段進行修改,代碼如下:

  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對數據索引進行緩存
  2. 剖析Hibernate主鍵生成幾種常用方式
  3. 淺析Hibernate實現實體對象延遲加載
  4. Hibernate集合類型的延遲加載特性
  5. 概括Hibernate屬性延遲加載
責任編輯:佚名 來源: IT168
相關推薦

2009-09-23 17:41:05

Hibernate事務

2009-09-25 09:46:03

Hibernate s

2009-09-28 10:24:58

Hibernate基礎

2009-09-25 17:19:28

Hibernate持久

2009-09-21 16:56:14

Hibernateibatis

2009-09-28 17:27:27

Hibernate A

2009-09-25 16:27:33

Hibernate S

2009-09-28 16:54:34

Hibernate示例

2009-09-23 15:50:21

Hibernate u

2009-09-24 10:50:31

Hibernate主鍵

2009-09-29 10:12:03

Hibernate A

2009-09-22 11:24:07

Hibernate查詢

2009-09-22 15:22:08

Hibernate性能

2009-09-21 17:46:34

Hibernate持久

2009-09-27 17:46:22

Hibernate監聽

2009-06-17 11:18:02

Hibernate延遲

2009-09-22 09:27:29

Hibernate P

2009-09-27 14:41:05

Hibernate I

2009-09-25 13:55:05

Hibernate使用

2009-09-21 16:40:42

Hibernate可行
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线播放国产一区二区三区 | 国产乱一区二区三区视频 | 国产乱码一区 | 一区二区三区高清 | 亚洲欧美中文日韩在线v日本 | 精品成人av | www.久久99| 欧美猛交 | 久久久999国产精品 中文字幕在线精品 | 精品国产91| 成人欧美一区二区三区在线播放 | 国产成人久久av免费高清密臂 | 在线观看国产 | 成年免费大片黄在线观看岛国 | 国产日韩欧美一区二区 | 国产免费一区二区 | 国产成人精品综合 | 中国一级特黄真人毛片 | h视频在线观看免费 | 久久久久中文字幕 | 操人视频在线观看 | 亚洲情综合五月天 | 天天操网 | 草久久 | 黄视频网站在线 | 成人av电影网| 啪啪免费网| 日韩小视频在线 | 超碰97人人人人人蜜桃 | 欧美电影在线 | 国产一区二区三区久久久久久久久 | 一区二区三区视频在线 | 亚洲成人第一页 | 国产美女视频 | 亚洲精品一区二区三区免 | 精品国产精品三级精品av网址 | 中文字幕亚洲无线 | 日韩欧美在线免费观看 | 欧美日本韩国一区二区 | 国产精品福利在线观看 | 欧美日韩一区二区三区在线观看 |