<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    On 24/09/2010 23:54, Mark Proctor wrote:
    <blockquote cite="mid:4C9D2C1D.3040301@codehaus.org" type="cite">
      <meta content="text/html; charset=ISO-8859-1"
        http-equiv="Content-Type">
      Work looks good, I've applied the patch.<br>
      <a moz-do-not-send="true" class="moz-txt-link-freetext"
        href="https://jira.jboss.org/browse/JBRULES-2709">https://jira.jboss.org/browse/JBRULES-2709</a><br>
    </blockquote>
    There was a small bug with this patch which broke during
    serialisation. ObjectTypeConfs are not marshalled, thus the
    isTmsEnabled state was being lost. It now re-determines that state
    during input marshalling.<br>
    <br>
    Mark<br>
    <blockquote cite="mid:4C9D2C1D.3040301@codehaus.org" type="cite"> <br>
      Mark<br>
      On 24/09/2010 23:28, Mark Proctor wrote:
      <blockquote cite="mid:4C9D2603.2090408@codehaus.org" type="cite">
        <meta content="text/html; charset=ISO-8859-1"
          http-equiv="Content-Type">
        <title></title>
        On 23/09/2010 13:44, Leonardo Gomes wrote:
        <blockquote
          cite="mid:AANLkTikuWLRUwW9U+go6-CmVguHaOaz_gc3=yT+2m0cP@mail.gmail.com"
          type="cite">Hi,<br>
          <br>
          I implemented the test cases you suggested, Mark, and started
          working on the counter. I discussed a bit with Edson yesterday
          and he clarified the difference between the counter for
          logically inserted facts and the fact id counter. This part
          seems to be fine, but I have a problem with the following
          scenario:<br>
          <br>
          After an initial activation of TMS I put everything in the
          equality map, then, due to retractions, the counter gets back
          to zero and I have to disable TMS for that specific type. When
          a new fact is logically inserted I have to look at the OTN
          memory and get everything that was inserted there since the
          last deactivation of TMS, to be be able to re-enable it. To do
          so I use the fact handle id that I'm supposed to have stored
          together with the counter. Fine.<br>
          <br>
          <b>Problem: </b>Since the OTN memory is an ObjectHashSet, I
          will have to iterate through it and filter (there's an
          ObjectFilter interface that I think I can implement) all the
          elements that have id greater than the one I stored. This will
          probably be inefficient and still likely to cause churn.<br>
          <br>
          <b>Possible solutions:</b><br>
          <br>
          1) Use a TreeMap? ** Don't think so, HashSet retrieval and
          insertion is O(1), on average, whereas TreeMap is O(log(n));<br>
          <br>
          2) Use a LinkedHashSet (probably a homegrown implementation on
          top of ObjectHashSet)? ** Would allow me to get the
          ObjectEntry I want and then call getNext() up to the end,
          inserting all of them in the equality map;<br>
          <br>
          3) Never disable TMS for a given type once it has been
          enabled? ** I think that lazily enabling TMS per type might be
          already enough an optimization, in a sense that the overhead
          with the calculation of the delta and all this logic to
          disable/re-enable might not be worthy. Moreover, switching
          from HashSet to LinkedHashSet may have some disadvantages.<br>
        </blockquote>
        Lets get it working with just lazy enabling to begin with, so
        for now it can't be disabled once enabled. Once that is working
        we can look into how we can make it disable and decide if it's
        worth doing or not.<br>
        <br>
        Mark<br>
        <blockquote
          cite="mid:AANLkTikuWLRUwW9U+go6-CmVguHaOaz_gc3=yT+2m0cP@mail.gmail.com"
          type="cite"><br>
          What do you think?<br>
          <br>
          Cheers,<br>
          Leo.<br>
          <br>
          <br>
          <div class="gmail_quote">On Tue, Sep 21, 2010 at 12:09 AM,
            Mark Proctor <span dir="ltr">&lt;<a moz-do-not-send="true"
                href="mailto:mproctor@codehaus.org">mproctor@codehaus.org</a>&gt;</span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
              0.8ex; border-left: 1px solid rgb(204, 204, 204);
              padding-left: 1ex;">
              <div bgcolor="#ffffff" text="#000000">
                <div class="im"> On 20/09/2010 21:58, Leonardo Gomes
                  wrote:
                  <blockquote type="cite">Ok, it took me much longer
                    that I had thought, but I think it's working now..
                    all tests passing except for ReteooWorkingMemoryTest
                    that does:<br>
                    <br>
                    <blockquote style="margin: 0pt 0pt 0pt 0.8ex;
                      border-left: 1px solid rgb(204, 204, 204);
                      padding-left: 1ex;" class="gmail_quote"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                      FactHandle fd = workingMemory.insert( string );<br>
                      <br>
                      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assertEquals( 1,<br>
                      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tms.getAssertMap().size() );<br>
                    </blockquote>
                    <div><br>
                      Which is a good sign, since tms is now empty as
                      long as you haven't done any logical insert :)<br>
                      <br>
                      I implemented just the first part of your
                      suggestion, with a boolean. I will try to
                      implement the solution with the counter later this
                      week and maybe do some adjustments before
                      submitting a patch.<br>
                      <br>
                      Do you have any suggestion in terms of unit tests
                      that you would like to see or just the apparent
                      lack of regressions is enough? Well, I can also
                      think of some tests by taking
                      ReteooWorkingMemoryTest as an example, in case you
                      don't have anything particular in mind.<br>
                    </div>
                  </blockquote>
                </div>
                When you do some insertions cast to get some of the
                internal data structures and check the equality map is
                null, maybe check the OT confs are false, do a logical
                insertion check it can turn on for specific OTNs and not
                all and that it correctly adds all objects for the OTN.
                This will be important for the next stage of the work.<br>
                <font color="#888888"> <br>
                  Mark</font>
                <div>
                  <div class="h5"><br>
                    <blockquote type="cite">
                      <div> <br>
                        Cheers,<br>
                        Leo.<br>
                        <br>
                        &nbsp;<br>
                      </div>
                      <br>
                      <br>
                      <div class="gmail_quote">On Mon, Sep 20, 2010 at
                        5:14 PM, Mark Proctor <span dir="ltr">&lt;<a
                            moz-do-not-send="true"
                            href="mailto:mproctor@codehaus.org"
                            target="_blank">mproctor@codehaus.org</a>&gt;</span>
                        wrote:<br>
                        <blockquote class="gmail_quote" style="margin:
                          0pt 0pt 0pt 0.8ex; border-left: 1px solid
                          rgb(204, 204, 204); padding-left: 1ex;">
                          <div bgcolor="#ffffff" text="#000000">
                            <div> On 20/09/2010 15:53, Leonardo Gomes
                              wrote:
                              <blockquote type="cite">I think I wasn't
                                quite clear in my last email, so let me
                                try to reformulate it:<br>
                                <br>
                                I also gave it a try to try to do what
                                you suggested here (<a
                                  moz-do-not-send="true"
href="http://blog.athico.com/2010/09/lazily-enabled-truth-maintenace.html"
                                  target="_blank">http://blog.athico.com/2010/09/lazily-enabled-truth-maintenace.html</a>),




                                Mark, and couldn't&nbsp; make it work due to
                                the following situation:<br>
                                <br>
                                1) Current code seems to rely on the
                                equality map to know that a logical
                                insert (insertLogical) for an object
                                that has already been regularly inserted
                                (insert) should be ignored;<br>
                              </blockquote>
                            </div>
                            You would need to lazily maintain an
                            equality map. When the first logical
                            insertion is done we will have to first
                            populate that map from the Object Type Node
                            set of FactHandles.<br>
                            In the "insert" one of the first lines is:<br>
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjectTypeConf typeConf =
                            this.typeConfReg.getObjectTypeConf(
                            this.entryPoint,<br>
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;




                            object );<br>
                            <br>
                            So we get the ObjectTypeConf before we do
                            anything with the object itself, and we can
                            check if TMS is being maintained for that
                            Object Type.
                            <div><br>
                              <blockquote type="cite"><br>
                                2) If I apply the modifications that you
                                suggested, from what I understood,
                                things would start to be put in the
                                equality map only when a logical insert
                                is issued;<br>
                                <br>
                                *Problem*: How would I handle the
                                situation described in item 1, if I
                                don't have anything in the equality map
                                at the moment a logical insert comes in
                                and I have to "lazily activate" TMS?<br>
                              </blockquote>
                            </div>
                            final Rete source = this.ruleBase.getRete();
                            <br>
                            ClassObjectType cot = new ClassObjectType(
                            MyClass.class );<br>
                            Map&lt;ObjectType, ObjectTypeNode&gt; map =
                            source.getObjectTypeNodes(
                            EntryPoint.DEFAULT );<br>
                            ObjectTypeNode node = map.get( cot );<br>
                            final ObjectHashSet memory = (ObjectHashSet)
                            workingMemory.getNodeMemory( node );<br>
                            <br>
                            That "memory" is the set of currently
                            asserted objects for that OTN. You can now
                            iterate that and populate the equality hash
                            map. This is a one off as the flag will be
                            set on the ObjectTypeConf from then on and
                            all objects will be added to the equality
                            map at the point of insertion.<br>
                            <br>
                            Does that help? All the information is
                            there, you should have to know how to
                            retrieve it :) We don't currently maintain
                            TMS for anything other than the default
                            entry point. Although I think that was a
                            mistake and we will probably move all
                            entrypoints to work with same, but for now
                            you can ignore that and just focus on the
                            default.<br>
                            <br>
                            Btw this should not be confused with
                            "equality" mode where the equality map has
                            to be maintained by default from the start.
                            Some would argue that a rule engine should
                            only under work and understand on the bases
                            of equality and thus all users must
                            implement hashcode and equals correctly... <br>
                            <div>
                              <blockquote type="cite"><br>
                                --<br>
                                <br>
                                Moreover, I'm willing to attempt to
                                implement the left and right un-linking
                                and tried to start with this easier task
                                to start to get familiar with
                                drools-core. I already read the article
                                you linked and your article. Would you
                                have any document with an overview of
                                the way drools implements rete?<br>
                              </blockquote>
                            </div>
                            not really no, Rete has already well
                            documented in a number of papers. The best
                            thing to do is get onto irc and talk
                            directly to edson and I and we can walk you
                            through classes.<br>
                            <a moz-do-not-send="true"
                              href="http://www.jboss.org/drools/irc.html"
                              target="_blank">http://www.jboss.org/drools/irc.html</a><br>
                            <font color="#888888"> <br>
                              Mark</font>
                            <div>
                              <div><br>
                                <blockquote type="cite"> <br>
                                  Thanks in advance!<br>
                                  <br>
                                  Cheers,<br>
                                  Leo.<br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <div class="gmail_quote">On Sat, Sep
                                    18, 2010 at 3:49 AM, Leonardo Gomes
                                    <span dir="ltr">&lt;<a
                                        moz-do-not-send="true"
                                        href="mailto:leonardo.f.gomes@gmail.com"
                                        target="_blank">leonardo.f.gomes@gmail.com</a>&gt;</span>
                                    wrote:<br>
                                    <blockquote class="gmail_quote"
                                      style="margin: 0pt 0pt 0pt 0.8ex;
                                      border-left: 1px solid rgb(204,
                                      204, 204); padding-left: 1ex;">
                                      <div>
                                        <blockquote style="margin: 0pt
                                          0pt 0pt 0.8ex; border-left:
                                          1px solid rgb(204, 204, 204);
                                          padding-left: 1ex;"
                                          class="gmail_quote"> if you
                                          look at the
                                          AbstractWorkingMemory insert
                                          method you'll see one argument
                                          is whether it's a logical
                                          insertion or not. You'll also
                                          see it check the global
                                          maintainTMS configuration and
                                          also retrieve the
                                          ObjectTypeConf. So between
                                          those things someone should be
                                          able to get it working.<br>
                                        </blockquote>
                                      </div>
                                      <div><br>
                                        Today, it enters a block where
                                        it operates on the equality map
                                        and also creates a default
                                        handle based on that TMS global
                                        option and *regardless* of
                                        whether it's a logical insert.<br>
                                        <br>
                                        If I'm *not* putting things in
                                        the equality map for regular
                                        inserts, when a logical insert
                                        comes in, but there were already
                                        stated inserts, how will I know
                                        that? I would create a new
                                        handle for the logical insert
                                        and do the
                                        tms.addLogicalDependency(...),
                                        even tough there were regular
                                        inserts before and this seems to
                                        be a wrong behaviour.<br>
                                        <br>
                                        Apparently, today, you can
                                        disable TMS and still use
                                        logical inserts in your drl,
                                        what, I believe, will lead to
                                        inconsistent behaviour, but
                                        you're at your own risk.<br>
                                        <br>
                                        Ideas? I feel that I missed
                                        something :)<br>
                                        <br>
                                        Cheers,<br>
                                        Leo.<br>
                                        <br>
                                        P.S.: I reached the conclusions
                                        above based on the fact that
                                        LogicalAssertionTest started
                                        failing after I did the changes
                                        you suggested.<br>
                                        <br>
                                        &nbsp;<br>
                                      </div>
                                      <div>
                                        <div><font color="#888888"> </font><br>
                                          <br>
                                          <div class="gmail_quote">On
                                            Wed, Sep 15, 2010 at 3:47
                                            PM, Mark Proctor <span
                                              dir="ltr">&lt;<a
                                                moz-do-not-send="true"
                                                href="mailto:mproctor@codehaus.org"
                                                target="_blank">mproctor@codehaus.org</a>&gt;</span>
                                            wrote:<br>
                                            <blockquote
                                              class="gmail_quote"
                                              style="margin: 0pt 0pt 0pt
                                              0.8ex; border-left: 1px
                                              solid rgb(204, 204, 204);
                                              padding-left: 1ex;">
                                              <div bgcolor="#ffffff"
                                                text="#000000">
                                                <div> On 15/09/2010
                                                  14:35, Michael Anstis
                                                  wrote:
                                                  <blockquote
                                                    type="cite">Is this
                                                    in drools-core; or
                                                    drools-compiler?
                                                    <div><br>
                                                    </div>
                                                    <div>Whilst not
                                                      undertaking to do
                                                      the work; have a
                                                      purpose to nose
                                                      through the code
                                                      makes
                                                      understanding
                                                      easier.<br>
                                                    </div>
                                                  </blockquote>
                                                </div>
                                                It's all in DroolsCore.<br>
                                                <br>
                                                It's a 5 minute hack for
                                                me and then 15 minute
                                                unit writing test. But I
                                                thought I'd write it up
                                                in a hope to bring
                                                someone else into the
                                                fold, we need more help
                                                writting the core engine
                                                someone else out there
                                                must want to work on
                                                current edge engine
                                                design :)<br>
                                                <br>
                                                if you look at the
                                                AbstractWorkingMemory
                                                insert method you'll see
                                                one argument is whether
                                                it's a logical insertion
                                                or not. You'll also see
                                                it check the global
                                                maintainTMS
                                                configuration and also
                                                retrieve the
                                                ObjectTypeConf. So
                                                between those things
                                                someone should be able
                                                to get it working.<br>
                                                <font color="#888888"> <br>
                                                  Mark</font>
                                                <div>
                                                  <div><br>
                                                    <blockquote
                                                      type="cite">
                                                      <div><br>
                                                        <div
                                                          class="gmail_quote">On


                                                          14 September
                                                          2010 16:47,
                                                          Mark Proctor <span
                                                          dir="ltr">&lt;<a
moz-do-not-send="true" href="mailto:mproctor@codehaus.org"
                                                          target="_blank">mproctor@codehaus.org</a>&gt;</span>
                                                          wrote:<br>
                                                          <blockquote
                                                          class="gmail_quote"
                                                          style="margin:
                                                          0pt 0pt 0pt
                                                          0.8ex;
                                                          border-left:
                                                          1px solid
                                                          rgb(204, 204,
                                                          204);
                                                          padding-left:
                                                          1ex;">
                                                          <div
                                                          bgcolor="#ffffff"
                                                          text="#000000">
                                                          Here is
                                                          another
                                                          project
                                                          proposal, this
                                                          time simpler.
                                                          I think this
                                                          one has
                                                          Wolfgang's
                                                          name on it ;)<br>
                                                          <br>
                                                          <a
                                                          moz-do-not-send="true"
href="http://blog.athico.com/2010/09/lazily-enabled-truth-maintenace.html"
target="_blank">http://blog.athico.com/2010/09/lazily-enabled-truth-maintenace.html</a><br>
                                                          <br>
                                                          Three weeks
                                                          ago I posted
                                                          the project
                                                          idea for <a
                                                          moz-do-not-send="true"
href="http://blog.athico.com/2010/08/left-and-right-unlinking-community.html"
target="_blank">"Left and Right Unlinking"</a>. So far there are no
                                                          takers, so if
                                                          you are
                                                          interested let
                                                          me know :)<br>
                                                          <br>
                                                          In the
                                                          meantime I
                                                          tried to think
                                                          of a simpler
                                                          enhancement
                                                          that we would
                                                          like to see
                                                          done.<br>
                                                          <br>
                                                          At the moment
                                                          Drools has a
                                                          user setting
                                                          "MaintainTMSOption"
                                                          which can be
                                                          true or false.
                                                          It's a small
                                                          optimisation
                                                          that when
                                                          turned off
                                                          avoids using
                                                          the equality
                                                          hashmap that
                                                          is maintained
                                                          for all
                                                          inserted
                                                          objects.<br>
                                                          <br>
                                                          It would be a
                                                          much better
                                                          idea to remove
                                                          this
                                                          configuration
                                                          setting, thus
                                                          simplifying
                                                          things for end
                                                          users and have
                                                          TMS lazily
                                                          enabled on
                                                          demand.<br>
                                                          <br>
                                                          For each
                                                          object type
                                                          there is an
                                                          "ObjectTypeConf"
                                                          configuration
                                                          object that is
                                                          retrieved
                                                          every time a
                                                          working memory
                                                          action, such
                                                          as insert, is
                                                          executed. The
                                                          enabledTMS
                                                          boolean should
                                                          be moved
                                                          there, so
                                                          there is one
                                                          per object
                                                          type, by
                                                          default it is
                                                          false.<br>
                                                          <br>
                                                          When a working
                                                          memory action
                                                          occurs, like
                                                          insert, it
                                                          retrieved the
                                                          ObjectTypeConf
                                                          and checks the
                                                          maintainTms
                                                          boolean there,
                                                          instead of the
                                                          current engine
                                                          scoped
                                                          configuration.
                                                          When a logical
                                                          insertion
                                                          occurs and the
                                                          ObjectTypeConf
                                                          is retrieved
                                                          if maintainTms
                                                          is false it
                                                          sets the value
                                                          to true and
                                                          then iterates
                                                          the associated
                                                          ObjectTypeNode
                                                          memory lazily
                                                          adding all the
                                                          objects to the
                                                          TMS equality
                                                          map. From then
                                                          on for that
                                                          ObjectType all
                                                          inserted
                                                          objects are
                                                          added to that
                                                          equality map.<br>
                                                          <br>
                                                          With this you
                                                          now have the
                                                          advantage of
                                                          TMS being
                                                          laziy enabled,
                                                          so the minor
                                                          hashmap
                                                          operation is
                                                          no longer used
                                                          and likewise a
                                                          small memory
                                                          saving from
                                                          not populating
                                                          the map. There
                                                          is a further
                                                          advantage that
                                                          this is now
                                                          fine grained
                                                          and when
                                                          enabled only
                                                          impacts for
                                                          that specific
                                                          object type.<br>
                                                          <br>
                                                          A further
                                                          enhancement
                                                          could use a
                                                          int counter,
                                                          instead of a
                                                          boolean. Each
                                                          logical
                                                          insertion for
                                                          that object
                                                          type increases
                                                          the counter,
                                                          each
                                                          retraction
                                                          decreases the
                                                          counter; even
                                                          if
                                                          automatically
                                                          retracted if
                                                          the truth is
                                                          broken for
                                                          that logical
                                                          assertion.
                                                          When the
                                                          counter
                                                          reaches zero,
                                                          TMS for that
                                                          OTN can be
                                                          disabled. We
                                                          do not however
                                                          remove the
                                                          objects from
                                                          the equality
                                                          map, as this
                                                          would cause
                                                          "churn" if TMS
                                                          is
                                                          continuously
                                                          enabled and
                                                          disabled.
                                                          Instead when
                                                          TMS is
                                                          disabled
                                                          record the
                                                          current fact
                                                          counter id.
                                                          Then if TMS is
                                                          disabled on a
                                                          retraction but
                                                          there is a
                                                          counter id, we
                                                          can check that
                                                          counter id to
                                                          see if the
                                                          fact is prior
                                                          to TMS being
                                                          disabled and
                                                          thus would
                                                          need to be
                                                          retracted from
                                                          the equality
                                                          map.<br>
                                                          </div>
                                                          <br>
_______________________________________________<br>
                                                          rules-dev
                                                          mailing list<br>
                                                          <a
                                                          moz-do-not-send="true"
href="mailto:rules-dev@lists.jboss.org" target="_blank">rules-dev@lists.jboss.org</a><br>
                                                          <a
                                                          moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-dev"
                                                          target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
                                                          <br>
                                                          </blockquote>
                                                        </div>
                                                        <br>
                                                      </div>
                                                      <pre><fieldset></fieldset>
_______________________________________________
rules-dev mailing list
<a moz-do-not-send="true" href="mailto:rules-dev@lists.jboss.org" target="_blank">rules-dev@lists.jboss.org</a>
<a moz-do-not-send="true" href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
</pre>
                                                    </blockquote>
                                                    <br>
                                                  </div>
                                                </div>
                                              </div>
                                              <br>
_______________________________________________<br>
                                              rules-dev mailing list<br>
                                              <a moz-do-not-send="true"
href="mailto:rules-dev@lists.jboss.org" target="_blank">rules-dev@lists.jboss.org</a><br>
                                              <a moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-dev"
                                                target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
                                              <br>
                                            </blockquote>
                                          </div>
                                          <br>
                                        </div>
                                      </div>
                                    </blockquote>
                                  </div>
                                  <br>
                                </blockquote>
                                <br>
                              </div>
                            </div>
                          </div>
                        </blockquote>
                      </div>
                      <br>
                    </blockquote>
                    <br>
                  </div>
                </div>
              </div>
            </blockquote>
          </div>
          <br>
        </blockquote>
        <br>
        <pre wrap=""><fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
rules-dev mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
</pre>
      </blockquote>
      <br>
      <pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
rules-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>
<a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>