Detached Cayenne Objects

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Detached Cayenne Objects

Markus Reich
Hi,

I have a very special problem :-/
We want to use a cayenne object as detached object, for a simple object
this works fine, as the attribute values are hosted in a value map, but we
need a context when we want to use  the relations too :-/

What would be the best approach?
At the moment we create the object in a second context and copy the
attributes / relations with reflection (deep copy) as we have a lot of this
objects, creating context is very expensive and we want to reduce costs :-)

br
Markus
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Detached Cayenne Objects

Michael Gentry
Hi Markus,

As you have discovered, Cayenne objects need to be in a context when
relationships are involved.  I'm curious why you think creating a context
is very expensive, though?  It should actually be pretty cheap
memory/cpu-wise.

As for copying objects, are you copying committed objects or copying
new/modified objects and you need the new values?

mrg


On Thu, Apr 20, 2017 at 7:12 AM, Markus Reich <[hidden email]>
wrote:

> Hi,
>
> I have a very special problem :-/
> We want to use a cayenne object as detached object, for a simple object
> this works fine, as the attribute values are hosted in a value map, but we
> need a context when we want to use  the relations too :-/
>
> What would be the best approach?
> At the moment we create the object in a second context and copy the
> attributes / relations with reflection (deep copy) as we have a lot of this
> objects, creating context is very expensive and we want to reduce costs :-)
>
> br
> Markus
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Detached Cayenne Objects

Markus Reich
Hi Michael,

I checked the stacktrace again, it's my fault, the expensive operation was
the reflection on the getter and setter :-/
The coding was pretty old, so I don't need reflection in my case ;-)

Here the old approach
Object value = Reflect.on(source).call("get" +
StringUtils.capitalize(objAttribute.getName())).get();
Reflect.on(target).call("set" +
StringUtils.capitalize(objAttribute.getName()), value);

Now I switch to
Object value = source.readPropertyDirectly(objAttribute.getName());
target.writePropertyDirectly(objAttribute.getName(), value);

I think this will give my application a real kick :-)

br
Markus



Michael Gentry <[hidden email]> schrieb am Do., 20. Apr. 2017 um
13:28 Uhr:

> Hi Markus,
>
> As you have discovered, Cayenne objects need to be in a context when
> relationships are involved.  I'm curious why you think creating a context
> is very expensive, though?  It should actually be pretty cheap
> memory/cpu-wise.
>
> As for copying objects, are you copying committed objects or copying
> new/modified objects and you need the new values?
>
> mrg
>
>
> On Thu, Apr 20, 2017 at 7:12 AM, Markus Reich <[hidden email]
> >
> wrote:
>
> > Hi,
> >
> > I have a very special problem :-/
> > We want to use a cayenne object as detached object, for a simple object
> > this works fine, as the attribute values are hosted in a value map, but
> we
> > need a context when we want to use  the relations too :-/
> >
> > What would be the best approach?
> > At the moment we create the object in a second context and copy the
> > attributes / relations with reflection (deep copy) as we have a lot of
> this
> > objects, creating context is very expensive and we want to reduce costs
> :-)
> >
> > br
> > Markus
> >
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Detached Cayenne Objects

Michael Gentry
Ah, I can see that being a bit slower.  Keep in mind the "directly" methods
won't resolve faults and there are different methods for dealing with
relationships.



On Thu, Apr 20, 2017 at 8:00 AM, Markus Reich <[hidden email]>
wrote:

> Hi Michael,
>
> I checked the stacktrace again, it's my fault, the expensive operation was
> the reflection on the getter and setter :-/
> The coding was pretty old, so I don't need reflection in my case ;-)
>
> Here the old approach
> Object value = Reflect.on(source).call("get" +
> StringUtils.capitalize(objAttribute.getName())).get();
> Reflect.on(target).call("set" +
> StringUtils.capitalize(objAttribute.getName()), value);
>
> Now I switch to
> Object value = source.readPropertyDirectly(objAttribute.getName());
> target.writePropertyDirectly(objAttribute.getName(), value);
>
> I think this will give my application a real kick :-)
>
> br
> Markus
>
>
>
> Michael Gentry <[hidden email]> schrieb am Do., 20. Apr. 2017 um
> 13:28 Uhr:
>
> > Hi Markus,
> >
> > As you have discovered, Cayenne objects need to be in a context when
> > relationships are involved.  I'm curious why you think creating a context
> > is very expensive, though?  It should actually be pretty cheap
> > memory/cpu-wise.
> >
> > As for copying objects, are you copying committed objects or copying
> > new/modified objects and you need the new values?
> >
> > mrg
> >
> >
> > On Thu, Apr 20, 2017 at 7:12 AM, Markus Reich <
> [hidden email]
> > >
> > wrote:
> >
> > > Hi,
> > >
> > > I have a very special problem :-/
> > > We want to use a cayenne object as detached object, for a simple object
> > > this works fine, as the attribute values are hosted in a value map, but
> > we
> > > need a context when we want to use  the relations too :-/
> > >
> > > What would be the best approach?
> > > At the moment we create the object in a second context and copy the
> > > attributes / relations with reflection (deep copy) as we have a lot of
> > this
> > > objects, creating context is very expensive and we want to reduce costs
> > :-)
> > >
> > > br
> > > Markus
> > >
> >
>
Loading...