Эта проблема связана с пулами соединений JDBC и является проблемой, которую вы получаете со всеми серверами приложений, использующими пулы соединений JDBC, а не только с Tomcat.Пулы соединений будут поддерживать несколько открытых соединений в пуле, готовых к следующему запросу.Если соединение с пакетом PL / SQL было указано и перекомпилировано, то следующий вызов этого пакета вызовет ошибку ORA-06508.Это повлияет на пакеты в любом месте стека вызовов, а не только на пакет, который вы вызвали напрямую.
Для решения этой проблемы некоторые серверы приложений (например, Weblogic) имеют метод тестирования, который вызывается периодически.Если тест не пройден, соединение удаляется из пула или обновляется каким-либо образом.Я не уверен, какой механизм имеет Tomcat.
Еще один способ решить эту проблему - вызвать dbms_session.reset_package в качестве первого вызова метода в вашем вызове JDBC.Это очистит состояние пакета от вашей сессии.Этот подход не рекомендуется, поскольку он снижает производительность, а все переменные в области пакета сбрасываются, поэтому необходимо повторно вызывать блоки инициализации пакета - еще один удар по производительности.
Если у вас есть проблема, и у вас нетУ вас нет способа сбрасывать плохие соединения, вам нужно сбросить весь пул соединений, так как любое соединение в пуле будет страдать от того же исключения.