Re: Modification and deletion of data objects

From: sridhar devatha (devatha.sridha..mail.com)
Date: Thu Jul 23 2009 - 00:40:36 EDT

  • Next message: sridhar devatha: "Re: Modification and deletion of data objects"

    I can not use any data context, entity resolver, entity name and object id,
    as I did not keep the data object. Keeping the reference to data object is
    redundant, as data context is already maintaining them. Cayenne did not
    provide a way for getting the registered data object using unique keys(not
    primary keys! 99% of tables will have column(s) to uniquely identify a table
    row.) I recommend to provide checkboxes to indicate the unique keys in
    modeler. that way, a uniqueObject (it is somewhat similar to primary key
    class in EJB. But, it does not use primary keys, only uses unique keys) can
    be created using the unique columns related properties by the cayenne
    modeler. This unique object can be used to retrieve the data object
    registered with the data context(say lookupDataObject() or getDataObject()
    in DataContext) by comparing one or more unique key related property
    values. If there is no such registered data object, these methods should
    make a data base call internally and get the data object of the matched
    database table row. If neither data object nor the table row exists, this
    method should return null or throw some exception.
    By the way, I want to use DataObjectUtils.objectForQuery() as I did not
    retain neither object id nor entity name of the data object(I don't want to
    retain them in business object / view object.). I think this objectForQuery
    will hit the data base instead of first looking in the data context. Is not
    it? It is time to provide this functionality so that it can be really easy
    to do basic crud operations using cayenne. When cayenne provides the methods
    to get the list of new and modified objects. How come it does not provide
    the basic method of getting the registered object? It is absolutely
    surprising and shocking to me!!!

    About the mike's reply, caching or creating interfaces forces me
    substantially to focus on technical things rather than on developement of
    project functionality. I absolutely think retrieving the existing registered
    data object should be very fundamental method of cayenne. Is not it?
    Moroever, I would rather say that data context should take the burden of
    removing data objects and overwriting the existing data object with the new
    object that is getting created, if you don't provide methods for getting the
    existing registered objects in the data context.There is a great reason not
    to use the data object in business layer / view layer. Even if you use data
    object in business layer, what should I send to view layer.How can I convert
    business object to view object and vice versa without using context, entity
    resolver,entity name and object id. I am involved in several projects where
    data objects are not at all exposed to view or business layer. One purpose
    of using business object is to insulate business layer from the internal
    changes of data objects/ data access layer . same is the case with view
    object.

    If you need any further info related to above things, ask me. I will be
    available during weekends only.
    Moreover, I am getting doubts about the declarative transactions. Do you
    provide them?If yes , tell me how?
    To sum up,
    Please answer about not providing methods for getting the existing
    registered objects from data context?
    Please answer how objectForQuery() works?That is, whether it looks in the
    data context before hitting the database.
    Please answer about declarative transactions using a good example.

    thanks and regards,
    sridhar
    On Thu, Jul 23, 2009 at 12:48 AM, Mike Kienenberger <mkienen..mail.com>wrote:

    > No, but here's the two templates that are most relevent. This is
    > probably against Cayenne 1.2 (2.0 with different package names).
    >
    > If they're helpful, great! If not, sorry, it's as-is at the moment --
    > it's really not that difficult to come up with your own. I might have
    > more up-to-date versions, but that's what's in front of me at the
    > moment.
    >
    > On Wed, Jul 22, 2009 at 2:58 PM, Emanuele Maiarelli<evvdra..ahoo.it>
    > wrote:
    > > Did u made em public accessible? (sourceforge or kinda)
    > >
    > >
    > >
    > >
    > > ________________________________
    > > Da: Mike Kienenberger <mkienen..mail.com>
    > > A: use..ayenne.apache.org
    > > Inviato: Mercoledì 22 luglio 2009, 20:52:25
    > > Oggetto: Re: Modification and deletion of data objects
    > >
    > > I wrote templates to generate interfaces as well as concrete classes
    > > for entities.
    > > It's been awhile since I looked at them, so I don't know if they're
    > > suitable for public consumption.
    > >
    > > On Wed, Jul 22, 2009 at 2:36 PM, Emanuele Maiarelli<evvdra..ahoo.it>
    > wrote:
    > >> Hi agree with Mike, unless you have previous designed objects, i'd take
    > DataObjects
    > >> as business objects.
    > >>
    > >> If u get previous designed objects u could work on the package
    > 'entities' implementing
    > >> methods do adapt DataObjects to your needs. IDEs (at least NetBeans) got
    > refactoring services
    > >> that can help u extracting interfaces from your classes, quickly.
    > >>
    > >>
    > >>
    > >>
    > >>
    > >>
    > >> ________________________________
    > >> Da: Mike Kienenberger <mkienen..mail.com>
    > >> A: use..ayenne.apache.org
    > >> Inviato: Mercoledì 22 luglio 2009, 20:21:32
    > >> Oggetto: Re: Modification and deletion of data objects
    > >>
    > >> I'm not aware of anyone else using separate objects for the business
    > >> level. I use the DataObjects as the business level objects. Yes, if
    > >> you decide to manually recreate data objects from business objects,
    > >> there will be some overhead. If I had to go that route, I'd create a
    > >> central management class and have it cache what objects I already know
    > >> exist in the data context the first time I reference them rather than
    > >> searching through the data context lists each time.
    > >>
    > >> One possiblity you could consider is to generate interfaces for your
    > >> DataObjects and then pass the interface rather than the DataObject
    > >> concrete class. This is what I tend to do in my projects. That way,
    > >> you can hide all of the Cayenne-specific methods from your other code
    > >> if you want. Other than some dependencies on Cayenne classes and a
    > >> couple of other methods, there's not a lot of difference between a
    > >> Cayenne data object and a "cayenne-free" business representation of
    > >> the same data.
    > >>
    > >> On Wed, Jul 22, 2009 at 2:15 PM, sridhar
    > >> devatha<devatha.sridha..mail.com> wrote:
    > >>> andrus, it is not clear(thank for reply though), i have to try over
    > weekend.
    > >>> moreover, i can not use context, getEntityName in business object. I
    > wrote
    > >>> business object to data object conversion in data object class it self.
    > so I
    > >>> can use cayenne java api. I have to do it in the data object class
    > which is
    > >>> sub class _data object, as it will have reference of business object.
    > But,
    > >>> any way I am just surprised to see that there is no modification
    > example
    > >>> code. Nobody uses cayenne data object from view layer to
    > business/service
    > >>> layer to data access layer in web or enterprise applications(because it
    > is
    > >>> cayenne data object with several other sensitive methods available.
    > even if
    > >>> the methods are not there. I don't want to couple all the layers. ). I
    > don't
    > >>> want to expose that sensitive object. more concrete examples will make
    > it
    > >>> easier for new developers like me.
    > >>> I think what Mike Kienenberger(thanks mike , that is what I am also
    > thinking
    > >>> at least. by the way what do you say about andrus reply) is telling may
    > be
    > >>> correct. then i have to go thru all the new and modified registered
    > objects
    > >>> in the data context to see if there is any thing existing. clearly this
    > kind
    > >>> of searching will make it difficult for every data object updation and
    > >>> deletion. what do you say.
    > >>>
    > >>> On Wed, Jul 22, 2009 at 3:45 PM, Andrus Adamchik <
    > andru..bjectstyle.org>wrote:
    > >>>
    > >>>> In your business object you will need to know 3 things to map it to a
    > >>>> Cayenne object: entity name, id, state (new or already persistent).
    > Then you
    > >>>> can do something like this (pseudo code of course):
    > >>>>
    > >>>> X businessObject = ...;
    > >>>> DataObject cayenneObject;
    > >>>> Class cayenneObjectClass = context.getEntityResolver().
    > >>>>
    > getClassDescriptor(businessObject.getEntityName()).getObjectClass();
    > >>>> if(bObject.isNew()) {
    > >>>> cayenneObject = context.newObject(cayenneObjectClass);
    > >>>> }
    > >>>> else {
    > >>>> cayenneObject = DataObjectUtils.objectForPK(cayenneObjectClass,
    > >>>> businessObject.getId());
    > >>>> }
    > >>>>
    > >>>> // merge fields...
    > >>>>
    > >>>> Hope I answered the right question.
    > >>>>
    > >>>> Andrus
    > >>>>
    > >>>>
    > >>>> On Jul 22, 2009, at 7:47 AM, sridhar devatha wrote:
    > >>>>
    > >>>> Hi,
    > >>>>>
    > >>>>> I have view layer, business layer and data access layer. Each have
    > >>>>> separate
    > >>>>> class for carrying data. But, in data access layer, the object /
    > class
    > >>>>> used
    > >>>>> for carrying data is respective data objects. I don't send these
    > objects
    > >>>>> beyond my data access layer. Rather I create business objects
    > populated
    > >>>>> with
    > >>>>> data object data. When the business functions call data access layer
    > for
    > >>>>> any
    > >>>>> of the CRUD operations, they pass these business objects. I convert
    > these
    > >>>>> business objects to data objects(So, I will create data object every
    > time
    > >>>>> I
    > >>>>> need to convert business object to data object. So, what happens when
    > the
    > >>>>> two data objects(one dataobject is created while retrieving data. We
    > send
    > >>>>> the data as business object to business layer. one data object is
    > created
    > >>>>> when the user returns the modified data in the form of business
    > object)
    > >>>>> of
    > >>>>> the same class exist with the same data? How can I modify and delete
    > the
    > >>>>> respective rows of these data objects? Please answer any body. I did
    > not
    > >>>>> find any example that does the modification.
    > >>>>>
    > >>>>>
    > >>>>> Yours Sincerely,
    > >>>>> Devatha Sridhar
    > >>>>>
    > >>>>
    > >>>>
    > >>>
    > >>>
    > >>> --
    > >>>
    > >>> Yours Sincerely,
    > >>> Devatha Sridhar
    > >>>
    > >>
    > >>
    > >>
    > >>
    > >
    > >
    > >
    > >
    >

    -- 
    

    Yours Sincerely, Devatha Sridhar



    This archive was generated by hypermail 2.0.0 : Thu Jul 23 2009 - 00:41:18 EDT