Maven Coordinates

To enable JMS Connector add the following dependency to your project’s pom.xml (see Managing Dependencies).

<dependency>
    <groupId>io.helidon.messaging.jms</groupId>
    <artifactId>helidon-messaging-jms</artifactId>
</dependency>
Copied

Reactive JMS Connector

Connecting streams to JMS with Reactive Messaging couldn’t be easier.

Explicit config with config builder

Example of consuming from JMS:
Channel<String> fromJms = Channel.<String>builder()
        .name("from-jms")
        .publisherConfig(JmsConnector.configBuilder()
                .jndiInitialFactory(ActiveMQInitialContextFactory.class)
                .jndiProviderUrl("tcp://127.0.0.1:61616")
                .type(JmsConfigBuilder.Type.QUEUE)
                .destination("se-example-queue-1")
                .build()
        )
        .build();

JmsConnector jmsConnector = JmsConnector.create();

Messaging messaging = Messaging.builder()
        .connector(jmsConnector)
        .listener(fromJms, payload -> {
            System.out.println("Jms says: " + payload);
        })
        .build()
        .start();
Copied
  • Prepare a channel for connecting jms connector with specific publisher configuration → listener
  • Channel → connector mapping is automatic when using JmsConnector.configBuilder()
  • Prepare JMS connector, can be used by any channel
Example of producing to JMS:
Channel<String> toJms = Channel.<String>builder()
        .subscriberConfig(JmsConnector.configBuilder()
                .jndiInitialFactory(ActiveMQInitialContextFactory.class)
                .jndiProviderUrl("tcp://127.0.0.1:61616")
                .type(JmsConfigBuilder.Type.QUEUE)
                .destination("se-example-queue-1")
                .build()
        ).build();

JmsConnector jmsConnector = JmsConnector.create();

messaging = Messaging.builder()
        .publisher(toJms, Multi.just("test1", "test2").map(Message::of))
        .connector(jmsConnector)
        .build()
        .start();
Copied
  • Prepare a channel for connecting jms connector with specific publisher configuration → listener
  • Channel → connector mapping is automatic when using JmsConnector.configBuilder()
  • Prepare JMS connector, can be used by any channel

Implicit Helidon Config

Example of connector config:
mp.messaging:

  incoming.from-jms:
    connector: helidon-jms
    destination: se-example-queue-1
    session-group-id: session-group-1
    type: queue

  outgoing.to-jms:
    connector: helidon-jms
      destination: se-example-queue-1
      type: queue

  connector:
    helidon-jms:
      jndi:
        jms-factory: ConnectionFactory
        env-properties:
          java.naming.factory.initial: org.apache.activemq.jndi.ActiveMQInitialContextFactory
          java.naming.provider.url: tcp://127.0.0.1:61616
Copied
Example of consuming from JMS:
Config config = Config.create();

Channel<String> fromJms = Channel.create("from-jms");

JmsConnector jmsConnector = JmsConnector.create();

Messaging messaging = Messaging.builder()
        .config(config)
        .connector(jmsConnector)
        .listener(fromJms, payload -> {
            System.out.println("Jms says: " + payload);
        })
        .build()
        .start();
Copied
  • Prepare JMS connector, can be used by any channel
Example of producing to JMS:
Config config = Config.create();

Channel<String> toJms = Channel.create("to-jms");

JmsConnector jmsConnector = JmsConnector.create();

messaging = Messaging.builder()
        .config(config)
        .publisher(toJms, Multi.just("test1", "test2").map(Message::of))
        .connector(jmsConnector)
        .build()
        .start();
Copied
  • Prepare JMS connector, can be used by any channel

Don’t forget to check out the examples with pre-configured ActiveMQ docker image, for easy testing: