diff options
| author | Robert Gemmell <robbie@apache.org> | 2010-04-20 14:03:56 +0000 |
|---|---|---|
| committer | Robert Gemmell <robbie@apache.org> | 2010-04-20 14:03:56 +0000 |
| commit | 6558b445a8271f1f27efe1ea4e628aa068de6807 (patch) | |
| tree | 872afee87d545d9ec6796f7733b80da15caa3204 /java | |
| parent | 7bd3591dd580d1e5d2034676c4c674ba838eceb8 (diff) | |
| download | qpid-python-6558b445a8271f1f27efe1ea4e628aa068de6807.tar.gz | |
QPID-2097: Use the standard RMIServerSocketFactory for InVM testing to workaround the alternating pass-fail issue encountered when running back to back tests using JMX with the InVM broker. Enable the ModelTest.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@935928 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
4 files changed, 62 insertions, 16 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java index 307a697a95..2a956c6dff 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java +++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java @@ -86,6 +86,7 @@ public class ServerConfiguration implements SignalHandler public static final String CONNECTOR_PROTECTIO_ENABLED = "connector.protectio.enabled"; public static final String CONNECTOR_PROTECTIO_READ_BUFFER_LIMIT_SIZE = "connector.protectio.readBufferLimitSize"; public static final String CONNECTOR_PROTECTIO_WRITE_BUFFER_LIMIT_SIZE = "connector.protectio.writeBufferLimitSize"; + public static final String MGMT_CUSTOM_REGISTRY_SOCKET = "management.custom-registry-socket"; public static final String STATUS_UPDATES = "status-updates"; public static final String ADVANCED_LOCALE = "advanced.locale"; @@ -390,6 +391,16 @@ public class ServerConfiguration implements SignalHandler { return _jmxPort; } + + public boolean getUseCustomRMISocketFactory() + { + return getConfig().getBoolean(MGMT_CUSTOM_REGISTRY_SOCKET, true); + } + + public void setUseCustomRMISocketFactory(boolean bool) + { + getConfig().setProperty(MGMT_CUSTOM_REGISTRY_SOCKET, bool); + } public boolean getPlatformMbeanserver() { diff --git a/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java b/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java index 048551010e..7ce0f6022b 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java +++ b/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java @@ -56,7 +56,8 @@ import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; import java.rmi.AlreadyBoundException; -import java.rmi.RemoteException; +import java.rmi.NoSuchObjectException; +import java.rmi.NotBoundException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.RMIClientSocketFactory; @@ -81,7 +82,7 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry private final MBeanServer _mbeanServer; private JMXConnectorServer _cs; private Registry _rmiRegistry; - + private boolean _useCustomSocketFactory; public JMXManagedObjectRegistry() throws AMQException { @@ -89,6 +90,7 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry IApplicationRegistry appRegistry = ApplicationRegistry.getInstance(); // Retrieve the config parameters + _useCustomSocketFactory = appRegistry.getConfiguration().getUseCustomRMISocketFactory(); boolean platformServer = appRegistry.getConfiguration().getPlatformMbeanserver(); _mbeanServer = @@ -226,7 +228,14 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry * As a result, only binds made using the object reference will succeed, thus securing it from external change. */ System.setProperty("java.rmi.server.randomIDs", "true"); - _rmiRegistry = LocateRegistry.createRegistry(port, null, new CustomRMIServerSocketFactory()); + if(_useCustomSocketFactory) + { + _rmiRegistry = LocateRegistry.createRegistry(port, null, new CustomRMIServerSocketFactory()); + } + else + { + _rmiRegistry = LocateRegistry.createRegistry(port, null, null); + } /* * We must now create the RMI ConnectorServer manually, as the JMX Factory methods use RMI calls @@ -274,9 +283,28 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry //now do the normal tasks super.start(); - } + } @Override + public synchronized void stop() throws IOException + { + try + { + if (_rmiRegistry != null) + { + _rmiRegistry.unbind("jmxrmi"); + } + } + catch (NotBoundException nbe) + { + //ignore + } + + //now do the normal tasks + super.stop(); + } + + @Override public JMXServiceURL getAddress() { //must return our pre-crafted url that includes the full details, inc JNDI details @@ -374,27 +402,34 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry return false; } - // stops the RMIRegistry and unregisters the MBeans from the MBeanServer - public void close() throws RemoteException + //Stops the JMXConnectorServer and RMIRegistry, then unregisters any remaining MBeans from the MBeanServer + public void close() { - if (_rmiRegistry != null) - { - // Stopping the RMI registry - UnicastRemoteObject.unexportObject(_rmiRegistry, true); - } - if (_cs != null) { // Stopping the JMX ConnectorServer try { - _cs.stop(); - CurrentActor.get().message(ManagementConsoleMessages.MNG_SHUTTING_DOWN("RMI Registry", _cs.getAddress().getPort() - PORT_EXPORT_OFFSET)); CurrentActor.get().message(ManagementConsoleMessages.MNG_SHUTTING_DOWN("RMI ConnectorServer", _cs.getAddress().getPort())); + _cs.stop(); } catch (IOException e) { - _log.warn("Error while closing the JMX ConnectorServer: " + e.getMessage()); + _log.error("Exception while closing the JMX ConnectorServer: " + e.getMessage()); + } + } + + if (_rmiRegistry != null) + { + // Stopping the RMI registry + CurrentActor.get().message(ManagementConsoleMessages.MNG_SHUTTING_DOWN("RMI Registry", _cs.getAddress().getPort() - PORT_EXPORT_OFFSET)); + try + { + UnicastRemoteObject.unexportObject(_rmiRegistry, false); + } + catch (NoSuchObjectException e) + { + _log.error("Exception while closing the RMI Registry: " + e.getMessage()); } } diff --git a/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java b/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java index 9ec0f61351..6608bc1d7d 100644 --- a/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java +++ b/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java @@ -490,6 +490,7 @@ public class QpidTestCase extends TestCase if (_broker.equals(VM)) { setConfigurationProperty("management.jmxport", String.valueOf(getManagementPort(port))); + setConfigurationProperty(ServerConfiguration.MGMT_CUSTOM_REGISTRY_SOCKET, String.valueOf(false)); saveTestConfiguration(); // create an in_VM broker diff --git a/java/test-profiles/JavaExcludes b/java/test-profiles/JavaExcludes index 380963233f..99d354e316 100644 --- a/java/test-profiles/JavaExcludes +++ b/java/test-profiles/JavaExcludes @@ -15,7 +15,6 @@ org.apache.qpid.client.SessionCreateTest#* // QPID-2097 exclude it from the InVM test runs until InVM JMX Interface is reliable org.apache.qpid.management.jmx.ManagementActorLoggingTest#* -org.apache.qpid.server.queue.ModelTest#* // related to QPID-2471. Temporarily disabling these tests until I figure out why they are failing with the Java broker. org.apache.qpid.test.unit.ack.RecoverTest#testRecoverResendsMsgs |
