我正在将应用程序从WAS7迁移到Liberty。
现有代码在某些情况下使用WSCallHelper.clearStatementCache(connection)
(例如:在程序调用的情况下找不到包)。
我发现WSCallHelper
在自由服务器中不存在。
请你帮我解决这个问题的替代解决方案。 它可以是特定的自由,也可以是支持所有服务器的通用方法。
答案 0 :(得分:1)
了解有关需要调用WSCallHelper.clearStatementCache(connection)
的方案的更多信息会很有帮助,但根据您所描述的内容,我将假设它仅在错误路径上调用。
在Liberty中,没有API以编程方式清除语句缓存。但是,只有在许多属性相同的情况下才会匹配缓存的语句,例如:SQL字符串,RS可保持性,模式,隔离级别和其他几个。
为什么你不需要clearStatementCache:
您为调用clearStatementCache而描述的示例场景是在DB中找不到包时,但包应该反映在SQL字符串或Schema中。因此,假设您的应用程序没有重试失败的SQL字符串,您根本不需要调用clearStatementCache。
如果你真的想清除语句缓存:
根据JDBC规范的定义,语句是Connection的子对象。因此,清除语句缓存的创造性方法是摆脱与坏语句的连接。调用connection.close()
可能无法完成此操作,因为应用程序服务器可以共享连接,但调用connection.abort()
将消除底层连接,从而清除语句缓存。
答案 1 :(得分:1)
我们还应该指出,如果你想要一个更有针对性的方法,并且想要从缓存中删除一个特定的语句(或者从不首先进入缓存),你可以使用JDBC spec API {{ 1}} 。在关闭语句句柄之前调用它。应用程序服务器不会缓存标记为poolable = false的语句。