To me (someone who is new to JavaEE development), I would think that a container managed EntityManager would be responsible for rolling back failed transactions and not a SessionContext instance. Suppose the following scenario...
@Stateless
public class MySessionBean implements MySessionBeanRemoteInterface {
@PersistenceContext(unitName="MYPu")
private EntityManager em;
@Resource
private SessionContext sctx;
@Override
public StackOverFlowUser createSOUser(String userName, int rep) {
try {
StackOverFlowUser su = new StackOverFlowUser();
su.setUserName(stackOverflowName);
su.setRep(rep);
su.setIsBalusC(userName.equals("BalusC");
su.setIsTheJonSkeet(userName.equals("jon skeet"));
return em.merge(su);
} catch (Exception e) {
//sctx.setRollbackOnly();
return null;
}
}
}
Why wouldn't the EntityManager be responsible for this? Why would SessionContext be used?