This document is intended for helping you upgrade your Apache Camel application from Camel 3.x to 3.y.
Important
|
If you are migrating from Camel 2.x then use the Camel 2.x to 3.0 Migration Guide. |
For example if you are upgrading Camel 3.0 to 3.2, then you should follow the guides from both 3.0 to 3.1 and 3.1 to 3.2.
These Camel components now no longer have dependency on Javax Servlet.
The exception class HttpOperationFailedException
is now from package org.apache.camel.http.base
instead of org.apache.camel.http.common
.
The Camel undertow producer throws this exception.
The bean component has been changed to behave as singleton scoped by default. This means that the bean is created or looked up once and reused.
The option cache
has been deprecated in favour of the new scope
option that by default is Singleton
. You can set this to Prototype
to use the old behaviour.
Note
|
Setting this to Prototype will let Camel create/lookup a new bean instance, per use; which acts as prototype scoped. However beware that if you lookup the bean, then the registry that holds the bean, would return a bean accordingly to its configuration, which can be singleton or prototype scoped. For example if you use Spring, or CDI, which has their own settings for setting bean scopes. |
The camel-etcd
component has changed its endpoint syntax from etcd:action/path
to
etcd-keys:path
, etcd-stats:path
, or etcd-watch:path
.
For example before
etcd:stats/leader
Should be changed to
etcd-stats:leader
This change was needed as the 3 actions could not share the same component/endpoint and had to be separated.
The stepwise functionality (stepwise=true) is not supported for stream download (treamDownload=true).
The camel-irc
component has changed its endpoint syntax and removed option #room as a part of the url path. Allowed syntax is:
irc:nick@host[:port]?[options]
The camel-milo
client component has changed its endpoint syntax from milo-client:tcp
to milo-client:opc.tcp
.
For example before
milo-client:tcp://foo:bar@localhost:1234
Should be changed to
milo-client:opc.tcp://foo:bar@localhost:1234
The camel-milo
server component requires Java 9 at runtime.
Property strictEndpointUrlsEnabled
is no longer supported.
Properties`hostName` and serverName
are replaced by path
.
To successfully use certificates for secured communication, JCE Jurisdiction Policy File Default
has to be Unlimited (which is by default since Java 9+).
The camel-nats
component has changed its endpoint syntax from nats:servers
to nats:topic
.
For example before
nats:myserver:4222?topic=myTopic
Should be changed to
nats:myTopic?servers=myserver:4222
This change is motivated by allowing to configure servers on component level, and also for Spring Boot auto-configuration etc.
The camel-nsq
component has changed its endpoint syntax from nsq:servers
to nsq:topic
.
For example before
nsq:myserver:4161/myTopic
Should be changed to
nsq:myTopic?servers=myserver:4161
This change is motivated by allowing to configure servers on component level, and also for Spring Boot auto-configuration etc.
The camel-ipfs
component has changed its endpoint syntax from nsq:host:port/command
to ipfs:command
.
The host and port is now configured on the component level instead.
For example before
ipfs:127.0.0.1:5001/add
Should be changed to
ipfs:add
The camel-xmlsecurity
component has changed its endpoint syntax from xmlsecurity:command/name
to
xmlsecurity-sign:name
, xmlsecurity-verify:name
.
For example before
xmlsecurity:verify/foo
Should be changed to
xmlsecurity-verify:foo
This change was needed as the 2 commands could not share the same component/endpoint and had to be separated.
The spi-annotations
JAR is mandatory but was mistakenly defined as optional scope. The content of this JAR
is now embedded directly into camel-api
JAR so end users does not have to include or depend on spi-annotations
JAR anymore.
XML and JAXB has been moved out of camel-base and camel-core-engine.
The module camel-jaxp has been renamed to camel-xml-jaxp.
The camel-xml-jaxp JAR has XML parsers and type converters. The camel-xml-jaxb has support for loading XML DSL routes using JAXB. An alternative is to use the new camel-xml-io for loading XML routes which is more light-weight and faster than JAXB.
JAXB is now optional in Camel and only needed when using XML routes with the camel-xml-jaxb
JAR
for loading and parsing the routes with JAXB. There is an alternative implementation with camel-xml-io
(see above).
This means that jaxb-core
and jaxb-impl
JARs no longer are needed on the classpath and as such has been removed
as dependency in the various Camel pom.xml
files.
There are a number of components that uses JAXB such as camel-spring
, camel-blueprint
, camel-cdi
for their support
of using XML for beans and Camel XML routes. And a few components such as camel-soap
etc.
But at general then Camel is now lighter in classpath dependency by not requiring to have JAXB present.
Camel has now been configured to not package scan for custom @Converter
classes on startup.
Type converters are now loaded and registered in faster way via source code generated loader classes
by having @Converter(loader = true)
specified. If you have custom converters and have not migrated to use
source code generated loaders, you can enable package scanning by setting
camelContext.setLoadTypeConverters(true);
And in XML:
<camelContext loadTypeConverters="true">
...
</camelContext>
And in Spring Boot application.properties
:
camel.loadTypeConverters=true
When shutting down Camel, then the default timeout has changed from 300 seconds (5 minutes) to 45 seconds. The 45 seconds was chosen as 30 seconds is a common timeout to use for remote protocols, so we wanted to give Camel a bit more time, and hence added 15 seconds so the default is 45 seconds.
The message history is now default disabled (due to optimize core for lower footprint out of the box). See the Message History documentation for how to enabled message history.
The inflight repository now does no longer allow browsing each individual exchange (due to optimize core for lower footprint out of the box). To enable browsing then you can turn this on via:
context.getInflightRepository().setInflightBrowseEnabled(true);
And in XML DSL:
<camelContext inflightRepositoryBrowseEnabled="true">
</camelContext>
When using component verifier (org.apache.camel.component.extension.ComponentVerifierExtension
) then you
would know need to add camel-core-catalog
to the classpath to make this useable. If the JAR is missing,
there will be an exception stating that RuntimeCamelCatalog
is not found and that this JAR should be added.
The camel-management
dependency of camel-spring-boot
was removed as Spring Boot 2.2+ disables JMX by default.
To continue using JMX with Camel Spring Boot add the following dependency:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-management</artifactId>
</dependency>
Camel now uses Camel Package Maven Plugin instead of camel-apt
APT compiler to generate component meta data.
Custom components should then change in the pom.xml from:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>apt</artifactId>
<scope>provided</scope>
</dependency>
To the following:
<plugin>
<groupId>org.apache.camel</groupId>
<artifactId>camel-package-maven-plugin</artifactId>
<version>${camel-version}</version>
<executions>
<execution>
<id>generate</id>
<goals>
<goal>generate-component</goal>
</goals>
<phase>process-classes</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>add-source</goal>
<goal>add-resource</goal>
</goals>
<configuration>
<sources>
<source>src/generated/java</source>
</sources>
<resources>
<resource>
<directory>src/generated/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
The ServiceSupport
class has changed its logging from instance to static, which means any inherited class that
uses log
would need to change the code to compile. This may happen in custom Camel components.
Before you may have:
log.debug("Sending message to foobar service: {}", messageId);
You then need to migrate the logging to also be static:
private static final Logger LOG = LoggerFactory.getLogger(FooBarProducer.class);
LOG.debug("Sending message to foobar service: {}", messageId);
The Exchange
API has been modified slightly as part of an optimization effort.
The returned value of getCreated
is changed from java.util.Date
to long
which is the time millis.
The Exchange.CREATED_TIMESTAMP
is no longer stored as exchange property, but you should use the getCreated
method on Exchange
.
The returned value of isExternalRedelivered
is changed from Boolean
to boolean
.
Some of the advanced and API for component developers on Exchange
has been moved to an extended interface ExtendedExchange
.
The following methods has been moved:
-
setFromEndpoint
-
setFromRouteId
-
setUnitOfWork
-
addOnCompletion
-
containsOnCompletion
-
handoverCompletions
You can use these methods by adapting to the extended exchange as shown below:
exchange.adapt(ExtendedExchange.class).addOnCompletion(...);
The message ID will now default to use the same id as Exchange ID as messages are associated with the exchange and using different IDs does not offer much value. Another reason is to optimize for performance to avoid generating new IDs. A few Camel components do provide their own message IDs such as the JMS components.
For advanced Camel users whom implement custom UnitOfWork
should implement the new `isBeforeAfterProcess()' method and return true of false,
whether Camel should invoke the before and after processor methods.
The method getId
has been removed.
Cookies from camel-http-common
has been moved into a new camel-http-base
JAR.
The package org.apache.camel.http.common.cookie
is renamed to org.apache.camel.http.base.cookie
.
To signal an Exchange
to stop continue routing has changed from setting the exchange property Exchange.ROUTE_STOP
to true.
Instead you should now use the setRouteStop
method on the Exchange
API.
exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);
Should now be:
exchange.setRouteStop(true);
To signal an Exchange
to rollback a transaction has changed from setting the exchange property Exchange.ROLLBACK_ONLY
to true.
Instead you should now use the setRollbackOnly
method on the Exchange
API (the same for rollback only last).
exchange.setProperty(Exchange.ROLLBACK_ONLY, Boolean.TRUE);
Should now be:
exchange.setRollbackOnly(true);
The exchange property Exchange.ERRORHANDLER_HANDLED
was used to indicate that the error handling mechanism for a given exchange
had completed. This property sometimes had to be conveyed by aggregation strategies, so instead of
oldExchange.getProperties().put(
Exchange.ERRORHANDLER_HANDLED,
newExchange.getProperties().get(Exchange.ERRORHANDLER_HANDLED));
one should now use:
Boolean handled = newExchange.adapt(ExtendedExchange.class)
.getErrorHandlerHandled();
oldExchange.adapt(ExtendedExchange.class)
.setErrorHandlerHandled(handled);
The class org.apache.camel.model.ModelHelper
has been removed. Instead you can use its functionality from ExtendedCamelContext
by
the getModelToXMLDumper
and getXMLRoutesDefinitionLoader
methods which has APIs similar to ModelHelper
.
The class org.apache.camel.tooling.util.JSonSchemaHelper
has been removed. Instead you can use utils coming from camel-util-json
and the class org.apache.camel.tooling.util.PackageHelper
The class org.apache.camel.processor.validation.PredicateValidatingProcessor
has moved from camel-xml-jaxp
JAR
to camel-support
JAR and renamed to org.apache.camel.support.processor.PredicateValidatingProcessor
.
The Java DSL has been revisited and the following methods have been removed:
-
ExpressionClause::body(Supplier<Object>)
-
MulticastDefinition::onPrepare(Supplier<Processor>)
-
ProcessorDefinition::process(Supplier<Processor>)
-
ProcessorDefinition::setBody(Supplier<Result>)
-
RecipientListDefinition::onPrepare(Supplier<Processor>)
-
SplitDefinition::onPrepare(Supplier<Processor>)
-
WireTapDefinition::newExchange(Supplier<Processor>)
-
WireTapDefinition::onPrepare(Supplier<Processor>)
This change is motivated by the need to remove method ambiguity for untyped languages such as Groovy and JavaScript, for more info see https://issues.apache.org/jira/browse/CAMEL-14300
Some unused methods have been removed from CamelContext
which were not part of the public API. The following methods have been removed:
-
getProducerServicePool
-
setProducerServicePool
-
getPollingConsumerServicePool
-
setPollingConsumerServicePool
Remove the method getProcessors
from Pipeline
as you should use the next
method instead to access a read-only view of the processors.
The @Experimental
annotation is moved from meta-annotations
JAR to camel-api
and moved from package org.apache.camel.meta
to org.apache.camel
.
And the meta-annotations has been removed.
The support for out-of-band property placeholders has been removed.
This means that XML that were using the http://camel.apache.org/schema/placeholder
namespace and that the java builders using the .placeholder(key, value).
have to
be modified.
from("direct:start")
.multicast()
.placeholder("stopOnException", "stop")
.to("mock:a")
should be rewritten as:
from("direct:start")
.multicast()
.stopOnException("{{stop}}")
.to("mock:a")
and
<route>
<from uri="direct:start"/>
<multicast prop:stopOnException="stop">
<to uri="mock:a"/>
</multicast>
</route>
should be rewritten as:
<route>
<from uri="direct:start"/>
<multicast stopOnException="{{stop}}">
<to uri="mock:a"/>
</multicast>
</route>
The rest configuration has been simplified and there is now a single RestConfiguration instance (CAMEL-13844) per Camel Context.
The following methods have been removed:
-
org.apache.camel.CamelContext#addRestConfiguration(RestConfiguration restConfiguration)
-
org.apache.camel.CamelContext#getRestConfiguration(String component, boolean defaultIfNotFound)
-
org.apache.camel.CamelContext#getRestConfigurations
The following ServiceDiscovery
implementation has been removed:
-
org.apache.camel.impl.cloud.CachingServiceDiscovery
-
org.apache.camel.impl.cloud.CachingServiceDiscoveryFactory
Camel on Apache Karaf / OSGi has been moved to its own project at: https://github.com/apache/camel-karaf
The Maven dependencies has changed the groupid from org.apache.camel
to org.apache.camel.karaf
.
For example the camel-blueprint
would be changed from
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-blueprint</artifactId>
<version>3.1.0</version>
</dependency>
To:
<dependency>
<groupId>org.apache.camel.karaf</groupId>
<artifactId>camel-blueprint</artifactId>
<version>3.2.0</version>
</dependency>
The Camel Karaf features are the same as before, you can still install Camel in Karaf shell via:
feature:repo-add camel 3.2.0
feature:install camel
-
Camel-test-blueprint
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-blueprint</artifactId>
<version>3.1.0</version>
</dependency>
To:
<dependency>
<groupId>org.apache.camel.karaf</groupId>
<artifactId>camel-test-blueprint</artifactId>
<version>3.2.0</version>
</dependency>
-
Camel-test-karaf
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-karaf</artifactId>
<version>3.1.0</version>
</dependency>
To:
<dependency>
<groupId>org.apache.camel.karaf</groupId>
<artifactId>camel-test-karaf</artifactId>
<version>3.2.0</version>
</dependency>
-
Camel-eventadmin
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-eventadmin</artifactId>
<version>3.1.0</version>
</dependency>
To:
<dependency>
<groupId>org.apache.camel.karaf</groupId>
<artifactId>camel-eventadmin</artifactId>
<version>3.2.0</version>
</dependency>
-
Camel-kura
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-kura</artifactId>
<version>3.1.0</version>
</dependency>
To:
<dependency>
<groupId>org.apache.camel.karaf</groupId>
<artifactId>camel-kura</artifactId>
<version>3.2.0</version>
</dependency>
-
Camel-osgi-activator
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-osgi-activator</artifactId>
<version>3.1.0</version>
</dependency>
To:
<dependency>
<groupId>org.apache.camel.karaf</groupId>
<artifactId>camel-osgi-activator</artifactId>
<version>3.2.0</version>
</dependency>
-
Camel-paxlogging
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-paxlogging</artifactId>
<version>3.1.0</version>
</dependency>
To:
<dependency>
<groupId>org.apache.camel.karaf</groupId>
<artifactId>camel-paxlogging</artifactId>
<version>3.2.0</version>
</dependency>
We introduce a camel-karaf-bom too, so the end-users should be able to have all of this dependencies easier:
<dependencyManagement>
<dependencies>
<!-- Add Camel BOM -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-bom</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Add Camel Karaf BOM -->
<dependency>
<groupId>org.apache.camel.karaf</groupId>
<artifactId>camel-karaf-bom</artifactId>
<version>${camel.karaf.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
In this way you’ll get both the boms and all the "goodies"
This component has been removed. Use any of the other REST capable components, such as camel-jetty
, camel-netty-http
or camel-undertow
.
The cacheSize
option on EIPs has been improved to reduce memory usage when the cache is disabled by
setting the value to -1. One of the optimizations is that new endpoints will not be added to the endpoint registry,
but discarded after use. This avoids storing additional endpoints in the cache (memory) as the cache should be disabled (cacheSize=-1).
See more details in the documentation for the cacheSize
option on the EIPs.
Configuring Camel components from plain Java code has changed in some components where they were using delegate setters for a nested configuration class. These delegates has been removed, to ensure configuration is more consistent and aligned with how endpoints is configured as well, and by using source code generated configurer classes.
The following Camel components has been affected and changed on the component level:
-
camel-aws
-
camel-aws2
-
camel-consul
-
camel-etcd
-
camel-infinispan
-
camel-kafka
-
camel-servicenow
-
camel-ssh
-
camel-stomp
-
camel-xmlsecurity
-
camel-yammer
This only affects if you are configuring these components using Java code or XML <bean>
style.
For example
KafkaComponent kafka = new KafkaComponent();
kafka.setBrokers("mybroker1:1234,mybroker2:1234");
Should now be:
KafkaComponent kafka = new KafkaComponent();
kafka.getConfiguration().setBrokers("mybroker1:1234,mybroker2:1234");
And in XML:
<bean id="kafka" class="org.apache.camel.component.kafka.KafkaComponent">
<property name="brokers" value="mybroker1:1234,mybroker2:1234"/>
</bean>
Should now be:
<bean id="kafka" class="org.apache.camel.component.kafka.KafkaComponent">
<property name="configuration">
<property name="brokers" value="mybroker1:1234,mybroker2:1234"/>
</property>
</bean>
Configuring Camel spring boot components has changed its option keys to be flattened and have the .configuration
prefix
removed now.
Before in application.properties
camel.component.kafka.configuration.brokers=mybroker1:1234,mybroker2:1234
Should now be
camel.component.kafka.brokers=mybroker1:1234,mybroker2:1234
This applies to all the Camel spring boot starter JARs where basically .configuration
should be removed.
When configuring these components from spring boot auto-configuration then the URL for the broker was named broker-u-r-l
in the spring boot auto configuration support. This has been renamed to broker-url
and a few other options too.
Before:
camel.component.activemq.broker-u-r-l=tcp://localhost:61616
After:
camel.component.activemq.broker-url=tcp://localhost:61616
The XML DSL has changed for the <configuration>
element, which now
is flattened so the key/values should be configured on it directly:
Before:
<dataFormats>
<any23 id="any23" baseURI ="http://mock.foo/bar" outputFormat="TURTLE" >
<configuration>
<property key="any23.extraction.metadata.nesting" value="off" />
<property key="another-key" value="another-value" />
</configuration>
<extractors>html-head-title</extractors>
</any23>
</dataFormats>
After:
<dataFormats>
<any23 id="any23" baseURI ="http://mock.foo/bar" outputFormat="TURTLE" >
<configuration key="any23.extraction.metadata.nesting" value="off"/>
<configuration key="another-key" value="another-value"/>
<extractors>html-head-title</extractors>
</any23>
</dataFormats>
The avro component and data format has been split up into two JARs. The dataformat is in camel-avro
JAR
and the component in camel-avro-rpc
JAR.
Camel now requires endpoint URIs to include context-path which means
the endpoint URI infinispan
should be changed to infinispan:current
.
The google-pubnub component has been improved to use a new Java library and become faster.
Support for Apache Karaf has been removed.
The XML DSL has changed for the <converters>
, <alias>
, implicitCollections
, and omitFields
elements,
which now is flattened so the key/values should be configured on it directly.
Before:
<xstream id="xstream-1" mode="NO_REFERENCES"
permissions="-org.apache.camel.dataformat.xstream.*,org.apache.camel.dataformat.xstream.PurchaseHistory,org.apache.camel.dataformat.xstream.PurchaseOrder">
<converters>
<converter class="org.apache.camel.dataformat.xstream.XStreamConfigurationTest$PurchaseOrderConverter" />
</converters>
<aliases>
<alias name="purchase-order" class="org.apache.camel.dataformat.xstream.PurchaseOrder" />
</aliases>
<implicitCollections>
<class name="org.apache.camel.dataformat.xstream.PurchaseHistory">
<field>history</field>
</class>
</implicitCollections>
</xstream>
After:
<xstream id="xstream-1" mode="NO_REFERENCES"
permissions="-org.apache.camel.dataformat.xstream.*,org.apache.camel.dataformat.xstream.PurchaseHistory,org.apache.camel.dataformat.xstream.PurchaseOrder">
<converters key="purchase-converter" value="org.apache.camel.dataformat.xstream.XStreamConfigurationTest$PurchaseOrderConverter"/>
<aliases key="purchase-order" value="org.apache.camel.dataformat.xstream.PurchaseOrder"/>
<implicitCollections key="org.apache.camel.dataformat.xstream.PurchaseHistory" value="history"/>
</xstream>
Multiple values for implicitCollections
and omitFields
can be separated by comma
For example:
<implicitCollections key="org.apache.camel.dataformat.xstream.PurchaseHistory" value="history,adress"/>
This component has been upgraded from using Apache Http Client 3.x to 4.x and is therefore not fully backwards compatible.
Some options for configurer and setting proxy is removed. You can however configure this directly on a custom HttpClient
instance
and set this on the WeatherComponent
to use.
Previously Camel components may work by referring to their name only without a colon and context path (eg log
)
that for a few components would allow them to create an endpoint anyway.
Now this is not allowed and Camel will throw an NoSuchEndpointException
.
An endpoint by its logical id can still be referred by the id only, eg
Endpoint endpoint = camelContext.getEndpoint("myCoolEndpoint");
The context scope error handling has been modified a bit. The processors in those onException
and
onCompletion
are not shared between routes anymore. This should have little effect in most cases.
If there is a need to have a single set of processors involved (such as when using a loadbalancer or
other stateful patterns), then an intermediary route needs to be used. The following excerpt:
onException(Exception.class).handled(true)
.loadBalance().roundRobin().id("round")
.to("mock:error", "mock:error2", "mock:error3");
-
needs to be rewritten as:
onException(Exception.class).handled(true).to("direct:error");
from("direct:error").loadBalance().roundRobin().id("round")
.to("mock:error", "mock:error2", "mock:error3");
The base support for cluster in org.apache.camel.cluster
has been moved
out of camel-core-engine
into separate JAR named camel-cluster
.
Camel was using a type converter from String
→ long
that accepted
a time pattern which allowed to configure long values such as 2s
for 2 seconds, e.g. 2000
.
And more complex such as 8h15m
for 8 hours and 15 minutes.
However as this was implemented as part of String
→ long
type conversion
which then adds a little bit of overhead during routing, when converting from String to plain numbers.
To make Camel routing engine as fast as possible this feature has been removed.
For example a timer with a 5 second period
from("timer:foo?period=5s")
Should now be specified as numeric only:
from("timer:foo?period=5000")
The org.apache.camel.spring.Main
class has been moved out of camel-spring
JAR into its own
JAR named camel-spring-main
.
The org.apache.camel.test.blueprint.Main
class has been renamed to org.apache.camel.test.blueprint.Main
and moved into its own camel-test-blueprint
JAR.
To use the camel-maven-plugin goal camel:run
with OSGi plugin, you now need to add the following dependency
to the classpath org.apache.camel.karaf:camel-blueprint-main
.
The method getEndpoint
now throws NoSuchEndpointException
directly instead of being wrapped
within an FailedToResolveEndpoint
.
The org.apache.camel.impl.engine.JavaUuidGenerator
class has been removed.
Its a very slow UUID generator and its not recommended to be used.
The org.apache.camel.component.properties.PropertiesFunction
has been moved to org.apache.camel.spi.PropertiesFunction
and its now possible to add custom functions on the org.apache.camel.spi.PropertiesComponent
interface.
The JMX Connector configuration in camel-management has been removed in Camel 3.2.0. If you want to support the ability to use JMX with Camel remotely, then just use the default JVM JMX remote capabilities. For example, use the following (insecure) JVM settings to be able to manage Camel remotely on localhost, port 9913:
-Dcom.sun.management.jmxremote.port=9913
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=localhost