[rules-users] need design suggestion

Joe Zendle jzendle at zentechinc.net
Mon Apr 2 14:37:33 EDT 2012


Hi,

Trying to build net mgmt system but having problem with basic cause/effect
(mostly not understanding the engine).

I have a a Port object that contains a Card object. They both have separate
states (up or down). I want to have a Port go to down state if the
containing Card goes to down state - very basic now until i get the feel of
it.

The state of the Card changes if a Notification is injected into the
session (at least this is my understanding)

Here are my rules:

rule "card going down"
    when
    $card : Card($name : name , state == State.UP)
        $notif : Notification( id == $name, type == NotificationType.CARD ,
state == State.DOWN )
    then
    System.out.println("  got notification for card down " + $card );
    modify($card) {
    setState(State.DOWN);
    }
    retract($notif);
end

// is the following rule correct??

rule "port going down"
    when
    $port : Port($name : name , state == State.UP, $card : card)
        Card ( state == State.DOWN) from $card
    then
    System.out.println("  port down because card is down  port: " + $port +
" card: " + $card );
     modify($port) {
    setState(State.DOWN);
    }

end

Here is the test case in a nutshell:

 Port port1 = new Port();
Port port2 = new Port();
                        port1.setName("port1");
 port2.setName("port2");

                        Card card1 = new Card();
card1.setName("port1 card1")
                        port1.setCard(card1);
                       // stateful session
                        ksession.insert(port1);
ksession.insert(port2);
ksession.insert(card1);

System.out.println("  firing rules");
new Thread(new Runnable() {
public void run() {
ksession.fireUntilHalt();
}
}).start();

System.out.println("*** injecting notification down");
Notification notif = new Notification();
notif.setType(NotificationType.CARD);
notif.setState(State.DOWN);
notif.setId("port1 card1");
FactHandle notifHandle = ksession.insert(notif);


                        ksession.halt();
                        ksession.dispose()


I would expect the card down notification to cause the port to do down by
the second rule above but it does not fire.

Here is output

  card1: Card [state=UP, name=port1 card1,
ne=org.plugtree.examples.model.NE at 1e2670b]
OBJECT ASSERTED value:Port [state=UP, name=port1, card=Card [state=UP,
name=port1 card1, ne=org.plugtree.examples.model.NE at 1e2670b]] factId: 1
OBJECT ASSERTED value:Port [state=UP, name=port2, card=Card [state=UP,
name=port1 card1, ne=org.plugtree.examples.model.NE at 1e2670b]] factId: 3
OBJECT ASSERTED value:Card [state=UP, name=port1 card1,
ne=org.plugtree.examples.model.NE at 1e2670b] factId: 5
  firing rules
3
*** injecting notification down
ACTIVATION CREATED rule:card going down activationId:card going down [6, 5]
declarations: $name=port1 card1(5);
$notif=org.plugtree.examples.model.Notification at 4a9a7d(6); $card=Card
[state=UP, name=port1 card1, ne=org.plugtree.examples.model.NE at 1e2670b](5)
OBJECT ASSERTED value:org.plugtree.examples.model.Notification at 4a9a7dfactId: 6
BEFORE ACTIVATION FIRED rule:card going down activationId:card going down
[6, 5] declarations: $name=port1 card1(5);
$notif=org.plugtree.examples.model.Notification at 4a9a7d(6); $card=Card
[state=UP, name=port1 card1, ne=org.plugtree.examples.model.NE at 1e2670b](5)
  got notification for card down Card [state=UP, name=port1 card1,
ne=org.plugtree.examples.model.NE at 1e2670b]
OBJECT MODIFIED value:Card [state=DOWN, name=port1 card1,
ne=org.plugtree.examples.model.NE at 1e2670b] factId: 5
OBJECT RETRACTED value:org.plugtree.examples.model.Notification at 4a9a7dfactId: 6
AFTER ACTIVATION FIRED rule:card going down activationId:card going down
[-1, 5] declarations: $name=port1 card1(5); $card=Card [state=DOWN,
name=port1 card1, ne=org.plugtree.examples.model.NE at 1e2670b](5)



Is the second rule written incorrectly? or do i have a gap in my
expectations of how the engine should work (or both)

Thanks in advance,

Joe.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20120402/73234b96/attachment.html 


More information about the rules-users mailing list