Как сравнить XML с правилами из БД и создать собственный шаблон механизма правил Drools DRLJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как сравнить XML с правилами из БД и создать собственный шаблон механизма правил Drools DRL

Сообщение Anonymous »

Я новичок в Drools. Поэтому мне нужна помощь с этим сценарием. Пожалуйста, задавайте мне как можно больше вопросов, если я что-то пропустил.
У меня есть этот XML:



EA

02

DE
US



Мне нужно сравнить этот XML с правилами БД следующим образом:
rule_mapping_table
RuleAttribute   XmlAttribute
==============================
eventType       parentList.trackCode
originCountry   parentList.shipperCountryCode
destCountry     parentList.recipientCountryCode
splHandCd parentList.specialGrp.handlingCd

Необходимо выбрать весь атрибут ruleAttribute и сравнить его с таблицей правил:
rule_table
RuleId RuleAttribute Condition Value ParcelValue
=========================================
1  eventType      equals    EA       1000
1  originCountry  equals    US       1000
1  destCountry equals DE      1000
1  splHandCd notEquals 01  1000
2 eventType equals AA 1105

Все соответствующие правила/записи должны быть возвращены и помещены в собственный файл DRL.
template "tmp1"

rule "@{id}"
dialect "mvel"
when
@{ifcondition};
then
@{thencondition};
end

end template

Например:
rule "1"
when
SomeEvent(parentList.trackCode == "EA"
&& parentList.recipientCountryCode == "DE"
&& parentList.shipperCountryCode == "US")
then
System.out.println("========== Rule kicked in is No. 1 =============");
shipment.setAmount(1000);
end

Что я пробовал до сих пор:
public SomeEvent getRules(SomeEvent someEvent) {
List ruleAttributes = new ArrayList();
rulesRepo.findAll().forEach(ruleAttributes::add);
ObjectDataCompiler compiler = new ObjectDataCompiler();
String generatedDRL = compiler.compile(ruleAttributes, Thread.currentThread().getContextClassLoader().getResourceAsStream(DroolsConfig.CONTRACT_EVENT_RULES_DRL));
KieServices kieServices = KieServices.Factory.get();

KieHelper kieHelper = new KieHelper();

//multiple such resources/rules can be added
byte[] b1 = generatedDRL.getBytes();
Resource resource = kieServices.getResources().newByteArrayResource(b1);
kieHelper.addResource(resource, ResourceType.DRL);

KieBase kieBase = kieHelper.build();

KieSession kieSession = kieBase.newKieSession();
kieSession.insert(someEvent);

kieSession.fireAllRules();
kieSession.dispose();

return someEvent;
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... e-engine-t
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»