第19章 日志
日志的目标是保持追踪流程执行的历史。在运行时流程执行数据的改变、所有数据(delta's)被存储在日志中。
本章所涉及的流程日志,不要同软件日志混淆。软件日志跟踪软件程序的执行(通常是为了除错)。流程日志跟踪流程实例的执行。
流程日志信息有各种用例。最明示的是通过流程执行的参与人查询流程历史。
另一个用例是业务活动监控(Business Activity Monitoring (BAM))。BAM将查询或分析流程执行的日志来找出关于业务过程的有用的统计信息。例如:流程的每一步平均花费多少时间?流程中哪里有瓶颈?……这样的信息是一个组织实现真正的流程管理的关键。真正的业务流程管理是关于组织如何管理他们的流程、如何通过通过信息技术来支持以及如何在一个迭代流程改善其他的方面。
再一个用途是撤消(undo)功能。 流程日志能够用于实现撤消。既然日志包含运行时信息的数据(delta's),那样日志就能够反向将流程带回到前一个状态。[
Since the logs contain the delta's of the runtime information, the logs can be played in reverse order to bring the process back into a previous state.]
当流程执行运行时日志被jBPM产生。但是用户也能插入流程日志。一个日志项是一个继承自org.jbpm.logging.log.ProcessLog 的java对象。流程日志项被增加到一个LoggingInstance上。LoggingInstance是ProcessInstance的可选的扩展。
不同日志种类被jBPM生成:图执行日志(graph execution logs)、上下文(context logs)和任务管理日志(and task management logs)。更多的关于那些日志所包含的特定的数据,参考javadocs 文档。一个好的开始点是类org.jbpm.logging.log.ProcessLog ,因为从那个类中你可以向下导航这个继承树。
LoggingInstance将收集日志项。当ProcessInstance被存储时,所有LoggingInstance中的日志将被刷新到数据库中。为了避免每一个事务都要从数据库中进行检索ProcessInstance日志域(logs-field)并没有同hibernate进行映射。 每一个ProcessLog在执行(Token)路径的上下文中产生,随后ProcessLog引用那个token。这个Token也当作Token中ProcessLog索引的顺序索引(idnex-sequence)生成器。这个对于日志检索是很重要的。那样,随后的事务生成的日志将有一个连续的顺序号。(喔,那里有许多的序号噢 :-s)。
下列是增加流程日志的API方法。
public class LoggingInstance extends ModuleInstance {
...
public void addLog(ProcessLog processLog) {...}
...
}
|
日志信息的UML图看起来像这样:
图 19.1 jBPM日志信息类图
CompositeLog是一个特殊种类的日志项。它作为若干子日志的父日志,因此这是创建日志中层次结构的手段。下面是插入日志的API。
public class LoggingInstance extends ModuleInstance {
...
public void startCompositeLog(CompositeLog compositeLog) {...}
public void endCompositeLog() {...}
...
}
|
CompositeLogs应该总是放在try-finally块中进行调用以保证日志层次结构是一致的。例如:
startCompositeLog(new MyCompositeLog());
try {
...
} finally {
endCompositeLog();
}
|
日志部署在哪并不重要,在jbpm.cfg.xml 配置文件中的jbpm-context部分移除日志行就足够了。
<service name='logging' factory='org.jbpm.logging.db.DbLoggingServiceFactory' />
|
万一你想过滤日志,你需要写一个自定义的DbLoggingService子类LoggingService的实现。你还需要创建一个定制的日志ServiceFactory并在factory属性中指定它。
正像前面讲的,日志不能通过定位LoggingInstance到它的日志从数据库中被检索。取而代之的是,流程实例的日志总可以从数据库中被查询。LoggingSession有两个方法来实现这个目标:
第一个方法为流程实例检索所有的日志。日志将通过token分组MAP。这个map将同流程实例中的每个Token的ProcessLogs列表相关联。列表将以相同的顺序包含ProcessLogs当他们创建时。
public class LoggingSession {
...
public Map findLogsByProcessInstance(long processInstanceId) {...}
...
}
|
第二方法为特定的Token检索日志。返回的列表将以相同的顺序包含ProcessLogs当他们创建时。
public class LoggingSession {
public List findLogsByToken(long tokenId) {...}
...
}
|
有时你可能想应用数据仓库技术到jbpm流程日志上。数据仓库意味着你将创建一个独立的数据库来包含为各种目标而使用的流程日志。
有多种为流程日志信息创建数据仓库的原因。有时它可能是一个在线的产品数据库中非重载荷的查询。其他情况下它可能做一些扩展性的分析。数据库仓库甚至可能修改数据库模式以优化它。
本节,我们只想计划下jBPM上下文中的数据库仓库技术。这个目标太分散,限制了可以包含在jBPM中能覆盖所有需求的一个通用的解决方法。
:-S
- 大小: 5.1 KB
分享到:
相关推荐
jbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3....
jbpm-jpdl-suite-3.2.3安装配置.doc
jbpm-jpdl-suite-3.2.3的安装配置jbpm-jpdl-suite-3.2.3的安装配置
转发zhangym翻译的JBoss_jBPM_jPDL用户开发手册_3.2.3.pdf 共199页 24章。
JBoss+jBPM+jPDL用户开发手册_3.2.3
这个是jbpm-jpdl-3.2.3.zip的server部分,有60多兆, 只要将"jbpm-jpdl-3.2.3(没有server部分).rar"和这个合在一起就是整个的jbpm-jpdl-3.2.3.zip "jbpm-jpdl-3.2.3(没有server部分).rar"在我的另外一个上传资源里面
jbpm-jpdl-suite-3.2.GA.zip
jbpm-jpdl-3.2.3.zip 开源工作流引擎
翻译的英文pdf原版,如果大家觉得翻译的有出入,可以参照英文原版提出意见,我再修改! 博文链接:https://zhangym.iteye.com/blog/226583
jbpm-jpdl-suite-3.2.2.zip 3.2版本画流程图包 jbpm-jpdl-suite-3.2.2.zip 3.2版本画流程图包
这个是jbpm-jpdl-3.2.3的zip,本来这个是85M的zip, 我删除了server 文件夹(这个文件夹有60多M) 这个server部分在我的另外一个资源里面,一般开发用不到这个server文件夹 如果需要的话,就下载不需要积分, 这个没有...
jbpm-jpdl-3.2.3
JBoss+jBPM+jPDL用户开发手册_3.2.3 JPBM 开发指南
工作流插件 activiti-5.15.1 jbpm-4.3 jbpm-4.4 jbpm-jpdl-suite-3.2.3
首先从网站上下载jBPM开发包(jbpm-jpdl-suite-3.2.3.zip),据说现在jBPM3已经升到3.2.6了,而且据说已经推出了jBPM4了。将jbpm-jpdl-suite-3.2.3.zip解压缩后,里面有个\designer文件夹,这个是eclipseIDE的jBPM...
jbpm-jpdl-3.2.3下各文件夹|---db这里都是些sql定义和数据文件,如果改用其它数据库,可以使用这些资源来创建。jBPM默认使用的是内存数据库hsqldb|---deploy用来部署你的应用的包和资源|---designer这里是Eclipse...