读书人

转载:JBPM4.4中嵌入自各儿的用户体系

发布时间: 2012-07-03 13:37:43 作者: rapoo

转载:JBPM4.4中嵌入自己的用户体系

JBPM4.4中嵌入自己的用户体系2011-03-11 09:17 littie1987 JavaEye博客?T?|?T转载:JBPM4.4中嵌入自各儿的用户体系

很多时候,JBPM自己提供的用户系统是不够用的,这时候就要求我们自己去扩展自己的用户体系。JBPM允许外挂一个用户体系。

AD:

?

很多时候,JBPM自己提供的用户系统是不够用的,这时候就要求我们自己去扩展自己的用户体系。JBPM允许外挂一个用户体系。

如果想嵌入自己的用户体系,只需如下几步:

一:创建MyUserImpl,MyGroupImpl,MyMembershipImpl三个类,分别实现接口User,Group。由于类MyMembershipImpl是独立的,因此没有必要继承或实现其他接口。

MyUserImpl 的主要代码:

Java代码

?

?

  1. public?class?MyUserImpl?implements?Serializable,?User?{??? ?
  2. ?? ?
  3. ????private?static?final?long?serialVersionUID?=?1L;??? ?
  4. ????private?long?dbid;??? ?
  5. ????private?String?id;??? ?
  6. ????private?String?username;//用户名??? ?
  7. ????private?String?password;//密码??? ?
  8. ????private?String?sex;//性别??? ?
  9. ????private?int?age;//年龄??? ?
  10. ????private?String?tel;//电话号码??? ?
  11. ??????????? ?
  12. ????public?String?getUsername()?{??? ?
  13. ????????return?username;??? ?
  14. ????}??? ?
  15. ????public?long?getDbid()?{??? ?
  16. ????????return?dbid;??? ?
  17. ????}??? ?
  18. ????????????????.??? ?
  19. ????????????????.//省略部分setter和getter方法??? ?
  20. ????????????????.??? ?
  21. ????public?String?getId()?{??? ?
  22. ????????return?this.id;??? ?
  23. ????}??? ?
  24. ?? ?
  25. }?? ?

?

MyGroupImpl 的主要代码:

Java代码

?

?

  1. public?class?MyGroupImpl?implements?Serializable,?Group?{??? ?
  2. ?? ?
  3. ????private?static?final?long?serialVersionUID?=?1L;??? ?
  4. ??????? ?
  5. ????private?long?dbid;??? ?
  6. ????private?String?groupName;??? ?
  7. ????private?String?groupType;??? ?
  8. ????private?MyGroupImpl?parentGroup;??? ?
  9. ??????? ?
  10. ????public?long?getDbid()?{??? ?
  11. ????????return?dbid;??? ?
  12. ????}??? ?
  13. ????public?void?setDbid(long?dbid)?{??? ?
  14. ????????this.dbid?=?dbid;??? ?
  15. ????}??? ?
  16. ?? ?
  17. ????????????????//省略部分gettrer和setter方法??? ?
  18. ?? ?
  19. ????public?String?getType()?{??? ?
  20. ????????return?null;??? ?
  21. ????}??? ?
  22. ?? ?
  23. }?? ?

?

MyMembershipImpl 的主要代码:

Java代码

?

?

  1. public?class?MyMembershipImpl?implements?Serializable?{??? ?
  2. ?? ?
  3. ????private?static?final?long?serialVersionUID?=?1L;??? ?
  4. ??????? ?
  5. ????protected?long?dbid;??? ?
  6. ????protected?User?user;??? ?
  7. ????????????????protected?Group?group;??? ?
  8. ????????????????protected?String?role;??? ?
  9. ?????? ?
  10. ????public?User?getUser()?{??? ?
  11. ????????return?user;??? ?
  12. ????}??? ?
  13. ????public?void?setUser(User?user)?{??? ?
  14. ????????this.user?=?user;??? ?
  15. ????}??? ?
  16. ????public?Group?getGroup()?{??? ?
  17. ????????return?group;??? ?
  18. ????}??? ?
  19. ????public?void?setGroup(Group?group)?{??? ?
  20. ????????this.group?=?group;??? ?
  21. ????}??? ?
  22. ????public?String?getRole()?{??? ?
  23. ????????return?role;??? ?
  24. ????}??? ?
  25. ????public?void?setRole(String?role)?{??? ?
  26. ????????this.role?=?role;??? ?
  27. ????}??? ?
  28. ????public?long?getDbid()?{??? ?
  29. ????????return?dbid;??? ?
  30. ????}??? ?
  31. ????public?void?setDbid(long?dbid)?{??? ?
  32. ????????this.dbid?=?dbid;??? ?
  33. ????}??? ?
  34. }?? ?

?

当然,上面三个类里面的字段可能不满足实际需求,但是没有关系,我们可以添加新的字段。

二:第一步完成了,那么就开始第二步。第二步的主要任务就是将这些类映射到数据库里。由于JBPM的持久层的操作采用的是Hibernate进行的。所以我们必须编写一个Hibernate的映射文件将实体类映射到数据库。这个映射文件可以写在任何位置,但一般建议写到ClassPath路径下面。具体的代码如下:

XML代码

?

  1. xml?version="1.0"?>??? ?
  2. >??? ?
  3. <hibernate-mapping>??? ?
  4. ????<class?name="en.estar.jbpm.identify.MyUserImpl"?table="JBPM4_MyUser">??? ?
  5. ????????<id?name="dbid"?column="id">??? ?
  6. ????????????<generator?class="assigned"?/>??? ?
  7. ????????id>??? ?
  8. ????????<property?name="id"?column="userId">property>??? ?
  9. ????????<property?name="username">property>??? ?
  10. ????????<property?name="password">property>??? ?
  11. ????????<property?name="age">property>??? ?
  12. ????????<property?name="sex">property>??? ?
  13. ????????<property?name="tel">property>??? ?
  14. ????class>??? ?
  15. ??????? ?
  16. ????<class?name="en.estar.jbpm.identify.MyGroupImpl"?table="JBPM4_MyGroup">??? ?
  17. ????????<id?name="dbid"?column="id">??? ?
  18. ?????????????<generator?class="assigned"?/>??? ?
  19. ????????id>??? ?
  20. ????????<property?name="groupName">property>??? ?
  21. ????????<property?name="groupType">property>??? ?
  22. ????????<many-to-one?name="parentGroup"?? ?
  23. ?????????????????column="parent"???? ?
  24. ?????????????????class="en.estar.jbpm.identify.MyGroupImpl"?? ?
  25. ?????????????????foreign-key="FK_GROUP_PARENT"/>??? ?
  26. ????class>??? ?
  27. ??????? ?
  28. ??????? ?
  29. ????<class?name="en.estar.jbpm.identify.MyMembershipImpl"?table="JBPM4_MyMembership">??? ?
  30. ????????<id?name="dbid"?column="id">??? ?
  31. ??????????<generator?class="assigned"/>??? ?
  32. ????????id>??? ?
  33. ????????<many-to-one?name="user"?? ?
  34. ?????????????????????column="USER_"???? ?
  35. ?????????????????????class="en.estar.jbpm.identify.MyUserImpl"?? ?
  36. ?????????????????????foreign-key="FK_MEM_USER"/>??? ?
  37. ??????? ?
  38. ????????<many-to-one?name="group"?? ?
  39. ?????????????????????column="GROUP_"???? ?
  40. ?????????????????????class="en.estar.jbpm.identify.MyGroupImpl"?? ?
  41. ?????????????????????foreign-key="FK_MEM_GROUP"/>??? ?
  42. ??????? ?
  43. ????????<property?name="role"?column="name"?/>??? ?
  44. ??class>??? ?
  45. 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 的实际内容,结果里面就一句话:?。有了这句话,就相当于告诉了JBPM,它将会去调用JBPM自带的关于用户体系操作的一个接口IdentitySession。这个类的实现IdentitySessionImpl里就会默认去调用JBPM自带的用户关系管理的数据表。所以为了改变JBPM的这种习惯,我们就必须自己创建一个类,并实现接口IdentitySession。这样JBPM就会去调用我们自己的实现,而不会再去调用它自己的东东。要实现这个只需要把他的配置文件jbpm.identity.cfg.xml 的import resource="jbpm.identity.cfg.xml“注释掉,然后加上一句:

XML代码

?

  1. <transaction-context>??? ?
  2. ???????<hibernate-session?current="true"/>??? ?
  3. ??????<object??class="en.estar.jbpm.identify.MesIdentitySessionImpl">??? ?
  4. ????????object>??? ?
  5. transaction-context>?? ?

?

?

?

这样就OK了。下面的任务就是去实现MesIdentitySessionImpl中的方法了。不过我认为,里边的方法没有必要全部实现,把几个find开头的方法实现了就行了,其他的诸如,创建用户,创建组,删除用户等等之类的,我们就没有必要实现了,必要的时候我们可以自己单独写方法实现,就不需要放到该类当中了。

?

转载:http://developer.51cto.com/art/201103/248633.htm

读书人网 >开源软件

热点推荐