You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/01/10 20:57:19 UTC

svn commit: r1229705 - /openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java

Author: rmannibucau
Date: Tue Jan 10 19:57:18 2012
New Revision: 1229705

URL: http://svn.apache.org/viewvc?rev=1229705&view=rev
Log:
allowing to skip catalina shutdown hook

Modified:
    openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java

Modified: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java?rev=1229705&r1=1229704&r2=1229705&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java (original)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java Tue Jan 10 19:57:18 2012
@@ -25,6 +25,8 @@ import org.apache.catalina.LifecycleEven
 import org.apache.catalina.LifecycleListener;
 import org.apache.catalina.core.StandardContext;
 import org.apache.catalina.core.StandardServer;
+import org.apache.catalina.startup.Bootstrap;
+import org.apache.catalina.startup.Catalina;
 import org.apache.openejb.OpenEJB;
 import org.apache.openejb.assembler.classic.WebAppBuilder;
 import org.apache.openejb.core.ServerFederation;
@@ -48,6 +50,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
@@ -81,6 +84,7 @@ import java.util.Properties;
 public class TomcatLoader implements Loader {
 
     private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_STARTUP, TomcatLoader.class);
+    public static final String TOMEE_NOSHUTDOWNHOOK_PROP = "tomee.noshutdownhook";
 
     /**
      * OpenEJB Server Daemon
@@ -252,6 +256,27 @@ public class TomcatLoader implements Loa
                 }
             }
         });
+
+        if (System.getProperty(TOMEE_NOSHUTDOWNHOOK_PROP) != null) {
+            final Field daemonField = Bootstrap.class.getDeclaredField("daemon");
+            final boolean acc = daemonField.isAccessible();
+            try {
+                daemonField.setAccessible(true);
+                final Bootstrap daemon = (Bootstrap) daemonField.get(null);
+                if (daemon != null) {
+                    final Field catalinaField = Bootstrap.class.getDeclaredField("catalinaDaemon");
+                    final boolean catalinaAcc = catalinaField.isAccessible();
+                    catalinaField.setAccessible(true);
+                    try {
+                        Catalina.class.getMethod("setUseShutdownHook", boolean.class).invoke(catalinaField.get(daemon), false);
+                    } finally {
+                        catalinaField.setAccessible(catalinaAcc);
+                    }
+                }
+            } finally {
+                daemonField.setAccessible(acc);
+            }
+        }
     }
 
     private void optionalService(Properties properties, String className) {