Hi Dale,

Dale Ellis wrote:

> I was having a look in the JConsole at the stack of the hanging thread, I
> think the issue is to do with my abstractEntity class (which all the JPA
> entity objects extend) overrides the hascode with this...
> 
>     public int hashCode()    {
>         if(getId() != null)
>         {
>             return new HashCodeBuilder().append(getId()).toHashCode();
>         }
>         else
>         {
>             return HashCodeBuilder.reflectionHashCode(this);
>         }
> 
> When I remove this, the fromXML() works

The reflectionHashCode is a *very* dangerous tool (I don't give a bad mouth 
here, I am committer to Apache Commons Lang myself). In your case you might 
even break the hashCode contract. The hashCode is meant to be a *constant* 
unique identifier, i.e. if you use your object as key in a HashMap, the hash 
value should never change afterwards. Is getId() a pure getter or will it 
also access other complex objects in the graph to get one?

>From the XML structure I can see that some of your objects deep down in the 
object graph contain back references to parents or siblings. A reflection-
based hash code builder will normally silently introduce an endless 
recursion here - it just works, because the Apache implementation keeps 
track of the accesses objects. However, this calculation is in any case 
expensive.

BTW: Are you also sure you fullfill another hash code contract, i.e. equal 
equal objects (calling equals()) means also equal hash codes (the reverse is 
not guaranteed though)?

Apart from this, I still wonder, why TreeMap.putAll adds all elements 
individually instead of using the optimized method that does not sort the 
elements again and therefore omit all calls to compareTo ... :-/

Cheers,
Jörg


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to