Този проблем е с JDBC пуловете за свързване и е проблем, който получавате с всички сървъри на приложения, използващи JDBC пулове за свързване, не само с Tomcat. Пуловете за връзки ще поддържат определен брой връзки отворени в пула, готови за следващата заявка. Ако PL/SQL пакет е бил посочен от връзката и е прекомпилиран, тогава следващото извикване на този пакет ще предизвика грешка ORA-06508. Това ще засегне пакети навсякъде в стека за извикване - не само пакета, който сте извикали директно.
За разрешаване на това някои сървъри на приложения (като Weblogic) имат тестов метод, който се извиква периодично. Ако тестът е неуспешен, връзката се премахва от пула или се обновява по някакъв начин. Не съм сигурен какъв механизъм има Tomcat.
Друг начин да го адресирате е да извикате dbms_session.reset_package като първо извикване на метод във вашето JDBC извикване. Това ще изчисти състоянието на пакета от вашата сесия. Този подход не се препоръчва, тъй като има излишни разходи за производителност плюс всички променливи с обхват на пакета се нулират, така че блоковете за инициализация на пакета трябва да бъдат извикани отново - още един удар в производителността.
Ако имате проблема и нямате начин да премахнете лошите връзки, ще трябва да нулирате целия набор от връзки, тъй като всяка връзка в набора ще страда от същото изключение.