2014-10-29 3 views
1

Какова продолжительность жизни класса, который расширяет Action (Struts 1.3.10)?LifeTime Класс действия Struts 1.3.10

public class AddProcessAction extends Action { 

    ProcBox procBox = new ProcBox(); 

    @Override 
    public ActionForward execute(ActionMapping mapping, 
           ActionForm form, 
           HttpServletRequest request, 
           HttpServletResponse response) throws Exception { 
     procBox.addToProcBox((ProcessForm)form); 
     return mapping.findForward("success"); 
    } 
} 

ответ

2

Действия Struts 1.x - это однотонные и длительность жизни приложения.

Поэтому они должны быть повторно подключены и надежно защищены потоком.

Ваш пример выше не будет работать, если у вас нет только одного пользователя.

Необходимо преобразовать переменную экземпляра ProcBox в HttpSession, которая уникальна для каждого клиента. Вы можете использовать что-то вроде:

public class AddProcessAction extends Action { 

    private static final String PROC_BOX_SESSION_ATTR = "addProcessAction.procBox"; 

    @Override 
    public ActionForward execute(ActionMapping mapping, 
           ActionForm form, 
           HttpServletRequest request, 
           HttpServletResponse response) throws Exception { 
     final procBox = acquireProcBoxFrom(request); 
     procBox.addToProcBox((ProcessForm)form); 
     return mapping.findForward("success"); 
    } 

    private ProcBox acquireProcBoxFrom(HttpServletRequest request) { 
     final HttpSession httpSession = request.getSession(); 
     ProcBox procBox = (ProcBox)httpSession.getAttribute(PROC_BOX_SESSION_ATTR); 
     if (procBox == null) { 
      procBox = new ProcBox(); 
      httpSession.setAttribute(PROC_BOX_SESSION_ATTR, procBox); 
     } 
     return procBox; 
    } 

} 
Смежные вопросы