From 1ee65f081aad22cda0a3f0c22124c7e3b7f3d932 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Fri, 10 Sep 2010 11:13:33 +0000 Subject: [PATCH] Make the cache objects used by the Action Tracking Service immutable git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@22382 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../action/ActionTrackingServiceImpl.java | 8 ++++++-- .../action/ActionTrackingServiceImplTest.java | 3 +++ .../service/cmr/action/ExecutionDetails.java | 19 +++++++++++-------- .../service/cmr/action/ExecutionSummary.java | 10 +++++----- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/source/java/org/alfresco/repo/action/ActionTrackingServiceImpl.java b/source/java/org/alfresco/repo/action/ActionTrackingServiceImpl.java index 0f60b84a2e..bdcd72088e 100644 --- a/source/java/org/alfresco/repo/action/ActionTrackingServiceImpl.java +++ b/source/java/org/alfresco/repo/action/ActionTrackingServiceImpl.java @@ -388,8 +388,12 @@ public class ActionTrackingServiceImpl implements ActionTrackingService return; } - // Since it is, update the cancelled flag on it - details.requestCancel(); + // Create a new copy of the details, this time with + // the cancel flag set + details = new ExecutionDetails( + details.getExecutionSummary(), details.getPersistedActionRef(), + details.getRunningOn(), details.getStartedAt(), true + ); // Save the flag to the cache executingActionsCache.put(actionKey, details); diff --git a/source/java/org/alfresco/repo/action/ActionTrackingServiceImplTest.java b/source/java/org/alfresco/repo/action/ActionTrackingServiceImplTest.java index bfc0171417..e4be4130dd 100644 --- a/source/java/org/alfresco/repo/action/ActionTrackingServiceImplTest.java +++ b/source/java/org/alfresco/repo/action/ActionTrackingServiceImplTest.java @@ -752,13 +752,16 @@ public class ActionTrackingServiceImplTest extends TestCase // Get the updated key, and check key3 = ActionTrackingServiceImpl.generateCacheKey(sleepAction3); + ExecutionSummary s3 = ActionTrackingServiceImpl.buildExecutionSummary(key3); assertEquals(false, actionTrackingService.isCancellationRequested(sleepAction3)); + assertEquals(false, actionTrackingService.getExecutionDetails(s3).isCancelRequested()); assertNotNull(executingActionsCache.get(key3)); actionTrackingService.requestActionCancellation(sleepAction3); assertEquals(true, actionTrackingService.isCancellationRequested(sleepAction3)); + assertEquals(true, actionTrackingService.getExecutionDetails(s3).isCancelRequested()); assertNotNull(executingActionsCache.get(key3)); // Have it finish sleeping, will have been cancelled diff --git a/source/java/org/alfresco/service/cmr/action/ExecutionDetails.java b/source/java/org/alfresco/service/cmr/action/ExecutionDetails.java index 80dc85ef51..85d65a920c 100644 --- a/source/java/org/alfresco/service/cmr/action/ExecutionDetails.java +++ b/source/java/org/alfresco/service/cmr/action/ExecutionDetails.java @@ -38,12 +38,18 @@ public class ExecutionDetails implements Serializable { * we don't need to also hold a 2nd copy of it */ private transient ExecutionSummary executionSummary; - private NodeRef persistedActionRef; - private String runningOn; - private Date startedAt; - private boolean cancelRequested; - public ExecutionDetails() {} + private final NodeRef persistedActionRef; + private final String runningOn; + private final Date startedAt; + private final boolean cancelRequested; + + public ExecutionDetails() { + persistedActionRef = null; + runningOn = null; + startedAt = null; + cancelRequested = false; + } public ExecutionDetails(ExecutionSummary executionSummary, NodeRef persistedActionRef, String runningOn, Date startedAt, @@ -109,7 +115,4 @@ public class ExecutionDetails implements Serializable { public boolean isCancelRequested() { return cancelRequested; } - public void requestCancel() { - cancelRequested = true; - } } \ No newline at end of file diff --git a/source/java/org/alfresco/service/cmr/action/ExecutionSummary.java b/source/java/org/alfresco/service/cmr/action/ExecutionSummary.java index ec6976f2e2..a2444dbd9f 100644 --- a/source/java/org/alfresco/service/cmr/action/ExecutionSummary.java +++ b/source/java/org/alfresco/service/cmr/action/ExecutionSummary.java @@ -28,12 +28,12 @@ package org.alfresco.service.cmr.action; * @author Nick Burch */ public class ExecutionSummary { - private String actionType; - private String actionId; - private int executionInstance; + private final String actionType; + private final String actionId; + private final int executionInstance; - public ExecutionSummary(String actionType, String actionId, - int executionInstance) { + public ExecutionSummary(final String actionType, final String actionId, + final int executionInstance) { this.actionType = actionType; this.actionId = actionId; this.executionInstance = executionInstance;