Organizational Metrics
holunda-io / camunda-bpm-cloud Goto Github PK
View Code? Open in Web Editor NEWDiscontinued, look for camunda-bpm-taskpool
Home Page: https://github.com/holunda-io/camunda-bpm-taskpool
License: Apache License 2.0
Discontinued, look for camunda-bpm-taskpool
Home Page: https://github.com/holunda-io/camunda-bpm-taskpool
License: Apache License 2.0
The user workload component should store the workload from different process engines.
Complete tasks based on commands (not REST calls)
So far, each process node (trivial/simple) launches an h2 in mem db. So when we start more nodes of an app, they will only know there own data (tasks), thus we cannot use loadbalancing.
We need a db config with camunda-schema (h2-server?, mysql-docker?) that can be shared among process apps.
Hint: see mysql node setup in https://github.com/holisticon/cughh-springboot-example/tree/master/database
[INFO]
[INFO] Running "postcss:dist" (postcss) task
[ERROR] Container#eachAtRule is deprecated. Use Container#walkAtRules instead.
[ERROR] Container#eachRule is deprecated. Use Container#walkRules instead.
[ERROR] Container#eachDecl is deprecated. Use Container#walkDecls instead.
[INFO] >> 1 processed stylesheet created.
[INFO]
seems to work anyway ...
currently, axon uses an h2 in memory eventstore, so when we restart the workloadservice, we can not recreate the query-view from an existing eventstream, all tasks are lost.
use mysql (current db) as event store.
Every process instance registers on the registry in order to be addressed in case of user task call over the edge service.
new version is out - changes to full java 8 functional support
branch: workload-service-axon
2017-03-31 15:20:15.746 ERROR 1 --- [o-auto-1-exec-7] c.b.s.b.s.r.CamundaJerseyResourceConfig] : Allocate exception for servlet org.camunda.bpm.spring.boot.starter.rest.CamundaJerseyResourceConfig
java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:331) ~[jersey-server-2.23.2.jar!/:na]
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:392) ~[jersey-container-servlet-core-2.23.2.jar!/:na]
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177) ~[jersey-container-servlet-core-2.23.2.jar!/:na]
...
We should use the Brixton bom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
instead of manual netflix deps
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>1.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
we should have banners to identify apps.
I already started with config-server and eureka.
the examples/tasklist is no longer required
the docker-maven-plugin is discontinued, spotify suggests switching to https://github.com/spotify/dockerfile-maven
new release is out
currently, we have the command and the query component inside the one workloadservice microservice. We should split them into
Motivation
when the process engine uses broadcaster to notify the workloadservice via rest and the workloadservice is not available, the message can not be sent. This leads to either: lost tasks or roll back of the process instance.
We should use messaging (via rabbitmq) instead, so we can configure a persistant queue that can be processes by the workloadservice once it is back up.
I tried to set the port of eventservice to "0" in bootstrap.yaml. Result: processes can not publish there task-create event anymore.
I am reverting, but we should consider this as an extension.
we can mount and define a banner location, so our configserver looks like before.
Since we switched to AxonFramework, we should update the documentation and the images.
2016-06-30 16:25:30.220 ERROR 1 --- [ver-bootstrap-0] c.netflix.discovery.TimedSupervisorTask : task supervisor rejected the task
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@3323acbd rejected from java.util.concurrent.ThreadPoolExecutor@3de454a9[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2047) ~[na:1.8.0_92]
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:823) [na:1.8.0_92]
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1369) [na:1.8.0_92]
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) ~[na:1.8.0_92]
at com.netflix.discovery.TimedSupervisorTask.run(TimedSupervisorTask.java:62) ~[eureka-client-1.4.6.jar!/:1.4.6]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_92]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_92]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_92]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_92]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_92]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_92]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_92]
seems to be related to spring-dev-tools (unconfirmed)
our hard coded DockerFiles are unflexible because artifact name and version is included.
If we would do a release, we would have to edit all files. and its the same file over and over again.
the maven plugin allow to set the DockerFile instructions as part of the plugi.-config. And yes: we can use maven-properties there!
Similar to the user workload component, the service task component should be implemented.
The edge service should be used as a facade to the process engines which store the user tasks.
we are getting an error building the cloud-tasklist:
Done. Phantomjs binary available at /home/travis/build/holisticon/camunda-bpm-cloud/examples/cloud-tasklist/node_modules/karma-phantomjs-launcher/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
npm ERR! peerinvalid The package grunt does not satisfy its siblings' peerDependencies requirements!
npm ERR! peerinvalid Peer [email protected] wants grunt@>=0.4.2
npm ERR! peerinvalid Peer [email protected] wants grunt@~0.4.1
npm ERR! peerinvalid Peer [email protected] wants grunt@>= 0.4.5
npm ERR! peerinvalid Peer [email protected] wants grunt@>= 0.4.5
npm ERR! peerinvalid Peer [email protected] wants grunt@>=0.4.0
npm ERR! peerinvalid Peer [email protected] wants grunt@>=0.4.1
npm ERR! peerinvalid Peer [email protected] wants grunt@>=0.4.0
npm ERR! peerinvalid Peer [email protected] wants grunt@>=0.4.5
npm ERR! peerinvalid Peer [email protected] wants grunt@~0.4.0
npm ERR! peerinvalid Peer [email protected] wants grunt@>=0.4.0
npm ERR! System Linux 3.13.0-40-generic
npm ERR! command "/home/travis/.nvm/v0.10.36/bin/node" "/home/travis/.nvm/v0.10.36/bin/npm" "install"
npm ERR! cwd /home/travis/build/holisticon/camunda-bpm-cloud/examples/cloud-tasklist
npm ERR! node -v v0.10.36
npm ERR! npm -v 1.4.28
npm ERR! code EPEERINVALID
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /home/travis/build/holisticon/camunda-bpm-cloud/examples/cloud-tasklist/npm-debug.log
npm ERR! not ok code 0
Seems to be related to an outdated npm/grunt version, see drewzboto/grunt-connect-proxy#139
I did not manage to run the node.js app. Maybe we should wrap it with jhipster?
additional docs in the gh-pages branch add an extra level of complexity that we can as well deal with later. For now, using README.md files is enough.
The idea is, that during development, we have to run the infrastructure components via docker-compose
these are
But we can decide via active-profile switch, if we want to run the process-engines and the workload services directly from the console/IDE so we do not have to rebuild and restart the docker containers anymore.
Motivation: reduction of roundtrip time
For this to work we need to:
Challenges: This should work without completely copying the yaml files, it should be enough to just provide a delta in the -local
files, preferably just the different hostnames.
Note: to make this work on machines where docker-host is on a vm, we need to use ${DOCKER_IP:localhost}
instead of localhost
so when a docker-ip is present, it is used instead of the localhost.
both processes should generate full uuids
Implement aggregate restore from event store (replay).
the extension modukle should only contain libs and services that are "core" extensions for bpm-cloud. Move config, discovery and edge to separate directory
Currently, grunt builds to src/main/resources/static
which is excluded via gitignore.
It would be better to use target/generated-resources
so we do not polute the src-space.
Application:
Spring-Boot: (v1.5.3.RELEASE)
though events are received, they cannot be processed ...
2017-06-19 21:25:55.071 INFO 78567 --- [cTaskExecutor-1] .c.w.q.s.WorkloadQueryServiceApplication : receiving event: (Body:'[B@1548971e(byte[551])' MessageProperties [headers={axon-message-id=8120845e-4533-4b19-8158-a889d281d918, axon-message-aggregate-seq=0, axon-metadata-correlationId=2bc64c7f-d358-4aa8-8e75-4c5fc42a08db, axon-message-aggregate-type=TaskAggregate, axon-message-revision=null, axon-message-timestamp=2017-06-19T19:25:55.066Z, axon-message-type=org.camunda.bpm.extension.cloud.workload.event.TaskCreatedEvent, axon-metadata-traceId=2bc64c7f-d358-4aa8-8e75-4c5fc42a08db, axon-message-aggregate-id=simpleprocess-1d3a9a00-5525-11e7-a954-acde48001122}, timestamp=null, messageId=null, userId=null, receivedUserId=null, appId=null, clusterId=null, type=null, correlationId=null, correlationIdString=null, replyTo=null, contentType=null, contentEncoding=null, contentLength=0, deliveryMode=null, receivedDeliveryMode=PERSISTENT, expiration=null, priority=null, redelivered=false, receivedExchange=camunda-task-event-exchange, receivedRoutingKey=org.camunda.bpm.extension.cloud.workload.event, receivedDelay=null, deliveryTag=32, messageCount=0, consumerTag=amq.ctag-jF3lQoTeovJm05FRo28lxw, consumerQueue=camunda-task-event])#Cached Rabbit Channel: AMQChannel(amqp://[email protected]:5672/,1), conn: Proxy@214334c8 Shared Rabbit Connection: SimpleConnection@5aa25f98 [delegate=amqp://[email protected]:5672/, localPort= 57935]
2017-06-19 21:26:35.072 WARN 78567 --- [cTaskExecutor-1] o.s.a.s.c.Jackson2JsonMessageConverter : Could not convert incoming message with content-type [null]
less overhead, use file based h2.
note: SERVER_MODE for multi connection!
// Application 1:
DriverManager.getConnection("jdbc:h2:/data/test;AUTO_SERVER=TRUE");
// Application 2:
DriverManager.getConnection("jdbc:h2:/data/test;AUTO_SERVER=TRUE");
currently, our yaml files are in src/main/resources/config ... that's not nice, because we have to rebuild the docker image for every config change. We need to configure an url where to load the files.
activate travis ci for the project.
Done:
Fails:
Done. Phantomjs binary available at /home/travis/build/holisticon/camunda-bpm-cloud/examples/cloud-tasklist/node_modules/karma-phantomjs-launcher/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
npm ERR! peerinvalid The package grunt does not satisfy its siblings' peerDependencies requirements!
npm ERR! peerinvalid Peer [email protected] wants grunt@>=0.4.2
npm ERR! peerinvalid Peer [email protected] wants grunt@~0.4.1
npm ERR! peerinvalid Peer [email protected] wants grunt@>= 0.4.5
npm ERR! peerinvalid Peer [email protected] wants grunt@>= 0.4.5
npm ERR! peerinvalid Peer [email protected] wants grunt@>=0.4.0
npm ERR! peerinvalid Peer [email protected] wants grunt@>=0.4.1
npm ERR! peerinvalid Peer [email protected] wants grunt@>=0.4.0
npm ERR! peerinvalid Peer [email protected] wants grunt@>=0.4.5
npm ERR! peerinvalid Peer [email protected] wants grunt@~0.4.0
npm ERR! peerinvalid Peer [email protected] wants grunt@>=0.4.0
npm ERR! System Linux 3.13.0-40-generic
npm ERR! command "/home/travis/.nvm/v0.10.36/bin/node" "/home/travis/.nvm/v0.10.36/bin/npm" "install"
npm ERR! cwd /home/travis/build/holisticon/camunda-bpm-cloud/examples/cloud-tasklist
npm ERR! node -v v0.10.36
npm ERR! npm -v 1.4.28
npm ERR! code EPEERINVALID
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /home/travis/build/holisticon/camunda-bpm-cloud/examples/cloud-tasklist/npm-debug.log
npm ERR! not ok code 0
I do not know why, but currently, using Assertions.assertThat does not work. Has to be fixed, see camunda-bpm-cloud-test
every rest api we provide on eventservice should match the camunda signature
camunda rest-like task api for task query (camunda tasklist as client)
Currently, Docker is required in order to build the module. This should be moved to a spearate maven profile, to distuingish between software creation and packaging into container.
Make it look good.
with 2.1 we will have:
and, most important: a prefixed uuidGenerator ... so we can transport the app Name with the taskId.
Currently, every component is packaged into a separate docker container. Docker compose is used to drive the containers up. Unfortunately, individual services are not able to see others, due to some networking issues.
Fix the network issues and finish docker compose configuration.
Scenario
Given task in tasklist
when user complets task in tasklist
then complete task event is created in eventservice store
and the task is no longer in tasklist
Given active task in event service store
when a complete task event arrives
then a rest call "complete" is send to coresponding process engine
and the task is completed
Build a identity service which is used by all process engines, and allow the user to see in his task list user tasks from different process engines.
We do not really need to build our own config server, it is part of the infrastructure and should be replaced by a standard image, see https://hub.docker.com/r/hyness/spring-cloud-config-server/
Currently we use lower case only (eventservice), camelCase (eventService) and hyphen (event-service) in a crude mixture ... we should use simple unique names for all properties so we do not get confused anymore.
Idea: lowercase only (eventservice)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.