EJB容器以两种方式考虑异常 -
应用程序异常 - 如果违反业务规则或在执行业务逻辑时发生异常。
系统异常 - 任何异常,不是由业务逻辑或业务代码引起的。 RuntimeException,RemoteException是SystemException。例如,EJB查找期间出错。 RuntimeException,RemoteException是SystemException。
- >这是否意味着我需要为我的bussines逻辑使用已检查的异常?喜欢这个?
private void checkConstraints(Object object) throws ValidationException{
Set<ConstraintViolation<Object>> constraintsAdress = this.getValidator().validate(object);
if(!constraintsAdress.isEmpty()){
String fullErrorConstraint = "";
for (ConstraintViolation<Object> constraint : constraintsAdress) {
fullErrorConstraint = fullErrorConstraint + constraint.getMessage() + "\n";
}
throw new ValidationException(fullErrorConstraint);
}
}
@Override
public long addCafe(Cafe cafe) throws ValidationException, DBException{
this.checkConstraints(cafe.getAddress());
for(FootballMatch footballMatch: cafe.getNextMatchesToWatch()){
this.checkConstraints(footballMatch);
}
this.checkConstraints(cafe);
this.getManager().persist(cafe);
return cafe.getCafeID();
}
但......
应用程序异常不会自动导致将事务标记为回滚,除非将ApplicationException批注应用于异常类并使用rollback元素值指定true ...
我不再完全理解它了...... 使用是否是个好主意:
答案 0 :(得分:2)
如果您有兴趣,我会使用以下测试来比较tomee和wildfly的行为: Baseclass-Bean for test
实际的测试类是:
arquillian/wildfly和tomee/embedded
某些测试已停用,因为tomee似乎没有正确支持“inherited”。