You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/09/04 10:16:47 UTC

svn commit: r811258 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/ main/java/org/apache/camel/component/file/ main/java/org/apache/camel/impl/ test/java/org/apache/camel/management/

Author: davsclaus
Date: Fri Sep  4 08:16:47 2009
New Revision: 811258

URL: http://svn.apache.org/viewvc?rev=811258&view=rev
Log:
CAMEL-1987: Easier to disable JMX. CAMEL-1965: Added retry for renaming and deleting files as Windows have potential problems here.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxInstrumentationDisableOnCamelContextTest.java
      - copied, changed from r811214, camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxInstrumentationDisableTest.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=811258&r1=811257&r2=811258&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java Fri Sep  4 08:16:47 2009
@@ -542,4 +542,9 @@
      */
     InterceptStrategy getDefaultTracer();
 
+    /**
+     * Disables using JMX as {@link org.apache.camel.spi.ManagementStrategy}.
+     */
+    void disableJMX();
+
 }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java?rev=811258&r1=811257&r2=811258&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java Fri Sep  4 08:16:47 2009
@@ -53,13 +53,55 @@
 
     public boolean deleteFile(String name) throws GenericFileOperationFailedException {        
         File file = new File(name);
-        return file.exists() && file.delete();
+
+        // do not try to delete non existing files
+        if (!file.exists()) {
+            return false;
+        }
+
+        // some OS such as Windows can have problem doing delete IO operations so we may need to
+        // retry a couple of times to let it work
+        boolean deleted = false;
+        int count = 0;
+        while (!deleted && count < 3) {
+            deleted = file.delete();
+            if (count > 0) {
+                try {
+                    Thread.sleep(1000);
+                } catch (InterruptedException e) {
+                    // ignore
+                }
+            }
+            count++;
+        }
+        return deleted;
     }
 
     public boolean renameFile(String from, String to) throws GenericFileOperationFailedException {
         File file = new File(from);
-        File target = new File(to);        
-        return file.renameTo(target);
+        File target = new File(to);
+
+        // do not try to rename non existing files
+        if (!file.exists()) {
+            return false;
+        }
+
+        // some OS such as Windows can have problem doing rename IO operations so we may need to
+        // retry a couple of times to let it work
+        boolean renamed = false;
+        int count = 0;
+        while (!renamed && count < 3) {
+            renamed = file.renameTo(target);
+            if (count > 0) {
+                try {
+                    Thread.sleep(1000);
+                } catch (InterruptedException e) {
+                    // ignore
+                }
+            }
+            count++;
+        }
+        return renamed;
     }
 
     public boolean existsFile(String name) throws GenericFileOperationFailedException {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=811258&r1=811257&r2=811258&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Fri Sep  4 08:16:47 2009
@@ -25,6 +25,7 @@
 import java.util.Map;
 import java.util.TreeMap;
 import java.util.concurrent.Callable;
+import java.util.concurrent.atomic.AtomicBoolean;
 import javax.naming.Context;
 
 import org.apache.camel.CamelContext;
@@ -108,11 +109,13 @@
     private Registry registry;
     private List<LifecycleStrategy> lifecycleStrategies = new ArrayList<LifecycleStrategy>();
     private ManagementStrategy managementStrategy;
+    private AtomicBoolean managementStrategyInitialized = new AtomicBoolean(false);
     private final List<RouteDefinition> routeDefinitions = new ArrayList<RouteDefinition>();
     private List<InterceptStrategy> interceptStrategies = new ArrayList<InterceptStrategy>();
     private Boolean trace = Boolean.FALSE;
     private Boolean streamCache = Boolean.FALSE;
     private Boolean handleFault = Boolean.FALSE;
+    private Boolean disableJMX = Boolean.FALSE;
     private Long delay;
     private ErrorHandlerBuilder errorHandlerBuilder;
     private Map<String, DataFormatDefinition> dataFormats = new HashMap<String, DataFormatDefinition>();
@@ -133,32 +136,6 @@
         super();
         name = NAME_PREFIX + ++nameSuffix;
 
-        if (Boolean.getBoolean(JmxSystemPropertyKeys.DISABLED)) {
-            LOG.info("JMX is disabled. Using DefaultManagementStrategy.");
-            managementStrategy = new DefaultManagementStrategy();
-        } else {
-            boolean registered = false;
-            try {
-                LOG.info("JMX enabled. Using DefaultManagedLifecycleStrategy.");
-                managementStrategy = new ManagedManagementStrategy(new DefaultManagementAgent());
-                lifecycleStrategies.add(new DefaultManagementLifecycleStrategy(this));
-                registered = true;
-            } catch (NoClassDefFoundError e) {
-                // if we can't instantiate the JMX enabled strategy then fallback to default
-                // could be because of missing .jars on the classpath
-                LOG.warn("Could not find needed classes for JMX lifecycle strategy."
-                        + " Needed class is in spring-context.jar using Spring 2.5 or newer ("
-                        + " spring-jmx.jar using Spring 2.0.x)."
-                        + " NoClassDefFoundError: " + e.getMessage());
-            } catch (Exception e) {
-                LOG.warn("Could not create JMX lifecycle strategy, caused by: " + e.getMessage());
-            }
-            if (!registered) {
-                LOG.warn("Cannot use JMX. Fallback to using DefaultManagementStrategy.");
-                managementStrategy = new DefaultManagementStrategy();
-            }
-        }
-
         // use WebSphere specific resolver if running on WebSphere
         if (WebSpherePackageScanClassResolver.isWebSphereClassLoader(this.getClass().getClassLoader())) {
             LOG.info("Using WebSphere specific PackageScanClassResolver");
@@ -1181,6 +1158,9 @@
     }
 
     public ManagementStrategy getManagementStrategy() {
+        if (managementStrategyInitialized.compareAndSet(false, true)) {
+            managementStrategy = createManagementStrategy();
+        }
         return managementStrategy;
     }
 
@@ -1208,11 +1188,49 @@
             }
         }
     }
-    
+
     protected Map<String, RouteService> getRouteServices() {
         return routeServices;
     }
 
+    protected ManagementStrategy createManagementStrategy() {
+        ManagementStrategy answer = null;
+
+        if (disableJMX || Boolean.getBoolean(JmxSystemPropertyKeys.DISABLED)) {
+            LOG.info("JMX is disabled. Using DefaultManagementStrategy.");
+            answer = new DefaultManagementStrategy();
+        } else {
+            try {
+                LOG.info("JMX enabled. Using DefaultManagedLifecycleStrategy.");
+                answer = new ManagedManagementStrategy(new DefaultManagementAgent());
+                // prefer to have it at first strategy
+                lifecycleStrategies.add(0, new DefaultManagementLifecycleStrategy(this));
+            } catch (NoClassDefFoundError e) {
+                // if we can't instantiate the JMX enabled strategy then fallback to default
+                // could be because of missing .jars on the classpath
+                LOG.warn("Could not find needed classes for JMX lifecycle strategy."
+                        + " Needed class is in spring-context.jar using Spring 2.5 or newer ("
+                        + " spring-jmx.jar using Spring 2.0.x)."
+                        + " NoClassDefFoundError: " + e.getMessage());
+            } catch (Exception e) {
+                LOG.warn("Could not create JMX lifecycle strategy, caused by: " + e.getMessage());
+            }
+        }
+
+        if (answer == null) {
+            LOG.warn("Cannot use JMX. Fallback to using DefaultManagementStrategy.");
+            answer = new DefaultManagementStrategy();
+        }
+
+        return answer;
+    }
+
+    public void disableJMX() {
+        disableJMX = true;
+        LOG.info("JMX is disabled. Using DefaultManagementStrategy.");
+        setManagementStrategy(new DefaultManagementStrategy());
+    }
+
     @Override
     public String toString() {
         return "CamelContext(" + getName() + ")";

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxInstrumentationDisableOnCamelContextTest.java (from r811214, camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxInstrumentationDisableTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxInstrumentationDisableOnCamelContextTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxInstrumentationDisableOnCamelContextTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxInstrumentationDisableTest.java&r1=811214&r2=811258&rev=811258&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxInstrumentationDisableTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxInstrumentationDisableOnCamelContextTest.java Fri Sep  4 08:16:47 2009
@@ -17,10 +17,10 @@
 package org.apache.camel.management;
 
 import java.util.Set;
-
 import javax.management.MBeanServerConnection;
 import javax.management.ObjectName;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.component.mock.MockEndpoint;
 
 /**
@@ -28,18 +28,13 @@
  *
  * @version $Revision$
  */
-public class JmxInstrumentationDisableTest extends JmxInstrumentationUsingPropertiesTest {
-
-    @Override
-    protected void setUp() throws Exception {
-        System.setProperty(JmxSystemPropertyKeys.DISABLED, "True");
-        super.setUp();
-    }
+public class JmxInstrumentationDisableOnCamelContextTest extends JmxInstrumentationUsingPropertiesTest {
 
     @Override
-    protected void tearDown() throws Exception {
-        System.clearProperty(JmxSystemPropertyKeys.DISABLED);
-        super.tearDown();
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext camel = super.createCamelContext();
+        camel.disableJMX();
+        return camel;
     }
 
     @Override
@@ -74,4 +69,4 @@
         assertEquals("Found mbeans: " + s, 0, s.size());
     }
 
-}
+}
\ No newline at end of file