Hi,

I am trying to improve the compareTo() functions that I have written and
ran into the following error.


   - java.lang.ArrayIndexOutOfBoundsException
   - 31
   - org.datanucleus.state.StateManagerImpl#isLoaded(StateManagerImpl.java:2893)

   - 
au.com.scds.chats.dom.module.activity.RecurringActivity#getStartDateTime(RecurringActivity.java:-1)

   - sun.reflect.GeneratedMethodAccessor75#invoke(null:-1)
   - 
sun.reflect.DelegatingMethodAccessorImpl#invoke(DelegatingMethodAccessorImpl.java:43)

   - java.lang.reflect.Method#invoke(Method.java:497)
   - org.apache.isis.applib.util.Clause#getValueOf(ObjectContracts.java:365)

   - 
org.apache.isis.applib.util.ObjectContracts#compare(ObjectContracts.java:70)

   - 
org.apache.isis.applib.util.ObjectContracts#compare(ObjectContracts.java:63)

   - au.com.scds.chats.dom.module.activity.Activity#compareTo(Activity.java:120)

   - au.com.scds.chats.dom.module.activity.Activity#compareTo(Activity.java:54)

   - 
com.google.common.collect.ComparisonChain$1#compare(ComparisonChain.java:76)

   - 
au.com.scds.chats.dom.module.participant.Participation#compareTo(Participation.java:206)

   - 
au.com.scds.chats.dom.module.participant.Participation#compareTo(Participation.java:31)

   - java.util.TreeMap#compare(TreeMap.java:1290)
   - java.util.TreeMap#put(TreeMap.java:538)
   - java.util.TreeSet#add(TreeSet.java:255)
   - 
org.datanucleus.store.types.wrappers.backed.SortedSet#loadFromStore(SortedSet.java:283)

   - 
org.datanucleus.store.types.wrappers.backed.SortedSet#iterator(SortedSet.java:477)

   - 
com.google.common.collect.Collections2$TransformedCollection#iterator(Collections2.java:269)

   - 
org.apache.isis.core.metamodel.facets.collections.CollectionFacetAbstract#iterator(CollectionFacetAbstract.java:46)

   - 
org.apache.isis.core.metamodel.facets.collections.CollectionFacetAbstract$1#iterator(CollectionFacetAbstract.java:54)

   - 
org.apache.isis.core.metamodel.adapter.ObjectAdapter$Util#visibleAdapters(ObjectAdapter.java:314)

   - 
org.apache.isis.core.metamodel.adapter.ObjectAdapter$Util#visibleAdapters(ObjectAdapter.java:302)

   - 
org.apache.isis.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessor#getProperty(CollectionAccessorFacetViaAccessor.java:85)

   - 
org.apache.isis.core.metamodel.specloader.specimpl.OneToManyAssociationDefault#get(OneToManyAssociationDefault.java:161)


I have the comparison for Activity now of startDateTime then name then
region, so the comparison of Participations (a link table between Activity
and Participant) is of Activity first and then Participant. This gets quite
complex in terms of retrieving value graphs which might explain the error.

Is there a better way, maybe I can use database id instead as they reflect
order of creation of records, which might be good enough for participation
sorting. I've tried to avoid using generated ID values in OO code but maybe
its a compromise I have to accept occassionally, instead of natural keys.

Just raising it for discussion.

Thanks

Reply via email to