-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Chris,

On 6/14/17 10:17 AM, Chris Cheshire wrote:
> On Tue, Jun 13, 2017 at 6:06 PM, Mark Thomas <ma...@apache.org>
> wrote:
> 
>> On 13/06/17 22:01, Mark Thomas wrote:
>>> On 13/06/17 15:27, Chris Cheshire wrote:
>> 
>> <snip/>
>> 
>>>> I'm bewildered at why tomcat operates this way when it comes
>>>> to Numbers
>> and
>>>> Strings. Why is it insistent on coercion when null and zero
>>>> are
>> absolutely
>>>> not the same value.  If this is because of autoboxing, then
>>>> isn't that a bug? A long is not a Long, and when tag
>>>> attributes must be objects and
>> not
>>>> atomic types, shouldn't they be treated accordingly?
>>> 
>>> Tomcat behaves this way because the specification says it has
>>> to. Plenty of folks disagree strongly with the specification
>>> but Tomcat has to implement it. COERCE_TO_ZERO is a
>>> specification breaking configuration option to workaround this
>>> particular behaviour.
>>> 
>>> I've been digging in to this some more and it appears that 
>>> COERCE_TO_ZERO has been given a wider scope in later versions
>>> of Tomcat. The test case you present above behaves the way you
>>> want with COERCE_TO_ZERO set to false in 8.0.x and above. I
>>> need to dig into why that wider scope wasn't applied to 7.0.x.
>> 
>> Mystery solved thanks to some svn archaeology and
>> cross-referencing to the relevant specs.
>> 
>> Tomcat 7 implements EL 2.2. EL 2.2 requires coercion of "" and
>> null to 0 for numeric types (section 1.18.3). (As did earlier
>> versions of the EL spec).
>> 
>> Initially there weren't many complaints because the coercion
>> rules weren't implemented correctly in one important case (i.e.
>> they left these as null rather than coercing to zero). Then bug
>> 43285 [1] got fixed and the complaints started.
>> 
>> To address the complaints, Tomcat introduced the system property 
>> org.apache.el.parser.COERCE_TO_ZERO which restored the
>> non-specification compliant behaviour for the one coercion case
>> that was causing problems. To align with the EL 2.2.
>> specification, the default was for coercion to zero to occur.
>> 
>> The level of complaints about the coercion rules was such that a 
>> backwards compatible change was introduced in EL 3.0 to not
>> coerce to zero. Given Java EE's normal approach that backwards
>> compatibility concerns trump all others, it is a sign of the
>> seriousness with which the issue was taken that an incompatible
>> change was made.
>> 
>> Tomcat 8, which implemented EL 3.0, switched to the new coercion
>> rules. To help migration of 7.0.x applications, the role of
>> COERCE_TO_ZERO was expanded to cover all instances of EL
>> coercion. To align with EL 3.0, the default was changed not to
>> coerce to zero.
>> 
>> Which brings us to where we are today.
>> 
>> The problem you are seeing is a spec compliant coercion that is
>> not covered by the COERCE_TO_ZERO property in 7.0.x.
>> 
>> There are several possible solutions:
>> 
>> 1. Upgrade to 8.x (8.5.x recommended in preference to 8.0.x) I
>> appreciate that an RPM is not available for Tomcat 8 but 8.0.x
>> has had stable releases for three years and 8.5.x for 1 year.
>> 
>> 2. Use one of the workarounds. All pretty ugly.
>> 
>> 3. Lobby for the extension of scope for COERCE_TO_ZERO in 7.0.x
>> to be equivalent to the scope in 8.0.x. At this stage in the
>> 7.0.x that is unlikely to happen. The risk of breakage for other
>> users is too great.
>> 
>> 4. Lobby for an additional configuration option for 7.0.x that
>> extends the of scope for COERCE_TO_ZERO in 7.0.x to be equivalent
>> to the scope in 8.0.x. This should be doable with care (there was
>> some refactoring involved in the scope change that would need
>> careful back-porting). This is also dependent on the CentOS
>> distribution picking up the change to 7.0.x. I don't know how
>> likely that is. Given the current package is based on a version
>> over a year old I suspect that the changes of this being quick
>> are very low.
>> 
>> None of those options look ideal. I'd probably go with 1 but my 
>> familiarity with Tomcat is such that I usually prefer to work
>> with an ASF distribution rather than a downstream one anyway.
>> YMMV.
>> 
>> Mark
>> 
>> 
>> [1] https://issues.apache.org/bugzilla/show_bug.cgi?id=43285
>> 
>> 
>> 
> Mark,
> 
> Thanks for the investigation into this.
> 
> You are right in that (1) is the best option. Finding time to
> translate the ASF distribution into one with appropriate run
> scripts and configs, along with a mechanism for in-place updating
> is tough. Having RPMs for that saves me a lot of time which is why
> I stuck with 7.x for so long. In the meantime I'll figure out the
> cleanest ugly workaround I can. I definitely won't lobby for any
> non-security fixes in a product that is 2+ generations old and is
> probably approaching EOL in the not too distant future.

Coty Sutherland is the package maintainer for RedHat's Tomcat package.
Perhaps he could be persuaded to create a tomcat85 package. Try
posting a new question to the list about a Tomcat 8.5 package for
RHEL/CentOS and see if you can get his attention.

Even if it's not an "official RPM" maybe he can help build one.

- -chris
-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAllBgXkACgkQHPApP6U8
pFh/kQ/+OMAiqr8UV7qRw5FazoOxvLM3f7sVpJz6QMEMWiwgmy1jwI0zFuyE3ZSg
lVCFQo2EIoEiHDxxvaDPicfeROrB30W6hn3b3T0RxFICIBNxdMJKrvN5ahoW5IE0
UWPHB06eiwVI0KlTrnm3XKsGY1RyT9yaEd9JQqJo5JDqCQSpSTNROgBRZUxsMZa2
2URKzhS6h8brv2TMTiywZf71zrcKGBGEuALqLJo+jPii1Cf5TrCwtHPM8EVG6dvF
5wzCwEPUK3Z1jZKVyWh0IZbSVU751DHxRNMSUR5qBDEmOzEXthuZ2AeHSDeN5hPe
KOwSvgEHiV3nrKrEwgSManbfKuobKsdMrPSXCy1W199qBCiMcdP/VR/X4rpiD0cw
ylA+VGzicqHZC/BA1y1MFvatSbEuq6hQ3HmyMajyZDdvd/y29W6kB9POcMuwS5BM
cgQdQLUshkyk0XqE+p4xgBPLVi3LUYhX2RIbWZ2QnubQ0l4STUGEqlN2dj+sUmU1
mQ23y4ugXepXBBLBtujXuVmDhweWwww4Fe/iLzVlUNoTOLw1SxQA2re0MCZwB8Th
9JtX2o4YpNLX5PssOrIgrRAkp4q1KlCv9W4avidCd9GXexWtq5zxXevIhs/2hl4y
RLFiqw9zAy3MnEIMDR6zFb0GIfznEAoPC108OoYfz/77VCpTNXY=
=h6mP
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to