Re: Tighter EntityResolver

From: Mike Kienenberger (mkienen..mail.com)
Date: Fri Sep 30 2005 - 00:13:42 EDT

  • Next message: Andrus Adamchik: "Re: Tighter EntityResolver"

    I'm not sure. Under what situations does the code get hit now? I'm
    most concerned as it relates to cross-DataMap resolution and mutlipel
    DataMaps.

    On 9/30/05, Andrus Adamchik <andru..bjectstyle.org> wrote:
    > I am planning to apply the change below to EntityResolver. What it
    > means internally is that EntityResolver
    > will become more "pessimistic" and won't attempt to reconstruct the
    > cache if an entity lookup fails.
    >
    > What it means to the users is that an exception will be thrown if an
    > attempt is made to lookup unmapped entity.
    >
    > Does anyone think that making EntityResolver more tight is a bad
    > thing (or will disturb too much of the existing code)?
    >
    > Andrus
    >
    >
    > Index: EntityResolver.java
    > ===================================================================
    > RCS file: /cvsroot/cayenne/cayenne/src/cayenne/java/org/objectstyle/
    > cayenne/map/EntityResolver.java,v
    > retrieving revision 1.17
    > diff -u -r1.17 EntityResolver.java
    > --- EntityResolver.java 30 Sep 2005 03:34:12 -0000 1.17
    > +++ EntityResolver.java 30 Sep 2005 04:06:38 -0000
    >.. -105,6 +105,8 @@
    > protected List maps;
    > protected Map entityInheritanceCache;
    > protected EntityResolver clientEntityResolver;
    > +
    > + boolean indexed;
    > /**
    > * Creates new EntityResolver.
    >.. -286,6 +288,7 @@
    > procedureCache.clear();
    > entityInheritanceCache.clear();
    > clientEntityResolver = null;
    > + indexed = false;
    > }
    > /**
    >.. -410,6 +413,8 @@
    > }
    > }
    > }
    > +
    > + indexed = true;
    > }
    > /**
    >.. -708,12 +713,19 @@
    > }
    > ObjEntity result = (ObjEntity) objEntityCache.get(object);
    > - if (result == null) {
    > - // reconstruct cache just in case some of the datamaps
    > - // have changed and now contain the required information
    > + if (result != null) {
    > + return result;
    > + }
    > +
    > + if (!indexed) {
    > constructCache();
    > result = (ObjEntity) objEntityCache.get(object);
    > +
    > + if (result != null) {
    > + return result;
    > + }
    > }
    > - return result;
    > +
    > + throw new CayenneRuntimeException("No ObjEntity mapped for
    > object: " + object);
    > }
    > }
    >
    >
    >



    This archive was generated by hypermail 2.0.0 : Fri Sep 30 2005 - 00:13:43 EDT