【问题标题】:Asynchronous call to db in web project using jsf and hibernate使用jsf和hibernate在web项目中异步调用db
【发布时间】:2012-01-28 23:36:40
【问题描述】:

我想使用 JSF 2.0 和 Hibernate 制作一个 Web 应用程序。我想在数据库[异步]中记录异常。

我该怎么做?

【问题讨论】:

  • 您要记录哪些异常?到现在为止你创作了什么?
  • 我想在任何级别(数据库或 java 类)中记录该请求期间出现的任何异常......我不想使用 log4j 而我想将它记录到数据库(使用记录器我们通常使用不同的级别)
  • 您只使用 Hibernate 和 JSF 吗?小服务程序? EJB?春天?向我们展示一些您目前拥有的代码。

标签: java hibernate jsf-2


【解决方案1】:

您在问题中提供的信息确实有点微薄,但无论如何我都会试一试。

将异常日志记录限制在请求处理期间发生的那些(根据您的评论),您的第一步是安装 Servlet 过滤器:

@WebFilter(filterName="exceptionHandler", urlPatterns="/*")
public class ExceptionHandler extends HttpFilter {

    @Override
    public void doFilter(HttpServletRequest request, HttpServletResponse response, HttpSession session, FilterChain chain) throws ServletException, IOException {

        try {
            chain.doFilter(request, response);
        } catch (Exception e) {
            // ... handle exception here
        }
    }
}

如果您已经安装了其他过滤器,您可能需要web.xml 来调整它们的调用顺序。

下一步是对数据库进行异步持久化。这取决于您在 JSF 和 Hibernate 之外使用的堆栈。例如,Java EE 在这里有一个方便的 @Asynchronous 注解,而在 Spring 中它是 @Async。一般来说,JSF 最常与 Java EE 结合使用,但人们说他们使用 Hibernate 而不是 JPA 通常倾向于使用 Tomcat。

对于 Java EE,您将在过滤器中注入一个 EJB,该 EJB 使用 JPA(可能是 Hibernate)和提到的 @Asynchronous 注释:

过滤器:

@WebFilter(filterName="exceptionHandler", urlPatterns="/*")
public class ExceptionHandler extends HttpFilter {

    @EJB
    private ExceptionPersister exceptionPersister;

    @Override
    public void doFilter(HttpServletRequest request, HttpServletResponse response, HttpSession session, FilterChain chain) throws ServletException, IOException {

        try {
            chain.doFilter(request, response);
        } catch (Exception e) {
            exceptionPersister.persist(e);
        }
    }
}

EJB:

@Stateless
public class ExceptionPersister {

    @PersistenceContext
    private EntityManager entityManager;

    @Asynchronous
    public void persist(Exception exception) {
        // use entityManager to persist exception in your
        // specific way.
    }
}

【讨论】:

  • 谢谢它帮了我很多..我不知道这里提到..
    **谢谢 Arjan Tijms**
猜你喜欢
  • 2019-12-31
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 2011-03-03
  • 2015-09-01
  • 1970-01-01
相关资源
最近更新 更多