替换 websphere Liberty 配置文件中的 WSCallHelper.clearStatementCache(connection)

Replacement for WSCallHelper.clearStatementCache(connection) in websphere Liberty profile

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

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

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

你能帮我找到一个替代的解决方案吗? 它可以是特定的自由,也可以是支持所有服务器的通用方法。

了解更多关于您需要调用 WSCallHelper.clearStatementCache(connection) 的场景会很有帮助,但根据您的描述,我假设它仅在错误路径上调用。

在 Liberty 中,没有 API 以编程方式清除语句缓存。但是,缓存的语句只有在许多属性相同时才会匹配,例如:SQL 字符串、RS 可保持性、模式、隔离级别和其他几个。

为什么不需要 clearStatementCache:
您描述的调用 clearStatementCache 的示例场景是在数据库中找不到包时,但包应该反映在 SQL 字符串或架构中。因此,假设您的应用程序不会重试失败的 SQL 字符串,您根本不需要调用 clearStatementCache。

如果你真的很想清除语句缓存:
正如 JDBC 规范所定义的,Statements 是 Connection 的子对象。因此,清除语句缓存的一种创造性方法是摆脱与错误语句的连接。调用 connection.close() 可能无法完成此操作,因为连接可以由应用程序服务器合并,但调用 connection.abort() 将摆脱底层连接并因此清除语句缓存。

我们还应该指出,如果您想要一种更有针对性的方法并且有一个特定的语句要从缓存中删除(或者一开始就不要进入缓存),您可以使用 JDBC规格APIjava.sql.Statement.setPoolable(false) .在关闭语句句柄之前调用它。应用服务器不会缓存标记为 poolable=false 的语句。