Browse Source
Define an additional health indicator for each ConnectionFactory instance defined in the context. Extracts the provider name from the connection meta-data. Fixes gh-2016pull/2527/head
6 changed files with 219 additions and 2 deletions
@ -0,0 +1,50 @@
@@ -0,0 +1,50 @@
|
||||
/* |
||||
* Copyright 2012-2015 the original author or authors. |
||||
* |
||||
* Licensed 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. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.health; |
||||
|
||||
import javax.jms.Connection; |
||||
import javax.jms.ConnectionFactory; |
||||
|
||||
/** |
||||
* {@link HealthIndicator} for a JMS {@link ConnectionFactory}. |
||||
* |
||||
* @author Stephane Nicoll |
||||
* @since 1.3.0 |
||||
*/ |
||||
public class JmsHealthIndicator extends AbstractHealthIndicator { |
||||
|
||||
private final ConnectionFactory connectionFactory; |
||||
|
||||
public JmsHealthIndicator(ConnectionFactory connectionFactory) { |
||||
this.connectionFactory = connectionFactory; |
||||
} |
||||
|
||||
@Override |
||||
protected void doHealthCheck(Health.Builder builder) throws Exception { |
||||
Connection conToClose = null; |
||||
try { |
||||
conToClose = this.connectionFactory.createConnection(); |
||||
builder.up().withDetail("provider", |
||||
conToClose.getMetaData().getJMSProviderName()); |
||||
} finally { |
||||
if (conToClose != null) { |
||||
conToClose.close(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,81 @@
@@ -0,0 +1,81 @@
|
||||
/* |
||||
* Copyright 2012-2015 the original author or authors. |
||||
* |
||||
* Licensed 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. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.health; |
||||
|
||||
import javax.jms.Connection; |
||||
import javax.jms.ConnectionFactory; |
||||
import javax.jms.ConnectionMetaData; |
||||
import javax.jms.JMSException; |
||||
|
||||
import org.junit.Test; |
||||
|
||||
import static org.junit.Assert.assertEquals; |
||||
import static org.mockito.Mockito.mock; |
||||
import static org.mockito.Mockito.times; |
||||
import static org.mockito.Mockito.verify; |
||||
import static org.mockito.Mockito.when; |
||||
|
||||
/** |
||||
* Tests for {@link JmsHealthIndicator}. |
||||
* |
||||
* @author Stephane Nicoll |
||||
*/ |
||||
public class JmsHealthIndicatorTests { |
||||
|
||||
@Test |
||||
public void jmsBrokerIsUp() throws JMSException { |
||||
ConnectionMetaData connectionMetaData = mock(ConnectionMetaData.class); |
||||
when(connectionMetaData.getJMSProviderName()).thenReturn("JMS test provider"); |
||||
Connection connection = mock(Connection.class); |
||||
when(connection.getMetaData()).thenReturn(connectionMetaData); |
||||
ConnectionFactory connectionFactory = mock(ConnectionFactory.class); |
||||
when(connectionFactory.createConnection()).thenReturn(connection); |
||||
|
||||
JmsHealthIndicator indicator = new JmsHealthIndicator(connectionFactory); |
||||
Health health = indicator.health(); |
||||
assertEquals(Status.UP, health.getStatus()); |
||||
assertEquals("JMS test provider", health.getDetails().get("provider")); |
||||
verify(connection, times(1)).close(); |
||||
} |
||||
|
||||
@Test |
||||
public void jmsBrokerIsDown() throws JMSException { |
||||
ConnectionFactory connectionFactory = mock(ConnectionFactory.class); |
||||
when(connectionFactory.createConnection()).thenThrow(new JMSException("test", "123")); |
||||
JmsHealthIndicator indicator = new JmsHealthIndicator(connectionFactory); |
||||
Health health = indicator.health(); |
||||
assertEquals(Status.DOWN, health.getStatus()); |
||||
assertEquals(null, health.getDetails().get("provider")); |
||||
} |
||||
|
||||
@Test |
||||
public void jmsBrokerCouldNotRetrieveProviderMetadata() throws JMSException { |
||||
ConnectionMetaData connectionMetaData = mock(ConnectionMetaData.class); |
||||
when(connectionMetaData.getJMSProviderName()).thenThrow(new JMSException("test", "123")); |
||||
Connection connection = mock(Connection.class); |
||||
when(connection.getMetaData()).thenReturn(connectionMetaData); |
||||
ConnectionFactory connectionFactory = mock(ConnectionFactory.class); |
||||
when(connectionFactory.createConnection()).thenReturn(connection); |
||||
|
||||
JmsHealthIndicator indicator = new JmsHealthIndicator(connectionFactory); |
||||
Health health = indicator.health(); |
||||
assertEquals(Status.DOWN, health.getStatus()); |
||||
assertEquals(null, health.getDetails().get("provider")); |
||||
verify(connection, times(1)).close(); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue