users@servlet-spec.java.net

[servlet-spec users] Re: [jsr369-experts] Re: Re: Re: Re: Data Structures and Session Replication

From: Mark Struberg <struberg_at_yahoo.de>
Date: Thu, 12 Feb 2015 18:41:14 +0000 (UTC)

I think it was just not thought about when doing servlet-3.0 because then it was the first version who made web.xml optional. But all that did just work for servlet-3.0 and now there is an implicit backward compat issue for all future versions :(

LieGrue,
strub





> On Thursday, 12 February 2015, 19:37, Shing Wai Chan <shing.wai.chan_at_oracle.com> wrote:
> > When there is no web.xml, by default, it's the latest version.
> In this case, an old app may pick up this version / semantics
> unintentionally.
> We need to think more carefully if we have a different semantics.
>
> Shing Wai Chan
>
>
> On 2/12/15, 6:57 AM, Mark Struberg wrote:
>>> Problems will occur when the new semantics are at odds with how a
>>> container currently behaves. I think this can be addressed with
>>> container specific options to restore the old behaviour for those apps
>>> that have issues.
>> Either that or simply make it depending on the version="4.0" in
> the web.xml.
>>
>> (however this and a lot other version depending features are activated by
> apps which don't like to have web.xml...)
>>
>> LieGrue,
>> strub
>>
>>
>>
>>
>>
>>> On Thursday, 12 February 2015, 13:53, Mark
> Thomas<markt_at_apache.org> wrote:
>>>> On 11/02/2015 06:59, Greg Wilkins wrote:
>>>>
>>>> On 11 February 2015 at 01:45, Mark Thomas<markt_at_apache.org
>>>> <mailto:markt_at_apache.org>> wrote:
>>>>
>>>> HttpSession.markAsDirty(String attributeName)
>>>>
>>>>
>>>> The problem with just adding a new method is that it essentially
> leaves
>>>> the undefined behaviour of setAttribute as is. If an
> application was
>>>> not calling markAsDirty() then we would not know if that was
> because it
>>>> didn't know about the API or was it written expecting some
> funky
>>> session
>>>> that auto detects deep object mutations.
>>> I addressed this in a different part of the thread (only on users I
>>> think). We make it explicit that:
>>>
>>> * setAttribute() has an automatic side-effect of calling markAsDirty()
>>>
>>> * setAttribute() when the value is unchanged (i.e. the object being
>>> passed is the same (read == ) as the object mapped to that
> attribute)
>>> is a NO-OP apart from the side-effect of calling markAsDirty()
>>>
>>>> If we really want to fix this, then perhaps we need modal
> behaviour:
>>>> either we work in the current ill defined API, where applications
> are
>>>> essentially tied to specific session implementations; or we enter
> a new
>>>> mode with precise portable cluster semantics - in which case we
> we may
>>>> as well use an entirely new API - or extension of the existing
> API.
>>>>
>>>> To repeat myself in a different way, we could have two session
>>>> mechanisms behind the same JSESSIONID tracking. If you call
>>>> request.getHttpSession() you get the old ill defined session. If
> you
>>>> call request.getDistributedSession() then you'd get the well
> defined
>>>> cluster session. You could even call both if you wanted to have
> some
>>>> session information held on the node and other in the cluster.
>>>>
>>>> I think any attempt to slip good semantics under the existing
> session
>>>> API is going to break as many applications as it fixes.
>>> Problems will occur when the new semantics are at odds with how a
>>> container currently behaves. I think this can be addressed with
>>> container specific options to restore the old behaviour for those apps
>>> that have issues.
>>>
>>> I'd rather clarify the current API and add a few container specific
>>> options for backwards compatibility than add a whole new API.
>>>
>>>
>>> Mark
>>>
>