OpenText Cordys BOP 4.3平台具有较强的流程监控能力,流程监控入口如下图所示,使用Process Instance Manager功能。
流程监控(Process Instance Manager)界面如下图所示,好恐怖!有这么多Aborted流程实例,什么原因?
先依赖流程实例监控界面能力开始分析原因。
流程实例监控处理功能有:关闭、刷新、继续执行、停止、显示流程图、显示流程日志、显示输入信息、显示/编辑输入信息、流程与业务系统关联标识、消息队列、显示错误信息、导出错误信息等。关键功能如下图所示:
恢复Aborted状态流程继续执行的过程如下:
显示错误信息如下图所示,主要问题是结束流程时出错,流程状态为Aborted。
Error while evaluating the expression com.unicom.bopm.workflow.BIZ_INFO_INSTANCE.updateStatus(string(child::instance:instanceProperties/child::instance:organization/child::text()),string(child::bpm:inputMsg/child::bpm:inputData/child::bpm:bizInstanceId/child::text()),"2"). Error is : XPathEvalution has failed:Exception is thrown by the custom method. com.cordys.cpc.bsf.busobject.exception.BsfNoContextException: No WS-AppServer context available for Thread[BPMEngine_LongLivedProcess_ThreadPool/WorkerThread-5,5,main].null
问题流程图如下:
根据错误分析原因,是由于在原流程环节所配置的外部方法里增加内容错误造成的。通过分析下文注释掉的代码,发现问题是出现在调用类成员方法,而此方法依赖外部Jar包被忽视了,而调用新开发的Webservice却没有问题(也经过测试),注释新变更代码修复后,流程结束可以执行了。
public static boolean updateStatus(String orgDn, String bizInstanceId, String status) {
String[] paramNames = {"bizInstanceId", "status"};
Object[] paramValues = {bizInstanceId, status};
SOAPRequestObject sro = new SOAPRequestObject(orgDn, "http://unicom.com/workflow", "UpdateBizInstStatus", paramNames, paramValues);
sro.execute();
// if (status.equals("2")){
// String oid = null;
// String brn = null;
// String column = "STATUS";
// String json = "{'STATUS':'0'}";
// //获取文档定义信息
// BusObject BO = getBizInfoInstanceByBizinfoInstanceid(bizInstanceId);
// oid = BO.getStringProperty("MONGO_BO_ID");
// brn = BO.getStringProperty("BIZ_RVSN_NUMBER");
//
// String[] pNames = {"oid", "column", "json", "collection"};
// Object[] pValues = {oid, column, json, brn};
// //增加文档状态为COMPLETE
// SOAPRequestObject sromongodb = new SOAPRequestObject(orgDn, "http://unicom.com/workflow", "updateMongoPushInner", pNames, pValues);
// sromongodb.execute();
// }
return true;
}
注:修改代码的原因,不是需求就是BUG。本次是需求,查询文档内容关联流程的状态。
恢复Aborted流程正常执行,结束流程。恢复操作过程如下:
如下图所示,先选中某条记录,选择恢复执行流程(绿色右向)按钮。
成功恢复Aborted流程。
问题处理经验小结
1、经过测试验证的功能、配置方案,不要怀疑,要从相关方面入手:
- 是否修改过代码;
- 代码对Jar包的依赖;
- Service Group对Jar的依赖(本例中,成员方法涉及到MongoDB,需要在Service Group环境变量配置上,补充MongDB的jar包);
- 端口冲突,冲突肯定是有原因的;
- 及早恢复系统,另辟蹊径来完成需求。
2、每日定时监控流程实例运行状态,及早发现问题做相应的处理。
参考:
《MongoDB 与关系型数据库(Oracle)关联统计实践方案 》 2016.03 肖永威