Russ, I am not sure, but I think there was a bug that crept into RC1 with eval, that would show up like that, but I can't be sure. RC2 will certainly correct it.
On 4/8/06, Russ Egan <[EMAIL PROTECTED]> wrote: > > Here are my rules: > > rule "Authorize Resources" > salience 100 > when > $r : Resource() > $g : Group(resources contains $r) > then > AuthorizedResource auth = new AuthorizedResource(); > auth.resource = $r; > assert(auth); > end > > rule "Create block rules for unauthorized resources in same network" > when > $r : Resource() > $pr : Principal() > not AuthorizedResource(resource == $r) > eval (!Collections.disjoint($r.networks, $pr.networks)) > then > BlockRule block = new BlockRule(); > block.resource = $r; > assert(block); > end > > When AuthorizedResources are asserted by the first rule, I expect that > activations > of the second should be cancelled, since it makes the "not" condition > false. > But the cancellations don't occur. Here's the output: > > [BeforeActivationFired: rule=Authorize Resources; tuple=[fid:16:16], > [fid:2:2], > [fid:7:7], [fid:24:24], ] > [ObjectAsserted: handle=[fid:25:25]; object= > [EMAIL PROTECTED] > [AfterActivationFired(24): rule=Authorize Resources] > [BeforeActivationFired: rule=Authorize Resources; tuple=[fid:12:12], > [fid:2:2], > [fid:7:7], [fid:24:24], ] > [ObjectAsserted: handle=[fid:26:26]; object= > [EMAIL PROTECTED] > [AfterActivationFired(24): rule=Authorize Resources] > [BeforeActivationFired: rule=Create block rules for unauthorized resources > in same network; tuple=[fid:12:12], [fid:23:23], ] > [ObjectAsserted: handle=[fid:27:27]; [EMAIL PROTECTED] > [AfterActivationFired(23): rule=Create block rules for unauthorized > resources > in same network] > [BeforeActivationFired: rule=Create block rules for unauthorized resources > in same network; tuple=[fid:8:8], [fid:23:23], ] > [ObjectAsserted: handle=[fid:28:28]; [EMAIL PROTECTED] > [AfterActivationFired(23): rule=Create block rules for unauthorized > resources > in same network] > [BeforeActivationFired: rule=Create block rules for unauthorized resources > in same network; tuple=[fid:5:5], [fid:23:23], ] > [ObjectAsserted: handle=[fid:29:29]; [EMAIL PROTECTED] > [AfterActivationFired(23): rule=Create block rules for unauthorized > resources > in same network] > [BeforeActivationFired: rule=Create block rules for unauthorized resources > in same network; tuple=[fid:1:1], [fid:23:23], ] > [ObjectAsserted: handle=[fid:30:30]; [EMAIL PROTECTED] > [AfterActivationFired(23): rule=Create block rules for unauthorized > resources > in same network] > > However, if I comment out the eval() line, the cancellations do > occur. Like > this: > > rule "Create block rules for unauthorized resources in same network" > when > $r : Resource() > $pr : Principal() > not AuthorizedResource(resource == $r) > #eval (!Collections.disjoint($r.networks, $pr.networks)) > then > BlockRule block = new BlockRule(); > block.resource = $r; > assert(block); > end > > ... I get: > > [BeforeActivationFired: rule=Authorize Resources; tuple=[fid:16:16], > [fid:2:2], > [fid:7:7], [fid:24:24], ] > <==[ActivationCancelled(23): rule=Create block rules for unauthorized > resources > in same network; tuple=[fid:16:16], [fid:23:23], ] > [ObjectAsserted: handle=[fid:25:25]; object= > [EMAIL PROTECTED] > [AfterActivationFired(24): rule=Authorize Resources] > [BeforeActivationFired: rule=Authorize Resources; tuple=[fid:12:12], > [fid:2:2], > [fid:7:7], [fid:24:24], ] > <==[ActivationCancelled(23): rule=Create block rules for unauthorized > resources > in same network; tuple=[fid:12:12], [fid:23:23], ] > [ObjectAsserted: handle=[fid:26:26]; object= > [EMAIL PROTECTED] > [AfterActivationFired(24): rule=Authorize Resources] > [BeforeActivationFired: rule=Create block rules for unauthorized resources > in same network; tuple=[fid:21:21], [fid:23:23], ] > [ObjectAsserted: handle=[fid:27:27]; [EMAIL PROTECTED] > [AfterActivationFired(23): rule=Create block rules for unauthorized > resources > in same network] > [BeforeActivationFired: rule=Create block rules for unauthorized resources > in same network; tuple=[fid:14:14], [fid:23:23], ] > [ObjectAsserted: handle=[fid:28:28]; [EMAIL PROTECTED] > [AfterActivationFired(23): rule=Create block rules for unauthorized > resources > in same network] > [BeforeActivationFired: rule=Create block rules for unauthorized resources > in same network; tuple=[fid:8:8], [fid:23:23], ] > [ObjectAsserted: handle=[fid:29:29]; [EMAIL PROTECTED] > [AfterActivationFired(23): rule=Create block rules for unauthorized > resources > in same network] > [BeforeActivationFired: rule=Create block rules for unauthorized resources > in same network; tuple=[fid:5:5], [fid:23:23], ] > [ObjectAsserted: handle=[fid:30:30]; [EMAIL PROTECTED] > [AfterActivationFired(23): rule=Create block rules for unauthorized > resources > in same network] > [BeforeActivationFired: rule=Create block rules for unauthorized resources > in same network; tuple=[fid:4:4], [fid:23:23], ] > [ObjectAsserted: handle=[fid:31:31]; [EMAIL PROTECTED] > [AfterActivationFired(23): rule=Create block rules for unauthorized > resources > in same network] > [BeforeActivationFired: rule=Create block rules for unauthorized resources > in same network; tuple=[fid:1:1], [fid:23:23], ] > [ObjectAsserted: handle=[fid:32:32]; [EMAIL PROTECTED] > [AfterActivationFired(23): rule=Create block rules for unauthorized > resources > in same network] > > Note how the assertion of the AuthorizedResource now triggers the > activation > cancelled. Am I missing something? > > > > >
