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