You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »

Writing Components

Apache Camel is designed to make it very easy to drop in new components whether they be routing components, transformers, transports etc. The idea of a component is to be a factory and manager of Endpoints.

Here are the main steps to writing a component.

  • write a POJO which implements the Component interface. The simplest approach is just to derive from DefaultComponent
  • to support auto-discovery of your component add a file to META-INF/services/org/apache/camel/component/FOO where FOO is the URI scheme for your component and any related endpoints on the fly

Users can then either explicitly create your component, configure it and register with a CamelContext or users can use a URI which auto-creates your component.

Writing Endpoints

An Endpoint is an object which can have message Exchange objects sent to it via a Producer or can have message exchanges consumed via either

When implementing an Endpoint you typically may implement one or more of the following methods

Typically you just derive from DefaultEndpoint and implement the

If your endpoint is a polling-centric component you can derive from DefaultPollingEndpoint and then implement createPollingConsumer(); the createConsumer() method will be created for you which avoids you having to write any polling code.

Dependency injection and auto-discovery

When using auto-discovery the CamelContext will default to its Injector implementation to inject any required or optional dependencies on the component. This allows you to use auto-discovery of components via URIs while still getting the benefits of dependency injection.

For example your component can depend on a JDBC DataSource or JMS ConnectionFactory which can be provided in the ApplicationContext in Spring or Module in Guice.

So you can if you prefer configure your Component using an IoC framework like Spring or Guice; then add it to the CamelContext. Or you can let the Component auto-inject itself as the endpoints are auto-discovered.

See Also

  • No labels