[rules-users] Hibernate proxy objects equality tests failing in Drools 5

Guto guto at guto.net
Wed May 6 09:09:23 EDT 2009


Testing, I don´t think my 2 recent messages were sended to the list!!!

> Oh, and a couple other things I forgot to mention.
>
> I believe Hibernate by default will lazily load all association
> objects.  You have to explicitly set the lazy loading to false in
> order to get eager fetching.  I don't consider to be ideal as I have a
> pricing object that contains many optional attributes to about 10-15
> tables out there.
>
> Also, there appears one way to fix this under Groovy.  If you assign a
> proxy hibernate object to a class property that explicitly define the
> type of the object, then groovy will actually automatically recast it
> as that type.  For example:
>
> class MyDomainA {
>    String b
> }
>
> class MyDomainB {
>    MyDomainA a   // this will get proxied by hibernate
> }
>
> class MyPOJO {
>    MyDomainA a
> }
>
> if I assign it as follows:
>
> def pojo = new MyPOJO()
>
> pojo = myDomainB.a   // groovy will autoconvert the proxied object to
> the real class and store it as MyDomainA in MyPOJO.
>
> Drools, under this condition, will be fine with it.  However, this is
> not ideal as that means I need to basically create a duplicate POJO
> object to store all of the hibernate domain objects.  No good.
>
> oh well, back to my a.id == b.id. :)
>
> -Chris
>
>
> On May 4, 2009, at 1:29 PM, Guto wrote:
>
>> Thanks Greg,
>>
>> But it´s not a lazy loading problem at all. I am not using any kind of
>> lazy attribute inside the statefull drools session...
>>
>> Unfortunelly, i´ve just upgrade from drools 4GA to 5CR1 and the
>> problem
>> persist. Now I will try to make CLONES of the objects the came from
>> the
>> bank, just to see if that (temporary) solution works.
>>
>>>
>>> Do you need the lazy loading functionality that proxies provide?
>>> It seems
>>> to me that if you have an EJB call that's providing the objects
>>> loaded
>>> from hibernate, that's probably not the case. (i.e. once the
>>> objects are
>>> loaded and returned by the EJB method, the hibernate session may no
>>> longer
>>> be available, so lazy loading could fail anyway.)  If you have
>>> access to
>>> the hibernate mapping just set lazy="false" on your class mappings.
>>>
>>> Not to say that this use case shouldn't be addressed with drools,
>>> but if
>>> you're under a deadline... :)
>>>
>>> --- On Mon, 5/4/09, Guto <guto at guto.net> wrote:
>>>
>>>> From: Guto <guto at guto.net>
>>>> Subject: Re: [rules-users] Hibernate proxy objects equality tests
>>>> failing   in Drools 5
>>>> To: "Rules Users List" <rules-users at lists.jboss.org>
>>>> Date: Monday, May 4, 2009, 2:42 PM
>>>> Just now I notice one thing. The application that i am
>>>> building is
>>>> compleatly EJB centric. I have um EJB project that usually
>>>> do all the
>>>> database stuff, and another EJB project for the drools
>>>> rules. Lets call
>>>> them
>>>> EJB-DATA and EJB-DROOLS. When the client calls for an
>>>> specific data that
>>>> must be threated thru the Drools rules it calls an
>>>> Stateless method from
>>>> EJB-DATA, inside the method, it gather the necessarie
>>>> parameter
>>>> information and them inside the EJB-DATA method it calls
>>>> the EJB-DROOLS.
>>>> (hoping not been confusing)
>>>>
>>>> (if you are using an fixed space font, here comes the
>>>> sequence)
>>>>
>>>> Client --> EJB-DATA (gather information inside) -->
>>>> EJB-DROOLS
>>>>       <-- return to Client data from EJB-DROOLS<--
>>>> return to EJB-DATA
>>>>
>>>> Now looking over my two projects, I notice that I make them
>>>> apart so one
>>>> could evolve with interfering the other.
>>>>
>>>> When I call EJB-DROOLS directly from an UNIT-TEST client
>>>> with pojos
>>>> parameters intantiated by the test, it pass.
>>>>
>>>> When I call EJB-DATA from an UNIT-TEST client (pojos
>>>> created inside this),
>>>> first i was getting an CORBA exception ´cause of a
>>>> ClassNotFoundException
>>>> for the hibernate PersistenceBag.
>>>>
>>>> That´s the way i figure out that my objects are bagged or
>>>> proxied thru
>>>> hibernate.
>>>>
>>>> I´ve tried to use the EntityManager.clear() (EJB3-JPA) to
>>>> clean the pojos
>>>> before send it and make them more like the ones from the
>>>> first unit-test,
>>>> but even so it´s not working.
>>>>
>>>> Then, possible solutions:
>>>> 1) Make equality test works from objects that came from
>>>> hibernate from jpa.
>>>> 2) Kill the proxies and make them simple objects (not
>>>> hibernate derivated).
>>>> 3) don´t know, but i´m been realy in a deadline here.
>>>>
>>>>
>>>> again
>>>> thanks for anyone in advance !
>>>>
>>>> --
>>>> Guto Maia
>>>> Consultor de TI / Desenvolvedor
>>>> CSM - SCJP- SCWCD - SCBCD - ZCE
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>> In fact, i´m really using JPA with hibernate as an
>>>> provider.
>>>>>
>>>>> Could you send me your hibernate config? I will
>>>> compare some proprieties
>>>>> of tyour hibernate.config with my persistence.xml.
>>>>>
>>>>> I plenty sure that the rule is ok, since it is working
>>>> with the unit test.
>>>>>
>>>>> If you need any help to mimic what your using with
>>>> JPA, just ask.
>>>>>
>>>>> Thanks anyway.
>>>>>
>>>>>
>>>>>>
>>>>>> I'm using non-proxied hibernate backed POJOs
>>>> in drools with no problems.
>>>>>> (THe pojos aer generaed by hbm2java.)  I'll
>>>> try configuring for proxies
>>>>>> to
>>>>>> see what happens.
>>>>>>
>>>>>>
>>>>>> --- On Mon, 5/4/09, Gustavo Maia Neto
>>>> <guto at guto.net> wrote:
>>>>>>
>>>>>>> From: Gustavo Maia Neto <guto at guto.net>
>>>>>>> Subject: Re: [rules-users] Hibernate proxy
>>>> objects equality tests
>>>>>>> failing in Drools 5
>>>>>>> To: "Rules Users List"
>>>> <rules-users at lists.jboss.org>
>>>>>>> Date: Monday, May 4, 2009, 11:28 AM
>>>>>>> on this afternoon I will migrate to Drools 5
>>>> CR1,
>>>>>>> unfortunelly i'm not
>>>>>>> sure if it will solve my problem.
>>>>>>>
>>>>>>> Does anyone else uses Drools with objects that
>>>> came from an
>>>>>>> hibernate,
>>>>>>> (proxies)?
>>>>>>>
>>>>>>> Also, i'm not using any proxy to fetch
>>>> lazy data inside
>>>>>>> my Drools
>>>>>>> stateful session.
>>>>>>>
>>>>>>> thanks
>>>>>>>
>>>>>>> Guto escreveu:
>>>>>>>> I was following that subject on markmail,
>>>> and them
>>>>>>> I've enterred the
>>>>>>>> user-group (so subject and body are
>>>> coppied from
>>>>>>> them). I've got the
>>>>>>>> exactly same problem. When I use the
>>>> rules with
>>>>>>> objects the came from the
>>>>>>>> database (thru JPA hibernate provider),
>>>> thouse rules
>>>>>>> never match. When I
>>>>>>>> do the same from Pojos hand made for unit
>>>> test, it
>>>>>>> work.
>>>>>>>>
>>>>>>>> I don't know what really happen, but
>>>> i'm sure
>>>>>>> that it is an equality test
>>>>>>>> falling 'cause of the hibernate
>>>> proxys.
>>>>>>>>
>>>>>>>> I don't get also any kind of error or
>>>> exception,
>>>>>>> since it ALL WORK. Just
>>>>>>>> the rule isn't be acomplished.
>>>>>>>>
>>>>>>>> I'm using EJB3 + JPA (hibernate
>>>> provider) and
>>>>>>> Drools 4 GA;
>>>>>>>>
>>>>>>>> thanks in advance for any help
>>>>>>>>
>>>>>>>
>>>>>>>
>>>> _______________________________________________
>>>>>>> rules-users mailing list
>>>>>>> rules-users at lists.jboss.org
>>>>>>>
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> rules-users mailing list
>>>>>> rules-users at lists.jboss.org
>>>>>>
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Guto Maia
>>>>> Consultor de TI / Desenvolvedor
>>>>> CSM - SCJP- SCWCD - SCBCD - ZCE
>>>>>
>>>>> _______________________________________________
>>>>> rules-users mailing list
>>>>> rules-users at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>
>>
>> --
>> Guto Maia
>> Consultor de TI / Desenvolvedor
>> CSM - SCJP- SCWCD - SCBCD - ZCE
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
> .
>


-- 
Guto Maia
Consultor de TI / Desenvolvedor
CSM - SCJP- SCWCD - SCBCD - ZCE




More information about the rules-users mailing list