Warum Session-Bean-Methode EjbTransactionRolledbackException auslösen, wenn RuntimeException ausgelöst wurde

Ich versuche, die Entität mit Einschränkungsüberprüfung beizubehalten, wenn der Aufruf fortbesteht. Es gibt eine Einschränkung, die ausgelöst wird, und der Aufrufer erhält EjbTransactionRolledbackException ... also versuche ich die Validierung explizit aufzurufen und @ zu werfConstraintViolationException/RuntimeException und trotzdem bekommt der AnruferEjbTransactionRolledbackException ... wenn ich @ werMyException erweitertException - der Anrufer bekommtMyException

Auch wenn ich explizit @ anrusc.setRollBackOnly es ist noch passiert:

Dies sollte nicht das Verhalten sein.

Was ist los

Aufbau

Netbeans 6.9.1 Glassfish 3.0.1 JPA 2.0 (EclipseLink) EJB 3.1

Vielen Dank!!

@Stateless
public class My {

@PersistenceContext
EntityManager em;

@Resource
Validator  validator;

public Order checkout(Order order) {
    Set<ConstraintViolation<Order>> set = validator.validate(order, Default.class);

    if (!set.isEmpty()) {
        sc.setRollbackOnly();
        //throw new ConstraintViolationException(new HashSet<ConstraintViolation<?>>(set));
        throw new RuntimeException();
    }

    this.em.persist(order);
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage