You can't do "participante.id == $participante.id "? --- On Wed, 5/6/09, Guto <g...@guto.net> wrote:
> From: Guto <g...@guto.net> > Subject: Re: [rules-users] Hibernate proxy objects equality tests failing in > Drools 5 > To: "Rules Users List" <rules-users@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 <g...@guto.net> > wrote: > >>> > >>>> From: Guto <g...@guto.net> > >>>> Subject: Re: [rules-users] Hibernate proxy > objects equality tests > >>>> failing in Drools 5 > >>>> To: "Rules Users List" > <rules-users@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 > >>>> <g...@guto.net> wrote: > >>>>>> > >>>>>>> From: Gustavo Maia Neto > <g...@guto.net> > >>>>>>> Subject: Re: [rules-users] > Hibernate proxy > >>>> objects equality tests > >>>>>>> failing in Drools 5 > >>>>>>> To: "Rules Users > List" > >>>> <rules-users@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@lists.jboss.org > >>>>>>> > >>>> > https://lists.jboss.org/mailman/listinfo/rules-users > >>>>>> > >>>>>> > >>>>>> > >>>>>> > _______________________________________________ > >>>>>> rules-users mailing list > >>>>>> rules-users@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@lists.jboss.org > >>>>> > https://lists.jboss.org/mailman/listinfo/rules-users > >>>>> > >>>> > >>>> > >>>> > >>>> > >>>> > _______________________________________________ > >>>> rules-users mailing list > >>>> rules-users@lists.jboss.org > >>>> > https://lists.jboss.org/mailman/listinfo/rules-users > >>> > >>> > >>> > >>> > >>> > _______________________________________________ > >>> rules-users mailing list > >>> rules-users@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@lists.jboss.org > >> > https://lists.jboss.org/mailman/listinfo/rules-users > > > > > > _______________________________________________ > > rules-users mailing list > > rules-users@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@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users _______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users