0

guvnor Web アプリから drl ファイルを実行しようとしています。

guvnor を呼び出すプログラムは次のとおりです。

public class RunGuvnorRules {

public static final void main(String[] args) {
 try {  
        // load up the knowledge base
        KnowledgeBuilderConfiguration kbuilderconfiguration = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
        KnowledgeBase kbase = readKnowledgeBase();  
        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();  
        Map<String, Object> params = new HashMap<String, Object>();
        LoanApplication loanApplication = new LoanApplication();  
        loanApplication.setAge(18);
        ksession.insert(loanApplication);
        ksession.addEventListener( new DebugAgendaEventListener() ); 
        ksession.addEventListener( new DebugWorkingMemoryEventListener() ); 
        ksession.fireAllRules();
        ksession.dispose();
        System.out.println("LoanApplication" + loanApplication.toString());
    } catch (Throwable t) {  
        t.printStackTrace();  
    }  

}



private static KnowledgeBase readKnowledgeBase() throws Exception {  
    String url = "http://localhost:8080/guvnor-5.5.0.Final-tomcat-6.0/org.drools.guvnor.Guvnor/package/mortgages/LATEST/assets/Underage.drl";  
    System.out.println("Going: " + url);  

    UrlResource resource = (UrlResource) ResourceFactory.newUrlResource(url);  
    resource.setBasicAuthentication("enabled");  
    resource.setUsername("admin");  
    resource.setPassword("admin");  

    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();  
    kbuilder.add(resource, ResourceType.DRL);  
    final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
    kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
    return kbase;  
}  


}

以下の URL にアクセスすると、guvnor から drl ファイル Underage.drl が取得されます。

package mortgages


declare LoanApplication
firstName: String
lastName: String
state: String
bank: String
age: Integer
creditLimit: Integer
previousApplications: Integer
loanApproved: Boolean
interestRate: Integer
explanation: String
end
rule "Underage"
salience 10
dialect "mvel"
when
    application : LoanApplication( age < 21 )
then
    application.setExplanation( "Underage" );
    application.setLoanApproved( false );
end

guvnor から取得した drl にモデル宣言セクションが追加されているのはなぜですか。これを削除すると、ルールは正常に実行されます。宣言セクションを削除し、drl をローカルで実行した後のログ ステートメント

SLF4J: クラス "org.slf4j.impl.StaticLoggerBinder" のロードに失敗しました。SLF4J: 無操作 (NOP) ロガー実装へのデフォルト設定 SLF4J: http://www.slf4j.org/codes.html#StaticLoggerBinderを参照詳細については。==>[BeforeActivationFiredEvent: getActivation()=[アクティベーション ルール=未成年、act#=0、salience=10、tuple=[ファクト 0:1:64587262:64587262:1:DEFAULT:LoanApplication [firstName=null、lastName=null] 、state=null、bank=null、age=18、creditLimit=0、previousApplications=0、loanApproved=false、interestRate=0、説明=null]] ]、getKnowledgeRuntime()=org.drools.impl.StatefulKnowledgeSessionImpl@1828ef60] ==>[AfterActivationFiredEvent: getActivation()=[アクティベーション ルール=未成年、act#=0、salience=10、tuple=[ファクト 0:1:64587262:64587262:1:DEFAULT:LoanApplication [firstName=null、lastName=null] 、state=null、bank=null、age=18、creditLimit=0、previousApplications=0、loanApproved=false、interestRate=0、説明=Underage]]]、getKnowledgeRuntime()=org.drools.impl.

何か間違ったことをしている場合はお知らせください

4

1 に答える 1

1

アプリケーションに「LoanApplication」という重複したクラスがあると思います。1 つは drl で定義され、ルールで使用されているクラスで、もう 1 つは Java コードで使用しているクラスです。問題はあなたの質問の答えにあります:

guvnor から取得した drl にモデル宣言セクションが追加されているのはなぜですか?

答えは、あなた (またはあなたのチームの誰か) がこれを Guvnor 内で「宣言型モデル」として定義したためです。LoanApplication を既に Java クラスとして定義している場合は、それを含む jar ファイルを「POJO モデル Jar」として Guvnor にインポートする必要があります。

それが役に立てば幸い、

于 2013-09-20T07:41:00.060 に答える