JBPM4.4中嵌入自己的用戶體系
很多時候,JBPM自己提供的用戶系統是不夠用的,這時候就要求我們自己去擴展自己的用戶體系。JBPM允許外掛一個用戶體系。
如果想嵌入自己的用戶體系,只需如下幾步:
一:創(chuàng)建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" />
- < span>id>
- <property name="id" column="userId">< span>property>
- <property name="username">< span>property>
- <property name="password">< span>property>
- <property name="age">< span>property>
- <property name="sex">< span>property>
- <property name="tel">< span>property>
- < span>class>
- <class name="en.estar.jbpm.identify.MyGroupImpl" table="JBPM4_MyGroup">
- <id name="dbid" column="id">
- <generator class="assigned" />
- < span>id>
- <property name="groupName">< span>property>
- <property name="groupType">< span>property>
- <many-to-one name="parentGroup"
- column="parent"
- class="en.estar.jbpm.identify.MyGroupImpl"
- foreign-key="FK_GROUP_PARENT"/>
- < span>class>
- <class name="en.estar.jbpm.identify.MyMembershipImpl" table="JBPM4_MyMembership">
- <id name="dbid" column="id">
- <generator class="assigned"/>
- < span>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" />
- < span>class>
- < span>hibernate-mapping>
上面的代碼是仿照JBPM默認的映射文件jbpm.identity.hbm.xml寫的。這個文件可以在JBPM的源代碼里面找到,導入jar包時,它被封裝在jbpm.jar里面。映射文件配置好了之后,只需在hibernate的配置文件jbpm.hibernate.cfg.xml中加上一句話
三:通過以上兩步,就完成了由實體類到數據庫的映射,也就是說,當你啟動tomcat運行JBPM的時候,數據庫里就會多出三張表:JBPM4_MyUser,JBPM4_MyGroup,JBPM4_MyMembership。雖然如此,但是這只是利用了hibernate的自動生成數據表的功能產生了三個表而已,JBPM憑什么知道我需要使用的是我新創(chuàng)建的這三張表,而不會去調用原來的那三張表呢?答案是,他不知道。
所以我們要繼續(xù)進行配置。找到jbpm的一個配置文件叫:jbpm.cfg.xml。在這個文件里面原來有一句話:
import resource="jbpm.identity.cfg.xml"。我們可以去查看jbpm.identity.cfg.xml 的實際內容,結果里面就一句話:
XML代碼
- <transaction-context>
- <hibernate-session current="true"/>
- <object class="en.estar.jbpm.identify.MesIdentitySessionImpl">
- < span>object>
- < span>transaction-context>
這樣就OK了。下面的任務就是去實現MesIdentitySessionImpl中的方法了。不過我認為,里邊的方法沒有必要全部實現,把幾個find開頭的方法實現了就行了,其他的諸如,創(chuàng)建用戶,創(chuàng)建組,刪除用戶等等之類的,我們就沒有必要實現了,必要的時候我們可以自己單獨寫方法實現,就不需要放到該類當中了。
【編輯推薦】