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

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

对于Oracle,我发现了这个问题: “当连接变坏时,有没有办法让JBoss连接池重新连接到Oracle?” 它表示它使用Oracle特定的ping例程,并利用JBoss’Configuration Datasources Wiki中描述的valid-connection-checker-class-name属性。

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

所以现在,我倾向于使用exception排序器类名称的方法,但我不确定这是否是MS SQL Server的最佳方法。

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

我不确定它会以你描述的方式工作(透明)。

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

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

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

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

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

我成功使用了背景validation属性: background-validation-millis来自https://community.jboss.org/wiki/ConfigDataSources

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

 org.jboss.resource.adapter.jdbc.vendor.MSSQLValidConnectionChecker