Адрес в открытом доступе:git ee.com/blue Joe/ о, квота…(приветственная звезда)
1. Обзор OpenWebFlow
OpenWebFlow — это механизм рабочего процесса, основанный на расширениях Activiti. Активити (официальный сайтactiviti.org/, код размещен по адресуGitHub.com/act IV Вопрос I/AC…) Это новый продукт, основанный на BPM с открытым исходным кодом, поддерживает стандарт Apache BPMN 2.0 по лицензии, это легкий, встраиваемый BPM Engine, а также предоставляет многофункциональные инструменты разработки и проектирования процессов. OpenWebFlow и взаимосвязь между системой бизнес-приложений, как показано на фиг.
По сравнению с Activiti функции, расширенные OpenWebFlow, включают:
1) Полностью взял на себя Activiti управление разрешениями на деятельность.
Activiti позволяет указать полномочия на выполнение каждой операции при проектировании модели, однако бизнес-системе может потребоваться динамическая установка полномочий на выполнение этих задач в соответствии с реальной ситуацией (например, динамическая группа). OpenWebFlow полностью реализует отделение от периода определения процесса, то есть информация о контроле доступа пользователя для действий управляется отдельно (вместо того, чтобы быть предварительно записанной в определении процесса), что способствует динамической настройке разрешений. Пользовательское управление разрешениями на действия;
2) Полностью взял на себя управление пользовательской таблицей Activiti (таблица IDENTITY_XXX).
В стандартном определении рабочего процесса каждый узел может указывать своих кандидатов и группы пользователей-кандидатов, но, к сожалению, Activiti похитила дизайн таблицы с информацией о пользователях! Это действительно фатально, потому что почти каждая бизнес-система будет иметь свою собственную структуру информации о пользователе (включая User/Group/Membership), но она не обязательно хранится в той библиотеке, которая нравится Activiti, и структура таблицы не обязательно будет такой же В то время некоторая информация (например: динамическая группа) вообще не сохраняется в таблице. OpenWebFlow отключает унифицированное управление таблицей информации о пользователях, и клиентская программа может забыть о пользовательской таблице, таблице групп и таблице членства Activiti.Подробности см. в разделе Управление пользовательским членством;
3) Разрешить время выполнения, чтобы определить действия!
Полностью соответствует «китайским характеристикам» и обеспечивает безопасные (и элегантные) функции, такие как побуждение, агентирование, подписание (включая предварительное/после подписания), свободный переход (включая вперед/назад) и разделение узлов;
2. Начните быстро
2.1 Знакомство с инфраструктурой OpenWebFlow
2.1.1 Представление OpenWebFlow в виде jar-файла
Форма выпуска OpenWebFlow представляет собой набор обычных jar-файлов, среди которых openwebflow-core.XXX.jar содержит основной модуль управления рабочим процессом и модуль реализации менеджера на основе памяти.
Кроме того, OpenWebFlow также предоставляет несколько jar-файлов: openwebflow-mgr-hibernate.XXX.jar, openwebflow-mgr-mybatis.XXX.jar, которые предоставляют модуль реализации SQL менеджера, соответственно выбирая hibernate и mybatis в качестве модели ORM. Другой — openwebflow-mgr-test.XXX.jar, содержащий несколько тестовых классов.
Последняя версия адреса загрузки:
https://gitee.com/bluejoe/openwebflow/blob/master/openwebflow-core/target/openwebflow-core-0.9-SNAPSHOT.jar jar с большим вниманием к этим зависимостям, https://gitee.com/bluejoe/openwebflow /tree/master/openwebflow-core/target/lib списки всех зависимостей выглядят следующим образом:
- activation-1.1.jar
- activiti-bpmn-converter-5.16.1.jar
- activiti-bpmn-layout-5.16.1.jar
- activiti-bpmn-model-5.16.1.jar
- activiti-crystalball-5.16.1.jar
- activiti-engine-5.16.1.jar
- activiti-explorer-5.16.1.jar
- activiti-image-generator-5.16.1.jar
- activiti-json-converter-5.16.1.jar
- activiti-process-validation-5.16.1.jar
- activiti-simple-workflow-5.16.1.jar
- activiti-spring-5.16.1.jar
- aopalliance-1.0.jar
- commons-collections-2.0.jar
- commons-dbcp-1.4.jar
- commons-email-1.2.jar
- commons-io-2.4.jar
- commons-lang-2.6.jar
- commons-lang3-3.3.2.jar
- commons-logging-1.1.1.jar
- commons-pool-1.5.4.jar
- dcharts-widget-0.10.0.jar
- groovy-all-2.1.3.jar
- h2-1.3.168.jar
- hamcrest-core-1.3.jar
- imgscalr-lib-4.2.jar
- jackson-annotations-2.2.3.jar
- jackson-core-2.2.3.jar
- jackson-databind-2.2.3.jar
- javaGeom-0.11.1.jar
- jcl-over-slf4j-1.7.6.jar
- jgraphx-1.10.4.1.jar
- joda-time-2.1.jar
- junit-4.12.jar
- log4j-1.2.17.jar
- mail-1.4.1.jar
- mybatis-3.2.8.jar
- mybatis-spring-1.2.2.jar
- mysql-connector-java-5.1.32.jar
- servlet-api-2.5.jar
- slf4j-api-1.7.2.jar
- slf4j-jdk14-1.7.2.jar
- slf4j-log4j12-1.7.6.jar
- spring-aop-3.2.4.RELEASE.jar
- spring-beans-3.2.4.RELEASE.jar
- spring-context-3.2.4.RELEASE.jar
- spring-core-3.2.4.RELEASE.jar
- spring-expression-3.2.4.RELEASE.jar
- spring-jdbc-3.2.4.RELEASE.jar
- spring-orm-3.2.4.RELEASE.jar
- spring-tx-3.2.4.RELEASE.jar
- spring-web-3.2.4.RELEASE.jar
- spring-webmvc-3.2.4.RELEASE.jar
- vaadin-6.8.8.jar
2.1.2 Знакомство с OpenWebFlow от maven
Внедрить OpenWebFlow по пути maven относительно просто, зависимости в pom.xml записываются так:
<dependency>
<groupId>org.openwebflow</groupId>
<artifactId>openwebflow-core </artifactId>
<version>0.9-SNAPSHOT</version>
</dependency>
Перед внедрением зависимостей может потребоваться установить проект OpenWebFlow в локальном репозитории. Конкретная операция заключается в выборе проекта OpenWebFlow в eclipse, [меню правой кнопки мыши] [Maven] [установить].
2.2 Файл конфигурации
Подготовьте файлы конфигурации SpringIoC, а именно settings.properties, activiti.cfg.core.xml и activiti.cfg.mem.xml (или activiti.cfg.sql.XXX.xml):
- settings.properties: настройки публичного свойства
- activiti.cfg.core.xml: основная информация о конфигурации для настройки механизма рабочего процесса;
- activiti.cfg.mem.xml: используется для определения некоторых менеджеров для поддержки работы OpenWebFlow, обратите внимание на mem в имени, это означает, что предоставляется только версия этих менеджеров на основе памяти, и аналогичный файл конфигурации также может быть Активити.cfg.sql.XXX.xml;
2.2.1 settings.properties
Файл settings.properties — это обычный файл свойств, загружаемый файлами Spring IOC. Вот содержимое файла свойств:
mail.host=smtp.bluejoe.cn
mail.port=25
mail.username=sdb-support@cnic.cn
mail.password=sdbsupport
mail.from=sdb-support@cnic.cn
model.dir=../models
alarm.mail.template=classpath:/alarm-template.txt
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.hbm2ddl.auto=none
activitidb.url=jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000
activitidb.driver=org.hDriver
activitidb.username=sa
activitidb.password=
owfdb.url=jdbc:mysql://localhost:3306/openwebflow?useUnicode=true&characterEncoding=UTF-8
owfdb.driver=com.mysql.jdbc.Driver
owfdb.username=root
owfdb.password=1
Значение каждого атрибута следующее:
Имя свойства |
пример значения |
значение |
mail.host |
smtp.bluejoe.cn |
Адрес сервера исходящей почты |
mail.port |
25 |
Номер порта сервера исходящей почты |
mail.username |
sdb-support@cnic.cn |
Имя учетной записи для отправки напоминаний по электронной почте |
mail.password |
sdbsupport |
Пароль учетной записи для отправки напоминаний по электронной почте |
mail.from |
sdb-support@cnic.cn |
отправитель электронной почты с напоминанием |
model.dir |
../models |
Путь к автозагружаемой модели BPMN |
alarm.mail.template |
classpath:/alarm-template.txt |
Шаблон письма с напоминанием |
hibernate.dialect |
org.hibernate.dialect.MySQLDialect |
Гибернатный диалект |
hibernate.hbm2ddl.auto |
none |
Настройки гибернации DDL |
activitidb.url |
jdbc:h2:mem:activiti;DB_CLOSE_DELAY |
URL-адрес JDBC базы данных Activiti |
activitidb.driver |
org.h2.Driver |
JDBC-драйвер базы данных Activiti |
activitidb.username |
sa |
Имя учетной записи базы данных Activiti |
activitidb.password |
|
Пароль учетной записи базы данных Activiti |
owfdb.url |
jdbc:mysql://localhost:3306/openwebflow?useUnicode |
URL JDBC базы данных OpenWebFlow |
owfdb.driver |
com.mysql.jdbc.Driver |
JDBC-драйвер базы данных OpenWebFlow |
owfdb.username |
root |
Имя учетной записи базы данных OpenWebFlow |
owfdb.password |
1 |
Пароль учетной записи базы данных OpenWebFlow |
2.2.2 Конфигурация activiti.cfg.core.xml
Конфигурация файла activiti.cfg.core.xml чем-то похожа на файл конфигурации, требуемый Activiti, но может иметь больше содержимого.Вот пример:
<!-- 工作流核心数据库配置 -->
<bean id="activitiDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${activitidb.driver}" />
<property name="url" value="${activitidb.url}" />
<property name="username" value="${activitidb.username}" />
<property name="password" value="${activitidb.password}" />
<property name="initialSize" value="20" />
<property name="maxActive" value="50" />
<property name="maxIdle" value="20" />
<property name="minIdle" value="10" />
</bean>
<!-- 任务催办配置 -->
<bean id="myTaskAlarmService" class="org.openwebflow.alarm.impl.TaskAlarmServiceImpl">
<!-- 截止日期提前量 -->
<property name="periodInAdvance" value="P2D" />
<!-- 设置消息通知机制 -->
<property name="messageNotifier">
<!-- 采用邮件发送 -->
<bean class="org.openwebflow.alarm.impl.MailMessageNotifier">
<property name="subjectTemplate" value="请尽快处理#{'$'}{task.name}任务" />
<property name="messageTemplateResource" value="${alarm.mail.template}" />
<property name="mailSender">
<bean class="org.openwebflow.alarm.impl.MailSender">
<property name="serverHost" value="${mail.host}" />
<property name="serverPort" value="${mail.port}" />
<property name="authUserName" value="${mail.username}" />
<property name="authPassword" value="${mail.password}" />
<property name="mailFrom" value="${mail.from}" />
</bean>
</property>
</bean>
</property>
<property name="membershipManager" ref="myMembershipManager" />
<property name="userDetailsManager" ref="myUserDetailsManager" />
<property name="taskNotificationManager" ref="myTaskNotificationManager" />
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="activitiDataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 配置对象 -->
<bean id="processEngineConfiguration" class="org.openwebflow.cfg.ProcessEngineConfigurationEx">
<property name="dataSource" ref="activitiDataSource" />
<property name="transactionManager" ref="transactionManager" />
<property name="databaseSchemaUpdate" value="true" />
<property name="jobExecutorActivate" value="false" />
<property name="startEngineEventListeners">
<list>
<!-- 加载自定义表单元素类型 -->
<bean class="org.openwebflow.cfg.LoadDummyFormTypes">
<property name="typeNames" value="user" />
</bean>
<!-- 自定义成员关系管理 -->
<bean class="org.openwebflow.cfg.ReplaceMembershipManager">
<property name="customMembershipManager" ref="myMembershipManager" />
</bean>
<!-- 自定义活动权限管理 -->
<bean class="org.openwebflow.cfg.ReplaceTaskAssignmentHandler">
<!-- 授权处理器列表,会组成一个链,越靠后优先级越高(越靠外) -->
<property name="handlers">
<list>
<!-- 自定义授权项列表 -->
<bean
class="org.openwebflow.assign.permission.ActivityPermissionAssignmentHandler">
<property name="activityPermissionManager" ref="myActivityPermissionManager" />
</bean>
<!-- 允许授权代理 -->
<bean
class="org.openwebflow.assign.delegation.TaskDelagationAssignmentHandler">
<property name="delegationManager" ref="myDelegationManager" />
<property name="membershipManager" ref="myMembershipManager" />
<property name="hideDelegated" value="false" />
</bean>
</list>
</property>
</bean>
<!-- 自动导入流程模型 -->
<bean class="org.openwebflow.cfg.ImportDefinedProcessModels">
<property name="modelDir" value="${model.dir}" />
</bean>
<!-- 启动催办管理器 -->
<bean class="org.openwebflow.cfg.StartTaskAlarmService">
<property name="taskAlarmService" ref="myTaskAlarmService" />
<property name="runOnStartup" value="false" />
</bean>
<!-- 加载自定义activity -->
<bean class="org.openwebflow.cfg.LoadRuntimeActivityDefinitions">
<property name="activityDefinitionManager" ref="myActivityDefinitionManager" />
</bean>
</list>
</property>
</bean>
<!-- processEngine -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<!-- 工作流流转服务对象工厂 -->
<bean class="org.openwebflow.ctrl.impl.DefaultTaskFlowControlServiceFactory" />
<!-- processEngineTool -->
<bean id="processEngineTool" class="org.openwebflow.util.ProcessEngineTool" />
Где processEngineConfiguration — это расширенный объект конфигурации механизма рабочего процесса, который можно установитьНастроить политику управления членами группы пользователей,Настройка политик управления правами на действияЖдать.
Полный пример см. на странице https://gitee.com/bluejoe/openwebflow/blob/master/openwebflow-test/src/test/resources/activiti.cfg.core.xml.
2.2.3 Конфигурация activiti.cfg.mem.xml
Некоторые менеджеры используются в activiti.core.xml. activiti.mem.xml определяет реализацию диспетчера на основе памяти. Содержимое activiti.mem.xml по умолчанию выглядит следующим образом:
<!-- 自定义成员关系管理 -->
<bean id="myMembershipManager" class="org.openwebflow.mgr.mem.InMemoryMembershipManager" />
<bean id="myUserDetailsManager" class="org.openwebflow.mgr.mem.InMemoryUserDetailsManager" />
<!-- 自定义的活动权限表管理 -->
<bean id="myActivityPermissionManager"
class="org.openwebflow.mgr.mem.InMemoryActivityPermissionManager" />
<!-- 代理关系管理 -->
<bean id="myDelegationManager" class="org.openwebflow.mgr.mem.InMemoryDelegationManager" />
<!-- 自定义的动态自定义活动管理 -->
<bean id="myActivityDefinitionManager"
class="org.openwebflow.mgr.mem.InMemoryRuntimeActivityDefinitionManager" />
<bean id="myTaskNotificationManager" class="org.openwebflow.mgr.mem.InMemoryTaskNotificationManager" />
Здесь определены 6 менеджеров:
Менеджер категории |
значение |
|
|
|
|
|
|
|
|
|
|
|
|
Полный пример см. на странице https://gitee.com/bluejoe/openwebflow/blob/master/openwebflow-test/src/test/resources/activiti.cfg.mem.xml.
Альтернативными файлами, подобными activiti.cfg.core.xml, являются activiti.cfg.sql.hibernate.xml и activiti.cfg.sql.mybatis.xml.
2.2.4 Конфигурация activiti.cfg.sql.hibernate.xml
activiti.sql.hibernate.xml обеспечивает реализацию менеджера на основе SQL, а используемой инфраструктурой ORM является Hibernate 4.
Определение каждого менеджера выглядит следующим образом:
<!-- 代理记录管理 -->
<bean id="myDelegationManager"
class="org.openwebflow.mgr.hibernate.service.SqlDelegationManager" />
<!-- 自定义成员关系管理 -->
<bean id="myMembershipManager"
class="org.openwebflow.mgr.hibernate.service.SqlMembershipManager" />
<!-- 自定义用户表 -->
<bean id="myUserDetailsManager"
class="org.openwebflow.mgr.hibernate.service.SqlUserDetailsManager" />
<!-- 自定义的活动权限表管理 -->
<bean id="myActivityPermissionManager"
class="org.openwebflow.mgr.hibernate.service.SqlActivityPermissionManager" />
<!-- 自定义的动态自定义活动管理 -->
<bean id="myActivityDefinitionManager"
class="org.openwebflow.mgr.hibernate.service.SqlRuntimeActivityDefinitionManager" />
<bean id="myTaskNotificationManager"
class="org.openwebflow.mgr.hibernate.service.SqlTaskNotificationManager" />
Кроме того, необходимо определить источники данных, фабрики Hibernate Session и транзакции.
<!-- 数据库脚本见openwebflow.sql -->
<bean id="owfDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${owfdb.driver}" />
<property name="url" value="${owfdb.url}" />
<property name="username" value="${owfdb.username}" />
<property name="password" value="${owfdb.password}" />
<property name="initialSize" value="20" />
<property name="maxActive" value="50" />
<property name="maxIdle" value="20" />
<property name="minIdle" value="10" />
</bean>
<!-- 配置SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="owfDataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<!-- <prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</prop> -->
<!-- 服务启动通过实体创建数据库表信息 -->
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoReconnect">false</prop>
<prop key="hibernate.connection.autocommit">true</prop>
<prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
<prop key="hibernate.jdbc.use_streams_for_binary">true</prop>
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext
</prop>
<!--解决weblogic无法使用hql的问题 -->
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
</props>
</property>
<!-- 自动扫描备注解的实体 -->
<property name="packagesToScan">
<list>
<value>org.openwebflow.mgr.hibernate.entity</value>
</list>
</property>
</bean>
<!-- 配置一个事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
Используя HibernateORM, структура кода openwebflow-mgr-hibernate выглядит следующим образом:
Среди них класс DAO, класс сущности и класс обслуживания хранятся в пакетах dao, entity и service соответственно. Объявление транзакции класса обслуживания и отображение сущности аннотируются.
Полный пример см. на странице https://gitee.com/bluejoe/openwebflow/blob/master/openwebflow-test/src/test/resources/activiti.cfg.sql.hibernate.xml.
2.2.5 Конфигурация activiti.cfg.sql.mybatis.xml
activiti.sql.mybatis.xml обеспечивает реализацию менеджера на основе SQL, а используемой инфраструктурой ORM является mybatis 3.
Определение каждого менеджера выглядит следующим образом:
<!-- 代理记录管理 -->
<bean id="myDelegationManager"
class="org.openwebflow.mgr.mybatis.service.SqlDelegationManager" />
<!-- 自定义成员关系管理 -->
<bean id="myMembershipManager"
class="org.openwebflow.mgr.mybatis.service.SqlMembershipManager" />
<!-- 自定义用户表 -->
<bean id="myUserDetailsManager"
class="org.openwebflow.mgr.mybatis.service.SqlUserDetailsManager" />
<!-- 自定义的活动权限表管理 -->
<bean id="myActivityPermissionManager"
class="org.openwebflow.mgr.mybatis.service.SqlActivityPermissionManager" />
<!-- 自定义的动态自定义活动管理 -->
<bean id="myActivityDefinitionManager"
class="org.openwebflow.mgr.mybatis.service.SqlRuntimeActivityDefinitionManager" />
<bean id="myTaskNotificationManager"
class="org.openwebflow.mgr.mybatis.service.SqlTaskNotificationManager" />
Кроме того, необходимо определить источник данных, SqlSessionFactory и транзакцию.
<!-- 数据库脚本见openwebflow.sql -->
<bean id="owfDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${owfdb.driver}" />
<property name="url" value="${owfdb.url}" />
<property name="username" value="${owfdb.username}" />
<property name="password" value="${owfdb.password}" />
<property name="initialSize" value="20" />
<property name="maxActive" value="50" />
<property name="maxIdle" value="20" />
<property name="minIdle" value="10" />
</bean>
<!-- 创建SqlSessionFactory,同时指定数据源-->
<bean id="owlSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="owfDataSource" />
</bean>
<!-- 配置一个事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="owfDataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
Используя Mybatis ORM, структура кода openwebflow-mgr-mybatis выглядит следующим образом:
При этом класс сущности интерфейса Mapper, класс службы хранятся в карте, сущности, пакете службы ниже. Класс обслуживания транзакций и делать заметки Картографирование на всем пути.
Полный пример см. на странице https://gitee.com/bluejoe/openwebflow/blob/master/openwebflow-test/src/test/resources/activiti.cfg.sql.mybatis.xml.
2.3 Дизайн базы данных
Во-первых, сам движок Activiti должен использовать ряд таблиц данных.После установки источника данных Activiti автоматически сгенерирует эти таблицы.
Все таблицы Activiti начинаются с ACT_, а вторая часть представляет собой двухбуквенный логотип, указывающий на назначение таблицы. Использование также соответствует API сервиса.
- ACT_RE_*: «RE» означает репозиторий. Эта таблица с префиксом содержит определения процессов и статические ресурсы процессов (изображения, правила и т. д.).
- ACT_RU_*: «RU» означает время выполнения. Эти таблицы времени выполнения содержат экземпляры процессов, задачи, переменные, асинхронные задачи и другие текущие данные. Activiti сохраняет эти данные только во время выполнения экземпляра процесса и удаляет эти записи по завершении процесса. Это позволяет рабочей таблице оставаться небольшой и быстрой.
- ACT_ID_*: «ID» означает личность. Эти таблицы содержат идентификационную информацию, такую как пользователи, группы и т. д.
- ACT_HI_*: «HI» означает историю. Эти таблицы содержат исторические данные, такие как исторические экземпляры процессов, переменные, задачи и многое другое.
- ACT_GE_*: общие данные, используемые в различных сценариях.
OpenWebFlow предоставляет реализации на основе базы данных для ряда менеджеров, и требуются некоторые таблицы данных. Соответствующие сценарии построения базы данных см. в каталоге https://gitee.com/bluejoe/openwebflow/tree/master/doc:
- openwebflow-mysql4.sql: скрипт MySQL4
- openwebflow-mysql5.sql: скрипт MySQL5
- openwebflow-sqlserver2008.sql: скрипт SQLServer2008
- openwebflow-oracle10g.sql: сценарий Oracle
Всего определено 6 таблиц:
- OWF_ACTIVITY_CREATION: используется для хранения информации об определении пользовательской активности.
- OWF_ACTIVITY_PERMISSION: используется для хранения информации о разрешениях для настраиваемых действий.
- OWF_DELEGATION: используется для хранения информации об агенте пользователя.
- OWF_NOTIFICATION: используется для хранения записей напоминаний.
- OWF_MEMBERSHIP: используется для хранения членства в группе пользователей.
- OWF_USER: используется для хранения информации о пользователе.
Примечание: OWF_MEMBERSHIP и OWF_USER используются только для тестирования.Рекомендуется, чтобы пользователи использовали свои собственные таблицы данных (одним из направлений собственных усилий OpenWebFlow является отделение управления пользователями и членством от механизма рабочего процесса) и обертывали свой собственный менеджер.
2.4 Использование bean-компонентов, определенных ApplicationContext
После использования среды Spring IoC для загрузки файла конфигурации XML ApplicationContext будет содержать следующие переменные, которые могут использоваться клиентскими программами:
- processEngine: объект механизма рабочего процесса, стандартный объект Activiti.
- processEngineTool: предоставляет некоторые инструментальные методы для processEngine.
- defaultTaskFlowControlServiceFactory: фабричный объект контроллера потока задач.
- репозиторийService: Предоставляет операции для управления и контроля пакетов выпусков и определений процессов.
- RuntimeService: отвечает за запуск нового экземпляра определения процесса.
- TaskService: операции, связанные с задачами
- IdentityService: управление (создание, обновление, удаление, запрос...) группами и пользователями.
- FormService: предоставляет две концепции формы запуска и формы задачи.
- HistoryService: предоставляет все исторические данные телефона с двигателем Activiti.
- ManagementService: может запрашивать таблицы базы данных и метаданные таблиц.
Ниже приведен пример кода с использованием OpenWebFlow, который точно такой же, как и с использованием Activiti:
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:activiti.cfg.mem.xml");
ProcessEngineTool tool = ctx.getBean(ProcessEngineTool.class);
ProcessEngine processEngine = tool.getProcessEngine();
// 启动流程实例
ProcessInstance instance = processEngine.getRuntimeService().startProcessInstanceByKey("test1");
TaskService taskService = processEngine.getTaskService();
//会自动跳转到第一个task
//management可以访问该task
Assert.assertEquals(1, taskService.createTaskQuery().taskCandidateGroup("management").count());
2.5 Запустите тестовый пример
В исходном коде проекта openwebflow-test пользователи могут найти набор тестовых случаев для проверки функций механизма рабочего процесса, а именно:
- MemProcessEngineTest: тест менеджера на основе памяти
- SqlHibernateProcessEngineTest: тест менеджера на основе hibernateORM
- SqlMybatisProcessEngineTest: тест менеджера на основе mybatisORM
Все три вышеперечисленных тестовых класса наследуются от AbstractProcessEngineTest:
AbstractProcessEngineTest предоставляет методы тестирования:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Для взаимодействия с тестом разработан сложный процесс (models/test2.bpmn), как показано на рисунке:
Выберите указанный тестовый модуль (например: MemProcessEngineTest) и запустите его как «тест JUnit» (Run As...), и вы сможете наблюдать за результатами теста:
При желании запустите набор тестов AllTests:
3. Знаком с кодом OpenWebFlow
3.1 Загрузите исходный код
Пользователи могут загрузить zip-пакет OpenWebFlow по адресу: https://gitee.com/bluejoe/openwebflow/archive/master.zip.
Вы также можете получить последний исходный код через git, адрес репозитория git: https://gitee.com/bluejoe/openwebflow.git.
3.2 Структура кода
Исходный код OpenWebFlow содержит 5 проектов maven, из которых проект openwebflow является родительским проектом, в котором объявлены 4 модели, включая openwebflow-core, openwebflow-mgr-hibernate, openwebflow-mgr-mybatis и openwebflow-test.
- openwebflow-core: основной проект, включая все основное содержимое механизма расширения OpenWebFlow, а также реализацию диспетчера на основе памяти.
- openwebflow-mgr-hibernate: зависит от ядра openwebflow, обеспечивает реализацию менеджера на основе базы данных, структура ORM использует Hibernate.
- OpenWLEBFLOW-MGR-MYBATIS: зависит от сердечника OpenWflow-Core, обеспечивает реализацию менеджера на основе базы данных, а каркас ORM использует MyBatis.
- OpenWflow-Test: зависит от вышеуказанных проектов, предоставляет тестовые случаи, включая файлы конфигурации, классы испытаний и т. Д.
3.3 построить проект
Полученный исходный код проекта можно собрать и установить с помощью Maven, скриншот сборки:
3.4 Основные объекты
3.4.1 ProcessEngineConfigurationEx
ProcessEngineConfigurationEx — производный класс для класса ProcessEngineConfiguration, предоставляемого Activiti:
Большинство параметров у них одинаковые, единственное отличие состоит в том, что ProcessEngineConfigurationEx предоставляет атрибут: startEngineEventListeners.
startEngineEventListeners используется для определения других задач, которые необходимо запускать одновременно с запуском механизма рабочего процесса. , ReplaceTaskAssignmentHandler, ImportDefinedProcessModels, StartTaskAlarmService, LoadRuntimeActivityDefinitions. Список задач и атрибутов класса выглядит следующим образом:
класс задач |
использовать |
Имя свойства |
значение атрибута |
LoadDummyFormTypes |
Загрузите некоторые бесполезные типы форм, чтобы заблокировать ошибки, вызванные некоторыми пользовательскими формами. |
typeNames |
Форма необходима имен типа щита, разделенные; такие как: пользователь |
ReplaceMembershipManager |
Возьми через членство группы пользователей напрямую |
customMembershipManager |
Указывает настраиваемый клиентом менеджер |
ReplaceTaskAssignmentHandler |
Возьмите на себя управление правами пользователей Activiti, если вы хотите добиться динамического назначения прав узла, вы должны включить его. |
handlers |
Определите список авторизованных процессоров, тип значения — Список, каждый список авторизованных процессоров будет формировать цепочку во время выполнения, и чем выше приоритет (тем дальше) |
ImportDefinedProcessModels |
Автоматически импортировать модели BPMN из указанного каталога |
modelDir |
Путь, используемый для указания модели, который может быть classpath: и т.д. |
StartTaskAlarmService |
Начните задачу для продвижения службы |
taskAlarmService |
Установить клиентов напоминания |
|
|
runOnStartup |
Начинать ли сначала (по умолчанию true) |
LoadRuntimeActivityDefinitions |
Загружать определение узла во время выполнения, в основном используется для поддержки определения новых узлов во время выполнения. |
activityDefinitionManager |
Задает менеджер определения узла |
3.4.2 ProcessEngineTool
ProcessEngineTool предоставляет некоторые инструментальные методы, функции которых, как правило, сложно получить напрямую через ProcessEngine:
Краткое описание метода |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.4.3 Различные Utils
OpenWebFlow предоставляет некоторые общие классы инструментов, а именно:
резюме класса |
|
|
|
|
|
|
|
|
|
|
|
3.4.4 TaskFlowControlService
TaskFlowControlService используется для реализации свободного управления процессом и предоставляет следующие методы:
Краткое описание метода |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Для создания TaskFlowControlService требуется TaskFlowControlServiceFactory, а объект factory можно получить из контекста приложения.
4. Дизайн и использование основных функций [опущено]
5. Менеджер интерфейса с использованием пользовательских расширений
OpenWebflow требует, чтобы пользователи предоставили интерфейс менеджеров 6 классов, а именно:
- RuntimeActivityDefinitionManager: отвечает за получение информации об определении действий для поддержки новых действий во время выполнения.
- ActivityPermissionManager: отвечает за получение информации о настройках разрешений действия.
- TaskNotificationManager: отвечает за доступ к информации о напоминаниях о задачах.
- DelegationManager: отвечает за получение информации о прокси-сервере пользователя.
- UserDetailsManager: отвечает за получение информации о пользователе (включая адрес электронной почты, псевдоним, номер мобильного телефона и т. д.), в основном используется для отправки напоминаний.
- IdentityMembershipManager: когда отвечает за получение членства группы пользователей, доступ к кандидату задачи пользователей, вам нужно добраться до группы пользователей по имени пользователя
В дополнение к этим менеджерам пользователи обнаружит, что OpenWLEBFLOW также предоставляет серию интерфейсов MageRex:
- ActivityPermissionManagerEx: отвечает за сохранение информации о настройках разрешений действия.
- TaskNotificationManagerEx: отвечает за сохранение информации уведомления о напоминании о задаче.
- DelegationManagerEx: отвечает за сохранение информации о прокси-сервере пользователя.
- UserDetailsManagerEx: отвечает за сохранение информации о пользователе.
- IdentityMembershipManagerEx: отвечает за сохранение членства в группе пользователей.
Вы можете просто подумать, что интерфейс менеджера в основном используется для чтения информации (чтений), интерфейс ManageEx в основном используется для записи информации для (запись), обратите внимание при использовании двигателя OpenWflow, ManageEx не должен предоставлять соответствующую реализацию! Использовать все операции OpenWebflow Engine будет звонить только в менеджер, а не менеджер, состоит в том, чтобы предоставить менеджер-тестирование (если не написано, READ RETENT всегда пусто, тест не может быть нормальным).
5.1 Управление определением деятельности
Клиентским программам часто требуется настроить процесс рабочего процесса во время выполнения, например: переход к шагу 2 после выполнения действия шага 5, такая операция должна создать новый путь, чтобы обеспечить нормальное выполнение последующих процессов (особенно приложений). перезапускается) позже), такие пути необходимо сохранить и загрузить.
5.1.1 RuntimeActivityDefinitionManager
RuntimeActivityDefinitionManager содержит следующие методы:
|
|
|
|
|
|
|
|
5.1.2 RuntimeActivityDefinitionEntity
RuntimeActivityDefinitionEntity соответствует информации об определении действия:
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5.2 Управление правами на деятельность
5.2.1 ActivityPermissionManager
Интерфейс управления разрешениями действий — ActivityPermissionManager, который определяется следующим образом:
|
|
|
|
5.2.2 ActivityPermissionEntity
Очень просто, ему просто нужен метод, который возвращает ActivityPermissionEntity, который определяется следующим образом:
|
|
|
|
|
|
|
|
5.2.3 ActivityPermissionManagerEx
ActivityPermissionManagerEx реализует операцию «записи» в таблицу разрешений активности:
|
|
|
|
|
|
5.3 Управление уведомлениями о задачах
5.3.1 TaskNotificationManager
TaskNotificationManager отвечает за чтение и настройку статуса напоминаний о задачах, интерфейс тоже очень простой:
|
|
|
|
|
|
Следует понимать, что TaskNotificationManager поддерживает запись в очереди о состоянии каждого уведомления о задаче (уведомление истинно, не уведомлено как ложное).
5.3.2 TaskNotificationManagerEx
TaskNotificationManagerEx реализует операции «записи» в записи уведомлений:
|
|
|
|
5.4 Управление взаимоотношениями между пользователем и агентом
5.4.1 DelegationManager
DelegationManager используется для поддержания прокси-отношений между пользователями. Интерфейс содержит 2 метода:
|
|
|
|
|
|
5.4.2 DelegationEntity
DelegationEntity
描述一条代理关系:
|
|
|
|
|
|
5.4.3 DelegationManagerEx
DelegationManagerEx используется для реализации операций «записи» над записями делегатов:
|
|
|
|
|
|
5.5 Управление данными пользователей
5.5.1 UserDetailsManager
UserDetailsManager отвечает за получение информации о пользователе (включая адрес электронной почты, псевдоним, номер мобильного телефона и т. д.) и в основном используется для отправки уведомлений-напоминаний. Интерфейс UserDetailsManager содержит следующие методы:
|
|
|
|
5.5.2 UserDetailsEntity
UserDetailsEntity
用以描述用户详细信息,注意它没有强制要求提供诸如getName()这样的方法,而是提供了一个getProperty(Stringname)方法:
|
||
|
|
|
|
|
|
|
|
|
|
|
UserDetailsEntity
同时提供了几个字符串常量:
|
|
|
|
|
|
|
|
|
|
5.5.3 UserDetailsManagerEx
UserdetailsmanageRex используется для реализации работы пользовательской информации «Написать»:
|
|
|
|
|
|
5.6 Управление членством в группах пользователей
5.6.1 IdentityMembershipManager
IdentityMembershipManager отвечает за получение членства в группе пользователей, Проще говоря, он должен получить список идентификаторов группы, к которой принадлежит указанный пользователь, и список идентификаторов участников в указанной группе.
|
|
|
|
|
|
5.6.2 IdentityMembershipManagerEx
IdentityMembershipManagerEx обеспечивает операции записи информации о членстве:
|
|
|
|
|
|
6. Другая помощь
Адрес загрузки этого документа: https://gitee.com/bluejoe./openwebflow/tree/master/doc, своевременный доступ к последней версии по этому адресу.
Если вам нужно проконсультироваться с OpenWebFlow API Java, обратитесь к javadoc (https://gitee.com/bluejoe/openwebflow/tree/master/openwebflow-core/doc/javadoc).
Вы также можете подписаться на Wiki (https://gitee.com/bluejoe/openwebflow/wiki), отправить задачу (https://gitee.com/bluejoe/openwebflow/issues) и связаться с автором напрямую по адресу bluejoe2008@gmail. .ком.
7. Ошибки Activiti и контрмеры
В настоящее время автор обнаружил, что во фреймворке Activiti есть 2 ошибки, в основном в:
Первая ошибка заключается в том, что когда BaseBpmnJsonConverter выводит модель BPMN в формат JSON, он игнорирует вывод истинных логических значений. Эта ошибка приведет к тому, что JsonConverterUtil.getPropertyValueAsBoolean() получит ложное значение (поскольку стандартом оценки в настоящее время становится «Да». или Нет). Адрес отчета об ошибке: https://github.com/Activiti/Activiti/pull/464#event-204722250.
Другая ошибка заключается в том, что при загрузке файла BPMN, когда локальный набор символов не является UTF-8 (например, GB2312), возникает ошибка загрузки модели. Адрес сообщения об ошибке: https://github.com/Activiti/Activiti/pull/486#event-220121880.
В настоящее время (2014 г.) автор представил исправления для двух вышеуказанных ошибок и объединил их в основную версию. Однако, учитывая проблему стабильности версии, в последней версии OpenWebFlow используются другие методы, чтобы избежать возникновения вышеуказанных ошибок.