Quantcast

Questions: Not condition; Condition sharing; JSR 94 customization; Assert object equality

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

Questions: Not condition; Condition sharing; JSR 94 customization; Assert object equality

work_registries
I recently looked into drools after experimenting with JESS and got a
few questions I could not look up in the drools documentation:

- Exists a condition to test for non-existence of a matching
object/fact?
-- If yes, how to use it for own domain specific language conditions

- How is sharing of conditions/nodes between productions implemented in
drools, one of the main benefits of the rete algorithm?
-- How is the equality of conditions defined for java smf? via textual
equality of the condition's java code?
-- How can equality of conditions for sharing be defined for domain
specific language conditions?
e.g. Conway's game of life (slightly modified dsl)
<rule name="kill the overcrowded">
        <conway:cellIsAlive cellName="cell"/>
        <conway:cellIsOverCrowded cellName="cell"/>
        <conway:killCell cellName="cell"/>
</rule>
<rule name="kill the lonely">
        <conway:cellIsAlive cellName="cell"/>
        <conway:cellIsLonely cellName="cell"/>
        <conway:killCell cellName="cell"/>
</rule>

The conway:cellIsAlive condition could be shared between these two
productions. Would it?

- When will the properties map be supported in drools implementation of
JSR 94 javax.rules API?
-- e.g. to be able to set conflict resolver of a rule base and other
settings that can be set via drools native API

- Can object equality for assertion be customized?
-- Currently, org.drools.util.IdentityMap
(org.drools.reteoo.WorkingMemoryImpl) makes use of
System.identityHashCode(). There seems to be no way to customize that,
e.g. make drools use equals() instead, neither via native nor JSR 94
API.

My apologies if some questions have already been answered in other
postings, I made no thorough search in this newsgroup yet.

Thanks a lot, Juergen


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

Re: Questions: Not condition; Condition sharing; JSR 94 customization; Assert object equality

Michael Neale
Short answer, not easily with Drools 2. But yes, with Drools 3.

On 3/22/06, Juergen <[hidden email]> wrote:

>
> I recently looked into drools after experimenting with JESS and got a
> few questions I could not look up in the drools documentation:
>
> - Exists a condition to test for non-existence of a matching
> object/fact?
> -- If yes, how to use it for own domain specific language conditions
>
> - How is sharing of conditions/nodes between productions implemented in
> drools, one of the main benefits of the rete algorithm?
> -- How is the equality of conditions defined for java smf? via textual
> equality of the condition's java code?
> -- How can equality of conditions for sharing be defined for domain
> specific language conditions?
> e.g. Conway's game of life (slightly modified dsl)
> <rule name="kill the overcrowded">
>         <conway:cellIsAlive cellName="cell"/>
>         <conway:cellIsOverCrowded cellName="cell"/>
>         <conway:killCell cellName="cell"/>
> </rule>
> <rule name="kill the lonely">
>         <conway:cellIsAlive cellName="cell"/>
>         <conway:cellIsLonely cellName="cell"/>
>         <conway:killCell cellName="cell"/>
> </rule>
>
> The conway:cellIsAlive condition could be shared between these two
> productions. Would it?
>
> - When will the properties map be supported in drools implementation of
> JSR 94 javax.rules API?
> -- e.g. to be able to set conflict resolver of a rule base and other
> settings that can be set via drools native API
>
> - Can object equality for assertion be customized?
> -- Currently, org.drools.util.IdentityMap
> (org.drools.reteoo.WorkingMemoryImpl) makes use of
> System.identityHashCode(). There seems to be no way to customize that,
> e.g. make drools use equals() instead, neither via native nor JSR 94
> API.
>
> My apologies if some questions have already been answered in other
> postings, I made no thorough search in this newsgroup yet.
>
> Thanks a lot, Juergen
>
>
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Drools 3, JSR 94 logical & dynamic object assertion

work_registries
While Drools 3 WorkingMemory does now support logical assertion of
objects, there is yet no way to choose which assertion function is used
via JSR 94 addObject (its currently non-logical, non-dynamic).

When can we expect support for some kind of properties in
org.drools.jsr94.rulesRuleRuntimeImpl.createRuleSession to set assertion
parameters? like { org.drools.jsr94.rules.assertLogical=TRUE|FALSE,
org.drools.jsr94.rules.assertDynamic=TRUE|FALSE }. At best the
properties would be re-read in addObject/addObjects, so it would be
possible to change assertion behaviour during a stateful rule session.

Thanks, Juergen

Michael Neale wrote:

> Short answer, not easily with Drools 2. But yes, with Drools 3.
>
> On 3/22/06, Juergen <[hidden email]> wrote:
>
>>I recently looked into drools after experimenting with JESS and got a
>>few questions I could not look up in the drools documentation:
>>
>>- Exists a condition to test for non-existence of a matching
>>object/fact?
>>-- If yes, how to use it for own domain specific language conditions
>>
>>- How is sharing of conditions/nodes between productions implemented in
>>drools, one of the main benefits of the rete algorithm?
>>-- How is the equality of conditions defined for java smf? via textual
>>equality of the condition's java code?
>>-- How can equality of conditions for sharing be defined for domain
>>specific language conditions?
>>e.g. Conway's game of life (slightly modified dsl)
>><rule name="kill the overcrowded">
>>        <conway:cellIsAlive cellName="cell"/>
>>        <conway:cellIsOverCrowded cellName="cell"/>
>>        <conway:killCell cellName="cell"/>
>></rule>
>><rule name="kill the lonely">
>>        <conway:cellIsAlive cellName="cell"/>
>>        <conway:cellIsLonely cellName="cell"/>
>>        <conway:killCell cellName="cell"/>
>></rule>
>>
>>The conway:cellIsAlive condition could be shared between these two
>>productions. Would it?
>>
>>- When will the properties map be supported in drools implementation of
>>JSR 94 javax.rules API?
>>-- e.g. to be able to set conflict resolver of a rule base and other
>>settings that can be set via drools native API
>>
>>- Can object equality for assertion be customized?
>>-- Currently, org.drools.util.IdentityMap
>>(org.drools.reteoo.WorkingMemoryImpl) makes use of
>>System.identityHashCode(). There seems to be no way to customize that,
>>e.g. make drools use equals() instead, neither via native nor JSR 94
>>API.
>>
>>My apologies if some questions have already been answered in other
>>postings, I made no thorough search in this newsgroup yet.
>>
>>Thanks a lot, Juergen

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

Re: Drools 3, JSR 94 logical & dynamic object assertion

Mark Proctor
You won't - not till JSR94 update the spec. Now you are starting to see
why  the  Drools team have always said to stay away from JSR94, its
completely pointless. We only support it as idiot managers who really
don't have a  clue  insist on using JSR94.

Mark

Juergen wrote:

> While Drools 3 WorkingMemory does now support logical assertion of
> objects, there is yet no way to choose which assertion function is
> used via JSR 94 addObject (its currently non-logical, non-dynamic).
>
> When can we expect support for some kind of properties in
> org.drools.jsr94.rulesRuleRuntimeImpl.createRuleSession to set
> assertion parameters? like {
> org.drools.jsr94.rules.assertLogical=TRUE|FALSE,
> org.drools.jsr94.rules.assertDynamic=TRUE|FALSE }. At best the
> properties would be re-read in addObject/addObjects, so it would be
> possible to change assertion behaviour during a stateful rule session.
>
> Thanks, Juergen
>
> Michael Neale wrote:
>> Short answer, not easily with Drools 2. But yes, with Drools 3.
>>
>> On 3/22/06, Juergen <[hidden email]> wrote:
>>
>>> I recently looked into drools after experimenting with JESS and got a
>>> few questions I could not look up in the drools documentation:
>>>
>>> - Exists a condition to test for non-existence of a matching
>>> object/fact?
>>> -- If yes, how to use it for own domain specific language conditions
>>>
>>> - How is sharing of conditions/nodes between productions implemented in
>>> drools, one of the main benefits of the rete algorithm?
>>> -- How is the equality of conditions defined for java smf? via textual
>>> equality of the condition's java code?
>>> -- How can equality of conditions for sharing be defined for domain
>>> specific language conditions?
>>> e.g. Conway's game of life (slightly modified dsl)
>>> <rule name="kill the overcrowded">
>>>        <conway:cellIsAlive cellName="cell"/>
>>>        <conway:cellIsOverCrowded cellName="cell"/>
>>>        <conway:killCell cellName="cell"/>
>>> </rule>
>>> <rule name="kill the lonely">
>>>        <conway:cellIsAlive cellName="cell"/>
>>>        <conway:cellIsLonely cellName="cell"/>
>>>        <conway:killCell cellName="cell"/>
>>> </rule>
>>>
>>> The conway:cellIsAlive condition could be shared between these two
>>> productions. Would it?
>>>
>>> - When will the properties map be supported in drools implementation of
>>> JSR 94 javax.rules API?
>>> -- e.g. to be able to set conflict resolver of a rule base and other
>>> settings that can be set via drools native API
>>>
>>> - Can object equality for assertion be customized?
>>> -- Currently, org.drools.util.IdentityMap
>>> (org.drools.reteoo.WorkingMemoryImpl) makes use of
>>> System.identityHashCode(). There seems to be no way to customize that,
>>> e.g. make drools use equals() instead, neither via native nor JSR 94
>>> API.
>>>
>>> My apologies if some questions have already been answered in other
>>> postings, I made no thorough search in this newsgroup yet.
>>>
>>> Thanks a lot, Juergen
>
>
>

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

Re: Drools 3, object equality in assert

work_registries
In reply to this post by Michael Neale
ad. Can object equality for assertion be customized?
Drools 3 still seems to use IdentityMap with System.identityHashCode().
Is it planned to be customizeable e.g. with equals() in 3.0?

Michael Neale wrote:

> Short answer, not easily with Drools 2. But yes, with Drools 3.
>
> On 3/22/06, Juergen <[hidden email]> wrote:
>
>>I recently looked into drools after experimenting with JESS and got a
>>few questions I could not look up in the drools documentation:
>>
>>- Exists a condition to test for non-existence of a matching
>>object/fact?
>>-- If yes, how to use it for own domain specific language conditions
>>
>>- How is sharing of conditions/nodes between productions implemented in
>>drools, one of the main benefits of the rete algorithm?
>>-- How is the equality of conditions defined for java smf? via textual
>>equality of the condition's java code?
>>-- How can equality of conditions for sharing be defined for domain
>>specific language conditions?
>>e.g. Conway's game of life (slightly modified dsl)
>><rule name="kill the overcrowded">
>>        <conway:cellIsAlive cellName="cell"/>
>>        <conway:cellIsOverCrowded cellName="cell"/>
>>        <conway:killCell cellName="cell"/>
>></rule>
>><rule name="kill the lonely">
>>        <conway:cellIsAlive cellName="cell"/>
>>        <conway:cellIsLonely cellName="cell"/>
>>        <conway:killCell cellName="cell"/>
>></rule>
>>
>>The conway:cellIsAlive condition could be shared between these two
>>productions. Would it?
>>
>>- When will the properties map be supported in drools implementation of
>>JSR 94 javax.rules API?
>>-- e.g. to be able to set conflict resolver of a rule base and other
>>settings that can be set via drools native API
>>
>>- Can object equality for assertion be customized?
>>-- Currently, org.drools.util.IdentityMap
>>(org.drools.reteoo.WorkingMemoryImpl) makes use of
>>System.identityHashCode(). There seems to be no way to customize that,
>>e.g. make drools use equals() instead, neither via native nor JSR 94
>>API.
>>
>>My apologies if some questions have already been answered in other
>>postings, I made no thorough search in this newsgroup yet.
>>
>>Thanks a lot, Juergen

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

Re: Drools 3, object equality in assert

Mark Proctor
We hadn't planned it, not promising  anything - but  I'll see how things
pan out, may be we will get time.

Mark
Juergen wrote:

> ad. Can object equality for assertion be customized?
> Drools 3 still seems to use IdentityMap with System.identityHashCode().
> Is it planned to be customizeable e.g. with equals() in 3.0?
>
> Michael Neale wrote:
>> Short answer, not easily with Drools 2. But yes, with Drools 3.
>>
>> On 3/22/06, Juergen <[hidden email]> wrote:
>>
>>> I recently looked into drools after experimenting with JESS and got a
>>> few questions I could not look up in the drools documentation:
>>>
>>> - Exists a condition to test for non-existence of a matching
>>> object/fact?
>>> -- If yes, how to use it for own domain specific language conditions
>>>
>>> - How is sharing of conditions/nodes between productions implemented in
>>> drools, one of the main benefits of the rete algorithm?
>>> -- How is the equality of conditions defined for java smf? via textual
>>> equality of the condition's java code?
>>> -- How can equality of conditions for sharing be defined for domain
>>> specific language conditions?
>>> e.g. Conway's game of life (slightly modified dsl)
>>> <rule name="kill the overcrowded">
>>>        <conway:cellIsAlive cellName="cell"/>
>>>        <conway:cellIsOverCrowded cellName="cell"/>
>>>        <conway:killCell cellName="cell"/>
>>> </rule>
>>> <rule name="kill the lonely">
>>>        <conway:cellIsAlive cellName="cell"/>
>>>        <conway:cellIsLonely cellName="cell"/>
>>>        <conway:killCell cellName="cell"/>
>>> </rule>
>>>
>>> The conway:cellIsAlive condition could be shared between these two
>>> productions. Would it?
>>>
>>> - When will the properties map be supported in drools implementation of
>>> JSR 94 javax.rules API?
>>> -- e.g. to be able to set conflict resolver of a rule base and other
>>> settings that can be set via drools native API
>>>
>>> - Can object equality for assertion be customized?
>>> -- Currently, org.drools.util.IdentityMap
>>> (org.drools.reteoo.WorkingMemoryImpl) makes use of
>>> System.identityHashCode(). There seems to be no way to customize that,
>>> e.g. make drools use equals() instead, neither via native nor JSR 94
>>> API.
>>>
>>> My apologies if some questions have already been answered in other
>>> postings, I made no thorough search in this newsgroup yet.
>>>
>>> Thanks a lot, Juergen
>
>
>

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

Re: Drools 3, object equality in assert

Michael Neale
so you mean
p1 : Person()
p2 : Person()
eval ( p1.equals(p2) )

(but presumably a shorthand form?)



On 4/8/06, Mark Proctor <[hidden email]> wrote:

>
> We hadn't planned it, not promising  anything - but  I'll see how things
> pan out, may be we will get time.
>
> Mark
> Juergen wrote:
> > ad. Can object equality for assertion be customized?
> > Drools 3 still seems to use IdentityMap with System.identityHashCode().
> > Is it planned to be customizeable e.g. with equals() in 3.0?
> >
> > Michael Neale wrote:
> >> Short answer, not easily with Drools 2. But yes, with Drools 3.
> >>
> >> On 3/22/06, Juergen <[hidden email]> wrote:
> >>
> >>> I recently looked into drools after experimenting with JESS and got a
> >>> few questions I could not look up in the drools documentation:
> >>>
> >>> - Exists a condition to test for non-existence of a matching
> >>> object/fact?
> >>> -- If yes, how to use it for own domain specific language conditions
> >>>
> >>> - How is sharing of conditions/nodes between productions implemented
> in
> >>> drools, one of the main benefits of the rete algorithm?
> >>> -- How is the equality of conditions defined for java smf? via textual
> >>> equality of the condition's java code?
> >>> -- How can equality of conditions for sharing be defined for domain
> >>> specific language conditions?
> >>> e.g. Conway's game of life (slightly modified dsl)
> >>> <rule name="kill the overcrowded">
> >>>        <conway:cellIsAlive cellName="cell"/>
> >>>        <conway:cellIsOverCrowded cellName="cell"/>
> >>>        <conway:killCell cellName="cell"/>
> >>> </rule>
> >>> <rule name="kill the lonely">
> >>>        <conway:cellIsAlive cellName="cell"/>
> >>>        <conway:cellIsLonely cellName="cell"/>
> >>>        <conway:killCell cellName="cell"/>
> >>> </rule>
> >>>
> >>> The conway:cellIsAlive condition could be shared between these two
> >>> productions. Would it?
> >>>
> >>> - When will the properties map be supported in drools implementation
> of
> >>> JSR 94 javax.rules API?
> >>> -- e.g. to be able to set conflict resolver of a rule base and other
> >>> settings that can be set via drools native API
> >>>
> >>> - Can object equality for assertion be customized?
> >>> -- Currently, org.drools.util.IdentityMap
> >>> (org.drools.reteoo.WorkingMemoryImpl) makes use of
> >>> System.identityHashCode(). There seems to be no way to customize that,
> >>> e.g. make drools use equals() instead, neither via native nor JSR 94
> >>> API.
> >>>
> >>> My apologies if some questions have already been answered in other
> >>> postings, I made no thorough search in this newsgroup yet.
> >>>
> >>> Thanks a lot, Juergen
> >
> >
> >
>
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Drools 3, object equality in assert

work_registries
I mean

workingMemory.assertObject(new String("A"));
workingMemory.assertObject(new String("A"));

would currently assert both strings into working memory, whereas if it
would check not for identityHashCode but with equals, the second assert
would have no effect.

When during experimentation with rule engines I switched from jess
(where it is done with equals I think) to drools 2 I first experienced
problems due to this differences (also did not find much in both engines
docu), leading to my question if I could customize drools behaviour.

As one can always write a wrapper for drools assertObject to make such
checks, and lots of other users probably dont need, my request is not
important.

Juergen


Michael Neale wrote:

> so you mean
> p1 : Person()
> p2 : Person()
> eval ( p1.equals(p2) )
>
> (but presumably a shorthand form?)
>
>
>
> On 4/8/06, Mark Proctor <[hidden email]> wrote:
>
>>We hadn't planned it, not promising  anything - but  I'll see how things
>>pan out, may be we will get time.
>>
>>Mark
>>Juergen wrote:
>>
>>>ad. Can object equality for assertion be customized?
>>>Drools 3 still seems to use IdentityMap with System.identityHashCode().
>>>Is it planned to be customizeable e.g. with equals() in 3.0?
>>>
>>>Michael Neale wrote:
>>>
>>>>Short answer, not easily with Drools 2. But yes, with Drools 3.
>>>>
>>>>On 3/22/06, Juergen <[hidden email]> wrote:
>>>>
>>>>
>>>>>I recently looked into drools after experimenting with JESS and got a
>>>>>few questions I could not look up in the drools documentation:
>>>>>
>>>>>- Exists a condition to test for non-existence of a matching
>>>>>object/fact?
>>>>>-- If yes, how to use it for own domain specific language conditions
>>>>>
>>>>>- How is sharing of conditions/nodes between productions implemented
>>
>>in
>>
>>>>>drools, one of the main benefits of the rete algorithm?
>>>>>-- How is the equality of conditions defined for java smf? via textual
>>>>>equality of the condition's java code?
>>>>>-- How can equality of conditions for sharing be defined for domain
>>>>>specific language conditions?
>>>>>e.g. Conway's game of life (slightly modified dsl)
>>>>><rule name="kill the overcrowded">
>>>>>       <conway:cellIsAlive cellName="cell"/>
>>>>>       <conway:cellIsOverCrowded cellName="cell"/>
>>>>>       <conway:killCell cellName="cell"/>
>>>>></rule>
>>>>><rule name="kill the lonely">
>>>>>       <conway:cellIsAlive cellName="cell"/>
>>>>>       <conway:cellIsLonely cellName="cell"/>
>>>>>       <conway:killCell cellName="cell"/>
>>>>></rule>
>>>>>
>>>>>The conway:cellIsAlive condition could be shared between these two
>>>>>productions. Would it?
>>>>>
>>>>>- When will the properties map be supported in drools implementation
>>
>>of
>>
>>>>>JSR 94 javax.rules API?
>>>>>-- e.g. to be able to set conflict resolver of a rule base and other
>>>>>settings that can be set via drools native API
>>>>>
>>>>>- Can object equality for assertion be customized?
>>>>>-- Currently, org.drools.util.IdentityMap
>>>>>(org.drools.reteoo.WorkingMemoryImpl) makes use of
>>>>>System.identityHashCode(). There seems to be no way to customize that,
>>>>>e.g. make drools use equals() instead, neither via native nor JSR 94
>>>>>API.
>>>>>
>>>>>My apologies if some questions have already been answered in other
>>>>>postings, I made no thorough search in this newsgroup yet.
>>>>>
>>>>>Thanks a lot, Juergen

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

Re: Drools 3, object equality in assert

Michael Neale
what is your expectations on how it should work? (everyone has different
ideas it seems !)

On 4/10/06, Juergen <[hidden email]> wrote:

>
> I mean
>
> workingMemory.assertObject(new String("A"));
> workingMemory.assertObject(new String("A"));
>
> would currently assert both strings into working memory, whereas if it
> would check not for identityHashCode but with equals, the second assert
> would have no effect.
>
> When during experimentation with rule engines I switched from jess
> (where it is done with equals I think) to drools 2 I first experienced
> problems due to this differences (also did not find much in both engines
> docu), leading to my question if I could customize drools behaviour.
>
> As one can always write a wrapper for drools assertObject to make such
> checks, and lots of other users probably dont need, my request is not
> important.
>
> Juergen
>
>
> Michael Neale wrote:
> > so you mean
> > p1 : Person()
> > p2 : Person()
> > eval ( p1.equals(p2) )
> >
> > (but presumably a shorthand form?)
> >
> >
> >
> > On 4/8/06, Mark Proctor <[hidden email]> wrote:
> >
> >>We hadn't planned it, not promising  anything - but  I'll see how things
> >>pan out, may be we will get time.
> >>
> >>Mark
> >>Juergen wrote:
> >>
> >>>ad. Can object equality for assertion be customized?
> >>>Drools 3 still seems to use IdentityMap with System.identityHashCode().
> >>>Is it planned to be customizeable e.g. with equals() in 3.0?
> >>>
> >>>Michael Neale wrote:
> >>>
> >>>>Short answer, not easily with Drools 2. But yes, with Drools 3.
> >>>>
> >>>>On 3/22/06, Juergen <[hidden email]> wrote:
> >>>>
> >>>>
> >>>>>I recently looked into drools after experimenting with JESS and got a
> >>>>>few questions I could not look up in the drools documentation:
> >>>>>
> >>>>>- Exists a condition to test for non-existence of a matching
> >>>>>object/fact?
> >>>>>-- If yes, how to use it for own domain specific language conditions
> >>>>>
> >>>>>- How is sharing of conditions/nodes between productions implemented
> >>
> >>in
> >>
> >>>>>drools, one of the main benefits of the rete algorithm?
> >>>>>-- How is the equality of conditions defined for java smf? via
> textual
> >>>>>equality of the condition's java code?
> >>>>>-- How can equality of conditions for sharing be defined for domain
> >>>>>specific language conditions?
> >>>>>e.g. Conway's game of life (slightly modified dsl)
> >>>>><rule name="kill the overcrowded">
> >>>>>       <conway:cellIsAlive cellName="cell"/>
> >>>>>       <conway:cellIsOverCrowded cellName="cell"/>
> >>>>>       <conway:killCell cellName="cell"/>
> >>>>></rule>
> >>>>><rule name="kill the lonely">
> >>>>>       <conway:cellIsAlive cellName="cell"/>
> >>>>>       <conway:cellIsLonely cellName="cell"/>
> >>>>>       <conway:killCell cellName="cell"/>
> >>>>></rule>
> >>>>>
> >>>>>The conway:cellIsAlive condition could be shared between these two
> >>>>>productions. Would it?
> >>>>>
> >>>>>- When will the properties map be supported in drools implementation
> >>
> >>of
> >>
> >>>>>JSR 94 javax.rules API?
> >>>>>-- e.g. to be able to set conflict resolver of a rule base and other
> >>>>>settings that can be set via drools native API
> >>>>>
> >>>>>- Can object equality for assertion be customized?
> >>>>>-- Currently, org.drools.util.IdentityMap
> >>>>>(org.drools.reteoo.WorkingMemoryImpl) makes use of
> >>>>>System.identityHashCode(). There seems to be no way to customize
> that,
> >>>>>e.g. make drools use equals() instead, neither via native nor JSR 94
> >>>>>API.
> >>>>>
> >>>>>My apologies if some questions have already been answered in other
> >>>>>postings, I made no thorough search in this newsgroup yet.
> >>>>>
> >>>>>Thanks a lot, Juergen
>
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Drools 3, object equality in assert

work_registries
Quick'n dirty I could make drools 3 do it the way I would prefer - in
the context of my current problem and datastructures involved - by
modifying:

org.drools.reteoo.WorkingMemoryImpl, line 95f (rev. 3509):
replace:
     /** Object-to-handle mapping. */
     private Map                       identityMap
              = new IdentityMap();

by:
     /** Object-to-handle mapping. */
     private Map                       identityMap
              = new java.util.HashMap();

(not considering side effects, identityMap type cast problems, ...)

Then org.drools.reteoo.WorkingMemoryImpl, assertObject (line 422, rev.
3509):
FactHandleImpl handle = (FactHandleImpl) this.identityMap.get( object );

would return first "A"s handle when the second "A" is asserted, refering
to the example in my former posting.

I expected some way to customize the behaviour of the working memory,
basically by choosing between either of the Maps.

But as mentioned, such behaviour might not be desirable by others (they
probably want "A" being asserted twice and handled as two different
objects) and even if not customizable in drools itself, it can most
likely be done by wrapping assertObject and managing your own
object-to-handle map plus taking care not to use assert directly in RHS.

I first wrongly thought logical assertions had something to do with
this, but I guess that relates more to the 'logical' conditional element
in jess and logical dependencies among facts.

Michael Neale wrote:

> what is your expectations on how it should work? (everyone has different
> ideas it seems !)
>
> On 4/10/06, Juergen <[hidden email]> wrote:
>
>>I mean
>>
>>workingMemory.assertObject(new String("A"));
>>workingMemory.assertObject(new String("A"));
>>
>>would currently assert both strings into working memory, whereas if it
>>would check not for identityHashCode but with equals, the second assert
>>would have no effect.
>>
>>When during experimentation with rule engines I switched from jess
>>(where it is done with equals I think) to drools 2 I first experienced
>>problems due to this differences (also did not find much in both engines
>>docu), leading to my question if I could customize drools behaviour.
>>
>>As one can always write a wrapper for drools assertObject to make such
>>checks, and lots of other users probably dont need, my request is not
>>important.
>>
>>Juergen
>>
>>
>>Michael Neale wrote:
>>
>>>so you mean
>>>p1 : Person()
>>>p2 : Person()
>>>eval ( p1.equals(p2) )
>>>
>>>(but presumably a shorthand form?)
>>>
>>>
>>>
>>>On 4/8/06, Mark Proctor <[hidden email]> wrote:
>>>
>>>
>>>>We hadn't planned it, not promising  anything - but  I'll see how things
>>>>pan out, may be we will get time.
>>>>
>>>>Mark
>>>>Juergen wrote:
>>>>
>>>>
>>>>>ad. Can object equality for assertion be customized?
>>>>>Drools 3 still seems to use IdentityMap with System.identityHashCode().
>>>>>Is it planned to be customizeable e.g. with equals() in 3.0?
>>>>>
>>>>>Michael Neale wrote:
>>>>>
>>>>>
>>>>>>Short answer, not easily with Drools 2. But yes, with Drools 3.
>>>>>>
>>>>>>On 3/22/06, Juergen <[hidden email]> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>I recently looked into drools after experimenting with JESS and got a
>>>>>>>few questions I could not look up in the drools documentation:
>>>>>>>
>>>>>>>- Exists a condition to test for non-existence of a matching
>>>>>>>object/fact?
>>>>>>>-- If yes, how to use it for own domain specific language conditions
>>>>>>>
>>>>>>>- How is sharing of conditions/nodes between productions implemented
>>>>
>>>>in
>>>>
>>>>
>>>>>>>drools, one of the main benefits of the rete algorithm?
>>>>>>>-- How is the equality of conditions defined for java smf? via
>>
>>textual
>>
>>>>>>>equality of the condition's java code?
>>>>>>>-- How can equality of conditions for sharing be defined for domain
>>>>>>>specific language conditions?
>>>>>>>e.g. Conway's game of life (slightly modified dsl)
>>>>>>><rule name="kill the overcrowded">
>>>>>>>      <conway:cellIsAlive cellName="cell"/>
>>>>>>>      <conway:cellIsOverCrowded cellName="cell"/>
>>>>>>>      <conway:killCell cellName="cell"/>
>>>>>>></rule>
>>>>>>><rule name="kill the lonely">
>>>>>>>      <conway:cellIsAlive cellName="cell"/>
>>>>>>>      <conway:cellIsLonely cellName="cell"/>
>>>>>>>      <conway:killCell cellName="cell"/>
>>>>>>></rule>
>>>>>>>
>>>>>>>The conway:cellIsAlive condition could be shared between these two
>>>>>>>productions. Would it?
>>>>>>>
>>>>>>>- When will the properties map be supported in drools implementation
>>>>
>>>>of
>>>>
>>>>
>>>>>>>JSR 94 javax.rules API?
>>>>>>>-- e.g. to be able to set conflict resolver of a rule base and other
>>>>>>>settings that can be set via drools native API
>>>>>>>
>>>>>>>- Can object equality for assertion be customized?
>>>>>>>-- Currently, org.drools.util.IdentityMap
>>>>>>>(org.drools.reteoo.WorkingMemoryImpl) makes use of
>>>>>>>System.identityHashCode(). There seems to be no way to customize
>>
>>that,
>>
>>>>>>>e.g. make drools use equals() instead, neither via native nor JSR 94
>>>>>>>API.
>>>>>>>
>>>>>>>My apologies if some questions have already been answered in other
>>>>>>>postings, I made no thorough search in this newsgroup yet.
>>>>>>>
>>>>>>>Thanks a lot, Juergen

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

Re: Drools 3, object equality in assert

Michael Neale
if there is enough demand for it, we may be able to make it some working
memory wide configuration option - certainly. Submit a JIRA request if you
like, may come in handy (certainly will for you). But not as the default, as
not everyone implements equals() correctly !

On 4/11/06, Juergen <[hidden email]> wrote:

>
> Quick'n dirty I could make drools 3 do it the way I would prefer - in
> the context of my current problem and datastructures involved - by
> modifying:
>
> org.drools.reteoo.WorkingMemoryImpl, line 95f (rev. 3509):
> replace:
>      /** Object-to-handle mapping. */
>      private Map                       identityMap
>               = new IdentityMap();
>
> by:
>      /** Object-to-handle mapping. */
>      private Map                       identityMap
>               = new java.util.HashMap();
>
> (not considering side effects, identityMap type cast problems, ...)
>
> Then org.drools.reteoo.WorkingMemoryImpl, assertObject (line 422, rev.
> 3509):
> FactHandleImpl handle = (FactHandleImpl) this.identityMap.get( object );
>
> would return first "A"s handle when the second "A" is asserted, refering
> to the example in my former posting.
>
> I expected some way to customize the behaviour of the working memory,
> basically by choosing between either of the Maps.
>
> But as mentioned, such behaviour might not be desirable by others (they
> probably want "A" being asserted twice and handled as two different
> objects) and even if not customizable in drools itself, it can most
> likely be done by wrapping assertObject and managing your own
> object-to-handle map plus taking care not to use assert directly in RHS.
>
> I first wrongly thought logical assertions had something to do with
> this, but I guess that relates more to the 'logical' conditional element
> in jess and logical dependencies among facts.
>
> Michael Neale wrote:
> > what is your expectations on how it should work? (everyone has different
> > ideas it seems !)
> >
> > On 4/10/06, Juergen <[hidden email]> wrote:
> >
> >>I mean
> >>
> >>workingMemory.assertObject(new String("A"));
> >>workingMemory.assertObject(new String("A"));
> >>
> >>would currently assert both strings into working memory, whereas if it
> >>would check not for identityHashCode but with equals, the second assert
> >>would have no effect.
> >>
> >>When during experimentation with rule engines I switched from jess
> >>(where it is done with equals I think) to drools 2 I first experienced
> >>problems due to this differences (also did not find much in both engines
> >>docu), leading to my question if I could customize drools behaviour.
> >>
> >>As one can always write a wrapper for drools assertObject to make such
> >>checks, and lots of other users probably dont need, my request is not
> >>important.
> >>
> >>Juergen
> >>
> >>
> >>Michael Neale wrote:
> >>
> >>>so you mean
> >>>p1 : Person()
> >>>p2 : Person()
> >>>eval ( p1.equals(p2) )
> >>>
> >>>(but presumably a shorthand form?)
> >>>
> >>>
> >>>
> >>>On 4/8/06, Mark Proctor <[hidden email]> wrote:
> >>>
> >>>
> >>>>We hadn't planned it, not promising  anything - but  I'll see how
> things
> >>>>pan out, may be we will get time.
> >>>>
> >>>>Mark
> >>>>Juergen wrote:
> >>>>
> >>>>
> >>>>>ad. Can object equality for assertion be customized?
> >>>>>Drools 3 still seems to use IdentityMap with System.identityHashCode
> ().
> >>>>>Is it planned to be customizeable e.g. with equals() in 3.0?
> >>>>>
> >>>>>Michael Neale wrote:
> >>>>>
> >>>>>
> >>>>>>Short answer, not easily with Drools 2. But yes, with Drools 3.
> >>>>>>
> >>>>>>On 3/22/06, Juergen <[hidden email]> wrote:
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>I recently looked into drools after experimenting with JESS and got
> a
> >>>>>>>few questions I could not look up in the drools documentation:
> >>>>>>>
> >>>>>>>- Exists a condition to test for non-existence of a matching
> >>>>>>>object/fact?
> >>>>>>>-- If yes, how to use it for own domain specific language
> conditions
> >>>>>>>
> >>>>>>>- How is sharing of conditions/nodes between productions
> implemented
> >>>>
> >>>>in
> >>>>
> >>>>
> >>>>>>>drools, one of the main benefits of the rete algorithm?
> >>>>>>>-- How is the equality of conditions defined for java smf? via
> >>
> >>textual
> >>
> >>>>>>>equality of the condition's java code?
> >>>>>>>-- How can equality of conditions for sharing be defined for domain
> >>>>>>>specific language conditions?
> >>>>>>>e.g. Conway's game of life (slightly modified dsl)
> >>>>>>><rule name="kill the overcrowded">
> >>>>>>>      <conway:cellIsAlive cellName="cell"/>
> >>>>>>>      <conway:cellIsOverCrowded cellName="cell"/>
> >>>>>>>      <conway:killCell cellName="cell"/>
> >>>>>>></rule>
> >>>>>>><rule name="kill the lonely">
> >>>>>>>      <conway:cellIsAlive cellName="cell"/>
> >>>>>>>      <conway:cellIsLonely cellName="cell"/>
> >>>>>>>      <conway:killCell cellName="cell"/>
> >>>>>>></rule>
> >>>>>>>
> >>>>>>>The conway:cellIsAlive condition could be shared between these two
> >>>>>>>productions. Would it?
> >>>>>>>
> >>>>>>>- When will the properties map be supported in drools
> implementation
> >>>>
> >>>>of
> >>>>
> >>>>
> >>>>>>>JSR 94 javax.rules API?
> >>>>>>>-- e.g. to be able to set conflict resolver of a rule base and
> other
> >>>>>>>settings that can be set via drools native API
> >>>>>>>
> >>>>>>>- Can object equality for assertion be customized?
> >>>>>>>-- Currently, org.drools.util.IdentityMap
> >>>>>>>(org.drools.reteoo.WorkingMemoryImpl) makes use of
> >>>>>>>System.identityHashCode(). There seems to be no way to customize
> >>
> >>that,
> >>
> >>>>>>>e.g. make drools use equals() instead, neither via native nor JSR
> 94
> >>>>>>>API.
> >>>>>>>
> >>>>>>>My apologies if some questions have already been answered in other
> >>>>>>>postings, I made no thorough search in this newsgroup yet.
> >>>>>>>
> >>>>>>>Thanks a lot, Juergen
>
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Drools 3, RHS special names, indirect assert

work_registries
Questions on assert in RHS:

1) is it the same to call "special" assert() in RHS vs. indirectly
calling JSR 94 Rule session method addObject() (or
WorkingMemory.assert()) in RHS? would the latter way of asserting
interfere with the active rule execution?

rule "A"
        when ...
        then
                assert(new String("A"))
                someMethodCallsThisEnginesWorkingMemoryAssert(new String("B"))
                someMethodCallsThisEnginesJSR94SessionAddObject(new String("C"))
end


2) what other special names/objects/methods do exist, that can be used
in a RHS code block (like special drools object in drools 2.5)? Haven't
found much on that in current docu.

My questions relate to the idea to wrapping assert with code to check
for equality.

Michael Neale wrote:

> if there is enough demand for it, we may be able to make it some working
> memory wide configuration option - certainly. Submit a JIRA request if you
> like, may come in handy (certainly will for you). But not as the default, as
> not everyone implements equals() correctly !
>
> On 4/11/06, Juergen <[hidden email]> wrote:
>
>>Quick'n dirty I could make drools 3 do it the way I would prefer - in
>>the context of my current problem and datastructures involved - by
>>modifying:
>>
>>org.drools.reteoo.WorkingMemoryImpl, line 95f (rev. 3509):
>>replace:
>>     /** Object-to-handle mapping. */
>>     private Map                       identityMap
>>              = new IdentityMap();
>>
>>by:
>>     /** Object-to-handle mapping. */
>>     private Map                       identityMap
>>              = new java.util.HashMap();
>>
>>(not considering side effects, identityMap type cast problems, ...)
>>
>>Then org.drools.reteoo.WorkingMemoryImpl, assertObject (line 422, rev.
>>3509):
>>FactHandleImpl handle = (FactHandleImpl) this.identityMap.get( object );
>>
>>would return first "A"s handle when the second "A" is asserted, refering
>>to the example in my former posting.
>>
>>I expected some way to customize the behaviour of the working memory,
>>basically by choosing between either of the Maps.
>>
>>But as mentioned, such behaviour might not be desirable by others (they
>>probably want "A" being asserted twice and handled as two different
>>objects) and even if not customizable in drools itself, it can most
>>likely be done by wrapping assertObject and managing your own
>>object-to-handle map plus taking care not to use assert directly in RHS.
>>
>>I first wrongly thought logical assertions had something to do with
>>this, but I guess that relates more to the 'logical' conditional element
>>in jess and logical dependencies among facts.
>>
>>Michael Neale wrote:
>>
>>>what is your expectations on how it should work? (everyone has different
>>>ideas it seems !)
>>>
>>>On 4/10/06, Juergen <[hidden email]> wrote:
>>>
>>>
>>>>I mean
>>>>
>>>>workingMemory.assertObject(new String("A"));
>>>>workingMemory.assertObject(new String("A"));
>>>>
>>>>would currently assert both strings into working memory, whereas if it
>>>>would check not for identityHashCode but with equals, the second assert
>>>>would have no effect.
>>>>
>>>>When during experimentation with rule engines I switched from jess
>>>>(where it is done with equals I think) to drools 2 I first experienced
>>>>problems due to this differences (also did not find much in both engines
>>>>docu), leading to my question if I could customize drools behaviour.
>>>>
>>>>As one can always write a wrapper for drools assertObject to make such
>>>>checks, and lots of other users probably dont need, my request is not
>>>>important.
>>>>
>>>>Juergen
>>>>
>>>>
>>>>Michael Neale wrote:
>>>>
>>>>
>>>>>so you mean
>>>>>p1 : Person()
>>>>>p2 : Person()
>>>>>eval ( p1.equals(p2) )
>>>>>
>>>>>(but presumably a shorthand form?)
>>>>>
>>>>>
>>>>>
>>>>>On 4/8/06, Mark Proctor <[hidden email]> wrote:
>>>>>
>>>>>
>>>>>
>>>>>>We hadn't planned it, not promising  anything - but  I'll see how
>>
>>things
>>
>>>>>>pan out, may be we will get time.
>>>>>>
>>>>>>Mark
>>>>>>Juergen wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>ad. Can object equality for assertion be customized?
>>>>>>>Drools 3 still seems to use IdentityMap with System.identityHashCode
>>
>>().
>>
>>>>>>>Is it planned to be customizeable e.g. with equals() in 3.0?
>>>>>>>
>>>>>>>Michael Neale wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>Short answer, not easily with Drools 2. But yes, with Drools 3.
>>>>>>>>
>>>>>>>>On 3/22/06, Juergen <[hidden email]> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>I recently looked into drools after experimenting with JESS and got
>>
>>a
>>
>>>>>>>>>few questions I could not look up in the drools documentation:
>>>>>>>>>
>>>>>>>>>- Exists a condition to test for non-existence of a matching
>>>>>>>>>object/fact?
>>>>>>>>>-- If yes, how to use it for own domain specific language
>>
>>conditions
>>
>>>>>>>>>- How is sharing of conditions/nodes between productions
>>
>>implemented
>>
>>>>>>in
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>>drools, one of the main benefits of the rete algorithm?
>>>>>>>>>-- How is the equality of conditions defined for java smf? via
>>>>
>>>>textual
>>>>
>>>>
>>>>>>>>>equality of the condition's java code?
>>>>>>>>>-- How can equality of conditions for sharing be defined for domain
>>>>>>>>>specific language conditions?
>>>>>>>>>e.g. Conway's game of life (slightly modified dsl)
>>>>>>>>><rule name="kill the overcrowded">
>>>>>>>>>     <conway:cellIsAlive cellName="cell"/>
>>>>>>>>>     <conway:cellIsOverCrowded cellName="cell"/>
>>>>>>>>>     <conway:killCell cellName="cell"/>
>>>>>>>>></rule>
>>>>>>>>><rule name="kill the lonely">
>>>>>>>>>     <conway:cellIsAlive cellName="cell"/>
>>>>>>>>>     <conway:cellIsLonely cellName="cell"/>
>>>>>>>>>     <conway:killCell cellName="cell"/>
>>>>>>>>></rule>
>>>>>>>>>
>>>>>>>>>The conway:cellIsAlive condition could be shared between these two
>>>>>>>>>productions. Would it?
>>>>>>>>>
>>>>>>>>>- When will the properties map be supported in drools
>>
>>implementation
>>
>>>>>>of
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>>JSR 94 javax.rules API?
>>>>>>>>>-- e.g. to be able to set conflict resolver of a rule base and
>>
>>other
>>
>>>>>>>>>settings that can be set via drools native API
>>>>>>>>>
>>>>>>>>>- Can object equality for assertion be customized?
>>>>>>>>>-- Currently, org.drools.util.IdentityMap
>>>>>>>>>(org.drools.reteoo.WorkingMemoryImpl) makes use of
>>>>>>>>>System.identityHashCode(). There seems to be no way to customize
>>>>
>>>>that,
>>>>
>>>>
>>>>>>>>>e.g. make drools use equals() instead, neither via native nor JSR
>>
>>94
>>
>>>>>>>>>API.
>>>>>>>>>
>>>>>>>>>My apologies if some questions have already been answered in other
>>>>>>>>>postings, I made no thorough search in this newsgroup yet.
>>>>>>>>>
>>>>>>>>>Thanks a lot, Juergen

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

Re: Drools 3, RHS special names, indirect assert

Mark Proctor
Assert is just replaced  with workingMemory.assertOjbect ( object )
anyway. It's just a bit of regexp we apply to make things easier for users.

BTW this is what mandarax has to say about JSR94:
A: Mandarax does not (yet) support JSR-94
<http://www.jcp.org/jsr/detail/094.jsp>. The reason is that this
proposal is so general that it is almost useless. We are monitoring the
JSR-94 efforts, and perhaps add support later.

We support JSR94, but my feelings are just the same - just say NO! :)

Mark

Juergen wrote:

> Questions on assert in RHS:
>
> 1) is it the same to call "special" assert() in RHS vs. indirectly
> calling JSR 94 Rule session method addObject() (or
> WorkingMemory.assert()) in RHS? would the latter way of asserting
> interfere with the active rule execution?
>
> rule "A"
>     when ...
>     then
>         assert(new String("A"))
>         someMethodCallsThisEnginesWorkingMemoryAssert(new String("B"))
>         someMethodCallsThisEnginesJSR94SessionAddObject(new String("C"))
> end
>
>
> 2) what other special names/objects/methods do exist, that can be used
> in a RHS code block (like special drools object in drools 2.5)?
> Haven't found much on that in current docu.
>
> My questions relate to the idea to wrapping assert with code to check
> for equality.
>
> Michael Neale wrote:
>> if there is enough demand for it, we may be able to make it some working
>> memory wide configuration option - certainly. Submit a JIRA request
>> if you
>> like, may come in handy (certainly will for you). But not as the
>> default, as
>> not everyone implements equals() correctly !
>>
>> On 4/11/06, Juergen <[hidden email]> wrote:
>>
>>> Quick'n dirty I could make drools 3 do it the way I would prefer - in
>>> the context of my current problem and datastructures involved - by
>>> modifying:
>>>
>>> org.drools.reteoo.WorkingMemoryImpl, line 95f (rev. 3509):
>>> replace:
>>>     /** Object-to-handle mapping. */
>>>     private Map                       identityMap
>>>              = new IdentityMap();
>>>
>>> by:
>>>     /** Object-to-handle mapping. */
>>>     private Map                       identityMap
>>>              = new java.util.HashMap();
>>>
>>> (not considering side effects, identityMap type cast problems, ...)
>>>
>>> Then org.drools.reteoo.WorkingMemoryImpl, assertObject (line 422, rev.
>>> 3509):
>>> FactHandleImpl handle = (FactHandleImpl) this.identityMap.get(
>>> object );
>>>
>>> would return first "A"s handle when the second "A" is asserted,
>>> refering
>>> to the example in my former posting.
>>>
>>> I expected some way to customize the behaviour of the working memory,
>>> basically by choosing between either of the Maps.
>>>
>>> But as mentioned, such behaviour might not be desirable by others (they
>>> probably want "A" being asserted twice and handled as two different
>>> objects) and even if not customizable in drools itself, it can most
>>> likely be done by wrapping assertObject and managing your own
>>> object-to-handle map plus taking care not to use assert directly in
>>> RHS.
>>>
>>> I first wrongly thought logical assertions had something to do with
>>> this, but I guess that relates more to the 'logical' conditional
>>> element
>>> in jess and logical dependencies among facts.
>>>
>>> Michael Neale wrote:
>>>
>>>> what is your expectations on how it should work? (everyone has
>>>> different
>>>> ideas it seems !)
>>>>
>>>> On 4/10/06, Juergen <[hidden email]> wrote:
>>>>
>>>>
>>>>> I mean
>>>>>
>>>>> workingMemory.assertObject(new String("A"));
>>>>> workingMemory.assertObject(new String("A"));
>>>>>
>>>>> would currently assert both strings into working memory, whereas
>>>>> if it
>>>>> would check not for identityHashCode but with equals, the second
>>>>> assert
>>>>> would have no effect.
>>>>>
>>>>> When during experimentation with rule engines I switched from jess
>>>>> (where it is done with equals I think) to drools 2 I first
>>>>> experienced
>>>>> problems due to this differences (also did not find much in both
>>>>> engines
>>>>> docu), leading to my question if I could customize drools behaviour.
>>>>>
>>>>> As one can always write a wrapper for drools assertObject to make
>>>>> such
>>>>> checks, and lots of other users probably dont need, my request is not
>>>>> important.
>>>>>
>>>>> Juergen
>>>>>
>>>>>
>>>>> Michael Neale wrote:
>>>>>
>>>>>
>>>>>> so you mean
>>>>>> p1 : Person()
>>>>>> p2 : Person()
>>>>>> eval ( p1.equals(p2) )
>>>>>>
>>>>>> (but presumably a shorthand form?)
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 4/8/06, Mark Proctor <[hidden email]> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>> We hadn't planned it, not promising  anything - but  I'll see how
>>>
>>> things
>>>
>>>>>>> pan out, may be we will get time.
>>>>>>>
>>>>>>> Mark
>>>>>>> Juergen wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> ad. Can object equality for assertion be customized?
>>>>>>>> Drools 3 still seems to use IdentityMap with
>>>>>>>> System.identityHashCode
>>>
>>> ().
>>>
>>>>>>>> Is it planned to be customizeable e.g. with equals() in 3.0?
>>>>>>>>
>>>>>>>> Michael Neale wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Short answer, not easily with Drools 2. But yes, with Drools 3.
>>>>>>>>>
>>>>>>>>> On 3/22/06, Juergen <[hidden email]> wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> I recently looked into drools after experimenting with JESS
>>>>>>>>>> and got
>>>
>>> a
>>>
>>>>>>>>>> few questions I could not look up in the drools documentation:
>>>>>>>>>>
>>>>>>>>>> - Exists a condition to test for non-existence of a matching
>>>>>>>>>> object/fact?
>>>>>>>>>> -- If yes, how to use it for own domain specific language
>>>
>>> conditions
>>>
>>>>>>>>>> - How is sharing of conditions/nodes between productions
>>>
>>> implemented
>>>
>>>>>>> in
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>>> drools, one of the main benefits of the rete algorithm?
>>>>>>>>>> -- How is the equality of conditions defined for java smf? via
>>>>>
>>>>> textual
>>>>>
>>>>>
>>>>>>>>>> equality of the condition's java code?
>>>>>>>>>> -- How can equality of conditions for sharing be defined for
>>>>>>>>>> domain
>>>>>>>>>> specific language conditions?
>>>>>>>>>> e.g. Conway's game of life (slightly modified dsl)
>>>>>>>>>> <rule name="kill the overcrowded">
>>>>>>>>>>     <conway:cellIsAlive cellName="cell"/>
>>>>>>>>>>     <conway:cellIsOverCrowded cellName="cell"/>
>>>>>>>>>>     <conway:killCell cellName="cell"/>
>>>>>>>>>> </rule>
>>>>>>>>>> <rule name="kill the lonely">
>>>>>>>>>>     <conway:cellIsAlive cellName="cell"/>
>>>>>>>>>>     <conway:cellIsLonely cellName="cell"/>
>>>>>>>>>>     <conway:killCell cellName="cell"/>
>>>>>>>>>> </rule>
>>>>>>>>>>
>>>>>>>>>> The conway:cellIsAlive condition could be shared between
>>>>>>>>>> these two
>>>>>>>>>> productions. Would it?
>>>>>>>>>>
>>>>>>>>>> - When will the properties map be supported in drools
>>>
>>> implementation
>>>
>>>>>>> of
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>>> JSR 94 javax.rules API?
>>>>>>>>>> -- e.g. to be able to set conflict resolver of a rule base and
>>>
>>> other
>>>
>>>>>>>>>> settings that can be set via drools native API
>>>>>>>>>>
>>>>>>>>>> - Can object equality for assertion be customized?
>>>>>>>>>> -- Currently, org.drools.util.IdentityMap
>>>>>>>>>> (org.drools.reteoo.WorkingMemoryImpl) makes use of
>>>>>>>>>> System.identityHashCode(). There seems to be no way to customize
>>>>>
>>>>> that,
>>>>>
>>>>>
>>>>>>>>>> e.g. make drools use equals() instead, neither via native nor
>>>>>>>>>> JSR
>>>
>>> 94
>>>
>>>>>>>>>> API.
>>>>>>>>>>
>>>>>>>>>> My apologies if some questions have already been answered in
>>>>>>>>>> other
>>>>>>>>>> postings, I made no thorough search in this newsgroup yet.
>>>>>>>>>>
>>>>>>>>>> Thanks a lot, Juergen
>
>
>

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

Re: Drools 3, RHS special names, indirect assert

Michael Neale
Jurgen, want to take this to the dev list? As I know what you are trying to
do, we should discuss there and come up with a design (without filling the
inbox of the user list subscribers !).

Cheers,

Michael.

On 4/14/06, Mark Proctor <[hidden email]> wrote:

>
> Assert is just replaced  with workingMemory.assertOjbect ( object )
> anyway. It's just a bit of regexp we apply to make things easier for
> users.
>
> BTW this is what mandarax has to say about JSR94:
> A: Mandarax does not (yet) support JSR-94
> <http://www.jcp.org/jsr/detail/094.jsp>. The reason is that this
> proposal is so general that it is almost useless. We are monitoring the
> JSR-94 efforts, and perhaps add support later.
>
> We support JSR94, but my feelings are just the same - just say NO! :)
>
> Mark
>
> Juergen wrote:
> > Questions on assert in RHS:
> >
> > 1) is it the same to call "special" assert() in RHS vs. indirectly
> > calling JSR 94 Rule session method addObject() (or
> > WorkingMemory.assert()) in RHS? would the latter way of asserting
> > interfere with the active rule execution?
> >
> > rule "A"
> >     when ...
> >     then
> >         assert(new String("A"))
> >         someMethodCallsThisEnginesWorkingMemoryAssert(new String("B"))
> >         someMethodCallsThisEnginesJSR94SessionAddObject(new String("C"))
> > end
> >
> >
> > 2) what other special names/objects/methods do exist, that can be used
> > in a RHS code block (like special drools object in drools 2.5)?
> > Haven't found much on that in current docu.
> >
> > My questions relate to the idea to wrapping assert with code to check
> > for equality.
> >
> > Michael Neale wrote:
> >> if there is enough demand for it, we may be able to make it some
> working
> >> memory wide configuration option - certainly. Submit a JIRA request
> >> if you
> >> like, may come in handy (certainly will for you). But not as the
> >> default, as
> >> not everyone implements equals() correctly !
> >>
> >> On 4/11/06, Juergen <[hidden email]> wrote:
> >>
> >>> Quick'n dirty I could make drools 3 do it the way I would prefer - in
> >>> the context of my current problem and datastructures involved - by
> >>> modifying:
> >>>
> >>> org.drools.reteoo.WorkingMemoryImpl, line 95f (rev. 3509):
> >>> replace:
> >>>     /** Object-to-handle mapping. */
> >>>     private Map                       identityMap
> >>>              = new IdentityMap();
> >>>
> >>> by:
> >>>     /** Object-to-handle mapping. */
> >>>     private Map                       identityMap
> >>>              = new java.util.HashMap();
> >>>
> >>> (not considering side effects, identityMap type cast problems, ...)
> >>>
> >>> Then org.drools.reteoo.WorkingMemoryImpl, assertObject (line 422, rev.
> >>> 3509):
> >>> FactHandleImpl handle = (FactHandleImpl) this.identityMap.get(
> >>> object );
> >>>
> >>> would return first "A"s handle when the second "A" is asserted,
> >>> refering
> >>> to the example in my former posting.
> >>>
> >>> I expected some way to customize the behaviour of the working memory,
> >>> basically by choosing between either of the Maps.
> >>>
> >>> But as mentioned, such behaviour might not be desirable by others
> (they
> >>> probably want "A" being asserted twice and handled as two different
> >>> objects) and even if not customizable in drools itself, it can most
> >>> likely be done by wrapping assertObject and managing your own
> >>> object-to-handle map plus taking care not to use assert directly in
> >>> RHS.
> >>>
> >>> I first wrongly thought logical assertions had something to do with
> >>> this, but I guess that relates more to the 'logical' conditional
> >>> element
> >>> in jess and logical dependencies among facts.
> >>>
> >>> Michael Neale wrote:
> >>>
> >>>> what is your expectations on how it should work? (everyone has
> >>>> different
> >>>> ideas it seems !)
> >>>>
> >>>> On 4/10/06, Juergen <[hidden email]> wrote:
> >>>>
> >>>>
> >>>>> I mean
> >>>>>
> >>>>> workingMemory.assertObject(new String("A"));
> >>>>> workingMemory.assertObject(new String("A"));
> >>>>>
> >>>>> would currently assert both strings into working memory, whereas
> >>>>> if it
> >>>>> would check not for identityHashCode but with equals, the second
> >>>>> assert
> >>>>> would have no effect.
> >>>>>
> >>>>> When during experimentation with rule engines I switched from jess
> >>>>> (where it is done with equals I think) to drools 2 I first
> >>>>> experienced
> >>>>> problems due to this differences (also did not find much in both
> >>>>> engines
> >>>>> docu), leading to my question if I could customize drools behaviour.
> >>>>>
> >>>>> As one can always write a wrapper for drools assertObject to make
> >>>>> such
> >>>>> checks, and lots of other users probably dont need, my request is
> not
> >>>>> important.
> >>>>>
> >>>>> Juergen
> >>>>>
> >>>>>
> >>>>> Michael Neale wrote:
> >>>>>
> >>>>>
> >>>>>> so you mean
> >>>>>> p1 : Person()
> >>>>>> p2 : Person()
> >>>>>> eval ( p1.equals(p2) )
> >>>>>>
> >>>>>> (but presumably a shorthand form?)
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> On 4/8/06, Mark Proctor <[hidden email]> wrote:
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>> We hadn't planned it, not promising  anything - but  I'll see how
> >>>
> >>> things
> >>>
> >>>>>>> pan out, may be we will get time.
> >>>>>>>
> >>>>>>> Mark
> >>>>>>> Juergen wrote:
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>> ad. Can object equality for assertion be customized?
> >>>>>>>> Drools 3 still seems to use IdentityMap with
> >>>>>>>> System.identityHashCode
> >>>
> >>> ().
> >>>
> >>>>>>>> Is it planned to be customizeable e.g. with equals() in 3.0?
> >>>>>>>>
> >>>>>>>> Michael Neale wrote:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>> Short answer, not easily with Drools 2. But yes, with Drools 3.
> >>>>>>>>>
> >>>>>>>>> On 3/22/06, Juergen <[hidden email]> wrote:
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>> I recently looked into drools after experimenting with JESS
> >>>>>>>>>> and got
> >>>
> >>> a
> >>>
> >>>>>>>>>> few questions I could not look up in the drools documentation:
> >>>>>>>>>>
> >>>>>>>>>> - Exists a condition to test for non-existence of a matching
> >>>>>>>>>> object/fact?
> >>>>>>>>>> -- If yes, how to use it for own domain specific language
> >>>
> >>> conditions
> >>>
> >>>>>>>>>> - How is sharing of conditions/nodes between productions
> >>>
> >>> implemented
> >>>
> >>>>>>> in
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>>>> drools, one of the main benefits of the rete algorithm?
> >>>>>>>>>> -- How is the equality of conditions defined for java smf? via
> >>>>>
> >>>>> textual
> >>>>>
> >>>>>
> >>>>>>>>>> equality of the condition's java code?
> >>>>>>>>>> -- How can equality of conditions for sharing be defined for
> >>>>>>>>>> domain
> >>>>>>>>>> specific language conditions?
> >>>>>>>>>> e.g. Conway's game of life (slightly modified dsl)
> >>>>>>>>>> <rule name="kill the overcrowded">
> >>>>>>>>>>     <conway:cellIsAlive cellName="cell"/>
> >>>>>>>>>>     <conway:cellIsOverCrowded cellName="cell"/>
> >>>>>>>>>>     <conway:killCell cellName="cell"/>
> >>>>>>>>>> </rule>
> >>>>>>>>>> <rule name="kill the lonely">
> >>>>>>>>>>     <conway:cellIsAlive cellName="cell"/>
> >>>>>>>>>>     <conway:cellIsLonely cellName="cell"/>
> >>>>>>>>>>     <conway:killCell cellName="cell"/>
> >>>>>>>>>> </rule>
> >>>>>>>>>>
> >>>>>>>>>> The conway:cellIsAlive condition could be shared between
> >>>>>>>>>> these two
> >>>>>>>>>> productions. Would it?
> >>>>>>>>>>
> >>>>>>>>>> - When will the properties map be supported in drools
> >>>
> >>> implementation
> >>>
> >>>>>>> of
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>>>> JSR 94 javax.rules API?
> >>>>>>>>>> -- e.g. to be able to set conflict resolver of a rule base and
> >>>
> >>> other
> >>>
> >>>>>>>>>> settings that can be set via drools native API
> >>>>>>>>>>
> >>>>>>>>>> - Can object equality for assertion be customized?
> >>>>>>>>>> -- Currently, org.drools.util.IdentityMap
> >>>>>>>>>> (org.drools.reteoo.WorkingMemoryImpl) makes use of
> >>>>>>>>>> System.identityHashCode(). There seems to be no way to
> customize
> >>>>>
> >>>>> that,
> >>>>>
> >>>>>
> >>>>>>>>>> e.g. make drools use equals() instead, neither via native nor
> >>>>>>>>>> JSR
> >>>
> >>> 94
> >>>
> >>>>>>>>>> API.
> >>>>>>>>>>
> >>>>>>>>>> My apologies if some questions have already been answered in
> >>>>>>>>>> other
> >>>>>>>>>> postings, I made no thorough search in this newsgroup yet.
> >>>>>>>>>>
> >>>>>>>>>> Thanks a lot, Juergen
> >
> >
> >
>
>
>
Loading...