假设您有一个筛选器,它启动一个数据库事务,处理请求,然后尝试提交该事务。
doFilter(...) {
...
transaction.begin();
filterChain.doFilter(request, response);
transaction.commit();
}
使用泽西,存在一些问题:
>
使用ContainerRequestFilter/ContainerResponseFilter。
公共ContainerRequest筛选器(ContainerRequest请求){...}
公共ContainerResponse筛选器(ContainerRequest请求,ContainerResponse响应){...}
这允许异常冒泡到ExceptionMapper,但将逻辑拆分为两个单独的方法/接口。问题是,如果有一个未映射到响应的异常,则永远不会调用ContainerResponseFilter,因此您无法进行清理。
在JAX-RS环境中处理这个问题的首选方法是什么?是否有一种方法来配置响应的刷新,或者是否有一个我忽略的类或接口?
我对JAX-RS/Resteasy应用程序也做了一些研究。我在读这个问题之前考虑的两个选项:
ExceptionMapper
(或使用自定义的DaoException
)并在此处或ContainerResponseFilter
中处理它,因为ExceptionMapper<?>
处理所有异常。transaction.begin()
之前,请检查事务的当前状态,并在需要时回滚到该状态。这两种选择都有问题。
exceptionmapper
太宽,而exceptionmapper
可能遗漏了一些其他异常,从而再次导致事务未被清理。所以看了你的问题,我目前在想:
ContainerRequestFilter
启动事务(与@NameBinding
注释构造结合使用)。ContainerResponseFilter
提交事务(如果资源方法尚未关闭它)。筛选器
确保事务已关闭,如果未关闭,则将其回滚。问题内容: 在常规的Web应用程序中,我可以为各种路径(例如,身份验证,授权,错误,日志记录等)分配一系列过滤器。 好处是我编写servlet时专注于核心功能,而不必担心基础结构方面。我可以编写正交的,跨领域的过滤器以进行身份验证,授权等。然后,可以将它们编织到web.xml中。查看web.xml足以确保我的应用程序中没有漏洞。 在JAX-RS或Jersey中有可能吗?如果没有,我最好的选择是
我们可以通过 实现创建JAX-RS示例。 为此,需要加载 jersey相关jar文件或使用Maven框架。 在这个例子中,我们使用jersey jar文件来实现JAX-RS jersey示例。 Jersey Jar文件下载网址:https://jersey.github.io/download.html 打开Eclipse,创建一个Web工程: restfuljersey,如下图所示 - JAX-
我正在学习Jersey/JAX-RS,需要一些ExceptionMapper方面的帮助。 我有一个UserFacade类、AbstractFacade类和User类本身,它们都是非常标准的,主要是通过在NetBeans中创建一个新的Web服务RestFUL项目生成的。我的问题是,我想现在开始捕捉错误,比如“唯一约束违反”错误。我想我需要实现一个异常映射器...我的门面有以下内容: 这是我得到的错误
JAX-RS是否可以只使用带有注释的Servlet3.0(特别是Tomcat7)来实现,而不必实现另一个Servlet容器? 如果不是,请解释为什么下面这本书中的引用是不正确的,或者是我对它的解释是错误的。 因为此示例部署在Java EE应用程序服务器或独立的Servlet3.x容器中,所以我们只需要一个空的web.xml文件。服务器将检测到某个应用程序类在您的WAR中,并自动部署它。(带有JAX
我有一个基本的REST web服务可以工作,但我确实有一个问题。下面是一个简短的代码片段。
我正试图在NetBeans 7.4(今天发布)和GlassFish 4服务器下开发JAX-RS。 显然,NetBeans 7.4 应该使用 Jersey 2.0,但是在库下查看项目内的库 - javax.servlet-api.jar javax.ws.rs-api.jar … 所以我不确定Jersey和服务器使用的是哪个版本。因此,第一个问题是:我是否需要在运行时使用与编译时相同的JAX-RS实