- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 REST Web 服务,它使用以下方法管理其事务:
@Inherited
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({METHOD, TYPE, FIELD, PARAMETER})
public @interface TransactionRequired {
}
@Interceptor
@TransactionRequired
public class TransactionRequiredInterceptor {
@Inject
private EntityManager entityManager;
@AroundInvoke
public Object manageTransaction(InvocationContext ctx) {
try {
..start transaction..
}
catch(Exception e) {
..rollback..
}
}
}
我也像这样映射我的异常:
@Provider
public class RuntimeExceptionMapper implements ExceptionMapper<RuntimeException> {
@Override
public Response toResponse(RuntimeException exception) {
.. return some response..
}
}
问题是,当抛出 RuntimeException 时(事务启动后),它会立即被 RuntimeExceptionMapper 拦截,并且事务永远不会回滚。
既然如此,我需要一种方法来优先考虑 TransactionRequiredInterceptor..
观察:使用 @Transactional 不是一个选项,因为我需要在 Tomcat 8 上部署。
最佳答案
恕我直言,你问的没有意义。因为您的 JAX-RS 库不必通过拦截器实现异常映射。
但是您的 TransactionRequiredInterceptor
仍然可以通过使用 finally
block 来响应异常 - 因为 JVM 总是(几乎)保证其执行。
无论如何,我怀疑这是否是一个好主意。
首先,一个更好的方法是添加额外的层(我们称之为 service
或 dao
)并拦截此类方法。
其次,您可以 100% 确定您的事务管理实现会存在大量错误。恕我直言,对于您的情况(CDI 和 Tomcat),最好的方法是 DeltaSpike因为它已经为您提供了这样的 @Transactional 拦截器:org.apache.deltaspike.jpa.api.transaction.Transactional。我个人使用它并取得了巨大成功。
顺便说一句:您还可以尝试 Apache DeltaSpike,因为它还有许多其他有用的功能 - 它们可以为您省去许多麻烦。
关于java - 如何优先考虑 CDI 拦截器而不是 JAX-RS ExceptionMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33957632/
我如何注册一个包罗万象的 ExceptionMapper确实如此 不是 拦截 WebApplicationException哪个 Jersey 提供特殊处理? 更新 :我提交了此功能请求:http:/
抱歉我的英语不好。我正在使用 grizzly 和 jersey 构建 Web 应用程序。 我是这样实现的 ErrorModel errorModel = new ErrorModel(
我将 Jersey 用于 REST 网络服务。 每当我没有从服务层获得任何对象时,我都会通过抛出 NotFoundException(Package com.sun.jersey.api) 来处理所有
我的应用程序提供了一个 RESTful 接口(interface)来执行某些操作。我正在使用 ExceptionMapper 捕获 NoResultException 或 EntityNotFound
假设我有 3 个想要“捕获”的异常类: Jersey 的 WebApplicationException MyException 扩展了 RuntimeException 异常 我希望 WebAppl
我正在为 EJB 服务开发 REST-facade,这意味着它调用 EJB,将结果转换为 REST 调用者能够理解的表示形式,然后返回它(作为 json 或 xml)。所有这些都表现出色。但是 EJB
我的 Spring Boot + Jersey REST 服务无法按预期工作。 EmailExistsException 在 UserController 中抛出,但我只收到错误 500。一直都是。而
我正在抛出异常 MyCustomException从我的应用程序。 (EJB 层) 我在 Web 服务层中有一个异常映射器,如下所示 - package net.webservices; import
我正在尝试调用此异常映射器以返回 404 未找到响应,但它一直返回 500 内部错误。 Jersey 版本是 2.22.1。下面的代码片段。感谢所有帮助。 谢谢。 异常映射器类。 package or
我有一个ExceptionMapper,它是通用公共(public)库的一部分: @Provider public class GenericExceptionMapper implements Ex
我正在使用 Jersey 在 java 中做一个 Web 服务。我对 Jersey 的依赖是: /* JAX-RS Impl (Jersey) */ compile 'org.glassfish.je
问题Exception Handling/Mapping for a particular class让我想到了如何将 ExceptionMapper 注册到特定资源 Method 的问题。 我试过像
我正在尝试调用此异常映射器以返回 404 未找到响应,但它一直返回 500 内部错误。 Jersey 版本是 2.22.1。下面的代码片段。感谢所有帮助。 谢谢。 异常映射器类。 package or
在 Quarkus 中,异常映射器返回的实体似乎被包装在另一个实体中。 提供一个 JAX-RS 异常映射器,例如: @Provider public class WebhookExceptionMap
我有一个使用RESTeasy 2.0.1.GA在JAX-RS中使用ExceptionMapper的方案。一切正常。 我现在想使用RESTeasy的mock mechanism测试整个过程。不幸的是我的
我为特定对象制作了一个 RESTFUL-API 并使用 javax.validation.Constraints 进行验证,当我执行应用程序时它按预期工作并且 ExceptionMapper 类被正确
我有 REST Web 服务,我使用 Jersey Test、Mockito、Junit 对其进行测试。当 Web 服务方法成功执行时,我得到正确的响应。如果数据无效,则抛出自定义异常,必须由 Exc
我正在开发一个使用 Dropwizard 的应用程序,它具有 ExceptionMapper 的实现:https://github.com/dropwizard/dropwizard/blob/mas
我正在使用 Jersey 2.5.1 和 Jackson 2.2。用于构建 JSON Rest Web 服务。我也用 2 个 ExceptionMappers 启动并运行它,但对于“非 json”请求
我在应用程序中使用RestEasy,并且从ExceptionMapper接口(interface)实现了toResponse方法。 我的问题是:这个方法在海量请求的环境下会不会有问题(很多请求会导致抛
我是一名优秀的程序员,十分优秀!