Estou tendo um problema com transações controladas pelo container EJB (JBoss 4.0.4SP1).
Tenho dois métodos, metodoA e metodoB que são métodos de um mesmo Session Bean Stateless.
O metodoA executa várias operações em um SGDB e chama diversas vezes o metodoB
que tbém executa várias operações em um SGDB.
O comportamento que eu espero deste processo é que o controle de transação do metodoB seja independente do
metodoA, ou seja, quando metodoB finalizar seja feito um commit ou se exceção rollback (nas operações do metodoB).
O mesmo para o metodoA, se sucesso commit, se exceção rollback (nas operações do metodoA).
Abaixo segue um esquema de chamadas que realizo.
A transação do metodoA está configurado (ejb-jar.xml) como Required e do metodoB como RequiresNew.
Aparentemente na primeira chamada do metodoB é criada uma nova transação,
porém nas próximas chamadas do metodoB se exceção não é feito o rollback.
- Já tentei outras combinações de transações como Never com RequiresNew e Never com Required com nenhuma obtive sucesso.
- Os métodos são ambos chamados via interface remota.
- A persistência é feita com JDBC.
Se alguém tiver alguma idéia do que pode estar errado eu agradeço.
metodoA
|
| insert update delete
|
| Loop
| metodoB
| fim Loop
|
| insert update delete
|
fim metodoA
metodoB
|
| insert update delete etc
|
fim metodoB
<container-transaction>
<method>
<ejb-name>SessionBean</ejb-name>
<method-name>metodoA</method-name>
<method-params>
<method-param>java.util.List</method-param>
</method-params>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>SessionBean</ejb-name>
<method-name>metodoB</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</method>
<trans-attribute>RequiresNew</trans-attribute>
</container-transaction>