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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 via email to