JBoss JDBC连接是否可以无效,以便它不会从连接池重新提供?

时间:2009-05-28 16:24:45

标签: oracle jdbc jboss connection-pooling

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

我已经证明这实际上会发生。 (JBoss 4.2.1)

理想的是在模式退出失败时捕获SQLException,并将连接标记为“坏”,这样一旦它返回到池中,JBoss就会破坏连接并创建一个新连接。 / p>

但我找不到任何方法来标记连接以立即销毁。有谁知道一种方式?

2 个答案:

答案 0 :(得分:3)

您的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

答案 1 :(得分:1)

这是一个很好的问题,我不知道完整的答案,但是一些调查的途径是从JBoss故障转移机制开始,它测试连接的有效性。该文档是here。然后在测试有效性的SQL中,如果连接处于DBMS_FLASHBACK启用模式,如果某些内容可能会失败,那么应该让JBoss放弃连接。它可能会测试下一个连接请求,而不是在它返回池时,尽管这应该是可以接受的。