Hi Andrus,
it's a shame this doesn't exist. I would enter a Jira issue but I know
you're not looking at adding any more functionality to this version. By the
time you're onto the next version I think my project will be done and
dusted.
I've had a quick look at the apache commons collection for filtering a list.
Do you know of any others which are good and might be worth looking at?
Cheers,
Dave
> -----Original Message-----
> From: Andrus Adamchik [mailto:andru..bjectstyle.org]
> Sent: 12 December 2005 12:06
> To: cayenne-use..bjectstyle.org
> Subject: Re: Is registerNewObject required?
>
>
> Dave,
>
> You are not missing anything. Collections won't work with in-memory
> Expression API. This is a known limitation... we need to document it
> better I guess.
>
> The original reason behind this limitation was to preserve
> simplicity, so there wasn't a goal of building a full in-memory DB or
> XPath-like system. Now I tend to think we need to implement in-memory
> collection support for completeness. You may enter a feature request
> for that in Jira if this is important to you... Also you may try
> numerous XPath implementations that are more appropriate for advanced
> in-memory filtering.
>
> Andrus
>
>
> On Dec 12, 2005, at 2:41 PM, Dave Merrin wrote:
>
> > Hi Andrus,
> >
> > thanks for that. I've now changed things so I don't extend
> > CayenneDataObject. That solves the problem where I have a java bean
> > which
> > contains another java bean. I'm still having trouble with my java bean
> > containing a collection of java beans. I get the following exception:
> >
> > Caused by: java.beans.IntrospectionException: No property 'message'
> > found in
> > class java.util.ArrayList
> > at
> > org.objectstyle.cayenne.property.PropertyUtils.getPropertyDescriptor
> > (Propert
> > yUtils.java:230)
> > at
> > org.objectstyle.cayenne.property.PropertyUtils.getSimpleProperty
> > (PropertyUti
> > ls.java:178)
> > at
> > org.objectstyle.cayenne.property.PropertyUtils.getProperty
> > (PropertyUtils.jav
> > a:114)
> > at
> > org.objectstyle.cayenne.exp.parser.ASTObjPath.evaluateNode
> > (ASTObjPath.java:8
> > 5)
> > at
> > org.objectstyle.cayenne.exp.parser.SimpleNode.evaluate
> > (SimpleNode.java:243)
> > at
> > org.objectstyle.cayenne.exp.parser.SimpleNode.evaluateChild
> > (SimpleNode.java:
> > 237)
> > at
> > org.objectstyle.cayenne.exp.parser.ASTEqual.evaluateNode
> > (ASTEqual.java:95)
> > at
> > org.objectstyle.cayenne.exp.parser.SimpleNode.evaluate
> > (SimpleNode.java:243)
> >
> > I can't see what I'm missing here?
> >
> > Dave
> >
> >> -----Original Message-----
> >> From: Andrus Adamchik [mailto:andru..bjectstyle.org]
> >> Sent: 07 December 2005 16:55
> >> To: cayenne-use..bjectstyle.org
> >> Subject: Re: Is registerNewObject required?
> >>
> >>
> >> Dave,
> >>
> >> Relationships in Cayenne will only work for registered objects. So if
> >> you application requires non-persistent objects, don't extend
> >> CayenneDataObject at all - this doesn't buy you anything, and only
> >> creates problems that you are seeing.
> >>
> >> Expression.evaluate() and Expression.filterObjects() will work with
> >> any Java bean, DataObject or not. But the rest of Cayenne depends on
> >> the fact that the objects are (a) mapped in the Modeler and (b)
> >> registered with a DataContext.
> >>
> >> Andrus
> >>
> >> On Dec 7, 2005, at 6:10 PM, Dave Merrin wrote:
> >>> Hi,
> >>>
> >>> I'm trying to use cayenne to perform some queries on an in-memory
> >>> list. The
> >>> list of objects hasn't been loaded from a database using cayenne,
> >>> it has
> >>> just been created from some arbitrary data. All this was working
> >>> fine.
> >>>
> >>> Now I've discovered my data doesn't represent just one type of
> >>> object, it
> >>> represents many related objects. As an example I have a
> >>> TrackMessage object
> >>> which now needs to have a related UniqueID object. Both classes
> >>> extend
> >>> CayenneDataObject. Now when I call setToOneTarget passing in a
> >>> created
> >>> MessageID I get the following exception:
> >>>
> >>> java.lang.NullPointerException
> >>> at
> >>> org.objectstyle.cayenne.CayenneDataObject.getRelationshipNamed
> >>> (CayenneDataOb
> >>> ject.java:400)
> >>> at
> >>> org.objectstyle.cayenne.CayenneDataObject.setToOneTarget
> >>> (CayenneDataObject.j
> >>> ava:343)
> >>> at
> >>> ipa.printexpress.tracker.logfilter.TrackMessage.setInstanceID
> >>> (TrackMessage.j
> >>> ava:132)
> >>> at
> >>> ipa.printexpress.tracker.logfilter.TrackMessage.<init>
> >>> (TrackMessage.java:73)
> >>> at
> >>> ipa.printexpress.tracker.logfilter.MessageRouter.run
> >>> (MessageRouter.java:35)
> >>> at
> >>> ipa.printexpress.tracker.logfilter.ThreadPoolWorker.runIt
> >>> (ThreadPoolWorker.j
> >>> ava:101)
> >>>
> >>> I'm sure the last time I saw this I needed to register the objects
> >>> using
> >>> DataContext.registerNewObject. The only thing is I don't have a
> >>> DataContext
> >>> and don't particulary want one (because none of this is related to a
> >>> database connection).
> >>>
> >>> Is there any way round this problem? If I do have to create a
> >>> DataContext
> >>> object then does it have to actually be connected to a database? Do
> >>> I need
> >>> to tell the DataContext about the relationship of the objects?
> >>>
> >>> Any help would be greatly appreciated. I'm still hoping I can pull
> >>> off this
> >>> alternative way of using cayenne.
> >>>
> >>> Cheers,
> >>>
> >>> Dave
> >>>
> >>>
> >>>
> >>
> >
> >
>
This archive was generated by hypermail 2.0.0 : Mon Dec 12 2005 - 10:13:53 EST