On 14 Aug 00, at 17:14, marc fleury wrote:

> In the case that the developer supplies a ComplexPK (aggregate of fields),
> currently, we have no other choice but to rely on the hashCode and equals
> that it supplies to do our internal EJB cuisine.
> 
> does the spec say that you should overwrite hashCode and equals??? I don't
> think so...

Hi Marc,

Yes it does, in 9.2.9.  We should refuse to deploy an entity with a 
PK that does not override hashCode and equals.

-Dan

> 
> Here is my problem.  I discussed it with Rickard back when he was designing
> it and of course now it is broken :)))
> 
> here is the deal
> imagine
> public Class MyPK {
> 
>       int id;
> }
> 
> in the entityPK tests in CVS this fails because we
> 1- create with MyPK(10);
> 2- the cache store a reference to the context under MyPK.hashCode (=
> 00000001 for the sake of discussion)
> 2- come back WITH THE SAME PK to ask for a method (set something)
> 3- Of course since we serialize and deserialize the new MyPK (still holds 10
> in this sense it is the same) has MyPK.hashCode = 00000000002  (it IS a
> different object even though they are equal, get it).
> 4-  WE GET A CACHE MISS!!!!!!
> 5- the cache says "no I don't have it" and goes on, as it should retrieving
> an instance and initializing it to the values by DOING ejbActivate() AND
> "ejbLoad()"
> 6- Everytime we come back WE TALK TO A DIFFERENT INSTANCE  :))))
> 
> that's clearly f*cked up....
> 
> all because the developer didn't specify an overriding hashCode and equals
> in his PK.
> 
> in jboss1.0 I had solved it in the following fashion:
> every EJBObject (session or entity) had a unique identifier (creation time)
> and that "EjbossPrimaryKey" was a wrapper for the "real" Object
> dataBasePrimaryKey (could be a complex PK I didn't care )...
> the end result is that we *never* miss a cache hit, even if the developer
> did not supply hashCode and equals.  Also we are *certain* that the stuff is
> fast since we provide the hashCode for the wrapper...
> 
> no offense, but clearly a superior design :))
> 
> I wonder if some of the "speed" issues we have been seeing don't have to do
> with the fact that an complex PK CMP (most CMPs) have an ejbActivate,
> ejbLoad at *every* call, clearly a heavy operation.
> 
> Listen Rickard, I will rewire this, but it might be deeper than we think (I
> basically need to retool the way the lookups are done everywhere :((()
> 
> I don't want to rely on the developer not forgetting to supply hashcode and
> equals... it's obscure for most developers and will make the container
> behave slowly..
> 
> Unless of course it is specified in the spec....
> 
> kind regards
> (yet another night)
> 
> marc
> 
> 
> PS: I WILL SAY IT
> 
> I AM SOOOOO FUCKING HAAAAAAAAPY!!!!!!!!!!!!!!!!!!!!!!!!
> HEEE HEEE HEEE HEEEH EHEHEEHEHHEEEEEEEHEHEHEHEHEHEHEHEE
> <KINGoTheWORLD/>
> 
> Let's hope it significantly speeds things up... this could be the
> "silliness" I was talking about with the discrepancy of speeds!!!!!!
> 
> "I am papa large, big shout on the west coast"
> 
> ________________________
> Marc Fleury
> Chief Technology Officer
> Telkel, Inc.
> ________________________
> 
> 



Reply via email to