You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hivemind.apache.org by Stephane Decleire <sd...@cariboo-networks.com> on 2007/07/12 16:14:12 UTC
Problem with Hivemind proxies in Hibernate
================
Approach 1 :
I have two pojos : Parent and Child with there respective interface
IParent and IChild.
public Interface IParent {
public void setChild(IChild child);
public IChild getChild();
}
In Hivemind, i have declared the services below :
<service-point id="Parent" interface="IParent">
<invoke-factory>
<construct class="Parent">
<set-object property="child" value="service:Child"/>
</construct>
</invoke-factory>
</service-point>
<service-point id="Child" interface="IChild">
<invoke-factory>
<construct class="Child"/>
</invoke-factory>
</service-point>
Hivemind works with interfaces so, in my code, i get a child from its
parent :
IChild child1 = parent.getChild();
Using this approach, i assume that child1 is in fact a Hivemind proxy on
my child1 pojo (tell me if i'm wrong). So i can't convert IChild into
Child ...
And then, i would like to persist my pojo child1 using a DAO :
public Interface IChildDao {
public void persist(IChild child);
}
But Hibernate doesn't know how to persist IChild because what it really
try to persist is a Hivemind proxy !
================
Approach 2 :
I know that Hibernate isn't able to persist the interface so the my DAO
interface becomes :
public Interface IChildDao {
public void persist(Child child);
}
So i need to get the instance of my pojo Child and not an interface from
my pojo Parent :
Child child1 = parent.getChild();
That's implies that my parent interface becomes :
public Interface IParent {
public void setChild(Child child);
public Child getChild();
}
And in this case Hivemind doesn't build my services !
I can't find the architecture which satisfies both framework ...
Any help would be very appreciated !
Stephane.
Re: Problem with Hivemind proxies in Hibernate
Posted by Stephane Decleire <sd...@cariboo-networks.com>.
Hi Johan,
It's only a sample to show the problem i'm faced with.
In my real application, i've got a singleton pojo which is never
persisted (here my parent) but this singleton is a kind of factory for
over pojos (like the child) which are persisted using Hibernate.
By the way, i need Hivemind to generate those pojos because my children
are themselves complex pojos which encapsulates other pojos defined in
Hivemind.
Stephane
Johan Lindquist a écrit :
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hi Stephane,
>
> My ask first what you exactly are trying to do? What is the reason you
> would like to define the parent/child object within Hivemind and then
> persist them?
>
> Are the parent/child objects not simple beans just now which (without
> involving hivemind) can be stored/retrieved etc using the DAO service
> (which is defined in Hivemind as a service)?
>
> Cheers,
>
> Johan
>
> Stephane Decleire wrote:
>
>> ================
>> Approach 1 :
>>
>> I have two pojos : Parent and Child with there respective interface
>> IParent and IChild.
>>
>> public Interface IParent {
>> public void setChild(IChild child);
>> public IChild getChild();
>> }
>>
>> In Hivemind, i have declared the services below :
>>
>> <service-point id="Parent" interface="IParent">
>> <invoke-factory>
>> <construct class="Parent">
>> <set-object property="child" value="service:Child"/>
>> </construct>
>> </invoke-factory>
>> </service-point>
>>
>> <service-point id="Child" interface="IChild">
>> <invoke-factory>
>> <construct class="Child"/>
>> </invoke-factory>
>> </service-point>
>>
>>
>> Hivemind works with interfaces so, in my code, i get a child from its
>> parent :
>> IChild child1 = parent.getChild();
>> Using this approach, i assume that child1 is in fact a Hivemind proxy on
>> my child1 pojo (tell me if i'm wrong). So i can't convert IChild into
>> Child ...
>>
>> And then, i would like to persist my pojo child1 using a DAO :
>>
>> public Interface IChildDao {
>> public void persist(IChild child);
>> }
>>
>> But Hibernate doesn't know how to persist IChild because what it really
>> try to persist is a Hivemind proxy !
>>
>> ================
>> Approach 2 :
>>
>> I know that Hibernate isn't able to persist the interface so the my DAO
>> interface becomes :
>>
>> public Interface IChildDao {
>> public void persist(Child child);
>> }
>>
>> So i need to get the instance of my pojo Child and not an interface from
>> my pojo Parent :
>> Child child1 = parent.getChild();
>>
>> That's implies that my parent interface becomes :
>>
>> public Interface IParent {
>> public void setChild(Child child);
>> public Child getChild();
>> }
>>
>> And in this case Hivemind doesn't build my services !
>>
>> I can't find the architecture which satisfies both framework ...
>> Any help would be very appreciated !
>>
>> Stephane.
>>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.6 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iD8DBQFGlkJm1Tv8wj7aQ34RAh+yAJ40Nv8xouId2bclT0z5e/swnJJnGACbBtS2
> n+vhFnCEXUC+LHDgURkiYYU=
> =YE45
> -----END PGP SIGNATURE-----
>
Re: Problem with Hivemind proxies in Hibernate
Posted by Stephane Decleire <sd...@cariboo-networks.com>.
Thanks James, i will cast an eye on that during my vacations ;-)
James Carman a écrit :
> I mean beans that HiveMind isn't instantiating (like stuff Hibernate
> creates from database rows). Yes, HiveMind is for wiring up a web of
> pojos, but those pojos are typically services. Stuff that gets stored
> in the database isn't really what you'd want defined in your HiveMind
> registry.
>
> On 7/12/07, Stephane Decleire <sd...@cariboo-networks.com> wrote:
>>
>> Why would you use AOP in such a case James ?
>> Isn't hivemind able to wire beans ? After all, a bean is no more than a
>> pojo ...
>>
>> Stephane
>>
>> James Carman a écrit :
>> If you require wiring of "beans" (not hivemind services), I'd look for
>> an aspect-oriented solution. The spring framework supports this
>> through the @Configurable annotation. It wouldn't be too tough to
>> come up with something like that for HiveMind. I did some work
>> enabling AspectJ and HiveMind
>> (http://svn.javaforge.com/svn/hivemind/hivemind-aspectj).
>> That could
>> get you started. Basically, what you need is an aspect that can
>> autowire a bean given a HiveMind registry. The trick is setting the
>> registry property of the aspect, but that shoulnd't be too tough with
>> a custom factory of some sorts (like I do in hivemind-aspectj, but
>> you'd just set the registry property on the aspect instance).
>>
>> On 7/12/07, Johan Lindquist <jo...@kawoo.co.uk> wrote:
>>
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Hi Stephane,
>>
>> My ask first what you exactly are trying to do? What is the reason you
>> would like to define the parent/child object within Hivemind and then
>> persist them?
>>
>> Are the parent/child objects not simple beans just now which (without
>> involving hivemind) can be stored/retrieved etc using the DAO service
>> (which is defined in Hivemind as a service)?
>>
>> Cheers,
>>
>> Johan
>>
>> Stephane Decleire wrote:
>> > ================
>> > Approach 1 :
>> >
>> > I have two pojos : Parent and Child with there respective interface
>> > IParent and IChild.
>> >
>> > public Interface IParent {
>> > public void setChild(IChild child);
>> > public IChild getChild();
>> > }
>> >
>> > In Hivemind, i have declared the services below :
>> >
>> > <service-point id="Parent" interface="IParent">
>> > <invoke-factory>
>> > <construct class="Parent">
>> > <set-object property="child" value="service:Child"/>
>> > </construct>
>> > </invoke-factory>
>> > </service-point>
>> >
>> > <service-point id="Child" interface="IChild">
>> > <invoke-factory>
>> > <construct class="Child"/>
>> > </invoke-factory>
>> > </service-point>
>> >
>> >
>> > Hivemind works with interfaces so, in my code, i get a child from its
>> > parent :
>> > IChild child1 = parent.getChild();
>> > Using this approach, i assume that child1 is in fact a Hivemind
>> proxy on
>> > my child1 pojo (tell me if i'm wrong). So i can't convert IChild into
>> > Child ...
>> >
>> > And then, i would like to persist my pojo child1 using a DAO :
>> >
>> > public Interface IChildDao {
>> > public void persist(IChild child);
>> > }
>> >
>> > But Hibernate doesn't know how to persist IChild because what it
>> really
>> > try to persist is a Hivemind proxy !
>> >
>> > ================
>> > Approach 2 :
>> >
>> > I know that Hibernate isn't able to persist the interface so the
>> my DAO
>> > interface becomes :
>> >
>> > public Interface IChildDao {
>> > public void persist(Child child);
>> > }
>> >
>> > So i need to get the instance of my pojo Child and not an
>> interface from
>> > my pojo Parent :
>> > Child child1 = parent.getChild();
>> >
>> > That's implies that my parent interface becomes :
>> >
>> > public Interface IParent {
>> > public void setChild(Child child);
>> > public Child getChild();
>> > }
>> >
>> > And in this case Hivemind doesn't build my services !
>> >
>> > I can't find the architecture which satisfies both framework ...
>> > Any help would be very appreciated !
>> >
>> > Stephane.
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.6 (GNU/Linux)
>> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>>
>> iD8DBQFGlkJm1Tv8wj7aQ34RAh+yAJ40Nv8xouId2bclT0z5e/swnJJnGACbBtS2
>> n+vhFnCEXUC+LHDgURkiYYU=
>> =YE45
>> -----END PGP SIGNATURE-----
>>
>>
Re: Problem with Hivemind proxies in Hibernate
Posted by James Carman <ja...@carmanconsulting.com>.
I mean beans that HiveMind isn't instantiating (like stuff Hibernate
creates from database rows). Yes, HiveMind is for wiring up a web of
pojos, but those pojos are typically services. Stuff that gets stored
in the database isn't really what you'd want defined in your HiveMind
registry.
On 7/12/07, Stephane Decleire <sd...@cariboo-networks.com> wrote:
>
> Why would you use AOP in such a case James ?
> Isn't hivemind able to wire beans ? After all, a bean is no more than a
> pojo ...
>
> Stephane
>
> James Carman a écrit :
> If you require wiring of "beans" (not hivemind services), I'd look for
> an aspect-oriented solution. The spring framework supports this
> through the @Configurable annotation. It wouldn't be too tough to
> come up with something like that for HiveMind. I did some work
> enabling AspectJ and HiveMind
> (http://svn.javaforge.com/svn/hivemind/hivemind-aspectj).
> That could
> get you started. Basically, what you need is an aspect that can
> autowire a bean given a HiveMind registry. The trick is setting the
> registry property of the aspect, but that shoulnd't be too tough with
> a custom factory of some sorts (like I do in hivemind-aspectj, but
> you'd just set the registry property on the aspect instance).
>
> On 7/12/07, Johan Lindquist <jo...@kawoo.co.uk> wrote:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hi Stephane,
>
> My ask first what you exactly are trying to do? What is the reason you
> would like to define the parent/child object within Hivemind and then
> persist them?
>
> Are the parent/child objects not simple beans just now which (without
> involving hivemind) can be stored/retrieved etc using the DAO service
> (which is defined in Hivemind as a service)?
>
> Cheers,
>
> Johan
>
> Stephane Decleire wrote:
> > ================
> > Approach 1 :
> >
> > I have two pojos : Parent and Child with there respective interface
> > IParent and IChild.
> >
> > public Interface IParent {
> > public void setChild(IChild child);
> > public IChild getChild();
> > }
> >
> > In Hivemind, i have declared the services below :
> >
> > <service-point id="Parent" interface="IParent">
> > <invoke-factory>
> > <construct class="Parent">
> > <set-object property="child" value="service:Child"/>
> > </construct>
> > </invoke-factory>
> > </service-point>
> >
> > <service-point id="Child" interface="IChild">
> > <invoke-factory>
> > <construct class="Child"/>
> > </invoke-factory>
> > </service-point>
> >
> >
> > Hivemind works with interfaces so, in my code, i get a child from its
> > parent :
> > IChild child1 = parent.getChild();
> > Using this approach, i assume that child1 is in fact a Hivemind proxy on
> > my child1 pojo (tell me if i'm wrong). So i can't convert IChild into
> > Child ...
> >
> > And then, i would like to persist my pojo child1 using a DAO :
> >
> > public Interface IChildDao {
> > public void persist(IChild child);
> > }
> >
> > But Hibernate doesn't know how to persist IChild because what it really
> > try to persist is a Hivemind proxy !
> >
> > ================
> > Approach 2 :
> >
> > I know that Hibernate isn't able to persist the interface so the my DAO
> > interface becomes :
> >
> > public Interface IChildDao {
> > public void persist(Child child);
> > }
> >
> > So i need to get the instance of my pojo Child and not an interface from
> > my pojo Parent :
> > Child child1 = parent.getChild();
> >
> > That's implies that my parent interface becomes :
> >
> > public Interface IParent {
> > public void setChild(Child child);
> > public Child getChild();
> > }
> >
> > And in this case Hivemind doesn't build my services !
> >
> > I can't find the architecture which satisfies both framework ...
> > Any help would be very appreciated !
> >
> > Stephane.
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.6 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iD8DBQFGlkJm1Tv8wj7aQ34RAh+yAJ40Nv8xouId2bclT0z5e/swnJJnGACbBtS2
> n+vhFnCEXUC+LHDgURkiYYU=
> =YE45
> -----END PGP SIGNATURE-----
>
>
Re: Problem with Hivemind proxies in Hibernate
Posted by Stephane Decleire <sd...@cariboo-networks.com>.
Why would you use AOP in such a case James ?
Isn't hivemind able to wire beans ? After all, a bean is no more than a
pojo ...
Stephane
James Carman a écrit :
> If you require wiring of "beans" (not hivemind services), I'd look for
> an aspect-oriented solution. The spring framework supports this
> through the @Configurable annotation. It wouldn't be too tough to
> come up with something like that for HiveMind. I did some work
> enabling AspectJ and HiveMind
> (http://svn.javaforge.com/svn/hivemind/hivemind-aspectj). That could
> get you started. Basically, what you need is an aspect that can
> autowire a bean given a HiveMind registry. The trick is setting the
> registry property of the aspect, but that shoulnd't be too tough with
> a custom factory of some sorts (like I do in hivemind-aspectj, but
> you'd just set the registry property on the aspect instance).
>
> On 7/12/07, Johan Lindquist <jo...@kawoo.co.uk> wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Hi Stephane,
>>
>> My ask first what you exactly are trying to do? What is the reason you
>> would like to define the parent/child object within Hivemind and then
>> persist them?
>>
>> Are the parent/child objects not simple beans just now which (without
>> involving hivemind) can be stored/retrieved etc using the DAO service
>> (which is defined in Hivemind as a service)?
>>
>> Cheers,
>>
>> Johan
>>
>> Stephane Decleire wrote:
>> > ================
>> > Approach 1 :
>> >
>> > I have two pojos : Parent and Child with there respective interface
>> > IParent and IChild.
>> >
>> > public Interface IParent {
>> > public void setChild(IChild child);
>> > public IChild getChild();
>> > }
>> >
>> > In Hivemind, i have declared the services below :
>> >
>> > <service-point id="Parent" interface="IParent">
>> > <invoke-factory>
>> > <construct class="Parent">
>> > <set-object property="child" value="service:Child"/>
>> > </construct>
>> > </invoke-factory>
>> > </service-point>
>> >
>> > <service-point id="Child" interface="IChild">
>> > <invoke-factory>
>> > <construct class="Child"/>
>> > </invoke-factory>
>> > </service-point>
>> >
>> >
>> > Hivemind works with interfaces so, in my code, i get a child from its
>> > parent :
>> > IChild child1 = parent.getChild();
>> > Using this approach, i assume that child1 is in fact a Hivemind
>> proxy on
>> > my child1 pojo (tell me if i'm wrong). So i can't convert IChild into
>> > Child ...
>> >
>> > And then, i would like to persist my pojo child1 using a DAO :
>> >
>> > public Interface IChildDao {
>> > public void persist(IChild child);
>> > }
>> >
>> > But Hibernate doesn't know how to persist IChild because what it
>> really
>> > try to persist is a Hivemind proxy !
>> >
>> > ================
>> > Approach 2 :
>> >
>> > I know that Hibernate isn't able to persist the interface so the my
>> DAO
>> > interface becomes :
>> >
>> > public Interface IChildDao {
>> > public void persist(Child child);
>> > }
>> >
>> > So i need to get the instance of my pojo Child and not an interface
>> from
>> > my pojo Parent :
>> > Child child1 = parent.getChild();
>> >
>> > That's implies that my parent interface becomes :
>> >
>> > public Interface IParent {
>> > public void setChild(Child child);
>> > public Child getChild();
>> > }
>> >
>> > And in this case Hivemind doesn't build my services !
>> >
>> > I can't find the architecture which satisfies both framework ...
>> > Any help would be very appreciated !
>> >
>> > Stephane.
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.6 (GNU/Linux)
>> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>>
>> iD8DBQFGlkJm1Tv8wj7aQ34RAh+yAJ40Nv8xouId2bclT0z5e/swnJJnGACbBtS2
>> n+vhFnCEXUC+LHDgURkiYYU=
>> =YE45
>> -----END PGP SIGNATURE-----
>>
Re: Problem with Hivemind proxies in Hibernate
Posted by James Carman <ja...@carmanconsulting.com>.
If you require wiring of "beans" (not hivemind services), I'd look for
an aspect-oriented solution. The spring framework supports this
through the @Configurable annotation. It wouldn't be too tough to
come up with something like that for HiveMind. I did some work
enabling AspectJ and HiveMind
(http://svn.javaforge.com/svn/hivemind/hivemind-aspectj). That could
get you started. Basically, what you need is an aspect that can
autowire a bean given a HiveMind registry. The trick is setting the
registry property of the aspect, but that shoulnd't be too tough with
a custom factory of some sorts (like I do in hivemind-aspectj, but
you'd just set the registry property on the aspect instance).
On 7/12/07, Johan Lindquist <jo...@kawoo.co.uk> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hi Stephane,
>
> My ask first what you exactly are trying to do? What is the reason you
> would like to define the parent/child object within Hivemind and then
> persist them?
>
> Are the parent/child objects not simple beans just now which (without
> involving hivemind) can be stored/retrieved etc using the DAO service
> (which is defined in Hivemind as a service)?
>
> Cheers,
>
> Johan
>
> Stephane Decleire wrote:
> > ================
> > Approach 1 :
> >
> > I have two pojos : Parent and Child with there respective interface
> > IParent and IChild.
> >
> > public Interface IParent {
> > public void setChild(IChild child);
> > public IChild getChild();
> > }
> >
> > In Hivemind, i have declared the services below :
> >
> > <service-point id="Parent" interface="IParent">
> > <invoke-factory>
> > <construct class="Parent">
> > <set-object property="child" value="service:Child"/>
> > </construct>
> > </invoke-factory>
> > </service-point>
> >
> > <service-point id="Child" interface="IChild">
> > <invoke-factory>
> > <construct class="Child"/>
> > </invoke-factory>
> > </service-point>
> >
> >
> > Hivemind works with interfaces so, in my code, i get a child from its
> > parent :
> > IChild child1 = parent.getChild();
> > Using this approach, i assume that child1 is in fact a Hivemind proxy on
> > my child1 pojo (tell me if i'm wrong). So i can't convert IChild into
> > Child ...
> >
> > And then, i would like to persist my pojo child1 using a DAO :
> >
> > public Interface IChildDao {
> > public void persist(IChild child);
> > }
> >
> > But Hibernate doesn't know how to persist IChild because what it really
> > try to persist is a Hivemind proxy !
> >
> > ================
> > Approach 2 :
> >
> > I know that Hibernate isn't able to persist the interface so the my DAO
> > interface becomes :
> >
> > public Interface IChildDao {
> > public void persist(Child child);
> > }
> >
> > So i need to get the instance of my pojo Child and not an interface from
> > my pojo Parent :
> > Child child1 = parent.getChild();
> >
> > That's implies that my parent interface becomes :
> >
> > public Interface IParent {
> > public void setChild(Child child);
> > public Child getChild();
> > }
> >
> > And in this case Hivemind doesn't build my services !
> >
> > I can't find the architecture which satisfies both framework ...
> > Any help would be very appreciated !
> >
> > Stephane.
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.6 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iD8DBQFGlkJm1Tv8wj7aQ34RAh+yAJ40Nv8xouId2bclT0z5e/swnJJnGACbBtS2
> n+vhFnCEXUC+LHDgURkiYYU=
> =YE45
> -----END PGP SIGNATURE-----
>
Re: Problem with Hivemind proxies in Hibernate
Posted by Johan Lindquist <jo...@kawoo.co.uk>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi Stephane,
My ask first what you exactly are trying to do? What is the reason you
would like to define the parent/child object within Hivemind and then
persist them?
Are the parent/child objects not simple beans just now which (without
involving hivemind) can be stored/retrieved etc using the DAO service
(which is defined in Hivemind as a service)?
Cheers,
Johan
Stephane Decleire wrote:
> ================
> Approach 1 :
>
> I have two pojos : Parent and Child with there respective interface
> IParent and IChild.
>
> public Interface IParent {
> public void setChild(IChild child);
> public IChild getChild();
> }
>
> In Hivemind, i have declared the services below :
>
> <service-point id="Parent" interface="IParent">
> <invoke-factory>
> <construct class="Parent">
> <set-object property="child" value="service:Child"/>
> </construct>
> </invoke-factory>
> </service-point>
>
> <service-point id="Child" interface="IChild">
> <invoke-factory>
> <construct class="Child"/>
> </invoke-factory>
> </service-point>
>
>
> Hivemind works with interfaces so, in my code, i get a child from its
> parent :
> IChild child1 = parent.getChild();
> Using this approach, i assume that child1 is in fact a Hivemind proxy on
> my child1 pojo (tell me if i'm wrong). So i can't convert IChild into
> Child ...
>
> And then, i would like to persist my pojo child1 using a DAO :
>
> public Interface IChildDao {
> public void persist(IChild child);
> }
>
> But Hibernate doesn't know how to persist IChild because what it really
> try to persist is a Hivemind proxy !
>
> ================
> Approach 2 :
>
> I know that Hibernate isn't able to persist the interface so the my DAO
> interface becomes :
>
> public Interface IChildDao {
> public void persist(Child child);
> }
>
> So i need to get the instance of my pojo Child and not an interface from
> my pojo Parent :
> Child child1 = parent.getChild();
>
> That's implies that my parent interface becomes :
>
> public Interface IParent {
> public void setChild(Child child);
> public Child getChild();
> }
>
> And in this case Hivemind doesn't build my services !
>
> I can't find the architecture which satisfies both framework ...
> Any help would be very appreciated !
>
> Stephane.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFGlkJm1Tv8wj7aQ34RAh+yAJ40Nv8xouId2bclT0z5e/swnJJnGACbBtS2
n+vhFnCEXUC+LHDgURkiYYU=
=YE45
-----END PGP SIGNATURE-----