サーブレット環境(特にTomcat 5.5)でプリペアドステートメントをキャッシュする方法を探しています。これは、準備されたステートメントが作成される回数、すなわちconnection.prepareStatement(sql)
が呼び出される回数を減らすことを意味する。Tomcatでプリペアドステートメントをキャッシュするための良い戦略は何ですか?
私の最初のアイデアは、キー(属性名)がクエリそのものである、セッションにPreparedStatement
オブジェクトを格納することでした。これは遅れて行うこともできます。
しかし、JDBCドライバの実装によっては、2つのスレッド(または要求)によって同じ準備済みの文に同時にアクセスすることができ、誤ったパラメータが設定されているなどの警告を受けました。したがって、これらのステートメント・オブジェクトへのアクセスは同期化する必要があります。
これを達成するにはどうすればよいでしょうか?
これを行うためにtomcatに組み込まれているメソッドはありますか?私はpoolPreparedStatements
DBCPパラメータを記載しているthis answerを見ていますが、私が探しているのと同じ意味を持っているかどうかはドキュメントから完全には分かりません。