diff --git a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/callactivity/CallActivityTest.java b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/callactivity/CallActivityTest.java index c5550cd98fc916877ec7e2b35cf89dc5ecf5b317..04db9daef65dc6fa250b38bc1bb9f1cb75cbdd28 100644 --- a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/callactivity/CallActivityTest.java +++ b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/callactivity/CallActivityTest.java @@ -32,12 +32,12 @@ public class CallActivityTest extends ProcessEngineTestCase { // After the process has started, the 'verify credit history' task should be active runtimeService.startProcessInstanceByKey("orderProcess"); TaskQuery taskQuery = taskService.createTaskQuery(); - Task verifyCreditTask = taskQuery.singleResult(); + Task verifyCreditTask = taskQuery.listPage(); assertEquals("Verify credit history", verifyCreditTask.getName()); // Completing the task with approval, will end the subprocess and continue the original process taskService.complete(verifyCreditTask.getId(), CollectionUtil.singletonMap("creditApproved", true)); - Task prepareAndShipTask = taskQuery.singleResult(); + Task prepareAndShipTask = taskQuery.listPage(); assertEquals("Prepare and Ship", prepareAndShipTask.getName()); } } diff --git a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/event/timer/BoundaryTimerEventTest.java b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/event/timer/BoundaryTimerEventTest.java index 8b8fa1ffccc684bc0bca48ffa8b6ccc942fd6d64..1cd203fdf7bbbddecf9bf4322f76a89ab59b8bbf 100644 --- a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/event/timer/BoundaryTimerEventTest.java +++ b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/event/timer/BoundaryTimerEventTest.java @@ -34,7 +34,7 @@ public class BoundaryTimerEventTest extends ProcessEngineTestCase { ProcessInstance pi = runtimeService.startProcessInstanceByKey("interruptingBoundaryTimer"); // There should be one task, with a timer : first line support - Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); + Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).listPage(); assertEquals("First line support", task.getName()); // Set clock to the future such that the timer can fire @@ -42,7 +42,7 @@ public class BoundaryTimerEventTest extends ProcessEngineTestCase { waitForJobExecutorToProcessAllJobs(10000L, 250L); // The timer has fired, and the second task (secondlinesupport) now exists - task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); + task = taskService.createTaskQuery().processInstanceId(pi.getId()).listPage(); assertEquals("Second line support", task.getName()); } diff --git a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/expression/UelExpressionTest.java b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/expression/UelExpressionTest.java index 59d4539def54d3f8722cf51f757074ddfad8317b..955203f1c9501821f8257d4f88c1db368d285951 100644 --- a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/expression/UelExpressionTest.java +++ b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/expression/UelExpressionTest.java @@ -31,14 +31,14 @@ public class UelExpressionTest extends ProcessEngineTestCase { UelExpressionTestOrder order = new UelExpressionTestOrder(150); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("uelExpressions", CollectionUtil.singletonMap("order", order)); - Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); + Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).listPage(); assertEquals("Standard service", task.getName()); // While an order of 300, gives us a premium service (goes through an UEL method expression) order = new UelExpressionTestOrder(300); processInstance = runtimeService.startProcessInstanceByKey("uelExpressions", CollectionUtil.singletonMap("order", order)); - task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); + task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).listPage(); assertEquals("Premium service", task.getName()); } diff --git a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/gateway/ExclusiveGatewayTest.java b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/gateway/ExclusiveGatewayTest.java index cbda3f1eb5277e31f75f82420691f31d9a7a1068..a1b8534b70444a7d93ec2274bca435600bc28490 100644 --- a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/gateway/ExclusiveGatewayTest.java +++ b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/gateway/ExclusiveGatewayTest.java @@ -41,19 +41,19 @@ public class ExclusiveGatewayTest extends ProcessEngineTestCase { // Test with input == 1 variables.put("input", 1); ProcessInstance pi = runtimeService.startProcessInstanceByKey("exclusiveGateway", variables); - Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); + Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).listPage(); assertEquals("Send e-mail for more information", task.getName()); // Test with input == 2 variables.put("input", 2); pi = runtimeService.startProcessInstanceByKey("exclusiveGateway", variables); - task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); + task = taskService.createTaskQuery().processInstanceId(pi.getId()).listPage(); assertEquals("Check account balance", task.getName()); // Test with input == 3 variables.put("input", 3); pi = runtimeService.startProcessInstanceByKey("exclusiveGateway", variables); - task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); + task = taskService.createTaskQuery().processInstanceId(pi.getId()).listPage(); assertEquals("Call customer", task.getName()); // Test with input == 4 diff --git a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/receivetask/ReceiveTaskTest.java b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/receivetask/ReceiveTaskTest.java index e617d0ff1da4d10fe9945d38db3c0e3d19167300..e4b6384d18293335dd1846b833048f52b99fab39 100644 --- a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/receivetask/ReceiveTaskTest.java +++ b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/receivetask/ReceiveTaskTest.java @@ -30,7 +30,7 @@ public class ReceiveTaskTest extends ProcessEngineTestCase { Execution execution = runtimeService.createExecutionQuery() .processInstanceId(pi.getId()) .activityId("waitState") - .singleResult(); + .listPage(); assertNotNull(execution); runtimeService.signal(execution.getId()); diff --git a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/servicetask/JavaServiceTaskTest.java b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/servicetask/JavaServiceTaskTest.java index 62b618a52d305320290165f0ecdb940dd508a053..457704af582c039796a870050b9a2d5e6e8eae4f 100644 --- a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/servicetask/JavaServiceTaskTest.java +++ b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/servicetask/JavaServiceTaskTest.java @@ -29,7 +29,7 @@ public class JavaServiceTaskTest extends ProcessEngineTestCase { Execution execution = runtimeService.createExecutionQuery() .processInstanceId(pi.getId()) .activityId("waitState") - .singleResult(); + .listPage(); assertEquals("ACTIVITI BPM ENGINE", runtimeService.getVariable(execution.getId(), "input")); } diff --git a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/subprocess/SubProcessTest.java b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/subprocess/SubProcessTest.java index c854073db50340a84a2117bb15feb0a8a957bdea..16d8ca0d3100140db732c0f278d7180a43747976 100644 --- a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/subprocess/SubProcessTest.java +++ b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/bpmn/subprocess/SubProcessTest.java @@ -50,7 +50,7 @@ public class SubProcessTest extends ProcessEngineTestCase { // Completing boith the tasks finishes the subprocess and enables the task after the subprocess taskService.complete(investigateHardwareTask.getId()); taskService.complete(investigateSoftwareTask.getId()); - Task writeReportTask = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); + Task writeReportTask = taskService.createTaskQuery().processInstanceId(pi.getId()).listPage(); assertEquals("Write report", writeReportTask.getName()); // Clean up diff --git a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/mgmt/TablePageQueryTest.java b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/mgmt/TablePageQueryTest.java index d8a3bd75dacf0c58fb8c8a0bbec217fb10866ed7..e7fcde128a8a542be3c5312a31bbac546b754c20 100644 --- a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/mgmt/TablePageQueryTest.java +++ b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/mgmt/TablePageQueryTest.java @@ -31,22 +31,18 @@ public class TablePageQueryTest extends ProcessEngineTestCase { TablePage tablePage = managementService.createTablePageQuery() .tableName("ACT_TASK") - .start(0) - .size(5) - .singleResult(); + .listPage(0, 5); - assertEquals(0, tablePage.getStart()); + assertEquals(0, tablePage.getFirstResult()); assertEquals(5, tablePage.getSize()); assertEquals(5, tablePage.getRows().size()); assertEquals(20, tablePage.getTotal()); tablePage = managementService.createTablePageQuery() .tableName("ACT_TASK") - .start(14) - .size(10) - .singleResult(); + .listPage(14, 10); - assertEquals(14, tablePage.getStart()); + assertEquals(14, tablePage.getFirstResult()); assertEquals(6, tablePage.getSize()); assertEquals(6, tablePage.getRows().size()); assertEquals(20, tablePage.getTotal()); @@ -60,20 +56,16 @@ public class TablePageQueryTest extends ProcessEngineTestCase { // With an ascending sort TablePage tablePage = managementService.createTablePageQuery() .tableName("ACT_TASK") - .start(1) - .size(7) .orderAsc("NAME_") - .singleResult(); + .listPage(1, 7); String[] expectedTaskNames = new String[] {"B", "C", "D", "E", "F", "G", "H"}; verifyTaskNames(expectedTaskNames, tablePage.getRows()); // With a descending sort tablePage = managementService.createTablePageQuery() .tableName("ACT_TASK") - .start(6) - .size(8) .orderDesc("NAME_") - .singleResult(); + .listPage(6, 8); expectedTaskNames = new String[] {"I", "H", "G", "F", "E", "D", "C", "B"} ; verifyTaskNames(expectedTaskNames, tablePage.getRows()); diff --git a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/processdefinitions/ProcessDefinitionsTest.java b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/processdefinitions/ProcessDefinitionsTest.java index f0258819de268430ab109f82720a8f7c11f45ddb..3e62e3c678ef5ad581c90fa5d62960a62421f0c6 100644 --- a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/processdefinitions/ProcessDefinitionsTest.java +++ b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/processdefinitions/ProcessDefinitionsTest.java @@ -93,14 +93,20 @@ public class ProcessDefinitionsTest extends ProcessEngineTestCase { .list(); assertNotNull(processDefinitions); - assertEquals(1, processDefinitions.size()); + assertEquals(2, processDefinitions.size()); ProcessDefinition processDefinition = processDefinitions.get(0); assertEquals("IDR", processDefinition.getKey()); assertEquals("Insurance Damage Report", processDefinition.getName()); + assertEquals("IDR:2", processDefinition.getId()); + assertEquals(2, processDefinition.getVersion()); + + processDefinition = processDefinitions.get(1); + assertEquals("IDR", processDefinition.getKey()); + assertEquals("Insurance Damage Report", processDefinition.getName()); assertEquals("IDR:1", processDefinition.getId()); assertEquals(1, processDefinition.getVersion()); - + deleteDeployments(deploymentIds); } @@ -114,6 +120,4 @@ public class ProcessDefinitionsTest extends ProcessEngineTestCase { repositoryService.deleteDeployment(deploymentId); } } - - } diff --git a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/taskforms/TaskFormsTest.java b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/taskforms/TaskFormsTest.java index b4a8be3d67e09b62d34c7bcc3c6ed0cdf3c5a2a6..f115baf8a3bd3f2143190eb2d506fa61205e77ef 100644 --- a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/taskforms/TaskFormsTest.java +++ b/modules/activiti-engine-examples/src/test/java/org/activiti/examples/taskforms/TaskFormsTest.java @@ -51,7 +51,7 @@ public class TaskFormsTest extends ProcessEngineTestCase { runtimeService.startProcessInstanceByKey("vacationRequest", parameters); // Management should now have a task assigned to them - Task task = taskService.createTaskQuery().candidateGroup("management").singleResult(); + Task task = taskService.createTaskQuery().candidateGroup("management").listPage(); assertEquals("Vacation request by kermit", task.getDescription()); Object taskForm = taskService.getTaskForm(task.getId()); assertNotNull(taskForm); @@ -63,7 +63,7 @@ public class TaskFormsTest extends ProcessEngineTestCase { assertNull(repositoryService.getStartFormByKey("noStartOrTaskForm")); runtimeService.startProcessInstanceByKey("noStartOrTaskForm"); - Task task = taskService.createTaskQuery().singleResult(); + Task task = taskService.createTaskQuery().listPage(); assertNull(taskService.getTaskForm(task.getId())); } diff --git a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/mgmt/ProcessEnginesTest.java b/modules/activiti-engine-test-cfg/src/test/java/org/activiti/test/processengines/ProcessEnginesTest.java similarity index 91% rename from modules/activiti-engine-examples/src/test/java/org/activiti/examples/mgmt/ProcessEnginesTest.java rename to modules/activiti-engine-test-cfg/src/test/java/org/activiti/test/processengines/ProcessEnginesTest.java index f361b26dcb3dd56160d4cab73673c7d74b6cd9dd..b0dd974db2a673ee2d9d811eb6fe97e0c75650d3 100644 --- a/modules/activiti-engine-examples/src/test/java/org/activiti/examples/mgmt/ProcessEnginesTest.java +++ b/modules/activiti-engine-test-cfg/src/test/java/org/activiti/test/processengines/ProcessEnginesTest.java @@ -10,7 +10,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.activiti.examples.mgmt; +package org.activiti.test.processengines; import java.util.List; @@ -19,6 +19,7 @@ import junit.framework.TestCase; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngineInfo; import org.activiti.engine.ProcessEngines; +import org.activiti.engine.test.ProcessEngineTestCase; /** * @author Tom Baeyens @@ -28,6 +29,7 @@ public class ProcessEnginesTest extends TestCase { @Override protected void setUp() throws Exception { super.setUp(); + ProcessEngineTestCase.closeProcessEngines(); ProcessEngines.init(); } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/ExecutionQuery.java b/modules/activiti-engine/src/main/java/org/activiti/engine/ExecutionQuery.java index 8f8f923a20391e149246ef47bbe8debd7910ed30..ff29638e47013530d54d3e0996422b7c4d68b677 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/ExecutionQuery.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/ExecutionQuery.java @@ -28,7 +28,7 @@ public interface ExecutionQuery { ExecutionQuery processDefinitionId(String processDefinitionId); List list(); - List paginatedList(int start, int maxResults); - Execution singleResult(); + List listPage(int start, int maxResults); + Execution listPage(); long count(); } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/JobQuery.java b/modules/activiti-engine/src/main/java/org/activiti/engine/JobQuery.java index 2c8c7acd092319455c486956528c4bad6e72e014..c48d4ade1d4c1de0c05a03a0f31e8d72a0bfceb7 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/JobQuery.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/JobQuery.java @@ -31,10 +31,10 @@ public interface JobQuery { long count(); - Job singleResult(); + Job listPage(); List list(); - List paginatedList(int start, int size); + List listPage(int start, int size); } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/Page.java b/modules/activiti-engine/src/main/java/org/activiti/engine/Page.java index c7d2ed8b840984b4c2e7dbf82b75dc61466e43b8..3164bb36656a506a244554ede2a0a13be38d63df 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/Page.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/Page.java @@ -17,24 +17,23 @@ package org.activiti.engine; * holds the parameters of a page (partial result) for a query. * * @author Joram Barrez + * @author Tom Baeyens */ public class Page { - protected int offset; - + protected int firstResult; protected int maxResults; - public Page(int offset, int maxResults) { - this.offset = offset; + public Page(int firstResult, int maxResults) { + this.firstResult = firstResult; this.maxResults = maxResults; } - public int getOffset() { - return offset; + public int getFirstResult() { + return firstResult; } public int getMaxResults() { return maxResults; } - } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/ProcessDefinitionQuery.java b/modules/activiti-engine/src/main/java/org/activiti/engine/ProcessDefinitionQuery.java index 8a61f7b5184fa412bc5c0c43c0ce55a22fbf88bb..0783a01d5508bfde892d2b26fb42e8a08b07a6ec 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/ProcessDefinitionQuery.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/ProcessDefinitionQuery.java @@ -33,9 +33,9 @@ public interface ProcessDefinitionQuery { long count(); - ProcessDefinition singleResult(); + ProcessDefinition listPage(); List list(); - List paginatedList(int start, int size); + List listPage(int start, int size); } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/ProcessInstanceQuery.java b/modules/activiti-engine/src/main/java/org/activiti/engine/ProcessInstanceQuery.java index 2c6a64a3fa355d7d4ccf7749938eeac341635fa2..38535ba9aecd5f16c5ab10387dc02f893b5b096b 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/ProcessInstanceQuery.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/ProcessInstanceQuery.java @@ -26,7 +26,7 @@ public interface ProcessInstanceQuery { ProcessInstanceQuery processDefinitionKey(String processDefinitionKey); List list(); - List paginatedList(int start, int maxResults); - ProcessInstance singleResult(); + List listPage(int start, int maxResults); + ProcessInstance listPage(); long count(); } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/TablePage.java b/modules/activiti-engine/src/main/java/org/activiti/engine/TablePage.java index c9b9a5845705fb07de6246dc4aa97d961277823e..c4cb87d6d09d169b02cdc516ff94345f295d8e91 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/TablePage.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/TablePage.java @@ -37,7 +37,7 @@ public class TablePage { * For example in a paginated database table, this value identifies the record number of * the result on the first row. */ - protected long start; + protected long firstResult; /** * Indicates the key or column on which the signalData is sorted. @@ -62,13 +62,6 @@ public class TablePage { } - public TablePage(String tableName, long start, long total, List> rowData) { - this.tableName = tableName; - this.start = start; - this.total = total; - this.rowData = rowData; - } - public String getTableName() { return tableName; } @@ -81,12 +74,12 @@ public class TablePage { * @return the start index of this page * (ie the index of the first element in the page) */ - public long getStart() { - return start; + public long getFirstResult() { + return firstResult; } - public void setStart(long start) { - this.start = start; + public void setFirstResult(long firstResult) { + this.firstResult = firstResult; } public void setRows(List> rowData) { diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/TablePageQuery.java b/modules/activiti-engine/src/main/java/org/activiti/engine/TablePageQuery.java index 22de35fa8f51d5b8bf06eee1239811244cbc8414..97826c8e8ae3b5a85f17c8d29c0687018629df54 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/TablePageQuery.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/TablePageQuery.java @@ -24,17 +24,6 @@ public interface TablePageQuery { */ TablePageQuery tableName(String tableName); - /** - * the record number of the first element of the page. - * Note that this is zero-based (ie. the first element has index '0') - */ - TablePageQuery start(int start); - - /** - * the number of elements that the page maximum can contain - */ - TablePageQuery size(int size); - /** * orders the resulting table page rows by the given column in ascending order. */ @@ -48,6 +37,5 @@ public interface TablePageQuery { /** * executes the query and returns the {@link TablePage}. */ - TablePage singleResult(); - + TablePage listPage(int firstResult, int maxResults); } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/TaskQuery.java b/modules/activiti-engine/src/main/java/org/activiti/engine/TaskQuery.java index 490963582f22d66f66e0401b9a14ae38591ed240..7843642183d416c1af1677fc7f4a0010f05ae8e1 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/TaskQuery.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/TaskQuery.java @@ -42,10 +42,10 @@ public interface TaskQuery { long count(); - Task singleResult(); + Task listPage(); List list(); - List paginatedList(int start, int size); + List listPage(int start, int size); } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/AbstractQuery.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/AbstractQuery.java index e2ebd928e90f940d8cdc09de3b15173f73facce9..56769489365891f8d71b38f865b28809d9f6b378 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/AbstractQuery.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/AbstractQuery.java @@ -16,7 +16,6 @@ import java.util.List; import org.activiti.engine.ActivitiException; import org.activiti.engine.Page; -import org.activiti.engine.SortOrder; import org.activiti.engine.impl.interceptor.Command; import org.activiti.engine.impl.interceptor.CommandContext; import org.activiti.engine.impl.interceptor.CommandExecutor; @@ -33,14 +32,14 @@ public abstract class AbstractQuery implements Command{ protected static final String SORTORDER_DESC = "desc"; private static enum ResultType { - LIST, PAGINATED_LIST, SINGLE_RESULT, COUNT + LIST, LIST_PAGE, SINGLE_RESULT, COUNT } protected CommandExecutor commandExecutor; protected String orderBy; - protected int start; - protected int size; + protected int firstResult; + protected int maxResults; protected ResultType resultType; protected AbstractQuery() { @@ -51,7 +50,7 @@ public abstract class AbstractQuery implements Command{ } @SuppressWarnings("unchecked") - public T singleResult() { + public T listPage() { this.resultType = ResultType.SINGLE_RESULT; return (T) commandExecutor.execute(this); } @@ -63,10 +62,10 @@ public abstract class AbstractQuery implements Command{ } @SuppressWarnings("unchecked") - public List paginatedList(int start, int size) { - this.start = start; - this.size = size; - this.resultType = ResultType.PAGINATED_LIST; + public List listPage(int firstResult, int maxResults) { + this.firstResult = firstResult; + this.maxResults = maxResults; + this.resultType = ResultType.LIST_PAGE; return (List) commandExecutor.execute(this); } @@ -80,8 +79,8 @@ public abstract class AbstractQuery implements Command{ return executeList(commandContext, null); } else if (resultType==ResultType.SINGLE_RESULT) { return executeSingleResult(commandContext); - } else if (resultType==ResultType.PAGINATED_LIST) { - return executeList(commandContext, new Page(start, size)); + } else if (resultType==ResultType.LIST_PAGE) { + return executeList(commandContext, new Page(firstResult, maxResults)); } else { return executeCount(commandContext); } @@ -111,7 +110,7 @@ public abstract class AbstractQuery implements Command{ } else { orderBy = orderBy+", "; } - orderBy += orderBy+column+" "+sortOrder; + orderBy = orderBy+column+" "+sortOrder; } public String getOrderBy() { diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/ExecutionQueryImpl.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/ExecutionQueryImpl.java index ed8c44988dcd642b2fe2c02aabcecf95ccfa0b0d..47bc13a22f708ec4efa5ac2b4941d66918e5b579 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/ExecutionQueryImpl.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/ExecutionQueryImpl.java @@ -84,7 +84,7 @@ public class ExecutionQueryImpl extends AbstractQuery implements Exec public List executeList(CommandContext commandContext, Page page) { return (List) commandContext .getRuntimeSession() - .findExecutionsByQueryCriteria(this); + .findExecutionsByQueryCriteria(this, page); } public String getProcessDefinitionKey() { diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/ProcessInstanceQueryImpl.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/ProcessInstanceQueryImpl.java index 68908d4aa890175130a7a47f9c40f5609776e2f1..149a987035e1e224e4959ddffddb6423be82a8b9 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/ProcessInstanceQueryImpl.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/ProcessInstanceQueryImpl.java @@ -85,7 +85,7 @@ public class ProcessInstanceQueryImpl extends AbstractQuery imp public List executeList(CommandContext commandContext, Page page) { return (List) commandContext .getRuntimeSession() - .findExecutionsByQueryCriteria(this); + .findExecutionsByQueryCriteria(this, page); } public String getProcessDefinitionKey() { diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TablePageQueryImpl.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TablePageQueryImpl.java index 4a3a948d436c5b69dd2fd838851d45775d99c398..ff271aa52f2dff7ac72572d93d681ba71e53f1af 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TablePageQueryImpl.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TablePageQueryImpl.java @@ -12,8 +12,6 @@ */ package org.activiti.engine.impl; -import org.activiti.engine.ActivitiException; -import org.activiti.engine.SortOrder; import org.activiti.engine.TablePage; import org.activiti.engine.TablePageQuery; import org.activiti.engine.impl.interceptor.Command; @@ -25,63 +23,59 @@ import org.activiti.engine.impl.interceptor.CommandExecutor; * * @author Joram Barrez */ -public class TablePageQueryImpl implements TablePageQuery { +public class TablePageQueryImpl implements TablePageQuery, Command { + + CommandExecutor commandExecutor; - protected CommandExecutor commandExecutor; - protected String tableName; - protected int start = -1; - protected int maxRows = -1; - protected String sortColumn; - protected SortOrder sortOrder; + protected String orderBy; + protected int firstResult; + protected int maxResults; + public TablePageQueryImpl() { + } + public TablePageQueryImpl(CommandExecutor commandExecutor) { this.commandExecutor = commandExecutor; } - public TablePageQuery tableName(String tableName) { + public TablePageQueryImpl tableName(String tableName) { this.tableName = tableName; return this; } - public TablePageQuery start(int start) { - this.start = start; + public TablePageQueryImpl orderAsc(String column) { + addOrder(column, AbstractQuery.SORTORDER_ASC); return this; } - public TablePageQuery size(int size) { - this.maxRows = size; + public TablePageQueryImpl orderDesc(String column) { + addOrder(column, AbstractQuery.SORTORDER_DESC); return this; } - public TablePageQuery orderAsc(String column) { - if (sortColumn != null) { - throw new ActivitiException("Invalid usage: cannot use both orderAsc and orderDesc in same query"); - } - this.sortOrder = SortOrder.ASC; - this.sortColumn = column; - return this; + public String getTableName() { + return tableName; } - - public TablePageQuery orderDesc(String column) { - if (sortColumn != null) { - throw new ActivitiException("Invalid usage: cannot use both orderAsc and orderDesc in same query"); + + protected void addOrder(String column, String sortOrder) { + if (orderBy==null) { + orderBy = ""; + } else { + orderBy = orderBy+", "; } - this.sortOrder = SortOrder.DESC; - this.sortColumn = column; - return this; + orderBy = orderBy+column+" "+sortOrder; } - - public TablePage singleResult() { - return commandExecutor.execute(new Command() { - public TablePage execute(CommandContext commandContext) { - if (tableName == null || start == -1 || maxRows == -1) { - throw new ActivitiException("Table name, offset and maxResults are " + - "minimally needed to execute a TablePageQuery"); - } - return commandContext.getManagementSession() - .getTablePage(tableName, start, maxRows, sortColumn, sortOrder); - }; - }); + + public TablePage listPage(int firstResult, int maxResults) { + this.firstResult = firstResult; + this.maxResults = maxResults; + return commandExecutor.execute(this); + } + + public TablePage execute(CommandContext commandContext) { + return commandContext + .getManagementSession() + .getTablePage(this, firstResult, maxResults); } } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskServiceImpl.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskServiceImpl.java index 64fd20afd70b79c8702b0b847f023722c6b022ca..d17ffa11f074dcadfb63b00deaf23dfc0815ba53 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskServiceImpl.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskServiceImpl.java @@ -70,7 +70,7 @@ public class TaskServiceImpl extends ServiceImpl implements TaskService { public List findAssignedTasks(String assignee, Page page) { TaskQuery query = createTaskQuery().assignee(assignee); if (page != null) { - return query.paginatedList(page.getOffset(), page.getMaxResults()); + return query.listPage(page.getFirstResult(), page.getMaxResults()); } else { return query.list(); } @@ -83,7 +83,7 @@ public class TaskServiceImpl extends ServiceImpl implements TaskService { public List findUnassignedTasks(String userId, Page page) { TaskQuery query = createTaskQuery().candidateUser(userId); if (page != null) { - return query.paginatedList(page.getOffset(), page.getMaxResults()); + return query.listPage(page.getFirstResult(), page.getMaxResults()); } else { return query.list(); } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/deployer/BpmnDeployer.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/deployer/BpmnDeployer.java index dd8d3b489ab6c3ac7f0391f7312abfea6d9f9950..5f7532c5dd240a3fe4efa9828ec966ff0c6538a0 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/deployer/BpmnDeployer.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/deployer/BpmnDeployer.java @@ -38,9 +38,11 @@ public class BpmnDeployer implements Deployer, ProcessEngineConfigurationAware { public static final String BPMN_RESOURCE_SUFFIX = "bpmn20.xml"; protected ExpressionManager expressionManager; + protected BpmnParser bpmnParser; public void configurationCompleted(ProcessEngineConfiguration processEngineConfiguration) { this.expressionManager = processEngineConfiguration.getExpressionManager(); + this.bpmnParser = new BpmnParser(expressionManager); } public List deploy(DeploymentEntity deployment) { @@ -54,7 +56,7 @@ public class BpmnDeployer implements Deployer, ProcessEngineConfigurationAware { ResourceEntity resource = resources.get(resourceName); byte[] bytes = resource.getBytes(); ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); - BpmnParse bpmnParse = new BpmnParser(expressionManager) + BpmnParse bpmnParse = bpmnParser .createParse() .sourceInputStream(inputStream) .name(resourceName) diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/ManagementSession.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/ManagementSession.java index 0a6941caf459eb427a09d96a2aacc676d98fdc8d..05f6f6bd05cdb882658d4c56db422e8b6892a259 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/ManagementSession.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/ManagementSession.java @@ -15,9 +15,9 @@ package org.activiti.engine.impl.cfg; import java.util.Map; -import org.activiti.engine.SortOrder; import org.activiti.engine.TableMetaData; import org.activiti.engine.TablePage; +import org.activiti.engine.impl.TablePageQueryImpl; import org.activiti.engine.impl.persistence.db.IdBlock; @@ -28,7 +28,7 @@ public interface ManagementSession { /* Management */ Map getTableCount(); - TablePage getTablePage(String tableName, int offset, int maxResults, String sortColumn, SortOrder sortOrder); + TablePage getTablePage(TablePageQueryImpl tablePageQuery, int firstResult, int maxResults); TableMetaData getTableMetaData(String tableName); IdBlock getNextIdBlock(); diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/RuntimeSession.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/RuntimeSession.java index 33b6a21bd861fedbe5d11acbb142ffe7c1e9b68b..ad54a0a82cc54370f21ff383d7cd307f3f104f97 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/RuntimeSession.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/RuntimeSession.java @@ -34,7 +34,7 @@ public interface RuntimeSession { void deleteProcessInstance(String processInstanceId, String deleteReason); ExecutionEntity findSubProcessInstanceBySuperExecutionId(String superExecutionId); long findExecutionCountByQueryCriteria(Object executionQuery); - List findExecutionsByQueryCriteria(Object executionQuery); + List findExecutionsByQueryCriteria(Object executionQuery, Page page); List findChildExecutionsByParentExecutionId(String executionId); ExecutionEntity findExecutionById(String activityInstanceId); @@ -46,9 +46,9 @@ public interface RuntimeSession { JobEntity findJobById(String jobId); List findJobs(); - List findNextJobsToExecute(int maxNrOfJobs); + List findNextJobsToExecute(Page page); List findLockedJobs(); - List findUnlockedTimersByDuedate(Date duedate, int nrOfTimers); + List findUnlockedTimersByDuedate(Date duedate, Page page); List findTimersByExecutionId(String executionId); List findJobsByQueryCriteria(JobQueryImpl jobQuery, Page page); long findJobCountByQueryCriteria(JobQueryImpl jobQuery); diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/AcquireJobsCmd.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/AcquireJobsCmd.java index a16f15b1d51ed4a1d4f7ec3a0e2ca29e10816c45..6112295ffd084368e8b606cfdf08f754f43ab276 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/AcquireJobsCmd.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/AcquireJobsCmd.java @@ -17,6 +17,7 @@ import java.util.Calendar; import java.util.GregorianCalendar; import java.util.List; +import org.activiti.engine.Page; import org.activiti.engine.impl.cfg.RuntimeSession; import org.activiti.engine.impl.interceptor.Command; import org.activiti.engine.impl.interceptor.CommandContext; @@ -44,7 +45,7 @@ public class AcquireJobsCmd implements Command { AcquiredJobs acquiredJobs = new AcquiredJobs(); - List jobs = runtimeSession.findNextJobsToExecute(maxJobsPerAcquisition); + List jobs = runtimeSession.findNextJobsToExecute(new Page(0, maxJobsPerAcquisition)); for (JobEntity job: jobs) { List jobIds = new ArrayList(); diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/GetUnlockedTimersByDuedateCmd.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/GetUnlockedTimersByDuedateCmd.java index 7f9bedecd635f08ede4b022f572e6b0108e0269b..1ad65a2dfed8b39568b71762e49cbc1e5115d407 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/GetUnlockedTimersByDuedateCmd.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/GetUnlockedTimersByDuedateCmd.java @@ -15,6 +15,7 @@ package org.activiti.engine.impl.jobexecutor; import java.util.Date; import java.util.List; +import org.activiti.engine.Page; import org.activiti.engine.impl.interceptor.Command; import org.activiti.engine.impl.interceptor.CommandContext; import org.activiti.engine.impl.persistence.runtime.TimerEntity; @@ -27,15 +28,14 @@ import org.activiti.engine.impl.persistence.runtime.TimerEntity; public class GetUnlockedTimersByDuedateCmd implements Command> { protected Date duedate; + protected Page page; - protected int nrOfTimers = -1; - - public GetUnlockedTimersByDuedateCmd(Date duedate, int nrOfTimers) { + public GetUnlockedTimersByDuedateCmd(Date duedate, Page page) { this.duedate = duedate; - this.nrOfTimers = nrOfTimers; + this.page = page; } public List execute(CommandContext commandContext) { - return commandContext.getRuntimeSession().findUnlockedTimersByDuedate(duedate, nrOfTimers); + return commandContext.getRuntimeSession().findUnlockedTimersByDuedate(duedate, page); } } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/JobAcquisitionThread.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/JobAcquisitionThread.java index 67a9781d2970824aca387545d63bae41f9a3e8dd..136d1897d58ec6bff36f8966b762bc9918fa7d24 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/JobAcquisitionThread.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/JobAcquisitionThread.java @@ -17,6 +17,7 @@ import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; +import org.activiti.engine.Page; import org.activiti.engine.impl.interceptor.CommandExecutor; import org.activiti.engine.impl.persistence.runtime.TimerEntity; import org.activiti.engine.impl.util.ClockUtil; @@ -73,7 +74,7 @@ public class JobAcquisitionThread extends Thread { // check if the next timer should fire before the normal sleep time is over Date duedate = new Date(ClockUtil.getCurrentTime().getTime() + millisToWait); - List nextTimers = commandExecutor.execute(new GetUnlockedTimersByDuedateCmd(duedate, 1)); + List nextTimers = commandExecutor.execute(new GetUnlockedTimersByDuedateCmd(duedate, new Page(0, 1))); if (!nextTimers.isEmpty()) { long millisTillNextTimer = nextTimers.get(0).getDuedate().getTime() - ClockUtil.getCurrentTime().getTime(); diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerExecuteNestedActivityJobHandler.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerExecuteNestedActivityJobHandler.java index f69ffd9cdc010e274316426e6819ad57aaa487d9..68face5dd832ba5bdb89a3160cc9c55517758a7f 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerExecuteNestedActivityJobHandler.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerExecuteNestedActivityJobHandler.java @@ -43,6 +43,8 @@ public class TimerExecuteNestedActivityJobHandler implements JobHandler { } try { + execution.setActivity(borderEventActivity); + borderEventActivity .getActivityBehavior() .execute(execution); diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbManagementSession.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbManagementSession.java index ea9aafda36d507e92d992ae0a01535f55e38a6e5..01d17d883c97218b12e2d9a859436a7d8c47189d 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbManagementSession.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbManagementSession.java @@ -24,13 +24,14 @@ import java.util.logging.Logger; import org.activiti.engine.ActivitiException; import org.activiti.engine.ActivitiOptimisticLockingException; -import org.activiti.engine.SortOrder; import org.activiti.engine.TableMetaData; import org.activiti.engine.TablePage; +import org.activiti.engine.impl.TablePageQueryImpl; import org.activiti.engine.impl.cfg.ManagementSession; import org.activiti.engine.impl.interceptor.CommandContext; import org.activiti.engine.impl.interceptor.Session; import org.activiti.engine.impl.persistence.repository.PropertyEntity; +import org.apache.ibatis.session.RowBounds; /** @@ -84,32 +85,19 @@ public class DbManagementSession implements ManagementSession, Session { } @SuppressWarnings("unchecked") - public TablePage getTablePage(String tableName, int offset, int maxResults, - String sortColumn, SortOrder sortOrder) { + public TablePage getTablePage(TablePageQueryImpl tablePageQuery, int firstResult, int maxResults) { TablePage tablePage = new TablePage(); - Map params = new HashMap(); - params.put("tableName", tableName); - if (sortColumn != null) { - params.put("sortColumn", sortColumn); - if (sortOrder.equals(SortOrder.ASC)) { - params.put("sortOrder", "asc"); - } else { - params.put("sortOrder", "desc"); - } - - tablePage.setSort(sortColumn); - tablePage.setOrder(sortOrder); - } + List> tableData = (List>) dbSqlSession + .getSqlSession() + .selectList("selectTableData", tablePageQuery, new RowBounds(firstResult, maxResults)); - List> tableData = - (List>) dbSqlSession.selectList("selectTableData", params, offset, maxResults); - - tablePage.setTableName(tableName); - tablePage.setStart(offset); - tablePage.setTotal(getTableCount(tableName)); + tablePage.setTableName(tablePageQuery.getTableName()); + tablePage.setTotal(getTableCount(tablePageQuery.getTableName())); tablePage.setRows(tableData); + tablePage.setFirstResult(firstResult); + return tablePage; } @@ -162,5 +150,4 @@ public class DbManagementSession implements ManagementSession, Session { public void flush() { } - } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbRepositorySession.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbRepositorySession.java index 10f72a53d24f6d11e63ef5f0e3869711bcbaedd0..d63521b0cf132d2d0b03f38c4f4c6ec7d7cbe790 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbRepositorySession.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbRepositorySession.java @@ -55,7 +55,19 @@ public class DbRepositorySession implements Session, RepositorySession { for (Deployer deployer: dbRepositorySessionFactory.getDeployers()) { List processDefinitions = deployer.deploy(deployment); for (ProcessDefinitionEntity processDefinition : processDefinitions) { + int processDefinitionVersion; + + ProcessDefinitionEntity latestProcessDefinition = findLatestProcessDefinitionByKey(processDefinition.getKey()); + if (latestProcessDefinition!=null) { + processDefinitionVersion = latestProcessDefinition.getVersion()+1; + } else { + processDefinitionVersion = 1; + } + + processDefinition.setVersion(processDefinitionVersion); processDefinition.setDeploymentId(deployment.getId()); + processDefinition.setId(processDefinition.getKey()+":"+processDefinition.getVersion()); + dbSqlSession.insert(processDefinition); addToProcessDefinitionCache(processDefinition); } @@ -157,6 +169,10 @@ public class DbRepositorySession implements Session, RepositorySession { return (ProcessDefinitionEntity) dbSqlSession.selectOne("selectProcessDefinitionById", processDefinitionId); } + protected ProcessDefinitionEntity findLatestProcessDefinitionByKey(String processDefinitionKey) { + return (ProcessDefinitionEntity) dbSqlSession.selectOne("selectLatestProcessDefinitionByKey", processDefinitionKey); + } + public ProcessDefinitionEntity findDeployedLatestProcessDefinitionByKey(String processDefinitionKey) { ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) dbSqlSession.selectOne("selectLatestProcessDefinitionByKey", processDefinitionKey); processDefinition = resolveProcessDefinition(processDefinition); @@ -190,11 +206,7 @@ public class DbRepositorySession implements Session, RepositorySession { @SuppressWarnings("unchecked") public List findProcessDefinitionsByQueryCriteria(ProcessDefinitionQueryImpl processDefinitionQuery, Page page) { final String query = "selectProcessDefinitionsByQueryCriteria"; - if (page == null) { - return dbSqlSession.selectList(query, processDefinitionQuery); - } else { - return dbSqlSession.selectList(query, processDefinitionQuery, page.getOffset(), page.getMaxResults()); - } + return dbSqlSession.selectList(query, processDefinitionQuery, page); } public long findProcessDefinitionCountByQueryCriteria(ProcessDefinitionQueryImpl processDefinitionQuery) { diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbRuntimeSession.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbRuntimeSession.java index 03eb748979857a8fa82f849968b3d1dccca20194..3ad2524c95ff835098bd6da5ff7d32394c7eea1b 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbRuntimeSession.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbRuntimeSession.java @@ -55,8 +55,8 @@ public class DbRuntimeSession implements Session, RuntimeSession { } @SuppressWarnings("unchecked") - public List findExecutionsByQueryCriteria(Object executionQuery) { - return dbSqlSession.selectList("selectExecutionsByQueryCriteria", executionQuery); + public List findExecutionsByQueryCriteria(Object executionQuery, Page page) { + return dbSqlSession.selectList("selectExecutionsByQueryCriteria", executionQuery, page); } public ExecutionEntity findExecutionById(String executionId) { @@ -106,9 +106,9 @@ public class DbRuntimeSession implements Session, RuntimeSession { } @SuppressWarnings("unchecked") - public List findNextJobsToExecute(int maxNrOfJobs) { + public List findNextJobsToExecute(Page page) { Date now = ClockUtil.getCurrentTime(); - return dbSqlSession.selectList("selectNextJobsToExecute", now, 0, maxNrOfJobs); + return dbSqlSession.selectList("selectNextJobsToExecute", now, page); } @SuppressWarnings("unchecked") @@ -117,13 +117,9 @@ public class DbRuntimeSession implements Session, RuntimeSession { } @SuppressWarnings("unchecked") - public List findUnlockedTimersByDuedate(Date duedate, int nrOfTimers) { - final String query = "selectUnlockedTimersByDuedate"; - if (nrOfTimers > 0) { - return dbSqlSession.selectList(query, duedate, 0, nrOfTimers); - } else { - return dbSqlSession.selectList(query, duedate); - } + public List findUnlockedTimersByDuedate(Date duedate, Page page) { + final String query = "selectUnlockedTimersByDuedate"; + return dbSqlSession.selectList(query, duedate, page); } @SuppressWarnings("unchecked") @@ -134,11 +130,7 @@ public class DbRuntimeSession implements Session, RuntimeSession { @SuppressWarnings("unchecked") public List findJobsByQueryCriteria(JobQueryImpl jobQuery, Page page) { final String query = "org.activiti.persistence.selectJobByQueryCriteria"; - if (page == null) { - return dbSqlSession.selectList(query, jobQuery); - } else { - return dbSqlSession.selectList(query, jobQuery, page.getOffset(), page.getMaxResults()); - } + return dbSqlSession.selectList(query, jobQuery, page); } public long findJobCountByQueryCriteria(JobQueryImpl jobQuery) { diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbSqlSession.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbSqlSession.java index 9cc833c5a7440806d4aeea78ad6a96dfe7280a65..bf1358ec10e86b3901d96bac7dd30fa3bf3382c9 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbSqlSession.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbSqlSession.java @@ -21,6 +21,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.activiti.engine.ActivitiException; +import org.activiti.engine.Page; import org.activiti.engine.impl.interceptor.Session; import org.activiti.engine.impl.persistence.PersistentObject; import org.activiti.engine.impl.persistence.runtime.VariableInstanceEntity; @@ -143,9 +144,14 @@ public class DbSqlSession implements Session { } @SuppressWarnings("unchecked") - public List selectList(String statement, Object parameter, int offset, int maxResults) { + public List selectList(String statement, Object parameter, Page page) { statement = dbSqlSessionFactory.mapStatement(statement); - List loadedObjects = sqlSession.selectList(statement, parameter, new RowBounds(offset, maxResults)); + List loadedObjects; + if (page!=null) { + loadedObjects = sqlSession.selectList(statement, parameter, new RowBounds(page.getFirstResult(), page.getMaxResults())); + } else { + loadedObjects = sqlSession.selectList(statement, parameter); + } return filterLoadedObjects(loadedObjects); } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbTaskSession.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbTaskSession.java index 560186222cb05296ca24b37b82c403185cf69ee1..d5675c4156ea42ba56f2d1c6951049caaad8e816 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbTaskSession.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/db/DbTaskSession.java @@ -55,11 +55,7 @@ public class DbTaskSession implements TaskSession, Session { @SuppressWarnings("unchecked") public List findTasksByQueryCriteria(TaskQueryImpl taskQuery, Page page) { final String query = "selectTaskByQueryCriteria"; - if (page == null) { - return dbSqlSession.selectList(query, taskQuery); - } else { - return dbSqlSession.selectList(query, taskQuery, page.getOffset(), page.getMaxResults()); - } + return dbSqlSession.selectList(query, taskQuery, page); } public long findTaskCountByQueryCriteria(TaskQueryImpl taskQuery) { diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/runtime/ByteArrayEntity.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/runtime/ByteArrayEntity.java index 06a965cf2a3a6c748801a1b868e950f07776091b..21f448c22d516e5404501c82a6269b25458e7512 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/runtime/ByteArrayEntity.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/runtime/ByteArrayEntity.java @@ -27,13 +27,10 @@ public class ByteArrayEntity implements Serializable, PersistentObject { private static final Object PERSISTENTSTATE_NULL = new Object(); protected String id; - + protected int revision; protected String name; - protected byte[] bytes; - protected String deploymentId; - protected ByteArrayType variable; public ByteArrayEntity() { @@ -50,19 +47,16 @@ public class ByteArrayEntity implements Serializable, PersistentObject { } public byte[] getBytes() { - // // the bytes are lazy initialized - // if (bytes == null) { - // bytes = CommandContext - // .getCurrent() - // .getPersistenceSession() - // .getByteArrayBytes(id); - // } return bytes; } public Object getPersistentState() { return (bytes != null ? bytes : PERSISTENTSTATE_NULL); } + + public int getRevisionNext() { + return revision+1; + } // getters and setters ////////////////////////////////////////////////////// @@ -84,5 +78,10 @@ public class ByteArrayEntity implements Serializable, PersistentObject { public void setBytes(byte[] bytes) { this.bytes = bytes; } - + public int getRevision() { + return revision; + } + public void setRevision(int revision) { + this.revision = revision; + } } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/runtime/JobEntity.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/runtime/JobEntity.java index 7396659c9bc8c82554b5d694c1db67a24a37a620..7514a47207daf66318d9e2a42a6caf8be9c2259f 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/runtime/JobEntity.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/runtime/JobEntity.java @@ -39,6 +39,7 @@ public abstract class JobEntity implements Serializable, Job, PersistentObject { private static final long serialVersionUID = 1L; protected String id; + protected int revision; protected Date duedate; @@ -73,6 +74,10 @@ public abstract class JobEntity implements Serializable, Job, PersistentObject { persistentState.put("exception", exception); return persistentState; } + + public int getRevisionNext() { + return revision+1; + } public void setExecution(ExecutionEntity execution) { executionId = execution.getId(); @@ -147,4 +152,10 @@ public abstract class JobEntity implements Serializable, Job, PersistentObject { public void setJobHandlerConfiguration(String jobHandlerConfiguration) { this.jobHandlerConfiguration = jobHandlerConfiguration; } + public int getRevision() { + return revision; + } + public void setRevision(int revision) { + this.revision = revision; + } } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/runtime/VariableInstanceEntity.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/runtime/VariableInstanceEntity.java index 30634966520038354637339f7ee2e0c0b10c4c5d..ff6ea395cb55f35c04417ba4b6dd0af282b2437a 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/runtime/VariableInstanceEntity.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/runtime/VariableInstanceEntity.java @@ -119,6 +119,10 @@ public class VariableInstanceEntity implements Serializable, PersistentObject { } return persistentState; } + + public int getRevisionNext() { + return revision+1; + } // lazy initialized relations /////////////////////////////////////////////// diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/scripting/ActivityContextBindings.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/scripting/ActivityContextBindings.java index 4933f3b4e5e17dad1aa83a5098bbce9d50d60ad4..8db326615ff2c57cbb672084b57daa76ef63bfcf 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/scripting/ActivityContextBindings.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/scripting/ActivityContextBindings.java @@ -93,6 +93,9 @@ public class ActivityContextBindings implements Bindings { } public Object remove(Object key) { + if (UNSTORED_KEYS.contains(key)) { + return null; + } throw new UnsupportedOperationException(); } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/test/ProcessEngineTestCase.java b/modules/activiti-engine/src/main/java/org/activiti/engine/test/ProcessEngineTestCase.java index 456ab4e28f5cf0fa8990cd5da483663b41de175d..d69d3314368af8f3fd6c910cd54df1da74494127 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/test/ProcessEngineTestCase.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/test/ProcessEngineTestCase.java @@ -98,7 +98,7 @@ public class ProcessEngineTestCase extends PvmTestCase { .getRuntimeService() .createProcessInstanceQuery() .processInstanceId(processInstanceId) - .singleResult(); + .listPage(); if (processInstance!=null) { throw new AssertionFailedError("expected finished process instance '"+processInstanceId+"' but it was still in the db"); diff --git a/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/engine.mapping.xml b/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/engine.mapping.xml index 942489bdb76cdfb973482d970970b0c51343176f..958cafc4a014c7ef6eef1e97e580c0f7a3d5305a 100644 --- a/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/engine.mapping.xml +++ b/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/engine.mapping.xml @@ -33,14 +33,14 @@ - select count(*) from ${tableName} - select * from ${tableName} - - order by ${sortColumn} ${sortOrder} + + order by ${orderBy} - \ No newline at end of file + diff --git a/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/job.mapping.xml b/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/job.mapping.xml index 75c3ce4cb0c7b1fa709c7f1ac77ea522948d6550..16354d52a4bd482390f1a20017f8b91d580fa99c 100644 --- a/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/job.mapping.xml +++ b/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/job.mapping.xml @@ -100,6 +100,7 @@ insert into ACT_JOB ( ID_, + REV_, TYPE_, LOCK_OWNER_, LOCK_EXP_TIME_, @@ -113,6 +114,7 @@ HANDLER_TYPE_, HANDLER_CFG_ ) values (#{id, jdbcType=VARCHAR}, + 1, 'timer', #{lockOwner, jdbcType=VARCHAR}, #{lockExpirationTime, jdbcType=TIMESTAMP}, @@ -133,6 +135,7 @@ update ACT_JOB + REV= #{revisionNext, jdbcType=INTEGER}, LOCK_EXP_TIME_ = #{lockExpirationTime, jdbcType=TIMESTAMP}, LOCK_OWNER_ = #{lockOwner, jdbcType=VARCHAR}, RETRIES_ = #{retries, jdbcType=INTEGER}, @@ -140,6 +143,7 @@ DUEDATE_ = #{duedate, jdbcType=TIMESTAMP} where ID_= #{id, jdbcType=VARCHAR} + and REV = #{revision, jdbcType=INTEGER} @@ -169,6 +173,7 @@ insert into ACT_JOB ( ID_, + REV_, TYPE_, LOCK_OWNER_, LOCK_EXP_TIME_, @@ -180,6 +185,7 @@ HANDLER_TYPE_, HANDLER_CFG_) values (#{id, jdbcType=VARCHAR}, + 1, 'message', #{lockOwner, jdbcType=VARCHAR}, #{lockExpirationTime, jdbcType=TIMESTAMP}, @@ -198,12 +204,14 @@ update ACT_JOB + REV_ = #{revisionNext, jdbcType=INTEGER}, LOCK_EXP_TIME_ = #{lockExpirationTime, jdbcType=TIMESTAMP}, LOCK_OWNER_ = #{lockOwner, jdbcType=VARCHAR}, RETRIES_ = #{retries, jdbcType=INTEGER}, EXCEPTION_ = #{exception, jdbcType=VARCHAR} where ID_= #{id, jdbcType=VARCHAR} + and REV = #{revision, jdbcType=INTEGER} diff --git a/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/variable.mapping.xml b/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/variable.mapping.xml index 303b5863fb9a9cfc46895f0a9bd3a5ef3ca18690..a063d46d816850caed110419ee476bc02517bc46 100644 --- a/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/variable.mapping.xml +++ b/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/variable.mapping.xml @@ -27,7 +27,7 @@ update ACT_VARIABLE set - REV_ = #{revisionNext, jdbcType=INTEGER} + REV_ = #{revisionNext, jdbcType=INTEGER}, BYTEARRAY_ID_ = #{byteArrayValueId, jdbcType=VARCHAR}, DOUBLE_ = #{doubleValue, jdbcType=DOUBLE}, LONG_ = #{longValue, jdbcType=BIGINT}, @@ -96,7 +96,7 @@ update ACT_BYTEARRAY set - REV_ = #{revisionNext, jdbcType=INTEGER} + REV_ = #{revisionNext, jdbcType=INTEGER}, BYTES_ = #{bytes, jdbcType=BLOB} where ID_ = #{id} and REV_ = #{revision, jdbcType=INTEGER} diff --git a/modules/activiti-engine/src/test/java/org/activiti/engine/test/bpmn/callactivity/CallActivityAdvancedTest.java b/modules/activiti-engine/src/test/java/org/activiti/engine/test/bpmn/callactivity/CallActivityAdvancedTest.java index 7a0d70fc2bdbb3c2e4345888f6d65d13b1690f4c..d78f7f82a91e152c470f2b6df4a9b757658d6382 100644 --- a/modules/activiti-engine/src/test/java/org/activiti/engine/test/bpmn/callactivity/CallActivityAdvancedTest.java +++ b/modules/activiti-engine/src/test/java/org/activiti/engine/test/bpmn/callactivity/CallActivityAdvancedTest.java @@ -37,17 +37,17 @@ public class CallActivityAdvancedTest extends ProcessEngineImplTestCase { // one task in the subprocess should be active after starting the process instance TaskQuery taskQuery = taskService.createTaskQuery(); - Task taskBeforeSubProcess = taskQuery.singleResult(); + Task taskBeforeSubProcess = taskQuery.listPage(); assertEquals("Task before subprocess", taskBeforeSubProcess.getName()); // Completing the task continues the process which leads to calling the subprocess taskService.complete(taskBeforeSubProcess.getId()); - Task taskInSubProcess = taskQuery.singleResult(); + Task taskInSubProcess = taskQuery.listPage(); assertEquals("Task in subprocess", taskInSubProcess.getName()); // Completing the task in the subprocess, finishes the subprocess taskService.complete(taskInSubProcess.getId()); - Task taskAfterSubProcess = taskQuery.singleResult(); + Task taskAfterSubProcess = taskQuery.listPage(); assertEquals("Task after subprocess", taskAfterSubProcess.getName()); // Completing this task end the process instance @@ -67,7 +67,7 @@ public class CallActivityAdvancedTest extends ProcessEngineImplTestCase { // one task in the subprocess should be active after starting the process instance TaskQuery taskQuery = taskService.createTaskQuery(); - Task taskBeforeSubProcess = taskQuery.singleResult(); + Task taskBeforeSubProcess = taskQuery.listPage(); assertEquals("Task in subprocess", taskBeforeSubProcess.getName()); // Completing this task ends the subprocess which leads to the end of the whole process instance @@ -113,14 +113,14 @@ public class CallActivityAdvancedTest extends ProcessEngineImplTestCase { // After process start, the task in the subprocess should be active runtimeService.startProcessInstanceByKey("timerOnCallActivity"); TaskQuery taskQuery = taskService.createTaskQuery(); - Task taskInSubProcess = taskQuery.singleResult(); + Task taskInSubProcess = taskQuery.listPage(); assertEquals("Task in subprocess", taskInSubProcess.getName()); // When the timer on the subprocess is fired, the complete subprocess is destroyed ClockUtil.setCurrentTime(new Date(startTime.getTime() + (6 * 60 * 1000))); // + 6 minutes, timer fires on 5 minutes - waitForJobExecutorToProcessAllJobs(10000000, 1000000); + waitForJobExecutorToProcessAllJobs(10000, 100); - Task escalatedTask = taskQuery.singleResult(); + Task escalatedTask = taskQuery.listPage(); assertEquals("Escalated Task", escalatedTask.getName()); // Completing the task ends the complete process diff --git a/modules/activiti-engine/src/test/java/org/activiti/engine/test/db/EngineRebootProcessDefinitionCacheTest.java b/modules/activiti-engine/src/test/java/org/activiti/engine/test/db/EngineRebootProcessDefinitionCacheTest.java index 57ae0cbbe6310dbb4b9030c59d14d20bfa1b492a..28ffbb509f16d416696d787972c075c8538e6340 100644 --- a/modules/activiti-engine/src/test/java/org/activiti/engine/test/db/EngineRebootProcessDefinitionCacheTest.java +++ b/modules/activiti-engine/src/test/java/org/activiti/engine/test/db/EngineRebootProcessDefinitionCacheTest.java @@ -93,7 +93,7 @@ public class EngineRebootProcessDefinitionCacheTest extends TestCase { .getRuntimeService() .createProcessInstanceQuery() .processInstanceId(processInstanceId) - .singleResult(); + .listPage(); assertNotNull(processInstance); @@ -111,7 +111,7 @@ public class EngineRebootProcessDefinitionCacheTest extends TestCase { .getRuntimeService() .createProcessInstanceQuery() .processInstanceId(processInstanceId) - .singleResult(); + .listPage(); assertNull(processInstance); diff --git a/modules/activiti-engine/src/test/java/org/activiti/impl/interceptor/CommandContextTest.java b/modules/activiti-engine/src/test/java/org/activiti/impl/interceptor/CommandContextTest.java index c8dd239dd7992546ece39b95b447cfa1ad32e2e2..178a48f2a02d529e1471731bed957d703d60739f 100644 --- a/modules/activiti-engine/src/test/java/org/activiti/impl/interceptor/CommandContextTest.java +++ b/modules/activiti-engine/src/test/java/org/activiti/impl/interceptor/CommandContextTest.java @@ -23,7 +23,7 @@ import org.activiti.engine.test.ProcessEngineImplTestCase; */ public class CommandContextTest extends ProcessEngineImplTestCase { - public void testOne() { + public void testCommandContextGetCurrentAfterException() { try { processEngineConfiguration.getCommandExecutor().execute(new Command() { public Object execute(CommandContext commandContext) { diff --git a/modules/activiti-pvm/src/main/java/org/activiti/pvm/impl/runtime/ExecutionImpl.java b/modules/activiti-pvm/src/main/java/org/activiti/pvm/impl/runtime/ExecutionImpl.java index c1de3b7348f1b096eef685af161f2f6f0866164e..0d6bef34feabbba781dc6f6a3f9d4cbe9742ba8c 100644 --- a/modules/activiti-pvm/src/main/java/org/activiti/pvm/impl/runtime/ExecutionImpl.java +++ b/modules/activiti-pvm/src/main/java/org/activiti/pvm/impl/runtime/ExecutionImpl.java @@ -560,7 +560,9 @@ public class ExecutionImpl implements parent.collectVariables(collectedVariables); } ensureVariablesInitialized(); - collectedVariables.putAll(variables); + for (String variableName: variables.keySet()) { + collectedVariables.put(variableName, variables.get(variableName)); + } } public void setVariables(Map variables) { diff --git a/modules/activiti-rest/src/main/java/org/activiti/rest/api/management/TableDataGet.java b/modules/activiti-rest/src/main/java/org/activiti/rest/api/management/TableDataGet.java index bb51f40b57ac1fbfd3ef2e31c610be4683ca0453..73a1b9b97387c1fa6c9e94deba83a10595a7c883 100644 --- a/modules/activiti-rest/src/main/java/org/activiti/rest/api/management/TableDataGet.java +++ b/modules/activiti-rest/src/main/java/org/activiti/rest/api/management/TableDataGet.java @@ -41,10 +41,13 @@ public class TableDataGet extends ActivitiWebScript { String tableName = getMandatoryPathParameter(req, "tableName"); int size = getInt(req, "size", 10); - TablePageQuery query = getManagementService().createTablePageQuery() - .tableName(tableName) - .start(getInt(req, "start", 10)) - .size(size); + int firstResult = getInt(req, "start", 10); + int maxResults = size; + + TablePageQuery query = getManagementService() + .createTablePageQuery() + .tableName(tableName); + String sort = getString(req, "sort"); if (sort != null && !sort.trim().equals("")) { String order = getString(req, "order", "asc"); @@ -55,8 +58,9 @@ public class TableDataGet extends ActivitiWebScript query.orderDesc(sort); } } - model.put("size", size); - model.put("tablePage", query.singleResult()); + + model.put("size", maxResults); + model.put("tablePage", query.listPage(firstResult, maxResults)); } } \ No newline at end of file diff --git a/modules/activiti-rest/src/main/java/org/activiti/rest/api/tasks/TasksGet.java b/modules/activiti-rest/src/main/java/org/activiti/rest/api/tasks/TasksGet.java index 756596d9ca607164b1382fc3e7243d986e686236..5683a59efde8b3da4310bac721d3fef4a6bfa621 100644 --- a/modules/activiti-rest/src/main/java/org/activiti/rest/api/tasks/TasksGet.java +++ b/modules/activiti-rest/src/main/java/org/activiti/rest/api/tasks/TasksGet.java @@ -55,7 +55,7 @@ public class TasksGet extends ActivitiWebScript else { throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Tasks must be filtered with 'assignee', 'candidate' or 'candidate-group'"); } - model.put("tasks", tq.paginatedList(start, size)); + model.put("tasks", tq.listPage(start, size)); model.put("start", start); model.put("total", tq.count()); model.put("size", size);