Как я загружаюсь, основанная на Excel Таблица решений с Пускает слюни с помощью JSR94?

Существует набор примеров в сети того, как загрузиться, Пускает слюни набор правила 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();
    }
}
5
задан jeffmaher 17 March 2010 в 20:54
поделиться

1 ответ

Я не думаю, что поставщик JSR-94 предоставляет реализацию таблицы решений - вам нужно использовать API таблицы решений для преобразования XLS в формат drl, который затем можно передать в вышеприведенный код.

Так что если вы используете SpreadsheetCompiler (пакет org.drools.decisiontables), это может сделать это для вас - к сожалению, это означает, что вы должны импортировать класс drools (не чистый JSR-94), так что это может нарушить цель.

В любом случае, JSR-94 api редко бывает очень полезным - есть причина, по которой он не продвинулся в качестве спецификации API. Вы могли бы реализовать "заглушки" для нескольких основных движков правил в меньшем количестве строк кода, чем используя JSR-94 (я сделал это!).

Единственный раз, когда это было полезно для меня, это когда я писал инструмент тестирования, который работал как для JRules, так и для Drools (это было полезно в том случае, потому что я имел дело только с данными - не с самими правилами - в вашем вышеприведенном коде - "подключаемость" JSR-94 к другому движку правил бесполезна - если бы вы перешли на что-то другое, ваши правила все равно пришлось бы переписывать).

Удачи!

4
ответ дан 14 December 2019 в 19:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: