Существует набор примеров в сети того, как загрузиться, Пускает слюни набор правила DRL. Однако я, может казаться, не нахожу инструкций или примеров того, как загрузить Таблицу решений в формате Excel с помощью JSR94 API.
Кто-либо знает, как сделать это? Если так, Вы могли предоставить простой пример кода?
Вот демонстрационная часть кода, с которым я работаю ниже. Я отметил область, что я подозреваю, что некоторые свойства должны получить настройки и передали в как второй параметр к createRuleExectuionSet () (Хотя это не может быть решением).
package com.sample;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.rules.RuleRuntime;
import javax.rules.RuleServiceProvider;
import javax.rules.RuleServiceProviderManager;
import javax.rules.StatelessRuleSession;
import javax.rules.admin.LocalRuleExecutionSetProvider;
import javax.rules.admin.RuleAdministrator;
import javax.rules.admin.RuleExecutionSet;
import org.drools.jsr94.rules.RuleServiceProviderImpl;
/**
* This is a sample class to launch a decision table.
*/
public class DecisionTableTestJsr94 {
// URL to the Decision Table file (via the classpath)
private static final String DECISION_TABLE_PATH = "/rules/Sample.xls";
// An arbitrary URI to identify the rule set
private static final String BIND_URI = "uri://fake/bind/uri";
public DecisionTableTestJsr94() throws Exception{
// Initialize the needed services
RuleServiceProviderManager.registerRuleServiceProvider(RuleServiceProviderImpl.RULE_SERVICE_PROVIDER, RuleServiceProviderImpl.class);
RuleServiceProvider ruleServiceProvider = RuleServiceProviderManager.getRuleServiceProvider(RuleServiceProviderImpl.RULE_SERVICE_PROVIDER);
RuleAdministrator ruleAdmin = ruleServiceProvider.getRuleAdministrator();
LocalRuleExecutionSetProvider ruleExecutionSetProvider = ruleAdmin.getLocalRuleExecutionSetProvider(null);
// Read the decision table
InputStream rules = this.getClass().getResourceAsStream(DECISION_TABLE_PATH);
Map ruleProperties = new HashMap();
// ** (probably something needs to happen hear with a properties Map, but what? **
RuleExecutionSet ruleExecutionSet = ruleExecutionSetProvider.createRuleExecutionSet(rules, null);
// Add the rules
ruleAdmin.registerRuleExecutionSet(BIND_URI, ruleExecutionSet, null);
// Start the rule session
StatelessRuleSession ruleSession = null;
ruleSession = (StatelessRuleSession) ruleServiceProvider.getRuleRuntime().createRuleSession(BIND_URI, null, RuleRuntime.STATELESS_SESSION_TYPE);
// Create a domain object for the test
Message message = new Message();
message.setStatus(Message.HELLO);
System.out.println("Message is: '" + message.getMessage() + "'"); // should be null
// Run the object through the rules
List<Message> inputList = new ArrayList<Message>();
inputList.add(message);
ruleSession.executeRules(inputList);
// See if the rules modified the object
System.out.println("Message is: '" + message.getMessage() + "'"); // should have the appropriate message
}
public static final void main(String[] args) throws Exception {
new DecisionTableTestJsr94();
}
}
Я не думаю, что поставщик JSR-94 предоставляет реализацию таблицы решений - вам нужно использовать API таблицы решений для преобразования XLS в формат drl, который затем можно передать в вышеприведенный код.
Так что если вы используете SpreadsheetCompiler (пакет org.drools.decisiontables), это может сделать это для вас - к сожалению, это означает, что вы должны импортировать класс drools (не чистый JSR-94), так что это может нарушить цель.
В любом случае, JSR-94 api редко бывает очень полезным - есть причина, по которой он не продвинулся в качестве спецификации API. Вы могли бы реализовать "заглушки" для нескольких основных движков правил в меньшем количестве строк кода, чем используя JSR-94 (я сделал это!).
Единственный раз, когда это было полезно для меня, это когда я писал инструмент тестирования, который работал как для JRules, так и для Drools (это было полезно в том случае, потому что я имел дело только с данными - не с самими правилами - в вашем вышеприведенном коде - "подключаемость" JSR-94 к другому движку правил бесполезна - если бы вы перешли на что-то другое, ваши правила все равно пришлось бы переписывать).
Удачи!