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

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

Hibernate 使用外部 Connection 的問題

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

  最近在一個項目中試用了 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 能看到.解釋一下.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵南县| 桂林市| 南安市| 元朗区| 台北县| 永胜县| 隆德县| 鄂托克旗| 榆社县| 南汇区| 上虞市| 日照市| 九江市| 昔阳县| 独山县| 靖安县| 平乡县| 叙永县| 友谊县| 平乐县| 合水县| 合肥市| 望谟县| 秦皇岛市| 梓潼县| 胶州市| 谷城县| 新巴尔虎左旗| 凤翔县| 新安县| 明水县| 长汀县| 营口市| 彭阳县| 万盛区| 东乡族自治县| 永川市| 班戈县| 砚山县| 高安市| 沁源县|