You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2011/12/16 13:51:56 UTC
svn commit: r1215112 - in /qpid/trunk/qpid/java:
broker-plugins/experimental/shutdown/
broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/
broker/src/main/java/org/apache/qpid/server/management/
broker/src/main/java/org/apache/...
Author: kwall
Date: Fri Dec 16 12:51:56 2011
New Revision: 1215112
URL: http://svn.apache.org/viewvc?rev=1215112&view=rev
Log:
QPID-3682: Shutdown Plugin Improvements
Various improvements to shutdown plugin:
1) Give the ShutdownPlugin instance a name to allow it to be permission via ACL METHOD rules.
2) Refactored to extend DefaultManagedObject.
3) Added method/parameter annotations to improve usability from the UI.
4) Fix date format parsing pattern used by the plugin
Applied patch from Andrew MacBean <an...@gmail.com> and myself.
Modified:
qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/MANIFEST.MF
qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/build.xml
qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/Activator.java
qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/Shutdown.java
qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/ShutdownMBean.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/AMQManagedObject.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/DefaultManagedObject.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
Modified: qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/MANIFEST.MF
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/MANIFEST.MF?rev=1215112&r1=1215111&r2=1215112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/MANIFEST.MF (original)
+++ qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/MANIFEST.MF Fri Dec 16 12:51:56 2011
@@ -9,7 +9,8 @@ Bundle-Version: 1.0.0
Bundle-Activator: org.apache.qpid.shutdown.Activator
Import-Package: javax.management;resolution:=optional,
org.apache.log4j,
- org.osgi.framework
+ org.osgi.framework,
+ org.apache.qpid.server.management
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy
Modified: qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/build.xml
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/build.xml?rev=1215112&r1=1215111&r2=1215112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/build.xml (original)
+++ qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/build.xml Fri Dec 16 12:51:56 2011
@@ -20,7 +20,7 @@
-->
<project name="AMQ Broker Shutdown Plugin" default="build">
- <property name="module.depends" value="common broker broker-plugins"/>
+ <property name="module.depends" value="common broker management/common broker-plugins"/>
<property name="module.test.depends" value="test broker/test management/common client systests"/>
<property name="module.manifest" value="MANIFEST.MF"/>
<property name="module.plugin" value="true"/>
Modified: qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/Activator.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/Activator.java?rev=1215112&r1=1215111&r2=1215112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/Activator.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/Activator.java Fri Dec 16 12:51:56 2011
@@ -19,11 +19,6 @@
*/
package org.apache.qpid.shutdown;
-import java.lang.management.ManagementFactory;
-
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
import org.apache.log4j.Logger;
import org.osgi.framework.BundleActivator;
@@ -33,20 +28,17 @@ public class Activator implements Bundle
{
private static final Logger _logger = Logger.getLogger(Activator.class);
- private static final String SHUTDOWN_MBEAN_NAME = "org.apache.qpid:type=ShutdownMBean";
+ private Shutdown _shutdown = null;
/** @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) */
public void start(BundleContext ctx) throws Exception {
- Shutdown shutdown = new Shutdown();
+ _shutdown = new Shutdown();
if (ctx != null)
{
- ctx.registerService(ShutdownMBean.class.getName(), shutdown, null);
+ ctx.registerService(ShutdownMBean.class.getName(), _shutdown, null);
}
- // MBean registration
- MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
- ObjectName name = new ObjectName(SHUTDOWN_MBEAN_NAME);
- mbs.registerMBean(shutdown, name);
+ _shutdown.register();
_logger.info("Shutdown plugin MBean registered");
}
@@ -54,16 +46,10 @@ public class Activator implements Bundle
/** @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) */
public void stop(BundleContext ctx) throws Exception
{
- // Unregister MBean
- MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
- ObjectName name = new ObjectName(SHUTDOWN_MBEAN_NAME);
- try
- {
- mbs.unregisterMBean(name);
- }
- catch (InstanceNotFoundException e)
+ if (_shutdown != null)
{
- //ignore
+ _shutdown.unregister();
+ _shutdown = null;
}
_logger.info("Shutdown plugin MBean unregistered");
Modified: qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/Shutdown.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/Shutdown.java?rev=1215112&r1=1215111&r2=1215112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/Shutdown.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/Shutdown.java Fri Dec 16 12:51:56 2011
@@ -27,21 +27,30 @@ import java.util.concurrent.ScheduledExe
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+import javax.management.NotCompliantMBeanException;
+
import org.apache.log4j.Logger;
+import org.apache.qpid.server.management.DefaultManagedObject;
/**
* Implementation of the JMX broker shutdown plugin.
*/
-public class Shutdown implements ShutdownMBean
+public class Shutdown extends DefaultManagedObject implements ShutdownMBean
{
+
private static final Logger _logger = Logger.getLogger(Shutdown.class);
- private static final String FORMAT = "yyyyy/MM/dd hh:mm:ss";
+ private static final String FORMAT = "yyyy/MM/dd HH:mm:ss";
private static final int THREAD_COUNT = 1;
private static final ScheduledExecutorService EXECUTOR = new ScheduledThreadPoolExecutor(THREAD_COUNT);
private final Runnable _shutdown = new SystemExiter();
+ public Shutdown() throws NotCompliantMBeanException
+ {
+ super(ShutdownMBean.class, ShutdownMBean.TYPE);
+ }
+
/** @see ShutdownMBean#shutdown() */
public void shutdown()
{
@@ -50,14 +59,22 @@ public class Shutdown implements Shutdow
}
/** @see ShutdownMBean#shutdown(long) */
- public void shutdown(long delay)
+ public void shutdown(final long delay)
{
- _logger.info("Scheduled broker shutdown after " + delay + "ms");
- shutdownBroker(delay);
+ if (delay < 0)
+ {
+ _logger.info("Shutting down at user's request");
+ shutdownBroker(0);
+ }
+ else
+ {
+ _logger.info("Scheduled broker shutdown after " + delay + "ms");
+ shutdownBroker(delay);
+ }
}
/** @see ShutdownMBean#shutdownAt(String) */
- public void shutdownAt(String when)
+ public void shutdownAt(final String when)
{
Date date;
DateFormat df = new SimpleDateFormat(FORMAT);
@@ -101,4 +118,13 @@ public class Shutdown implements Shutdow
System.exit(0);
}
}
+
+ /**
+ * @see org.apache.qpid.server.management.ManagedObject#getObjectInstanceName()
+ */
+ @Override
+ public String getObjectInstanceName()
+ {
+ return "Shutdown";
+ }
}
Modified: qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/ShutdownMBean.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/ShutdownMBean.java?rev=1215112&r1=1215111&r2=1215112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/ShutdownMBean.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/experimental/shutdown/src/main/java/org/apache/qpid/shutdown/ShutdownMBean.java Fri Dec 16 12:51:56 2011
@@ -19,6 +19,9 @@
*/
package org.apache.qpid.shutdown;
+import org.apache.qpid.management.common.mbeans.annotations.MBeanOperation;
+import org.apache.qpid.management.common.mbeans.annotations.MBeanOperationParameter;
+
/**
* Shutdown plugin JMX MBean interface.
*
@@ -26,9 +29,12 @@ package org.apache.qpid.shutdown;
*/
public interface ShutdownMBean
{
+ static final String TYPE = "Shutdown";
+
/**
* Broker will be shut down immediately.
*/
+ @MBeanOperation(name="shutdown", description="Shut down immediately")
public void shutdown();
/**
@@ -36,12 +42,14 @@ public interface ShutdownMBean
*
* @param delay the number of ms to wait
*/
- public void shutdown(long delay);
+ @MBeanOperation(name="shutdown", description="Shutdown after the specified delay (ms)")
+ public void shutdown(@MBeanOperationParameter(name="when", description="delay (ms)")long delay);
/**
* Broker will be shutdown at the specified date and time.
*
* @param when the date and time to shutdown
*/
- public void shutdownAt(String when);
+ @MBeanOperation(name="shutdownAt", description="Shutdown at the specified date and time (yyyy/MM/dd HH:mm:ss)")
+ public void shutdownAt(@MBeanOperationParameter(name="when", description="shutdown date/time (yyyy/MM/dd HH:mm:ss)")String when);
}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/AMQManagedObject.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/AMQManagedObject.java?rev=1215112&r1=1215111&r2=1215112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/AMQManagedObject.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/AMQManagedObject.java Fri Dec 16 12:51:56 2011
@@ -52,8 +52,6 @@ public abstract class AMQManagedObject e
*/
protected long _notificationSequenceNumber = 0;
- protected MBeanInfo _mbeanInfo;
-
protected LogActor _logActor;
protected AMQManagedObject(Class<?> managementInterface, String typeName)
@@ -63,27 +61,8 @@ public abstract class AMQManagedObject e
// CurrentActor will be defined as these objects are created during
// broker startup.
_logActor = new ManagementActor(CurrentActor.get().getRootMessageLogger());
- buildMBeanInfo();
- }
-
- @Override
- public MBeanInfo getMBeanInfo()
- {
- return _mbeanInfo;
- }
-
- private void buildMBeanInfo() throws NotCompliantMBeanException
- {
- _mbeanInfo = new MBeanInfo(this.getClass().getName(),
- MBeanIntrospector.getMBeanDescription(this.getClass()),
- MBeanIntrospector.getMBeanAttributesInfo(getManagementInterface()),
- MBeanIntrospector.getMBeanConstructorsInfo(this.getClass()),
- MBeanIntrospector.getMBeanOperationsInfo(getManagementInterface()),
- this.getNotificationInfo());
}
-
-
// notification broadcaster implementation
public void addNotificationListener(NotificationListener listener,
@@ -99,8 +78,5 @@ public abstract class AMQManagedObject e
_broadcaster.removeNotificationListener(listener);
}
- public MBeanNotificationInfo[] getNotificationInfo()
- {
- return null;
- }
+
}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/DefaultManagedObject.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/DefaultManagedObject.java?rev=1215112&r1=1215111&r2=1215112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/DefaultManagedObject.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/DefaultManagedObject.java Fri Dec 16 12:51:56 2011
@@ -21,6 +21,8 @@
package org.apache.qpid.server.management;
import javax.management.JMException;
+import javax.management.MBeanInfo;
+import javax.management.MBeanNotificationInfo;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
@@ -28,7 +30,6 @@ import javax.management.StandardMBean;
import org.apache.log4j.Logger;
import org.apache.qpid.server.registry.ApplicationRegistry;
-import org.apache.qpid.server.registry.IApplicationRegistry;
/**
* Provides implementation of the boilerplate ManagedObject interface. Most managed objects should find it useful
@@ -37,11 +38,13 @@ import org.apache.qpid.server.registry.I
*/
public abstract class DefaultManagedObject extends StandardMBean implements ManagedObject
{
- private static final Logger LOGGER = Logger.getLogger(ApplicationRegistry.class);
+ private static final Logger LOGGER = Logger.getLogger(DefaultManagedObject.class);
- private Class<?> _managementInterface;
+ private final Class<?> _managementInterface;
- private String _typeName;
+ private final String _typeName;
+
+ private final MBeanInfo _mbeanInfo;
private ManagedObjectRegistry _registry;
@@ -51,6 +54,13 @@ public abstract class DefaultManagedObje
super(managementInterface);
_managementInterface = managementInterface;
_typeName = typeName;
+ _mbeanInfo = buildMBeanInfo();
+ }
+
+ @Override
+ public MBeanInfo getMBeanInfo()
+ {
+ return _mbeanInfo;
}
public String getType()
@@ -98,7 +108,6 @@ public abstract class DefaultManagedObje
return getObjectInstanceName() + "[" + getType() + "]";
}
-
/**
* Created the ObjectName as per the JMX Specs
* @return ObjectName
@@ -161,4 +170,18 @@ public abstract class DefaultManagedObje
return "";
}
+ private MBeanInfo buildMBeanInfo() throws NotCompliantMBeanException
+ {
+ return new MBeanInfo(this.getClass().getName(),
+ MBeanIntrospector.getMBeanDescription(this.getClass()),
+ MBeanIntrospector.getMBeanAttributesInfo(getManagementInterface()),
+ MBeanIntrospector.getMBeanConstructorsInfo(this.getClass()),
+ MBeanIntrospector.getMBeanOperationsInfo(getManagementInterface()),
+ this.getNotificationInfo());
+ }
+
+ public MBeanNotificationInfo[] getNotificationInfo()
+ {
+ return null;
+ }
}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java?rev=1215112&r1=1215111&r2=1215112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java Fri Dec 16 12:51:56 2011
@@ -250,14 +250,14 @@ public abstract class ApplicationRegistr
try
{
+ initialiseManagedObjectRegistry();
+
configure();
_qmfService = new QMFService(getConfigStore(), this);
CurrentActor.get().message(BrokerMessages.STARTUP(QpidProperties.getReleaseVersion(), QpidProperties.getBuildVersion()));
- initialiseManagedObjectRegistry();
-
_virtualHostRegistry = new VirtualHostRegistry(this);
_securityManager = new SecurityManager(_configuration, _pluginManager);
@@ -471,12 +471,12 @@ public abstract class ApplicationRegistr
close(_authenticationManager);
- close(_managedObjectRegistry);
-
close(_qmfService);
close(_pluginManager);
+ close(_managedObjectRegistry);
+
CurrentActor.get().message(BrokerMessages.STOPPED());
}
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org