我對此感到茫然,似乎無法在文檔中找到答案。我正在觀察以下行爲。我有這樣的規則:口水加載會話似乎火規則
import function util.CSVParser.parse;
declare Passenger
@role(event)
@expires(24h)
end
rule "Parse and Insert CSV"
when
CSVReadyEvent($csv_location : reader) from entry-point "CSVReadyEntryPoint";
$p : Passenger() from parse($csv_location);
then
insert($p);
end
然後我就可以進入我的CSVReadyEvent
到我的會話和呼叫fireAllRules
並正確執行。它最終擊中了安全點,而且都很酷。
我然後重新啓動我的應用程序並加載像這樣的會議:
KieSession loadedKieSession = kieServices.getKieService().getStoreServices().loadKieSession(session.getId(), kieBase, ksConf, kieServices.getEnvironment());
基地和配置,我從我的kmodule.xml服用。
現在發生的情況是,沒有調用fireAllRules()
加載會話以某種方式觸發了所有規則。
我不明白unmarshalling觸發器如何規則執行,但這顯然是錯誤的。我已經執行了該規則,不應執行兩次。
在一個測試案例中(我的測試不會創建永久會話,因爲我只想要測試規則),我可以調用fireAllRules()
兩次,第二次不會觸發任何匹配的規則。我不確定會出現什麼問題,但持續會話似乎是以一種奇怪的方式加載的。或者會議的堅持不可靠,並忘記它已經執行了規則。
有沒有人在這裏面?我非常樂意分享任何代碼。
這裏是我的persistence.xml:
<persistence-unit name="org.jbpm.persistence.jpa" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>org.drools.persistence.info.SessionInfo</class>
<class>org.drools.persistence.info.WorkItemInfo</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.max_fetch_depth" value="30" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform" />
</properties>
</persistence-unit>
謝謝!
fireUntilHalt無法在持久會話上調用。我不一定需要使用事件。簡單地通過入口點插入似乎也會在加載時重新執行。 – pandaadb
如果你省略'聲明乘客/ @角色(事件)',你試過會發生什麼? – laune
嘿,是的,我刪除了所有事件聲明,並刪除了入口點。這是相同的行爲,會話被加載,然後再次執行規則的匹配。 – pandaadb