javaee @predestroy vs httpsessionlistener#sessiondestroyed以及



我需要在用户编辑时锁定和释放资源。我可以轻松地设置锁定,当用户保存它时,或者当用户注销时,请进行解锁。

但是我的问题是用户进入编辑页面时,只需在编辑页面中关闭浏览器即可将其放在那里。在这种情况下,我必须解锁其他用户访问的资源。

资源在需求中并不大。因此,可以等到会话超时并解锁。因此,我找到了这两种方法。1.使用" @predestroy"注释调用可以解锁资源的方法。2.实现" httpsessionlistener",并在" httpsessionlistener#sessiondestroyed"内部编写Unlocking逻辑"

但对我来说,这似乎都做得同样。你们现在可以让我现在哪一个更好,对我的情况和这两个方案之间的主要区别?

使用Java 7,EJB3和JSF2预先感谢。

好吧,我对这两种方法进行了一些研究,并得出了结论。

@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

相关内容

最新更新