Hello.
I do not think InheritableThreadLocal is a good place to put your
DataContext as a DataContext should only be used by a single thread
at a time. You may experience random hard-to-debug problems if you
use the same DataContext for different (child) threads.
This problem is also somewhat relevant for the cayenne
WebApplicationContextFilter as it bounds a DC to the users session
and a session can have multiple parallell requests. I am currently
moving over to a variant of the click filter that allows for a single
DC per thread and checks that there are no uncomitted objects in the
context at the end of each request-response loop.
Perhaps ZK has some place where you can initiate the ZK-threads
DataContext?
Regards,
- Tore.
On May 21, 2007, at 06:23, Steve Wells wrote:
Hi,
I've been playing with the ZK (www.zkoss.org) framework for
building AJAX
apps, and so far have found it rather impressive and easy to use.
Having hit my first roadblock now is getting DataContext, as each
ZK request
runs in a separate thread (see:
http://www.zkoss.org/smalltalks/zkacegi/zkacegi.dsp
) I think this is the problem why I can't get DC
with WebApplicationContextFilter and
DataContext.getThreadDataContext (). I
get "IllegalStateException: Current thread has no bound DataContext."
Looking into src for DataContext I see this comment // TODO: Andrus,
11/7/2005 - should we use InheritableThreadLocal instead?
So I subclassed DataContext and overrode the :
ThreadLocal threadDataContext
to be
InheritableThreadLocal threadDataContext
changed WebApplicationContextFilter to call my subclassed
DataContext and
bingo it works.
Not sure if anyone else has run into this kind of thing before? I
would
raise a JIRA issue but I'm not yet confident that this is the 100%
correct
solution.
Steve