JBPM4.4中嵌入自己的用户体系
2011-08-04 15:13
183 查看
很多时候,JBPM自己提供的用户系统是不够用的,这时候就要求我们自己去扩展自己的用户体系。JBPM允许外挂一个用户体系。
如果想嵌入自己的用户体系,只需如下几步:
第一步:
创建MyUserImpl,MyGroupImpl,MyMembershipImpl三个类,分别实现接口User,Group。由于类MyMembershipImpl是独立的,因此没有必要继承或实现其他接口。
MyUserImpl 的主要代码:
Java代码
MyGroupImpl 的主要代码:
Java代码
MyMembershipImpl 的主要代码:
Java代码
当然,上面三个类里面的字段可能不满足实际需求,但是没有关系,我们可以添加新的字段。
第二步:
第一步完成了,那么就开始第二步。第二步的主要任务就是将这些类映射到数据库里。由于JBPM的持久层的操作采用的是Hibernate进行的。所以我们必须编写一个Hibernate的映射文件将实体类映射到数据库。这个映射文件可以写在任何位置,但一般建议写到ClassPath路径下面。具体的代码如下:
XML代码
上面的代码是仿照JBPM默认的映射文件jbpm.identity.hbm.xml写的。这个文件可以在JBPM的源代码里面找到,导入jar包时,它被封装在jbpm.jar里面。映射文件配置好了之后,只需在hibernate的配置文件jbpm.hibernate.cfg.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 的实际内容,结果里面就一句话:"<identity-session />”。有了这句话,就相当于告诉了JBPM,它将会去调用JBPM自带的关于用户体系操作的一个接口IdentitySession。这个类的实现IdentitySessionImpl里就会默认去调用JBPM自带的用户关系管理的数据表。所以为了改变JBPM的这种习惯,我们就必须自己创建一个类,并实现接口IdentitySession。这样JBPM就会去调用我们自己的实现,而不会再去调用它自己的东东。要实现这个只需要把他的配置文件jbpm.identity.cfg.xml
的import resource="jbpm.identity.cfg.xml“注释掉,然后加上一句:
XML代码
这样就OK了。下面的任务就是去实现MesIdentitySessionImpl中的方法了。不过我认为,里边的方法没有必要全部实现,把几个find开头的方法实现了就行了,其他的诸如,创建用户,创建组,删除用户等等之类的,我们就没有必要实现了,必要的时候我们可以自己单独写方法实现,就不需要放到该类当中了。
如果想嵌入自己的用户体系,只需如下几步:
第一步:
创建MyUserImpl,MyGroupImpl,MyMembershipImpl三个类,分别实现接口User,Group。由于类MyMembershipImpl是独立的,因此没有必要继承或实现其他接口。
MyUserImpl 的主要代码:
Java代码
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 的主要代码:
Java代码
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 的主要代码:
Java代码
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代码
<xml version="1.0"?> <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中加上一句话就行了。当然,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 的实际内容,结果里面就一句话:"<identity-session />”。有了这句话,就相当于告诉了JBPM,它将会去调用JBPM自带的关于用户体系操作的一个接口IdentitySession。这个类的实现IdentitySessionImpl里就会默认去调用JBPM自带的用户关系管理的数据表。所以为了改变JBPM的这种习惯,我们就必须自己创建一个类,并实现接口IdentitySession。这样JBPM就会去调用我们自己的实现,而不会再去调用它自己的东东。要实现这个只需要把他的配置文件jbpm.identity.cfg.xml
的import resource="jbpm.identity.cfg.xml“注释掉,然后加上一句:
XML代码
<transaction-context> <hibernate-session current="true"/> <object class="en.estar.jbpm.identify.MesIdentitySessionImpl"> </object> </transaction-context>
这样就OK了。下面的任务就是去实现MesIdentitySessionImpl中的方法了。不过我认为,里边的方法没有必要全部实现,把几个find开头的方法实现了就行了,其他的诸如,创建用户,创建组,删除用户等等之类的,我们就没有必要实现了,必要的时候我们可以自己单独写方法实现,就不需要放到该类当中了。
相关文章推荐
- JBPM4.4中嵌入自己的用户体系
- jbpm4.4整合自己的用户体系
- 如何让用户在用webview访问网页时嵌入我们自己的内容
- c# 用户自定义控件嵌入自己的图标
- c# 用户自定义控件嵌入自己的图标
- C#实现用户自定义控件中嵌入自己的图标
- 如何快速全面建立自己的大数据知识体系? 大数据 ETL 用户画像 机器学习 阅读232 作者经过研发多个大数据产品,将自己形成关于大数据知识体系的干货分享出来,希望给大家能够快速建立起大数据
- 让用户WebView访问网页时嵌入开发者自己的内容
- 利用JBPM4.4的AssignmentHandler实现用户角色整合另一种构思
- 利用JBPM4.4的AssignmentHandler实现用户角色整合另一种构思
- jbpm4.4整合自己的用户体系
- 谈谈自己对“将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力”一这句话中脚本化的理解
- 利用JBPM4.4的AssignmentHandler实现用户角色整合另一种构思
- go语言笔记——go是有虚拟机runtime的,不然谁来做GC呢,总不会让用户自己来new和delete进行内存管理吧,还有反射!Go 的 runtime 嵌入到了每一个可执行文件当中
- 安卓app中嵌入一个H5页面,当手机系统设置字体变大时,如何使H5页面的字体不会随用户自己调整的系统字体变化而变化?
- 如何让用户在用webview访问网页时嵌入我们自己的内容
- myeclipse8.5配置JBPM4.4
- 一个CTO谈自己的技术架构体系
- 用户可以通过音乐播放器来选择以及学习自己喜欢的歌曲
- JBPM4.4之HelloWorld示例