用于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
- Wildfly 10无法连接数据源:无效连接
- Out容器JNDI数据源
- 以编程方式将数据源添加到嵌入式tomcat 7中的JNDI上下文
- 轻松启动独立JNDI服务器(并注册一些资源)
- 使用Mockito模拟JdbcTemplate的DataSource
- 使用javamail API发送带附件的电子邮件
- 如何在spring中覆盖JndiObjectFactoryBean并在java中设置解密密码
- 如何在JBoss中打开的连接池中正确保持数据库连接
- java.lang.ClassNotFoundException:com.microsoft.jdbc.sqlserver.SQLServerDriver:我加载了正确的驱动程序吗?