流程配置文件分为两类:
一类是普通的基本配置,称作 plain Activiti Style Configuration,使用的文件名为 activiti.cfg.xml
一类是复杂配置,称作 Spring Style Configuration , 使用的文件名为 activiti-context.xml
除了配置内容的不同,本质上两者都是Spring的配置文件。
下面是两个文件的样例:
activiti.cfg.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration"> <property name="databaseSchemaUpdate" value="true"/> </bean> </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:security="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <!-- Embedded ldap test server --> <security:ldap-server ldif="classpath:users.ldif" root="o=activiti" manager-dn="uid=admin, ou=users" manager-password="admin"/> <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> <property name="driverClass" value="org.h2.Driver" /> <property name="url" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" /> <property name="username" value="sa" /> <property name="password" value="" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="dataSource" ref="dataSource" /> <property name="transactionManager" ref="transactionManager" /> <property name="databaseSchemaUpdate" value="true" /> <property name="jobExecutorActivate" value="false" /> <property name="configurators"> <list> <bean class="org.activiti.ldap.LDAPConfigurator"> <!-- Server connection params --> <property name="server" value="ldap://localhost" /> <property name="port" value="33389" /> <property name="user" value="uid=admin, ou=users, o=activiti" /> <property name="password" value="pass" /> <!-- Query params --> <property name="baseDn" value="o=activiti" /> <property name="queryUserByUserId" value="(&(objectClass=inetOrgPerson)(uid={0}))" /> <property name="queryUserByFullNameLike" value="(&(objectClass=inetOrgPerson)(|({0}=*{1}*)({2}=*{3}*)))" /> <property name="queryGroupsForUser" value="(&(objectClass=groupOfUniqueNames)(uniqueMember={0}))" /> <!-- Attribute config --> <property name="userIdAttribute" value="uid" /> <property name="userFirstNameAttribute" value="cn" /> <property name="userLastNameAttribute" value="sn" /> <property name="groupIdAttribute" value="uid" /> <property name="groupNameAttribute" value="cn" /> </bean> </list> </property> </bean> <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"> <property name="processEngineConfiguration" ref="processEngineConfiguration" /> </bean> <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" /> <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" /> <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" /> </beans>
两个文件最主要的区别就是用 实现 ProcessEngineConfiguration 接口,继承了 ProcessEngineConfigurationImpl 的不同配置子类,实现不同环境下的配置。
在配置文件中,指明 ProcessEngineConfiguration 由哪个子类实现提供信息。
Activiti 提供的 ProcessEngineConfiguration 子类,列举在下图中配置类边界中。
前面文章 http://blog.csdn.net/teamlet/article/details/43097141 提到过,ProcessEngine的名字会作为 key 保存引擎的配置文件。
Activiti 默认提供了一个引擎名字,名字为 default
上面的两个配置文件中都没有提供引擎的名字,会导致使用默认的引擎名字 default
使用相同的引擎名字,会移除上一个同名引擎实例并重新创建同名引擎。
这个机制比较适合动态刷新一个引擎,利于引擎的动态修改。
如果想要多个引擎同时运行,注意修改或在配置文件中增加引擎名字。
代码方法:
ProcessEngine processEngine = new StandaloneProcessEngineConfiguration() .setProcessEngineName("myProcessEngine")
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="processEngineName" value="myProcessEngine" /> ... </bean>