jbpm 异常处理与安全问题

来源:百度文库 编辑:神马文学网 时间:2024/04/26 07:35:10
下面来学习jbpm的高级话题部分(包括异常处理、安全、运行jbpm测试例子)
高级话题--异常处理
Jbpm给java 编程语言增加了状态管理。Jbpm的座右铭是:“做一件事就把它做好”。因此我们不想重复那些已经在java语言自身定义好的观念思想。下面部分解释jbpm成功的部分:重用java的try—catch,而不是在jpdl中重复这一点部分。
当一个process archive被部署以后,在jbpm中就产生了一个定义(definition)。这时,这个定义就是有效的(经过验证的)。这个验证的作用就是确保节点与变迁之间已经进行合适连接。这个检验过程将会做到保证没有异常能够在一个token从一个节点到另外一个节点(通过变迁)时候发生。
错误只能在delegation classes中产生。所以我们需要做的就是把实现delegation的进行错误处理。Delegation方法没有声明抛出异常(这就指导开发者需要强制执行)。例如,当你在action-handler中发送一个email并且失败了,在java代码的catch中决定需要做什么操作。例如把错误消息放到一个消息队列中,写入文件或者(turn on a flash light)。最后部分就是delegation配置。可以在processdefition.xml中的一个有用的基础上配置delegation。这种配置方法也可以用在配置错误处理上。这种配置在delegation实现上面进行指定。所以它依赖于delegation实现中的错误处理配置提供出来的能力。
安全:
身份认证是安全的一部分,决定谁来执行代码。认证这部分功能是在jbpm核心服务之外的。它应该是jbpm部署的环境中的一部分:例如web应用或者一个j2ee容器。在jbpm的所有api中,运行代码的人员或者系统由一个actorid来表示(java.lang.string)。jbpm需要知道谁来运行代码有两个原因:
1、  所有方法中声明的执行服务,jbpm出于日志的目的想知道是谁在运行代码。调用logs将会回忆起谁做了什么操作。当然,如果loging对你来说不是重要的,你可以强迫提供一个值来代替actorid参数。
2、  如果jbpm配置参数“jbpm.check.actor”设置为true,方法ExecutionService.endOfState,将会验证执行方法的actor是不是与安排状态的actor为同一个。
授权是使某人具备执行代码的安全部分。在仅有的一种情形,jbpm能够被配置成检验actor是否允许执行方法:当调用ExecutionService.endOfState。
针对其他授权需求。可以使用下面两种机制:
1、              ActionHandlers: ActionHandler’s 能够抛出org.jbpm.AuthorizationException‘s。当发生这种情况。事务将会回滚并且ExecutionService客户端得到AuthorizationException(这是一个ExecutionException)。举个例子。使用这种机制能用来在一个过程实例开始时候指定一个ActionHandler. 这个action handler能够检验这个actor是否能够启动一个过程。如果不能,那么actionhandler能够抛出一个org.jbpm.AuthorizationException.
2、             Decorator模式:decorator模式(Gof)能够用来做授权的更复杂情形。意思是:部署时,jbpm的执行服务被包装在另外一个服务当中,用delegation来调用jbpm,但是需要预先考虑授权代码。
运行jbpm tests(对测试不懂)
对于运行单元测试和coverage测试,同样在jbpm.home下面执行安装任务:‘ant install.ant.libs‘ 。目标文件讲会拷贝到你的ant_home的lib目录的lib/junit/junit-3.8.1.jar and lib/clover/clover.jar。
如果你是使用eclipse,在eclipse变量中设置ant-home,使用jbpm2 eclipse project的classpath。
Jbpm.home目录下执行:‘ant clean test view.test‘。windows下一个浏览器将会弹出并显示出测试结果。在其他系统,到${jbpm.home}/target/test-reports/index.html这里用浏览器打开即可。
Jbpm.home目录下执行:‘ant clean test.coverage‘。然后,执行‘ant view.coverage‘查看仅仅coverage测试结果,或者运行‘ant view‘查看测试结果和coverage测试结果。需要注意的是对于coverage测试结果你需要执行separate ant targets.对于在一次执行当中合并target是不可能的。