我试图通过约束验证来持久化实体,
当调用持久化时 - 抛出约束并且调用者得到EjbTransactionRolledbackException
...
所以我尝试显式调用验证并抛出ConstraintViolationException
/RuntimeException
呼叫者仍然得到EjbTransactionRolledbackException
...
当我扔MyException
延伸Exception
- 调用者得到MyException
即使我明确地打电话sc.setRollBackOnly
它仍然发生了:(
这不应该是这种行为。
这是怎么回事?
配置:
网豆 6.9.1
玻璃鱼3.0.1
JPA 2.0 (EclipseLink)
EJB 3.1
谢谢!!!
@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);
}
所以我尝试显式调用验证并抛出 ConstraintViolationException/RuntimeException ,但调用者仍然得到 EjbTransactionRolledbackException...
提供完整的堆栈跟踪可能会有所帮助。无论如何,我想知道您如何调用 EJB 以及您是否正在传播事务,在这种情况下,在出现系统异常时抛出 EJBTransactionRolledbackException 是正确的行为。但以下博客文章可能会有所帮助:
违反约束,事务回滚 http://wolf-71.blogspot.com/2009/10/constraint-violated-transaction-rolled.html
在 JPA 上使用 Bean 验证时
EJB 3 bean 中的实体
实际上会得到一个
EJBTransactionRolledbackException 如果
存在约束违规。
javax.ejb.EJBTransactionRolledbackException: Invalid object at persist time for groups [javax.validation.groups.Default, ]
Caused by: javax.validation.ConstraintViolationException: Invalid object at persist time for groups [javax.validation.groups.Default, ]
这一切都很好根据
规范,但不是真正的
有趣的信息。你不
真的很想知道发生了什么,你
想知道出了什么问题。
所以我建议添加以下内容
你的 ejb-jar.xml:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
version="3.0">
<assembly-descriptor>
<application-exception>
<exception-class>javax.validation.ConstraintViolationException</exception-class>
<rollback>true</rollback>
</application-exception>
</assembly-descriptor>
</ejb-jar>
这样你就可以直接访问你的
违规行为。
资源
- On EJB and application vs system exception:
- EJB异常处理的最佳实践 http://www.ibm.com/developerworks/java/library/j-ejbexcept/index.html
-
16.6。例外情况和交易 http://codeidol.com/java/netbeans/Transactions/Exceptions-and-Transactions/
- On Bean Validation
-
违反约束,事务回滚 http://wolf-71.blogspot.com/2009/10/constraint-violated-transaction-rolled.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)