I must admit I didn't check against this example. But we did find a memory leak. Each activation remembers its parent activation, this chain was never getting nulled, which meant for recursive algorithms it went out of memory very quickly - this is now fixed. Maybe you can check trunk and make sure that fixes our problem? Trunk is broken at the moment, while we do MVEL updates, but should be fixed in a few hours. I'll message the list when it is - you won't need to build anything yourself as you will then be able to get the latest snapshot to try from here http://cruisecontrol.jboss.com/cc/artifacts/jboss-rules.

Mark
Simon French wrote:
Hi Mark,
After all the hard work you guys have put into drools recently I hope you had a good holiday.
Has anybody had a chance to look at this?

Simon

On 20/07/07, * Mark Proctor* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    we'll look into this to see where the memory is going. but won't
    be for another week or so - I'm currently on holiday.

    Mark
    Simon French wrote:
    Hi,
    After attending a session with Mark Proctor in London I was
    inspired to play around with Drools in a slightly different way
    than we use it for in the workplace, and try and solve a puzzle.
    Unfortunately I couldn't get Drools to solve it as I kept getting
    memory problems (I believe are cartesian joins being the problem),
    so I decided to extend the golfer example to see if I got the
    same problem
    I added two new names and a new integer property, club

            // create all possible Golfer objects
                    String[] names = new String[] { "Fred", "Joe",
    "Bob", "Tom", "Des", "Terry" };
                    String[] colors = new String[] { "red", "blue",
    "plaid", "orange","black", "white" };
                    int[] positions = new int[] { 1, 2, 3, 4, 5, 6 };
                    int[] clubs = new int[] {9,8,7,4,5,5};
for ( int n = 0; n < names.length; n++ ) {
                       for ( int c = 0; c < colors.length; c++ ) {
                              for ( int p = 0; p < positions.length;
    p++ ) {
                                  for ( int q = 0; q < clubs.length;
    q++ ) {
                                      session.insert(new Golfer(
    names[n], colors[c], positions[p], clubs[q]) );

    ....


    Then changed the golder.drl to:

    package com.sample

    import com.sample.Golfer;


    rule "Golfer Riddle"
        when
            // A golfer named Fred,
Golfer( name == "Fred",
                    $fredsPosition : position, $fredsColor : color,
    $fredsClub : club   )

            // Der Golfer hinter Fred trägt blau
            Golfer( $unknownsName : name != "Fred",
                    $unknownsPosition :  position == ( $fredsPosition
    + 1 ),
                    $unknownsColor : color == "blue", color !=
    $fredsColor,
                    $unknownsClub : club == 5 )

// Joe steht an zweiter Stelle Golfer( name == "Joe", $joesPosition : position == 2,
                    position != $fredsPosition,
                    $joesColor : color != $fredsColor,
                    $joesClub : club == 5 )

// Bob traegt Karo Golfer( name == "Bob",
                    name != $unknownsName,
                    $bobsPosition : position != $fredsPosition,
                    position != $unknownsPosition, position !=
$joesPosition, $bobsColor : color == "plaid",
                    color != $fredsColor, color != $joesColor,
                    color != $unknownsColor,
                    $bobsClub : club < $joesClub )

            // Tom ist nicht 1. oder 4., traegt kein Orange
            Golfer( $tomsName : name == "Tom",
                    $tomsPosition : position != 1, position != 4,
                    position != $fredsPosition, position !=
    $joesPosition,
                    position !=
$bobsPosition, $tomsColor : color != "orange", color != "blue",
                    color != $fredsColor, color != $joesColor,
color != $bobsColor )
            Golfer ( $des : name == "Des", $desPosition : position <
    $fredsPosition, $desColor : color != "blue",
                    color != $fredsColor, color != $joesColor,
                    color != $bobsColor )
            Golfer ( $terry : name == "Terry", $terryPosition :
    position < $desPosition, $terryColor : color != "blue",
                    color != $fredsColor, color != $joesColor,
                    color != $bobsColor )
        then
            System.out.println( "Fred " + $fredsPosition + " " +
    $fredsColor );
            System.out.println( "Joe " + $joesPosition + " " +
    $joesColor );
            System.out.println( "Bob " + $bobsPosition + " " +
    $bobsColor );
            System.out.println( "Tom " + $tomsPosition + " " +
$tomsColor ); System.out.println ( "Des " + $desPosition + " " + $desColor ); System.out.println( "terry " + $terryPosition + " " + $terryColor ); end


    After a couple of minutes of processing I got:-

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap
    space

    I also changed java memory allocation with -Xms1640M -Xmx1640M
    (The most I can allocate on my PC), and tried running it as a
    stateless  session too.

    Is there anything else I can do, or is this simply pushing drools
    too far (surely not!!) ?

    I'm very keen on pushing this technology as much as possible in
    our workplace and I'd really appreciate any help.

    Thanks in advance

    Simon

    ------------------------------------------------------------------------

    _______________________________________________
    rules-users mailing list
    [email protected]
     <mailto:[email protected]>
    https://lists.jboss.org/mailman/listinfo/rules-users


    _______________________________________________
    rules-users mailing list
    [email protected] <mailto:[email protected]>
    https://lists.jboss.org/mailman/listinfo/rules-users


------------------------------------------------------------------------

_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to