我有一個用例,我需要爲一次性使用動態地創建一個規則。規則是動態的,在更糟糕的情況下,每個迭代/請求可能會有所不同。因此,我無法儲存它們。Drools - 更快地創建KnowlegeBuilder?
我目前對Drools的理解是,您需要創建一個KnowledgeBuilder,然後添加規則。
我按如下方式創建知識庫。
private KnowledgeBase readKnowledgeBase() throws Exception {
long t1 = System.currentTimeMillis();
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
long t11 = System.currentTimeMillis();
kbuilder.add(org.drools.io.ResourceFactory.newByteArrayResource(getRule()), ResourceType.DRL);
long t2 = System.currentTimeMillis();
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error: errors) {
System.err.println(error);
}
throw new IllegalArgumentException("Could not parse knowledge.");
}
long t3 = System.currentTimeMillis();
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
long t4 = System.currentTimeMillis();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
long t5 = System.currentTimeMillis();
Collection<KnowledgePackage> kpackages = kbase.getKnowledgePackages();
for (KnowledgePackage knowledgePackage : kpackages) {
System.out.println("Package -------- " + knowledgePackage.getName());
Collection<Rule> rules = knowledgePackage.getRules();
for (Rule rule : rules) {
System.out.println("****" + rule.getName());
}
}
long t6 = System.currentTimeMillis();
System.out.println((t11-t1) + " " + (t2-t11) + " " + (t3-t2) + " " + (t4-t3) + " " + (t5-t4) + " " + (t6-t5)+ " ");
return kbase;
}
基於定時登錄只有這兩個操作的時間的代碼取大多數(超過80%)。有沒有辦法讓它更快?或者有沒有辦法實現我的用例?
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(org.drools.io.ResourceFactory.newByteArrayResource(getRule()), ResourceType.DRL);
有關於這對Drools的用戶forum.http一些討論://drools.46999.n3.nabble.com/Is-there-a-這樣做,這個功能於Drools的-td3973888.html更快的方式 - 的 - –