when I understood you right, you want to run some async processes one after the other, not concurrently. In this case you need to manage the sync by your own. There are multiple ways to achieve this: by having a Lock-Manager (local: singleton instance, remote: some sort of replicated TreeCache or Infinispan), sync via Database (bad performance). Scheduled Jobs and MDB's have nothing common that would provide a Locking-System.