1. 程式人生 > >Activiti整合到spring中配置

Activiti整合到spring中配置

1、匯入activiti相應的jar包
使用用maven,在pox.xml中配置

<dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>5.21.0</version>
        </dependency>
        <dependency>
            <groupId
>
org.activiti</groupId> <artifactId>activiti-spring</artifactId> <version>5.21.0</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-rest</artifactId
>
<version>5.21.0</version> </dependency>

在spring.xml中配置

    <!--  Activiti配置 Start -->
    <!-- 單例json物件 -->
    <bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"/>

    <!-- 自定義使用者模組 -->
    <bean id="customUserEntityManager"
class="cn.com.agree.aweb.springmvc.activiti.CustomUserEntityManager">
</bean> <bean id="customGroupEntityManager" class="cn.com.agree.aweb.springmvc.activiti.CustomGroupEntityManager"> </bean> <!-- Activiti引擎配置 --> <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="processEngineName" value="spring"></property> <property name="dataSource" ref="jndiDataSource" /> <property name="transactionManager" ref="transactionManager" /> <property name="databaseSchemaUpdate" value="true" /> <property name="jobExecutorActivate" value="false" /> <!-- web服務重啟時自動部署流程檔案,自動部署引擎資料庫中不存在或修改過的流程定義 --> <!-- <property name="deploymentResources"> <list> <value>bpmn/*.bpmn</value> </list> </property> --> <!-- 自定義使用者模組 --> <property name="customSessionFactories"> <list> <bean class="cn.com.agree.aweb.springmvc.activiti.CustomUserEntityManagerFactory"></bean> <bean class="cn.com.agree.aweb.springmvc.activiti.CustomGroupEntityManagerFactory"></bean> </list> </property> </bean> <!-- Activiti引擎工廠 --> <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"> <property name="processEngineConfiguration" ref="processEngineConfiguration" /> </bean> <!-- Activiti的7個Service --> <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" /> <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" /> <bean id="formService" factory-bean="processEngine" factory-method="getFormService" /> <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" /> <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" /> <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" /> <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" /> <!-- 整合REST服務需要的bean --> <bean id="restResponseFactory" class="org.activiti.rest.service.api.RestResponseFactory" /> <bean id="contentTypeResolver" class="org.activiti.rest.common.application.DefaultContentTypeResolver" /> <!-- Activiti配置 End -->

使用7個service,實現工作流的全部操作。
資料來源使用專案已配置的資料來源。
自定義使用者模組(使用專案中的使用者管理模組,放棄使用activiti的使用者表),重寫相應的類,對應配置中customSessionFactories的屬性值,示例使用者自定義如下:

package cn.com.agree.aweb.springmvc.activiti;

import org.activiti.engine.impl.interceptor.Session;
import org.activiti.engine.impl.interceptor.SessionFactory;
import org.activiti.engine.impl.persistence.entity.UserIdentityManager;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * @Description: 自定義使用者
 * @author chenrui  [email protected]
 * @date 2016年8月2日
 *
 */
public class CustomUserEntityManagerFactory implements SessionFactory{

    @Autowired
    private CustomUserEntityManager customUserEntityManager;

    @Override
    public Class<?> getSessionType() {
        return UserIdentityManager.class;
    }

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



}

該類繼承UserEntityManager,重寫對應方法

package cn.com.agree.aweb.springmvc.activiti;

import java.util.List;
import java.util.Map;

import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.Picture;
import org.activiti.engine.identity.User;
import org.activiti.engine.identity.UserQuery;
import org.activiti.engine.impl.Page;
import org.activiti.engine.impl.UserQueryImpl;
import org.activiti.engine.impl.persistence.entity.IdentityInfoEntity;
import org.activiti.engine.impl.persistence.entity.UserEntity;
import org.activiti.engine.impl.persistence.entity.UserEntityManager;
import org.springframework.beans.factory.annotation.Autowired;

import cn.com.agree.aweb.exception.DBSupportException;
import cn.com.agree.aweb.hibernate.IDbSupport;
import cn.com.agree.aweb.hibernate.entity.UserVO;

/**
 * @Description: 自定義使用者管理
 * @author chenrui  [email protected]
 * @date 2016年8月2日
 *
 */
public class CustomUserEntityManager extends UserEntityManager{
    @Autowired
    private IDbSupport dbSupport;

    @Override
    public User findUserById(String userId) {
        User userEntity = new UserEntity();
        try {
            UserVO userVO = queryUserByUsername(userId);
            userEntity.setId(userVO.getUserId());
            userEntity.setFirstName(userVO.getNickname());
            userEntity.setLastName(userVO.getNickname());
            userEntity.setPassword(userVO.getPassword());
            userEntity.setEmail(userVO.getMailbox());
        } catch (DBSupportException e) {
            e.printStackTrace();
        }
        return userEntity;
    }



    @Override
    public User createNewUser(String userId) {
        // TODO Auto-generated method stub
        User user = new UserEntity();
        return user;
    }




    @Override
    public void insertUser(User user) {
        // TODO Auto-generated method stub
        super.insertUser(user);
    }




    @Override
    public void updateUser(User updatedUser) {
        // TODO Auto-generated method stub
        super.updateUser(updatedUser);
    }

    @Override
    public void deleteUser(String userId) {
        // TODO Auto-generated method stub
        super.deleteUser(userId);
    }




    @Override
    public List<User> findUserByQueryCriteria(UserQueryImpl query, Page page) {
        // TODO Auto-generated method stub
        return super.findUserByQueryCriteria(query, page);
    }




    @Override
    public long findUserCountByQueryCriteria(UserQueryImpl query) {
        // TODO Auto-generated method stub
        return super.findUserCountByQueryCriteria(query);
    }




    @Override
    public List<Group> findGroupsByUser(String userId) {
        // TODO Auto-generated method stub
        return super.findGroupsByUser(userId);
    }




    @Override
    public UserQuery createNewUserQuery() {
        // TODO Auto-generated method stub
        return super.createNewUserQuery();
    }




    @Override
    public IdentityInfoEntity findUserInfoByUserIdAndKey(String userId,
            String key) {
        // TODO Auto-generated method stub
        return super.findUserInfoByUserIdAndKey(userId, key);
    }




    @Override
    public List<String> findUserInfoKeysByUserIdAndType(String userId,
            String type) {
        // TODO Auto-generated method stub
        return super.findUserInfoKeysByUserIdAndType(userId, type);
    }




    @Override
    public Boolean checkPassword(String userId, String password) {
        // TODO Auto-generated method stub
        return super.checkPassword(userId, password);
    }




    @Override
    public List<User> findPotentialStarterUsers(String proceDefId) {
        // TODO Auto-generated method stub
        return super.findPotentialStarterUsers(proceDefId);
    }




    @Override
    public List<User> findUsersByNativeQuery(Map<String, Object> parameterMap,
            int firstResult, int maxResults) {
        // TODO Auto-generated method stub
        return super.findUsersByNativeQuery(parameterMap, firstResult, maxResults);
    }




    @Override
    public long findUserCountByNativeQuery(Map<String, Object> parameterMap) {
        // TODO Auto-generated method stub
        return super.findUserCountByNativeQuery(parameterMap);
    }




    @Override
    public boolean isNewUser(User user) {
        // TODO Auto-generated method stub
        return super.isNewUser(user);
    }




    @Override
    public Picture getUserPicture(String userId) {
        // TODO Auto-generated method stub
        return super.getUserPicture(userId);
    }




    @Override
    public void setUserPicture(String userId, Picture picture) {
        // TODO Auto-generated method stub
        super.setUserPicture(userId, picture);
    }




    /**
     * @param username
     * @return
     * @throws DBSupportException
     */
    @SuppressWarnings("unchecked")
    public UserVO queryUserByUsername(String username) throws DBSupportException {
        List<UserVO> userList = (List<UserVO>) dbSupport.queryDataByClass(UserVO.class, 
                new String[] {"username"}, 
                new String[] {username});

        if (userList.size() == 1) {
            return userList.get(0);
        } 

        return null;
    }


}

釋出REST API

在web.xml中配置

    <!-- Rest介面 Start-->
    <servlet>
        <servlet-name>RestServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>WEB-INF/classes/spring-mvc-rest.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>RestServlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
    <!-- Rest介面 end -->

spring-mvc-rest.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

    <!-- 自動掃描且只掃描@Controller -->
    <context:component-scan base-package="org.activiti.rest">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>

    <mvc:annotation-driven />
</beans>

相關推薦

Activiti整合spring配置

1、匯入activiti相應的jar包 使用用maven,在pox.xml中配置 <dependency> <groupId>org.activiti</groupId>

spring配置監聽隊列的MQ

msl tin listen ann lazy ati app ssa clas 一、spring中配置監聽隊列的MQ相關信息註:${}是讀取propertites文件的常量,這裏忽略。綠色部分配置在接收和發送端都要配置。 <bean id="axx" class=

mybatis整合spring獲取配置文件信息出錯

localhost tis jdb 密碼 文件信息 connect 後來 顯示 dmi 描述:mybatis整合spring加載jdbc.properties文件,然後使用裏面配置的值來 配置數據源,後來發現用戶變成了admin… jdbc.properties的配置:

Spring配置檔案application xml配置的含義

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Spring配置Quartz的過程;Spring與Quartz的相容問題

1. 根據spring和Quratz的版本不同,觸發器的方法可能不同,有org.springframework.scheduling.quartz.SimpleTriggerFactoryBean和org.springframework.scheduling.quar

spring配置profile

1、新建一個maven專案,匯入如下依賴 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <sprin

Java如何獲取Spring配置的bean

Spring中的ApplicationContexts可以被限制在不同的作用域。在web框架中,每個DispatcherServlet有它自己的WebApplicationContext,它包含了DispatcherServlet配置所需要的bean。DispatcherServlet 使用的預設BeanF

Spring配置和讀取多個Properties檔案--轉

    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">       &

Spring配置資料來源的幾種方式

無論使用什麼形式的Spring DAO支援類,都需要配置資料來源的引用。Spring提供了多個選項,用於在Spring程式裡配置資料庫,其中包括: 1,由JDBC驅動程式定義的資料來源。 2,由JNDI查詢的資料來源。 3,連線池的資料來源。 在Spring裡,我們可以像使用其他

Java如何獲取spring配置的properties屬性檔案內容

1、通過spring配置properties檔案 <bean id="propertyConfigurer"class="com.tjsoft.base.util.CustomizedPropertyPlaceholderConfigurer"><pro

如何在spring配置集合供多個Bean使用

一:Utility   Scheme 1.使用基本的集合標籤定義集合時,不能將集合作為獨立的Bean定義,導致其他Bean無法引用該集合,所以無法在不同Bean之間 共享集合。 2.可以使用Utility  Scheme裡的集合標籤定義獨立的集合Bean,需要的是在B

EhCache 介紹和在spring配置

<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehca

Spring配置使用slf4j + log4j

https code control api 產生 eap ces jsp prop 本人也是查看別人博客獲得的方法,詳細講解請參照 https://www.cnblogs.com/yuxiaole/p/9297266.html 下面進入正題: 1.在pom.xml中註入相

Hibernate 事務處理和spring配置事務

原文連結:http://blog.csdn.net/sd0902/article/details/8393700 1.非整合spring事務管理 事務是指由一個或者多個SQL語句組成的工作單元,這個單元中SQL語句只要有一個SQL語句執行失敗,就會撤銷整個工作單元

Spring配置aspectj模式

在事務,快取中,Spring通常提供了兩種模式:proxy和aspectj。 要成功的配置aspectj模式,前提是成功配置aspectj。 aspectJ有兩種植入方式:CTW(Compile Time Weaving)和LTW(Load Time Weaving),兩種

Spring配置資料來源的4種形式

    C3P0擁有比DBCP更豐富的配置屬性,通過這些屬性,可以對資料來源進行各種有效的控制:     acquireIncrement:當連線池中的連線用完時,C3P0一次性建立新連線的數目;     acquireRetryAttempts:定義在從資料庫獲取新連線失敗後重復嘗試獲取的次數,預設為30;

spring配置hibernate.hbm2ddl.auto=true自動建表

今天 在spring中配置了 hibernate 的hibernate.hbm2ddl.auto 屬性為update ,配置資訊如下:     <property name="hibernateProperties"> <value> <!--

spring配置mongodb的使用者名稱和密碼

1、在spring的配置檔案中 <?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="ht

spring配置hibernate事務管理,出錯時事物不回滾

今天進行了spring整合hibernate,進行事務管理。出現了事務不回滾。檢查了好多遍,業務邏輯和配置檔案都沒有出錯,但是事務依舊不回滾,很是鬱悶。在網上查了很多資料。轉載一位博主的文章,挺不錯。 http://blog.csdn.net/u011622226/arti

Spring配置執行緒池ThreadPoolExecutor參考

<bean id="executorService" class="java.util.concurrent.ThreadPoolExecutor"> <constructor-