14 Replies Latest reply on Nov 13, 2009 10:26 AM by Tim Fox

    MDB failing to reconnect to external HornetQ cluster

    Rabah Boukhlifa Newbie

      Hi,

      I've been struggling with the documentation about High Availability, set up of Live/Backup hornetQ, and automatic failover, but still haven't found a clue about how I can get an application embedded in Jboss 4.X (4.2.3) to plainly use an external HornetQ cluster.

      I aim to create a highly available JMS provider using HornetQ as an external provider. I also aim to use only the JMS (non core) API.
      For that, I need to be sure that 2 instances can work as Live and Backup, and that reconnection to Backup when Live is going down or is shutdown is talking over the messages transparently.

      As a POC, I already have 2 HornetQ nodes on the same machine configured to work as Live and Backup instances. The sender and consumer, are respectively a MBean (for convenience, I can change the string used for the text message and send using the JMX console), and an MDB deployed. They are both deplyed on the same JBoss instance running on the same host as HornetQ. ( Jboss instance and HornetQ instances will ultimately run on different hosts, but for now, for testing purpose, I'm using the same host)

      I used the following link to configure my Jboss Instance in order to use HornetQ as an external JMS provider:
      http://www.jboss.org/community/wiki/UsingHornetQwithJBoss4x

      And also used the auto discovery capabilities in order to have a flexible way to add a new node to the JMS cluster.

      The problem, I'm currently running into, is that when I stop the live server (stopping meaning: using CTRL-C to stop the HornetQ process), the MDB does not reconnect automatically to the backup server. On the other hand, the sender is still working and sends the message to the backup instance. The sender is working correctly, because it reconnects every time it tries to send a message using the connection factory that contains the connectors (live and backup) that were broadcasted. But, I was expecting that automatic failover would happen and that I should not have to, explicitely, code the reconnection step inside the MDB.

      Have someone been able to run successfully such a configuration and could provide the configuration files and RA configuration? Are there limitations concerning MDB reconnection?

      Can someone help me on that? I guess this is the kind of architecture that everyone would need in a production environment. So, I guess that someone knows how to get it work?

      I can provide all the configuration files and code so that everything is clear.

      Thank you.

      ( Ultimately, I'd like to have several live and backups to make sure of tha there will always be a HQ running to accept and deliver the messages. But this is another story!)

        • 1. Re: MDB failing to reconnect to external HornetQ cluster
          Tim Fox Master

           

          "rabahb" wrote:
          Hi,

          The problem, I'm currently running into, is that when I stop the live server (stopping meaning: using CTRL-C to stop the HornetQ process), the MDB does not reconnect automatically to the backup server. On the other hand, the sender is still working and sends the message to the backup instance. The sender is working correctly, because it reconnects every time it tries to send a message using the connection factory that contains the connectors (live and backup) that were broadcasted. But, I was expecting that automatic failover would happen and that I should not have to, explicitely, code the reconnection step inside the MDB.




          See user manual, section 39.2

          http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/ha.html#ha.client.automatic

          "Sometimes you want a client to failover onto a backup server even if the live server is just cleanly shutdown rather than having crashed or the connection failed. To configure this you can set the property FailoverOnServerShutdown to false either on the HornetQConnectionFactory if you're using JMS or in the hornetq-jms.xml file when you define the connection factory, or if using core by setting the property directly on the ClientSessionFactoryImpl instance after creation. The default value for this property is false, this means that by default HornetQ clients will not failover to a backup server if the live server is simply shutdown cleanly."

          CTRL-C causes a clean server shutdown.

          BTW this was covered in another user forum post very recently.

          • 2. Re: MDB failing to reconnect to external HornetQ cluster
            Rabah Boukhlifa Newbie

            Hey Tim,
            Thanks for the reply. I've already read the abstract you are quoting as I said I went through the documentation already (over and over ) to track any hints.
            I'm already using FailoverOnServerShutdown property.
            Just a question though about it ... Setting FailoverOnServerShutdown to false, does it sound right to you, when you want the failover to happen when the server is shutdown?

            Thank you.

            • 3. Re: MDB failing to reconnect to external HornetQ cluster
              Tim Fox Master

               

              "rabahb" wrote:
              Hey Tim,
              Thanks for the reply. I've already read the abstract you are quoting as I said I went through the documentation already (over and over ) to track any hints.
              I'm already using FailoverOnServerShutdown property.


              Where are you setting this?


              Just a question though about it ... Setting FailoverOnServerShutdown to false, does it sound right to you, when you want the failover to happen when the server is shutdown?



              FailoverOnServerShutdown does exactly as the name implies, if set to true then failover will occur when the server is shutdown cleanly.

              • 4. Re: MDB failing to reconnect to external HornetQ cluster
                Tim Fox Master

                Ah I see what you mean, there's a typo in the docs. The variable does what the name implies.

                • 5. Re: MDB failing to reconnect to external HornetQ cluster
                  Rabah Boukhlifa Newbie

                  Tim,

                  So, you said that this needs to be set to "true" if you want the failover to occur. That's not what's written in the documentation. It says:

                  Sometimes you want a client to failover onto a backup server even if the live server is just cleanly shutdown rather than having crashed or the connection failed. To configure this you can set the property FailoverOnServerShutdown to false either on the HornetQConnectionFactory


                  Anyways, I set this property to true in my Jboss, jms-ds.xml file in the deploy dir (on the client side) as it seems to be the right spot to configure the HornetQConnectionFactory. (see below)

                  Is it the right place ?

                  Thank you.

                  <?xml version="1.0" encoding="UTF-8"?>
                  
                  <connection-factories>
                  
                   <mbean
                   code="org.jboss.jms.jndi.JMSProviderLoader"
                   name="hornetq:service=JMSProviderLoader,name=JMSProvider">
                   <attribute name="ProviderName">DefaultJMSProvider</attribute>
                   <attribute name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</attribute>
                   <attribute name="FactoryRef">java:/ConnectionFactory</attribute>
                   <attribute name="QueueFactoryRef">java:/ConnectionFactory</attribute>
                   <attribute name="TopicFactoryRef">java:/ConnectionFactory</attribute>
                   <attribute name="Properties">
                   java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
                   java.naming.factory.url.pkgs=org.jnp.interfaces
                   java.naming.provider.url=localhost:2099,localhost:3099
                   </attribute>
                   </mbean>
                  
                  
                   <!-- JMS XA Resource adapter, use this to get transacted JMS in beans -->
                   <no-tx-connection-factory>
                   <jndi-name>JmsNonXA</jndi-name>
                   <!-- xa-transaction/ -->
                   <rar-name>jms-ra.rar</rar-name>
                   <!-- connection-definition>org.jboss.resource.adapter.jms.JmsConnectionFactory</connection-definition -->
                   <connection-definition>org.hornetq.ra.HornetQRAConnectionFactory</connection-definition>
                   <config-property name="SessionDefaultType" type="java.lang.String">javax.jms.Topic</config-property>
                   <config-property name="JmsProviderAdapterJNDI" type="java.lang.String">java:/DefaultJMSProvider</config-property>
                   <!-- Force le failover meme si le server live est arreter proprement -->
                   <config-property name="FailoverOnServerShutdown" type="java.lang.Boolean">true</config-property>
                   <security-domain-and-application>JmsRealm</security-domain-and-application>
                   <max-pool-size>20</max-pool-size>
                   </no-tx-connection-factory>
                  
                  </connection-factories>


                  • 6. Re: MDB failing to reconnect to external HornetQ cluster
                    Tim Fox Master

                    I am trying (and failing) to understand your topology here, can you explain it in some more detail.

                    What HornetQ servers do you have? Are they standalone or embedded in JBoss AS? What clients do you have? Where are they deployed? What servers do they connect to? How are you creating the connection factory used by the clients? etc

                    • 7. Re: MDB failing to reconnect to external HornetQ cluster
                      Rabah Boukhlifa Newbie



                      I'm using:
                      * HornetQ 2.0.0.Beta5
                      * 2 standalone instances deployed on the same host (my dev host) as clustered live/backup srvers
                      * Jboss has been configured to use the HornetQ cluster (I'm not using XA, using NonXA for now) as an external provider as described in the :
                      http://www.jboss.org/community/wiki/UsingHornetQwithJBoss4x

                      * The Jboss instance is also on my dev host

                      * The client is deployed inside Jboss, using the default JMS provider instanciated by Jboss, and which is using HornetQ factory.

                      * Jboss handles the connection factory and the Ressource adapter set up on Jboss has been configured to use auto-discovery to get the connectors configuration set on the HornetQ cluster.

                      * So the client is using the ConnectionFactory set up on the Jboss Side but point to the connection factory declared on the hornetQ side as described by JNDI configuration on the JMSProviderLoader configuration above.

                      As I said the MBean (the sender) can send the messages and when the live server goes down, it can still send the message to the backup. So failover is occuring.

                      But, the consumer which is an MDB installed on Jboss, does not get the message. I assume that it can not because it not connected anymore.

                      • 8. Re: MDB failing to reconnect to external HornetQ cluster
                        Tim Fox Master

                        Which connection factory are you looking up from your client code?

                        Also please post your resource adaptor configuration.

                        Have you configured the resource adaptor with the live and backup servers?

                        • 9. Re: MDB failing to reconnect to external HornetQ cluster
                          Rabah Boukhlifa Newbie


                          Here's the deploy/jms-ra.rar/META-INF/ra.xml file.
                          I'm using auto discovery. As far as I understand, connectors (live/backup) are supposed to be broadcasted based on the broadcast group declared on the hornetQ side.
                          See also, hornetq-configuration for live and backup below.
                          In order to set the variable I setting those up in my run.bat file for each node. It ensures that port does not confict and that I'm using different data directories.

                          <?xml version="1.0" encoding="UTF-8"?>
                          
                          <!-- $Id: ra.xml 76819 2008-08-08 11:04:20Z jesper.pedersen $ -->
                          
                          <connector xmlns="http://java.sun.com/xml/ns/j2ee"
                           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                           xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                           http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd"
                           version="1.5">
                          
                           <description>HornetQ 2.0 Resource Adapter</description>
                           <display-name>HornetQ 2.0 Resource Adapter</display-name>
                          
                           <vendor-name>Red Hat Middleware LLC</vendor-name>
                           <eis-type>JMS 1.1 Server</eis-type>
                           <resourceadapter-version>1.0</resourceadapter-version>
                          
                           <license>
                           <description>
                          Copyright 2009 Red Hat, Inc.
                           Red Hat licenses this file to you under the Apache License, version
                           2.0 (the "License"); you may not use this file except in compliance
                           with the License. You may obtain a copy of the License at
                           http://www.apache.org/licenses/LICENSE-2.0
                           Unless required by applicable law or agreed to in writing, software
                           distributed under the License is distributed on an "AS IS" BASIS,
                           WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
                           implied. See the License for the specific language governing
                           permissions and limitations under the License.
                           </description>
                           <license-required>true</license-required>
                           </license>
                          
                           <resourceadapter>
                           <resourceadapter-class>org.hornetq.ra.HornetQResourceAdapter</resourceadapter-class>
                           <config-property>
                           <description>The discovery group address</description>
                           <config-property-name>DiscoveryAddress</config-property-name>
                           <config-property-type>java.lang.String</config-property-type>
                           <config-property-value>231.7.7.7</config-property-value>
                           </config-property>
                           <config-property>
                           <description>The discovery group port</description>
                           <config-property-name>DiscoveryPort</config-property-name>
                           <config-property-type>java.lang.Integer</config-property-type>
                           <config-property-value>9876</config-property-value>
                           </config-property>
                           <config-property>
                           <description>The discovery refresh timeout</description>
                           <config-property-name>DiscoveryRefreshTimeout</config-property-name>
                           <config-property-type>java.lang.Long</config-property-type>
                           <config-property-value>100</config-property-value>
                           </config-property>
                           <config-property>
                           <description>The discovery initial wait timeout</description>
                           <config-property-name>DiscoveryInitialWaitTimeout</config-property-name>
                           <config-property-type>java.lang.Long</config-property-type>
                           <config-property-value>10000</config-property-value>
                           </config-property>
                          
                          
                           <outbound-resourceadapter>
                           <connection-definition>
                           <managedconnectionfactory-class>org.hornetq.ra.HornetQRAManagedConnectionFactory</managedconnectionfactory-class>
                          
                           <config-property>
                           <description>The default session type</description>
                           <config-property-name>SessionDefaultType</config-property-name>
                           <config-property-type>java.lang.String</config-property-type>
                           <config-property-value>javax.jms.Queue</config-property-value>
                           </config-property>
                           <config-property>
                           <description>Try to obtain a lock within specified number of seconds; less than or equal to 0 disable this functionality</description>
                           <config-property-name>UseTryLock</config-property-name>
                           <config-property-type>java.lang.Integer</config-property-type>
                           <config-property-value>0</config-property-value>
                           </config-property>
                          
                           <connectionfactory-interface>org.hornetq.ra.HornetQRAConnectionFactory</connectionfactory-interface>
                           <connectionfactory-impl-class>org.hornetq.ra.HornetQRAConnectionFactoryImpl</connectionfactory-impl-class>
                           <connection-interface>javax.jms.Session</connection-interface>
                           <connection-impl-class>org.hornetq.ra.HornetQRASession</connection-impl-class>
                           </connection-definition>
                           <transaction-support>XATransaction</transaction-support>
                           <authentication-mechanism>
                           <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
                           <credential-interface>javax.resource.spi.security.PasswordCredential</credential-interface>
                           </authentication-mechanism>
                           <reauthentication-support>false</reauthentication-support>
                           </outbound-resourceadapter>
                          
                           <inbound-resourceadapter>
                           <messageadapter>
                           <messagelistener>
                           <messagelistener-type>javax.jms.MessageListener</messagelistener-type>
                           <activationspec>
                           <activationspec-class>org.hornetq.ra.inflow.HornetQActivationSpec</activationspec-class>
                           <required-config-property>
                           <config-property-name>destination</config-property-name>
                           </required-config-property>
                           </activationspec>
                           </messagelistener>
                           </messageadapter>
                           </inbound-resourceadapter>
                          
                           </resourceadapter>
                          </connector>



                          Here's hornetq-configuration file for Node1 (Live)
                          
                          <configuration xmlns="urn:hornetq"
                           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                           xsi:schemaLocation="urn:hornetq /schema/hornetq-configuration.xsd">
                          
                           <clustered>true</clustered>
                          
                           <!-- definition du connecteur de backup sur le node2 -->
                           <backup-connector-ref connector-name="backup-connector"/>
                          
                           <connectors>
                           <connector name="netty">
                           <factory-class>org.hornetq.integration.transports.netty.NettyConnectorFactory</factory-class>
                           <param key="hornetq.remoting.netty.host" value="${hornetq.remoting.netty.host:localhost}" type="String"/>
                           <param key="hornetq.remoting.netty.port" value="${hornetq.remoting.netty.port:5445}" type="Integer"/>
                           </connector>
                          
                           <connector name="backup-connector">
                           <factory-class>org.hornetq.integration.transports.netty.NettyConnectorFactory</factory-class>
                           <param key="hornetq.remoting.netty.host" value="${hornetq.remoting.netty.backup-host:localhost}" type="String"/>
                           <param key="hornetq.remoting.netty.port" value="${hornetq.remoting.netty.backup-port:5446}" type="Integer"/>
                           </connector>
                           </connectors>
                          
                           <acceptors>
                           <acceptor name="netty">
                           <factory-class>org.hornetq.integration.transports.netty.NettyAcceptorFactory</factory-class>
                           <param key="hornetq.remoting.netty.host" value="${hornetq.remoting.netty.host:localhost}" type="String"/>
                           <param key="hornetq.remoting.netty.port" value="${hornetq.remoting.netty.port:5445}" type="Integer"/>
                           </acceptor>
                           </acceptors>
                          
                           <broadcast-groups>
                           <broadcast-group name="bg-group1">
                           <group-address>231.7.7.7</group-address>
                           <group-port>9876</group-port>
                           <broadcast-period>5000</broadcast-period>
                           <connector-ref connector-name="netty" backup-connector-name="backup-connector" />
                           </broadcast-group>
                           </broadcast-groups>
                          
                           <discovery-groups>
                           <discovery-group name="dg-group1">
                           <group-address>231.7.7.7</group-address>
                           <group-port>9876</group-port>
                           <refresh-timeout>10000</refresh-timeout>
                           </discovery-group>
                           </discovery-groups>
                          
                           <cluster-connections>
                           <cluster-connection name="my-cluster">
                           <address>jms</address>
                           <discovery-group-ref discovery-group-name="dg-group1"/>
                           </cluster-connection>
                           </cluster-connections>
                          
                          
                          
                           <security-settings>
                           <security-setting match="#">
                           <permission type="createTempQueue" roles="guest"/>
                           <permission type="deleteTempQueue" roles="guest"/>
                           <permission type="consume" roles="guest"/>
                           <permission type="send" roles="guest"/>
                           </security-setting>
                           </security-settings>
                          
                           <address-settings>
                           <!--default for catch all-->
                           <address-setting match="#">
                           <clustered>false</clustered>
                           <dead-letter-address>jms.queue.DLQ</dead-letter-address>
                           <expiry-address>jms.queue.ExpiryQueue</expiry-address>
                           <redelivery-delay>0</redelivery-delay>
                           <max-size-bytes>-1</max-size-bytes>
                           <page-size-bytes>10485760</page-size-bytes>
                           <distribution-policy-class>org.hornetq.core.server.impl.RoundRobinDistributor</distribution-policy-class>
                           <message-counter-history-day-limit>10</message-counter-history-day-limit>
                           </address-setting>
                           </address-settings>
                          
                           <paging-directory>${data.dir:../data}/paging</paging-directory>
                           <bindings-directory>${data.dir:../data}/bindings</bindings-directory>
                           <journal-directory>${data.dir:../data}/journal</journal-directory>
                           <large-messages-directory>${data.dir:../data}/large-messages</large-messages-directory>
                          
                          </configuration>
                          
                          
                          



                          Here's hornetq-configuration file for Node2 (Backup)
                          <configuration xmlns="urn:hornetq"
                           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                           xsi:schemaLocation="urn:hornetq /schema/hornetq-configuration.xsd">
                          
                           <clustered>true</clustered>
                           <backup>true</backup>
                          
                           <connectors>
                           <connector name="netty">
                           <factory-class>org.hornetq.integration.transports.netty.NettyConnectorFactory</factory-class>
                           <param key="hornetq.remoting.netty.host" value="${hornetq.remoting.netty.host:localhost}" type="String"/>
                           <param key="hornetq.remoting.netty.port" value="${hornetq.remoting.netty.port:5445}" type="Integer"/>
                           </connector>
                           </connectors>
                          
                           <acceptors>
                           <acceptor name="netty">
                           <factory-class>org.hornetq.integration.transports.netty.NettyAcceptorFactory</factory-class>
                           <param key="hornetq.remoting.netty.host" value="${hornetq.remoting.netty.host:localhost}" type="String"/>
                           <param key="hornetq.remoting.netty.port" value="${hornetq.remoting.netty.port:5445}" type="Integer"/>
                           </acceptor>
                           </acceptors>
                          
                           <broadcast-groups>
                           <broadcast-group name="bg-group1">
                           <group-address>231.7.7.7</group-address>
                           <group-port>9876</group-port>
                           <broadcast-period>5000</broadcast-period>
                           <connector-ref connector-name="netty"/>
                           </broadcast-group>
                           </broadcast-groups>
                          
                           <discovery-groups>
                           <discovery-group name="dg-group1">
                           <group-address>231.7.7.7</group-address>
                           <group-port>9876</group-port>
                           <refresh-timeout>10000</refresh-timeout>
                           </discovery-group>
                           </discovery-groups>
                          
                           <cluster-connections>
                           <cluster-connection name="my-cluster">
                           <address>jms</address>
                           <discovery-group-ref discovery-group-name="dg-group1"/>
                           </cluster-connection>
                           </cluster-connections>
                          
                          
                           <security-settings>
                           <security-setting match="#">
                           <permission type="createTempQueue" roles="guest"/>
                           <permission type="deleteTempQueue" roles="guest"/>
                           <permission type="consume" roles="guest"/>
                           <permission type="send" roles="guest"/>
                           </security-setting>
                           </security-settings>
                          
                           <address-settings>
                           <!--default for catch all-->
                           <address-setting match="#">
                           <clustered>false</clustered>
                           <dead-letter-address>jms.queue.DLQ</dead-letter-address>
                           <expiry-address>jms.queue.ExpiryQueue</expiry-address>
                           <redelivery-delay>0</redelivery-delay>
                           <max-size-bytes>-1</max-size-bytes>
                           <page-size-bytes>10485760</page-size-bytes>
                           <distribution-policy-class>org.hornetq.core.server.impl.RoundRobinDistributor</distribution-policy-class>
                           <message-counter-history-day-limit>10</message-counter-history-day-limit>
                           </address-setting>
                           </address-settings>
                          
                           <paging-directory>${data.dir:../data}/paging</paging-directory>
                           <bindings-directory>${data.dir:../data}/bindings</bindings-directory>
                           <journal-directory>${data.dir:../data}/journal</journal-directory>
                           <large-messages-directory>${data.dir:../data}/large-messages</large-messages-directory>
                          
                          </configuration>
                          



                          • 10. Re: MDB failing to reconnect to external HornetQ cluster
                            Tim Fox Master

                            Can you add a JIRA? Then someone will triage it.

                            • 11. Re: MDB failing to reconnect to external HornetQ cluster
                              Rabah Boukhlifa Newbie

                              In addition ...

                              Here's the code for the sender(service exposed through JMX):

                              package test.sender;
                              
                              import java.util.Properties;
                              
                              import javax.jms.*;
                              import javax.naming.Context;
                              import javax.naming.InitialContext;
                              
                              import org.jboss.annotation.ejb.Service;
                              
                              @Service(objectName = "jbia:service=senderMbean")
                              public class SenderMbean implements SenderInterface {
                              
                               String message = null;
                              
                               public void setMessage(String msg){
                               this.message = msg;
                               }
                              
                               public String getMessage(){
                               return this.message;
                               }
                              
                               public void sendMessage(){
                              
                               Connection cnx = null;
                              
                               try {
                              
                               // 1- create JNDI context
                               Context jndiCtx = new InitialContext();
                              
                               // 2- lookup connection factory
                               ConnectionFactory cnxFct = (ConnectionFactory)jndiCtx.lookup("java:/JmsNonXA");
                              
                               // 3- create connection
                               cnx = cnxFct.createConnection();
                              
                               // 4- create session
                               Session session = cnx.createSession(false, Session.AUTO_ACKNOWLEDGE);
                              
                               // 5- set destination
                               Destination destExample = (Destination)session.createQueue("ExampleQueue");
                              
                               // 6- instanciate the producer
                               MessageProducer producer = session.createProducer(destExample);
                              
                               // 7- starting the connection
                               cnx.start();
                              
                               // 8- sending the message
                               System.out.println("Sending Message!");
                               Message msg = session.createTextMessage(getMessage());
                               producer.send(msg);
                               System.out.println("Sent!");
                              
                               // 9- closing the connection
                               if(cnx!=null)
                               cnx.close();
                              
                               } catch(Exception ex) {
                               ex.printStackTrace();
                              
                               if(cnx!=null)
                               try {
                               cnx.close();
                               } catch (JMSException e) {
                               e.printStackTrace();
                               }
                               }
                              
                               }
                              
                               // Life cycle method
                               public void create() { } ;
                               public void destroy() { };
                              
                              
                              }
                              
                              


                              Here's the code for the receiver (MDB):

                              
                              package test.mdb;
                              
                              import javax.jms.*;
                              import javax.annotation.Resource;
                              import javax.ejb.*;
                              
                              @MessageDriven(activationConfig={
                               @ActivationConfigProperty
                               (propertyName="destinationType",
                               propertyValue="javax.jms.Queue"),
                               @ActivationConfigProperty
                               (propertyName="destination",
                               propertyValue="queue/ExampleQueue")
                               }
                              )
                              
                              public class Mymdb implements MessageListener {
                              
                               @Resource(mappedName = "java:JmsNonXA")
                               ConnectionFactory connectionFactory;
                              
                               public void onMessage(Message msg) {
                               try {
                               TextMessage textMsg = (TextMessage)msg;
                               System.out.println("MESSAGE RECEIVED : " + textMsg.getText() );
                               } catch (Exception e) {
                               e.printStackTrace();
                               }
                               }
                              }
                              
                              



                              • 12. Re: MDB failing to reconnect to external HornetQ cluster
                                Rabah Boukhlifa Newbie

                                OK, I'm fine with creating a JIRA. I can't find the right link to add a JIRA for this issue. Could you let me know where I can post the JIRA from for this kind of issue?

                                Thank you Tim.

                                • 14. Re: MDB failing to reconnect to external HornetQ cluster
                                  Tim Fox Master

                                  I notice you didn't create a JIRA issue? Did you solve your problem?