Camel 2.11.0 release (currently in progress)
Unknown macro: {div}
Unknown macro: {div}
New and Noteworthy
Welcome to the 2.11.0 release with approximately XXX issues resolved - including new features, improvements, and bug fixes, such as:
- Added Binding support, so it is easy to combine things like a Data Format to an Endpoint for easier composition of routes.
- Added support for SOAP 1.2 in SOAP data format.
- Cache operation for add/update now supports expiry headers to control time to live/idle/eternal.
- Added
allowNullBody
option to JMS to configure whether sending messages with no body is allowed. - Added
connectOnStartup
option to HDFS to allow to connect on demand, to avoid having Hadoop block for long time connecting to the HDFS cluster, as it has a hardcoded 15 minute retry mechanism. - Added support for daily and weekly trends to Twitter component.
- The Camel Maven Archetypes now generates projects without any license headers.
- Added 'rejectOld' option to the Resequencer to prevent out of order messages from being delivered after capacity/timeout events occur
- Further optimized XPath under concurrent load, and as well ensured resources are cleaned up eagerly
- Added options
allowNullBody
andreadLockMinLength
to the File and FTP components. - Made
changed
read lock strategy on FTP go faster (eg when the FTP server has a lot of files in the directory) if you enable thefastExistsCheck=true
option as well. Notice that some FTP server may not support this. - HL7 moves to HAPI 2.0 and supports using a dedicated Parser instance in the HL7 MLLP codec and DataFormat. Added "Terser" language and expression to be able to extract fields from a parsed message. HL7 now uses Apache Mina 2.x.
- Add an option
HttpMethodRestrict
to restrict HTTP method in Jetty and SERVLET - Add support for selection of Direct-VM consumers by using ant-like path expression.
- The POJO Producing, and POJO Consuming with @Consume, @Produce, @EndpointInject now supports a new {{property} attribute to get the endpoint configuration from a bean property (eg using a getter method); this allows you to configure this on the bean using conventional bean configuration.
- Testing with
camel-test-blueprint
on Windows no longer tries to cleanup after testing taking up 5 seconds and logging WARNs. - The File, and FTP components now support
fileExist=Move
option to move any existing files before writing a file. - Added option
loadStatisticsEnabled
on Camel JMX to allow to disable load statistics if not needed (avoids a background thread being in use, to calculate the load stats). - Enabled "lazy connections" for XMPP providers via the
testConnectionOnStartup
option - Added a connection monitor to detect and fix dropped XMPP consumer connections at configurable
connectionPollDelay
intervals - Added an
org.apache.camel.builder.ExchangeBuilder
to build the Exchange using a builder pattern. - The Camel Run Maven Goal can now run CDI applications.
- The Camel CDI component has improved a lot.
- Added option
allowRedeliveryWhileStopping
to error handlers to control if redelivery is allowed during stopping/shutting down Camel or the route(s). Turning this optionfalse
allows to stop quicker by rejecting redelivery attempts. - Added support for specifying user info in Camel Endpoint urls, which contains the @ sign; now the @ sign can be given as is; without being encoded to %40.
- Added robust connection support for JMX. Optional
testConnectionOnStartup
allows a JMX consumer to attach to a JMX server that becomes available after the JMX endpoint starts;reconnectOnConnectionFailure
enables re-connection of failed JMX connections. - JAXB and SOAP data format now supports controlling namespace prefix mappings when marshalling (eg to avoid prefixes such as ns2, ns3, ns4 etc.)
- Added support for using raw uris when Components create Endpoints. This gives component writers full power in case their component has special syntax/notation for endpoint uri configurations.
- EIPs configured with custom
AggregationStrategy
will now strict check the custom strategy exists in the Registry and no longer fallback and use a default strategy if not. - Camel now logs on shutdown if any thread pools hasn't been properly shutdown, and will shutdown them as fail safe (can only be done for the thread pools Camel manages).
- The buffer size of Stream caching is now configurable.
- Improved startup performance.
- Added JMS URI option
messageListenerContainerFactoryRef
which allows you to specify aMessageListenerContainerFactory
to determine whatorg.springframework.jms.listener.AbstractMessageListenerContainer
to use to consume messages. - MQTT producer now leverages the Asynchronous Routing Engine
- The Netty producer scales up and down much better by leveraging a channel pool.
- Added new Camel Maven Archetypes for creating Camel and Groovy applications.
- Camel now injects
CamelContext
onLanguage
andDataFormat
that implementsCamelContextAware
- Thread pools in Camel with
maximumQueueSize
of 0 or negative will now not use a worker queue but do direct hand-over to thread instead. - Simple unary operators for inc and dec must now have function on left hand side, to be parsed as unary function. Otherwise its now regarded as literal.
- Custom assigned id's on Camel Routes is now validated on starting the routes, that they must be unique within the same CamelContext.
- Added
AbstractListAggregationStrategy
abstract class to make it easier to aggregate into a List<V> using a customAggregationStrategy
. - EIPs which support using
AggregationStrategy
now control the lifecycle of the strategy; allowing end users to do custom logic in the start/stop methods of their strategy implementation. - Added option
includeSentJMSMessageID
to JMS to allow to enrich Camel Message with the actual JMSMessageID for the sent message. Can be used by end users for logging purpose etc. - Added option
allowShortLines
andignoreExtraColumns
to Flatpack data format. - Mail consumer now supports using search terms to filter mails by terms such as subject, from, body, sent date etc.
- The cached script file in the Language component can now be cleared via JMX.
- improved the karaf context-info command by adding a verbose mode to view endpoints list (now hidden by default) and adding stats on the number of active/inactive routes
- Added support for
UpdateList
,DeleteList
andExecutorType
to MyBatis component. - Added support for easier configuration of using concurrent message listener consumer when doing request/reply over JMS, by leveraging the existing
concurrentConsumers
andmaxConcurrentConsumers
options. - Improved the SMPP consumer to expose more data by receiving a
DeliverSM
message. - Camels property placeholders can now be used in route id / node id's in the routes in XML and Java DSLs, eg <route id="
coolName
"> - The thread name pattern can easily be configured on <camelContext> with the new threadNamePattern attribute
- Camel now validates SEDA and VM endpoints using same queue name, that if any queue size is in use, that size must match. As well Camel logs at INFO level when starting up the queues and the sizes. This allows end users to easily spot any issues if mistakenly using different queue sizes for the same queue names.
- Added JMX operations to throughput logger so you can get stats and also reset the stats at runtime.
- Added ACL support on the AWS-S3 component.
- Allow to configure Jetty http client thread pool settings in uri to make it easier to have different settings per endpoint.
- Added support for implied decimal formats to Bindy
- Added option
backlog
to Netty which can be used to allow more concurrent clients to connect to a Netty consumer. - Added support for parsing CSV if a field has a ' (single quote) at it's beging
- Added support for using custom url rewrite plugins in HTTP, HTTP4, and Jetty producers, which gives more control of url mappings, such as when bridging/proxying http based routes. Provided
camel-urlrewrite
as out of the box implementation. - Improved the Spring-Integration consumer to also send back the message headers.
Fixed issues
- Fixed RoutePolicy used from Spring XML with
routePolicyRef
may not invoke all callbacks on the policy. - Fixed MINA consumer to force disconnect upon timeout when doing request/reply, as late replies may cause side effects otherwise.
- Fixed Simple language with empty quoted literals in predicates, so you can compare against empty strings.
- Fixed SOAP data format to set SOAP 1.1 namespace when marhsalling faults.
- Fixed SEDA producer to send to the right BlockingQueue being attached on the SEDA endpoint so that the sent messages don't get lost.
- Fixed using
sendEmptyMessageWhenIdle=true
on a batch consumer such as File now working with Aggregate EIP when usingcompletionFromBatchConsumer
- Fixed
MockEndpoint.expectedBodiesReceivedInAnyOrder
to allow asserting on multiple arrival of the same/equal bodies. - Fixed MyBatis to demarcate the running transactions properly while reading/writing from/to database.
- Fixed Jetty, HTTP, HTTP4, and AHC http components not working in bridge mode if content path have spaces
- Fixed the CXF fallback convertor issue which camel will unregister it when the converter return null.
- Fixed the issue that File2 endpoints on windows without volume name in the path url.
- Fixed the issue of unmarshaling pgp messages encrypted with ElGamal.
- Fixed random Load Balancer to be even spread (before was a little less likely to pick the 1st)
- Fixed Timer to not fire during starting CamelContext
- Fixed XMLSecurity DataFormat to enable retrieval of password-protected private keys for asymmetric decryption
- Fixed Exception Clause using
maximumRedeliveries(-1)
may be wrongly inherited by anotheronException
during a redelivery process. - Fixed logging Error Handler to use configured logging level.
- Fixed issue when using multiple
RouteBuilder
with the Java DSL should have the Exception Clause being scoped perRouteBuilder
instance. - Fixed issue with restarting a SEDA consumer would not stop previous used thread pool.
- Fixed issue when running low on memory and doing request/reply over JMS may GC producer, causing a new producer to be created, and leaving a message listener running from the previous producer.
- Fixed issue with Try Catch Finally should clear redelivery exhaust state when catching exception in doCatch.
- Fixed potential NPE in MQTT producer, if a connection has been disconnected, and sending fails.
- Unhandled exceptions occurred during routing from SMPP routes is now propagated back to the SMPP library to deal with.
- Fixed Restlet parsing of last modification date header to use RFC-2822 date pattern.
- Fixed Aggregator EIP when using completion size expression and fixed size together not working as expected.
- Fixed Crypto to close streams after usage, which otherwise could prevent deleting files on Windows, which tend to lock files if a stream is open.
- Fixed issue with Groovy language in OSGi
- Fixed issue with localWorkDirectory option on FTP not using the optimization to try to rename the work file when routing to a File endpoint.
- Fixed SMPP to use the right data coding by using Octet unspecified (8-bit binary) and using the specified alphabet from the exchange, if provided.
- Fixed issue with configuring Jetty component using a name other than
"jetty"
. - Fixed issue with request/reply over JMS where a route is used on "the other end" to process the request and send back the correlated reply message; where a Camel route is used which has only 1 output, which can lead to no reply message being sent.
- Fixed regression in AWS-SQS by updating the existing queue without any attributes.
- Fixed issue with Using PropertyPlaceholder in Expressions in routes which are using <transacted> or <policy>.
- Fixed issue with Splitter which swallow the IOException catched by the underlying Scanner.
- Fixed issue with Splitter where tokenizeXML would not split XML messages containing nodes with namespace prefixes.
- Fixed issue when using Jetty component would create a http client having a live thread pool, which is only needed if using producers of Jetty. Also improved handling lifecycle of clients to be per producer by default instead of shared, which otherwise can cause issues.
- Fixed issue with File and FTP consumers when using
doneFileName
then avoid picking up files in middle of group if done file is written during scanning. - Fixed issue with File and FTP consumers when using
doneFileName
may produce too many WARN logs about cannot delete doneFileName.
New Enterprise Integration Patterns
- ControlBus EIP
New Camel Karaf Command
New Components
- ControlBus Component - for easy management using a component supporting the ControlBus EIP
camel-aws
- New component to AWS for sending metrics to Amazon CloudWatch from Camel.camel-cmis
- for integration of CMIS compliant content repositoriescamel-couchdb
- for integration with Apache CouchDBcamel-elasticsearch
- for ElasticSearchintegration
[camel-neo4j]
- for talking to neo4j server from Camel.camel-servletlistener
- for bootstrapping Camel in web applications, without the need for Spring Framework etc.camel-sjms
- for "Springless" JMS integrationcamel-urlrewrite
- for bridging http endpoints and using the UrlRewriteFilterproject to control url mappings.
camel-xmlrpc
- for talking to xmlrpc server from Camel.
DSL Changes
- Added LoggingErrorHandler fluent builder to Scala DSL.
New Annotations
New Data Formats
camel-xmlrpc
- support to marshal and unmarshal the request and response of xmlrpc.
New Languages
- VTD-XML - for fast and efficient XPath evaluation/splitting using the VTD-XML Library.
camel-vtdxml
hosted at Camel Extra
New Examples
- ActiveMQ Camel Tomcat example shows how to embed Apache ActiveMQ and Camel in a web application running on Apache Tomcat.
- Servlet Tomcat No Spring Example example shows how to run Camel as a web application in any web container such as Apache Tomcat, without the need for Spring Framework.
New Tutorials
API changes/breaking
- HL7 upgraded to now use Apache Mina 2.x.
- Renamed
org.apache.camel.component.hbase.HBaseContats
toorg.apache.camel.component.hbase.HBaseConstants
- Added getter/setter methods for loadStatisticsEnabled on
org.apache.camel.spi.ManagementStrategy
- Added
shutdownGraceful
, andawaitTermination
methods toExecutorServiceManager
to make it easier to shutdown a thread pool gracefully waiting for its tasks to complete. - Added method
useRawUri()
toorg.apache.camel.Component
to allow Components to use raw uri when creating endpoints. (by default the uri has been encoded prior to creation). - Added method
newThread
toorg.apache.camel.spi.ExecutorServiceManager
to create a new thread without using a thread pool. - Added support to parse CSV if a field has a ' (single quote) at it's beging, this made camel-csv doesn't support the field which is quoted with ' (single quote) or "(double quote) at the same time.
Internal/Non API refactorings that may affect users
- The Camel Test Kit provides a default Properties component out of the box; which mean using
addComponent("properties", ...)
is no longer needed; instead get the component usinggetComponent("properties")
and configure the component instead. - Minor adjustments to
org.apache.camel.builder.ErrorHandlerBuilder
. LRUCache
will attempt to stop service on eviction of entry.- Removed
org.apache.camel.model.NodeFactory
as its no longer applicable. - Added
getCamelContext()
methods toProducerTemplate
, andConsumerTemplate
- The method
isMatched
onGenericFileConsumer
is now abstract and has an extra parameter.
Known Issues
- The Tracer may not output all details for some situations, such as when using
onCompletion
orintercept
, etc. - The project cannot fully build the site using Maven (e.g. running
"mvn site"
). There is no plan to fix this, as the project does not use maven site. - JBoss 7 may log a WARNing when running Camel as a WAR file.
Dependency Upgrades
- Aries Blueprint 0.3 to 1.0.0
- Async Http Client 1.7.5 to 1.7.9
- Avro 1.6.2 to 1.7.2
- AWS 1.3.10 to 1.3.14
- BeanIO 2.0.0 to 2.0.3
- Bouncycastle 1.46 to 1.47
- Commons CSV 1.0-r706900_3 to 1.0-r706899_5
- Commons Exec 1.0.1 to 1.1
- Commons Net 3.1 to 3.2
- ConcurrentLinkedHashMap 1.2 to 1.3.2
- Ehcache 2.5.1 to 2.6.2
- Groovy 1.8.6 to 2.0.6
- GSon 2.1 to 2.2.2
- Hazelcast 2.0.2 to 2.4
- HBase 0.90.5 to 0.94.2
- HTTP Client 4.1.3 to 4.2.2
- Icu4j 4.0.1 to 4.8.1.1
- Jackson 1.9.7 to 1.9.10
- Jaxen 1.1.3 to 1.1.4
- JClouds 1.4.0 to 1.5.4
- Jettison 1.3.1 to 1.3.2
- Jetty 7.5.4 to 7.6.8
- JRuby 1.6.7 to 1.7.1
- JT400 6.0 to 6.7
- Krati 0.4.5 to 0.4.6
- LevelDBJNI 1.2 to 1.3
- Lucene 3.6.0 to 3.6.1
- Mina 2.0.4 to 2.0.7
- MongoDB Java Driver 2.7.3 to 2.9.1
- MQTTClient 1.2 to 1.4
- Netty 3.5.1 to 3.6.1
- Ognl bundle 3.0.4_1 to 3.0.5_1
- OSGi 4.2.0 to 4.3.0
- Pax Logging 1.5.3 to 1.6.10
- QPid 0.16 to 0.18
- Quartz 1.8.5 to 1.8.6
- Restlet 2.0.14 to 2.0.15
- Saxon 9.3.0.11 to 9.4.0.1
- Scala 2.9.1 to 2.9.2
- Shiro 1.2.0 to 1.2.1
- SLF4J 1.6.6 to 1.7.2
- Solr 3.6.0 to 3.6.1
- Spring Batch 2.1.8 to 2.1.9
- Spring Framework 3.1.1 to 3.1.2
- Spring Integration 2.1.2 to 2.1.4
- Spring Security 3.1.0 to 3.1.3
- SSHD 0.6.0 to 0.8.0
- StringTemplate 3.2.1 to 4.0.2
- TestNG 6.0.1 to 6.8
- Twitter4j 2.2.5 to 3.0.3
- Woodstox 4.1.2 to 4.1.3
- XStream 1.4.2 to 1.4.3
Important changes to consider when upgrading
- Spring 3.0.x support is @deprecated and some of the camel-spring components require Spring 3.1 onwards.
- Apache Camel Karaf features now uses Spring version range "[3.1,4)" as Spring 3.1 is now required as minimum Spring version.
camel-mina2
now usesOrderedThreadPoolExecutor
by default. There is a new optionorderedThreadPoolExecutor
you can configure it tofalse
to revert back to unordered if needed. If using SSL etc. then ordered is required to be used.camel-netty
now usesOrderedMemoryAwareThreadPoolExecutor
by default. There is a new optionorderedThreadPoolExecutor
you can configure it to false to revert back to unordered if needed. If using SSL etc. then ordered is required to be used.- The default value of the
delay
option on Timer has been changed from0
to1000
- The default value of the
convertLFtoCR
option of the HL7 MLLP codec has been changed fromtrue
tofalse
. Likewise, the HL7 DataFormat and TypeConverter do not perform this conversion anymore. - The Simple language has limited its support for the escape character to only new line, carriage return and tab characters. This makes it easier to use back-slash characters in the Simple language without double escaping etc.
camel-netty
now requirescommons-pool
as dependency.- The
maximumQueueSize
of Thread Poolsand Thread Pool Profiles
with values 0 or negative now means disable the worker queue, and use direct-handover. If you want an unbounded queue size, then set the
maximumQueueSize
toInteger.MAX_VALUE
which was what the previous code did. - Custom assigned id's on Camel Routes is now validated on starting the routes, that they must be unique within the same CamelContext.
camel-blueprint
now requires Apache Aries 1.0, and OSGi 4.3.0.- Removed @deprecated classes form
camel-spring
in theorg.apache.camel.component
package which was causing split-package issue with OSGi. Component authors who are using these @deprecated classes, should migrate to use equivalent classes fromcamel-core
in the same package. - The default Spring version is upgraded from 3.0.7 to 3.1.3 out of the box.
- Camel now validates SEDA and VM endpoints using same queue name, that if any queue size is in use, that size must match. As well Camel logs at INFO level when starting up the queues and the sizes. This allows end users to easily spot any issues if mistakenly using different queue sizes for the same queue names.
Notice
- Maven 3.0.2 or better is required to build the Source
- Apache Karaf 2.3.0 or better is required for deploying Camel 2.11 onwards, when using Apache Karaf.
- Spring 3.1 is now required as minimum Spring version. Spring 3.0 is @deprecated and only partially supported with this Camel release.
Getting the Distributions
Binary Distributions
Description |
Download Link |
PGP Signature file of download |
---|---|---|
Windows Distribution |
||
Unix/Linux/Cygwin Distribution |
Source Distributions
Description |
Download Link |
PGP Signature file of download |
---|---|---|
Source Distribution |