Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 45931 invoked from network); 16 Nov 2005 12:35:33 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 16 Nov 2005 12:35:33 -0000 Received: (qmail 24646 invoked by uid 500); 16 Nov 2005 12:35:32 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 24494 invoked by uid 500); 16 Nov 2005 12:35:32 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 24480 invoked by uid 99); 16 Nov 2005 12:35:32 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 16 Nov 2005 04:35:32 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Wed, 16 Nov 2005 04:37:04 -0800 Received: (qmail 45791 invoked by uid 65534); 16 Nov 2005 12:35:09 -0000 Message-ID: <20051116123509.45787.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r344993 - in /geronimo/gbuild/trunk: gbuild-agent-application/src/conf/ gbuild-agent/ gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/ gbuild-agent/src/main/resources/META-INF/plexus/ gbuild-agent/src/test/java/org/apache/geroni... Date: Wed, 16 Nov 2005 12:35:00 -0000 To: scm@geronimo.apache.org From: dblevins@apache.org X-Mailer: svnmailer-1.0.5 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: dblevins Date: Wed Nov 16 04:34:52 2005 New Revision: 344993 URL: http://svn.apache.org/viewcvs?rev=344993&view=rev Log: Major overhaul that cleans up extensibility and adds build producer and build results agent in the mix Added: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumAgentAction.java - copied, changed from r344296, geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractDistributedContinuumAction.java 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/BuildResultsContinuumAgent.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsExtention.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsExtentionManager.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DefaultBuildResultsExtentionManager.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/NoSuchExtentionException.java - copied, changed from r344296, geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/NoSuchBuildAgentExtentionException.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/WriteIncludeFileExtention.java Removed: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractDistributedContinuumAction.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildTaskProducer.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/EchoPropertiesExtention.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/NoSuchBuildAgentExtentionException.java Modified: geronimo/gbuild/trunk/gbuild-agent-application/src/conf/application.xml geronimo/gbuild/trunk/gbuild-agent/pom.xml geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildAgentExtentionManager.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DefaultBuildAgentExtentionManager.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DirectoryMonitor.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DistrubutedBuildController.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/FileIncludeExtention.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/HeaderIncludeExtention.java geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/PropertiesBuildTaskProducer.java geronimo/gbuild/trunk/gbuild-agent/src/main/resources/META-INF/plexus/components.xml geronimo/gbuild/trunk/gbuild-agent/src/test/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgentTest.java geronimo/gbuild/trunk/gbuild-agent/src/test/java/org/apache/geronimo/gbuild/agent/MainTest.java Modified: geronimo/gbuild/trunk/gbuild-agent-application/src/conf/application.xml URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent-application/src/conf/application.xml?rev=344993&r1=344992&r2=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent-application/src/conf/application.xml (original) +++ geronimo/gbuild/trunk/gbuild-agent-application/src/conf/application.xml Wed Nov 16 04:34:52 2005 @@ -37,20 +37,6 @@ - org.apache.geronimo.gbuild.agent.BuildAgentExtention - work-properties - org.apache.geronimo.gbuild.agent.FileIncludeExtention - - - org.apache.maven.continuum.configuration.ConfigurationService - - - - work-properties - - - - org.apache.maven.continuum.store.ContinuumStore agent-store org.apache.geronimo.gbuild.agent.ThreadContextContinuumStore @@ -61,7 +47,7 @@ org.apache.geronimo.gbuild.agent.MockContinuumNotificationDispatcher - + Modified: geronimo/gbuild/trunk/gbuild-agent/pom.xml URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/pom.xml?rev=344993&r1=344992&r2=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/pom.xml (original) +++ geronimo/gbuild/trunk/gbuild-agent/pom.xml Wed Nov 16 04:34:52 2005 @@ -10,6 +10,13 @@ + maven-compiler-plugin + + 1.4 + 1.4 + + + org.codehaus.plexus plexus-maven-plugin 1.1 Copied: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumAgentAction.java (from r344296, geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractDistributedContinuumAction.java) URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumAgentAction.java?p2=geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumAgentAction.java&p1=geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractDistributedContinuumAction.java&r1=344296&r2=344993&rev=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractDistributedContinuumAction.java (original) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumAgentAction.java Wed Nov 16 04:34:52 2005 @@ -17,15 +17,14 @@ package org.apache.geronimo.gbuild.agent; import org.apache.maven.continuum.core.action.AbstractContinuumAction; -import org.apache.maven.continuum.model.project.Project; -import org.apache.maven.continuum.model.project.BuildDefinition; +import org.apache.maven.continuum.store.ContinuumStore; import java.util.Map; /** * @version $Rev$ $Date$ */ -public abstract class AbstractDistributedContinuumAction extends AbstractContinuumAction { +public abstract class AbstractContinuumAgentAction extends AbstractContinuumAction { // ---------------------------------------------------------------------- // Keys for the values that can be in the context @@ -35,18 +34,89 @@ public static final String KEY_BUILD_DEFINITION = "build-definition"; + public static final String KEY_STORE = "store"; + + public static final String KEY_PROJECT_ID = "projectId"; + + public static final String KEY_BUILD_DEFINITION_ID = "buildDefinitionId"; + + public static final String KEY_TRIGGER = "trigger"; + + public static final String KEY_HOST_NAME = "hostName"; + + public static final String KEY_HOST_ADDRESS = "hostAddress"; + + public static final String KEY_CONTRIBUTOR = "contributor"; + + public static final String KEY_ADMIN_ADDRESS = "adminAddress"; + + public static final String KEY_OS_VERSION = "os.version"; + + public static final String KEY_OS_NAME = "os.name"; + + public static final String KEY_JAVA_VERSION = "java.version"; + + public static final String KEY_JAVA_VENDOR = "java.vendor"; + // ---------------------------------------------------------------------- // // ---------------------------------------------------------------------- - public static Project getProject( Map context ) - { - return (Project) getObject( context, KEY_PROJECT_ID ); + public static int getTrigger(Map context) { + return getInteger(context, KEY_TRIGGER); + } + + public static int getBuildDefinitionId(Map context) { + return getInteger(context, KEY_BUILD_DEFINITION_ID); + } + + public static int getProjectId(Map context) { + return getInteger(context, KEY_PROJECT_ID); } - public static BuildDefinition getBuildDefinition( Map context ) - { - return (BuildDefinition) getObject( context, KEY_BUILD_DEFINITION_ID ); + public static ContinuumStore getContinuumStore(Map context) { + return (ContinuumStore) getObject(context, KEY_STORE); } + + protected static String getString(Map context, String key) { + return (String) getObject(context, key); + } + + protected static String getString(Map context, String key, String defaultValue) { + return (String) getObject(context, key, defaultValue); + } + + public static boolean getBoolean(Map context, String key) { + return ((Boolean) getObject(context, key)).booleanValue(); + } + + protected static int getInteger(Map context, String key) { + return ((Integer) getObject(context, key, null)).intValue(); + } + + protected static Object getObject(Map context, String key) { + if (!context.containsKey(key)) { + throw new RuntimeException("Missing key '" + key + "'."); + } + + Object value = context.get(key); + + if (value == null) { + throw new RuntimeException("Missing value for key '" + key + "'."); + } + + return value; + } + + protected static Object getObject(Map context, String key, Object defaultValue) { + Object value = context.get(key); + + if (value == null) { + return defaultValue; + } + + return value; + } + } Added: 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=344993&view=auto ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java (added) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java Wed Nov 16 04:34:52 2005 @@ -0,0 +1,125 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.gbuild.agent; + +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 org.activemq.ActiveMQConnectionFactory; + +import javax.jms.ExceptionListener; +import javax.jms.Connection; +import javax.jms.JMSException; +import javax.jms.MessageConsumer; +import javax.jms.Session; +import javax.jms.Queue; +import javax.jms.MessageProducer; +import javax.jms.Topic; +import javax.jms.DeliveryMode; +import javax.jms.ObjectMessage; +import javax.jms.Message; +import java.util.Map; + +/** + * @version $Rev$ $Date$ + */ +public abstract class AbstractContinuumBuildAgent extends AbstractContinuumAgentAction implements BuildAgent, ExceptionListener, Startable { + /** + * @plexus.configuration + */ + protected String coordinatorUrl; + + protected boolean run; + + protected Connection connection; + + public synchronized void start() throws StartingException { + try { + connection = createConnection(coordinatorUrl); + } catch (Throwable e) { + getLogger().error("Could not create connection to: "+coordinatorUrl, e); + throw new StartingException("Could not create connection to: "+coordinatorUrl); + } + + run = true; + Thread agentThread = new Thread(this); + agentThread.setDaemon(false); + agentThread.start(); + } + + public synchronized void stop() throws StoppingException { + run = false; + try { + connection.close(); + } catch (JMSException e) { + getLogger().error("Could not close connection to: "+coordinatorUrl, e); + throw new StoppingException("Could not close connection to: "+coordinatorUrl); + } + } + + public synchronized void onException(JMSException ex) { + getLogger().fatalError("JMS Exception occured. Shutting down client.", ex); + run = false; + } + + public synchronized boolean isRunning() { + return run; + } + + protected Connection createConnection(String coordinatorUrl) throws JMSException { + // Create a ConnectionFactory + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(coordinatorUrl); + + // Create a Connection + Connection connection = connectionFactory.createConnection(); + + connection.start(); + + connection.setExceptionListener(this); + + return connection; + } + + protected MessageConsumer createQueueConsumer(Session session, String subject) throws JMSException { + Queue queue = session.createQueue(subject); + + return session.createConsumer(queue); + } + + protected MessageProducer createTopicProducer(Session session, String subject) throws JMSException { + Topic topic = session.createTopic(subject); + + MessageProducer producer = session.createProducer(topic); + + producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + + return producer; + } + + protected MessageConsumer createConsumer(Session session, String subject) throws JMSException { + Topic topic = session.createTopic(subject); + return session.createConsumer(topic); + } + + protected Map getMap(ObjectMessage objectMessage, Message message) throws JMSException, BuildAgentException { + try { + return (Map) objectMessage.getObject(); + } catch (Exception e) { + throw new BuildAgentException("Message.getObject failed on "+ message.getJMSMessageID(), e); + } + } +} Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildAgentExtentionManager.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildAgentExtentionManager.java?rev=344993&r1=344992&r2=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildAgentExtentionManager.java (original) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildAgentExtentionManager.java Wed Nov 16 04:34:52 2005 @@ -26,7 +26,7 @@ String ROLE = BuildAgentExtentionManager.class.getName(); - BuildAgentExtention getBuildAgentExtention(String id) throws NoSuchBuildAgentExtentionException; + BuildAgentExtention getBuildAgentExtention(String id) throws NoSuchExtentionException; void postProcess(Map build, HashMap results); Added: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsContinuumAgent.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsContinuumAgent.java?rev=344993&view=auto ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsContinuumAgent.java (added) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsContinuumAgent.java Wed Nov 16 04:34:52 2005 @@ -0,0 +1,96 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.gbuild.agent; + +import javax.jms.Session; +import javax.jms.MessageConsumer; +import javax.jms.Message; +import javax.jms.ObjectMessage; +import java.util.Map; + +/** + * @version $Rev$ $Date$ + */ +public class BuildResultsContinuumAgent extends AbstractContinuumBuildAgent { + + /** + * @plexus.requirement + */ + private BuildResultsExtentionManager extentionManager; + + /** + * @plexus.configuration + */ + private String buildResultsTopic; + + + public void run() { + try { + getLogger().info("Continuum Build Agent starting."); + getLogger().info("coordinatorUrl "+coordinatorUrl); + getLogger().info("buildResultsTopic "+buildResultsTopic); + + // Create a Session + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + MessageConsumer resultsConsumer = createConsumer(session, buildResultsTopic); + + getLogger().info("Continuum Build Agent started and waiting for work."); + + while (run) { + // Wait for a message + Message message = resultsConsumer.receive(1000); + + if (message == null){ + + continue; + + } else if (message instanceof ObjectMessage) { + + try { + getLogger().info("Message Received "+ message.getJMSMessageID() +" on "+ connection.getClientID()+":"+buildResultsTopic); + + ObjectMessage objectMessage = (ObjectMessage) message; + + Map context = getMap(objectMessage, message); + + execute(context); + + getLogger().info("Finished processing "+ message.getJMSMessageID()); + + } catch (Exception e) { + getLogger().error("Failed Processing message "+message.getJMSMessageID()); + } + + } else { + getLogger().warn("Agent received incorrect message type: "+message.getClass().getName()); + } + } + + resultsConsumer.close(); + session.close(); + } catch (Exception e) { + getLogger().error("Agent failed.", e); + } + } + + public void execute(Map map) throws Exception { + extentionManager.execute(map); + } + + +} Added: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsExtention.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsExtention.java?rev=344993&view=auto ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsExtention.java (added) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsExtention.java Wed Nov 16 04:34:52 2005 @@ -0,0 +1,28 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.gbuild.agent; + +/** + * @version $Rev$ $Date$ + */ +public interface BuildResultsExtention { + + String ROLE = BuildResultsExtention.class.getName(); + + void execute(java.util.Map context) throws java.lang.Exception; + +} Added: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsExtentionManager.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsExtentionManager.java?rev=344993&view=auto ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsExtentionManager.java (added) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildResultsExtentionManager.java Wed Nov 16 04:34:52 2005 @@ -0,0 +1,32 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.gbuild.agent; + +import java.util.Map; + +/** + * @version $Rev$ $Date$ + */ +public interface BuildResultsExtentionManager { + + String ROLE = BuildResultsExtentionManager.class.getName(); + + BuildResultsExtention getBuildResultsExtention(String id) throws NoSuchExtentionException; + + void execute(Map results) throws Exception; + +} 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=344993&r1=344992&r2=344993&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 Wed Nov 16 04:34:52 2005 @@ -21,7 +21,6 @@ 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.logging.AbstractLogEnabled; 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; @@ -38,36 +37,16 @@ import javax.jms.Topic; import javax.jms.ObjectMessage; import java.net.InetAddress; -import java.net.UnknownHostException; import java.io.File; import java.util.Map; import java.util.HashMap; -import java.util.Iterator; /** * @version $Rev$ $Date$ */ -public class ContinuumBuildAgent extends AbstractLogEnabled implements BuildAgent, ExceptionListener, Startable { +public class ContinuumBuildAgent extends AbstractContinuumBuildAgent { - // ---------------------------------------------------------------------- - // Keys for the values that can be in the context - // ---------------------------------------------------------------------- - - public static final String KEY_STORE = "store"; - - public static final String KEY_PROJECT_ID = "projectId"; - - public static final String KEY_BUILD_DEFINITION_ID = "buildDefinitionId"; - - public static final String KEY_TRIGGER = "trigger"; - - public static final String KEY_HOST_NAME = "hostName"; - - public static final String KEY_HOST_ADDRESS = "hostAddress"; - - public static final String KEY_CONTRIBUTOR = "contributor"; - - public static final String KEY_ADMIN_ADDRESS = "adminAddress"; + public static final String KEY_BUILD_RESULTS = "build-results"; /** * @plexus.requirement @@ -97,11 +76,6 @@ /** * @plexus.configuration */ - private String coordinatorUrl; - - /** - * @plexus.configuration - */ private String buildTaskQueue; /** @@ -119,8 +93,6 @@ */ private String buildOutputDirectory; - private boolean run; - public void run() { try { getLogger().info("Continuum Build Agent starting."); @@ -132,16 +104,6 @@ getLogger().info("adminAddress "+adminAddress); getLogger().info("contributor "+contributor); - run = true; - - Connection connection = null; - try { - connection = createConnection(coordinatorUrl); - } catch (Throwable e) { - getLogger().error("Could not create connection to: "+coordinatorUrl, e); - return; - } - // Create a Session Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); @@ -166,54 +128,16 @@ ObjectMessage objectMessage = (ObjectMessage) message; - Map buildTask = getMap(objectMessage, message); - - ContinuumStore store = getContinuumStore(buildTask); - - ThreadContextContinuumStore.setStore(store); - - init(); - - int projectId = getProjectId(buildTask); - - int buildDefinitionId = getBuildDefinitionId(buildTask); - - int trigger = getTrigger(buildTask); + Map build = getMap(objectMessage, message); - extentionManager.preProcess(buildTask); + execute(build); - build(projectId, buildDefinitionId, trigger); + HashMap results = getBuildResults(build); - HashMap results = new HashMap(); - - setStore(results, store); - - setProjectId(results, projectId); - - setBuildDefinitionId(results, buildDefinitionId); - - setTrigger(results, trigger); - - setSystemProperty(results, "os.version"); - - setSystemProperty(results, "os.name"); - - setSystemProperty(results, "java.version"); - - setSystemProperty(results, "java.vendor"); - - setHostInformation(results); - - setContributor(results); - - setAdminAddress(results); - - extentionManager.postProcess(buildTask, results); + ObjectMessage resultMessage = session.createObjectMessage(results); getLogger().info("Finished processing "+ message.getJMSMessageID()); - ObjectMessage resultMessage = session.createObjectMessage(results); - resultsProducer.send(resultMessage); getLogger().info("Results sent to "+ buildResultsTopic ); @@ -229,127 +153,78 @@ buildConsumer.close(); session.close(); - connection.close(); } catch (Exception e) { getLogger().error("Agent failed.", e); } } - private Map getMap(ObjectMessage objectMessage, Message message) throws JMSException, BuildAgentException { - try { - return (Map) objectMessage.getObject(); - } catch (Exception e) { - throw new BuildAgentException("Message.getObject failed on "+ message.getJMSMessageID(), e); - } + private HashMap getBuildResults(Map build) { + return (HashMap) getObject(build, KEY_BUILD_RESULTS); } - public void init() throws ConfigurationLoadingException { - configurationService.load(); - configurationService.setWorkingDirectory(new File(workingDirectory)); - configurationService.setBuildOutputDirectory(new File(buildOutputDirectory)); - } + public void execute(Map context) throws Exception { - public void build(int projectId, int buildDefinitionId, int trigger) { - controller.build(projectId, buildDefinitionId, trigger); - } + ContinuumStore store = getContinuumStore(context); - private Connection createConnection(String coordinatorUrl) throws JMSException { - // Create a ConnectionFactory - ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(coordinatorUrl); + ThreadContextContinuumStore.setStore(store); - // Create a Connection - Connection connection = connectionFactory.createConnection(); + init(); - connection.start(); + int projectId = getProjectId(context); - connection.setExceptionListener(this); + int buildDefinitionId = getBuildDefinitionId(context); - return connection; - } + int trigger = getTrigger(context); - public void setAdminAddress(Map results) throws JMSException { - results.put(KEY_ADMIN_ADDRESS, adminAddress); - } + extentionManager.preProcess(context); - public void setContributor(Map results) throws JMSException { - results.put(KEY_CONTRIBUTOR, contributor); - } + build(projectId, buildDefinitionId, trigger); - public static void setHostInformation(Map results) throws UnknownHostException, JMSException { - InetAddress localHost = InetAddress.getLocalHost(); - results.put(KEY_HOST_NAME, localHost.getHostName()); - results.put(KEY_HOST_ADDRESS, localHost.getHostAddress()); - } + HashMap results = new HashMap(); - public static void setSystemProperty(Map results, String name) throws JMSException { - results.put(name, System.getProperty(name)); - } + context.put(KEY_BUILD_RESULTS, results); - public static void setStore(Map results, ContinuumStore store) throws JMSException { results.put(KEY_STORE, store); - } - public static void setBuildDefinitionId(Map results, int buildDefinitionId) throws JMSException { + results.put(KEY_PROJECT_ID, new Integer(projectId)); + results.put(KEY_BUILD_DEFINITION_ID, new Integer(buildDefinitionId)); - } - public static void setTrigger(Map results, int trigger) throws JMSException { results.put(KEY_TRIGGER, new Integer(trigger)); - } - public static void setProjectId(Map results, int projectId) throws JMSException { - results.put(KEY_PROJECT_ID, new Integer(projectId)); - } - - public static int getTrigger(Map mapMessage) throws JMSException { - return ((Integer)mapMessage.get(KEY_TRIGGER)).intValue(); - } + setSystemProperty(results, KEY_OS_VERSION); - public static int getBuildDefinitionId(Map mapMessage) throws JMSException { - return ((Integer)mapMessage.get(KEY_BUILD_DEFINITION_ID)).intValue(); - } + setSystemProperty(results, KEY_OS_NAME); - public static int getProjectId(Map mapMessage) throws JMSException { - return ((Integer)mapMessage.get(KEY_PROJECT_ID)).intValue(); - } + setSystemProperty(results, KEY_JAVA_VERSION); - public static ContinuumStore getContinuumStore(Map mapMessage) throws JMSException { - return (ContinuumStore) mapMessage.get(KEY_STORE); - } + setSystemProperty(results, KEY_JAVA_VENDOR); - private MessageConsumer createQueueConsumer(Session session, String subject) throws JMSException { - Queue queue = session.createQueue(subject); - - return session.createConsumer(queue); - } + InetAddress localHost = InetAddress.getLocalHost(); - private MessageProducer createTopicProducer(Session session, String subject) throws JMSException { - Topic topic = session.createTopic(subject); + results.put(KEY_HOST_NAME, localHost.getHostName()); - MessageProducer producer = session.createProducer(topic); + results.put(KEY_HOST_ADDRESS, localHost.getHostAddress()); - producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + results.put(KEY_CONTRIBUTOR, contributor); - return producer; - } + results.put(KEY_ADMIN_ADDRESS, adminAddress); - public synchronized boolean isRunning() { - return run; + extentionManager.postProcess(context, results); } - public synchronized void start() throws StartingException { - run = true; - Thread agentThread = new Thread(this); - agentThread.setDaemon(false); - agentThread.start(); + public void init() throws ConfigurationLoadingException { + configurationService.load(); + configurationService.setWorkingDirectory(new File(workingDirectory)); + configurationService.setBuildOutputDirectory(new File(buildOutputDirectory)); } - public synchronized void stop() throws StoppingException { - run = false; + public void build(int projectId, int buildDefinitionId, int trigger) { + controller.build(projectId, buildDefinitionId, trigger); } - public synchronized void onException(JMSException ex) { - System.out.println("JMS Exception occured. Shutting down client."); + public static void setSystemProperty(Map results, String name) { + results.put(name, System.getProperty(name)); } } Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DefaultBuildAgentExtentionManager.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DefaultBuildAgentExtentionManager.java?rev=344993&r1=344992&r2=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DefaultBuildAgentExtentionManager.java (original) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DefaultBuildAgentExtentionManager.java Wed Nov 16 04:34:52 2005 @@ -32,12 +32,12 @@ */ private Map extentions; - public BuildAgentExtention getBuildAgentExtention(String id) throws NoSuchBuildAgentExtentionException { + public BuildAgentExtention getBuildAgentExtention(String id) throws NoSuchExtentionException { BuildAgentExtention agentExtention = (BuildAgentExtention) extentions.get(id); if (agentExtention == null){ - throw new NoSuchBuildAgentExtentionException(id); + throw new NoSuchExtentionException(id); } return agentExtention; } Added: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DefaultBuildResultsExtentionManager.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DefaultBuildResultsExtentionManager.java?rev=344993&view=auto ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DefaultBuildResultsExtentionManager.java (added) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DefaultBuildResultsExtentionManager.java Wed Nov 16 04:34:52 2005 @@ -0,0 +1,66 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.gbuild.agent; + +import org.codehaus.plexus.logging.AbstractLogEnabled; + +import java.util.Map; +import java.util.HashMap; +import java.util.Iterator; + +/** + * @version $Rev$ $Date$ + */ +public class DefaultBuildResultsExtentionManager extends AbstractLogEnabled implements BuildResultsExtentionManager { + + /** + * @plexus.requirement + */ + private Map extentions; + + public BuildResultsExtention getBuildResultsExtention(String id) throws NoSuchExtentionException { + BuildResultsExtention agentExtention = (BuildResultsExtention) extentions.get(id); + + if (agentExtention == null){ + throw new NoSuchExtentionException(id); + } + return agentExtention; + } + + public void execute(Map results) throws Exception { + for (Iterator iterator = extentions.entrySet().iterator(); iterator.hasNext();) { + + Map.Entry entry = (Map.Entry) iterator.next(); + + String name = (String) entry.getKey(); + + BuildResultsExtention extention = (BuildResultsExtention) entry.getValue(); + + getLogger().info("Executing extention "+name); + + try { + + extention.execute(results); + + } catch (Exception e) { + + getLogger().warn("Extention Failed: "+name, e); + + } + } + } +} Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DirectoryMonitor.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DirectoryMonitor.java?rev=344993&r1=344992&r2=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DirectoryMonitor.java (original) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DirectoryMonitor.java Wed Nov 16 04:34:52 2005 @@ -53,9 +53,9 @@ private Map files = new HashMap(); public DirectoryMonitor(File directory, Listener listener, int pollIntervalMillis) { - assert listener != null: "No point in scanning without a listener."; + assert listener == null: "No point in scanning without a listener."; assert directory.isDirectory(): "File specified is not a directory. " + directory.getAbsolutePath(); - assert !directory.canRead(): "Directory specified cannot be read. " + directory.getAbsolutePath(); + assert directory.canRead(): "Directory specified cannot be read. " + directory.getAbsolutePath(); assert pollIntervalMillis > 0: "Poll Interval must be above zero."; this.directory = directory; Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DistrubutedBuildController.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DistrubutedBuildController.java?rev=344993&r1=344992&r2=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DistrubutedBuildController.java (original) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/DistrubutedBuildController.java Wed Nov 16 04:34:52 2005 @@ -25,17 +25,9 @@ import org.apache.maven.continuum.utils.ContinuumUtils; import org.apache.maven.continuum.project.ContinuumProjectState; -import org.apache.maven.continuum.core.action.AbstractContinuumAction; -import org.apache.maven.continuum.model.project.BuildResult; -import org.apache.maven.continuum.model.project.Project; import org.apache.maven.continuum.model.project.BuildDefinition; -import org.apache.maven.continuum.model.scm.ScmResult; import org.apache.maven.continuum.notification.ContinuumNotificationDispatcher; -import org.apache.maven.continuum.project.ContinuumProjectState; -import org.apache.maven.continuum.scm.ContinuumScmException; import org.apache.maven.continuum.store.ContinuumStore; -import org.apache.maven.continuum.store.ContinuumStoreException; -import org.apache.maven.continuum.utils.ContinuumUtils; import org.apache.maven.continuum.utils.WorkingDirectoryService; import org.codehaus.plexus.action.ActionManager; import org.codehaus.plexus.logging.AbstractLogEnabled; @@ -97,9 +89,9 @@ Map actionContext = new HashMap(); - actionContext.put( AbstractDistributedContinuumAction.KEY_PROJECT, project ); + actionContext.put( AbstractContinuumAgentAction.KEY_PROJECT, project ); - actionContext.put( AbstractDistributedContinuumAction.KEY_BUILD_DEFINITION, buildDefinition ); + actionContext.put( AbstractContinuumAgentAction.KEY_BUILD_DEFINITION, buildDefinition ); actionContext.put( AbstractContinuumAction.KEY_TRIGGER, new Integer( trigger ) ); Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/FileIncludeExtention.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/FileIncludeExtention.java?rev=344993&r1=344992&r2=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/FileIncludeExtention.java (original) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/FileIncludeExtention.java Wed Nov 16 04:34:52 2005 @@ -39,7 +39,7 @@ /** * @plexus.configuration */ - private String prefix; + private String pattern; public void preProcess(Map build) { @@ -52,7 +52,7 @@ String key = (String) keys.next(); - if (key.startsWith(prefix)){ + if (key.matches(pattern)){ include(key, build, results); Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/HeaderIncludeExtention.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/HeaderIncludeExtention.java?rev=344993&r1=344992&r2=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/HeaderIncludeExtention.java (original) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/HeaderIncludeExtention.java Wed Nov 16 04:34:52 2005 @@ -29,7 +29,7 @@ /** * @plexus.configuration */ - private String prefix; + private String pattern; public void preProcess(Map build) { @@ -42,7 +42,7 @@ String key = (String) keys.next(); - if (key.startsWith(prefix)){ + if (key.matches(pattern)){ include(key, build, results); Copied: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/NoSuchExtentionException.java (from r344296, geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/NoSuchBuildAgentExtentionException.java) URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/NoSuchExtentionException.java?p2=geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/NoSuchExtentionException.java&p1=geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/NoSuchBuildAgentExtentionException.java&r1=344296&r2=344993&rev=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/NoSuchBuildAgentExtentionException.java (original) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/NoSuchExtentionException.java Wed Nov 16 04:34:52 2005 @@ -19,9 +19,9 @@ /** * @version $Rev$ $Date$ */ -public class NoSuchBuildAgentExtentionException extends Exception { +public class NoSuchExtentionException extends Exception { - public NoSuchBuildAgentExtentionException(String id) { + public NoSuchExtentionException(String id) { super(id); } Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/PropertiesBuildTaskProducer.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/PropertiesBuildTaskProducer.java?rev=344993&r1=344992&r2=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/PropertiesBuildTaskProducer.java (original) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/PropertiesBuildTaskProducer.java Wed Nov 16 04:34:52 2005 @@ -21,7 +21,6 @@ import org.apache.maven.continuum.model.project.BuildDefinition; import org.apache.maven.continuum.model.project.Project; import org.apache.maven.continuum.project.ContinuumProjectState; -import org.codehaus.plexus.logging.AbstractLogEnabled; 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; @@ -42,12 +41,7 @@ /** * @version $Rev$ $Date$ */ -public class PropertiesBuildTaskProducer extends AbstractLogEnabled implements Startable, DirectoryMonitor.Listener { - - /** - * @plexus.configuration - */ - private String coordinatorUrl; +public class PropertiesBuildTaskProducer extends AbstractContinuumBuildAgent implements DirectoryMonitor.Listener { /** * @plexus.configuration @@ -84,13 +78,16 @@ public synchronized void start() throws StartingException { File dir = new File(watchDirectory); scanner = new DirectoryMonitor(dir, this, pollInterval); - Thread thread = new Thread(scanner); - thread.setDaemon(false); - thread.start(); + super.start(); } public synchronized void stop() throws StoppingException { scanner.stop(); + super.stop(); + } + + public void run() { + scanner.run(); } public boolean fileAdded(File file) { @@ -103,7 +100,8 @@ getLogger().error("Unable to load properties file: "+file.getAbsolutePath(), e); } try { - queueBuildTasks(properties); + // TODO: Improve this so you can have ${my-property} parts to property values + execute(properties); } catch (Exception e) { getLogger().error("Unable to process file: "+file.getAbsolutePath(), e); } @@ -118,12 +116,8 @@ } - // TODO: Improve this so you can have ${my-property} parts to property values - private void queueBuildTasks(Properties def) throws Exception { + public void execute(Map def) throws Exception { - ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(coordinatorUrl); - Connection connection = connectionFactory.createConnection(); - connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Queue buildQueue = session.createQueue(buildTaskQueue); @@ -183,10 +177,13 @@ map.put(key, value); - ContinuumBuildAgent.setStore(map, store); - ContinuumBuildAgent.setProjectId(map, project.getId()); - ContinuumBuildAgent.setBuildDefinitionId(map, bd.getId()); - ContinuumBuildAgent.setTrigger(map, ContinuumProjectState.TRIGGER_FORCED); + map.put(KEY_STORE, store); + + map.put(KEY_PROJECT_ID, new Integer(project.getId())); + + map.put(KEY_BUILD_DEFINITION_ID, new Integer(bd.getId())); + + map.put(KEY_TRIGGER, new Integer(ContinuumProjectState.TRIGGER_FORCED)); addProperties("project.", def, map); addProperties(headerPrefix, def, map); @@ -196,10 +193,9 @@ } session.close(); - connection.close(); } - private void addProperties(String prefix, Properties def, HashMap map) { + private void addProperties(String prefix, Map def, HashMap map) { for (Iterator iterator = def.entrySet().iterator(); iterator.hasNext();) { Map.Entry entry = (Map.Entry) iterator.next(); @@ -211,45 +207,4 @@ } } } - - protected static String getString(Map context, String key) { - return (String) getObject(context, key); - } - - protected static String getString(Map context, String key, String defaultValue) { - return (String) getObject(context, key, defaultValue); - } - - public static boolean getBoolean(Map context, String key) { - return ((Boolean) getObject(context, key)).booleanValue(); - } - - protected static int getInteger(Map context, String key) { - return ((Integer) getObject(context, key, null)).intValue(); - } - - protected static Object getObject(Map context, String key) { - if (!context.containsKey(key)) { - throw new RuntimeException("Missing key '" + key + "'."); - } - - Object value = context.get(key); - - if (value == null) { - throw new RuntimeException("Missing value for key '" + key + "'."); - } - - return value; - } - - protected static Object getObject(Map context, String key, Object defaultValue) { - Object value = context.get(key); - - if (value == null) { - return defaultValue; - } - - return value; - } - } Added: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/WriteIncludeFileExtention.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/WriteIncludeFileExtention.java?rev=344993&view=auto ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/WriteIncludeFileExtention.java (added) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/WriteIncludeFileExtention.java Wed Nov 16 04:34:52 2005 @@ -0,0 +1,107 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.gbuild.agent; + +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 java.util.Map; +import java.util.Iterator; +import java.util.Date; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; + +/** + * @version $Rev$ $Date$ + */ +public class WriteIncludeFileExtention extends AbstractContinuumAgentAction implements BuildResultsExtention, Startable { + + /** + * @plexus.configuration + */ + private String includePattern; + + /** + * @plexus.configuration + */ + private String fileExtention; + + /** + * @plexus.configuration + */ + private String resultsDirectory; + + /** + * @plexus.configuration + */ + private String useHeader; + + /** + * @plexus.configuration + */ + private String dateFormat; + + + private File directory; + private SimpleDateFormat dateFormatter; + + public void start() throws StartingException { + directory = new File(resultsDirectory); + assert directory.exists(): "File specified does not exist. " + directory.getAbsolutePath(); + assert directory.isDirectory(): "File specified is not a directory. " + directory.getAbsolutePath(); + assert directory.canWrite(): "Directory specified is not writable. " + directory.getAbsolutePath(); + + dateFormatter = new SimpleDateFormat(dateFormat); + } + + public void stop() throws StoppingException { + } + + public void execute(Map context) throws Exception { + + String header = (String) context.get(useHeader); + + for (Iterator iterator = context.entrySet().iterator(); iterator.hasNext();) { + Map.Entry entry = (Map.Entry) iterator.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); + + if (key.startsWith(includePattern)){ + + String fileName = header; + fileName += key.replaceFirst(includePattern, ""); + fileName += "-"+ dateFormatter.format(new Date()); + fileName += fileExtention; + + write(fileName, (String)value); + } + } + } + + private void write(String fileName, String content) { + try { + FileOutputStream file = new FileOutputStream(fileName); + file.write(content.getBytes()); + file.close(); + } catch (IOException e) { + getLogger().error("Could not write to file "+fileName, e); + } + } +} Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/resources/META-INF/plexus/components.xml URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/resources/META-INF/plexus/components.xml?rev=344993&r1=344992&r2=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/main/resources/META-INF/plexus/components.xml (original) +++ geronimo/gbuild/trunk/gbuild-agent/src/main/resources/META-INF/plexus/components.xml Wed Nov 16 04:34:52 2005 @@ -13,6 +13,7 @@ --> org.apache.geronimo.gbuild.agent.BuildAgent + build-executor org.apache.geronimo.gbuild.agent.ContinuumBuildAgent @@ -31,8 +32,8 @@ tcp://localhost:61616 BUILD.TASKS BUILD.RESULTS - target/agent/work - target/agent/output + agent/work + agent/output @@ -79,6 +80,81 @@ + + org.apache.geronimo.gbuild.agent.BuildAgentExtention + file-include + org.apache.geronimo.gbuild.agent.FileIncludeExtention + + + org.apache.maven.continuum.configuration.ConfigurationService + + + + ^include\. + + + + + org.apache.geronimo.gbuild.agent.BuildAgentExtention + general-headers + org.apache.geronimo.gbuild.agent.HeaderIncludeExtention + + ^(project|build|header)\. + + + + + + + org.apache.geronimo.gbuild.agent.BuildAgent + build-producer + org.apache.geronimo.gbuild.agent.PropertiesBuildTaskProducer + + tcp://localhost:61616 + BUILD.TASKS + include. + header. + tasks + 10000 + + + + + org.apache.geronimo.gbuild.agent.BuildAgent + build-results + org.apache.geronimo.gbuild.agent.BuildResultsContinuumAgent + + + org.apache.geronimo.gbuild.agent.BuildResultsExtentionManager + + + + tcp://localhost:61616 + BUILD.RESULTS + + + + + org.apache.geronimo.gbuild.agent.BuildResultsExtention + write-include-file + org.apache.geronimo.gbuild.agent.WriteIncludeFileExtention + + + org.apache.maven.continuum.configuration.ConfigurationService + + + + ^include\. + .properties + results + project.name + + + Modified: geronimo/gbuild/trunk/gbuild-agent/src/test/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgentTest.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/test/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgentTest.java?rev=344993&r1=344992&r2=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/test/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgentTest.java (original) +++ geronimo/gbuild/trunk/gbuild-agent/src/test/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgentTest.java Wed Nov 16 04:34:52 2005 @@ -18,7 +18,6 @@ import javax.jms.Connection; import javax.jms.Session; -import javax.jms.Destination; import javax.jms.MessageProducer; import javax.jms.DeliveryMode; import javax.jms.Topic; @@ -51,7 +50,7 @@ } - public void testBuild() throws Exception { + public void _testBuild() throws Exception { Project project = new Project(); project.setId(10); @@ -151,10 +150,10 @@ HashMap map = new HashMap(); - ContinuumBuildAgent.setStore(map, store); - ContinuumBuildAgent.setProjectId(map, project.getId()); - ContinuumBuildAgent.setBuildDefinitionId(map, bd.getId()); - ContinuumBuildAgent.setTrigger(map, 0); + map.put(AbstractContinuumAgentAction.KEY_STORE, store); + map.put(AbstractContinuumAgentAction.KEY_PROJECT_ID, new Integer(project.getId())); + map.put(AbstractContinuumAgentAction.KEY_BUILD_DEFINITION_ID, new Integer(bd.getId())); + map.put(AbstractContinuumAgentAction.KEY_TRIGGER, new Integer(0)); producer.send(session.createObjectMessage(map)); } Modified: geronimo/gbuild/trunk/gbuild-agent/src/test/java/org/apache/geronimo/gbuild/agent/MainTest.java URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/test/java/org/apache/geronimo/gbuild/agent/MainTest.java?rev=344993&r1=344992&r2=344993&view=diff ============================================================================== --- geronimo/gbuild/trunk/gbuild-agent/src/test/java/org/apache/geronimo/gbuild/agent/MainTest.java (original) +++ geronimo/gbuild/trunk/gbuild-agent/src/test/java/org/apache/geronimo/gbuild/agent/MainTest.java Wed Nov 16 04:34:52 2005 @@ -8,6 +8,7 @@ import org.apache.maven.continuum.model.project.BuildDefinition; import org.apache.maven.continuum.model.project.Project; import org.apache.maven.continuum.execution.shell.ShellBuildExecutor; +import org.apache.maven.continuum.project.ContinuumProjectState; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.cli.CommandLineException; @@ -17,6 +18,7 @@ import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.Message; +import javax.jms.Queue; import java.io.File; import java.io.IOException; import java.util.HashMap; @@ -191,6 +193,53 @@ } + public static class BuildTaskProducer { + public static void main(String[] args) throws Exception { + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:41616"); + Connection connection = connectionFactory.createConnection(); + connection.start(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Queue buildQueue = session.createQueue("BUILD.TASKS"); + MessageProducer producer = session.createProducer(buildQueue); + producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + + MapContinuumStore store = new MapContinuumStore(); + + Project project = new Project(); + project.setId(14); + project.setScmUrl("scm:svn:https://svn.apache.org/repos/asf/geronimo/trunk"); +// project.setScmUrl("scm:cvs:pserver:anonymous@cvs.openejb.codehaus.org:/home/projects/openejb/scm:openejb1"); + project.setName("OpenEJB"); + project.setVersion("1.0-SNAPSHOT"); + project.setExecutorId(ShellBuildExecutor.ID); + project.setState(ContinuumProjectState.OK); + store.updateProject(project); + + String[] goals = new String[]{"clean", "default"}; + + for (int i = 0; i < goals.length; i++) { + String goal = goals[i]; + BuildDefinition bd = new BuildDefinition(); + bd.setId(i); + bd.setBuildFile("/usr/local/maven/bin/maven"); + bd.setArguments(goal); + project.addBuildDefinition(bd); + store.storeBuildDefinition(bd); + + HashMap map = new HashMap(); + + map.put(AbstractContinuumAgentAction.KEY_STORE, store); + map.put(AbstractContinuumAgentAction.KEY_PROJECT_ID, new Integer(project.getId())); + map.put(AbstractContinuumAgentAction.KEY_BUILD_DEFINITION_ID, new Integer(bd.getId())); + map.put(AbstractContinuumAgentAction.KEY_TRIGGER, new Integer(ContinuumProjectState.TRIGGER_FORCED)); + + producer.send(session.createObjectMessage(map)); + } + + connection.close(); + session.close(); + } + } public static void deleteAndCreateDirectory(File directory)