Hi,

The most recent Tomcat 4 release upgraded from beanutils 1.6.1 to
1.7.0 and this introduced a conflict with commons-logging (see
http://issues.apache.org/bugzilla/show_bug.cgi?id=40252). As the
issues boils down to fun and games with containers and classloader
hierarchies, this might not be a beanutils issue at all but given the
issue became apparent after a change in beanutils this seems like the
right place to start.

Since this discussion revolves around changes in the beanutils code, I
am posting this to the dev list. If it is felt the users list is more
appropriate, I am happy to move this thread to that list instead.

With beanutils 1.6.1 utility classes such as BeanUtils and
ConvertUtils were static and hence the associated Log instances were
also static. All these objects were created by the Tomcat common
classloader and all was well.

In beanutils 1.7.0 the BeanUtilsBean class was introduced as
per-context-classloader pseudo singletons. Providing commons-logging
is not present in the webapp classloader then all is well. As soon as
commons-logging is present in the webapp classloader, when the per
context classloader instance of ConvertUtilsBean creates a logger it
uses the Log class from the webapp classloader which conflicts with
that in the common classloader and "Invalid class loader hierarchy.
You have more than one version of 'org.apache.commons.logging.Log'
visible, which is not allowed." results.

The only option for the webapp developer is not to include
commons-logging but this does make for portable webapps - not all
containers use commons-logging internally and a webapp may require
this library. For now, my short-term solution is to revert to
beanutils 1.6.1 for a TC4.1.33 release.

Longer term, I wonder if the same sort of trick the OP for the above
bug uses in webapps (see
http://rbodkin.blogs.com/ron_bodkins_blog/2006/07/stupid_log_tric.html)
could be used in beanutils. I would be happy to work on a patch in
this direction if it was thought to be useful. However, I would value
the insight of those more familiar with the beanutils code before
starting since I don't want to waste time on a pointless exercise.

Regards,

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to