i was writing my cloud ideas for Jacob Freund and thought it was a good idea to share them here with everyone:
For a long time, we struggled to combine POJO execution, with DB persistence and with cloud persistence. Now we know how it can be done, but it will take some time for this vision to become a reality.
But apart from that disclaimer, I think we are the closest to real cloud BPM then any other player.
The first crucial aspect lies in the persistence of the runtime data model. Running a process in POJO mode, requires similar but different execution class then DB persistence. Things like lazy loading and maintaining bidirection pointers are different. The cloud is yet another form of persistence with an impact on the runtime execution data model.
The PVM interpretion algorithm will be refactored so that the runtime data model becomes pluggable. We used inheritence in the past, meaning that the PVM interpreter updated base classes when execution was moved forward. We now know how we can extract interfaces from the runtime execution data model. That way the interpreter will be using and updating some new execution interface. Then we can use different runtime data models: 1 for pojo (non persistent execution), 1 for DB persistence and 1 for cloud based persistence.
The next crucial aspect is transactionality. Currently Activiti is most being used as a transactional state machine. In (the real scalable) cloud, there is no transactions, but only eventual consistency. So there are only 2 solutions to that:
1) find new use cases for which you don't need transactional execution. (there are only a few specific cases where transactions are required for correct execution. like a join for instance, or a timer competing with an external trigger)
2) create a scalable locking service on the cloud.