You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ct...@apache.org on 2009/03/17 04:14:32 UTC

svn commit: r755103 - in /continuum/trunk: continuum-api/src/main/java/org/apache/continuum/configuration/ continuum-api/src/main/java/org/apache/continuum/release/distributed/manager/ continuum-core/src/main/java/org/apache/continuum/release/distribut...

Author: ctan
Date: Tue Mar 17 03:14:30 2009
New Revision: 755103

URL: http://svn.apache.org/viewvc?rev=755103&view=rev
Log:
[CONTINUUM-2136] added actionErrors during release when build agent has been removed or disabled. Show error message in a new page.

Added:
    continuum/trunk/continuum-api/src/main/java/org/apache/continuum/configuration/BuildAgentConfigurationException.java
Modified:
    continuum/trunk/continuum-api/src/main/java/org/apache/continuum/release/distributed/manager/DistributedReleaseManager.java
    continuum/trunk/continuum-core/src/main/java/org/apache/continuum/release/distributed/manager/DefaultDistributedReleaseManager.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseCleanupAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseInProgressAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseProjectAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java
    continuum/trunk/continuum-webapp/src/main/resources/localization/Continuum.properties
    continuum/trunk/continuum-webapp/src/main/resources/struts.xml

Added: continuum/trunk/continuum-api/src/main/java/org/apache/continuum/configuration/BuildAgentConfigurationException.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-api/src/main/java/org/apache/continuum/configuration/BuildAgentConfigurationException.java?rev=755103&view=auto
==============================================================================
--- continuum/trunk/continuum-api/src/main/java/org/apache/continuum/configuration/BuildAgentConfigurationException.java (added)
+++ continuum/trunk/continuum-api/src/main/java/org/apache/continuum/configuration/BuildAgentConfigurationException.java Tue Mar 17 03:14:30 2009
@@ -0,0 +1,20 @@
+package org.apache.continuum.configuration;
+
+public class BuildAgentConfigurationException
+    extends Exception
+{
+    public BuildAgentConfigurationException( String message )
+    {
+        super( message );
+    }
+
+    public BuildAgentConfigurationException( Throwable cause )
+    {
+        super( cause );
+    }
+
+    public BuildAgentConfigurationException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+}

Modified: continuum/trunk/continuum-api/src/main/java/org/apache/continuum/release/distributed/manager/DistributedReleaseManager.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-api/src/main/java/org/apache/continuum/release/distributed/manager/DistributedReleaseManager.java?rev=755103&r1=755102&r2=755103&view=diff
==============================================================================
--- continuum/trunk/continuum-api/src/main/java/org/apache/continuum/release/distributed/manager/DistributedReleaseManager.java (original)
+++ continuum/trunk/continuum-api/src/main/java/org/apache/continuum/release/distributed/manager/DistributedReleaseManager.java Tue Mar 17 03:14:30 2009
@@ -23,6 +23,7 @@
 import java.util.Map;
 import java.util.Properties;
 
+import org.apache.continuum.configuration.BuildAgentConfigurationException;
 import org.apache.continuum.model.repository.LocalRepository;
 import org.apache.maven.continuum.model.project.Project;
 import org.apache.maven.continuum.release.ContinuumReleaseException;
@@ -31,40 +32,40 @@
 public interface DistributedReleaseManager
 {
     Map getReleasePluginParameters( int projectId, String pomFilename )
-        throws ContinuumReleaseException;
+        throws ContinuumReleaseException, BuildAgentConfigurationException;
 
     List<Map<String, String>> processProject( int projectId, String pomFilename, boolean autoVersionSubmodules )
-        throws ContinuumReleaseException;
+        throws ContinuumReleaseException, BuildAgentConfigurationException;
 
     String releasePrepare( Project project, Properties releaseProperties, Map<String, String> releaseVersion, 
                            Map<String, String> developmentVersion, Map<String, String> environments )
-        throws ContinuumReleaseException;
+        throws ContinuumReleaseException, BuildAgentConfigurationException;
 
     ReleaseResult getReleaseResult( String releaseId )
-        throws ContinuumReleaseException;
+        throws ContinuumReleaseException, BuildAgentConfigurationException;
 
     Map getListener( String releaseId )
-        throws ContinuumReleaseException;
+        throws ContinuumReleaseException, BuildAgentConfigurationException;
 
     void removeListener( String releaseId )
-        throws ContinuumReleaseException;
+        throws ContinuumReleaseException, BuildAgentConfigurationException;
 
     String getPreparedReleaseName( String releaseId )
         throws ContinuumReleaseException;
 
     void releasePerform( int projectId, String releaseId, String goals, String arguments, boolean useReleaseProfile, LocalRepository repository )
-        throws ContinuumReleaseException;
+        throws ContinuumReleaseException, BuildAgentConfigurationException;
 
     void releasePerformFromScm( int projectId, String goals, String arguments, boolean useReleaseProfile, LocalRepository repository, 
                                 String scmUrl, String scmUsername, String scmPassword, String scmTag, String scmTagBase, Map environments )
-        throws ContinuumReleaseException;
+        throws ContinuumReleaseException, BuildAgentConfigurationException;
 
     void releaseRollback( String releaseId, int projectId )
-        throws ContinuumReleaseException;
+        throws ContinuumReleaseException, BuildAgentConfigurationException;
 
     String releaseCleanup( String releaseId )
-        throws ContinuumReleaseException;
+        throws ContinuumReleaseException, BuildAgentConfigurationException;
 
     List<Map> getAllReleasesInProgress()
-        throws ContinuumReleaseException;
+        throws ContinuumReleaseException, BuildAgentConfigurationException;
 }
\ No newline at end of file

Modified: continuum/trunk/continuum-core/src/main/java/org/apache/continuum/release/distributed/manager/DefaultDistributedReleaseManager.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/continuum/release/distributed/manager/DefaultDistributedReleaseManager.java?rev=755103&r1=755102&r2=755103&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/main/java/org/apache/continuum/release/distributed/manager/DefaultDistributedReleaseManager.java (original)
+++ continuum/trunk/continuum-core/src/main/java/org/apache/continuum/release/distributed/manager/DefaultDistributedReleaseManager.java Tue Mar 17 03:14:30 2009
@@ -32,6 +32,8 @@
 import java.util.Map;
 import java.util.Properties;
 
+import org.apache.continuum.configuration.BuildAgentConfiguration;
+import org.apache.continuum.configuration.BuildAgentConfigurationException;
 import org.apache.continuum.dao.BuildResultDao;
 import org.apache.continuum.distributed.transport.slave.SlaveBuildAgentTransportClient;
 import org.apache.continuum.model.repository.LocalRepository;
@@ -40,6 +42,7 @@
 import org.apache.continuum.release.model.PreparedReleaseModel;
 import org.apache.continuum.release.model.io.xpp3.ContinuumPrepareReleasesModelXpp3Reader;
 import org.apache.continuum.release.model.io.xpp3.ContinuumPrepareReleasesModelXpp3Writer;
+import org.apache.maven.continuum.configuration.ConfigurationService;
 import org.apache.maven.continuum.installation.InstallationService;
 import org.apache.maven.continuum.model.project.BuildResult;
 import org.apache.maven.continuum.model.project.Project;
@@ -70,15 +73,25 @@
      */
     InstallationService installationService;
 
+    /**
+     * @plexus.requirement
+     */
+    ConfigurationService configurationService;
+
     private Map<String, Map> releasesInProgress;
 
     public Map getReleasePluginParameters( int projectId, String pomFilename )
-        throws ContinuumReleaseException
+        throws ContinuumReleaseException, BuildAgentConfigurationException
     {
         BuildResult buildResult = buildResultDao.getLatestBuildResultForProject( projectId );
 
         String buildAgentUrl = buildResult.getBuildUrl();
 
+        if ( !checkBuildAgent( buildAgentUrl ) )
+        {
+            throw new BuildAgentConfigurationException( buildAgentUrl );
+        }
+
         try
         {
             SlaveBuildAgentTransportClient client = new SlaveBuildAgentTransportClient( new URL( buildAgentUrl ) );
@@ -97,12 +110,17 @@
     }
 
     public List<Map<String, String>> processProject( int projectId, String pomFilename, boolean autoVersionSubmodules )
-        throws ContinuumReleaseException
+        throws ContinuumReleaseException, BuildAgentConfigurationException
     {
         BuildResult buildResult = buildResultDao.getLatestBuildResultForProject( projectId );
 
         String buildAgentUrl = buildResult.getBuildUrl();
 
+        if ( !checkBuildAgent( buildAgentUrl ) )
+        {
+            throw new BuildAgentConfigurationException( buildAgentUrl );
+        }
+
         try
         {
             SlaveBuildAgentTransportClient client = new SlaveBuildAgentTransportClient( new URL( buildAgentUrl ) );
@@ -122,15 +140,15 @@
 
     public String releasePrepare( Project project, Properties releaseProperties, Map<String, String> releaseVersion, 
                                   Map<String, String> developmentVersion, Map<String, String> environments )
-        throws ContinuumReleaseException
+        throws ContinuumReleaseException, BuildAgentConfigurationException
     {
         BuildResult buildResult = buildResultDao.getLatestBuildResultForProject( project.getId() );
 
         String buildAgentUrl = buildResult.getBuildUrl();
 
-        if ( StringUtils.isBlank( buildAgentUrl ) )
+        if ( !checkBuildAgent( buildAgentUrl ) )
         {
-            return null;
+            throw new BuildAgentConfigurationException( buildAgentUrl );
         }
 
         try
@@ -158,13 +176,13 @@
     }
 
     public ReleaseResult getReleaseResult( String releaseId )
-        throws ContinuumReleaseException
+        throws ContinuumReleaseException, BuildAgentConfigurationException
     {
         String buildAgentUrl = getBuildAgentUrl( releaseId );
 
-        if ( StringUtils.isBlank( buildAgentUrl ) )
+        if ( !checkBuildAgent( buildAgentUrl ) )
         {
-            return null;
+            throw new BuildAgentConfigurationException( buildAgentUrl );
         }
 
         try
@@ -193,13 +211,13 @@
     }
 
     public Map getListener( String releaseId )
-        throws ContinuumReleaseException
+        throws ContinuumReleaseException, BuildAgentConfigurationException
     {
         String buildAgentUrl = getBuildAgentUrl( releaseId );
 
-        if ( StringUtils.isBlank( buildAgentUrl ) )
+        if ( !checkBuildAgent( buildAgentUrl ) )
         {
-            return null;
+            throw new BuildAgentConfigurationException( buildAgentUrl );
         }
 
         try
@@ -220,13 +238,13 @@
     }
 
     public void removeListener( String releaseId )
-        throws ContinuumReleaseException
+        throws ContinuumReleaseException, BuildAgentConfigurationException
     {
         String buildAgentUrl = getBuildAgentUrl( releaseId );
 
-        if ( StringUtils.isBlank( buildAgentUrl ) )
+        if ( !checkBuildAgent( buildAgentUrl ) )
         {
-            return;
+            throw new BuildAgentConfigurationException( buildAgentUrl );
         }
 
         try
@@ -276,14 +294,13 @@
 
     public void releasePerform( int projectId, String releaseId, String goals, String arguments, boolean useReleaseProfile, 
                                 LocalRepository repository )
-        throws ContinuumReleaseException
+        throws ContinuumReleaseException, BuildAgentConfigurationException
     {
         String buildAgentUrl = getBuildAgentUrl( releaseId );
 
-        if ( StringUtils.isBlank( buildAgentUrl ) )
+        if ( !checkBuildAgent( buildAgentUrl ) )
         {
-            log.error( "Unable to perform release because no build agent found for " + releaseId );
-            return;
+            throw new BuildAgentConfigurationException( buildAgentUrl );
         }
 
         if ( goals == null )
@@ -326,18 +343,17 @@
 
     public void releasePerformFromScm( int projectId, String goals, String arguments, boolean useReleaseProfile, LocalRepository repository, 
                                        String scmUrl, String scmUsername, String scmPassword, String scmTag, String scmTagBase, Map environments )
-        throws ContinuumReleaseException
+        throws ContinuumReleaseException, BuildAgentConfigurationException
     {
         BuildResult buildResult = buildResultDao.getLatestBuildResultForProject( projectId );
 
         String buildAgentUrl = buildResult.getBuildUrl();
 
-        if ( StringUtils.isBlank( buildAgentUrl ) )
+        if ( !checkBuildAgent( buildAgentUrl ) )
         {
-            log.error( "Unable to perform release because no build agent found" );
-            return;
+            throw new BuildAgentConfigurationException( buildAgentUrl );
         }
-        
+
         if ( goals == null )
         {
             goals = "";
@@ -378,14 +394,13 @@
     }
 
     public void releaseRollback( String releaseId, int projectId )
-        throws ContinuumReleaseException
+        throws ContinuumReleaseException, BuildAgentConfigurationException
     {
         String buildAgentUrl = getBuildAgentUrl( releaseId );
 
-        if ( StringUtils.isBlank( buildAgentUrl ) )
+        if ( !checkBuildAgent( buildAgentUrl ) )
         {
-            log.info( "Unable to rollback release " + releaseId + " because no build agent found" );
-            return;
+            throw new BuildAgentConfigurationException( buildAgentUrl );
         }
 
         try
@@ -406,14 +421,13 @@
     }
 
     public String releaseCleanup( String releaseId )
-        throws ContinuumReleaseException
+        throws ContinuumReleaseException, BuildAgentConfigurationException
     {
         String buildAgentUrl = getBuildAgentUrl( releaseId );
 
-        if ( StringUtils.isBlank( buildAgentUrl ) )
+        if ( !checkBuildAgent( buildAgentUrl ) )
         {
-            log.info( "Unable to cleanup release for " + releaseId );
-            return null;
+            throw new BuildAgentConfigurationException( buildAgentUrl );
         }
 
         try
@@ -437,7 +451,7 @@
     }
 
     public List<Map> getAllReleasesInProgress()
-        throws ContinuumReleaseException
+        throws ContinuumReleaseException, BuildAgentConfigurationException
     {
         List<Map> releases = new ArrayList<Map>();
         Map<String, Map> releasesMap = new HashMap<String, Map>();
@@ -450,6 +464,11 @@
 
                 if ( StringUtils.isNotBlank( buildAgentUrl ) )
                 {
+                    if ( !checkBuildAgent( buildAgentUrl ) )
+                    {
+                        throw new BuildAgentConfigurationException( buildAgentUrl );
+                    }
+
                     try
                     {
                         SlaveBuildAgentTransportClient client = new SlaveBuildAgentTransportClient( new URL( buildAgentUrl ) );
@@ -699,4 +718,17 @@
         return new File( System.getProperty( "appserver.base" ) + File.separator + "conf" + File.separator
                          + PREPARED_RELEASES_FILENAME );
     }
+
+    private boolean checkBuildAgent( String buildAgentUrl )
+    {
+        BuildAgentConfiguration buildAgent = configurationService.getBuildAgent( buildAgentUrl );
+
+        if ( buildAgent != null && buildAgent.isEnabled() )
+        {
+            return true;
+        }
+
+        log.info( "Build agent: " + buildAgentUrl + "is either disabled or removed" );
+        return false;
+    }
 }
\ No newline at end of file

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseCleanupAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseCleanupAction.java?rev=755103&r1=755102&r2=755103&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseCleanupAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseCleanupAction.java Tue Mar 17 03:14:30 2009
@@ -19,6 +19,10 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.continuum.configuration.BuildAgentConfigurationException;
 import org.apache.continuum.release.distributed.manager.DistributedReleaseManager;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.release.ContinuumReleaseManager;
@@ -57,15 +61,26 @@
         {
             DistributedReleaseManager releaseManager = getContinuum().getDistributedReleaseManager();
 
-            String goal = releaseManager.releaseCleanup( releaseId );
-
-            if ( StringUtils.isNotBlank( goal ) )
+            try
             {
-                return goal;
+                String goal = releaseManager.releaseCleanup( releaseId );
+    
+                if ( StringUtils.isNotBlank( goal ) )
+                {
+                    return goal;
+                }
+                else
+                {
+                    throw new Exception( "No listener to cleanup for id " + releaseId );
+                }
             }
-            else
+            catch ( BuildAgentConfigurationException e )
             {
-                throw new Exception( "No listener to cleanup for id " + releaseId );
+                List<String> args = new ArrayList<String>();
+                args.add( e.getMessage() );
+
+                addActionError( getText( "releaseCleanup.error", args ) );
+                return ERROR;
             }
         }
         else

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseInProgressAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseInProgressAction.java?rev=755103&r1=755102&r2=755103&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseInProgressAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseInProgressAction.java Tue Mar 17 03:14:30 2009
@@ -23,8 +23,11 @@
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
+import org.apache.continuum.configuration.BuildAgentConfigurationException;
 import org.apache.continuum.model.release.ContinuumReleaseResult;
 import org.apache.continuum.release.distributed.DistributedReleaseUtil;
 import org.apache.continuum.release.distributed.manager.DistributedReleaseManager;
@@ -80,7 +83,20 @@
         {
             DistributedReleaseManager releaseManager = getContinuum().getDistributedReleaseManager();
 
-            Map map = releaseManager.getListener( releaseId );
+            Map map; 
+
+            try
+            {
+                map = releaseManager.getListener( releaseId );
+            }
+            catch ( BuildAgentConfigurationException e )
+            {
+                List<String> args = new ArrayList<String>();
+                args.add( e.getMessage() );
+
+                addActionError( getText( "releaseInProgress.error", args ) );
+                return ERROR;
+            }
 
             if ( map != null && !map.isEmpty() )
             {
@@ -184,31 +200,42 @@
         {
             DistributedReleaseManager releaseManager = getContinuum().getDistributedReleaseManager();
 
-            Map map = releaseManager.getListener( releaseId );
-
-            if ( map != null && !map.isEmpty() )
+            try
             {
-                int state = DistributedReleaseUtil.getReleaseState( map );
-
-                listenerSummary.setPhases( DistributedReleaseUtil.getReleasePhases( map ) );
-                listenerSummary.setCompletedPhases( DistributedReleaseUtil.getCompletedReleasePhases( map ) );
-                listenerSummary.setInProgress( DistributedReleaseUtil.getReleaseInProgress( map ) );
-                listenerSummary.setError( DistributedReleaseUtil.getReleaseError( map ) );
-
-                if ( state == ContinuumReleaseManagerListener.FINISHED )
+                Map map = releaseManager.getListener( releaseId );
+    
+                if ( map != null && !map.isEmpty() )
                 {
-                    result = releaseManager.getReleaseResult( releaseId );
+                    int state = DistributedReleaseUtil.getReleaseState( map );
     
-                    return SUCCESS;
+                    listenerSummary.setPhases( DistributedReleaseUtil.getReleasePhases( map ) );
+                    listenerSummary.setCompletedPhases( DistributedReleaseUtil.getCompletedReleasePhases( map ) );
+                    listenerSummary.setInProgress( DistributedReleaseUtil.getReleaseInProgress( map ) );
+                    listenerSummary.setError( DistributedReleaseUtil.getReleaseError( map ) );
+    
+                    if ( state == ContinuumReleaseManagerListener.FINISHED )
+                    {
+                        result = releaseManager.getReleaseResult( releaseId );
+        
+                        return SUCCESS;
+                    }
+                    else
+                    {
+                        throw new Exception( "The release operation with id " + releaseId + "has not finished yet." );
+                    }
                 }
                 else
                 {
-                    throw new Exception( "The release operation with id " + releaseId + "has not finished yet." );
+                    throw new Exception( "There is no finished release operation with id " + releaseId );
                 }
             }
-            else
+            catch ( BuildAgentConfigurationException e )
             {
-                throw new Exception( "There is no finished release operation with id " + releaseId );
+                List<String> args = new ArrayList<String>();
+                args.add( e.getMessage() );
+                
+                addActionError( getText( "releaseViewResult.error", args ) );
+                return ERROR;
             }
         }
         else

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java?rev=755103&r1=755102&r2=755103&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java Tue Mar 17 03:14:30 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.continuum.configuration.BuildAgentConfigurationException;
 import org.apache.continuum.model.repository.LocalRepository;
 import org.apache.continuum.release.config.ContinuumReleaseDescriptor;
 import org.apache.continuum.release.distributed.DistributedReleaseUtil;
@@ -40,6 +41,7 @@
 
 import java.io.File;
 import java.io.FileReader;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -113,7 +115,18 @@
             return REQUIRES_AUTHORIZATION;
         }
 
-        init();
+        try
+        {
+            init();
+        }
+        catch ( BuildAgentConfigurationException e )
+        {
+            List<String> args = new ArrayList<String>();
+            args.add( e.getMessage() );
+
+            addActionError( getText( "releasePerform.input.error", args ) ) ;
+            return ERROR;
+        }
 
         populateFromProject();
 
@@ -136,7 +149,19 @@
             return REQUIRES_AUTHORIZATION;
         }
 
-        init();
+        try
+        {
+            init();
+        }
+        catch ( BuildAgentConfigurationException e )
+        {
+            List<String> args = new ArrayList<String>();
+            args.add( e.getMessage() );
+
+            addActionError( getText( "releasePerform.input.error", args ) ) ;
+            return ERROR;
+        }
+
 
         return SUCCESS;
     }
@@ -208,7 +233,18 @@
         {
             DistributedReleaseManager releaseManager = getContinuum().getDistributedReleaseManager();
 
-            releaseManager.releasePerform( projectId, releaseId, goals, arguments, useReleaseProfile, repository );
+            try
+            {
+                releaseManager.releasePerform( projectId, releaseId, goals, arguments, useReleaseProfile, repository );
+            }
+            catch ( BuildAgentConfigurationException e )
+            {
+                List<String> args = new ArrayList<String>();
+                args.add( e.getMessage() );
+
+                addActionError( getText( "releasePerform.release.error", args ) );
+                return ERROR;
+            }
         }
         else
         {
@@ -246,8 +282,19 @@
                 environments = getEnvironments( profile );
             }
 
-            releaseManager.releasePerformFromScm( projectId, goals, arguments, useReleaseProfile, repository, scmUrl, 
-                                                  scmUsername, scmPassword, scmTag, scmTagBase, environments );
+            try
+            {
+                releaseManager.releasePerformFromScm( projectId, goals, arguments, useReleaseProfile, repository, scmUrl, 
+                                                      scmUsername, scmPassword, scmTag, scmTagBase, environments );
+            }
+            catch ( BuildAgentConfigurationException e )
+            {
+                List<String> args = new ArrayList<String>();
+                args.add( e.getMessage() );
+
+                addActionError( getText( "releasePerform.release.error", args ) );
+                return ERROR;
+            }
 
             return SUCCESS;
         }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java?rev=755103&r1=755102&r2=755103&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java Tue Mar 17 03:14:30 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.continuum.configuration.BuildAgentConfigurationException;
 import org.apache.continuum.release.distributed.DistributedReleaseUtil;
 import org.apache.continuum.release.distributed.manager.DistributedReleaseManager;
 import org.apache.continuum.web.action.AbstractReleaseAction;
@@ -164,9 +165,20 @@
         {
             DistributedReleaseManager distributedReleaseManager = getContinuum().getDistributedReleaseManager();
 
-            getReleasePluginParameters( distributedReleaseManager.getReleasePluginParameters( projectId, "pom.xml" ) );
+            try
+            {
+                getReleasePluginParameters( distributedReleaseManager.getReleasePluginParameters( projectId, "pom.xml" ) );
+
+                projects = distributedReleaseManager.processProject( projectId, "pom.xml", autoVersionSubmodules );
+            }
+            catch ( BuildAgentConfigurationException e )
+            {
+                List<String> args = new ArrayList<String>();
+                args.add( e.getMessage() );
 
-            projects = distributedReleaseManager.processProject( projectId, "pom.xml", autoVersionSubmodules );
+                addActionError( getText( "releasePrepare.input.error", args ) );
+                return ERROR;
+            }
         }
         else
         {
@@ -286,8 +298,25 @@
         {
             DistributedReleaseManager distributedReleaseManager = getContinuum().getDistributedReleaseManager();
 
-            releaseId = distributedReleaseManager.releasePrepare( project, getReleaseProperties(), getRelVersionMap(), getDevVersionMap(), 
-                                                                  environments );
+            try
+            {
+                releaseId = distributedReleaseManager.releasePrepare( project, getReleaseProperties(), getRelVersionMap(), getDevVersionMap(), 
+                                                                      environments );
+
+                if ( releaseId == null )
+                {
+                    addActionError( "" );
+                    return ERROR;
+                }
+            }
+            catch ( BuildAgentConfigurationException e )
+            {
+                List<String> args = new ArrayList<String>();
+                args.add( e.getMessage() );
+
+                addActionError( getText( "releasePrepare.release.error", args ) );
+                return ERROR;
+            }
         }
         else
         {
@@ -332,7 +361,16 @@
         if ( getContinuum().getConfiguration().isDistributedBuildEnabled() )
         {
             DistributedReleaseManager distributedReleaseManager = getContinuum().getDistributedReleaseManager();
-            result = distributedReleaseManager.getReleaseResult( releaseId );
+
+            try
+            {
+                result = distributedReleaseManager.getReleaseResult( releaseId );
+            }
+            catch ( BuildAgentConfigurationException e )
+            {
+                addActionError( "release" );
+                return "viewResultError";
+            }
         }
         else
         {
@@ -361,8 +399,17 @@
         if ( getContinuum().getConfiguration().isDistributedBuildEnabled() )
         {
             DistributedReleaseManager distributedReleaseManager = getContinuum().getDistributedReleaseManager();
-            Map listenerMap  = distributedReleaseManager.getListener( releaseId );
-
+            Map listenerMap;
+            try
+            {
+                listenerMap  = distributedReleaseManager.getListener( releaseId );
+            }
+            catch ( BuildAgentConfigurationException e )
+            {
+                addActionError( "" );
+                return "";
+            }
+                
             if ( listenerMap != null && !listenerMap.isEmpty() )
             {
                 int state = DistributedReleaseUtil.getReleaseState( listenerMap );

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseProjectAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseProjectAction.java?rev=755103&r1=755102&r2=755103&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseProjectAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseProjectAction.java Tue Mar 17 03:14:30 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.continuum.configuration.BuildAgentConfigurationException;
 import org.apache.continuum.release.distributed.manager.DistributedReleaseManager;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.continuum.ContinuumException;
@@ -28,6 +29,7 @@
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.codehaus.plexus.util.StringUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java?rev=755103&r1=755102&r2=755103&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java Tue Mar 17 03:14:30 2009
@@ -19,6 +19,10 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.continuum.configuration.BuildAgentConfigurationException;
 import org.apache.continuum.release.distributed.manager.DistributedReleaseManager;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.utils.WorkingDirectoryService;
@@ -66,7 +70,18 @@
         {
             DistributedReleaseManager releaseManager = getContinuum().getDistributedReleaseManager();
 
-            releaseManager.releaseRollback( releaseId, projectId );
+            try
+            {
+                releaseManager.releaseRollback( releaseId, projectId );
+            }
+            catch ( BuildAgentConfigurationException e )
+            {
+                List<String> args = new ArrayList<String>();
+                args.add( e.getMessage() );
+
+                addActionError( getText( "releaseRollback.error", args ) );
+                return ERROR;
+            }
         }
         else
         {

Modified: continuum/trunk/continuum-webapp/src/main/resources/localization/Continuum.properties
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/resources/localization/Continuum.properties?rev=755103&r1=755102&r2=755103&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/resources/localization/Continuum.properties (original)
+++ continuum/trunk/continuum-webapp/src/main/resources/localization/Continuum.properties Tue Mar 17 03:14:30 2009
@@ -697,6 +697,13 @@
 releasePerformFromScm.goals.label=Maven Arguments
 releasePerformFromScm.useReleaseProfile.label=Use Release Profile
 releasePerformFromScm.buildEnvironment.label=Build Environment
+releasePrepare.input.error = Unable to get release plugin parameters and process project because build agent {0} was either removed or disabled
+releasePrepare.release.error = Unable to prepare release because build agent {0} was either removed or disabled
+releaseInProgress.error = Unable to view release in progress because build agent {0} was either removed or disabled
+releaseViewResult.error = Unable to view release result because build agent {0} was either removed or disabled
+releaseCleanup.error = Unable to cleanup release because build agent {0} was either removed or disabled
+releasePerform.input.error = Unable to get release plugin parameters because build agent {0} was either removed or disabled
+releasePerform.release.error Unable to perform release because build agent {0} was either removed or disabled
 
 # ----------------------------------------------------------------------
 # Page: User

Modified: continuum/trunk/continuum-webapp/src/main/resources/struts.xml
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/resources/struts.xml?rev=755103&r1=755102&r2=755103&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/resources/struts.xml (original)
+++ continuum/trunk/continuum-webapp/src/main/resources/struts.xml Tue Mar 17 03:14:30 2009
@@ -492,6 +492,7 @@
 
     <action name="releasePrepareInput" class="releasePrepare" method="input">
       <result name="success">/WEB-INF/jsp/releasePrepare.jsp</result>
+      <result name="error">/WEB-INF/jsp/error/releaseError.jsp</result>
     </action>
 
     <action name="releasePrepare" class="releasePrepare">
@@ -502,10 +503,12 @@
         <param name="projectId">${projectId}</param>
         <param name="releaseGoal">prepare</param>
       </result>
+      <result name="error">/WEB-INF/jsp/error/releaseError.jsp</result>
     </action>
 
     <action name="releasePerformInput" class="releasePerform" method="input">
       <result name="success">/WEB-INF/jsp/releasePerform.jsp</result>
+      <result name="error">/WEB-INF/jsp/error/releaseError.jsp</result>
     </action>
 
     <action name="releasePerform" class="releasePerform">
@@ -516,10 +519,12 @@
         <param name="projectId">${projectId}</param>
         <param name="releaseGoal">perform</param>
       </result>
+      <result name="error">/WEB-INF/jsp/error/releaseError.jsp</result>
     </action>
 
     <action name="releasePerformFromScmInput" class="releasePerform" method="inputFromScm">
       <result name="success">/WEB-INF/jsp/releasePerformFromScm.jsp</result>
+      <result name="error">/WEB-INF/jsp/error/releaseError.jsp</result>
     </action>
 
     <action name="releasePerformFromScm" class="releasePerform" method="executeFromScm">
@@ -530,12 +535,14 @@
         <param name="releaseId">${releaseId}</param>
         <param name="releaseGoal">perform</param>
       </result>
+      <result name="error">/WEB-INF/jsp/error/releaseError.jsp</result>
     </action>
 
     <action name="releaseInProgress" class="releaseInProgress">
       <result name="initialized">/WEB-INF/jsp/releaseInitialized.jsp</result>
       <result name="inProgress">/WEB-INF/jsp/releaseInProgress.jsp</result>
       <result name="success">/WEB-INF/jsp/releaseFinished.jsp</result>
+      <result name="error">/WEB-INF/jsp/error/releaseError.jsp</result>
     </action>
 
     <action name="releaseRollbackWarning" class="releaseRollback" method="warn">
@@ -548,6 +555,7 @@
         <param name="projectId">${projectId}</param>
         <param name="releaseId">${releaseId}</param>
       </result>
+      <result name="error">/WEB-INF/jsp/error/releaseError.jsp</result>
     </action>
 
     <action name="releaseCleanup" class="releaseCleanup">
@@ -556,10 +564,12 @@
         <param name="actionName">projectGroupSummary</param>
         <param name="projectGroupId">${projectGroupId}</param>
       </result>
+      <result name="error">/WEB-INF/jsp/error/releaseError.jsp</result>
     </action>
 
     <action name="releaseViewResult" class="releaseInProgress" method="viewResult">
       <result name="success">/WEB-INF/jsp/releaseViewResult.jsp</result>
+      <result name="error">/WEB-INF/jsp/error/releaseError.jsp</result>
     </action>
 
     <action name="viewReleaseResult" class="releaseResult" method="viewResult">