| 
         
     
     | 
     | 
    
  
    | 
    关于 Hibernate 使用外部 Connection 的问题 | 
   
  
     | 
   
  
     | 
   
  
    | 
     作者:未知  来源:月光软件站  加入时间:2005-2-28 月光软件站  | 
   
  
    最近在一个项目中试用了 Hibernate . 因为项目分两部分来做,在另一个部分中,已经使用了一个连接池(自行开发的).现在两部分要合在一起,于是便出现了如下问题.  开始,我们决定使用Hibernate的外部连接方法进行数据访问:  
| java代码:  |  
 1    2  public static DbSession openSession () { 
...} 
 3      DbSession dbSession =  null;   4      try { 
...} 
 5        //System.out.println("session is start");  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 能看到.解释一下.
  
 
  | 
   
  
     | 
   
  
     相关文章:相关软件:  | 
   
   
      |