Tratamento de Transações utilizando SessionBean's

2 respostas
C

Estou utilizando um Session Bean que faz um processamento acionando outros 3 session’s, cada um destes session’s se comunica com um Entity. Estou precisando criar uma transação que trate este processamento.
Estou fazendo da seguinte forma :

UserTransaction usr = mySessionCtx.getUserTransaction ();

usr.begin();

//Chamadas as sessions

usr.commit();

Porem o quando o Commit vai ser efetuado da o seguinte erro : SessionSolicitacaoBean/rollback : java.lang.IllegalStateException: No active Transaction

SessionSolicitacaoBean/incluir : javax.transaction.RollbackException: Error preparing bean instance: MarshallingXAException : null

Alguem ja passou por este problema…

2 Respostas

T

Em primeiro lugar, eh necessario esclarecer que as transacoes, nos session beans, podem ser de dois modos: Container Managed Transaction ou Bean Managed Transaction.

No primeiro modo as transacoes sao feitas de uma forma declarativa, no ejb-ref.xml, ja no segundo, as transacoes sao feitas de forma programativa, como apresentado na sua questao.

Para usar o seu session bean da maneira que voce apresentou, eh obrigatorio setar no descritor o modo de transacao Bean, e nao Container. Seria necessario esse esclarecimento no seu projeto, para verificar se o descritor esta configurado corretamente. Tentar usar transacoes programativas em Session Beans com CMT justificariam o erro mencionado.

Gostaria de salientar que, mesmo usando essa estrategia de um session invocar outros sessions, eh possivel continuar usar as transacoes no modo declarativo, os sessions invocados irao “herdar” a transacao do session mais externo, a nao ser que voce tenha setado esses outros sessions a usar RequiresNew ou algo parecido. Um eventual rollback pode ser dado usando context.setRollbackOnly(), e o container faria todo o servico sujo por voce.

ozielneto

Não esqueça de verificar a demarcação de transações quando usar CMT nos SessionBeans e nos EntityBeans.

E EntityBean só podem ser CMT.

Bom estudo.

Criado 13 de junho de 2003
Ultima resposta 15 de jun. de 2003
Respostas 2
Participantes 3