JBPM4.4中嵌入自己的用户体系
创始人
2024-07-22 20:31:19
0

很多时候,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.      
  2. >     
  3.      
  4.          
  5.              
  6.                  
  7.         id>     
  8.         property>     
  9.         property>     
  10.         property>     
  11.         property>     
  12.         property>     
  13.         property>     
  14.     class>     
  15.          
  16.          
  17.              
  18.                   
  19.         id>     
  20.         property>     
  21.         property>     
  22.                          column="parent"      
  23.                  class="en.estar.jbpm.identify.MyGroupImpl"    
  24.                  foreign-key="FK_GROUP_PARENT"/>     
  25.     class>     
  26.          
  27.          
  28.          
  29.              
  30.                
  31.         id>     
  32.                              column="USER_"      
  33.                      class="en.estar.jbpm.identify.MyUserImpl"    
  34.                      foreign-key="FK_MEM_USER"/>     
  35.          
  36.                              column="GROUP_"      
  37.                      class="en.estar.jbpm.identify.MyGroupImpl"    
  38.                      foreign-key="FK_MEM_GROUP"/>     
  39.          
  40.              
  41.   class>     
  42. 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.      
  2.             
  3.            
  4.         object>     
  5. transaction-context>    

 

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

【编辑推荐】

  1. 使用JBoss jBPM实现流程访问和执行的授权
  2. jBPM实现高级交互模式详解
  3. Java工作流管理系统jBPM 4.3发布 支持BPMN 2.0
  4. jBPM4.1发布 改进多项Tomcat支持

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...