From 33ae3dd0a837eca450d8a42958876f3313b50367 Mon Sep 17 00:00:00 2001 From: Martin Ritchie Date: Tue, 18 May 2010 14:42:04 +0000 Subject: QPID-2584 : Update VirtualHostImp and VHPlugin to ensure that a RuntimeException occuring in a plugin will not cause the Plugin to stop running. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@945676 13f79535-47bb-0310-9956-ffa450edef68 --- java/broker/etc/virtualhosts.xml | 1 + .../configuration/VirtualHostConfiguration.java | 5 ++++ .../qpid/server/virtualhost/VirtualHostImpl.java | 3 ++- .../virtualhost/plugins/VirtualHostPlugin.java | 30 +++++++++++++++++++--- 4 files changed, 34 insertions(+), 5 deletions(-) (limited to 'java') diff --git a/java/broker/etc/virtualhosts.xml b/java/broker/etc/virtualhosts.xml index 4bc6956e5a..5860bfe2cb 100644 --- a/java/broker/etc/virtualhosts.xml +++ b/java/broker/etc/virtualhosts.xml @@ -30,6 +30,7 @@ + 2 20000 diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java index 4e29a3e526..780f5f1159 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java +++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java @@ -210,4 +210,9 @@ public class VirtualHostConfiguration extends ConfigurationPlugin "security", "store", "housekeeping"}; } + + public int getHouseKeepingThreadCount() + { + return _config.getInt("housekeeping.threadCount", Runtime.getRuntime().availableProcessors()); + } } diff --git a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java index 4331bbf972..0252d265fd 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java +++ b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java @@ -332,7 +332,8 @@ public class VirtualHostImpl implements Accessable, VirtualHost if (plugins != null) { - ScheduledThreadPoolExecutor vhostTasks = new ScheduledThreadPoolExecutor(plugins.size()); + ScheduledThreadPoolExecutor vhostTasks + = new ScheduledThreadPoolExecutor(_configuration.getHouseKeepingThreadCount()); for (String pluginName : plugins.keySet()) { diff --git a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java index 6c9526346c..e30b5e1934 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java +++ b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java @@ -20,21 +20,43 @@ */ package org.apache.qpid.server.virtualhost.plugins; -public interface VirtualHostPlugin extends Runnable +import org.apache.log4j.Logger; + +public abstract class VirtualHostPlugin implements Runnable { - public void run(); + Logger _logger = Logger.getLogger(this.getClass()); + + final public void run() + { + try + { + execute(); + } + catch (Throwable e) + { + _logger.warn(this.getClass().getSimpleName()+" throw exception: " + e); + } + } + /** * Long value representing the delay between repeats * * @return */ - public long getDelay(); + public abstract long getDelay(); /** * Option to specify what the delay value represents * @see java.util.concurrent.TimeUnit for valid value. * @return */ - public String getTimeUnit(); + public abstract String getTimeUnit(); + + /** + * Execute the plugin. + */ + public abstract void execute(); + + } -- cgit v1.2.1