Volker Schmitt wrote:
Carsten Ziegeler wrote:But there is no difference between HashTable and StaticBucketMap in the ECS and as you replaced component.toString() with component and don't have problems, perhaps it is the problem.
Lars Rottmann wrote:up
Lars Rottmann wrote:
Replacing the BucketMap with another Map implementation solves the
problem of Cocoon failing at high load (where the ECM fails to look
ExcaliburComponentSelector asa Selector, not the Selector looking up a handler). It does not cureWhere do you replace the BucketMap with a Map? In the ECM?
the warning message above.
Did you try to do this replacement in the
Replacingwell?Ah, ok - so, it seems that the BucketMap has threading problems.
I did replace every occurence of StaticBucketMap in the Excalibur-Component package with a Hashtable.
it with a HashMap solved the problem in the ECM.:)
But replacing the BucketMap in the ECMSelector doesn't solve the other
problem, as you still get the message. So, there must be another problem
I know this is obvious, but I just wanted to restate it. I think we can assume that the HashMap has no threading problems.
So, has anyone a clue? Can it be the toString() method on your operating
system? Hmm, I don't know.
Hm we don't have this effect on our machine and we have a lot of traffic. The only difference in our ECM Implementation is, that I have changed ExcaliburComponentSelector to use the component as the key and not component.toString(). I changed this to use the same implementation the ExcaliburComponentManager use. Yes ECM uses the component as key and ECS use component.toString(). I wanted in our Implememtation to make sure that ECS work if somebody implements the toString method. I don't believe that this can be the problem, because then it can be no difference between HashTable and StaticBucketMap.
Lars, can you try this and also replace every occurence of component.toString() with simply component in the ECS?
I haven't followed all the discussion, but why is toString() used to identify components? Wouldn't it be better to use a Map keyed by the identy of the object like java.util.IdentityHashMap()? That way, we ensure there's no possible collision between two instances of the same component, and also avoid any problem related to classes redefining their own hashcode() and equals() methods.
Sylvain
-- Sylvain Wallez Anyware Technologies http://www.apache.org/~sylvain http://www.anyware-tech.com { XML, Java, Cocoon, OpenSource }*{ Training, Consulting, Projects } Orixo, the opensource XML business alliance - http://www.orixo.com
