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

Java 替换websphere Liberty概要文件中的WSCallHelper.clearStatementCache(连接),java,jakarta-ee,websphere,websphere-8,websphere-liberty,Java,Jakarta Ee,Websphere,Websphere 8,Websphere Liberty,我正在将一个应用程序从WAS7迁移到Liberty 现有代码在某些情况下使用WSCallHelper.clearStatementCache(connection)(例如:在过程调用的情况下找不到包) 我发现liberty server中不存在WSCallHelper 你能帮我在liberty找到一个替代方案吗。 它可以是特定的liberty,也可以是支持所有服务器的通用方法。了解更多有关需要调用WSCallHelper.clearStatementCache(connection)的场景会很有

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

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

我发现liberty server中不存在
WSCallHelper

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

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

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

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

如果确实要清除语句缓存:

根据JDBC规范的定义,语句是连接的子对象。因此,清除语句缓存的一种创造性方法是消除与坏语句的连接。调用
connection.close()
可能无法完成此操作,因为应用程序服务器可以对连接进行池化,但调用
connection.abort()可能无法完成此操作
将摆脱底层连接,从而清除语句缓存。

我们还应该指出,如果您想要一种更有针对性的方法,并且想要从缓存中删除一条特定的语句(或者一开始就不想进入缓存),那么可以使用JDBC spec API
java.sql.statement.setPoolable(错误)
。请在关闭语句句柄之前调用。应用程序服务器不会缓存标记为poolable=false的语句