diff --git a/hornetq-jms-server/src/main/java/org/hornetq/jms/server/HornetQJMSServerLogger.java b/hornetq-jms-server/src/main/java/org/hornetq/jms/server/HornetQJMSServerLogger.java index 648f8bf3be6..45ae66277d6 100644 --- a/hornetq-jms-server/src/main/java/org/hornetq/jms/server/HornetQJMSServerLogger.java +++ b/hornetq-jms-server/src/main/java/org/hornetq/jms/server/HornetQJMSServerLogger.java @@ -165,6 +165,11 @@ public interface HornetQJMSServerLogger extends BasicLogger format = Message.Format.MESSAGE_FORMAT) void failedToCorrectHost(@Cause Exception e, String name); + @LogMessage(level = Logger.Level.WARN) + @Message(id = 122021, value = "Couldn't start recovery discovery on {0}, we will retry every recovery scan until the server is available" , + format = Message.Format.MESSAGE_FORMAT) + void xaRecoveryStartError(XARecoveryConfig e); + @LogMessage(level = Logger.Level.ERROR) @Message(id = 124001, value = "key attribute missing for JMS configuration {0}" , format = Message.Format.MESSAGE_FORMAT) void jmsConfigMissingKey(Node e); diff --git a/hornetq-jms-server/src/main/java/org/hornetq/jms/server/recovery/HornetQRecoveryRegistry.java b/hornetq-jms-server/src/main/java/org/hornetq/jms/server/recovery/HornetQRecoveryRegistry.java index 99743092f74..6200442af6f 100644 --- a/hornetq-jms-server/src/main/java/org/hornetq/jms/server/recovery/HornetQRecoveryRegistry.java +++ b/hornetq-jms-server/src/main/java/org/hornetq/jms/server/recovery/HornetQRecoveryRegistry.java @@ -104,7 +104,7 @@ public void register(final XARecoveryConfig resourceConfig) if (discoveryRecord == null) { discoveryRecord = newInstance; - discoveryRecord.start(); + discoveryRecord.start(false); } // you could have a configuration shared with multiple MDBs or RAs discoveryRecord.incrementUsage(); @@ -201,7 +201,7 @@ public void run() try { HornetQJMSServerLogger.LOGGER.debug("Retrying discovery " + discovery); - discovery.start(); + discovery.start(true); } catch (Throwable e) { diff --git a/hornetq-jms-server/src/main/java/org/hornetq/jms/server/recovery/RecoveryDiscovery.java b/hornetq-jms-server/src/main/java/org/hornetq/jms/server/recovery/RecoveryDiscovery.java index abaacebc4f3..d667b0019dd 100644 --- a/hornetq-jms-server/src/main/java/org/hornetq/jms/server/recovery/RecoveryDiscovery.java +++ b/hornetq-jms-server/src/main/java/org/hornetq/jms/server/recovery/RecoveryDiscovery.java @@ -50,7 +50,7 @@ public RecoveryDiscovery(XARecoveryConfig config) this.config = config; } - public synchronized void start() + public synchronized void start(boolean retry) { if (!started) { @@ -72,7 +72,10 @@ public synchronized void start() } catch (Exception startupError) { - HornetQJMSServerLogger.LOGGER.warn("Couldn't start recovery discovery on " + config + ", we will retry this on the next recovery scan"); + if (!retry) + { + HornetQJMSServerLogger.LOGGER.xaRecoveryStartError(config); + } stop(); HornetQRecoveryRegistry.getInstance().failedDiscovery(this); } diff --git a/hornetq-ra/src/main/java/org/hornetq/ra/HornetQRALogger.java b/hornetq-ra/src/main/java/org/hornetq/ra/HornetQRALogger.java index ccf02b03a4a..25c3821da29 100644 --- a/hornetq-ra/src/main/java/org/hornetq/ra/HornetQRALogger.java +++ b/hornetq-ra/src/main/java/org/hornetq/ra/HornetQRALogger.java @@ -85,6 +85,10 @@ public interface HornetQRALogger extends BasicLogger @Message(id = 151007, value = "Instantiating {0} \"{1}\" directly since UseJNDI=false.", format = Message.Format.MESSAGE_FORMAT) void instantiatingDestination(String destinationType, String destination); + @LogMessage(level = Logger.Level.INFO) + @Message(id = 151008, value = "awaiting HornetQ Server availability", format = Message.Format.MESSAGE_FORMAT) + void awaitingJMSServerCreation(); + @LogMessage(level = Logger.Level.WARN) @Message(id = 152001, value = "It wasn't possible to lookup for a Transaction Manager through the configured properties TransactionManagerLocatorClass and TransactionManagerLocatorMethod" + "\nHornetQ Resource Adapter won't be able to set and verify transaction timeouts in certain cases.", format = Message.Format.MESSAGE_FORMAT) diff --git a/hornetq-ra/src/main/java/org/hornetq/ra/HornetQRAProperties.java b/hornetq-ra/src/main/java/org/hornetq/ra/HornetQRAProperties.java index c3f9e266959..7b0ee29b072 100644 --- a/hornetq-ra/src/main/java/org/hornetq/ra/HornetQRAProperties.java +++ b/hornetq-ra/src/main/java/org/hornetq/ra/HornetQRAProperties.java @@ -52,7 +52,7 @@ public class HornetQRAProperties extends ConnectionFactoryProperties implements /** Method used to locate the TM */ private String transactionManagerLocatorMethod = "getTm;getTM"; - private static final int DEFAULT_SETUP_ATTEMPTS = 10; + private static final int DEFAULT_SETUP_ATTEMPTS = -1; private static final long DEFAULT_SETUP_INTERVAL = 2 * 1000; diff --git a/hornetq-ra/src/main/java/org/hornetq/ra/inflow/HornetQActivation.java b/hornetq-ra/src/main/java/org/hornetq/ra/inflow/HornetQActivation.java index 70f30e9c836..994c8278657 100644 --- a/hornetq-ra/src/main/java/org/hornetq/ra/inflow/HornetQActivation.java +++ b/hornetq-ra/src/main/java/org/hornetq/ra/inflow/HornetQActivation.java @@ -31,6 +31,8 @@ import org.hornetq.api.core.HornetQException; import org.hornetq.api.core.HornetQExceptionType; +import org.hornetq.api.core.HornetQNonExistentQueueException; +import org.hornetq.api.core.HornetQNotConnectedException; import org.hornetq.api.core.SimpleString; import org.hornetq.api.core.client.ClientSession; import org.hornetq.api.core.client.ClientSessionFactory; @@ -482,7 +484,9 @@ protected void setupDestination() throws Exception String calculatedDestinationName = destinationName.substring(destinationName.lastIndexOf('/') + 1); - HornetQRALogger.LOGGER.unableToRetrieveDestinationFromJNDI(destinationName, destinationType.getName(), calculatedDestinationName); + HornetQRALogger.LOGGER.debug("Unable to retrieve " + destinationName + + " from JNDI. Creating a new " + destinationType.getName() + + " named " + calculatedDestinationName + " to be used by the MDB."); // If there is no binding on naming, we will just create a new instance if (isTopic) @@ -552,10 +556,14 @@ public String toString() */ public void handleFailure(Throwable failure) { - if(failure instanceof HornetQException && ((HornetQException)failure).getType() == HornetQExceptionType.QUEUE_DOES_NOT_EXIST) + if(failure instanceof HornetQException && !(((HornetQException)failure).getType() == HornetQExceptionType.QUEUE_DOES_NOT_EXIST)) { HornetQRALogger.LOGGER.awaitingTopicQueueCreation(getActivationSpec().getDestination()); } + else if(failure instanceof HornetQException && !(((HornetQException)failure).getType() == HornetQExceptionType.NOT_CONNECTED)) + { + HornetQRALogger.LOGGER.awaitingJMSServerCreation(); + } else { HornetQRALogger.LOGGER.failureInActivation(failure, spec); @@ -569,6 +577,7 @@ public void handleFailure(Throwable failure) return; try { + Throwable lastException = failure; while (deliveryActive.get() && (setupAttempts == -1 || reconnectCount < setupAttempts)) { teardown(); @@ -583,7 +592,10 @@ public void handleFailure(Throwable failure) break; } - HornetQRALogger.LOGGER.attemptingReconnect(spec); + if (reconnectCount < 1) + { + HornetQRALogger.LOGGER.attemptingReconnect(spec); + } try { setup(); @@ -592,9 +604,21 @@ public void handleFailure(Throwable failure) } catch (Throwable t) { - if(failure instanceof HornetQException && ((HornetQException)failure).getType() == HornetQExceptionType.QUEUE_DOES_NOT_EXIST) + if(failure instanceof HornetQException && !(((HornetQException)failure).getType() == HornetQExceptionType.QUEUE_DOES_NOT_EXIST)) + { + if (lastException == null && lastException instanceof HornetQNonExistentQueueException) + { + lastException = t; + HornetQRALogger.LOGGER.awaitingTopicQueueCreation(getActivationSpec().getDestination()); + } + } + else if(failure instanceof HornetQException && !(((HornetQException)failure).getType() == HornetQExceptionType.NOT_CONNECTED)) { - HornetQRALogger.LOGGER.awaitingTopicQueueCreation(getActivationSpec().getDestination()); + if (lastException == null && lastException instanceof HornetQNotConnectedException) + { + lastException = t; + HornetQRALogger.LOGGER.awaitingJMSServerCreation(); + } } else {