RE: Is registerNewObject required?

From: Dave Merrin (dmerri..pasystems.co.uk)
Date: Tue Jan 10 2006 - 08:55:54 EST

  • Next message: Andrus Adamchik: "Re: Is registerNewObject required?"

    I've done even more testing and discovered it works for classes which don't
    extend CayenneDataObject. This is fine as the classes I'm using don't extend
    CayenneDataObject. It just so happens that I decided to test with a class
    which does.

    Would still be good to know why I ran into this problem.

    Dave

    > -----Original Message-----
    > From: Dave Merrin [mailto:dmerri..pasystems.co.uk]
    > Sent: 10 January 2006 13:33
    > To: cayenne-use..bjectstyle.org
    > Subject: RE: Is registerNewObject required?
    >
    >
    > I've done some more testing and discovered I should have been using lower
    > case for the properties. I'm now having problems with the name bit:
    >
    > Expression exp = ExpressionFactory.matchExp("class.name", "Item");
    >
    > Exception in thread "main"
    > org.objectstyle.cayenne.exp.ExpressionException:
    > [v.1.2M6 October 6 2005] Error evaluating expression 'class.name = "Item"'
    >
    > Caused by: org.objectstyle.cayenne.CayenneRuntimeException:
    > [v.1.2M6 October
    > 6 2005] Invalid path: class.name
    > at
    > org.objectstyle.cayenne.CayenneDataObject.readNestedProperty(Cayen
    > neDataObje
    > ct.java:171)
    >
    > Any ideas?
    >
    > Dave
    >
    > > -----Original Message-----
    > > From: Dave Merrin [mailto:dmerri..pasystems.co.uk]
    > > Sent: 10 January 2006 12:33
    > > To: cayenne-use..bjectstyle.org
    > > Subject: RE: Is registerNewObject required?
    > >
    > >
    > > Hi Andrus,
    > >
    > > going back on an old subject now. I'm trying to filter my objects
    > > using the
    > > class name. I've tried the following but it throws an exception:
    > >
    > > Expression exp = ExpressionFactory.matchExp("Class.Name", "Item");
    > >
    > > Exception in thread "main"
    > > org.objectstyle.cayenne.exp.ExpressionException:
    > > [v.1.2M6 October 6 2005] Error evaluating expression
    > 'Class.Name = "Item"'
    > > Caused by: java.beans.IntrospectionException: No property
    > 'Class' found in
    > > class ipa.printexpress.data.Item
    > >
    > > Is this because the property is in the base class rather than the
    > > class I'm
    > > dealing with?
    > >
    > > 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 : Tue Jan 10 2006 - 08:58:15 EST