- Which is the correct way of declaring bean-managed transaction demarcation for an EJB 3.0 message-driven bean?
@MessageDriven
public class MyMessageBean implements MessageListener, UserTransaction {
@MessageDriven
@TransactionManagement (TransactionManagementType.BEAN)
public class MyMessageBean implements MessageListener{
@MessageDriven
public class MyMessageBean implements MessageListener{
@TransactionManagement(TransactionManagementType.BEAN)
public void onMessage(Message message) {...}
@MessageDriven (transactionManagement = TransactionManagementType.BEAN)
public class MyMessageBean implements MessageListener{
Los EJB's pueden también manejar transacciones de manera explícita. Sólamante los session beans y los message-driven beans que definan un javax.ejb.TransactionManagementType como Bean mediante la anotación @javax.ejb.TransactionManagement pueden administrar sus propias transacciones. A los EJB's que administran sus propias transacciones se les llama beans BMT (bean-managed transaction). Los beans entity no pueden ser BMT. Los BMT's no declaran atributos de transacción para sus métodos. Aquí un ejemplito:
@Stateless
@TransactionManagement (TransactionManagerType.BEAN)
public class HypotheticalBean implements HypotheticalLocal{ ... }
Que cómo verán, es similar a la segunda alternativa que es nuestra respuesta.
Para administrar sus propias transacciones , un EJB necesita obtener un objeto UserTransaction. Éste se obtiene mediante EJBContext y inyectándolo con @Resource.
Pregunta tomada de ExamWorx
Publicar un comentario