Problems with nested Forks
源代码修改
package org.jbpm.jpdl.internal.activity;
import java.util.ArrayList;
import java.util.List;
import org.jbpm.api.Execution;
import org.jbpm.api.activity.ActivityExecution;
import org.jbpm.pvm.internal.model.Activity;
import org.jbpm.pvm.internal.model.Condition;
import org.jbpm.pvm.internal.model.ExecutionImpl;
import org.jbpm.pvm.internal.model.Transition;
public class ForkActivity extends JpdlActivity {
private static final long serialVersionUID = 1L;
public void execute(ActivityExecution execution) {
execute((ExecutionImpl) execution);
}
public void execute(ExecutionImpl execution) {
Activity activity = execution.getActivity();
// evaluate the conditions and find the transitions that should be
// forked
List<Transition> forkingTransitions = new ArrayList<Transition>();
List<Transition> outgoingTransitions = activity
.getOutgoingTransitions();
for (Transition transition : outgoingTransitions) {
Condition condition = transition.getCondition();
if ((condition == null) || (condition.evaluate(execution))) {
forkingTransitions.add(transition);
}
}
// if no outgoing transitions should be forked,
if (forkingTransitions.size() == 0) {
// end this execution
execution.end();
// if there is exactly 1 transition to be taken, just use the
// incoming execution
} else if (forkingTransitions.size() == 1) {
execution.take(forkingTransitions.get(0));
// if there are more transitions
} else {
ExecutionImpl concurrentRoot = null;
if (Execution.STATE_ACTIVE_ROOT.equals(execution.getState())) {
concurrentRoot = execution;
execution.setState(Execution.STATE_INACTIVE_CONCURRENT_ROOT);
execution.setActivity(null);
} else if (Execution.STATE_ACTIVE_CONCURRENT.equals(execution
.getState())) {
concurrentRoot = execution.getParent();
// 添加代码
execution.setState(Execution.STATE_INACTIVE_CONCURRENT_ROOT);
execution.setActivity(null);
// 添加代码
}
// 添加代码
if (Execution.STATE_INACTIVE_CONCURRENT_ROOT.equals(execution
.getState())) {
// 执行挂起
execution.suspend();
}
// 添加代码
for (Transition transition : forkingTransitions) {
// launch a concurrent path of execution
String childExecutionName = transition.getName();
ExecutionImpl concurrentExecution = concurrentRoot
.createExecution(childExecutionName);
concurrentExecution.setActivity(activity);
concurrentExecution.setState(Execution.STATE_ACTIVE_CONCURRENT);
concurrentExecution.take(transition);
if (concurrentRoot.isEnded()) {
break;
}
}
}
}
}
分享到:
相关推荐
文件系统操作: 创建,重命名,移动和删除目录和文件纯文本编辑器操作: 编辑并保存文件学习成果参加者将能够: 使用通用工作流为GitHub上的项目贡献代码准备一个fork和本地存储库以对GitHub上的上游项目做出更改在...
启动一个Activity通常从Intent开始,经过ActivityManagerService调度,Zygote fork出新的进程,然后创建新的Activity实例,执行onCreate()、onStart()和onResume()。 8. **Activity A跳转到Activity B后按返回键的...
`ModifiedSnackBar`是`NispokSnackBar`的fork,意味着它继承了原有库的功能,并可能对其进行了优化和增强。开发者可能添加了新的特性,修复了已知问题,或者提高了性能。具体的修改细节可以通过查看源代码来了解。 ...
在 GitHub 或类似平台上,fork 是一种常见的协作方式,用于获取并修改其他用户的代码。 描述中的 "在线知识库" 指出此项目可能包含了学习资源或教程,而 "这是一个简单的安卓手机计数器" 提供了具体的应用场景——...
使用C语言编写程序时,可以调用系统调用来管理用户和用户组,例如`fork()`, `exec()`, `getgid()`, `setgid()`等函数。 总的来说,“Linux_Group_Activity”是一个关于Linux系统中用户组管理和权限控制的实践项目。...
,MusicStation是几年前做视频聚合的时候抓取音乐台数据形成的,最近不断有人star或者fork之前的MusicStation项目,并且发Email给我说demo获取不到数据等等问题,希望我修改。 但是由于很久没有维护之前的项目了,...
支持更改 PinView 中每一个 EditText 的输入前、输入后、正在输入的 background 支持设置任意长度的 PIN 码长度 支持设置可输入的 PIN 码格式,目前支持文本、数字、可以自己自主设置 支持设置输入错误次数限制时间 ...
5. **开源项目的贡献流程**:开源项目贡献者通常会遵循一定的流程,包括Fork项目、创建分支、进行修改、提交Pull Request并参与代码审查。开发者通过这种方式参与到项目中,不仅可以提升自己的技术能力,还能为社区...
它展示了系统的活动、决策、合并和fork。此处,我们将对管理员和用户的活动图进行分析。 管理员的活动图包括: * 登录系统 * 管理书籍(包括添加、删除和修改) * 管理订单 用户的活动图包括: * 查看订单 * ...
高度44dp,标题居中,颜色引用activity主题设置colorPrimary.可以自己设置. 底部弹出框:原项目两边有间距,现改成铺满屏幕宽度弹出 默认图片更改成黑灰色背景,让滑动时图片闪动不会那么突兀 图片item再加一层蒙版...
1. 在C/C++代码中,使用`fork()`函数创建一个新的子进程,然后使用`setsid()`使进程成为会话领导,以确保它不依附于任何终端。 2. 使用`umask(0)`来设置文件创建权限,确保守护进程对新创建的文件有适当的权限。 3. ...
当系统需要创建一个新的应用进程时,Zygote进程会被fork出来,这样就可以继承Zygote进程已经加载的类和资源,大大减少了内存的使用。Zygote进程在系统启动时会加载一些常用的类和资源,如Android框架类库、资源文件...
- **题目**: 退出 activity 对一些资源以及状态的操作保存,可以在生命周期的哪个方法中进行? - **答案**: A. onPause() - **知识点解析**: - 在Android应用中,每个Activity都有其生命周期方法。当Activity...
- **权限管理**:每个权限对应一个groupId,系统的权限信息存储在`/data/system/packages.xml`中,更新应用时会修改该文件,以反映最新的权限状态。 #### 六、总结 Android Framework是整个Android操作系统的核心...
- **解释:** Fork操作是指在GitHub上创建一个原项目的副本到自己的GitHub账户下,这样就可以在此基础上进行修改而不影响原始项目。这对于贡献开源项目或基于现有项目进行二次开发非常有用。 #### 6. **表格布局** ...
安装应用时,PMS会解析APK文件,验证签名,然后通过Zygote进程 fork出新的应用进程。卸载时,PMS会删除应用的文件、数据库、缓存等资源,同时从系统中移除对应的PackageInfo。 权限管理是Android安全模型的重要组成...
接着,SystemServer进程在Zygote中 fork 出来,它负责系统的高级管理,包括UI线程、应用进程的创建以及电源管理等。在这一阶段,还会进行属性服务的设置,如ro.product.model等,以便系统识别设备信息。 【各个层次...
- **Fork操作:**用户可以在原项目的基础上创建一个副本,即Fork,这使得用户可以在自己的GitHub账户下对原项目进行修改。 - **应用场景:**通常用于贡献代码到开源项目中,或者基于现有项目进行二次开发。 ### 6. ...
- **操作术语**:在GitHub上,当你基于某个项目的代码库创建自己的分支进行开发时,这一操作称为“fork”(选项B)。这样做允许你在不影响原项目的情况下自由地修改代码。 ### 构建Android UI的基本控件 **知识点...
- 通过`fork`,可以在不改变原有项目的基础上,独立地进行开发和修改。 - `copy`不是GitHub上的标准术语;`pull`通常指从远程仓库获取最新的更改并合并到本地仓库中;`trunk`通常指的是主分支,但在GitHub上并没有...