JBoss AS 5数据库连接池重新连接MS SQL Server的例程

时间:2011-02-23 08:17:53

标签: java sql-server jboss datasource connection-pooling

当JBoss AS 5到DB的连接暂时丢失时,我想提出重新连接到MS SQL Server的最佳方法。

对于Oracle,我发现了这个问题:"Is there any way to have the JBoss connection pool reconnect to Oracle when connections go bad?"表示它使用Oracle特定的ping例程,并使用{{}中描述的 valid-connection-checker-class-name 属性。 3}}

我想避免的是每次从池中提取连接时都会运行另一个SQL,这是另一个属性 check-valid-connection-sql 基本上所做的。

所以现在,我倾向于使用 exception-sorter-class-name 的方法,但我不确定这是否是MS SQL Server中最好的方法。

希望听到您对该主题的建议。谢谢!

3 个答案:

答案 0 :(得分:1)

我不确定它是否会像您描述的那样(透明地)。

有效的连接检查程序(可以是* ds.xml文件中的sql语句或执行提升的类)是在从池中获取连接时调用的,因为数据库可能已关闭它在游泳池里。如果连接不再有效, 它被关闭,并且从数据库请求一个新的 - 这对于应用程序是完全透明,并且只有在从池中取出连接时才会发生(正如您所说)。然后,您可以在应用程序中长时间使用它。

异常分拣机旨在向应用程序报告,例如, ORA-0815是SQL语句的无害或错误的返回代码。如果它是一个无害的,它基本上被吞下,而对于一个坏的,它被报告给应用程序作为例外。

因此,如果您想使用异常分类器来查找池中的错误连接,您需要做好准备,基本上每个您触发的语句都可能抛出过时连接异常,您需要关闭连接并尝试获得一个新的。这意味着代码中的适当更改,您当然可以这样做。

我认为不时会在数据库中发出一个廉价的sql语句来检查来自池的连接是否仍然有效,这比“手动”进行所有这些检查要便宜得多。

顺便说一句:虽然有通用连接检查程序sql适用于所有数据库,但有些数据库提供了另一种测试连接是否正常的方法; Oracle对此有一个特殊的ping命令,它在您引用的特殊OracleConnectionChecker类中使用。所以可能是MS-SQL有类似的东西,它比简单的SQL语句便宜。

答案 1 :(得分:0)

我成功使用了背景验证属性:来自https://community.jboss.org/wiki/ConfigDataSources

background-validation-millis

答案 2 :(得分:0)

使用JBoss 5.1(我不知道其他版本),你可以使用

<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MSSQLValidConnectionChecker</valid-connection-checker-class-name>