package study.ejb2.transaction.bmt.stateful; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import javax.transaction.UserTransaction; public class EjbStatefulOrderProcessBean implements SessionBean { private static final long serialVersionUID = -210741220707390263L; private SessionContext ctx; private UserTransaction ut; private String orderID; public void setSessionContext(SessionContext ctx) { System.out.println("setSessionContext"); this.ctx = ctx; } public void ejbCreate(String orderID) { System.out.println("ejbCreate"); this.orderID = orderID; } public void ejbActivate() { System.out.println("ejbActivate"); } public void ejbPassivate() { System.out.println("ejbPassivate"); } public void ejbRemove() { System.out.println("ejbRemove"); } public void unsetEntityContext() { System.out.println("unsetEntityContext"); } /** * With Stateful BMT we can start a transaction in one method * and finish in another. */ public void processOrder() { ut = ctx.getUserTransaction(); System.out.println("Proccessing order " + orderID); try { ut.begin(); } catch(Exception e) { System.out.println("Error at begin"); e.printStackTrace(); } } public void processPayment() { System.out.println("Proccessing payment order " + orderID); try { ut.commit(); } catch(Exception e) { System.out.println("Error at commit"); e.printStackTrace(); try { ut.rollback(); } catch(Exception e1) { } } } }