On 2/12/2015 1:46 PM, Wirth, Kevin wrote:


-----Original Message-----
From: David kerber [mailto:dcker...@verizon.net]
Sent: Thursday, February 12, 2015 1:00 PM
To: Tomcat Users List
Subject: Re: tomcat severe error when shutting down service but startup is clean

On 2/12/2015 12:48 PM, Cris Berneburg - US wrote:

-----Original Message-----
From: David kerber [mailto:dcker...@verizon.net]
Sent: Thursday, February 12, 2015 9:40 AM
To: Tomcat Users List
Subject: Re: tomcat severe error when shutting down service but
startup is clean

On 2/12/2015 9:06 AM, Wirth, Kevin wrote:
I keep getting these weird tomcat errors on shutdown on a newly built system 
using tomcat 7.0.57 on  a windows 2012 server with jdk 1.7 that I can't figure 
out.  This is the catalina log:
Feb 12, 2015 8:54:31 AM org.apache.catalina.loader.WebappClassLoader
clearReferencesJdbc
SEVERE: The web application [/identityiq] registered the JDBC driver 
[com.microsoft.sqlserver.jdbc.SQLServerDriver] but failed to unregister it when 
the web application was stopped. To prevent a memory leak, the JDBC Driver has 
been forcibly unregistered.
Feb 12, 2015 8:54:31 AM org.apache.catalina.loader.WebappClassLoader
clearReferencesThreads
SEVERE: The web application [/identityiq] appears to have started a thread 
named [Thread-3] but has failed to stop it. This is very likely to create a 
memory leak.

I ran into this a while back, and it means exactly what it says:  the db driver 
is being registered (loaded), but not being unloaded.  I fixed it by putting 
the db driver unload commands in a contextDestroyed method.

David

I have the same issue as Kevin.  What "unload commands" code did you call in the 
contextDestroyed method?  Are those methods "universal"?  The reason I ask is because we 
use different ODBC drivers for different environments.

I call this code from my .contextDestroyed method (I didn't write it, I copied 
it from somewhere on the web):


public static void unRegisterDrivers() {
     try {
        for ( Enumeration<Driver> drivers = DriverManager.getDrivers();
drivers.hasMoreElements(); ) {
           DriverManager.deregisterDriver( drivers.nextElement() );
        }
     } catch ( Exception e ) {
        /* log the exception */
     }
}

Thank you for your response.  Where do I put this code as I am new to tomcat?  
The application I am deploying is not written by me so I don't know the code.

It needs to be called from the .contextDestroyed method of whatever class is defined as a listener in your application. I don't know if it can be done without modifying existing classes or not.



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to