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;
+ }
}
}