Samir,

   First thing to try is to use DRLDumper to dump your descriptor to DRL source... it will be easy to "see" if you are doing anything wrong with the descriptor classes...

   []s
   Edson

2008/3/3, samirsss <samirsavla@gmail.com>:

Hi,

Here's the source code of the rule I am trying to add:

  public void testDynamicRules()
  {
          //Create a rule dynamically and check if it fired from log statements
          RuleBase ruleBase = wm.getRuleBase();
          Package[] pkg = ruleBase.getPackages();
          if(pkg[0] != null)
          {
                  logger.warn("Package size before adding the rule :
"+pkg[0].getRules().length);
                  //Building a new package
                  final PackageDescr packageDescr = new PackageDescr(pkg[0].getName() );

                  //Building ruleDescriptor
                  RuleDescr ruleDescr = null;
                  String consequence = "mediator.addedNewRule();\n";
                  //String consequence = "logger.warn(\"New rule just got fired\");";
              ruleDescr = new RuleDescr( "Added new Rule");
              AndDescr lhs = new AndDescr();
              ruleDescr.setLhs( lhs );

              final PatternDescr pattern = new PatternDescr(
ApplicationEvent.class.getName(),
                      "newAppEvent");
              lhs.addDescr( pattern );


              final LiteralRestrictionDescr restrictionMessage = new
LiteralRestrictionDescr("==", "Test2", LiteralRestrictionDescr.TYPE_STRING);
              final FieldConstraintDescr returnValue = new FieldConstraintDescr(
"messageId" );
              returnValue.addRestriction(restrictionMessage);

              pattern.addConstraint(returnValue);

              ruleDescr.setConsequence( consequence );
              List attributes = new ArrayList<AttributeDescr>();
              attributes.add(new AttributeDescr("salience", "98"));
              attributes.add(new AttributeDescr("enabled", "true"));
              ruleDescr.addAttribute( new AttributeDescr("dialect", "java") );
              ruleDescr.setAttributes(attributes);

              Package defaultPackage = pkg[0];
              PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
              PackageBuilder builder = new PackageBuilder( defaultPackage, conf );

                //Adding rule to the package
               packageDescr.addRule( ruleDescr );
               builder.addPackage(packageDescr);
               int errors = builder.getErrors().getErrors().length;
               if(errors > 0)
               {
                   //TODO remove the recently added rule or reload all the rules from
the DRL file
                   logger.warn("Error while adding a rule");

               }
               else
               {
                   Rule newRule = builder.getPackage().getRule(ruleDescr.getName());
                   //String ruleFlowName = newRule.getRuleFlowGroup()
                   //newRule.get
                          //Check is the rule got added
                          logger.warn("Package size after adding the rule :
"+pkg[0].getRules().length);
               }
          }
          else
          {
                  logger.warn("Error getting default package for adding rules");
          }

  }


  public void addedNewRule()
  {
          //Just testing addition of new rules.
          logger.warn("New rule just got fired");
  }

I cant seem to get the consequence to get fired. I have a similar rule in my
drl file where the messageID == "Test" and it works fine.

Any help is really helpful here cause I am stuck at this point and might
have to go to creating xml files for the rules and parsing that.

Thanks
Samir


--
View this message in context: http://www.nabble.com/Cant-seem-to-fire-a-dynamically-added-rule-tp15810172p15810172.html
Sent from the drools - user mailing list archive at Nabble.com.

_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users



--
  Edson Tirelli
  JBoss Drools Core Development
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com