Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
z_stack
Activiti
提交
a759bc73
A
Activiti
项目概览
z_stack
/
Activiti
12 个月 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
Activiti
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a759bc73
编写于
2月 27, 2019
作者:
E
Elias Ricken de Medeiros
提交者:
mergify[bot]
2月 27, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Publish process model as part of ProcessDeployedEvent (#2549)
Related to
https://github.com/Activiti/Activiti/issues/2389
上级
2f4a8013
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
74 addition
and
17 deletion
+74
-17
activiti-spring-boot-starter/src/main/java/org/activiti/spring/ProcessDeployedEventProducer.java
...ava/org/activiti/spring/ProcessDeployedEventProducer.java
+27
-5
activiti-spring-boot-starter/src/main/java/org/activiti/spring/boot/ProcessEngineAutoConfiguration.java
.../activiti/spring/boot/ProcessEngineAutoConfiguration.java
+7
-4
activiti-spring-boot-starter/src/test/java/org/activiti/spring/ProcessDeployedEventProducerTest.java
...org/activiti/spring/ProcessDeployedEventProducerTest.java
+29
-8
activiti-spring-boot-starter/src/test/java/org/activiti/spring/boot/process/DeployedProcessesListener.java
...tiviti/spring/boot/process/DeployedProcessesListener.java
+7
-0
activiti-spring-boot-starter/src/test/java/org/activiti/spring/boot/process/ProcessDeployedEventIT.java
.../activiti/spring/boot/process/ProcessDeployedEventIT.java
+4
-0
未找到文件。
activiti-spring-boot-starter/src/main/java/org/activiti/spring/ProcessDeployedEventProducer.java
浏览文件 @
a759bc73
...
...
@@ -16,16 +16,24 @@
package
org.activiti.spring
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.nio.charset.StandardCharsets
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.activiti.api.process.model.ProcessDefinition
;
import
org.activiti.api.process.model.events.ProcessDeployedEvent
;
import
org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener
;
import
org.activiti.api.runtime.event.impl.ProcessDeployedEvents
;
import
org.activiti.api.runtime.event.impl.ProcessDeployedEventImpl
;
import
org.activiti.engine.ActivitiException
;
import
org.activiti.engine.RepositoryService
;
import
org.activiti.runtime.api.model.impl.APIProcessDefinitionConverter
;
import
org.apache.commons.io.IOUtils
;
import
org.springframework.boot.WebApplicationType
;
import
org.springframework.boot.context.event.ApplicationReadyEvent
;
import
org.springframework.context.ApplicationEventPublisher
;
import
org.springframework.context.ApplicationListener
;
public
class
ProcessDeployedEventProducer
implements
ApplicationListener
<
ApplicationReadyEvent
>
{
...
...
@@ -33,26 +41,40 @@ public class ProcessDeployedEventProducer implements ApplicationListener<Applica
private
RepositoryService
repositoryService
;
private
APIProcessDefinitionConverter
converter
;
private
List
<
ProcessRuntimeEventListener
<
ProcessDeployedEvent
>>
listeners
;
private
ApplicationEventPublisher
eventPublisher
;
public
ProcessDeployedEventProducer
(
RepositoryService
repositoryService
,
APIProcessDefinitionConverter
converter
,
List
<
ProcessRuntimeEventListener
<
ProcessDeployedEvent
>>
listeners
)
{
List
<
ProcessRuntimeEventListener
<
ProcessDeployedEvent
>>
listeners
,
ApplicationEventPublisher
eventPublisher
)
{
this
.
repositoryService
=
repositoryService
;
this
.
converter
=
converter
;
this
.
listeners
=
listeners
;
this
.
eventPublisher
=
eventPublisher
;
}
@Override
public
void
onApplicationEvent
(
ApplicationReadyEvent
event
)
{
if
(!
WebApplicationType
.
NONE
.
equals
(
event
.
getSpringApplication
().
getWebApplicationType
()))
{
List
<
ProcessDefinition
>
processDefinitions
=
converter
.
from
(
repositoryService
.
createProcessDefinitionQuery
().
list
());
List
<
ProcessDeployedEvent
>
processDeployedEvents
=
new
ArrayList
<>();
for
(
ProcessDefinition
processDefinition
:
processDefinitions
)
{
ProcessDeployedEventImpl
processDeployedEvent
=
new
ProcessDeployedEventImpl
(
processDefinition
);
for
(
ProcessRuntimeEventListener
<
ProcessDeployedEvent
>
listener
:
listeners
)
{
listener
.
onEvent
(
processDeployedEvent
);
try
(
InputStream
inputStream
=
repositoryService
.
getProcessModel
(
processDefinition
.
getId
()))
{
String
xmlModel
=
IOUtils
.
toString
(
inputStream
,
StandardCharsets
.
UTF_8
);
ProcessDeployedEventImpl
processDeployedEvent
=
new
ProcessDeployedEventImpl
(
processDefinition
,
xmlModel
);
processDeployedEvents
.
add
(
processDeployedEvent
);
for
(
ProcessRuntimeEventListener
<
ProcessDeployedEvent
>
listener
:
listeners
)
{
listener
.
onEvent
(
processDeployedEvent
);
}
}
catch
(
IOException
e
)
{
throw
new
ActivitiException
(
"Error occurred while getting process model '"
+
processDefinition
.
getId
()
+
"' : "
,
e
);
}
}
if
(!
processDeployedEvents
.
isEmpty
())
{
eventPublisher
.
publishEvent
(
new
ProcessDeployedEvents
(
processDeployedEvents
));
}
}
}
}
activiti-spring-boot-starter/src/main/java/org/activiti/spring/boot/ProcessEngineAutoConfiguration.java
浏览文件 @
a759bc73
...
...
@@ -30,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.boot.autoconfigure.AutoConfigureAfter
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.ApplicationEventPublisher
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.io.Resource
;
...
...
@@ -158,11 +159,13 @@ public class ProcessEngineAutoConfiguration extends AbstractProcessEngineAutoCon
@ConditionalOnMissingBean
public
ProcessDeployedEventProducer
processDeployedEventProducer
(
RepositoryService
repositoryService
,
APIProcessDefinitionConverter
converter
,
@Autowired
(
required
=
false
)
List
<
ProcessRuntimeEventListener
<
ProcessDeployedEvent
>>
listeners
)
{
@Autowired
(
required
=
false
)
List
<
ProcessRuntimeEventListener
<
ProcessDeployedEvent
>>
listeners
,
ApplicationEventPublisher
eventPublisher
)
{
return
new
ProcessDeployedEventProducer
(
repositoryService
,
converter
,
Optional
.
ofNullable
(
listeners
)
.
orElse
(
Collections
.
emptyList
()));
converter
,
Optional
.
ofNullable
(
listeners
)
.
orElse
(
Collections
.
emptyList
()),
eventPublisher
);
}
}
activiti-spring-boot-starter/src/test/java/org/activiti/spring/ProcessDeployedEventProducerTest.java
浏览文件 @
a759bc73
...
...
@@ -16,6 +16,7 @@
package
org.activiti.spring
;
import
java.io.ByteArrayInputStream
;
import
java.util.Arrays
;
import
java.util.List
;
...
...
@@ -32,8 +33,10 @@ import org.mockito.Mock;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.WebApplicationType
;
import
org.springframework.boot.context.event.ApplicationReadyEvent
;
import
org.springframework.context.ApplicationEventPublisher
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
tuple
;
import
static
org
.
mockito
.
BDDMockito
.
given
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
times
;
...
...
@@ -57,13 +60,17 @@ public class ProcessDeployedEventProducerTest {
@Mock
private
ProcessRuntimeEventListener
<
ProcessDeployedEvent
>
secondListener
;
@Mock
private
ApplicationEventPublisher
eventPublisher
;
@Before
public
void
setUp
()
{
initMocks
(
this
);
producer
=
new
ProcessDeployedEventProducer
(
repositoryService
,
converter
,
Arrays
.
asList
(
firstListener
,
secondListener
));
secondListener
),
eventPublisher
);
}
@Test
...
...
@@ -77,9 +84,11 @@ public class ProcessDeployedEventProducerTest {
given
(
definitionQuery
.
list
()).
willReturn
(
internalProcessDefinitions
);
List
<
org
.
activiti
.
api
.
process
.
model
.
ProcessDefinition
>
apiProcessDefinitions
=
Arrays
.
asList
(
mock
(
org
.
activiti
.
api
.
process
.
model
.
ProcessDefinition
.
class
),
mock
(
org
.
activiti
.
api
.
process
.
model
.
ProcessDefinition
.
class
));
List
<
org
.
activiti
.
api
.
process
.
model
.
ProcessDefinition
>
apiProcessDefinitions
=
Arrays
.
asList
(
buildAPIProcessDefinition
(
"id1"
),
buildAPIProcessDefinition
(
"id2"
));
given
(
converter
.
from
(
internalProcessDefinitions
)).
willReturn
(
apiProcessDefinitions
);
given
(
repositoryService
.
getProcessModel
(
"id1"
)).
willReturn
(
new
ByteArrayInputStream
(
"content1"
.
getBytes
()));
given
(
repositoryService
.
getProcessModel
(
"id2"
)).
willReturn
(
new
ByteArrayInputStream
(
"content2"
.
getBytes
()));
//when
producer
.
onApplicationEvent
(
buildApplicationReadyEvent
(
WebApplicationType
.
SERVLET
));
...
...
@@ -93,11 +102,23 @@ public class ProcessDeployedEventProducerTest {
List
<
ProcessDeployedEvent
>
allValues
=
captor
.
getAllValues
();
assertThat
(
allValues
)
.
extracting
(
ProcessDeployedEvent:
:
getEntity
)
.
containsExactly
(
apiProcessDefinitions
.
get
(
0
),
//firstListener
apiProcessDefinitions
.
get
(
1
),
//firstListener
apiProcessDefinitions
.
get
(
0
),
//secondListener
apiProcessDefinitions
.
get
(
1
));
//secondListener
.
extracting
(
ProcessDeployedEvent:
:
getEntity
,
ProcessDeployedEvent:
:
getProcessModelContent
)
.
containsExactly
(
tuple
(
apiProcessDefinitions
.
get
(
0
),
"content1"
),
//firstListener
tuple
(
apiProcessDefinitions
.
get
(
1
),
"content2"
),
//firstListener
tuple
(
apiProcessDefinitions
.
get
(
0
),
"content1"
),
//secondListener
tuple
(
apiProcessDefinitions
.
get
(
1
),
"content2"
));
//secondListener
}
private
org
.
activiti
.
api
.
process
.
model
.
ProcessDefinition
buildAPIProcessDefinition
(
String
processDefinitionId
)
{
org
.
activiti
.
api
.
process
.
model
.
ProcessDefinition
processDefinition
=
mock
(
org
.
activiti
.
api
.
process
.
model
.
ProcessDefinition
.
class
);
given
(
processDefinition
.
getId
()).
willReturn
(
processDefinitionId
);
return
processDefinition
;
}
private
ApplicationReadyEvent
buildApplicationReadyEvent
(
WebApplicationType
applicationType
)
{
...
...
activiti-spring-boot-starter/src/test/java/org/activiti/spring/boot/process/DeployedProcessesListener.java
浏览文件 @
a759bc73
...
...
@@ -17,7 +17,9 @@
package
org.activiti.spring.boot.process
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.activiti.api.process.model.ProcessDefinition
;
import
org.activiti.api.process.model.events.ProcessDeployedEvent
;
...
...
@@ -28,14 +30,19 @@ import org.springframework.boot.test.context.TestComponent;
public
class
DeployedProcessesListener
implements
ProcessRuntimeEventListener
<
ProcessDeployedEvent
>
{
private
List
<
ProcessDefinition
>
deployedProcesses
=
new
ArrayList
<>();
private
Map
<
String
,
String
>
processModelContents
=
new
HashMap
<>();
@Override
public
void
onEvent
(
ProcessDeployedEvent
event
)
{
deployedProcesses
.
add
(
event
.
getEntity
());
processModelContents
.
put
(
event
.
getProcessDefinitionKey
(),
event
.
getProcessModelContent
());
}
public
List
<
ProcessDefinition
>
getDeployedProcesses
()
{
return
deployedProcesses
;
}
public
Map
<
String
,
String
>
getProcessModelContents
()
{
return
processModelContents
;
}
}
activiti-spring-boot-starter/src/test/java/org/activiti/spring/boot/process/ProcessDeployedEventIT.java
浏览文件 @
a759bc73
...
...
@@ -16,6 +16,7 @@
package
org.activiti.spring.boot.process
;
import
java.io.File
;
import
java.util.List
;
import
org.activiti.api.process.model.ProcessDefinition
;
...
...
@@ -49,6 +50,9 @@ public class ProcessDeployedEventIT {
.
contains
(
CATEGORIZE_PROCESS
,
CATEGORIZE_HUMAN_PROCESS
,
ONE_STEP_PROCESS
);
assertThat
(
listener
.
getProcessModelContents
().
get
(
CATEGORIZE_PROCESS
))
.
isNotEmpty
()
.
isXmlEqualToContentOf
(
new
File
(
"src/test/resources/processes/categorize-image.bpmn20.xml"
));
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录