熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Hibernate 使用外部 Connection 的問題

2013-11-23 20:40:11  來源: Java開源技術 

  最近在一個項目中試用了 Hibernate 因為項目分兩部分來做在另一個部分中已經使用了一個連接池(自行開發的)現在兩部分要合在一起於是便出現了如下問題
  開始我們決定使用Hibernate的外部連接方法進行數據訪問:
  
  java代碼:
  
   public static DbSession openSession() {}
     DbSession dbSession = null;
     try {}
      //Systemoutprintln(session is start);
      ConnectionPool connectionPool = PooledConnectionFactorygetConnectionPool();
      Connection con = connectionPoolgetConnection();
  
      Session s = (Session) sessionget();
      if (s == null) {}
       s = factopenSession(con);//在此使用外部連接池所給的連接
       sessionset(s);
      }
  
      dbSession = new DbSession(s);
     } catch (Throwable t) {
      String msg = couldnt open a hibernate session for SessionFactory  + ;
      logerror( msg t );
      throw new DbException( msg + : + tgetMessage() );
     }
     return dbSession;
    }
  
  
  關閉Session方法如下:
  java代碼:
  
  
   public static void closeSession() throws HibernateExceptionException{}
       Session s = (Session) sessionget();
       sessionset(null);
       if (s != null){}
         nnection()close();
         sclose();
         Systemoutprintln(session closing);
         //s = null;
  
       }
     }
  
  
  問題出現了在我們很慢點擊的訪問下還好只要稍刷的快些便會出現 Cant excute Query 的錯誤大概時在執行某一查詢時 Session中的Connection為close或 session 為空很奇怪也許是這種方法在快速並發訪問時會出現這個問題其實在Sessionclose()的時候Session是不會為空的所以在此有些不理解怎麼會取到已經關閉的連接呢不知道大家有沒有遇到過
  
  現在我們有兩種解決辦法
  一是將前一部分的連接池注冊為DataSource這樣由Hibernate調用
  二是將前一部分的連接池改為Hibernate所帶的DBCP等
  這兩種方法都不難更改
  不過只是不理解上述的BUG所以和大家討論一下也希望 Robbin 能看到解釋一下

From:http://tw.wingwit.com/Article/program/Java/ky/201311/28862.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.