Замена для WSCallHelper.clearStatementCache(соединение) в профиле websphere Liberty
Я переносю приложение из WAS7 в Liberty.
Существующий код используетWSCallHelper.clearStatementCache(connection)
в некоторых сценариях (пример: пакет не найден в случае вызовов процедуры).
я нашел WSCallHelper
не существует на свободном сервере.
Не могли бы вы помочь мне с альтернативным решением для этого на свободе. Это может быть либо конкретная свобода, либо общий подход, который будет поддерживать все серверы.
2 ответа
Было бы полезно узнать больше о сценарии, по которому нужно позвонить WSCallHelper.clearStatementCache(connection)
, но на основании того, что вы описали, я предполагаю, что он вызывается только по пути ошибки.
В Liberty отсутствует API для программной очистки кэша операторов. Однако кэшированные операторы будут сопоставляться только в том случае, если число свойств одинаково, например: строка SQL, устойчивость RS, схема, уровень изоляции и некоторые другие.
Почему вам не нужен clearStatementCache:
Пример сценария, который вы описали для вызова clearStatementCache, - это когда пакет не найден в БД, но пакет должен быть отражен либо в строке SQL, либо в схеме. Таким образом, предполагая, что ваше приложение не повторяет неудачную строку SQL, вам не нужно вообще вызывать clearStatementCache.
Если вы действительно хотите очистить кэш операторов:
Как определено в спецификации JDBC, операторы являются дочерними объектами соединения. Таким образом, творческий способ очистки кеша операторов - избавиться от связи с плохими утверждениями. Вызов connection.close()
может не достигнуть этого, потому что соединения могут быть объединены сервером приложений, но вызывая connection.abort()
избавится от основного соединения и, следовательно, очистит кэш вашего оператора.
Мы также должны отметить, что если вы хотите более целенаправленный подход и иметь конкретный оператор, который вы хотите удалить из кэша (или вообще никогда не заходить в кеш), вы можете использовать JDBC spec API java.sql.Statement.setPoolable(false)
, Вызвать это до закрытия дескриптора оператора. Сервер приложений не будет кэшировать операторы, помеченные как poolable=false.