You can't do "participante.id == $participante.id "?
--- On Wed, 5/6/09, Guto <guto(a)guto.net> wrote:
From: Guto <guto(a)guto.net>
Subject: Re: [rules-users] Hibernate proxy objects equality tests failing in Drools 5
To: "Rules Users List" <rules-users(a)lists.jboss.org>
Date: Wednesday, May 6, 2009, 7:43 AM
I don´t have a clue why is not working eather.
Unfortunelly I can´t really rely on a.id == b.id ´cause I
have rules like:
$participante:Participante() && $participacoes:
ArrayList(size == 0) from
collect(ParticipacaoCiclo(participante == $participante
&& saidaPosto ==
null && periodo == 1 ))
Do eager fetching, will really reduce my perfomace, since
most of my
collection properties have a huge amount of data (I don´t
use that data
inside the drools session, I don´t need them).
I have 2 clients one is an UnitTest that access the EJB and
the other is
an JSF 1.2 webclient (the real application itself). I´m
not using groovy
(not in this project, however I found that really
interesting).
thanks.
just a question (==) will be translated to (equals) right?
> With the new hibernate jars and the migration to the
new Javassist,
> what hibernate is essentially doing is dynamically
generating
> hibernate proxy objects that should subclass the
original file.
> Here's the interesting part.
>
> In groovy, comparing two hibernate objects:
>
> a.a == b.a
>
> works fine when they are the same type of object.
Under groovy, "=="
> uses "equals()" to do the comparison. That
appears to work all good.
> However, taking these same two objects into Drools and
comparing their
> subproperty when they are lazily loaded will cause the
problems that
> a.a no longer equals to b.a. Yet under groovy, it
still says they are
> equal.
>
> There could be one of 2-3 things that can be done to
fix this, which I
> haven't entirely tried.
>
> 1) implement your own version of equals() and
hashCode() and use the
> instanceOf() hibernate util method to do comparison.
Sadly, I have
> over 50 domains objects and I'm hoping not to have
to implement all
> the methods.
>
> 2) do a eager fetch of the properties. This is
probably the best and
> easy way, but I am getting this working well under
Grails/groovy.
> Somehow it's still fetching them as proxy objects,
but just loaded.
> Either that or the eager fetching isn't even
working (I've yet to
> fully test this yet with hibernate logging turned on
to check).
>
> 3) use each domain's identity or some unique
constraint to do the
> equality check. This is my current
"cheating" way of getting around
> the problem. I simply use a.a.id == b.a.id. However,
this poses an
> additional complexity where I actually have to do null
checks for the
> property. Otherwise, I'd get NPEs all over the
place.
>
> At the end of the day, I don't see why Drools
cannot see proxy objects
> as equal. The only way I can think of is that there
is some sort of
> direct object/class type check in Drools that's
causing it not to
> realize that two objects are equal. But I could be
wrong, and I hope
> I'm wrong. :)
>
> -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(a)guto.net>
wrote:
>>>
>>>> From: Guto <guto(a)guto.net>
>>>> Subject: Re: [rules-users] Hibernate proxy
objects equality tests
>>>> failing in Drools 5
>>>> To: "Rules Users List"
<rules-users(a)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(a)guto.net> wrote:
>>>>>>
>>>>>>> From: Gustavo Maia Neto
<guto(a)guto.net>
>>>>>>> Subject: Re: [rules-users]
Hibernate proxy
>>>> objects equality tests
>>>>>>> failing in Drools 5
>>>>>>> To: "Rules Users
List"
>>>> <rules-users(a)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(a)lists.jboss.org
>>>>>>>
>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>
>>>>>>
>>>>>>
>>>>>>
_______________________________________________
>>>>>> rules-users mailing list
>>>>>> rules-users(a)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(a)lists.jboss.org
>>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
_______________________________________________
>>>> rules-users mailing list
>>>> rules-users(a)lists.jboss.org
>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>>
>>>
>>>
_______________________________________________
>>> rules-users mailing list
>>> rules-users(a)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(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)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(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users