Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
814 mhunt 1
package com.erggroup.buildtool.daemon;
2
 
3
import com.erggroup.buildtool.daemon.BuildThread;
4
import com.erggroup.buildtool.ripple.MutableString;
5
import java.sql.SQLException;
6
import org.apache.log4j.Logger;
7
 
8
/**Slave Thread sub component
9
 */
10
public class SlaveThread
11
  extends BuildThread
12
{
13
 
14
  /**Logger
15
   * @attribute
16
   */
17
  private static final Logger mLogger = Logger.getLogger(SlaveThread.class);
18
 
19
  /**constructor
20
   */
21
  public SlaveThread(int rtag_id, int rcon_id, String gbebuildfilter)
22
  {
23
    mLogger.debug("SlaveThread " + rtag_id);
24
    mRtagId = rtag_id;
25
    mRconId = rcon_id;
26
    mGbebuildfilter = gbebuildfilter;
27
  }
28
 
29
  /**implements the sequence diagrams consume build files, allowed to proceed, check environment
30
   */
31
  public void run()
32
  {
33
    Integer id = new Integer(mRtagId);
34
    setName(id.toString());
35
    mLogger.debug("run");
36
    boolean exit = false;
37
    MutableString buildFileContent = new MutableString();
38
    boolean runLevelSet = false;
39
 
40
    while(!exit)
41
    {
42
      try
43
      {
44
        if ( Thread.currentThread().isInterrupted() )
45
        {
46
          mLogger.warn("run is interrupted");
47
          // unit test technique
48
          throw new ExitException();
49
        }
50
 
51
        if ( mGbebuildfilter.compareTo("unit test spawn thread") == 0)
52
        {
53
          throw new Exception();
54
        }
55
 
56
        // allowed to proceed
57
        if ( mGbebuildfilter.compareTo("unit test consume build files") != 0)
58
        {
59
          if ( !runLevelSet )
60
          {
61
            // IMPORTANT - this is done once before a Thread.sleep by design
62
            // In the case of an SQLException (signifying a database access issue)
63
            // avoid accessing the database immediately
64
            mRunLevel = RunLevel.IDLE;
65
            mRunLevel.persist(mReleaseManager, mRconId);
66
            runLevelSet = true;
67
          }
68
 
69
          mLogger.warn("run checking allowedToProceed");
70
          allowedToProceed();
71
          mLogger.info("run allowedToProceed returned");
72
        }
73
 
74
        // consume build files
75
        mLogger.warn("run consume build files");
76
        buildFileContent.value = "";
77
 
78
        do
79
        {
80
          mReleaseManager.queryRunLevel(mRconId, buildFileContent);
81
 
82
          if ( buildFileContent.value.compareTo("") == 0)
83
          {
84
            try
85
            {
86
              mLogger.warn("run sleep 3 secs waiting for build files");
87
              // to do, sleep for periodicMs
88
              Thread.sleep(3000);
89
              mLogger.info("run sleep returned");
90
            }
91
            catch (InterruptedException e)
92
            {
93
              mLogger.warn("run caught InterruptedException");
94
            }
95
          }
96
        } while ( buildFileContent.value.compareTo("") == 0);
97
 
98
        mLogger.info("run consumed build files");
99
 
100
        if ( mGbebuildfilter.compareTo("unit test consume build files") == 0 )
101
        {
102
          throw new ExitException();
103
        }
104
 
105
        // set CURRENT_BUILD_FILES to null
106
        mReleaseManager.clearBuildFile(mRconId);
107
        mRunLevel = RunLevel.ACTIVE;
108
 
109
        // check environment
110
        mLogger.warn("run checkEnvironment");
111
        checkEnvironment();
112
        mLogger.info("run checkEnvironment returned");
113
 
114
        mSleep = true;
115
        if ( buildFileContent.value.compareTo(mDummyBuildFileContent) != 0 )
116
        {
117
          // deliver change to product baseline
118
          mLogger.warn("run deliverChange");
119
          setViewUp(buildFileContent.value, false);
120
          deliverChange(null, null, false);
121
          tearViewDown();
122
          mLogger.info("run deliverChange returned");
123
          mSleep = false;
124
        }
125
 
126
      }
127
      catch( SQLException e )
128
      {
129
        // oracle connection issues        
130
         mLogger.warn("run oracle connection issues");
131
      }
132
      catch( ExitException e )
133
      {
134
        mLogger.fatal("run ExitException");
135
        exit = true;
136
      }
137
      catch( InterruptedException e )
138
      {
139
        mLogger.warn("run InterruptedException");
140
      }
141
      catch( Exception e )
142
      {
143
        mLogger.error("run indefinitePause");
144
        try
145
        {
146
          mReleaseManager.indefinitePause();
147
        }
148
        catch( Exception f )
149
        {
150
          mLogger.error("run indefinitePause failed");
151
        }
152
      }
153
    }
154
  }
155
 
156
  /**returns 'S'
157
   */
158
  protected char getMode()
159
  {
160
    mLogger.debug("getMode");
161
    return 'S';
162
  }
163
}