【发布时间】:2010-09-17 20:53:13
【问题描述】:
在 WebSphere 中,如果您的代码打开了两个并发的数据库连接,您会收到如下形式的错误:
J2CA0086W: 可共享连接 MCWrapper id 556e556e 托管连接 WSRdbManagedConnectionImpl@52365236 状态:STATE_TRAN_WRAPPER_INUSE from resource jdbc/abc 在本地事务包含边界内使用。
我们的框架允许我们这样做(嵌套事务可以在单独的连接或多个命名事务上)。我已经看到很多关于关闭 WebSphere 中的某些开关以打开连接共享的参考,但没有关于如何设置此标志的详细信息。有人可以指出实现这一目标的步骤吗?
在“解决问题”下,我想知道如何将连接池设置为不可共享(假设确实解决了问题)。
【问题讨论】:
-
好的,
Unshareable 将数据源设置为不可共享,除非通过 Hibernate/JPA 访问时,我继续收到相同的错误(好像WebSphere 将连接视为可共享的)。 -
发现根本原因是因为 J2EE 2.0 没有提到不使用全局事务时容器的行为应该是什么,WebSphere 引入了“本地事务包含”并强加了这个要求,即在servlet 调用(在我们的例子中),你不能让一个线程有两个物理数据库连接。无赖!
-
我想我下次会从 WebSphere 运行!