mike, transfer object design pattern might be a good example why I don't
expose data objects in view layer. see
http://java.sun.com/blueprints/patterns/TransferObject.html
Then if i have to use separate objects (that is transfer objects) in view
layer. How do you want me to do the conversion to and from business object?
I have to include object id/ entity name in the transfer / view object to
build business object. I don't want to do that.
On Thu, Jul 23, 2009 at 10:10 AM, sridhar devatha <devatha.sridha..mail.com
> wrote:
> 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
>
--Yours Sincerely, Devatha Sridhar
This archive was generated by hypermail 2.0.0 : Thu Jul 23 2009 - 01:13:10 EDT