基於Activiti5.15.1 自定義用戶、組(User,Group)實現


基於Activiti5.15.1 自定義用戶、組(User,Group)實現

     本人剛接觸Activiti,最近工作中需要將Activiti中原有的用戶,組(ACT_ID_USER,ACT_ID_GROUP,ACT_ID_MEMBERSHIP)表替換為公司已有的相關表。查看了咖啡兔論壇相關文章。今天有空整理一下。以幫助后續有此需要的初學者。

 

自定義Group,User工廠類,實現SessionFactory接口

1)CustomGroupEntityManagerFactory

 

@Service
public class CustomGroupEntityManagerFactory implements SessionFactory {

    private CustomGroupEntityManager customGroupEntityManager;

    @Override
    public Class<?> getSessionType() {
     //注意此處必須為Activiti原生的類,否則自定義類不會生效
        return GroupIdentityManager.class;
    }

    @Override
    public Session openSession() {
        return customGroupEntityManager;
    }

    @Autowired
    public void setCustomGroupEntityManager(CustomGroupEntityManager customGroupEntityManager) {
        this.customGroupEntityManager = customGroupEntityManager;
    }
}

 

2)CustomUserEntityManagerFactory

@Service
public class CustomUserEntityManagerFactory implements SessionFactory {

    private CustomUserEntityManager customUserEntityManager;

    @Override
    public Class<?> getSessionType() {
       //注意此處也必須為Activiti原生類
        return UserIdentityManager.class;
    }

    @Override
    public Session openSession() {
        return customUserEntityManager;
    }

    @Autowired
    public void setCustomUserEntityManager(CustomUserEntityManager customUserEntityManager) {
        this.customUserEntityManager = customUserEntityManager;
    }
}

3)CustomGroupEntityManager

 1 @Component
 2 public class CustomGroupEntityManager extends GroupEntityManager {
 3     private static final Log logger = LogFactory
 4             .getLog(CustomGroupEntityManager.class);
 5 
 6     @Autowired
 7     private UserMapper userMapper;//用於查詢實際業務中用戶表、角色等表
 8 
 9 
10     @Override
11     public List<Group> findGroupsByUser(final String userCode) {
12         if (userCode == null)
13             return null;
14 
15         List<Role> bGroupList = userMapper.getGroupByUserName(userCode);
16 
17         List<Group> gs = new java.util.ArrayList<>();
18         GroupEntity g;
19         String roleId;
20         String activitRole;
21         for (Role bGroup : bGroupList) {
22             g = new GroupEntity();
23             g.setRevision(1);
24             g.setType("assignment");
25             roleId = String.valueOf(bGroup.getRoleID());
26             activitRole = bindGroupWithRole.get(roleId);//此處只是根據RoleId獲取RoleCode, 因實際表中無RoleCode字段,暫且如此實際,此行可注釋掉
27             g.setId(activitRole != null ? activitRole : roleId);
28             g.setName(bGroup.getRoleName());
29             gs.add(g);
30         }
31         return gs;
32     }
33 }

4)CustomUserEntityManagerFactory

@Component
public class CustomUserEntityManager extends UserEntityManager {
    private static final Log logger = LogFactory.getLog(CustomUserEntityManager.class);

    @Autowired
    private UserMapper userMapper;

    @Override
    public UserEntity findUserById(String userId) {
        UserEntity userEntity = new UserEntity();
        com.jimubox.transformers.model.user.User cue = userMapper.getUserByUserName(userId);
        ActivitiUtils.toActivitiUser(cue);
        return userEntity;
    }

    @Override
    public List<Group> findGroupsByUser(final String userCode) {
        if (userCode == null)
            return null;

        List<String> groupIds = userMapper.getGroupIdsByUserName(userCode);

        List<Group> gs = null;
        gs = Utils.toActivitiGroups(groupIds);
        return gs;

    }

  
}

5)applicationContext.xml

<!-- Activiti begin -->
    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <property name="databaseType" value="mysql"/>
        <property name="dataSource" ref="dataSource"/>
        <property name="transactionManager" ref="transactionManager"/>
        <property name="databaseSchemaUpdate" value="true"/>
        <property name="jobExecutorActivate" value="false"/>
        <property name="history" value="activity"/>
        <property name="processDefinitionCacheLimit" value="10"/>
        <!-- JPA -->
        <property name="jpaEntityManagerFactory" ref="entityManagerFactory"/>
        <property name="jpaHandleTransaction" value="true"/>
        <property name="jpaCloseEntityManager" value="true"/>
        
     <property name="customSessionFactories"> <list> <bean class="com.jimubox.transformers.factory.workflow.CustomUserEntityManagerFactory"> <property name="customUserEntityManager" ref="customUserEntityManager"/> </bean> <bean class="com.jimubox.transformers.factory.workflow.CustomGroupEntityManagerFactory"> <property name="customGroupEntityManager" ref="customGroupEntityManager"/> </bean> </list> </property>

    </bean>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM