国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Hibernate使用外部Connection的問題

2019-11-18 13:44:59
字體:
來源:轉載
供稿:網友

  最近在一個項目中試用了 Hibernate . 因為項目分兩部分來做,在另一個部分中,已經使用了一個連接池(自行開發的).現在兩部分要合在一起,于是便出現了如下問題.
  開始,我們決定使用Hibernate的外部連接方法進行數據訪問:
  
  java代碼:
  1
  2 public static Dbsession openSession() {...}
  3   DbSession dbSession = null;
  4   try {...}
  5    //System.out.  6    ConnectionPool connectionPool = PooledConnectionFactory.getConnectionPool();
  7    Connection con = connectionPool.getConnection();
  8
  9    Session s = (Session) session.get();
  10    if (s == null) {...}
  11     s = fact.openSession(con);//在此,使用外部連接池所給的連接
  12     session.set(s);
  13    }
  14
  15    dbSession = new DbSession(s);
  16   } catch (Throwable t) {
  17    String msg = "couldn't open a hibernate session for SessionFactory '" + "'";
  18    log.error( msg, t );
  19    throw new DbException( msg + " : " + t.getMessage() );
  20   }
  21   return dbSession;
  22  }
  23
  
  關閉Session方法如下:
  java代碼:
  
  1
  2 public static void closeSession() throws HibernateException,Exception{...}
  3     Session s = (Session) session.get();
  4     session.set(null);
  5     if (s != null){...}
  6       s.connection().close();
  7       s.close();
  8       System.out.println("session closing");
  9       //s = null;
  10
  11     }
  12   }
  13
  
  問題出現了.在我們很慢點擊的訪問下還好.只要稍刷的快些,便會出現 Can't excute Query 的錯誤.大概時在執行某一查詢時, Session中的Connection為close.或 session 為空.很希奇,也許是這種方法在快速并發訪問時,會出現這個問題.其實在Session.close()的時候,Session是不會為空的..所以在此有些不理解.怎么會取到已經關閉的連接呢.不知道大家有沒有碰到過.
  
  現在,我們有兩種解決辦法.
  一是,將前一部分的連接池注冊為DataSource,這樣由Hibernate調用.
  二是,將前一部分的連接池改為Hibernate所帶的DBCP等.
  這兩種方法都不難更改.
  不過,只是不理解上述的BUG.所以和大家討論一下.也希望 Robbin 能看到.解釋一下.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 怀仁县| 玉山县| 绥宁县| 门源| 鄂伦春自治旗| 利川市| 齐齐哈尔市| 灵台县| 辉县市| 汉阴县| 北票市| 迁西县| 镇赉县| 望江县| 托克托县| 永登县| 五河县| 汕尾市| 临朐县| 嘉义市| 马龙县| 栾川县| 宾阳县| 瑞丽市| 大悟县| 玉龙| 云南省| 桦川县| 宝丰县| 聊城市| 庆云县| 进贤县| 江山市| 友谊县| 义乌市| 陇川县| 河东区| 文安县| 抚顺市| 河北省| 淮滨县|