A Camel
Endpoint that bridges the CDI events facility with Camel routes so that CDI events
can be seamlessly observed / consumed (respectively produced / fired) from Camel consumers (respectively by Camel producers).
The
CdiEventEndpoint bean can be used to observe / consume CDI events whose event type is
T, for example:
@Inject
CdiEventEndpoint
cdiEventEndpoint;
from(cdiEventEndpoint).log("CDI event received: ${body}");
Conversely, the
CdiEventEndpoint bean can be used to produce / fire CDI events whose event type is
T, for example:
@Inject
CdiEventEndpoint
cdiEventEndpoint;
from("direct:event").to(cdiEventEndpoint).log("CDI event sent: ${body}");
The type variable
T, respectively the qualifiers, of a particular
CdiEventEndpoint injection point
are automatically translated into the parameterized
event type, respectively into the
event qualifiers, e.g.:
@Inject
@FooQualifier
CdiEventEndpoint
> cdiEventEndpoint;
from("direct:event").to(cdiEventEndpoint);
void observeCdiEvents(
@Observes
@FooQualifier List
event) {
logger.info("CDI event: {}", event);
}
When multiple Camel contexts exist in the CDI container, the
@ContextName qualifier can be used
to qualify the
CdiEventEndpoint injection points, e.g.:
@Inject
@ContextName("foo")
CdiEventEndpoint
> cdiEventEndpoint;
// Only observe / consume events having the
@ContextName("foo") qualifier
from(cdiEventEndpoint).log("Camel context 'foo'
> CDI event received: ${body}");
// Produce / fire events with the
@ContextName("foo") qualifier
from("...").to(cdiEventEndpoint);
void observeCdiEvents(
@Observes
@ContextName("foo") List
event) {
logger.info("Camel context 'foo'
> CDI event: {}", event);
}