我有一个使用 CMT 的 EJB。此 EJB 是 JSON JERSEY REST Web 服务。此 Web 服务由独立的 GSON REST 客户端调用。
此 EJB 按以下顺序在单个事务中调用以下类: 1) 执行 DB 插入操作的 DB DAO 类。2) 将用户插入 Active Directory 的 LDAP 客户端类。
当任何异常发生时,EJB/web 服务会抛出 500 内部服务器错误并且容器回滚事务。我想捕获此错误,转换为有意义的消息并作为我的响应对象的一部分发送给消费者。如何捕获此 EJB 回滚异常?我发现如果我在 EJB 中捕获它,那么事务就不会回滚。是否有任何拦截器可以拦截 EJB 回滚异常并捕获它?
下面是我的 EJB 代码:
@Interceptors(SpringBeanAutowiringInterceptor.class)
@Stateless(name = "RegistrationServiceImpl", mappedName = "EJB-model-RegistrationServiceImpl")
@Path("registration")
public class RegistrationServiceImpl implements IRegistrationService {
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public RegistrationResponse validateMemberRegInfo(RegistrationRequest request){
// CALL DB DAO throws DB exception
// CALL LDAP client throws LDAP exception
}
}