Re: Conditions when PersistenceState gets "hollow"

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Fri Apr 02 2010 - 02:22:00 EDT

  • Next message: Andrus Adamchik: "[ANN] Cayenne 3.0RC3 Released"

    Actually hollow objects should inflate themselves. So looks like in
    your case they are not just hollow, but also detached from the context
    (check "object.getObjectContext()" - is it null?). So to locate their
    registered and attached versions you can use ObjectIdQuery, like in
    your example, or even more straightforward, DataObjectUtils.objectForPK:

      hollowObject = (HollowObjectType)
    DataObjectUtils.objectForPK(context, hollowObject.getObjectId());

    In both cases cache will be used, so the performance of this is
    roughly proportional to the speed of a HashMap lookup (plus a bit of
    overhead to create the query object). Shouldn't be too bad at all.

    Andrus

    On Apr 2, 2010, at 1:46 AM, Nishant Neeraj wrote:

    > Seems like this does the trick
    >
    > if(hollowObject.getPersistenceState() == PersistenceState.HOLLOW){
    > ObjectIdQuery query = new
    > ObjectIdQuery(hollowObject.getObjectId());
    > List<HollowObjectType> resultSet =
    > getDataContext().performQuery(query);
    > }
    >
    > So, perhaps I will end-up in adding a layer that between Wicket and
    > Cayenne
    > that (a) Checks if object is HOLLOW, (b) Inflate, if 'a' is true.
    >
    > Now, what is the impact on performance due to this layer... I am a bit
    > skeptical because I hope this should be using CACHE and not actually
    > querying DB. See Here [1].
    >
    > [1]
    > http://cayenne.apache.org/doc30/api/org/apache/cayenne/query/ObjectIdQuery.html
    >
    > Thanks
    > Nishant
    >
    > On Fri, Apr 2, 2010 at 12:57 AM, Nishant Neeraj <
    > nishant.has.a.questio..mail.com> wrote:
    >
    >> Thanks for the reply.
    >> Yes, Wicket does serialize/de-serialize objects to/from session-
    >> store...
    >> so, do I need to explicitly inflate the objects or there is a way
    >> to make
    >> sure deserialization occurs properly?
    >>
    >> Thanks
    >> Nishant
    >>
    >>
    >> On Fri, Apr 2, 2010 at 12:38 AM, Andrus Adamchik
    >> <an....bjectstyle.org<andrus@objectstyle.org>
    >>> wrote:
    >>
    >>> I haven't used Wicket, but is there (de)serialization of objects
    >>> involved
    >>> when rendering a form and then submitting it back? This might
    >>> result in
    >>> turning an object to a hollow state. The last observation may be
    >>> due to the
    >>> object deserialized outside of its context...
    >>>
    >>> Andrus
    >>>
    >>>
    >>> On Apr 1, 2010, at 9:28 PM, Nishant Neeraj wrote:
    >>>
    >>> Also, when I "touch" (call getXXX) on the object it return empty
    >>> string.
    >>>>
    >>>> On Thu, Apr 1, 2010 at 11:29 PM, Nishant Neeraj
    >>>> <nishant....mail.com
    >>>>> wrote:
    >>>>
    >>>> Hi,
    >>>>>
    >>>>> I am using Cayenne with Wicket.
    >>>>>
    >>>>> There are situations when I see object's persistence state HOLLOW.
    >>>>> Specially, when I have committed something on a page, say by form
    >>>>> submission, .... then clicked browser back button to come back
    >>>>> to the
    >>>>> same
    >>>>> page and try to resubmit the form.
    >>>>>
    >>>>> The problem is, when resubmitting, instead of over-writing the
    >>>>> same
    >>>>> object.. it is trying to insert it in DB.. but since it has
    >>>>> unique key
    >>>>> that
    >>>>> conflicts which previous commit, MySQL throws an exception.
    >>>>>
    >>>>> I wanted to know what are the situations when a data object is
    >>>>> assigned
    >>>>> HOLLOW?
    >>>>>
    >>>>>
    >>>>> Thanks
    >>>>> Nishant
    >>>>>
    >>>>>
    >>>>>
    >>>>>
    >>>
    >>



    This archive was generated by hypermail 2.0.0 : Fri Apr 02 2010 - 02:23:17 EDT