代码之家  ›  专栏  ›  技术社区  ›  Alohci

jboss jdbc连接是否会失效,从而不会从连接池中重新提供?

  •  3
  • Alohci  · 技术社区  · 16 年前

    我有一种情况,JDBC连接将它所连接到的Oracle会话置于特定状态(即DBMS_Flashback启用模式)。退出此模式可能会失败(至少理论上是这样),这意味着会话错误地处于状态。在这种情况下,可以将连接返回到池,并由另一个线程获取,此时Oracle会话仍处于DBMS_Flashback启用模式。

    我已经证明这是真的。(JBAS4.2.1)

    理想情况是在模式退出失败时捕获sqlException,并将连接标记为“bad”,这样一旦返回池,jboss就会破坏连接并创建一个新的连接。

    但我找不到任何方法来标记这种直接破坏的联系。有人知道怎么做吗?

    2 回复  |  直到 16 年前
        1
  •  3
  •   brianegge    16 年前

    Oracle数据库连接配置应包含异常排序器:

    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
    

    这将尝试确定何时发生异常,即连接是否可以重用,或者必须断开连接。这是在尽最大努力的基础上进行的,并不是在所有情况下都有效。我对生产安装的偏好是 mark all exceptions as fatal . 为此,只需将异常排序器设置为 org.jboss.resource.adapter.jdbc.GenericExceptionSorter .

        2
  •  1
  •   Yishai    16 年前

    这是一个很好的问题,我不知道完整的答案,但是需要研究的一些方法是从jboss故障转移机制开始,在这里它测试连接的有效性。这方面的文件是 here . 然后,在测试有效性的SQL中,如果有什么东西可以放进去,如果连接处于DBMS ou flashback启用模式,那么JBoss应该放弃连接。它可能会在下一个连接请求上进行测试,而不是在返回池时进行测试,尽管这应该是可以接受的。