【问题标题】:WebSphere local transaction containment boundary issue J2CA0086WWebSphere 本地事务包含边界问题 J2CA0086W
【发布时间】:2010-09-17 20:53:13
【问题描述】:

在 WebSphere 中,如果您的代码打开了两个并发的数据库连接,您会收到如下形式的错误:

J2CA0086W: 可共享连接 MCWrapper id 556e556e 托管连接 WSRdbManagedConnectionImpl@52365236 状态:STATE_TRAN_WRAPPER_INUSE from resource jdbc/abc 在本地事务包含边界内使用。

我们的框架允许我们这样做(嵌套事务可以在单独的连接或多个命名事务上)。我已经看到很多关于关闭 WebSphere 中的某些开关以打开连接共享的参考,但没有关于如何设置此标志的详细信息。有人可以指出实现这一目标的步骤吗?

具体来说,如果你看到这篇文章:http://www-01.ibm.com/support/docview.wss?rs=180&context=SSEQTP&dc=DB520&dc=D600&dc=DB530&dc=D700&dc=DB500&dc=DB540&dc=DB510&dc=DB550&q1=j2ca0086w&uid=swg21121449&loc=en_US&cs=utf-8&lang=en

在“解决问题”下,我想知道如何将连接池设置为不可共享(假设确实解决了问题)。

【问题讨论】:

  • 好的,Unshareable 将数据源设置为不可共享,除非通过 Hibernate/JPA 访问时,我继续收到相同的错误(好像WebSphere 将连接视为可共享的)。
  • 发现根本原因是因为 J2EE 2.0 没有提到不使用全局事务时容器的行为应该是什么,WebSphere 引入了“本地事务包含”并强加了这个要求,即在servlet 调用(在我们的例子中),你不能让一个线程有两个物理数据库连接。无赖!
  • 我想我下次会从 WebSphere 运行!

标签: jdbc websphere jta


【解决方案1】:

您使用的是哪个版本的 IBM WAS?如果您有 WAS 8,请访问 Resources-> JDC-> Datasources-> your datasources -> WebSphere Application Server properties -> Datasources no transactional。

对不起我的英语。

【讨论】:

    【解决方案2】:

    dataSource.getConnection() 在 一个小服务程序。数据源 jdbc/oracle 是从本地参考中查找的。 调用一次并重用连接或调用con.close(),然后再进行第二次getConnection()

    【讨论】:

    • 如果我们从注入的 sessionFactory 中获得 StatelessSession,它会为我们创建(打开)另一个连接吗?每当我尝试这样做时,我都会遇到同样的错误,而我在 WAS 中的数据源是事务性的
    • 当连接已经打开@Vahid时,它似乎没有创建新连接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多