jBPM4:接在现有的系统上,需要更换用户体系

在现有的应用上,接入jBPM,要修改的就是jBPM的用户体系。

 

jBPM的用户体系,在数据库中有以下几张表:

JBPM4_ID_USER        : jBPM的用户表

JBPM4_ID_GROUP     : jBPM的用户组表

JBPM4_MEMBERSHIP : 用户和用户组之间的关系

 

JBPM4_TASK                  : 任务表,其中的assignee_表示这个任务有谁来完成

JBPM4_PARTICIPATION  : 可选的用户或者用户组,一个任务可以有一些用户/用户组中的成员来完成,记录在这个表中

JBPM4_SWIMLANE          :泳道,现在还未仔细的看

 

-----------------------------------------------------------

jBPM4对外服务的时候,和用户、用户组相关的服务,都有IdentityService来进行(具体有IdentityServiceImpl来实现)。

 

通过Command模式,交由下层来进行具体的实现

具体的实现都是交给接口IdentitySession来进行的,

具体的实现有2个:IdentitySessionImpl,JBossIdmIdentitySessionImpl。

现在自己程序中,一般都有IdentitySessionImpl来进行处理。

 

-----------------------------------------------------------------

接入到自己的系统:

 

一般情况下,如果在自己的系统中,明确的每个任务都是由指定的人员来完成,或者在进入Task的时候,在AssignmentHandler中能够直接确定工作者,就不需要修改jBPM了。

 

如果需要使用到jBPM的taskService的findGroupTasks,或者需要通过jBPM的自动发邮件的功能,则需要对jBPM做一些修改,将jBPM获取用户的方式转接到自己的系统来。

 

现在考虑具体的实现,就是更换掉jBPM的 IdentitySessionImpl,用自己原有的方式来替换它。

----- 原来考虑替换 IdentityServiceImpl,看了一下jBPM内部的一些代码,发现在pvm中,有地方是直接获取IdentitySession的,所以替换IdentityServiceImpl不能实现要求。

 

获取接口IdentitySession,通过以下方式来的:

EnvironmentImpl.getFromcurrent(IdentitySession.class)

或者是:

environment.get(IdentitySession.class)

 

EnvironmentImpl 是保存在 ThreadLocal中的,

 

------------------------------------------------------------------------------------------------------------

jBPM4的IoC的方式见:以下链接:

http://www.opug.org.cn/node/87 或

http://www.iteye.com/topic/381607

 

Jbpm4透过WireParser具备从xml加载的能力,wire的相关配置文件为:jbpm.wire.bindings.xml,其中包含了对IdentitySession的定义:

 

  <binding class="org.jbpm.pvm.internal.wire.binding.IdentitySessionBinding" />

 

在jBPM4中,缺省的是绑定:org.jbpm.pvm.internal.wire.binding.IdentitySessionBinding

 

 

  public Object parse(Element element, Parse parse, Parser parser) {
    ObjectDescriptor objectDescriptor = new ObjectDescriptor(IdentitySessionImpl.class);
    objectDescriptor.addTypedInjection("session", Session.class);
    return objectDescriptor;
  }

 

IdentitySession的实现是: IdentitySessionImpl.class

同时给该类的session属性,注入Session.class

 

public class IdentitySessionImpl implements IdentitySession {

  protected Session session;
 

如果要替换,只要自己继承IdentitySession,实现一个其功能的类。

同时自己在完成一个binding类,修改jBPM的配置即可。

 

 

---------

在identitySession中,使用到User和group接口(都在org.jbpm.api.identity),而且这个接口相对简单,如果自己要使用,可以在几个基础上再进行继承。

 

 

 

 

 

 

别人的文章:

1 

 

 

 

 

你可能感兴趣的:(xml,工作,jbpm,IOC)