第15章. 日志

第15章. 日志

日志的目的是保持对流程执行的历史的跟踪. 作为流程执行改变的运行时数据, 所有的增量数据都会保存在日志里 .

此章所含盖的流程日志不要同软件日志混淆. 软件日志跟踪软件程序的运行(通常是为了调试的目的). 流程日志跟踪流程实例的执行流程实例.

流程日志信息有多种用途. 最明显的就是咨询特定流程执行的历史.

另外一个用途是业务活动监控(BAM-Business Activity Monitoring). BAM将查询和分析流程执行的日志来发现有用的关于业务流程的统计信息 .比如. 流程每个步骤平均花费了多少时间? 流程的瓶径在那里??在一个组织里这个信息是执行业务流程管理的关键. 真实业务流程管理是关于组织怎样管理它们的流程, 怎样支持信息技术*和*怎么改善迭代过程.

下一个用途是 是取消还原(undo)功能. 流程日志能用来执行取消还原(undo).由于日志包括增量的运行时间信息,日志能够按照相反的顺序把流程带回到以前的状态.

15.1. 日志的创建

当运行流程执行的时候jBPM组件产生日志.用户也能插入流程日志. 日志条目是一个来自继承org.jbpm.logging.log.ProcessLog的java对象. 流程日志条目被加到 LoggingInstance . LoggingInstance是 ProcessInstance的一个可选扩展.

jBPM产生几种日志: 图执行日志,上下文日志和任务管理日志.更多有关这些日志中包含的数据的信息可以参考javadocs. 一个好的开始点是类 org.jbpm.logging.log.ProcessLog,因为从这个类你可以向下导航到继承树 .

LoggingInstance将收集所有的日志条目 . 当 ProcessInstance被保存 ,所有在 LoggingInstance中的日志将刷新到数据库里. ProcessInstance的 logs -field 没有用hiberate映射避免在每个事务里日志从数据库中检索. 每个 ProcessLog在执行路线上下文中( Token)产生并且 ProcessLog引用令牌 . 令牌被用做index-sequence 生成器为了令牌里的 ProcessLog索引 . 这对日志检索是重要的. 这个方法,随后的事务里产生的日志产生将有后面的顺序号. .

对部署来说日志是不重要的, 在ProcessDefinition里去掉额外的 LoggingDefinition是足够的 ?.阻止 LoggingInstance s 被捕捉导致日志没有维护.我们以后将增加更加精细颗粒的日志配置控制 . 参看问题 'log 级别配置'.

增加流程日志?API方法如下.

public class LoggingInstance extends ModuleInstance {
...
public void addLog(ProcessLog processLog) {...}
...
}

日志信息的UML图如下:

The jBPM logging information class diagram

Figure 15.1.jBPM 日志信息类图

CompositeLog 是特殊类别的日志条目 .它用做数个子日志的父母日志, 因此在日志里建立层级结构.?插入日志API如下

public class LoggingInstance extends ModuleInstance {
...
public void startCompositeLog(CompositeLog compositeLog) {...}
public void endCompositeLog() {...}
...
}

CompositeLog总是在 try-finally -block中被调用以确保层级结构日志是一致的. 比如:

startCompositeLog(new MyCompositeLog());
try {
...
} finally {
endCompositeLog();
}

15.2. 日志检索Log retrieval

如前所说,日志不能通过LoggingInstance?导航到它的日志来从数据库中检索.作为替代,流程实例日志总是从数据库中查询. LoggingSession有两个方法用做这个目的 .

第一个方法检索所有流程实例的日志.这些日志将被令牌组织成一个Map. 此map将通过流程实例的每个令牌关联到ProcessLogs列表。清单包含ProcessLogs 同它们建立的顺序一样.

public class LoggingSession {
...
public Map findLogsByProcessInstance(long processInstanceId) {...}
...
}

第二个方法检索指定的令牌的日志. 结果列表包括ProcessLogs,同它们建立的顺序一样.

public class LoggingSession {
public List findLogsByToken(long tokenId) {...}
...
}

15.3. 数据仓库

有时你可能想将数据仓库技术应用到jbpm流程日志上.数据仓库意思是你可为各种不同目的的流程日志建立隔离的数据库.

为什么你想为jBPM 日志创建数据仓库可能有很多原因。有时可能从使用的生产数据库产生沉重的查询. 其他状态可能做一些扩展分析. 数据仓库可以在一个为此目的而优化的编辑数据库schema上完成。

本章,我们只是推荐了数据仓库技术. 目的是多变的,jBPM里包含的通用解决方案可以覆盖这些需求.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值