我需要在用户编辑时锁定和释放资源。我可以轻松地设置锁定,当用户保存它时,或者当用户注销时,请进行解锁。
但是我的问题是用户进入编辑页面时,只需在编辑页面中关闭浏览器即可将其放在那里。在这种情况下,我必须解锁其他用户访问的资源。
资源在需求中并不大。因此,可以等到会话超时并解锁。因此,我找到了这两种方法。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