15.2. Camel Bean Integration
Camel annotations
As part of the Camel bean integration, Camel comes with a set of annotations that are seamlessly supported by Camel CDI. So you can use any of these annotations in your CDI beans, for example:
Camel annotation | CDI equivalent | |
---|---|---|
Configuration property |
@PropertyInject("key") String value; |
If using DeltaSpike configuration mechanism:
@Inject @ConfigProperty(name = "key") String value;
See configuration properties for more details.
|
Producer template injection (default Camel context) |
@Produce(uri = "mock:outbound") ProducerTemplate producer; |
@Inject @Uri("direct:outbound") ProducerTemplate producer; |
Endpoint injection (default Camel context) |
@EndpointInject(uri = "direct:inbound") Endpoint endpoint; |
@Inject @Uri("direct:inbound") Endpoint endpoint; |
Endpoint injection (Camel context by name) |
@EndpointInject(uri = "direct:inbound", context = "foo") Endpoint contextEndpoint; |
@Inject @ContextName("foo") @Uri("direct:inbound") Endpoint contextEndpoint; |
Bean injection (by type) |
@BeanInject MyBean bean; |
@Inject MyBean bean; |
Bean injection (by name) |
@BeanInject("foo") MyBean bean; |
@Inject @Named("foo") MyBean bean; |
POJO consuming |
@Consume(uri = "seda:inbound") void consume(@Body String body) { //... } |
Bean component
You can refer to CDI beans, either by type or name, From the Camel DSL, for example with the Java Camel DSL:
class MyBean { //... } from("direct:inbound").bean(MyBean.class);
Or to lookup a CDI bean by name from the Java DSL:
@Named("foo") class MyNamedBean { //... } from("direct:inbound").bean("foo");
Referring beans from Endpoint URIs
When configuring endpoints using the URI syntax you can refer to beans in the Registry using the
#
notation. If the URI parameter value starts with a #
sign then Camel CDI will lookup for a bean of the given type by name, for example:
from("jms:queue:{{destination}}?transacted=true&transactionManager=#jtaTransactionManager").to("...");
Having the following CDI bean qualified with
@Named("jtaTransactionManager")
:
@Produces @Named("jtaTransactionManager") PlatformTransactionManager createTransactionManager(TransactionManager transactionManager, UserTransaction userTransaction) { JtaTransactionManager jtaTransactionManager = new JtaTransactionManager(); jtaTransactionManager.setUserTransaction(userTransaction); jtaTransactionManager.setTransactionManager(transactionManager); jtaTransactionManager.afterPropertiesSet(); return jtaTransactionManager; }