Session is Lost (was Re: [Seaside] A progress bar for seaside)
ramon.leon at allresnet.com
Mon Mar 3 20:31:42 UTC 2008
> Lost but not in an island.
> i have this problem: If i want to access the seaside session
> inside de forWork block will answer nil, e.g:
> html div id: 'id1';
> with: 'Opening...'
> waitMax: 30 seconds
> forWork: [ self session inspect halt. (Delay
> forSeconds: 10) wait. ]
> thenRender:[:r :value | r text: value]
> the inspector shows nil.
> what could be happening here?
> i've followed the message chain over the WATagBrush down to
> this method in BlockContext and BlockClosure
> valueWithing: onTimeout
> but i cannot figure out from there how can i fix this one.
Seaside sessions use dynamic variables, which fail as soon as you fork. A
quick fix is to put this in your base component class...
"this seems dumb, but sometimes the dynamic var that holds the
session is unexpectedly unavailable, like when forking a thread, this
ensures I can always access it"
^ session ifNil: [ session := WACurrentSession value ]
Then on first session access, the dynamic var is copied into a local
instance var that will be available no matter what, like during a fork.
More information about the seaside