Show Table of Contents
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;
}
Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.