/*
* Copyright 2002-2007 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.jmx.support;
import java.net.MalformedURLException;
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
import org.springframework.aop.support.AopUtils;
import org.springframework.jmx.AbstractMBeanServerTests;
/**
* @author Rob Harrop
* @author Juergen Hoeller
*/
public class MBeanServerConnectionFactoryBeanTests extends AbstractMBeanServerTests {
private static final String SERVICE_URL = "service:jmx:jmxmp://localhost:9876";
private JMXServiceURL getServiceUrl() throws MalformedURLException {
return new JMXServiceURL(SERVICE_URL);
}
private JMXConnectorServer getConnectorServer() throws Exception {
return JMXConnectorServerFactory.newJMXConnectorServer(getServiceUrl(), null, getServer());
}
public void testValidConnection() throws Exception {
JMXConnectorServer connectorServer = getConnectorServer();
connectorServer.start();
try {
MBeanServerConnectionFactoryBean bean = new MBeanServerConnectionFactoryBean();
bean.setServiceUrl(SERVICE_URL);
bean.afterPropertiesSet();
try {
MBeanServerConnection connection = (MBeanServerConnection) bean.getObject();
assertNotNull("Connection should not be null", connection);
// perform simple MBean count test
assertEquals("MBean count should be the same", getServer().getMBeanCount(), connection.getMBeanCount());
}
finally {
bean.destroy();
}
}
finally {
connectorServer.stop();
}
}
public void testWithNoServiceUrl() throws Exception {
MBeanServerConnectionFactoryBean bean = new MBeanServerConnectionFactoryBean();
try {
bean.afterPropertiesSet();
fail("IllegalArgumentException should be raised when no service url is provided");
}
catch (IllegalArgumentException ex) {
// expected
}
}
public void testWithLazyConnection() throws Exception {
MBeanServerConnectionFactoryBean bean = new MBeanServerConnectionFactoryBean();
bean.setServiceUrl(SERVICE_URL);
bean.setConnectOnStartup(false);
bean.afterPropertiesSet();
MBeanServerConnection connection = (MBeanServerConnection) bean.getObject();
assertTrue(AopUtils.isAopProxy(connection));
JMXConnectorServer connector = null;
try {
connector = getConnectorServer();
connector.start();
assertEquals("Incorrect MBean count", getServer().getMBeanCount(), connection.getMBeanCount());
}
finally {
bean.destroy();
if (connector != null) {
connector.stop();
}
}
}
public void testWithLazyConnectionAndNoAccess() throws Exception {
MBeanServerConnectionFactoryBean bean = new MBeanServerConnectionFactoryBean();
bean.setServiceUrl(SERVICE_URL);
bean.setConnectOnStartup(false);
bean.afterPropertiesSet();
MBeanServerConnection connection = (MBeanServerConnection) bean.getObject();
assertTrue(AopUtils.isAopProxy(connection));
bean.destroy();
}
}