2014-12-05 30 views
0

我剛剛在tomcat上設置了kie-workbench(6.1.0 Final),並創建了一個包含drl文件和由數據建模器創建的大型平面POJO的示例demo-project。 我構建和部署演示項目,併成功地使用下面的代碼從一個客戶端應用程序啓動時機的規則:在我的kjar中獲取POJO的句柄

String url = "http://yytomcat7kie.domain.com:8080/kie/maven2/gro/up/demoproject/0.0.3/demoproject-0.0.3.jar"; 

    ReleaseIdImpl releaseId = new ReleaseIdImpl("gro.up", "demoproject", "0.0.3"); 

    KieServices ks = KieServices.Factory.get(); 
    KieFileSystem kfs = ks.newKieFileSystem(); 

    UrlResource urlResource = (UrlResource) ResourceFactory.newUrlResource(url); 

    kfs.write(urlResource); 

    KieBuilder kieBuilder = ks.newKieBuilder(kfs).buildAll(); 

    KieContainer kContainer = ks.newKieContainer(releaseId); 

    KieSession kSession = kContainer.newKieSession(); 
    SessionConfiguration sConf = (SessionConfiguration)kSession.getSessionConfiguration(); 

    MyKiePojo kiePojo = new MyKiePojo(); 
    kiePojo.setField01("blah"); 
    kiePojo.setField02("blahblah"); 
    kiePojo.setField03("blahblahblah"); 

    kSession.insert(kiePojo); 

    kSession.fireAllRules(); 

    System.out.println(" ALL RULES FIRED "); 
    System.out.println(kiePojo.getField04()); 
    System.out.println(kiePojo.getField05()); 

它工作正常,但我現在的問題是: 是否有可能獲得一個句柄MyKiePojo類在demoproject.jar沒有在客戶端應用程序的類路徑中的?理想情況下,我希望將所有模型保留在工作臺中,而不必在客戶端應用程序中對其進行鏡像,並能夠實例化它們並使用從其他請求接收的值填充它們。這可能嗎?

回答

0

KieContainer與動態模塊一起使用時,會將所有裝載的JAR裝入獨立的ClassLoader中。因此,您可以將模型放入自己的jar中,並將它們指定爲對正在部署的項目的maven依賴項。如果您使用kie-ci,它將解析傳遞依賴關係並從它們構建一個ClassLoader。

在外部,您可以使用反射來訪問該CassLoader中的pojos,或者您可以有一個調用靜態初始化方法的初始化規則。靜態初始化方法是jar或任何依賴jar中的任何類。

我們還沒有的是KieContainers和KieSession通過回調自動化某些事情的生命週期。這絕對是我們需要研究的內容,我期望它會在下一個版本(6.2版本之後)發佈。

+0

謝謝馬克,我可能會反思下去,因爲它更適合我的用例 – Christos 2015-01-12 10:25:18

0

請參閱文檔「規則語言參考」一章的「類型聲明」部分。從那裏取一個簡單的例子:

declare Address 
    number : int 
    streetName : String 
    city : String 
end 

您可以使用新的,使用getter和setter方法等

你必須轉型,從請求到該對象代碼對象。

+0

謝謝你將調查。 – Christos 2014-12-05 19:03:54