Store rules in a relational Database: deprecated class KnowledgeBase

945 views
Skip to first unread message

tommaso borgato

unread,
Oct 15, 2015, 12:13:31 PM10/15/15
to Drools Usage
Hi,

I use Drools version 5 in one of my projects, a very important one actually.
I am upgrading to Drools 6 and class KnowledgeBase is deprecated.

I store my rules in a database table:

create table dhmatevo.t_matevo_rules (
    rule_name varchar2(100) not null,
    rule_content clob,
    active number(1,0) default 1 not null
)

I load the rules from the table with the following code:

List<String> rules = MyRepository.getRulesFromDatabase();

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
Iterator<String> rulesIterator = rules.iterator();
while (rulesIterator.hasNext()){
kbuilder.add(ResourceFactory.newReaderResource(new StringReader(rulesIterator.next())), ResourceType.DRL);
}

KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
if ( kbuilder.hasErrors() ) {
Iterator<KnowledgeBuilderError> errors = kbuilder.getErrors().iterator();
while (errors.hasNext()) {
KnowledgeBuilderError error = errors.next();
logger.error("Errore compilazione regole Drools : {}", error.getMessage());
}
} else {
this.knowledgeBase = kbase;
}


Which is the best way to load rules from my table in version 6 ?

Thank you all in advance for your support,

Tommaso Borgato

Davide Sottara

unread,
Oct 15, 2015, 1:58:07 PM10/15/15
to drools...@googlegroups.com

The closest and easiest way is to use the KieHelper class. I don't have the pointers to the examples right now, but others may help. The interface may be intuitive enough anyway.
Let us know if you have more questions

--
You received this message because you are subscribed to the Google Groups "Drools Usage" group.
To unsubscribe from this group and stop receiving emails from it, send an email to drools-usage...@googlegroups.com.
To post to this group, send email to drools...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/drools-usage/5e797cf9-5ca1-4b3d-8cee-677c499dcf85%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

tommaso borgato

unread,
Oct 16, 2015, 10:05:20 AM10/16/15
to Drools Usage
Thank you!

This code worked for me:

<String> rules = DataHubRepository.getRulesFromDatabase(dataSourceDhsathub);

KieHelper helper = new KieHelper();
Iterator<String> rulesIterator = rules.iterator();
while (rulesIterator.hasNext()){
    Resource resource = ResourceFactory.newReaderResource(new StringReader(rulesIterator.next()));
resource.setResourceType(ResourceType.DRL);
resource.setSourcePath("myrule");
resource.setTargetPath("myrule");
helper.addResource(resource);
}
KieBase kbase = helper.build();
this.kieBase = kbase;
Reply all
Reply to author
Forward
0 new messages