You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by db...@apache.org on 2005/11/18 10:34:29 UTC

svn commit: r345477 - in /geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent: AbstractContinuumBuildAgent.java ContinuumBuildAgent.java

Author: dblevins
Date: Fri Nov 18 01:34:23 2005
New Revision: 345477

URL: http://svn.apache.org/viewcvs?rev=345477&view=rev
Log:
Broke up the flow of the ContinuumBuildAgent to be able to deal with occational connection drops

Modified:
    geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java
    geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java

Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java?rev=345477&r1=345476&r2=345477&view=diff
==============================================================================
--- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java (original)
+++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java Fri Nov 18 01:34:23 2005
@@ -178,6 +178,23 @@
             return session;
         }
 
+        public MessageConsumer createQueueConsumer(String subject) throws JMSException {
+            Queue queue = session.createQueue(subject);
+            return session.createConsumer(queue);
+        }
+
+        public MessageConsumer createTopicConsumer(String subject) throws JMSException {
+            Topic topic = session.createTopic(subject);
+            return session.createConsumer(topic);
+        }
+
+        public MessageProducer createTopicProducer(String subject) throws JMSException {
+            Topic topic = session.createTopic(subject);
+            MessageProducer producer = session.createProducer(topic);
+            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
+            return producer;
+        }
+
         public synchronized Client reconnect() throws JMSException {
             Connection connection = connect();
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java?rev=345477&r1=345476&r2=345477&view=diff
==============================================================================
--- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java (original)
+++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java Fri Nov 18 01:34:23 2005
@@ -16,30 +16,20 @@
  */
 package org.apache.geronimo.gbuild.agent;
 
-import org.activemq.ActiveMQConnectionFactory;
 import org.apache.maven.continuum.buildcontroller.BuildController;
-import org.apache.maven.continuum.store.ContinuumStore;
-import org.apache.maven.continuum.configuration.ConfigurationService;
 import org.apache.maven.continuum.configuration.ConfigurationLoadingException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Startable;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.StartingException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.StoppingException;
-
-import javax.jms.Connection;
-import javax.jms.DeliveryMode;
-import javax.jms.ExceptionListener;
+import org.apache.maven.continuum.configuration.ConfigurationService;
+import org.apache.maven.continuum.store.ContinuumStore;
+
 import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.MessageConsumer;
 import javax.jms.MessageProducer;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.Topic;
 import javax.jms.ObjectMessage;
-import java.net.InetAddress;
 import java.io.File;
-import java.util.Map;
+import java.net.InetAddress;
 import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @version $Rev$ $Date$
@@ -95,66 +85,70 @@
 
     public void run() {
         try {
-            getLogger().info("Continuum Build Agent starting. ("+coordinatorUrl+")");
-            getLogger().debug("coordinatorUrl "+coordinatorUrl);
-            getLogger().debug("buildTaskQueue "+buildTaskQueue);
-            getLogger().debug("buildResultsTopic "+buildResultsTopic);
-            getLogger().debug("workingDirectory "+workingDirectory);
-            getLogger().debug("buildOutputDirectory "+buildOutputDirectory);
-            getLogger().debug("adminAddress "+adminAddress);
-            getLogger().debug("contributor "+contributor);
+            getLogger().info("Continuum Build Agent starting. (" + coordinatorUrl + ")");
+            getLogger().debug("coordinatorUrl " + coordinatorUrl);
+            getLogger().debug("buildTaskQueue " + buildTaskQueue);
+            getLogger().debug("buildResultsTopic " + buildResultsTopic);
+            getLogger().debug("workingDirectory " + workingDirectory);
+            getLogger().debug("buildOutputDirectory " + buildOutputDirectory);
+            getLogger().debug("adminAddress " + adminAddress);
+            getLogger().debug("contributor " + contributor);
 
-            // Create a Session
-            Session session = getSession();
-
-            MessageConsumer buildConsumer = createQueueConsumer(session, buildTaskQueue);
-
-            MessageProducer resultsProducer = createTopicProducer(session, buildResultsTopic);
 
             getLogger().info("Continuum Build Agent started and waiting for work.");
 
             while (isRunning()) {
-                // Wait for a message
-                Message message = buildConsumer.receive(1000);
-
-                if (message == null){
+                Client client = getClient();
 
-                    continue;
-
-                } else if (message instanceof ObjectMessage) {
+                try {
+                    processMessages(client);
+                } catch (JMSException e) {
+                    onException(e);
+                }
+            }
 
-                    try {
-                        getLogger().info("Message Received "+ message.getJMSMessageID() +" on "+ getConnection().getClientID()+":"+buildTaskQueue);
+        } catch (Exception e) {
+            getLogger().error("Agent failed.", e);
+        }
+    }
 
-                        ObjectMessage objectMessage = (ObjectMessage) message;
+    private void processMessages(Client client) throws JMSException {
+        MessageConsumer buildConsumer = client.createQueueConsumer(buildTaskQueue);
+        MessageProducer resultsProducer = client.createTopicProducer(buildResultsTopic);
+
+        while (isRunning()) {
+            Message message = buildConsumer.receive(1000);
+            if (message instanceof ObjectMessage) {
+                processMessage(message, client, resultsProducer);
+            }
+        }
+    }
 
-                        Map build = getMap(objectMessage, message);
+    private void processMessage(Message message, Client client, MessageProducer resultsProducer) throws JMSException {
+        try {
+            getLogger().info("Message Received " + message.getJMSMessageID() + " on " + client.getConnection().getClientID() + ":" + buildTaskQueue);
 
-                        execute(build);
+            ObjectMessage objectMessage = (ObjectMessage) message;
 
-                        HashMap results = getBuildResults(build);
+            Map build = getMap(objectMessage, message);
 
-                        ObjectMessage resultMessage = session.createObjectMessage(results);
+            execute(build);
 
-                        getLogger().info("Finished processing "+ message.getJMSMessageID());
+            HashMap results = getBuildResults(build);
 
-                        resultsProducer.send(resultMessage);
+            ObjectMessage resultMessage = client.getSession().createObjectMessage(results);
 
-                        getLogger().info("Results sent to "+ buildResultsTopic );
+            getLogger().info("Finished processing " + message.getJMSMessageID());
 
-                    } catch (Exception e) {
-                        getLogger().error("Failed Processing message "+message.getJMSMessageID());
-                    }
+            resultsProducer.send(resultMessage);
 
-                } else {
-                    getLogger().warn("Agent received incorrect message type: "+message.getClass().getName());
-                }
-            }
+            getLogger().info("Results sent to " + buildResultsTopic);
 
-            buildConsumer.close();
-            session.close();
         } catch (Exception e) {
-            getLogger().error("Agent failed.", e);
+            getLogger().error("Failed Processing message " + message.getJMSMessageID(), e);
+            if (e instanceof JMSException){
+                throw (JMSException) e;
+            }
         }
     }