【问题标题】:What is the main difference between JavaEE @PreDestroy vs HttpSessionListener#sessionDestroyed and when to use what?JavaEE @PreDestroy 与 HttpSessionListener#sessionDestroyed 之间的主要区别是什么以及何时使用什么?
【发布时间】:2017-02-28 07:51:30
【问题描述】:

我需要在用户编辑资源时锁定和释放资源。 我可以很容易地在它上面设置一个锁,当用户保存它时解锁它或者当用户注销时解锁。

但我的问题是,当用户进入编辑页面并直接将其留在那里而不保存或只是在编辑页面中关闭浏览器时。 在这种情况下,我必须解锁资源以供其他用户访问。

资源需求量不大。所以可以等到会话超时并解锁它。所以我找到了这两种方法。 1. 使用“@PreDestroy”注解调用解锁资源的方法。 2.实现“HttpSessionListener”,在“HttpSessionListener#sessionDestroyed”里面写解锁逻辑

但对我来说,两者似乎都在做同样的事情。 你们现在可以告诉我哪一个更适合我的场景以及这两者之间的主要区别吗?

使用 JAVA 7、EJB3 和 JSF2 提前致谢。

【问题讨论】:

    标签: jakarta-ee session-timeout


    【解决方案1】:

    好的,我用这两种方法做了一些研究,得出了一个结论。

    @PreDestroy 注释方法在内部由 HttpSessionListener#sessionDestroyed 处理。

    首先要命中的是 HttpSessionListener#sessionDestroyed 然后会调用 @PreDestroy 注释的方法。所以我决定使用 HttpSessionListener#sessionDestroyed。下面是我的实现。

    @WebListener
    public class MyHttpSessionListener implements HttpSessionListener {
    
        Logger logger = new Logger();
    
        @Override
        public void sessionCreated(HttpSessionEvent arg0) {
            // Nothing to DO
        }
    
        @Override
        public void sessionDestroyed(HttpSessionEvent arg0) {
            try {
                HttpSession session = arg0.getSession();
                Object sessionMyObj = session.getAttribute("myDTBManagedBean");
    
                if (sessionMyObj != null && sessionMyObj instanceof MyDTBManagedBean) {
                    MyDTBManagedBean myDTB = (MyDTBManagedBean ) sessionMyObj;
    
                    if (myDTB != null) {
                       //Do my unlocking logic
                    }
                }
            }
        } catch (Exception e) {
            logger.error(//log exception);
        }
    }
    

    @WebListener 使类成为 servlet 侦听器 http://docs.oracle.com/javaee/6/api/javax/servlet/annotation/WebListener.html

    【讨论】:

      猜你喜欢
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      • 2014-07-10
      • 1970-01-01
      • 2015-08-22
      • 2015-08-06
      相关资源
      最近更新 更多