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/16 13:35:00 UTC
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...
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 @@
</component>
<component>
- <role>org.apache.geronimo.gbuild.agent.BuildAgentExtention</role>
- <role-hint>work-properties</role-hint>
- <implementation>org.apache.geronimo.gbuild.agent.FileIncludeExtention</implementation>
- <requirements>
- <requirement>
- <role>org.apache.maven.continuum.configuration.ConfigurationService</role>
- </requirement>
- </requirements>
- <configuration>
- <file-name-key>work-properties</file-name-key>
- </configuration>
- </component>
-
- <component>
<role>org.apache.maven.continuum.store.ContinuumStore</role>
<role-hint>agent-store</role-hint>
<implementation>org.apache.geronimo.gbuild.agent.ThreadContextContinuumStore</implementation>
@@ -61,7 +47,7 @@
<!--<role-hint>agent-notifier</role-hint>-->
<implementation>org.apache.geronimo.gbuild.agent.MockContinuumNotificationDispatcher</implementation>
</component>
-
+
<!--
| Logger manager
-->
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 @@
<build>
<plugins>
<plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <target>1.4</target>
+ </configuration>
+ </plugin>
+ <plugin>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-maven-plugin</artifactId>
<version>1.1</version>
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 @@
-->
<component>
<role>org.apache.geronimo.gbuild.agent.BuildAgent</role>
+ <role-hint>build-executor</role-hint>
<implementation>org.apache.geronimo.gbuild.agent.ContinuumBuildAgent</implementation>
<requirements>
<requirement>
@@ -31,8 +32,8 @@
<coordinator-url>tcp://localhost:61616</coordinator-url>
<build-task-queue>BUILD.TASKS</build-task-queue>
<build-results-topic>BUILD.RESULTS</build-results-topic>
- <working-directory>target/agent/work</working-directory>
- <build-output-directory>target/agent/output</build-output-directory>
+ <working-directory>agent/work</working-directory>
+ <build-output-directory>agent/output</build-output-directory>
</configuration>
</component>
@@ -79,6 +80,81 @@
</requirements>
</component>
+ <component>
+ <role>org.apache.geronimo.gbuild.agent.BuildAgentExtention</role>
+ <role-hint>file-include</role-hint>
+ <implementation>org.apache.geronimo.gbuild.agent.FileIncludeExtention</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.continuum.configuration.ConfigurationService</role>
+ </requirement>
+ </requirements>
+ <configuration>
+ <pattern>^include\.</pattern>
+ </configuration>
+ </component>
+
+ <component>
+ <role>org.apache.geronimo.gbuild.agent.BuildAgentExtention</role>
+ <role-hint>general-headers</role-hint>
+ <implementation>org.apache.geronimo.gbuild.agent.HeaderIncludeExtention</implementation>
+ <configuration>
+ <pattern>^(project|build|header)\.</pattern>
+ </configuration>
+ </component>
+
+
+ <!--
+ | Build Producer
+ -->
+ <component>
+ <role>org.apache.geronimo.gbuild.agent.BuildAgent</role>
+ <role-hint>build-producer</role-hint>
+ <implementation>org.apache.geronimo.gbuild.agent.PropertiesBuildTaskProducer</implementation>
+ <configuration>
+ <coordinator-url>tcp://localhost:61616</coordinator-url>
+ <build-task-queue>BUILD.TASKS</build-task-queue>
+ <include-prefix>include.</include-prefix>
+ <header-prefix>header.</header-prefix>
+ <watch-directory>tasks</watch-directory>
+ <poll-interval>10000</poll-interval>
+ </configuration>
+ </component>
+ <!--
+ | Build Results
+ -->
+ <component>
+ <role>org.apache.geronimo.gbuild.agent.BuildAgent</role>
+ <role-hint>build-results</role-hint>
+ <implementation>org.apache.geronimo.gbuild.agent.BuildResultsContinuumAgent</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.geronimo.gbuild.agent.BuildResultsExtentionManager</role>
+ </requirement>
+ </requirements>
+ <configuration>
+ <coordinator-url>tcp://localhost:61616</coordinator-url>
+ <build-results-topic>BUILD.RESULTS</build-results-topic>
+ </configuration>
+ </component>
+
+ <component>
+ <role>org.apache.geronimo.gbuild.agent.BuildResultsExtention</role>
+ <role-hint>write-include-file</role-hint>
+ <implementation>org.apache.geronimo.gbuild.agent.WriteIncludeFileExtention</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.continuum.configuration.ConfigurationService</role>
+ </requirement>
+ </requirements>
+ <configuration>
+ <include-pattern>^include\.</include-pattern>
+ <file-extention>.properties</file-extention>
+ <results-directory>results</results-directory>
+ <use-header>project.name</use-header>
+ <date-format></date-format>
+ </configuration>
+ </component>
</components>
</component-set>
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)