Может ли решение таблицы не принять решение? - PullRequest
1 голос
/ 25 октября 2019

Я пытаюсь работать с решением таблицы в формате Excel (* .xlsx), электронной таблице. Я не хочу помещать свою электронную таблицу в ресурс папки моего приложения. Поэтому я создал папку: folder / Discount.xls.

Но когда я запускаю свою программу, исключение Файл не найден, оно выдает. Кажется, что файл электронной таблицы не может быть загружен, если он не находится в папке ресурсов, поэтому в банке.

Я хотел бы знать, могу ли я создать программу, когда электронную таблицу, для моих правил можно загрузитьдинамически? Я бы выбрал ту или иную таблицу для горячих изменений своих правил. Но я не знаю, возможно ли это.

У меня есть код:

    KieServices kieServices = KieServices.Factory.get();
    File file = new File("folder/Discount.xls");
    Resource resource = ResourceFactory.newFileResource(file);
    KieFileSystem kieFileSystem = kieServices.newKieFileSystem().write(resource);
    KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
    kieBuilder.buildAll();
    KieRepository kieRepository = kieServices.getRepository();
    ReleaseId krDefaultReleaseId = kieRepository.getDefaultReleaseId();
    KieContainer kieContainer = kieServices.newKieContainer(krDefaultReleaseId);
    KieSession kieSession = kieContainer.newKieSession();

Предыдущий код вызывает исключение времени выполнения:

Exception in thread "main" java.lang.RuntimeException: Cannot find KieModule: org.default:artifact:1.0.0

1 Ответ

0 голосов
/ 25 октября 2019

Я нахожу решение моей проблемы. Электронная таблица может находиться в другой папке, чем папка ресурса Java. Мой классовый тест выглядит следующим образом:

public class Main {

    private static InternalKnowledgeBase createKnowledgeBaseFromSpreadsheet() throws Exception {

        DecisionTableConfiguration decisionTableConfiguration = KnowledgeBuilderFactory.newDecisionTableConfiguration();
        decisionTableConfiguration.setInputType(DecisionTableInputType.XLS);
        KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        File file = new File("folder/Discount.xls");
        Resource resourceFile = ResourceFactory.newFileResource(file);
        knowledgeBuilder.add(resourceFile, ResourceType.DTABLE, decisionTableConfiguration);

        if (knowledgeBuilder.hasErrors()) {
            throw new RuntimeException(knowledgeBuilder.getErrors().toString());
        }

        InternalKnowledgeBase internalKnowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
        Collection<KiePackage> kiePackages = knowledgeBuilder.getKnowledgePackages();
        internalKnowledgeBase.addPackages(kiePackages);
        return internalKnowledgeBase;
    }

    public static void main(String[] args) {

        (new Main()).run();
    }

    public void run() {
        System.out.println("--- Start Code ---");
        StatelessKieSession session = null;

        try {
            InternalKnowledgeBase knowledgeBase = createKnowledgeBaseFromSpreadsheet();
            session = knowledgeBase.newStatelessKieSession();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Customer customer = new Customer(CustomerType.INDIVIDUAL, 1);
        System.out.println(customer.toString());
        session.execute(customer);
        System.out.println(customer.toString());
        System.out.println("--- End Code ---");
    }
}

Мой класс клиента (необходимо добавить метод получения, установки и скрыть метод toString):

public class Customer {

    public enum CustomerType {
        INDIVIDUAL, BUSINESS;
    }
    private CustomerType type;
    private int years;
    private int discount;

    public Customer(CustomerType individual, int years) {
        this.type = individual;
        this.years = years;
    }
}

Файл My * .pom содержит:

<dependencies>
    <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-ci</artifactId>
        <version>7.28.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-decisiontables</artifactId>
        <version>7.28.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.7</version>
        <scope>runtime</scope>
    </dependency>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...