Log4j-CL-EL-JV.txt

Recently log4j removed some deprecated classes/methods. This after years of deprecation, seemed like it ought be trivial. This is what transpired...

First, the next Gump run detected that Commons Logging, Excalibur Logger, and Jakarta Velocity were using API classes/methods that log4j considered deprecated. This 'took down' (stopped Gump run coverage to) roughly 250 dependee projects, a significant percentage of Gumpage. Things seemed straight-forward enough, the features had been clearly deprecated for two years, it was time to change them. So, update...

Unfortunately, the [GUMP] prefix didn't match the [logging] prefix that the commons-dev list requests, so failed to pass filters & sat un-noticed for a while. When enough (impatient) noise had been made, the situation was investigated & things were not so simple.

These issues took almost two weeks to resolve, some time lost, but much well spent on analysis/discussion/communication. Discussions occured on the commons, logging, avalon and velocity and gump lists, and ought be archived there. (This distribution might explain some of the mis-communication that led to some time lag.)


For each of the three projects directly affected...

Avalon: Some things deprecated had not been marked as such, so they were immediately restored by log4j. This helped restore Avalon. What was noticed here was that Gump pages obscured the build log (somewhat backwards since that is likely the key information) so a fix was attempted, moving that nearer to the top of the page.

Commons Logging: There was no runtime compatible solution that could benefit from the two years of deprecation overlap that log4j had intended. A few "commoners" found this. A few solutions were discussed, until log4j found an acceptible one, that commons-logging agreed would be zero impact. Commons-Logging coded to this new solution, allowing a wide range of compatibility.

Note: Deprecation had been turned off in these builds, and some log4j deprecated things had not been marked deprecated. Deprecation warnings verbose, it'd be nice if 'official' builds could have them on, but day to day builds off.

Jakarta Velocity: These folks had it easiest, changing one word from Priority to Level, but still the communications process could've been improved, and feedback was taken.


SUMMARY: Deprecating classes is non-trival with Java (especially when trying to maintain them for years, and use sub-classing as aliasing). Deprecation 'overlap windows' -- where a fix gets to be backwards compatible w/ a decent (most likely found) sub-set of previous releases -- are a key aid. Managing these is invaluable. Deprecation only works when people work together and communicate. We still have some work to do to improve our group understanding/knowledge of version numbering and what contracts we are making with them on each release.

This work saved users of 250 projects from a little (perhaps big) bit of Jar Hell! That is awesome work that will go largely unrecognized, but is still invaluable. Thanks to all involved...