Я ищу способ кэшировать подготовленные операторы в среде сервлета (в частности, Tomcat 5.5). Это предназначено для уменьшения количества создаваемых подготовленных операторов, т. е. количества вызовов connection.prepareStatement(sql)
.
Моя первоначальная идея заключалась в том, чтобы хранить PreparedStatement
объектов в сеансе, где ключ (имя атрибута) — это сам запрос. Это также можно сделать лениво.
Однако кто-то предупредил меня о том, что в зависимости от реализации драйвера JDBC к одному и тому же подготовленному оператору могут одновременно обращаться 2 потока (или запроса), что приводит, например, к установке неправильных параметров. Следовательно, доступ к этим объектам операторов необходимо синхронизировать.
Какой была бы хорошая стратегия для достижения этого?
Есть ли встроенный в tomcat метод для этого? Я видел этот ответ, где упоминается параметр poolPreparedStatements
DBCP, но это не совершенно ясно из документации, если она имеет то же значение, что и то, что я ищу.