MultiClassLoader relies on its underlying ClassLoaders for hashCode

Details

Type: Bug

Status:Open

Priority: Major

Resolution:
Unresolved

Affects Version/s:
None

Fix Version/s:
None

Component/s:
None

Labels:

None

Patch Info:

Patch Available

Description

The MultiClassLoader relies on its underlying ClassLoaders in its hashing algorithm. This is problematic if the underlying classloaders refuse to return a hash or if the classloader list changes over time.

I ran into a problem that demanded a resolution to this issue when doing some work with OpenJPA in a Google AppEngine context. I don't have a stack trace handy.

An effective-yet-ugly fix was to simply change the hashCode() implementation to return a constant value (I chose '1'). This clearly is a crappy hashing algorithm, but will always respect the hashing contract. And I don't think that we really put MultiClassLoaders into big maps or anything.

Donald Woods
added a comment - 21/Sep/10 20:58 Patrick, was hashCode() throwing an Exception for you in your GAE scenario? If so, catching the exception, log a msg and then return 1 might be an acceptable compromise....