2 Replies Latest reply on Aug 21, 2017 10:08 AM by rsoika

    How to configure Wildfly 10 to send JMS messages from a Stateless Session EJB?

    rsoika

      I try to figure out how to setup Wildfly 10 so I can send a JMS 2.0 message to a queue.

      I added the messaging-activemq extention to my standalone.xml:

       

      <extension module="org.wildfly.extension.messaging-activemq"/>
      

       

      and also I added the subsystem:

       

             ....
            <subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
                  <server name="default">
                      <security-setting name="#">
                          <role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true"/>
                      </security-setting>
                      <address-setting name="#" dead-letter-address="jms.queue.DLQ" expiry-address="jms.queue.ExpiryQueue" max-size-bytes="10485760" page-size-bytes="2097152" message-counter-history-day-limit="10"/>
                      <http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/>
                      <http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput">
                          <param name="batch-delay" value="50"/>
                      </http-connector>
                      <in-vm-connector name="in-vm" server-id="0"/>
                      <http-acceptor name="http-acceptor" http-listener="default"/>
                      <http-acceptor name="http-acceptor-throughput" http-listener="default">
                          <param name="batch-delay" value="50"/>
                          <param name="direct-deliver" value="false"/>
                      </http-acceptor>
                      <in-vm-acceptor name="in-vm" server-id="0"/>
                      <jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
                      <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
                      <connection-factory name="InVmConnectionFactory" connectors="in-vm" entries="java:/ConnectionFactory"/>
                      <connection-factory name="RemoteConnectionFactory" connectors="http-connector" entries="java:jboss/exported/jms/RemoteConnectionFactory"/>
                      <pooled-connection-factory name="activemq-ra" transaction="xa" connectors="in-vm" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory"/>
                      
                      
                      <jms-queue name="testQueue"  entries="jms/queue/test java:jboss/exported/jms/queue/test" />
          <jms-topic name="testTopic" entries="jms/topic/test java:jboss/exported/jms/topic/test" />
                  </server>
              </subsystem>
      .....
      

       

      My EJB code looks like this:

      import java.util.logging.Logger;
      import javax.annotation.Resource;
      import javax.ejb.LocalBean;
      import javax.ejb.Stateless;
      import javax.inject.Inject;
      import javax.jms.JMSContext;
      import javax.jms.Queue;
      import org.imixs.workflow.ItemCollection;
      import org.imixs.workflow.exceptions.PluginException;
      
      
      @Stateless
      @LocalBean
      public class JMSService {
        private static Logger logger = Logger.getLogger(JMSService.class.getName());
      
        @Resource(mappedName = "java:jboss/exported/jms/queue/test")
        private Queue queueExample;
      
        @Inject
        JMSContext context;
      
        public void doArchive(String path, ItemCollection document) throws PluginException {
        logger.info("sending a JMS message...");
        try {
        context.createProducer().send(queueExample, path);
        } catch (Exception exc) {
        exc.printStackTrace();
        }
        }
      }
      

       

       

      Deployment seems to be ok - so the queue is available - I think.

      But when I call the method doArchive I got the following exception:

       

      imixs-archive-office_1    | 15:49:04,216 INFO  [org.imixs.workflow.archive.hadoop.JMSService] (default task-60) sending a JMS message...
      imixs-archive-office_1    | 15:49:04,227 ERROR [stderr] (default task-60) java.lang.RuntimeException: javax.naming.NameNotFoundException: DefaultJMSConnectionFactory -- service jboss.naming.context.java.comp.imixs-office-workflow."imixs-office-workflow-ejb-3.0.5-SNAPSHOT".JMSService.DefaultJMSConnectionFactory
      imixs-archive-office_1    | 15:49:04,228 ERROR [stderr] (default task-60) at org.wildfly.extension.messaging.activemq.deployment.injection.InjectedJMSContext.lookup(InjectedJMSContext.java:134)
      imixs-archive-office_1    | 15:49:04,229 ERROR [stderr] (default task-60) at org.wildfly.extension.messaging.activemq.deployment.injection.InjectedJMSContext.getConnectionFactory(InjectedJMSContext.java:122)
      imixs-archive-office_1    | 15:49:04,229 ERROR [stderr] (default task-60) at org.wildfly.extension.messaging.activemq.deployment.injection.InjectedJMSContext.getDelegate(InjectedJMSContext.java:90)
      imixs-archive-office_1    | 15:49:04,229 ERROR [stderr] (default task-60) at org.wildfly.extension.messaging.activemq.deployment.injection.JMSContextWrapper.createProducer(JMSContextWrapper.java:66)
      imixs-archive-office_1    | 15:49:04,229 ERROR [stderr] (default task-60) at org.imixs.workflow.archive.hadoop.JMSService.doArchive(JMSService.java:73)
      ...
      .......
      imixs-archive-office_1    | 15:49:04,355 ERROR [stderr] (default task-60) at java.lang.Thread.run(Thread.java:745)
      imixs-archive-office_1    | 15:49:04,356 ERROR [stderr] (default task-60) Caused by: javax.naming.NameNotFoundException: DefaultJMSConnectionFactory -- service jboss.naming.context.java.comp.imixs-office-workflow."imixs-office-workflow-ejb-3.0.5-SNAPSHOT".JMSService.DefaultJMSConnectionFactory
      imixs-archive-office_1    | 15:49:04,357 ERROR [stderr] (default task-60) at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:106)
      imixs-archive-office_1    | 15:49:04,357 ERROR [stderr] (default task-60) at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:207)
      imixs-archive-office_1    | 15:49:04,357 ERROR [stderr] (default task-60) at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:184)
      imixs-archive-office_1    | 15:49:04,357 ERROR [stderr] (default task-60) at org.jboss.as.naming.InitialContext$DefaultInitialContext.lookup(InitialContext.java:237)
      imixs-archive-office_1    | 15:49:04,357 ERROR [stderr] (default task-60) at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:193)
      imixs-archive-office_1    | 15:49:04,358 ERROR [stderr] (default task-60) at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:189)
      imixs-archive-office_1    | 15:49:04,358 ERROR [stderr] (default task-60) at javax.naming.InitialContext.lookup(InitialContext.java:417)
      imixs-archive-office_1    | 15:49:04,358 ERROR [stderr] (default task-60) at javax.naming.InitialContext.lookup(InitialContext.java:417)
      imixs-archive-office_1    | 15:49:04,358 ERROR [stderr] (default task-60) at org.wildfly.extension.messaging.activemq.deployment.injection.InjectedJMSContext.lookup(InjectedJMSContext.java:132)
      imixs-archive-office_1    | 15:49:04,358 ERROR [stderr] (default task-60) ... 205 more
      

       

      Can anybody help to figure out what is missing here?

       

      ===
      Ralph