科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道关于 Hibernate 使用外部 Connection 的问题

关于 Hibernate 使用外部 Connection 的问题

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

最近在一个项目中试用了 Hibernate , 因为项目分两部分来做,在另一个部分中,已经使用了一个连接池(自行开发的),现在两部分要合在一起,于是便出现了问题。

作者:梦旭 来源:CSDN 2008年2月26日

关键字: java connection Hibernate

  • 评论
  • 分享微博
  • 分享邮件

最近在一个项目中试用了 Hibernate . 因为项目分两部分来做,在另一个部分中,已经使用了一个连接池(自行开发的).现在两部分要合在一起,于是便出现了如下问题.

开始,我们决定使用Hibernate的外部连接方法进行数据访问:

java代码: 

  
 public static DbSession openSession() {
      DbSession dbSession = null;
     try {
        //System.out.println("session is start");
        ConnectionPool connectionPool = PooledConnectionFactory.getConnectionPool();
        Connection con = connectionPool.getConnection();
       
        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代码: 

  
 public static void closeSession() throws HibernateException,Exception{
          Session s = (Session) session.get();
          session.set(null);
         if (s != null){
              s.connection().close();       
              s.close();
              System.out.println("session closing");
              //s = null;
 10            
 11         }
 12     }
 13 

问题出现了.在我们很慢点击的访问下还好.只要稍刷的快些,便会出现 Can't excute Query 的错误.大概时在执行某一查询时, Session中的Connection为close.或 session 为空.很奇怪,也许是这种方法在快速并发访问时,会出现这个问题.其实在Session.close()的时候,Session是不会为空的..所以在此有些不理解.怎么会取到已经关闭的连接呢.不知道大家有没有遇到过.

现在,我们有两种解决办法.

一是,将前一部分的连接池注册为DataSource,这样由Hibernate调用.
二是,将前一部分的连接池改为Hibernate所带的DBCP等.

这两种方法都不难更改. 不过,只是不理解上述的BUG.所以和大家讨论一下.也希望 Robbin 能看到.解释一下.
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章