You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2013/08/30 23:40:50 UTC
svn commit: r1519093 - in /jmeter/trunk:
src/core/org/apache/jmeter/threads/RemoteThreadsLifeCycleListener.java
src/core/org/apache/jmeter/threads/RemoteThreadsListenerImpl.java
xdocs/changes.xml
Author: pmouawad
Date: Fri Aug 30 21:40:50 2013
New Revision: 1519093
URL: http://svn.apache.org/r1519093
Log:
Bug 55509 - Allow Plugins to be notified of remote thread number progression
Bugzilla Id: 55509
Added:
jmeter/trunk/src/core/org/apache/jmeter/threads/RemoteThreadsLifeCycleListener.java (with props)
Modified:
jmeter/trunk/src/core/org/apache/jmeter/threads/RemoteThreadsListenerImpl.java
jmeter/trunk/xdocs/changes.xml
Added: jmeter/trunk/src/core/org/apache/jmeter/threads/RemoteThreadsLifeCycleListener.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/threads/RemoteThreadsLifeCycleListener.java?rev=1519093&view=auto
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/threads/RemoteThreadsLifeCycleListener.java (added)
+++ jmeter/trunk/src/core/org/apache/jmeter/threads/RemoteThreadsLifeCycleListener.java Fri Aug 30 21:40:50 2013
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.jmeter.threads;
+
+/**
+ * Interface notified when number of active threads changes
+ * @since 2.10
+ */
+public interface RemoteThreadsLifeCycleListener {
+
+ /**
+ *
+ * @param numberOfThreads number of active threads
+ */
+ void threadNumberIncreased(int numberOfThreads);
+
+ /**
+ *
+ * @param numberOfThreads number of active threads
+ */
+ void threadNumberDecreased(int numberOfThreads);
+}
Propchange: jmeter/trunk/src/core/org/apache/jmeter/threads/RemoteThreadsLifeCycleListener.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: jmeter/trunk/src/core/org/apache/jmeter/threads/RemoteThreadsListenerImpl.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/threads/RemoteThreadsListenerImpl.java?rev=1519093&r1=1519092&r2=1519093&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/threads/RemoteThreadsListenerImpl.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/threads/RemoteThreadsListenerImpl.java Fri Aug 30 21:40:50 2013
@@ -18,12 +18,19 @@
package org.apache.jmeter.threads;
+import java.io.IOException;
+import java.lang.reflect.Modifier;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.jmeter.gui.GuiPackage;
import org.apache.jmeter.testelement.ThreadListener;
import org.apache.jmeter.util.JMeterUtils;
+import org.apache.jorphan.logging.LoggingManager;
+import org.apache.jorphan.reflect.ClassFinder;
+import org.apache.log.Logger;
/**
* RMI Implementation, client side code (ie executed on Controller)
@@ -31,6 +38,9 @@ import org.apache.jmeter.util.JMeterUtil
*/
public class RemoteThreadsListenerImpl extends UnicastRemoteObject implements
RemoteThreadsListener, ThreadListener {
+ private static final Logger log = LoggingManager.getLoggerForClass();
+ private final List<RemoteThreadsLifeCycleListener> listeners = new ArrayList<RemoteThreadsLifeCycleListener>();
+
/**
*
*/
@@ -46,6 +56,30 @@ public class RemoteThreadsListenerImpl e
*/
public RemoteThreadsListenerImpl() throws RemoteException {
super(DEFAULT_LOCAL_PORT);
+ try {
+ List<String> listClasses = ClassFinder.findClassesThatExtend(
+ JMeterUtils.getSearchPaths(),
+ new Class[] {RemoteThreadsLifeCycleListener.class });
+ for (String strClassName : listClasses) {
+ try {
+ if(log.isDebugEnabled()) {
+ log.debug("Loading class: "+ strClassName);
+ }
+ Class<?> commandClass = Class.forName(strClassName);
+ if (!Modifier.isAbstract(commandClass.getModifiers())) {
+ if(log.isDebugEnabled()) {
+ log.debug("Instantiating: "+ commandClass.getName());
+ }
+ RemoteThreadsLifeCycleListener listener = (RemoteThreadsLifeCycleListener) commandClass.newInstance();
+ listeners.add(listener);
+ }
+ } catch (Exception e) {
+ log.error("Exception registering "+RemoteThreadsLifeCycleListener.class.getName() + " with implementation:"+strClassName, e);
+ }
+ }
+ } catch (IOException e) {
+ log.error("Exception finding implementations of "+RemoteThreadsLifeCycleListener.class, e);
+ }
}
/**
@@ -59,6 +93,9 @@ public class RemoteThreadsListenerImpl e
if (gp != null) {// check there is a GUI
gp.getMainFrame().updateCounts();
}
+ for (RemoteThreadsLifeCycleListener listener : listeners) {
+ listener.threadNumberIncreased(JMeterContextService.getNumberOfThreads());
+ }
}
/* (non-Javadoc)
@@ -71,5 +108,8 @@ public class RemoteThreadsListenerImpl e
if (gp != null) {// check there is a GUI
gp.getMainFrame().updateCounts();
}
+ for (RemoteThreadsLifeCycleListener listener : listeners) {
+ listener.threadNumberDecreased(JMeterContextService.getNumberOfThreads());
+ }
}
}
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1519093&r1=1519092&r2=1519093&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml (original)
+++ jmeter/trunk/xdocs/changes.xml Fri Aug 30 21:40:50 2013
@@ -329,6 +329,7 @@ Previously the default was 1, which coul
<li><bugzilla>55427</bugzilla> - TestBeanHelper should ignore properties not supported by GenericTestBeanCustomizer</li>
<li><bugzilla>55459</bugzilla> - Elements using ComboStringEditor lose the input value if user selects another Test Element</li>
<li><bugzilla>54152</bugzilla> - In distributed testing : activeThreads and totalThreads always show 0</li>
+<li><bugzilla>55509</bugzilla> - Allow Plugins to be notified of remote thread number progression</li>
</ul>
<!-- =================== Improvements =================== -->