Skip to content

Commit 5b2ee07

Browse files
author
Joerg Huber
committed
Deregister JDBC drivers.
1 parent bf527d0 commit 5b2ee07

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

SIF3InfraREST/SIF3REST/src/main/java/sif3/infra/rest/web/ProviderServletContext.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@
1818

1919
package sif3.infra.rest.web;
2020

21+
import java.sql.Driver;
22+
import java.sql.DriverManager;
23+
import java.sql.SQLException;
2124
import java.util.EnumSet;
25+
import java.util.Enumeration;
2226

2327
import javax.servlet.DispatcherType;
2428
import javax.servlet.FilterRegistration.Dynamic;
@@ -173,6 +177,10 @@ public void contextDestroyed(ServletContextEvent servletCtxEvent)
173177

174178
logger.debug("Release DB Connections....");
175179
HibernateUtil.shutdown();
180+
181+
logger.debug("Unregister JDBC drivers that may have been used ....");
182+
unregisterJDBCDrivers();
183+
176184
logger.info("Shutdown Provider: done.");
177185
}
178186

@@ -224,4 +232,36 @@ private void scheduleJobs(EnvironmentInfo envInfo)
224232
logger.info("Functional Services not enabled for this Provider.");
225233
}
226234
}
235+
236+
237+
private void unregisterJDBCDrivers()
238+
{
239+
// Now de-register JDBC drivers in this context's ClassLoader: Get the webapp's ClassLoader
240+
ClassLoader webAppClassLoader = Thread.currentThread().getContextClassLoader();
241+
242+
// Loop through all drivers
243+
Enumeration<Driver> drivers = DriverManager.getDrivers();
244+
while (drivers.hasMoreElements())
245+
{
246+
Driver driver = drivers.nextElement();
247+
if (driver.getClass().getClassLoader() == webAppClassLoader)
248+
{
249+
// This driver was registered by the webapp's ClassLoader, so deregister it:
250+
try
251+
{
252+
logger.info("Deregistering JDBC driver {}", driver);
253+
DriverManager.deregisterDriver(driver);
254+
}
255+
catch (SQLException ex)
256+
{
257+
logger.error("Error deregistering JDBC driver {}", driver, ex);
258+
}
259+
}
260+
else
261+
{
262+
// driver was not registered by the webapp's ClassLoader and may be in use elsewhere
263+
logger.trace( "Not deregistering JDBC driver {} as it does not belong to this webapp's ClassLoader", driver);
264+
}
265+
}
266+
}
227267
}

0 commit comments

Comments
 (0)