Caso você não use transações gerenciadas por contêiner então você precisa adicionar a política de transação também:
@Stateful
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=REQUIRED)
Eu só vi esse fenômeno em duas situações:
- a
DataSource
está sendo executado no modo de confirmação automática, portanto, cada instrução é executada em uma transação separada - o
EntityManager
não foi configurado com@Transactional
, mas apenas consultas podem ser executadas, pois qualquer operação DML acabaria lançando uma exceção de transação obrigatória.
Vamos recapitular que você definiu as seguintes propriedades do Hibernate:
hibernate.current_session_context_class=JTA
transaction.factory_class=org.hibernate.transaction.JTATransactionFactory
jta.UserTransaction=java:comp/UserTransaction
Em que a propriedade final deve ser configurada com sua chave de nomenclatura JNDI UserTransaction do Application Server.
Você também pode usar o:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
ou alguma outra estratégia de acordo com seu servidor de aplicativos Java EE atual.