私 (JavaEE 開発に不慣れな人) にとっては、SessionContext インスタンスではなく、コンテナー管理の EntityManager が失敗したトランザクションのロールバックを担当すると思います。次のシナリオを想定してください...
@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;
}
}
}
EntityManager がこれに責任を負わないのはなぜですか? なぜ SessionContext を使用するのでしょうか?