[jboss-svn-commits] JBL Code SVN: r8084 - in labs/jbossesb/trunk/product/core/listeners: src/org/jboss/soa/esb/listeners/message tests/src/org/jboss/soa/esb/listeners/message

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Dec 6 05:18:07 EST 2006


Author: tfennelly
Date: 2006-12-06 05:18:00 -0500 (Wed, 06 Dec 2006)
New Revision: 8084

Added:
   labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerUnitTest.java
Removed:
   labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerTest.java
Modified:
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/AbstractListener.java
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/AbstractPassiveListener.java
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/CbrJmsQueueListener.java
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerFactory.java
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/HttpListener.java
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/JmsQueueListener.java
   labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/ListenerConfig_01.xml
   labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/MockListener.java
Log:
Added a few simple unit tests for the EsbListenerController

Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/AbstractListener.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/AbstractListener.java	2006-12-06 09:40:27 UTC (rev 8083)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/AbstractListener.java	2006-12-06 10:18:00 UTC (rev 8084)
@@ -26,6 +26,7 @@
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.listeners.Lifecycle;
+import org.jboss.soa.esb.listeners.State;
 
 /**
  * Base class for listener implementations  which will be responsible for implementing some sort of
@@ -45,6 +46,11 @@
 	/* The listener controller*/
 	protected EsbListenerController _controller = null;
 
+	/**
+	 * Listener lifecycle state.
+	 */
+	private State state = State.Uninitialised;
+
 	/* The default number of thread in the action pipeline execution thread pool */
 	protected int m_iMaxThr = 1;
 
@@ -82,4 +88,49 @@
 		}
 //		this.pipelineExecutorPool = Executors.newFixedThreadPool(m_iMaxThr);
 	}
+
+    /**
+     * Get the listener lifecycle state.
+     * @return The state of the listener.
+     */
+    public final State getState() {
+    	return state;
+    }
+
+    /**
+     * Set the listener lifecycle state.
+     * @param state The new state of the listener.
+     */
+    protected final void setState(State state) {
+    	this.state = state;
+    }
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Runnable#run()
+	 */
+	public final void run() {
+		Throwable thrown = null;
+		
+		try {
+			listen();
+		} catch(Throwable t) {
+			thrown = t;
+		} finally {
+			if(thrown != null) {
+				state = State.Exception_thrown;
+				state.setThrowable(thrown);
+				logger.error("Listener [" + getClass().getName() + "] terminated abnormally.  Configuration:\n" + _config.toXml(), thrown);
+			} else {
+				state = State.Done_OK;
+				logger.error("Listener [" + getClass().getName() + "] has shutdown.");
+			}
+		}
+	}
+	
+	/**
+	 * Listen for messages.
+	 * <p/>
+	 * This method is effectively the "run" method for the listener.
+	 */
+	public abstract void listen();
 }

Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/AbstractPassiveListener.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/AbstractPassiveListener.java	2006-12-06 09:40:27 UTC (rev 8083)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/AbstractPassiveListener.java	2006-12-06 10:18:00 UTC (rev 8084)
@@ -36,7 +36,7 @@
 		super(controller, configTree);
 	}
 
-	public void run() {
+	public void listen() {
 		//nothing to be done here because channel implementation is taking care of
 		// blocking receive stuff
 	}

Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/CbrJmsQueueListener.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/CbrJmsQueueListener.java	2006-12-06 09:40:27 UTC (rev 8083)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/CbrJmsQueueListener.java	2006-12-06 10:18:00 UTC (rev 8084)
@@ -68,9 +68,10 @@
      * <br/>When one is received, instantiates an action processing pipeline to process it
      * <br/>Pipeline is started in new Thread
      */
-    public void run()
+    public void listen()
     {
     	try {
+	        setState(State.Loading_parameters);
 	    	ContentBasedRouter cbr =ContentBasedRouterFactory.getRouter();
 	    	String ruleSet=null;
 	    	String ruleLanguage=null;

Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerFactory.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerFactory.java	2006-12-06 09:40:27 UTC (rev 8083)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerFactory.java	2006-12-06 10:18:00 UTC (rev 8084)
@@ -351,7 +351,7 @@
 				// Wait for the listener it to transition to a state of "Ready".
 				State.waitUntilReady(listener);
 			}
-			catch (Exception e) 
+			catch (Throwable e) 
 			{
 				_logger.error("Cannot launch <" + p_sClassName + ">\n", e);
 			}

Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/HttpListener.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/HttpListener.java	2006-12-06 09:40:27 UTC (rev 8083)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/HttpListener.java	2006-12-06 10:18:00 UTC (rev 8084)
@@ -59,11 +59,6 @@
  */
 public class HttpListener extends AbstractPassiveListener implements ServerInvocationHandler {
 
-	/**
-	 * Listener lifecycle state.
-	 */
-	private State state = State.Uninitialised;
-	
 	/* The logger for this class */
 	protected Logger logger = Logger.getLogger(HttpListener.class);
 
@@ -103,14 +98,6 @@
 
 	}
 
-    /**
-     * Get the listener lifecycle state.
-     * @return The state of the listener.
-     */
-    public State getState() {
-    	return state;
-    }
-
 	/*
 	 * Method being invoked when a request comes in.
 	 * 
@@ -202,7 +189,7 @@
 	 * Check for mandatory and optional attributes in parameter tree
 	 */
 	private void checkParams() throws ConfigurationException {
-		state = State.Loading_parameters;
+		setState(State.Loading_parameters);
 		
 		// listener url
 		this.listenHttpUrl = this._config.getAttribute(LISTEN_HTTP_URL);
@@ -235,7 +222,7 @@
 	 *             when something goes wrong during remoting deamon startup
 	 */
 	private void initServer() throws ListenerInitializationException {
-		state = State.Running;
+		setState(State.Running);
 		try {
 			InvokerLocator locator = new InvokerLocator(this.listenHttpUrl);
 			if (this.logger.isInfoEnabled()) {
@@ -255,12 +242,13 @@
 				this.logger.info("HttpListener deamon started successfully!");
 			}
 		} catch (Throwable thrown) {
-			state = State.Exception_thrown;
-			state.setThrowable(thrown);
+			State newState = State.Exception_thrown;
+			newState.setThrowable(thrown);
+			setState(newState);
 			throw new ListenerInitializationException(thrown.getMessage(), thrown);
 		}
 
-		state = State.Ready;
+		setState(State.Ready);
 	}
 
 }

Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/JmsQueueListener.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/JmsQueueListener.java	2006-12-06 09:40:27 UTC (rev 8083)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/JmsQueueListener.java	2006-12-06 10:18:00 UTC (rev 8084)
@@ -61,10 +61,6 @@
 
 public class JmsQueueListener extends AbstractListener
 {
-	/**
-	 * Listener lifecycle state.
-	 */
-	private State state = State.Uninitialised;
 	
 	/**
 	 * public constructor
@@ -79,22 +75,6 @@
     	_iSleepForRetry		= 3;
     	checkMyParms();
     } // _______________________________
-
-    /**
-     * Get the listener lifecycle state.
-     * @return The state of the listener.
-     */
-    public State getState() {
-    	return state;
-    }
-
-    /**
-     * Set the listener lifecycle state.
-     * @param state The new state of the listener.
-     */
-    protected void setState(State state) {
-    	this.state = state;
-    }
     
     /**
      * Loops until controlling process determines
@@ -102,9 +82,9 @@
      * <br/>When one is received, instantiates an action processing pipeline to process it
      * <br/>Pipeline is started in new Thread
      */
-    public void run()
+    public void listen()
     {
-    	state = State.Running;
+    	setState(State.Running);
     	
         _logger.debug("run() method of "+this.getClass().getSimpleName()
         		+" started on thread "+Thread.currentThread().getName());
@@ -114,7 +94,7 @@
      		_logger.fatal("Could not register service " + re.getLocalizedMessage(),re);
     	 }
 
-    	 state = State.Ready;
+    	 setState(State.Ready);
     	while (_controller.continueLooping())
         {
     		long lwait = _controller.millisToWait();
@@ -153,7 +133,7 @@
      */
     protected void checkMyParms() throws ConfigurationException 
     {
-    	state = State.Loading_parameters;
+    	setState(State.Loading_parameters);
     	
         // Default value of obtainAttribute is null - Exception will be thrown
         _queueName		= obtainAttribute(JMSEpr.DESTINATION_NAME_TAG, null);

Deleted: labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerTest.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerTest.java	2006-12-06 09:40:27 UTC (rev 8083)
+++ labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerTest.java	2006-12-06 10:18:00 UTC (rev 8084)
@@ -1,32 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2006, JBoss Inc., and others contributors as indicated 
- * by the @authors tag. All rights reserved. 
- * See the copyright.txt in the distribution for a
- * full listing of individual contributors. 
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License, v. 2.1.
- * This program is distributed in the hope that it will be useful, but WITHOUT A 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
- * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
- * You should have received a copy of the GNU Lesser General Public License,
- * v.2.1 along with this distribution; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
- * MA  02110-1301, USA.
- * 
- * (C) 2005-2006,
- * @author JBoss Inc.
- */
-
-package org.jboss.soa.esb.listeners.message;
-
-import junit.framework.TestCase;
-
-/**
- * 
- * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
- */
-public class EsbListenerControllerTest extends TestCase {
-
-}

Copied: labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerUnitTest.java (from rev 8071, labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerTest.java)
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerTest.java	2006-12-05 17:29:41 UTC (rev 8071)
+++ labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/EsbListenerControllerUnitTest.java	2006-12-06 10:18:00 UTC (rev 8084)
@@ -0,0 +1,59 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated 
+ * by the @authors tag. All rights reserved. 
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors. 
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+
+package org.jboss.soa.esb.listeners.message;
+
+import org.jboss.internal.soa.esb.services.registry.MockRegistry;
+import org.jboss.soa.esb.helpers.ConfigTree;
+
+import junit.framework.TestCase;
+
+/**
+ * EsbListenerController unit tests.
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public class EsbListenerControllerUnitTest extends TestCase {
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		MockRegistry.install();
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		MockRegistry.uninstall();
+	}
+	
+	public void test() throws Exception {
+		ConfigTree listenerConfig = ConfigTree.fromInputStream(getClass().getResourceAsStream("ListenerConfig_01.xml"));
+		
+		// Get the controller instance - the 4 listeners should be started.
+		EsbListenerControllerFactory.getInstance(listenerConfig);
+		assertEquals(3, MockListener.startedListeners.size());
+		
+	}
+}

Modified: labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/ListenerConfig_01.xml
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/ListenerConfig_01.xml	2006-12-06 09:40:27 UTC (rev 8083)
+++ labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/ListenerConfig_01.xml	2006-12-06 10:18:00 UTC (rev 8084)
@@ -1,7 +1,7 @@
 <ListenerConfig>
 
 	<MockListener
-		service-category="Category"
+		service-category="Category1"
 		service-name="Service1"
 		service-description="Blah"
 		listenerClass="org.jboss.soa.esb.listeners.message.MockListener"
@@ -9,20 +9,29 @@
 	>
 	</MockListener>
 	<MockListener
-		service-category="Category"
-		service-name="Service1"
+		service-category="Category1"
+		service-name="Service2"
 		service-description="Blah"
 		listenerClass="org.jboss.soa.esb.listeners.message.MockListener"
-		wait="3000"
+		wait="2000"
 	>
 	</MockListener>
 	<MockListener
-		service-category="Category"
+		service-category="Category2"
 		service-name="Service1"
 		service-description="Blah"
 		listenerClass="org.jboss.soa.esb.listeners.message.MockListener"
-		wait="5000"
+		throw-exception="true"
 	>
 	</MockListener>
+	<MockListener
+		service-category="Category2"
+		service-name="Service2"
+		service-description="Blah"
+		listenerClass="org.jboss.soa.esb.listeners.message.MockListener"
+		wait="1000"
+		lock="true"
+	>
+	</MockListener>
    
-</ContentBasedRouterTest>
+</ListenerConfig>

Modified: labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/MockListener.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/MockListener.java	2006-12-06 09:40:27 UTC (rev 8083)
+++ labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/message/MockListener.java	2006-12-06 10:18:00 UTC (rev 8084)
@@ -36,39 +36,32 @@
  */
 public class MockListener extends AbstractListener {
 
-	private State state = State.Uninitialised;
-	private long wait;
-	public static List<MockListener> readListeners = new ArrayList<MockListener>();
+	public static List<MockListener> startedListeners = new ArrayList<MockListener>();
+	private List<KeyValuePair> properties;
 	
 	/**
 	 * @param controller
 	 * @param configTree
 	 */
-	protected MockListener(EsbListenerController controller, ConfigTree configTree) {
+	public MockListener(EsbListenerController controller, ConfigTree configTree) {
 		super(controller, configTree);
-		List<KeyValuePair> properties = configTree.attributesAsList();
-		wait = (long)KeyValuePair.getDoubleValue("wait", properties, 1000);
+		properties = configTree.attributesAsList();
 	}
 
-	/* (non-Javadoc)
-	 * @see java.lang.Runnable#run()
-	 */
-	public void run() {
+	public void listen() {
+		if(KeyValuePair.getBooleanValue("throw-exception", properties, false)) {
+			throw new RuntimeException("Exception from MockListener.");
+		}
+		
+		long wait = (long)KeyValuePair.getDoubleValue("wait", properties, 1000);
 		try {
 			Thread.sleep(wait);
 		} catch (InterruptedException e) {
 			TestCase.fail(e.getMessage());
 		}
 		
-		readListeners.add(this);
-		state = State.Ready;
+		startedListeners.add(this);
+		setState(State.Ready);
 	}
 
-	/* (non-Javadoc)
-	 * @see org.jboss.soa.esb.listeners.Lifecycle#getState()
-	 */
-	public State getState() {
-		return state;
-	}
-
 }




More information about the jboss-svn-commits mailing list