You have EntityManager CDI producer, and you cannot inject it in the Batch beans of
Reader/Processor/Writer. The JBoss still considers these beans as EJB.
You cannot use transactions of CDI in the listeners because there is no Context available and you need to have it because you want to update the state in the state machine.
You want to inject CDI beans but @Inject is not allowed. We do not want to use EJB.
You want to use scoped beans but this API does not know what scope means.
So the workaround is to inject EJB beans and make Async calls in order to use the transactions in the leaf.
Even if you try to use @Transactional in the Processor bean, the JBoss will crash because Arjuna is using it together with the Request scope but this cope is unknown in Batch.
As I told you this is really SE style of design and the beans are limited only to the annotations from the API. If I am user of EE I would expect a cooperation between the APIs within the container. I have another view than the API designer. I am the user and I want all API to be interconnected without any blocker in the container but this is not hapenning in reality.