当前位置: 首页 > 面试题库 >

在Websphere中关闭访问的后台线程的JDBC连接

连成益
2023-03-14
问题内容

我有一个在Websphere Application Server 6.0(WAS)内的Websphere Portal
Server中运行的应用程序。在此应用程序中,由于需要花费很长时间才能完成一项特定功能,因此我将触发执行此操作的新线程。这个新线程从Hibernate打开一个新的Session,并开始使用它进行数据库事务。有时(无法看到模式),线程内的事务工作正常,并且该过程成功完成。但是其他时候我得到以下错误:

org.hibernate.exception.GenericJDBCException: could not load an entity: [OBJECT NAME#218294]
...
Caused by: com.ibm.websphere.ce.cm.ObjectClosedException: DSRA9110E: Connection is closed.
Method cleanup failed while trying to execute method cleanup on ManagedConnection WSRdbManagedConnectionImpl@642aa0d8 from resource jdbc/MyJDBCDataSource. Caught exception: com.ibm.ws.exception.WsException: DSRA0080E: An exception was received by the Data Store Adapter. See original exception message: Cannot call 'cleanup' on a ManagedConnection while it is still in a transaction..

我该如何阻止这种情况的发生?为什么WAS似乎要杀死我的连接,即使它们没有完成也是如此。有没有一种方法可以阻止WAS尝试关闭此特定连接?

谢谢


问题答案:

我在其他答案中提到了两个可能的原因:1.
hibernate.connection.release_mode可选参数或2.
非托管线程出现问题。既然我读了这个问题,我真的开始认为您的问题可能与您生成自己的线程有关。由于它们不是由容器管理的,因此这些胎面中使用的连接可能显示为“泄漏”(未正确关闭),如果WAS尝试在某个时间恢复它们,我也不会感到惊讶。

如果要开始长时间运行的作业,则应使用WorkManager。不要自己生成线程。



 类似资料:
  • 问题内容: 我们使用JDBC的标准代码部分是… 问题1:使用连接池时,是否应该在最后关闭连接?如果是这样,合并的目的就不会丢失吗?如果不是,那么DataSource如何知道何时释放Connection的特定实例并可以重用?我对此感到有些困惑,任何指针都表示赞赏。 问题2:以下方法是否接近标准?看起来像是尝试从池中获取连接,并且如果无法建立DataSource,请使用老式的DriverManager

  • 问题内容: 我们使用JDBC的标准代码部分是… 问题1:使用连接池时,是否应该在最后关闭连接?如果是这样,合并的目的就不会丢失吗?如果不是,那么DataSource如何知道何时释放Connection的特定实例并可以重用?我对此感到有些困惑,任何指针都表示赞赏。 问题2:以下方法是否接近标准?看起来像是尝试从池中获取连接,并且如果无法建立DataSource,请使用老式的DriverManager

  • 嗨,我只知道这是一个古老的问题,但今天只是好奇。正如我们所知connection.close也会关闭preared语句(如果我错了请纠正我)。但是如果我关闭连接然后关闭preared语句会怎样 我会得到一个空指针异常吗? 有人说这取决于jvm的速度。有时,ps.close()会在conn.close完成其工作之前运行并首先关闭,因此您不会得到null指针。 为了测试它,我修改了代码 但是我没有得到

  • 我试图制作一个图形用户界面,不断绘制从微处理器接收的信号。我试图通过只使用类来实现这一点,但是失败了,因为只有GUI类是oppend。现在我已经实现了线程(或者至少我认为我有!?)但是每个线程只运行一次。这让我相信我不明白tkinter中的主循环是如何工作的,所以我可以重新编写我的代码,让线程变得活跃吗? 我希望你们中的一些人能帮助我把这段代码变成一个实时更新绘图的程序。 但是它仍然没有更新plo

  • 我使用weblogic应用服务器和oracle数据库。我使用jdbc与oracle数据库通信。我从weblogic数据源获得连接,并向表中插入一条记录。问题是,当我想关闭连接(插入数据库后)时,我会遇到一个异常(连接已经关闭)。这是我的代码: 但是联系。close语句引发异常: 我试图避免连接。close语句(因为我教过连接是自动关闭的!!但过了一段时间,所有的连接都打开了,因此引发了一个异常)