opensubscriber
   Find in this group all groups
 
Unknown more information…

e : ecs-dev@jakarta.apache.org 20 June 2008 • 4:24AM -0400

Re: ECS Deep Bug
by Robert Burrell Donkin

REPLY TO AUTHOR
 
REPLY TO GROUP





On Tue, 2008-05-27 at 15:06 +0200, Mauro Manfrin wrote:
> Hello,

hello mauro

sorry for the late reply (i know it's no excuse but i've been
exceptionally busy)

> 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.

interesting

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6321873 (for example)
suggests that this problem would not be limited just to AIX

> 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.

that sounds like it would work

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

would you consider donating your patch to Apache?

- robert



---------------------------------------------------------------------
To unsubscribe, e-mail: ecs-dev-unsubscribe@jaka...
For additional commands, e-mail: ecs-dev-help@jaka...

Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

Related Messages

opensubscriber is not affiliated with the authors of this message nor responsible for its content.