很多时候,JBPM自己提供的用户系统是不够用的,这时候就要求我们自己去扩展自己的用户体系。JBPM允许外挂一个用户体系。
如果想嵌入自己的用户体系,只需如下几步:
一:创建MyUserImpl,MyGroupImpl,MyMembershipImpl三个类,分别实现接口User,Group。由于类MyMembershipImpl是独立的,因此没有必要继承或实现其他接口。
MyUserImpl 的主要代码:
public class MyUserImpl implements Serializable, User {
private static final long serialVersionUID = 1L;
private long dbid;
private String id;
private String username;//用户名
private String password;//密码
private String sex;//性别
private int age;//年龄
private String tel;//电话号码
public String getUsername() {
return username;
}
public long getDbid() {
return dbid;
}
.
.//省略部分setter和getter方法
.
public String getId() {
return this.id;
}
}
MyGroupImpl 的主要代码:
public class MyGroupImpl implements Serializable, Group {
private static final long serialVersionUID = 1L;
private long dbid;
private String groupName;
private String groupType;
private MyGroupImpl parentGroup;
public long getDbid() {
return dbid;
}
public void setDbid(long dbid) {
this.dbid = dbid;
}
//省略部分gettrer和setter方法
public String getType() {
return null;
}
}
MyMembershipImpl 的主要代码:
public class MyMembershipImpl implements Serializable {
private static final long serialVersionUID = 1L;
protected long dbid;
protected User user;
protected Group group;
protected String role;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public long getDbid() {
return dbid;
}
public void setDbid(long dbid) {
this.dbid = dbid;
}
}
当然,上面三个类里面的字段可能不满足实际需求,但是没有关系,我们可以添加新的字段。
二:第一步完成了,那么就开始第二步。第二步的主要任务就是将这些类映射到数据库里。由于JBPM的持久层的操作采用的是Hibernate进行的。所以我们必须编写一个Hibernate的映射文件将实体类映射到数据库。这个映射文件可以写在任何位置,但一般建议写到ClassPath路径下面。具体的代码如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="en.estar.jbpm.identify.MyUserImpl" table="JBPM4_MyUser">
<id name="dbid" column="id">
<generator class="assigned" />
</id>
<property name="id" column="userId"></property>
<property name="username"></property>
<property name="password"></property>
<property name="age"></property>
<property name="sex"></property>
<property name="tel"></property>
</class>
<class name="en.estar.jbpm.identify.MyGroupImpl" table="JBPM4_MyGroup">
<id name="dbid" column="id">
<generator class="assigned" />
</id>
<property name="groupName"></property>
<property name="groupType"></property>
<many-to-one name="parentGroup"
column="parent"
class="en.estar.jbpm.identify.MyGroupImpl"
foreign-key="FK_GROUP_PARENT"/>
</class>
<class name="en.estar.jbpm.identify.MyMembershipImpl" table="JBPM4_MyMembership">
<id name="dbid" column="id">
<generator class="assigned"/>
</id>
<many-to-one name="user"
column="USER_"
class="en.estar.jbpm.identify.MyUserImpl"
foreign-key="FK_MEM_USER"/>
<many-to-one name="group"
column="GROUP_"
class="en.estar.jbpm.identify.MyGroupImpl"
foreign-key="FK_MEM_GROUP"/>
<property name="role" column="name" />
</class>
</hibernate-mapping>
上面的代码是仿照JBPM默认的映射文件jbpm.identity.hbm.xml写的。这个文件可以在JBPM的源代码里面找到,导入jar包时,它被封装在jbpm.jar里面。映射文件配置好了之后,只需在hibernate的配置文件jbpm.hibernate.cfg.xml中加上一句话<mapping resource="en/estar/jbpm/identify/jbpm.myidentify.hbm.xml"/>就行了。当然,resource的路径根据实际情况而定。
三:通过以上两步,就完成了由实体类到数据库的映射,也就是说,当你启动tomcat运行JBPM的时候,数据库里就会多出三张表:JBPM4_MyUser,JBPM4_MyGroup,JBPM4_MyMembership。虽然如此,但是这只是利用了hibernate的自动生成数据表的功能产生了三个表而已,JBPM凭什么知道我需要使用的是我新创建的这三张表,而不会去调用原来的那三张表呢?答案是,他不知道。
所以我们要继续进行配置。找到jbpm的一个配置文件叫:jbpm.cfg.xml。在这个文件里面原来有一句话:
import resource="jbpm.identity.cfg.xml"。我们可以去查看jbpm.identity.cfg.xml 的实际内容,结果里面就一句话: <transaction-context><identity-session /></transaction-context>。有了这句话,就相当于告诉了JBPM,它将会去调用JBPM自带的关于用户体系操作的一个接口IdentitySession。这个类的实现IdentitySessionImpl里就会默认去调用JBPM自带的用户关系管理的数据表。所以为了改变JBPM的这种习惯,我们就必须自己创建一个类,并实现接口IdentitySession。这样JBPM就会去调用我们自己的实现,而不会再去调用它自己的东东。要实现这个只需要把他的配置文件jbpm.identity.cfg.xml 的import resource="jbpm.identity.cfg.xml“注释掉,然后加上一句:
<transaction-context>
<hibernate-session current="true"/>
<object class="en.estar.jbpm.identify.MesIdentitySessionImpl">
</object>
</transaction-context>
这样就OK了。下面的任务就是去实现MesIdentitySessionImpl中的方法了。不过我认为,里边的方法没有必要全部实现,把几个find开头的方法实现了就行了,其他的诸如,创建用户,创建组,删除用户等等之类的,我们就没有必要实现了,必要的时候我们可以自己单独写方法实现,就不需要放到该类当中了。
分享到:
相关推荐
jbpm4.4开发指南,jbpm4.4用户指南
jBPM 4.4用户手册 翻译官方文档 JBoss jBPM Teams 4.4 译者: Lingo 首页: http://www.family168.com/ 论坛: http://old.family168.com/bbs EMAIL: lingosurf168@gmail.com 2009年11月1日 1. 导言 1.1. 许可...
jBPM 4.4 用户手册 中文版 PDF格式
jbpm4.4 schema.xsd jbpm4.4 schema.xsd jbpm4.4 schema.xsd jbpm4.4 schema.xsd jbpm4.4 schema.xsd
jbpm4.4中文开发指南 ,官方翻译,新手必读!
jbpm4.4下载地址
jBPM4.4开发指南 开发手册 JBPM4.4 开发
JBPM4.4与SSH2之整合(附完整源码) 这些天,想着把jbpm4.4与ssh2整合一下,由于之前从来没用过jbpm,也不知道各版本之间会有什么差异(经过网上的收集对比,还真有些差异),整合起来,还真是有些步履艰难。收集了...
jBPM4.4入门开发实例
资源名称:JBPM4.4视频教程(22集附源码)资源目录:【】(01)jbpm4.4简介【】(02)JBPM4.4开发环境搭建【】(03)jbpm4.4环境搭建续【】(04)jbpm4.4配置文件和开发前准备【】(05)jbpm4.4部署流程发起流程实例【】(06)...
首先感谢原创,相关信息请查询原创。... 看到好多朋友找不到相应的jar包,致使jbpm4.4的学习遇到困难,现提供除jbpm4.4自身jar包外的所有包,以便大家更快的学习jbpm4.4,希望能帮朋友们少走弯路!
jBPM4.4课程文档
JBPM4.4之HelloWorld示例
父项目中,根据Maven的规范,配置了相关依赖包的引用,包括:Jbpm4.4的引用包引用、Junit4.9的测试包引用,hibernate的引用包,以及应用服务器Jboss的Client引用等。 接口中,提供了部署流程、创建实例、获得当前...
JBPM4.4学习文档.ppt
jbpm4.4+ssh配置
终于把jbpm4.4上传完了,由于csdn最大容量才50m,所以我把这个jar包分成三个部分。
jBPM4.4数据库表简单介绍
jbpm4.4 ibatis-spring 整合
jBPM 4.4开发指南,翻译官方文档 JBoss jBPM Teams