No livro Enterprise Java Beans 3.0, da Oreilly, tem uma frase que tem sido enigmática pra mim: “TransactionRequiredException é lançada se esse método for invocado em um contexto de persistência com escopo de transação”. O método a que ele se refere é o persist. Na verdade alguns outros como o merge têm esse mesmo comportamento.
O problema é que eu não estou conseguindo simular o disparo dessa exceção. Pelo que entendi, o exemplo abaixo deveria disparar, supondo que o cliente chame o método setCabin:
@Stateful
public class TransactionPersistenceContextBean implements TransactionPersistenceContextRemote
{
@PersistenceContext(unitName="titan")
private EntityManager manager;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void setCabin(int pk)
{
Cabin cabin = manager.find(Cabin.class, pk);
cabin.setBedCount(2);
manager.merge(cabin);
}
...
}
Tentei forçar a barra fazendo
Mas o código continuou executando sem problemas. Alguém pode me indicar como exatamente funciona essa exceção ?

