Here is the actual stacktrace I see. Note that this was hit from the
begin() method instead of the beforeAction() method I used as an example
in the last email.
<Sep 30, 2008 3:00:33 PM PDT> <Notice> <Stdout> <000000> <30 Sep 2008
15:00:33,227 ERROR UtilityController: stacktrace:
java.lang.IllegalStateException: getS
ession was called outside of a valid context.>
<Sep 30, 2008 3:00:33 PM PDT> <Notice> <Stdout> <000000> <30 Sep 2008
15:00:33,227 ERROR UtilityController: message:We're sorry, but an error
has occurred.>
at
org.apache.beehive.netui.pageflow.FlowController.getSession(FlowControll
er.java:1003)
at
com.kcdistancelearning.pageflow.sharedFlow.utility.UtilityController.get
PortalOrganizationId(UtilityController.java:225)
at portlets.login.LoginController.begin(LoginController.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
a:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.apache.beehive.netui.pageflow.FlowController.invokeActionMethod(Flow
Controller.java:879)
at
org.apache.beehive.netui.pageflow.FlowController.getActionMethodForward(
FlowController.java:809)
at
org.apache.beehive.netui.pageflow.FlowController.internalExecute(FlowCon
troller.java:478)
at
org.apache.beehive.netui.pageflow.PageFlowController.internalExecute(Pag
eFlowController.java:306)
at
org.apache.beehive.netui.pageflow.FlowController.execute(FlowController.
java:336)
at
org.apache.beehive.netui.pageflow.internal.FlowControllerAction.execute(
FlowControllerAction.java:52)
at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestPr
ocessor.java:431)
at
org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.access$201(Pa
geFlowRequestProcessor.java:97)
at
org.apache.beehive.netui.pageflow.PageFlowRequestProcessor$ActionRunner.
execute(PageFlowRequestProcessor.java:2044)
at
org.apache.beehive.netui.pageflow.interceptor.action.internal.ActionInte
rceptors.wrapAction(ActionInterceptors.java:91)
at
org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processAction
Perform(PageFlowRequestProcessor.java:2116)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
236)
at
org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processIntern
al(PageFlowRequestProcessor.java:556)
at
org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.process(PageF
lowRequestProcessor.java:853)
at
org.apache.beehive.netui.pageflow.AutoRegisterActionServlet.process(Auto
RegisterActionServlet.java:631)
at
org.apache.beehive.netui.pageflow.PageFlowActionServlet.process(PageFlow
ActionServlet.java:158)
at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at
com.kcdistancelearning.servlet.IqOesPageFlowActionServlet.doGet(IqOesPag
eFlowActionServlet.java:38)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(St
ubSecurityHelper.java:225)
at
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityH
elper.java:127)
at
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:2
83)
at
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:1
75)
at
weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDis
patcherImpl.java:496)
at
weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatche
rImpl.java:245)
at
org.apache.beehive.netui.pageflow.internal.DefaultForwardRedirectHandler
.forward(DefaultForwardRedirectHandler.java:128)
at
org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.doForward(Pag
eFlowRequestProcessor.java:1801)
at
org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processPageFl
owRequest(PageFlowRequestProcessor.java:741)
at
org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processIntern
al(PageFlowRequestProcessor.java:474)
at
org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.process(PageF
lowRequestProcessor.java:853)
at
org.apache.beehive.netui.pageflow.AutoRegisterActionServlet.process(Auto
RegisterActionServlet.java:631)
at
org.apache.beehive.netui.pageflow.PageFlowActionServlet.process(PageFlow
ActionServlet.java:158)
at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at
com.kcdistancelearning.servlet.IqOesPageFlowActionServlet.doGet(IqOesPag
eFlowActionServlet.java:38)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(St
ubSecurityHelper.java:225)
at
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityH
elper.java:127)
at
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:2
83)
at
weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:
42)
at
com.kcdistancelearning.servlet.filter.IqOesTransactionFilter.wrapInTrans
action(IqOesTransactionFilter.java:60)
at
com.kcdistancelearning.servlet.filter.IqOesTransactionFilter.doFilter(Iq
OesTransactionFilter.java:51)
at
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:
42)
at
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.r
un(WebAppServletContext.java:3212)
at
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSu
bject.java:321)
at
weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121
)
at
weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServ
letContext.java:1983)
at
weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletCont
ext.java:1890)
at
weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java
:1344)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
Sean Adkinson
________________________________
From: Adkinson, Sean
Sent: Tuesday, September 30, 2008 3:42 PM
To: '[email protected]'
Subject: SharedFlowControllers can't access the session in non-action
methods
Hey there,
We have recently started utilizing shared flow controllers for session
getters that used to be in inherited controllers. The reason for this
was to abstract out our inherited controllers in order to be used across
multiple applications in a common code sort of way, but still have a
central location for accessing certain session values.
However, it doesn't appear as if you can access the session in a
SharedFlowController when you haven't come in through an action, since
setPerRequestState is never called in FlowController in this case.
Would it be appropriate to call setPerRequestState for each
SharedFlowController whenever setPerRequestState is called?
Here are snippets of what I am doing:
@Jpf.Controller(...)
public class UtilityController extends SharedFlowController
{
public Integer getOrganizationId()
{
return
(Integer)getSession().getAttribute(SessionConstants.ORGANIZATION_ID);
}
}
@Jpf.Controller(
...
sharedFlowRefs = { @Jpf.SharedFlowRef(name = "utilityController", type =
UtilityController.class) }
)
public class LoginController extends PageFlowController
{
@Jpf.SharedFlowField(name = "utilityController")
private UtilityController utilityController;
protected final synchronized void beforeAction() throws Exception
{
//fail here
System.out.println("Organization ID: " +
utilityController.getOrganizationId());
}
}
When getOrganizationId() lived in an inherited controller, the method
worked fine, since setPerRequestState() had been called for this
controller. If the code were changed to call setPerRequestState() for
each of the shared controllers when it called was called for the current
controller, this looks like it would work just fine.
Any thoughts or suggestions? Thanks for you help!
Sean Adkinson | Web Developer/Programmer | KCDL |
[EMAIL PROTECTED] | (503) 731-5488 | (503) 866-0852 cell