blob: 0937240ea7b07c28c36efb91c18361b97448c650 [file] [log] [blame]
[[BeanIntegration-BeanIntegration]]
Bean Integration
~~~~~~~~~~~~~~~~
Camel supports the integration of beans and POJOs in a number of ways
[[BeanIntegration-Annotations]]
Annotations
^^^^^^^^^^^
If a bean is defined in link:spring.html[Spring] XML or scanned using
the Spring component scanning mechanism and a *<camelContext>* is used
or a `CamelBeanPostProcessor` then we process a number of Camel
annotations to do various things such as injecting resources or
producing, consuming or routing messages.
The following annotations is supported and inject by Camel's
`CamelBeanPostProcessor`
[width="100%",cols="10%,90%",options="header",]
|=======================================================================
|Annotation |Description
|`@EndpointInject` |To inject an endpoint, see more details at link:pojo-producing.html[POJO
Producing].
|`@BeanInject` |*Camel 2.13:* To inject a bean obtained from the
link:registry.html[Registry]. See link:bean-injection.html[Bean
Injection].
|`@PropertyInject` |*Camel 2.12:* To inject a value using
link:using-propertyplaceholder.html[property placeholder].
|`@Produce` |To inject a producer to send message to an endpoint. See
link:pojo-producing.html[POJO Producing].
|`@Consume` |To inject a consumer on a method. See link:pojo-consuming.html[POJO
Consuming].
|=======================================================================
See more details at:
* link:pojo-consuming.html[POJO Consuming] to consume and possibly route
messages from Camel
* link:pojo-producing.html[POJO Producing] to make it easy to produce
camel messages from your POJOs
* link:dynamicrouter-annotation.html[DynamicRouter Annotation] for
creating a link:dynamic-router.html[Dynamic Router] from a POJO method
* link:recipientlist-annotation.html[RecipientList Annotation] for
creating a link:recipient-list.html[Recipient List] from a POJO method
* link:routingslip-annotation.html[RoutingSlip Annotation] for creating
a link:routing-slip.html[Routing Slip] for a POJO method
* link:bean-injection.html[Bean Injection] to inject Camel related
resources into your POJOs
* link:using-exchange-pattern-annotations.html[Using Exchange Pattern
Annotations] describes how the pattern annotations can be used to change
the behaviour of method invocations with
link:spring-remoting.html[Spring Remoting] or
link:pojo-producing.html[POJO Producing]
*Example*
See the link:pojo-messaging-example.html[POJO Messaging Example] for how
to use the annotations for routing and messaging.
[[BeanIntegration-BeanComponent]]
Bean Component
^^^^^^^^^^^^^^
The link:bean.html[Bean] component allows one to invoke a particular
method. Alternately the link:bean.html[Bean] component supports the
creation of a proxy via
http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/bean/ProxyHelper.html[ProxyHelper]
to a Java interface; which the implementation just sends a message
containing a
http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/bean/BeanInvocation.html[BeanInvocation]
to some Camel endpoint.
[[BeanIntegration-SpringRemoting]]
Spring Remoting
^^^^^^^^^^^^^^^
We support a link:spring-remoting.html[Spring Remoting] provider which
uses Camel as the underlying transport mechanism. The nice thing about
this approach is we can use any of the Camel transport
link:components.html[Components] to communicate between beans. It also
means we can use link:content-based-router.html[Content Based Router]
and the other link:enterprise-integration-patterns.html[Enterprise
Integration Patterns] in between the beans; in particular we can use
link:message-translator.html[Message Translator] to be able to convert
what the on-the-wire messages look like in addition to adding various
headers and so forth.
*Bean binding*
Whenever Camel invokes a bean method via one of the above methods
(link:bean.html[Bean] component, link:spring-remoting.html[Spring
Remoting] or link:pojo-consuming.html[POJO Consuming]) then the
*link:bean-binding.html[Bean Binding]* mechanism is used to figure out
what method to use (if it is not explicit) and how to bind the
link:message.html[Message] to the parameters possibly using the
link:parameter-binding-annotations.html[Parameter Binding Annotations]
or using a link:bean-binding.html[method name option].