之前做一个基于JBPM4.4的工作流系统,当中涉及到工作流中的人员与原有系统组织人员的整合的工作,通过实现IdentitySession接口来完成调用现有系统的人员和组代码如下
最近新的系统中考虑用Jbpm的升级版本Activiti,因为activiti的底层不再依赖hibernate,可以更加灵活的使用,并且也完美支持BPMN2.0协议。在新系统开发中也遇到了与系统的组织人员集成的问题,抛弃系统自带的Act_ID_XXX,使用系统自己的组织人员权限控制组件。
因为 Activiti是在jbpm4.X的基础上发展而来的,而Jbpm4.4是支持这种扩展的,所以想Tom baeyens没有那么傻吧。于是搜索 Activiti IdentitySession。发现竟然在5.8版本里已经被舍弃了!!!后来又在网上找,看了几种方法大致有 在自己的业务系统人员组织的CRUD代码中同步执行到ACT-ID-*表中,还有就是自己实现IdentityService接口。
从http://nanquan.iteye.com/blog/1544146
文章中我们可以学到一些调用其他认证方法的解决思路 参考这篇文章我们可以修改下完成与实现自有系统用户体系的用户与审批组
1,MyUserManager/MyGroupManager extends UserManager/GroupManager
2,MyUserManagerFactory/MyGroupManagerFactory implements SessionFactory
import com.tds.activit.impl.MyUserManager;
public class MyUserManagerFactory implements SessionFactory {
@Override
public Class<?> getSessionType() {
return UserManager.class;
}
@Override
public Session openSession() {
return new MyUserManager();
}
}
import com.tds.activit.impl.MyGroupManager;
public class MyGroupManagerFactory implements SessionFactory{
@Override
public Class<?> getSessionType() {
return GroupManager.class;
}
@Override
public Session openSession() {
return new MyGroupManager();
}
}
3,注入processEngineConfiguration
<property name="customSessionFactories">
<list>
<bean class="org.activiti.examples.my.factorys.MyUserManagerFactory" />
<bean class="org.activiti.examples.my.factorys.MyGroupManagerFactory" />
</list>
</property>
public class UserSession implements IdentitySession
{
private UserService userService = (UserService) SpringContextHolder.getBean("userService");
private OrgnationService orgnationService = (OrgnationService) SpringContextHolder.getBean("orgnationService");
private ApproverGroupService approverGroupService = (ApproverGroupService) SpringContextHolder.getBean("approverGroupService");
// ---------------------------------methods above are not need overwrite--------------------------------------------
@Override
public Group findGroupById(String groupId)
{
return approverGroupService.get(new Long(groupId));
}
@Override
public List<Group> findGroupsByUser(String userId)
{
// cn.com.todaysoft.oa.domain.org.User user = userService.get(new Long(userId));
cn.com.todaysoft.oa.domain.org.User user = orgnationService.getUser(new Long(userId));
List<Group> list = new ArrayList<Group>();
Iterator it = user.getApproverGroups().iterator();
while (it.hasNext())
{
list.add((Group) it.next());
}
return list;
}
@Override
public List<Group> findGroupsByUserAndGroupType(String userId, String groupType)
{
return findGroupsByUser(userId);
}
@Override
public User findUserById(String userId)
{
return userService.get(new Long(userId));
}
@Override
public List<User> findUsers()
{
List<cn.com.todaysoft.oa.domain.org.User> userList = userService.getAll();
List<User> list = new ArrayList<User>();
for (User user : userList)
{
list.add((User) user);
}
return list;
}
@Override
public List<User> findUsersByGroup(String groupId)
{
List<cn.com.todaysoft.oa.domain.org.User> userList = userService.findByGroupId(new Long(groupId));
List<User> list = new ArrayList<User>();
for (User user : userList)
{
list.add((User) user);
}
return list;
}
@Override
public List<User> findUsersById(String... userIds)
{
// TODO Auto-generated method stub
return null;
}
}
分享到:
相关推荐
目录 1. 简介 2. 开始学习 3. 配置 4. Activiti API 5. Spring集成 6. 部署 7. BPMN 2.0介绍 8. BPMN 2.0结构 9. 表单 ...17. 集成LDAP 18. 高级功能 19. 使用Activiti-Crystalball进行流程仿真(实验)
与Activiti,Drools,LDAP,MySQL,带有SwaggerUI的Restful API,AngularJS + Ionic等的Spring-boot集成。 什么? 使用SpringBoot框架来设置RESTful API包装Activiti API。 并使用Swagger-UI可视化RESTful API,...
1. 简介 2. 开始学习 3. 配置 4. Activiti API 5. Spring集成 6. 部署 7. BPMN 2.0介绍 8. BPMN 2.0结构 9. 表单 10. JPA ...12. Eclipse Designer 13. Activiti Explorer ...17. 集成LDAP 18. 高级功能
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...
1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...