Details
diff --git a/server/src/main/webapp/WEB-INF/web.xml b/server/src/main/webapp/WEB-INF/web.xml
index 117c014..6f04261 100755
--- a/server/src/main/webapp/WEB-INF/web.xml
+++ b/server/src/main/webapp/WEB-INF/web.xml
@@ -20,7 +20,11 @@
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
-
+
+ <listener>
+ <listener-class>org.keycloak.services.listeners.KeycloakSessionDestroyListener</listener-class>
+ </listener>
+
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
diff --git a/services/src/main/java/org/keycloak/services/listeners/KeycloakSessionDestroyListener.java b/services/src/main/java/org/keycloak/services/listeners/KeycloakSessionDestroyListener.java
new file mode 100644
index 0000000..456889f
--- /dev/null
+++ b/services/src/main/java/org/keycloak/services/listeners/KeycloakSessionDestroyListener.java
@@ -0,0 +1,25 @@
+package org.keycloak.services.listeners;
+
+import org.keycloak.models.KeycloakSessionFactory;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+/**
+ * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
+ */
+public class KeycloakSessionDestroyListener implements ServletContextListener {
+
+ @Override
+ public void contextInitialized(ServletContextEvent sce) {
+ }
+
+ @Override
+ public void contextDestroyed(ServletContextEvent sce) {
+ KeycloakSessionFactory factory = (KeycloakSessionFactory) sce.getServletContext().getAttribute(KeycloakSessionFactory.class.getName());
+ if (factory != null) {
+ factory.close();
+ }
+ }
+
+}
diff --git a/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java b/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java
index 01e3b45..c7945bd 100755
--- a/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java
+++ b/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java
@@ -83,11 +83,6 @@ public class KeycloakApplication extends Application {
return factory;
}
- @PreDestroy
- public void destroy() {
- factory.close();
- }
-
@Override
public Set<Class<?>> getClasses() {
return classes;