After some investigations on how to use quartz, we ended up improving our own scheduler and messaging.
Both the messaging and scheduler service were kept. in any case, these services will produce jobs in the JBPM_JOB table (tables JBPM_TIMER and JBPM_MESSAGE were removed)
Both async messages and timers will end up as jobs in the job queue table.
There will be one JobExecutor. One job executor can have multiple threads that are all competing for jobs. There is a locking mechanism in place that should quard against duplicate executions.
Also besides the async="true", you now have an async="exclusive". this means that the job executor threads will execute all exclusive asynchronous jobs in a synchronized fashion. this might be handy when e.g. multiple concurrent paths of executions are created and in which all of these paths start with async behaviour. in that case, many jobs are offered to the job executor after one transaction. This might lead to contention since many job executor threads might start working on different jobs of the same process instance. That might lead to contention cause you'll get many optimistic locking exceptions.
There are still some exceptions with respect to messages and timers. But the bulk of the test suite is running.
But i already want to commit for backup reasons. I tried to make sure that other development is not impacted. Let me know if this is not the case and if you are experiencing problems.