[rules-dev] Drools 3.0.6 to 4.0.4 migration

Mark Proctor mproctor at codehaus.org
Fri Apr 18 17:33:09 EDT 2008


try the 4.0.x branch, as I believe that was fixed there and will be part 
of the next release. The next release is just waiting for the next bug 
fix for MVEL, which hopefully should be next week..
http://anonsvn.labs.jboss.com/labs/jbossrules/branches/4.0.x/

Mark
Dennis Ryan wrote:
> Hi,
>
> I've migrated from 3.0.6 to 4.0.4 of drools and an existing test case 
> is now failing. The test case tests dynamically changing the rules by 
> adding a rule file to the existing rulesBase that is a completely new 
> package, then asserting that the existing rules fire and the newly 
> added rules fire. Up to this point it works as expected, the original 
> package of base rules fire and the newly added package of rules fires 
> also. Next it adds new rules that essentially replace the ones just 
> added and fires the rules again. This time only the newest rules added 
> fire and the existing rules that did not change at all and are in a 
> completely different package then the rules just added DIDN'T fire. 
> Upon some debugging it looks like the ruleBase has both packages, the 
> existing package and the latest updated rules package, in it.
>
> any advice appreciated please!!!!
>
> thanks in advance!
>
> here the test:
>
> public void testUpdatingPackage() throws Exception {
>         logger.info("--------- testUpdatingPackage ----------");
>        
>        //reinitialize ruleBaseBuilder - some base rules that i always 
> want to run
>         
> ruleBaseBuilder.setRuleFile("com/xxx/coreservice/um/rules/um.drl");
>
>         String userName = "user";
>        
>         CsUser user = Helpers.createUser(userName, userName, null);
>         // Set the displayname to null. If the default rules fire,
>         // it should be populated after running the rules.
>         user.setDisplayName(null);
>         user.setDescription("base");
>        
>         // Add product's rules on the fly - some new rules
>         
> ruleBaseBuilder.addRulesFile("com/xxx/coreservice/um/ext/rules/p1.drl");
>         ruleInterceptor.addUser(user);
>        
>         // assert that the default rule is invoked by checking the 
> display name
>         assertEquals(user.getSurname() + ", " + user.getGivenName(), 
> user.getDisplayName());
>        
>         // Check that the product extension did run
>         logger.info("User's description: " + user.getDescription());
>         assertTrue(user.getDescription().indexOf("p1ext") > 0);
>        
>         // now update product's rules on the fly - change some of the 
> new rules!
>         
> ruleBaseBuilder.addRulesFile("com/xxx/coreservice/um/ext/rules/p1updated.drl");
>        
>         user = Helpers.createUser(userName, userName, null);
>         // Set the displayname to null. If the default rules fire,
>         // it should be populated after running the rules.
>         user.setDisplayName(null);
>         user.setDescription("base");
>        
>         ruleInterceptor.addUser(user);
>        
>         // assert that the default rule is invoked by checking the 
> display name  - ASSERTION FAILS HERE because the original base rules 
> dont fire and they are supposed to fill in displayName
>         assertEquals(user.getSurname() + ", " + user.getGivenName(), 
> user.getDisplayName());
>        
>         // Check that the updated product extension did run
>         logger.info("User's description: " + user.getDescription());
>         assertTrue(user.getDescription().indexOf("p1extupdated") > 0);
>        
>         // This is to check that the old rule didn't run.
>         assertEquals(user.getDescription().indexOf("p1extupdated"),
>                 user.getDescription().indexOf("p1ext"));
>     }
>
> and the rules:
>
> //---------------------p1updated-------------------------
> package com.xxx.coreservice.um.ext.rules
>
> import com.xxx.coreservice.persistence.user.CsUser;
>
> import com.xxx.common.logging.client.Logger;
>
> // TODO: Can these globals be inherited?
> global Logger logger;
>
> // TODO: Can this method be put into a helper?
> // The disadvantage with that is that now we don't really know which 
> rule file the log
> // was coming from.
> function void log(Logger logger, String msg) {
>     if (logger.isFineEnabled()) {
>         logger.fine(msg);
>     }
> }
>
> rule "testRule"
>     no-loop true
>     agenda-group "um_add"
>    
>     when
>         user : CsUser()
>     then
>         log(logger, "P1 updated test rule");
>         user.setDescription(user.getDescription() + ".p1extupdated");
> end
>
> ------------------------------------------------------------------------
> Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try 
> it now. 
> <http://us.rd.yahoo.com/evt=51733/*http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ%20> 
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20080418/8ea4f97c/attachment.html 


More information about the rules-dev mailing list