[
https://issues.apache.org/jira/browse/OFBIZ-4289?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jacques Le Roux updated OFBIZ-4289:
-----------------------------------
Attachment: OFBIZ-4289_Login_out_on_a
cluster_handled_by_DeltaManager_causes_a_NPE.patch
OK, here is the plan:
from the delegatorName sets in session
session.setAttribute("delegatorName", delegatorName);
we can easily restitute, the 4 variables which are the problem:
// String delegatorName = session.getAttribute("delegatorName"); // set above,
so always present
// Delegator delegator = DelegatorFactory.getDelegator(delegatorName);
// LocalDispatcher dispatcher =
ContextFilter.makeWebappDispatcher(session.getServletContext(), delegator);
// Security security = SecurityFactory.getInstance(delegator)
// Authorization authz = AuthorizationFactory.getInstance(delegator)
I checked session.getAttribute() for each names in {*.java, *.groovy},
sessionAttributes.* in *.ftl, and in *een*.xml for the names themself, they are
needed in
# ControlServlet.doGet() (the 4)
# BirtWorker.setWebContextObjects() (delegator, dispatcher, security)
# ScrumEvents.timeSheetChecker() (delegator)
In ControlServlet.doGet(), getServletContext().getAttribute() is used to
retrieve the 4 if missing => not a pb. Same for the others, if ever it's one
then we can still use the lines of the snippet above in due places. I will not
fix all OFBiz code for this issue, for instance I read in
ScrumEvents.timeSheetChecker()
{code}
Delegator delegator = (Delegator) session.getAttribute("delegator");
[...]
if (UtilValidate.isEmpty(delegator)) {
delegator = (Delegator) request.getAttribute("delegator");
}
{code}
Why not? (I guess it's C/P not refactored)
{code}
Delegator delegator = (Delegator) request.getAttribute("delegator");
{code}
etc.
So I believe we simply have to not put them in session when using distributable
applications, see the attached patch . I refactored for easier/safer reading,
and yes reversed the condition. I finally really wonder if they are usefull in
session at all. I put a NOTE2 under the NOTE:
// NOTE: we do NOT want to set this in the servletContext, only in the request
and session
// NOTE2: it would have been more helpful to know the why than the what (only
few words)!
> Login out on a cluster handled by DeltaManager causes a NPE
> -----------------------------------------------------------
>
> Key: OFBIZ-4289
> URL: https://issues.apache.org/jira/browse/OFBIZ-4289
> Project: OFBiz
> Issue Type: Bug
> Components: framework
> Affects Versions: Release Branch 4.0, Release Branch 09.04, Release Branch
> 10.04, Release Branch 11.04, SVN trunk
> Environment: Ubuntu
> Reporter: Jacques Le Roux
> Assignee: Jacques Le Roux
> Priority: Critical
> Labels: cluster, logout
> Fix For: Release Branch 10.04, Release Branch 11.04, SVN trunk
>
> Attachments: OFBIZ-4289_Login_out_on_a
> cluster_handled_by_DeltaManager_causes_a_NPE.patch, OFBIZ-4289_Login_out_on_a
> cluster_handled_by_DeltaManager_causes_a_NPE.patch, OFBIZ-4289_Login_out_on_a
> cluster_handled_by_DeltaManager_causes_a_NPE.patch, OFBIZ-4289_Login_out_on_a
> cluster_handled_by_DeltaManager_causes_a_NPE.patch, OFBIZ-4289_Login_out_on_a
> cluster_handled_by_DeltaManager_causes_a_NPE.patch, OFBIZ-4289_Login_out_on_a
> cluster_handled_by_DeltaManager_causes_a_NPE.patch, OFBIZ-4289_Login_out_on_a
> cluster_handled_by_DeltaManager_causes_a_NPE.patch, changeset_2510.diff
>
>
> It works locally but not on clusters. You simply get a NPE.
> h3. Problem
> * When we logout we cross an issue due to Tomcat sessions persistence.
> * Because we set distributable to true, to allow sessions failover,
> * and use and DeltaManager for replication.
> * Delegator and other main Classes (notably Dispatcher) are not
> serialized in OFBiz. This is the origin of the problem
> h3. Tried solutions
> By default DeltaManager save active sessions on disk. It uses a private
> String variable pathname for that (default to "SESSIONS.ser"). You can set it
> to null, to avoid session persistence, using a context.xml file in the
> WEB-INF folder with content like below. But I tried it in webtools app on
> staging qs001 (only) and it did not work (with distributable set to false).
> And we have no other means to set it from OFBiz (OOTB).
> {code}
> <Context>
> <Manager className="org.apache.catalina.session.DeltatManager"
> pathname="">
> </Manager>
> </Context>
> {code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira