O controle de transações nos Enterprise Java Beans pode ser efetuado de forma simples, com base na Java Transaction API, por meio de anotações sobre os métodos e controle via contêiner. Com relação ao escopo da transação, especificado pela anotação TransactionAttribute, é correto afirmar que o tipo:
- A)Never desconsidera qualquer transação corrente, executando fora de transações, de forma independente;
Errada: Never nao ignora qualquer transacao corrente para rodar dentro dela, e sim exige que nao exista transacao; se houver, ocorre excecao.
- B)Mandatory inicia uma nova transação para execução do método;
Errada: Mandatory nao inicia transacao nova, apenas exige que ja exista uma transacao corrente.
- C)NotSupported não permite o uso de transações, gerando uma exceção caso haja uma transação em andamento;
Errada: NotSupported nao proibe transacoes no sentido absoluto, pois o metodo apenas executa fora de transacao e pode suspender a corrente.
- D)RequiredNew exige uma transação corrente, gerando uma exceção caso não haja uma transação em andamento;
Errada: o nome correto e RequiresNew, e ele cria uma nova transacao sem exigir transacao corrente; se existir uma, ela e suspensa.
- E)Supports utiliza uma transação do cliente, caso exista, mas não cria transações para a execução do método.
Certa: Supports participa da transacao do cliente se ela existir, mas nao cria nova transacao para executar o metodo.
Gabarito: E
No EJB, a anotacao TransactionAttribute serve para dizer ao contêiner como o método deve se comportar em relação à transação. Em vez de você abrir e fechar transação na mão, o contêiner assume essa parte e aplica a regra escolhida, o que deixa o código mais limpo e previsível. A alternativa certa é a que descreve o comportamento de Supports: o método participa da transação do cliente se ela já existir, mas não cria uma nova por conta própria. Se não houver transação em andamento, o método simplesmente executa sem transação. É o clássico "se tiver, eu acompanho; se não tiver, eu sigo o baile". Isso bate com o que a especificação do EJB define para os atributos transacionais da anotação TransactionAttribute. Em termos práticos, Supports é um comportamento flexível, enquanto outros atributos são mais rígidos, como Required, RequiresNew, Mandatory, NotSupported e Never. Por isso o gabarito é a letra E: ela traduz corretamente a ideia de usar a transação do cliente, caso exista, sem iniciar uma transação nova para a execução do método.