Andy Schwartz wrote:
Hey All -
It seems to me that the proposed API is a result of two more
fundamental deficiencies:
1. The servlet spec is lame and does not state that ServletContext
implementations must ensure thread-safe access to attributes.
This one I'm not worried about, because I doubt that any Servlet
container doesn't do this
2. ServletContext implementations are lame and have not switched from
Hashtable to ConcurrentHashMap.
I think that the solution to #1 is to seek a clarification to the
spec, since it is clearly bogus that the spec is not clear on this
point. Note that the spec has already been updated to be more clear
about concurrent access to HttpSession attributes, see the last couple
of paragraphs of:
http://jcp.org/aboutJava/communityprocess/maintenance/jsr154/servlet-2.5_MR6.html
It doesn't seem like that big of a stretch to get a similar
clarification for ServletContext - I suspect that the spec is already
generally interpreted to imply that the ServletContext provides
thread-safe access. Stating this explicitly in the spec does not seem
controversial (well, not to me at least).
Regarding #2... seems like moving over to ConcurrentHashMap is a
no-brainer for servlet implementations which are still stuck on
Hashtable.
This is more of an issue, however the other problem is that the
ServletContext and Session still don't expose the atomic operations of
ConcurrentMap. Neither do they document what object they do lock on.
Without either of these pieces, it is impossible to perform compound
operations on these Objects atomically safely. We could guess that the
implementations are using the Objects themselves as the monitors, but
not only is that not documented, but doing so would not work if the
implementations used ConcurrentHashMap, which uses lock striping internally.
-- Blake Sullivan
If we are able to satisfy our requirements by going down this route, I
would prefer this over adding a somewhat-redundant API to Trinidad
(ie. would prefer fixing the underlying problems so that we can use
the Application map directly rather than adding a new parallel API.)
Andy
On Jan 28, 2008 7:56 PM, Gabrielle Crawford
<[EMAIL PROTECTED]> wrote:
Hi,
In case anyone filtered away the [jira] message.....
I'd like to add the method described below to the requestContext.
Comments? Objections?
Thanks,
Gab
-------- Original Message --------
add method to get an application scoped concurrentMap to RequestContext
-----------------------------------------------------------------------
Key: TRINIDAD-926
URL: https://issues.apache.org/jira/browse/TRINIDAD-926
Project: MyFaces Trinidad
Issue Type: Improvement
Affects Versions: 1.2.5-core, 1.0.5-core
Reporter: Gabrielle Crawford
Assignee: Gabrielle Crawford
Priority: Minor
This started with Trin Issue 891
https://issues.apache.org/jira/browse/TRINIDAD-891
To avoid the locking in the class loader we'd like to store a map of
name->class per app. However the external context app map calls through to the
ServletContext. The Servlet specification doesn't specify whether the
ServletContext performs any locking on the ServletContext attributes and the
ServletContext doesn't expose the necessary methods for efficient concurrent
access (essentially the operations exposed on ConcurrentMap) necessary to work
efficiently in many cases even if the ServletContext didn't need to perform
locking on reads. The result is that the ExternalContext's ApplicationMap can't
implement ConcurrentMap.
We'd like to add a method to the RequestContext to get an application scoped
concurrent map. This would not call through to the servlet context. The api
proposed is this:
/**
* Gets a per application concurrent map. There is no synchronization
* with ServletContext attributes.
*/
public abstract ConcurrentMap<String, Object>
getApplicationScopedConcurrentMap();
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.