关于 Hibernate 使用外部 Connection 的问题

王朝other·作者佚名  2007-10-23
窄屏简体版  字體: |||超大  

最近在一个项目中试用了 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 能看到.解释一下.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航