Blame | Last modification | View Log | RSS feed
package com.erggroup.buildtool.daemon;import com.erggroup.buildtool.daemon.BuildThread;import com.erggroup.buildtool.ripple.MutableString;import java.sql.SQLException;import org.apache.log4j.Logger;/**Slave Thread sub component*/public class SlaveThreadextends BuildThread{/**Logger* @attribute*/private static final Logger mLogger = Logger.getLogger(SlaveThread.class);/**constructor*/public SlaveThread(int rtag_id, int rcon_id, String gbebuildfilter){mLogger.debug("SlaveThread " + rtag_id);mRtagId = rtag_id;mRconId = rcon_id;mGbebuildfilter = gbebuildfilter;}/**implements the sequence diagrams consume build files, allowed to proceed, check environment*/public void run(){Integer id = new Integer(mRtagId);setName(id.toString());mLogger.debug("run");boolean exit = false;MutableString buildFileContent = new MutableString();boolean runLevelSet = false;while(!exit){try{if ( Thread.currentThread().isInterrupted() ){mLogger.warn("run is interrupted");// unit test techniquethrow new ExitException();}if ( mGbebuildfilter.compareTo("unit test spawn thread") == 0){throw new Exception();}// allowed to proceedif ( mGbebuildfilter.compareTo("unit test consume build files") != 0){if ( !runLevelSet ){// IMPORTANT - this is done once before a Thread.sleep by design// In the case of an SQLException (signifying a database access issue)// avoid accessing the database immediatelymRunLevel = RunLevel.IDLE;mRunLevel.persist(mReleaseManager, mRconId);runLevelSet = true;}mLogger.warn("run checking allowedToProceed");allowedToProceed();mLogger.info("run allowedToProceed returned");}// consume build filesmLogger.warn("run consume build files");buildFileContent.value = "";do{mReleaseManager.queryRunLevel(mRconId, buildFileContent);if ( buildFileContent.value.compareTo("") == 0){try{mLogger.warn("run sleep 3 secs waiting for build files");// to do, sleep for periodicMsThread.sleep(3000);mLogger.info("run sleep returned");}catch (InterruptedException e){mLogger.warn("run caught InterruptedException");}}} while ( buildFileContent.value.compareTo("") == 0);mLogger.info("run consumed build files");if ( mGbebuildfilter.compareTo("unit test consume build files") == 0 ){throw new ExitException();}// set CURRENT_BUILD_FILES to nullmReleaseManager.clearBuildFile(mRconId);mRunLevel = RunLevel.ACTIVE;// check environmentmLogger.warn("run checkEnvironment");checkEnvironment();mLogger.info("run checkEnvironment returned");mSleep = true;if ( buildFileContent.value.compareTo(mDummyBuildFileContent) != 0 ){// deliver change to product baselinemLogger.warn("run deliverChange");setViewUp(buildFileContent.value, false);deliverChange(null, null, false);tearViewDown();mLogger.info("run deliverChange returned");mSleep = false;}}catch( SQLException e ){// oracle connection issuesmLogger.warn("run oracle connection issues");}catch( ExitException e ){mLogger.fatal("run ExitException");exit = true;}catch( InterruptedException e ){mLogger.warn("run InterruptedException");}catch( Exception e ){mLogger.error("run indefinitePause");try{mReleaseManager.indefinitePause();}catch( Exception f ){mLogger.error("run indefinitePause failed");}}}}/**returns 'S'*/protected char getMode(){mLogger.debug("getMode");return 'S';}}