यह समस्या JDBC कनेक्शन पूल के साथ है और यह एक समस्या है जो आपको JDBC कनेक्शन पूल का उपयोग करने वाले सभी ऐप सर्वरों के साथ मिलती है, न कि केवल टॉमकैट के साथ। कनेक्शन पूल अगले अनुरोध के लिए तैयार पूल में कई कनेक्शन खुले रखेगा। यदि एक PL/SQL पैकेज को कनेक्शन द्वारा संदर्भित किया गया है और फिर से संकलित किया गया है तो उस पैकेज की अगली कॉल ORA-06508 त्रुटि उत्पन्न करेगी। यह कॉल स्टैक में कहीं भी पैकेज को प्रभावित करेगा - न कि केवल उस पैकेज को जिसे आपने सीधे कॉल किया था।
इसे हल करने के लिए कुछ ऐप सर्वर (जैसे वेबलॉजिक) में एक परीक्षण विधि होती है जिसे समय-समय पर कहा जाता है। यदि परीक्षण विफल हो जाता है, तो कनेक्शन को पूल से हटा दिया जाता है या किसी तरह ताज़ा किया जाता है। मुझे यकीन नहीं है कि टॉमकैट के पास क्या तंत्र है।
इसे संबोधित करने का दूसरा तरीका है dbms_session.reset_package को अपने JDBC कॉल में पहली विधि कॉल के रूप में कॉल करना। यह आपके सत्र से पैकेज स्थिति को साफ़ कर देगा। इस दृष्टिकोण की अनुशंसा नहीं की जाती है क्योंकि इसमें एक प्रदर्शन ओवरहेड होता है और किसी भी पैकेज-स्कोप वाले चर को रीसेट किया जाता है, इसलिए पैकेज आरंभीकरण ब्लॉक को फिर से कॉल करने की आवश्यकता होती है - एक और प्रदर्शन हिट।
अगर आपको समस्या है और आपके पास खराब कनेक्शन छोड़ने का कोई तरीका नहीं है तो आपको पूरे कनेक्शन पूल को रीसेट करना होगा क्योंकि पूल में कोई भी कनेक्शन उसी अपवाद से ग्रस्त होगा।