Por que o CMT confirma na saída do método EJB, quando o atributo de transação é "Necessário&quot

Estudo constantemente constatando que minha transação já existente está sendo confirmada dentro de qualquer método de um EJB marcado como@ejb.transaction type="Required". Isso pode estar correto?

Minha expectativa é que um EJB "exigindo" uma transação signifique: se já existe um, ele educadamente o deixará descomprometido quando feito, para que quem invocou begin () possa continuar a usá-lo para outras operações antes de invocarcommit() ourollback(). [Obviamente, se não houvesse transação em primeiro lugar, o método EJB chamariabegin() ecommit()/rollback().]

Minha expectativa está errada ou devo procurar um bug de configuraçã

Pode ser relevante acrescentar que estou usando o Hibernate 3 dentro do EJB. Estou obtendo uma UserTransaction antes de chamar o método EJB. O wrapper gerado pelo EJB chamaServerTransaction.commit() na saída, na qual o Hibernate se conecta e aproveita a oportunidade para fechar sua sessão. O erro que estou recebendo é uma exceção de carregamento lento do Hibernate, porque a sessão é fechada quando tento acessar os getters em um objeto persistente do Hibernate. Então, tecnicamente, não tenho 100% de certeza se oServerTransaction.commit() Observei necessariamente cometeu oUserTransaction Comecei (talvezServerTransaction.commit() nem sempre segue um commit "real"?), mas se não foi - então com que base o Hibernate está fechando a sessão?

Atualizar Creio que minhas suposições acima estavam corretas, mas minhas observações foram um pouco erradas. Veja abaixo minha resposta auto-fornecida.

questionAnswers(4)

yourAnswerToTheQuestion