この問題はJDBC接続プールにあり、Tomcatだけでなく、JDBC接続プールを使用するすべてのアプリサーバーで発生する問題です。接続プールは、次の要求に備えて、プール内で開いている多数の接続を維持します。 PL / SQLパッケージが接続によって参照され、再コンパイルされた場合、そのパッケージを次に呼び出すと、ORA-06508エラーが発生します。これは、直接呼び出したパッケージだけでなく、コールスタック内の任意の場所のパッケージに影響します。
これを解決するために、一部のアプリサーバー(Weblogicなど)には、定期的に呼び出されるテストメソッドがあります。テストが失敗した場合、接続はプールから削除されるか、何らかの方法で更新されます。 Tomcatのメカニズムがわかりません。
これに対処する別の方法は、JDBC呼び出しの最初のメソッド呼び出しとしてdbms_session.reset_packageを呼び出すことです。これにより、セッション中のパッケージの状態がクリアされます。このアプローチは、パフォーマンスのオーバーヘッドがあり、パッケージスコープの変数がリセットされるため、パッケージの初期化ブロックを再度呼び出す必要があるため、お勧めしません。これは、別のパフォーマンスの低下です。
問題が発生し、不良接続をドロップする方法がない場合は、プール内のすべての接続で同じ例外が発生するため、接続プール全体をリセットする必要があります。