The good news is that -- after a brief false start -- I have figured out how to structure things so that they work in a fashion that's similar to everything else on the Server that requires locking. The locking itself still needs some work for a clustered environment, but that's something that can be replaced in one swell foop once we get everything else straightened out. Since we're not yet running clustered, the current locking will do for the moment.
The amusing thing is that I have finally found a place where using a WeakHashMap is the right answer. :)
I'll still be cleaning this up tomorrow morning, but there is a non-train light at the end of the tunnel.