JPA Atributos de Transação

2 respostas
GabrielCardelli

Pessoal boa noite,

Tenho 2 métodos:

@TransactionAttribute(TransactionAttributeType.REQUIRED)
    public boolean alter() {
        Person person = load(1L);
        person.setName("Gilso");
        alter2(person);
        return true;
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public boolean alter2(Person person){
        person.setLastName("Carlos");
        return true;
    }

isso não geraria uma EJBException? Aqui esta rodando normal...

EDIT...

Mudei para outro Bean

@TransactionAttribute(TransactionAttributeType.REQUIRED)
    public boolean alter() {
        Person person = load(1L);
        person.setName("ZZZZZZZZZZZZ");
        transactionBean.alter2(person);
        return true;
    }

@Stateless
public class TransactionBeanImpl implements TransactionBean {

    @PersistenceContext
    private EntityManager entityManager;

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public boolean alter2(Person person){
        entityManager.merge(person);
        person.setLastName("XXXXXXX");
        return true;
    }

}
Agora me gerou uma Exception
javax.faces.el.EvaluationException: javax.ejb.EJBException: EJB cannot be invoked in global transaction

Por que em métodos de beans diferente da erro e no mesmo bean não? T_T era pra dar do mesmo jeito.

2 Respostas

B

Olha, entre chamadas de métodos dentro do mesmo EJB você não tem mudança no tipo da transaction.

Se na sua primeira situação o método “alter()” foi chamado pelo client, o tipo de transação q irá vigorar será o REQUIRED, mesmo você fazendo a chamada ao “alter2()” posteriormete. Caso o serviço de outro EJB seja consumido (como no segundo caso), aí sim será verificado novamente o tipo da transaction e vc receberá o exception.

GabrielCardelli

Valeu Rodolfo.

Obrigado. :smiley:

Criado 6 de fevereiro de 2011
Ultima resposta 9 de fev. de 2011
Respostas 2
Participantes 2