Guest User

Untitled

a guest
Oct 30th, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.88 KB | None | 0 0
  1. // This manually deregisters JDBC driver, which prevents Tomcat 7 from complaining about memory leaks wrto this class
  2. Enumeration<Driver> drivers = DriverManager.getDrivers();
  3. while (drivers.hasMoreElements()) {
  4. Driver driver = drivers.nextElement();
  5. try {
  6. DriverManager.deregisterDriver(driver);
  7. LOG.log(Level.INFO, String.format("deregistering jdbc driver: %s", driver));
  8. } catch (SQLException e) {
  9. LOG.log(Level.SEVERE, String.format("Error deregistering driver %s", driver), e);
  10. }
  11.  
  12. }
  13.  
  14. public final void contextDestroyed(ServletContextEvent sce) {
  15. // ... First close any background tasks which may be using the DB ...
  16. // ... Then close any DB connection pools ...
  17.  
  18. // Now deregister JDBC drivers in this context's ClassLoader:
  19. // Get the webapp's ClassLoader
  20. ClassLoader cl = Thread.currentThread().getContextClassLoader();
  21. // Loop through all drivers
  22. Enumeration<Driver> drivers = DriverManager.getDrivers();
  23. while (drivers.hasMoreElements()) {
  24. Driver driver = drivers.nextElement();
  25. if (driver.getClass().getClassLoader() == cl) {
  26. // This driver was registered by the webapp's ClassLoader, so deregister it:
  27. try {
  28. log.info("Deregistering JDBC driver {}", driver);
  29. DriverManager.deregisterDriver(driver);
  30. } catch (SQLException ex) {
  31. log.error("Error deregistering JDBC driver {}", driver, ex);
  32. }
  33. } else {
  34. // driver was not registered by the webapp's ClassLoader and may be in use elsewhere
  35. log.trace("Not deregistering JDBC driver {} as it does not belong to this webapp's ClassLoader", driver);
  36. }
  37. }
  38. }
  39.  
  40. <listener>
  41. <listener-class>com.mysite.MySpecialListener</listener-class>
  42. </listener>
  43.  
  44. public class MySpecialListener implements ServletContextListener {
  45.  
  46. @Override
  47. public void contextInitialized(ServletContextEvent sce) {
  48. // On Application Startup, please…
  49.  
  50. // Usually I'll make a singleton in here, set up my pool, etc.
  51. }
  52.  
  53. @Override
  54. public void contextDestroyed(ServletContextEvent sce) {
  55. // On Application Shutdown, please…
  56.  
  57. // 1. Go fetch that DataSource
  58. Context initContext = new InitialContext();
  59. Context envContext = (Context)initContext.lookup("java:/comp/env");
  60. DataSource datasource = (DataSource)envContext.lookup("jdbc/database");
  61.  
  62. // 2. Deregister Driver
  63. try {
  64. java.sql.Driver mySqlDriver = DriverManager.getDriver("jdbc:mysql://localhost:3306/");
  65. DriverManager.deregisterDriver(mySqlDriver);
  66. } catch (SQLException ex) {
  67. logger.info("Could not deregister driver:".concat(ex.getMessage()));
  68. }
  69.  
  70. // 3. For added safety, remove the reference to dataSource for GC to enjoy.
  71. dataSource = null;
  72. }
  73.  
  74. }
  75.  
  76. <dependency>
  77. <groupId>mysql</groupId>
  78. <artifactId>mysql-connector-java</artifactId>
  79. <version>5.1.18</version>
  80. <!-- put a copy in /usr/share/tomcat7/lib -->
  81. <scope>provided</scope>
  82. </dependency>
  83.  
  84. /**
  85. * Destroys the servlet cleanly by unloading JDBC drivers.
  86. *
  87. * @see javax.servlet.GenericServlet#destroy()
  88. */
  89. public void destroy() {
  90. String prefix = getClass().getSimpleName() +" destroy() ";
  91. ServletContext ctx = getServletContext();
  92. try {
  93. Enumeration<Driver> drivers = DriverManager.getDrivers();
  94. while(drivers.hasMoreElements()) {
  95. DriverManager.deregisterDriver(drivers.nextElement());
  96. }
  97. } catch(Exception e) {
  98. ctx.log(prefix + "Exception caught while deregistering JDBC drivers", e);
  99. }
  100. ctx.log(prefix + "complete");
  101. }
  102.  
  103. dataSource {
  104. pooled = true
  105. jmxExport = true
  106. driverClassName = "org.h2.Driver" // make this one comment
  107. username = "sa"
  108. password = ""
  109. }
Add Comment
Please, Sign In to add comment