Details
Description
The v.5.12.1 release of class org.apache.activemq.network.jms.JmsConnector contains a defect within method private void doInitializeConnection(boolean local) throws Exception that causes the attempt variable to
always retain a value of zero if ReconnectionPolicy.maxReconnectAttempts/maxInitialConnectAttempts == ReconnectionPolicy.INFINITE. (irrespective of the actual number of loop iterations)
This indirectly prevents the connector from using any of the following ReconnectionPolicy configuration properties:
private long initialReconnectDelay = 1000L;
private long maximumReconnectDelay = 30000;
private boolean useExponentialBackOff = false;
private double backOffMultiplier = 2.0;
The defect is triggered by inclusion of increment operator for attempt variable within do/while loop condition evaluation. Line 630 of class JmsConnector uses short-circuit evaluation and this prevents value from being incremented whenever maxRetries == INFINITE evaluates to true:
while ((maxRetries == INFINITE || maxRetries > ++attempt) && !connectionService.isShutdown());