afd7d8b30f | ||
---|---|---|
.. | ||
src/main | ||
pom.xml | ||
readme.md |
readme.md
CDI Example
This is a simple example that demonstrates how to use CDI to integrate with ActiveMQ Artemis on the client side. It is designed mainly for connecting to a remote broker rather than embedding within your application.
Configuring the connection
While the integration provides an out of the box solution for configuration with some sensible defaults, the values should be configurable. This example leverages Apache DeltaSpike to configure the connectivity. It overrides the username, password and URL for the broker. The configuration hard codes the connector class. This configuration class is a standard CDI bean.
@ApplicationScoped
public class CDIClientConfig implements ArtemisClientConfiguration {
@Inject
@ConfigProperty(name = "username")
private String username;
@Inject
@ConfigProperty(name = "password")
private String password;
@Inject
@ConfigProperty(name = "url")
private String url;
@Override
public String getUsername() {
return username;
}
@Override
public String getPassword() {
return password;
}
@Override
public String getUrl() {
return url;
}
@Override
public String getConnectorFactory() {
return "org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory";
}
}
Setup and Tear Down
For the example, we leverage DeltaSpike's Container Control to start and stop the container. It is implemented within the main method, and is done in a way to make this work for both Weld and OpenWebBeans.
Sending and Receiving Messages
The key to how the CDI integration works is the built in beans. It provides two out of the box - a ConnectionFactory
and a JMSContext
. Most operations should be performed against the JMS 2.0 simplified API using JMSContext
. The example does this via an observer method, but can be done anywhere.
@ApplicationScoped
public class CDIMessagingIntegrator {
@Inject
private JMSContext context;
public void init(@Observes @Initialized(ApplicationScoped.class) Object obj) {
String body = "This is a test";
Queue queue = context.createQueue("test");
context.createProducer().send(queue, body);
String receivedBody = context.createConsumer(queue).receiveBody(String.class, 5000);
System.out.println("Received a message "+receivedBody);
}
}