소스 검색

Give derived class chance to wait for service activity to end

before progressing to COMPLETED state and issue state change
notification to portal.

Also make state change report to be a single line for ease
of grep'ing log file.
tags/1.0.5
ymlam 4 년 전
부모
커밋
fe430891ac
1개의 변경된 파일20개의 추가작업 그리고 22개의 파일을 삭제
  1. +20
    -22
      src/main/java/altk/comm/engine/Broadcast.java

+ 20
- 22
src/main/java/altk/comm/engine/Broadcast.java 파일 보기

@@ -829,16 +829,15 @@ public abstract class Broadcast
+ "' recipient_count='" + recipientList.size() + "'");
if (launchRecordId != null)
{
statusBf.append(" launch_record_id='" + launchRecordId + "'");
statusBf.append(" launch_record_id='" + launchRecordId + "'>");
}
statusBf.append(">\r\n");
statusBf.append("<current_time>" + System.currentTimeMillis() + "</current_time>\r\n");
statusBf.append("<current_time>" + System.currentTimeMillis() + "</current_time>");
if (serviceStartTime > 0) statusBf.append("<service_start_time>" + serviceStartTime
+ "</service_start_time>\r\n");
+ "</service_start_time>");
if (serviceEndTime > 0) statusBf.append("<service_end_time>" + serviceEndTime
+ "</service_end_time>\r\n");
+ "</service_end_time>");
statusBf.append("<state>" + state + "</state><state_change_time>" + changeStateTime
+ "</state_change_time>\r\n");
+ "</state_change_time>");
if (state == BroadcastState.PAUSED
|| state == BroadcastState.ABORTED)
{
@@ -846,7 +845,7 @@ public abstract class Broadcast
{
// Escaping '&' and '<' in haltReason before enclosing it in <reason> tag
statusBf.append("<reason>" + Util.xmlEscape(haltReason)
+ "</reason>\r\n");
+ "</reason>");
}
if (stateErrorText != null)
{
@@ -860,8 +859,8 @@ public abstract class Broadcast
"' ready='" + getPendingJobCount() + "'");
statusBf.append(" active='" + getActiveJobCount() + "'");
statusBf.append("></job_summary>");
statusBf.append("\r\n" + additionalStatusXML() + "\r\n");
statusBf.append("</" + topLevelTag + ">\r\n");
statusBf.append(additionalStatusXML());
statusBf.append("</" + topLevelTag + ">");
String statusReport = statusBf.toString();
return statusReport;
}
@@ -1030,15 +1029,23 @@ public abstract class Broadcast
myLogger.error("Caught exception while waiting for a Service thread to terminate:" + e);
}
}
waitForEndOfService();
setState(BroadcastState.COMPLETED);
}
destroyResources();
postback.wrapup();
postback = null;
//setState(BroadcastState.ALLDONE);
myLogger.info("Broadcast " + getId() + " terminated");
}
/**
* Derived class should wait for end of service before returning.
* At this point all service threads have already ended. If the derived
* class has other threads still taking part in providing service, wait for
* them to terminate.
*/
protected void waitForEndOfService() {}

/**
* Derived class destroy resources needed for providing service
*/
@@ -1174,13 +1181,12 @@ public abstract class Broadcast
*/
protected void postJobStatus(Job job, long rescheduleTimeMS)
{
//logJobCount("Entering postJobStatus");
if (job.jobStatus == JobStatus.SUCCESS) successCount++;
if (postback != null)
{
JobReport report = mkJobReport();
report.initBase(job, broadcastId, launchRecordId, activityRecordIdParamName, jobReportRootNodeName);
report.init(job);
if (job.jobStatus == JobStatus.SUCCESS) successCount++;
postback.queueReport(report.toString());
}
@@ -1299,17 +1305,9 @@ public abstract class Broadcast

public PostbackThreadActionOnEmpty getPostbackThreadActionOnEmpty() {
//logJobCount("getPostbackThreadActionOnEmpty");
if (state==BroadcastState.CANCELED || state==BroadcastState.ALLDONE) return PostbackThreadActionOnEmpty.STOP;
if (state.isFinal) return PostbackThreadActionOnEmpty.STOP;
if (setState(BroadcastState.ALLDONE).stateChangeStatus == StateChangeStatus.SUCCESS) return PostbackThreadActionOnEmpty.CONTINUE;
return PostbackThreadActionOnEmpty.WAIT;
}
public boolean postbackThreadsShouldStop() {
if (state==BroadcastState.CANCELED || state==BroadcastState.ALLDONE) return true;
boolean shouldContinue = state==BroadcastState.COMPLETED && setState(BroadcastState.ALLDONE).stateChangeStatus == StateChangeStatus.SUCCESS;
return !shouldContinue;
//boolean doStop = setState(BroadcastState.ALLDONE).stateChangeStatus != StateChangeStatus.SUCCESS;
//return doStop;
}

}

불러오는 중...
취소
저장