在websphere Liberty概要文件中替换WSCallHelper.clearStatementCache(连接)

时间:2016-11-19 23:23:16

标签: java java-ee websphere websphere-8 websphere-liberty

我正在将应用程序从WAS7迁移到Liberty。

现有代码在某些情况下使用WSCallHelper.clearStatementCache(connection)(例如:在程序调用的情况下找不到包)。

我发现WSCallHelper在自由服务器中不存在。

请你帮我解决这个问题的替代解决方案。 它可以是特定的自由,也可以是支持所有服务器的通用方法。

2 个答案:

答案 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的语句。