Unregister JDBC drivers, Fixes #134
Upon calling the maven tomcat7:shutdown goal, a severe error message was thrown because of not unloading the JDBC drivers. Signed-off-by: Doug Morato <dm@corp.io>
This commit is contained in:
parent
cf84e674b7
commit
4a43a5572e
@ -10,6 +10,10 @@ import javax.servlet.ServletContextEvent;
|
|||||||
import javax.servlet.ServletContextListener;
|
import javax.servlet.ServletContextListener;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.sql.Driver;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.Enumeration;
|
||||||
import java.util.jar.Attributes;
|
import java.util.jar.Attributes;
|
||||||
import java.util.jar.Manifest;
|
import java.util.jar.Manifest;
|
||||||
|
|
||||||
@ -34,6 +38,27 @@ public class WebGoatServletListener implements ServletContextListener {
|
|||||||
public void contextDestroyed(ServletContextEvent sce) {
|
public void contextDestroyed(ServletContextEvent sce) {
|
||||||
ServletContext context = sce.getServletContext();
|
ServletContext context = sce.getServletContext();
|
||||||
context.log("WebGoat is stopping");
|
context.log("WebGoat is stopping");
|
||||||
|
|
||||||
|
// Unregister JDBC drivers in this context's ClassLoader:
|
||||||
|
// Get the webapp's ClassLoader
|
||||||
|
ClassLoader cl = Thread.currentThread().getContextClassLoader();
|
||||||
|
// Loop through all drivers
|
||||||
|
Enumeration<Driver> drivers = DriverManager.getDrivers();
|
||||||
|
while (drivers.hasMoreElements()) {
|
||||||
|
java.sql.Driver driver = drivers.nextElement();
|
||||||
|
if (driver.getClass().getClassLoader() == cl) {
|
||||||
|
// This driver was registered by the webapp's ClassLoader, so deregister it:
|
||||||
|
try {
|
||||||
|
context.log("Unregister JDBC driver {}");
|
||||||
|
DriverManager.deregisterDriver(driver);
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
context.log("Error unregistering JDBC driver {}");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// driver was not registered by the webapp's ClassLoader and may be in use elsewhere
|
||||||
|
context.log("Not unregistering JDBC driver {} as it does not belong to this webapp's ClassLoader");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setApplicationVariables(ServletContext context) {
|
private void setApplicationVariables(ServletContext context) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user