Weitere ähnliche Inhalte Ähnlich wie Whirlwind tour of activiti 7 (20) Mehr von Ryan Dawson (14) Kürzlich hochgeladen (20) Whirlwind tour of activiti 72. Learn. Connect. Collaborate.
Overview
How to see what Activiti 7 offers?
- Non-cloud/core examples
- Cloud examples
v7 offers a builder experience with less plumbing
Examples and explanation in the gitbook
We’ll point out differences from previous versions
6. Learn. Connect. Collaborate.
Security and
Identity
@Bean
public UserDetailsService myUserDetailsService() {
InMemoryUserDetailsManager inMemoryUserDetailsManager = new
InMemoryUserDetailsManager();
String[][] usersGroupsAndRoles = {
{"system", "password", "ROLE_ACTIVITI_USER"},
{"admin", "password", "ROLE_ACTIVITI_ADMIN"},
};
for (String[] user : usersGroupsAndRoles) {
List<String> authoritiesStrings = Arrays.asList(Arrays.copyOfRange(user, 2, user.length));
logger.info("> Registering new user: " + user[0] + " with the following Authorities[" +
authoritiesStrings + "]");
inMemoryUserDetailsManager.createUser(new User(user[0], passwordEncoder().encode(user[1]),
authoritiesStrings.stream().map(s -> new
SimpleGrantedAuthority(s)).collect(Collectors.toList())));
}
return inMemoryUserDetailsManager;
}
7. Learn. Connect. Collaborate.
Process Text
Connector
@Bean
public Connector processTextConnector() {
return integrationContext -> {
Map<String, Object> inBoundVariables = integrationContext.getInBoundVariables();
String contentToProcess = (String) inBoundVariables.get("content");
// Logic Here to decide if content is approved or not
if (contentToProcess.contains("activiti")) {
logger.info("> Approving content: " + contentToProcess);
integrationContext.addOutBoundVariable("approved",
true);
} else {
logger.info("> Discarding content: " + contentToProcess);
integrationContext.addOutBoundVariable("approved",
false);
}
return integrationContext;
};
}
<bpmn:serviceTask
name="Process Text"
implementation="processTextConnector">
8. Learn. Connect. Collaborate.
How do we
start
processes?
@Autowired
private ProcessRuntime processRuntime;
public void processText() {
securityUtil.logInAs("system");
String content = pickRandomString();
ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder
.start()
.withProcessDefinitionKey("categorizeProcess")
.withProcessInstanceName("Processing Content: " + content)
.withVariable("content", content)
.build());
}
9. Learn. Connect. Collaborate.
Json
Serialization
public void processText() {
securityUtil.logInAs("system");
Content content = pickRandomContent();
ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder
.start()
.withProcessDefinitionKey("categorizeProcess")
.withProcessInstanceName("Processing Content: " + content)
.withVariable("content", content)
.build());
}
14. Learn. Connect. Collaborate.
Which looks
like...
@StreamListener(value =
ProcessingConnectorChannels.TWITTER_ANALYZER_CONSUMER)
public void analyzeEnglishTweet(IntegrationRequest event) {
String tweet =
String.valueOf(event.getIntegrationContext().getInBoundVariables().get("text"));
int sentiment = NLP.findSentiment(tweet);
// … convert sentiment to attitude
. // send attitude back as var
Map<String, Object> results = new HashMap<>();
results.put("attitude",
attitude);
Message<IntegrationResult> message = IntegrationResultBuilder.resultFor(event,
connectorProperties)
.withOutboundVariables(results)
.buildMessage();
integrationResultSender.send(message);
}
22. Learn. Connect. Collaborate.
REST API and
Java API
- processRuntime and taskRuntime methods
map directly to REST endpoints
- Parameter and return types in Java API map
to REST json objects
- Acceptance tests use this to write clean test
code
- Enables natural transition from non-cloud to
cloud
25. Learn. Connect. Collaborate.
The future is
bright!
- FaaS/knative
- Istio integration
- Spring Cloud next gen
- JHipster integration
- GraalVM
- Activiti cloud operator