@TransactionAttribute
Responsável por controlar a forma como as transações devem se comportar/se associar aos métodos e executá-los. Comentarei um pouco sobre este recurso tão importante existente dentro do EJB 3.0, trata-se da anotação @TransactionAttibute.
Onde utilizar?
Utilizada para Decorar/Anotar a classe ou método. Quando aplicado na classe todos os métodos serão automaticamente do tipo especificado, caso anote um método qualquer, anotação que estiver explicita ou implicita na classe será sobrescrita.
Escopo da transação
Anotar classes é métodos apenas com a anotação @TransactionAttibute fará com os métodos executem sempre dentro de uma transação, mas nem sempre é necessária uma transação para executar métodos, comentarei um pouco sobre cada um dos atributos que a anotação @TransactionAttribute recebe para modificar o tipo de transação.
Exemplo:
@TransactionAttibuteType(TransactionAttributeType.REQUIRED)
Para simplificar estarei usando Sim e Não para responder a pergunta: Existe transação antes de executar o método?
REQUIRED
Sim: Executa com a transação existente.
Não: Container cria uma nova transação.
REQUIRES_NEW
Sim: Container cria uma nova transação.
Não: Container cria uma nova transação.
MANDATORY
Sim: Executa com a transação existente.
Não: Uma TransactionRequiredException será lançada.
NOT_SUPPORTED
Sim: Suspende a transação existente (TransExiste), executa o método sem transação, ao terminar a execução retorna a transação existente anteriormente (TransExiste).
Não: O container não cria um nova transação e executa o método.
SUPPORTS
Sim: Executa com a transação existente.
Não: Container não cria transação e executa o método.
NEVER
Sim: Uma RemoteException é lançada.
Não: O container executa o método sem transação.
Exemplo de utilização
@TransactionAttribute(NOT_SUPPORTED)
@Stateful
public class TransactionBean implements Transaction {@TransactionAttribute(REQUIRES_NEW)
public void primeiroMetodo() {…}@TransactionAttribute(REQUIRED)
public void segundoMetodo() {…}public void terceiroMetodo() {…}
public void quartoMethod() {…}
}
Todos os métodos da classe serão anotados implicitamente com NOT_SUPPORTED, indicando que não serão executados em uma transação. A utilização nos métodos primeiroMetodo() e segundoMetodo() sobrescreverão com REQUIRES_NEW e REQUIRED, indicando que será necessário criar uma transação caso não exista.
fonte: http://java.sun.com/javaee/5/docs/tutorial/doc/bncij.html#bncik
2 comentários até agora
Leave a reply
Mais importante que isso é ensinar o lookup que nunca funciona do EJBomba!
Será tema de um novo post (futuramente).