Hello,

I'm contacting you to notify a Deep Bug I found on ECS project.

First of all, I want to tell you that my company and I, use ECS1.4.1 and then 1.4.2 as a kernel library for HTML page construction. We use Ecs as a sort of base toolkit for our framework that's the base for our CRM solutions. Nowaday, I think that more than 10000 telephone operators use our ecs based solution, 8 hours a day, in contact center applications. That's a real test environment.

Well. In the last installation, we used ecs on an AIX RISC JDK 1.5 platform and we found a strange bug. I think that that bug affects all releases of ECS, because of a base mistake in ConcreteElement.java class.

Let's go to the real problem:
The class ConcreteElement exposes a method
addElement(Element element)
that calls
addElementToRegistry(Integer.toString(element.hashCode()),element);
so it gives a key valued element.hashCode() to that element.
That's the point: element.hashCode() can't be a unique key because sometimes we can have two elements with the same hasocode. We experienced it only on IBM JDK, but the sun documentation (javadoc) states:

"It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables."

So sometimes, two different objects can have the same hashCode!
So, sometimes two calls to addElement(element) can result in only the second object stored in the ConcreteElement. So sometimes, on out instalaltion some table rows misses, or some row cells misses or...

I think that's happening when IBM garbage collector compacts the heap, so that a new object can get same address (i.e. hashcode) of an old shifted object.

I've done some fixes to resolve.
I've done a version of ConcreteElement that sotores object in the Map only if you give explicitly a key-name, otherwise it stores only in the Vector. That seems to work good, with a good retro-compatibility.

I know that ECS is not in a work-inprogress state, but why don't give to the posterity a bugless software?


I rely on a feedback.
Thank you, Mauro


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

Reply via email to