From 70d1b0783cd3f65cab272abf0a58ceff3cc397dd Mon Sep 17 00:00:00 2001 From: Frederik Heremans Date: Wed, 2 Jan 2013 10:57:41 +0000 Subject: [PATCH] Merged BRANCHES/DEV/FRED/ACTIVITI-UPGRADE to HEAD: 44909: Creating branch for activiti 5.11 upgrade 44913: Upgraded to activiti 5.11 - to be validated 45025: Removing obsolete libraries 45026: Preventing optimistic locking during task-update sequence git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@45028 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/bootstrap-context.xml | 1 + .../activiti-upgrade-5-11.sql | 122 ++++++++++++++++++ .../activiti-upgrade-5-11.sql | 119 +++++++++++++++++ .../alfresco/patch/patch-services-context.xml | 11 ++ config/alfresco/version.properties | 2 +- .../activiti/ActivitiWorkflowEngine.java | 9 +- .../activiti/AlfrescoBpmnParseListener.java | 6 + .../AuthenticatedAsyncJobHandler.java | 5 +- .../AuthenticatedTimerJobHandler.java | 5 +- 9 files changed, 273 insertions(+), 7 deletions(-) create mode 100644 config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.MySQLInnoDBDialect/activiti-upgrade-5-11.sql create mode 100644 config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.PostgreSQLDialect/activiti-upgrade-5-11.sql diff --git a/config/alfresco/bootstrap-context.xml b/config/alfresco/bootstrap-context.xml index e2b3b4bd95..8cedc495d4 100644 --- a/config/alfresco/bootstrap-context.xml +++ b/config/alfresco/bootstrap-context.xml @@ -175,6 +175,7 @@ + diff --git a/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.MySQLInnoDBDialect/activiti-upgrade-5-11.sql b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.MySQLInnoDBDialect/activiti-upgrade-5-11.sql new file mode 100644 index 0000000000..2ea74c1a46 --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.MySQLInnoDBDialect/activiti-upgrade-5-11.sql @@ -0,0 +1,122 @@ +-- +-- Title: Upgraded Activiti tables to 5.11 version +-- Database: MySQL +-- Since: V4.1 Schema 6023 +-- Author: Frederik Heremans +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- +-- Upgraded Activiti tables to 5.11 version + +alter table ACT_RE_PROCDEF + MODIFY KEY_ varchar(255) not null; + +alter table ACT_RE_PROCDEF + MODIFY VERSION_ integer not null; + +-- http://jira.codehaus.org/browse/ACT-1424 +alter table ACT_RU_JOB + MODIFY LOCK_EXP_TIME_ timestamp null; + +alter table ACT_RE_DEPLOYMENT + add CATEGORY_ varchar(255); + +alter table ACT_RE_PROCDEF + add DESCRIPTION_ varchar(4000); + +alter table ACT_RU_TASK + add SUSPENSION_STATE_ integer; + +update ACT_RU_TASK set SUSPENSION_STATE_ = 1; + +alter table ACT_RU_EXECUTION + add constraint ACT_FK_EXE_PROCDEF + foreign key (PROC_DEF_ID_) + references ACT_RE_PROCDEF (ID_); + +create table ACT_RE_MODEL ( + ID_ varchar(64) not null, + REV_ integer, + NAME_ varchar(255), + KEY_ varchar(255), + CATEGORY_ varchar(255), + CREATE_TIME_ timestamp null, + LAST_UPDATE_TIME_ timestamp null, + VERSION_ integer, + META_INFO_ varchar(4000), + DEPLOYMENT_ID_ varchar(64), + EDITOR_SOURCE_VALUE_ID_ varchar(64), + EDITOR_SOURCE_EXTRA_VALUE_ID_ varchar(64), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +alter table ACT_RE_MODEL + add constraint ACT_FK_MODEL_SOURCE + foreign key (EDITOR_SOURCE_VALUE_ID_) + references ACT_GE_BYTEARRAY (ID_); + +alter table ACT_RE_MODEL + add constraint ACT_FK_MODEL_SOURCE_EXTRA + foreign key (EDITOR_SOURCE_EXTRA_VALUE_ID_) + references ACT_GE_BYTEARRAY (ID_); + +alter table ACT_RE_MODEL + add constraint ACT_FK_MODEL_DEPLOYMENT + foreign key (DEPLOYMENT_ID_) + references ACT_RE_DEPLOYMENT (ID_); + +delete from ACT_GE_PROPERTY where NAME_ = 'historyLevel'; + +alter table ACT_RU_JOB + add PROC_DEF_ID_ varchar(64); + +update ACT_GE_PROPERTY set VALUE_ = '5.11' where NAME_ = 'schema.version'; + +create table ACT_HI_VARINST ( + ID_ varchar(64) not null, + PROC_INST_ID_ varchar(64), + EXECUTION_ID_ varchar(64), + TASK_ID_ varchar(64), + NAME_ varchar(255) not null, + VAR_TYPE_ varchar(100), + REV_ integer, + BYTEARRAY_ID_ varchar(64), + DOUBLE_ double, + LONG_ bigint, + TEXT_ varchar(4000), + TEXT2_ varchar(4000), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_VARINST(PROC_INST_ID_); +create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_VARINST(NAME_, VAR_TYPE_); + +alter table ACT_HI_ACTINST + add TASK_ID_ varchar(64); + +alter table ACT_HI_ACTINST + add CALL_PROC_INST_ID_ varchar(64); + +alter table ACT_HI_DETAIL + MODIFY PROC_INST_ID_ varchar(64) null; + +alter table ACT_HI_DETAIL + MODIFY EXECUTION_ID_ varchar(64) null; + +-- +-- Update engine properties table +-- +UPDATE ACT_GE_PROPERTY SET VALUE_ = '5.11' WHERE NAME_ = 'schema.version'; +UPDATE ACT_GE_PROPERTY SET VALUE_ = CONCAT(VALUE_,' upgrade(5.11)') WHERE NAME_ = 'schema.history'; + +-- +-- Record script finish +-- +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V4.2-upgrade-to-activiti-5.11'; +INSERT INTO alf_applied_patch + (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report) + VALUES + ( + 'patch.db-V4.2-upgrade-to-activiti-5.11', 'Manually executed script upgrade V4.2: Upgraded Activiti tables to 5.11 version', + 0, 5111, -1, 5112, null, 'UNKNOWN', ${TRUE}, ${TRUE}, 'Script completed' + ); \ No newline at end of file diff --git a/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.PostgreSQLDialect/activiti-upgrade-5-11.sql b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.PostgreSQLDialect/activiti-upgrade-5-11.sql new file mode 100644 index 0000000000..62d62340f0 --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.PostgreSQLDialect/activiti-upgrade-5-11.sql @@ -0,0 +1,119 @@ +-- +-- Title: Upgraded Activiti tables to 5.11 version +-- Database: Postgres +-- Since: V4.1 Schema 6023 +-- Author: Frederik Heremans +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- +-- Upgraded Activiti tables to 5.11 version + +alter table ACT_RE_PROCDEF + alter column KEY_ set not null; + +alter table ACT_RE_PROCDEF + alter column VERSION_ set not null; + +alter table ACT_RE_DEPLOYMENT +add CATEGORY_ varchar(255); + +alter table ACT_RE_PROCDEF + add DESCRIPTION_ varchar(4000); + +alter table ACT_RU_EXECUTION + add constraint ACT_FK_EXE_PROCDEF + foreign key (PROC_DEF_ID_) + references ACT_RE_PROCDEF (ID_); + +alter table ACT_RU_TASK + add SUSPENSION_STATE_ integer; + +update ACT_RU_TASK set SUSPENSION_STATE_ = 1; + +create table ACT_RE_MODEL ( + ID_ varchar(64) not null, + REV_ integer, + NAME_ varchar(255), + KEY_ varchar(255), + CATEGORY_ varchar(255), + CREATE_TIME_ timestamp, + LAST_UPDATE_TIME_ timestamp, + VERSION_ integer, + META_INFO_ varchar(4000), + DEPLOYMENT_ID_ varchar(64), + EDITOR_SOURCE_VALUE_ID_ varchar(64), + EDITOR_SOURCE_EXTRA_VALUE_ID_ varchar(64), + primary key (ID_) +); + +create index ACT_IDX_MODEL_SOURCE on ACT_RE_MODEL(EDITOR_SOURCE_VALUE_ID_); +alter table ACT_RE_MODEL + add constraint ACT_FK_MODEL_SOURCE + foreign key (EDITOR_SOURCE_VALUE_ID_) + references ACT_GE_BYTEARRAY (ID_); + +create index ACT_IDX_MODEL_SOURCE_EXTRA on ACT_RE_MODEL(EDITOR_SOURCE_EXTRA_VALUE_ID_); +alter table ACT_RE_MODEL + add constraint ACT_FK_MODEL_SOURCE_EXTRA + foreign key (EDITOR_SOURCE_EXTRA_VALUE_ID_) + references ACT_GE_BYTEARRAY (ID_); + +create index ACT_IDX_MODEL_DEPLOYMENT on ACT_RE_MODEL(DEPLOYMENT_ID_); +alter table ACT_RE_MODEL + add constraint ACT_FK_MODEL_DEPLOYMENT + foreign key (DEPLOYMENT_ID_) + references ACT_RE_DEPLOYMENT (ID_); + +delete from ACT_GE_PROPERTY where NAME_ = 'historyLevel'; + +alter table ACT_RU_JOB + add PROC_DEF_ID_ varchar(64); + +create table ACT_HI_VARINST ( + ID_ varchar(64) not null, + PROC_INST_ID_ varchar(64), + EXECUTION_ID_ varchar(64), + TASK_ID_ varchar(64), + NAME_ varchar(255) not null, + VAR_TYPE_ varchar(100), + REV_ integer, + BYTEARRAY_ID_ varchar(64), + DOUBLE_ double precision, + LONG_ bigint, + TEXT_ varchar(4000), + TEXT2_ varchar(4000), + primary key (ID_) +); + +create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_VARINST(PROC_INST_ID_); +create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_VARINST(NAME_, VAR_TYPE_); + +alter table ACT_HI_ACTINST + add column TASK_ID_ varchar(64); + +alter table ACT_HI_ACTINST + add column CALL_PROC_INST_ID_ varchar(64); + +alter table ACT_HI_DETAIL + alter column PROC_INST_ID_ drop not null; + +alter table ACT_HI_DETAIL + alter column EXECUTION_ID_ drop not null; + +-- +-- Update engine properties table +-- +UPDATE ACT_GE_PROPERTY SET VALUE_ = '5.11' WHERE NAME_ = 'schema.version'; +UPDATE ACT_GE_PROPERTY SET VALUE_ = CONCAT(VALUE_,' upgrade(5.11)') WHERE NAME_ = 'schema.history'; + +-- +-- Record script finish +-- +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V4.2-upgrade-to-activiti-5.11'; +INSERT INTO alf_applied_patch + (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report) + VALUES + ( + 'patch.db-V4.2-upgrade-to-activiti-5.11', 'Manually executed script upgrade V4.2: Upgraded Activiti tables to 5.11 version', + 0, 5111, -1, 5112, null, 'UNKNOWN', ${TRUE}, ${TRUE}, 'Script completed' + ); \ No newline at end of file diff --git a/config/alfresco/patch/patch-services-context.xml b/config/alfresco/patch/patch-services-context.xml index cb01bdddc5..4eb911aa38 100644 --- a/config/alfresco/patch/patch-services-context.xml +++ b/config/alfresco/patch/patch-services-context.xml @@ -3441,4 +3441,15 @@ + + patch.db-V4.2-upgrade-to-activiti-5.11 + patch.upgradeToActiviti5-11.description + 0 + 6022 + 6023 + + classpath:alfresco/dbscripts/upgrade/4.2/${db.script.dialect}/activiti-upgrade-5-11.sql + + + diff --git a/config/alfresco/version.properties b/config/alfresco/version.properties index 4a0e7c46fe..e573d3c17a 100644 --- a/config/alfresco/version.properties +++ b/config/alfresco/version.properties @@ -23,4 +23,4 @@ version.build=r@scm-revision@-b@build-number@ # Schema number -version.schema=6022 +version.schema=6023 diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowEngine.java b/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowEngine.java index 16b3365632..4bdcf90bef 100644 --- a/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowEngine.java +++ b/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowEngine.java @@ -664,10 +664,12 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine private String getFormKey(TaskDefinition taskDefinition) { TaskFormHandler handler = taskDefinition.getTaskFormHandler(); + // We cast to DefaultTaskFormHandler since we do not configure our own if(handler != null && handler instanceof DefaultTaskFormHandler) { - // We cast to DefaultTaskFormHandler since we do not configure our own - return ((DefaultTaskFormHandler)handler).getFormKey(); + // As of Activiti 5.11, form-key is an expression. For alfresco-usecases, we're the expression-text + // as is, as this will ALWAYS be a literal string, containing pointer to task-type. + return ((DefaultTaskFormHandler)handler).getFormKey().getExpressionText(); } return null; } @@ -1399,6 +1401,9 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine taskService.setAssignee(localTaskId, currentUserName); // Also update pojo used to set the outcome, this will read assignee as wel task.setAssignee(currentUserName); + + // Re-fetch the task-entity since it's revision has been updated by the setAssignee() call + task = taskService.createTaskQuery().taskId(localTaskId).singleResult(); } setOutcome(task, transition); diff --git a/source/java/org/alfresco/repo/workflow/activiti/AlfrescoBpmnParseListener.java b/source/java/org/alfresco/repo/workflow/activiti/AlfrescoBpmnParseListener.java index 8014459ecc..5a26faa1b9 100644 --- a/source/java/org/alfresco/repo/workflow/activiti/AlfrescoBpmnParseListener.java +++ b/source/java/org/alfresco/repo/workflow/activiti/AlfrescoBpmnParseListener.java @@ -301,4 +301,10 @@ public class AlfrescoBpmnParseListener implements BpmnParseListener ScopeImpl scopeElement, ActivityImpl nestedActivity) { // Nothing to do here } + + @Override + public void parseBoundaryMessageEventDefinition(Element element, boolean interrupting, + ActivityImpl messageActivity) + { + } } diff --git a/source/java/org/alfresco/repo/workflow/activiti/AuthenticatedAsyncJobHandler.java b/source/java/org/alfresco/repo/workflow/activiti/AuthenticatedAsyncJobHandler.java index 6c92485dfc..5658afefb2 100644 --- a/source/java/org/alfresco/repo/workflow/activiti/AuthenticatedAsyncJobHandler.java +++ b/source/java/org/alfresco/repo/workflow/activiti/AuthenticatedAsyncJobHandler.java @@ -22,6 +22,7 @@ package org.alfresco.repo.workflow.activiti; import org.activiti.engine.impl.interceptor.CommandContext; import org.activiti.engine.impl.jobexecutor.JobHandler; import org.activiti.engine.impl.persistence.entity.ExecutionEntity; +import org.activiti.engine.impl.persistence.entity.JobEntity; import org.alfresco.model.ContentModel; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; @@ -50,7 +51,7 @@ public class AuthenticatedAsyncJobHandler implements JobHandler } @Override - public void execute(final String configuration, final ExecutionEntity execution, + public void execute(final JobEntity job, final String configuration, final ExecutionEntity execution, final CommandContext commandContext) { // Get initiator @@ -80,7 +81,7 @@ public class AuthenticatedAsyncJobHandler implements JobHandler @SuppressWarnings("synthetic-access") public Void doWork() throws Exception { - wrappedHandler.execute(configuration, execution, commandContext); + wrappedHandler.execute(job, configuration, execution, commandContext); return null; } }, userName); diff --git a/source/java/org/alfresco/repo/workflow/activiti/AuthenticatedTimerJobHandler.java b/source/java/org/alfresco/repo/workflow/activiti/AuthenticatedTimerJobHandler.java index 09938c48ef..319d2b4013 100644 --- a/source/java/org/alfresco/repo/workflow/activiti/AuthenticatedTimerJobHandler.java +++ b/source/java/org/alfresco/repo/workflow/activiti/AuthenticatedTimerJobHandler.java @@ -23,6 +23,7 @@ import org.activiti.engine.impl.TaskQueryImpl; import org.activiti.engine.impl.interceptor.CommandContext; import org.activiti.engine.impl.jobexecutor.JobHandler; import org.activiti.engine.impl.persistence.entity.ExecutionEntity; +import org.activiti.engine.impl.persistence.entity.JobEntity; import org.activiti.engine.impl.pvm.PvmActivity; import org.activiti.engine.task.Task; import org.alfresco.repo.security.authentication.AuthenticationUtil; @@ -53,7 +54,7 @@ public class AuthenticatedTimerJobHandler implements JobHandler } @Override - public void execute(final String configuration, final ExecutionEntity execution, + public void execute(final JobEntity job, final String configuration, final ExecutionEntity execution, final CommandContext commandContext) { String userName = null; @@ -88,7 +89,7 @@ public class AuthenticatedTimerJobHandler implements JobHandler @SuppressWarnings("synthetic-access") public Void doWork() throws Exception { - wrappedHandler.execute(configuration, execution, commandContext); + wrappedHandler.execute(job, configuration, execution, commandContext); return null; } }, userName);