Слюни: хранение правил в базе данных - PullRequest
13 голосов
/ 09 декабря 2010

В настоящее время я сохраняю все файлы правил в файловой системе (их существует множество версий) и загружаю их различные версии в память при запуске. Я хотел бы перейти к хранению файлов drools в базе данных, и мне было интересно, есть ли какое-либо решение или дополнение для Drools, которое облегчает это, или я должен создать свой собственный?

Спасибо.

Ответы [ 5 ]

8 голосов
/ 06 января 2011

Да, это можно сделать. Все, что вам нужно, это возможность получить InputStream. В моем случае я использую свой собственный класс JPA RulePackage для сохранения источника правила в виде байта [], но вы можете использовать прямое соединение JDBC для доступа к полям BLOB / CLOB в вашей схеме БД , Важно также сохранить тип источника хранимых правил, он понадобится при сборке пакетов правил:

switch(rulePackage.getRuleSourceType()) {
  case DRL:
    kbuilder.add( ResourceFactory.newByteArrayResource(rulePackage.getSource()), ResourceType.DRL);
    break;
  case EXCEL:
    kbuilder.add( ResourceFactory.newByteArrayResource(rulePackage.getSource()), ResourceType.DTABLE, excelConfig);
    break;
  case CSV:
    kbuilder.add( ResourceFactory.newByteArrayResource(rulePackage.getSource()), ResourceType.DTABLE, csvConfig);
    break;
  default:
    throw new Exception("Rule package '" + rulePackage.getName() + "' has unknown type");
}

Вы можете использовать метод newInputStreamResource, если он более применим в вашем случае:

   case DRL:
    kbuilder.add( ResourceFactory.newInputStreamResource(new StringInputStream(myDrlAsString)), ResourceType.DRL);
    break;

или

   case DRL:
    kbuilder.add( ResourceFactory.newInputStreamResource(new ByteArrayInputStream(myDrlAsByteArr)), ResourceType.DRL);
    break;

Нечто подобное.

4 голосов
/ 25 января 2013

Да, вы можете сделать это, создав пакеты правил (файлы .pkg). Это скомпилированная / двоичная форма текстовых правил.

вы можете указать имя файла пакета при создании KnowledgeBuilder, а также частоту обновления правил (скажем, 30 секунд).

Используйте Guvnor для преобразования текстовых правил в файлы .pkg. сохраните этот файл в папке, где приложение может получить к нему доступ.

Пожалуйста, вернитесь, если вам нужны примеры кода.

3 голосов
/ 10 декабря 2010

Что ж, возможно, вы захотите взглянуть на Гувнора как на способ управления правилами.

Но в общем, нет, вам придется написать свой собственный.

Имейте в видувам не нужен промежуточный файл, вы можете прочитать строковое представление правила из БД и просто скомпилировать его.

1 голос
/ 10 декабря 2010

Я тоже сталкивался с таким же сценарием. Я сохранил все файлы правил в базе данных.

При загрузке правил при запуске приложения я получил правила из базы данных и сохранил их во временной папке для компиляции и помещения в базу правил.

Если ваше правило изменяется во время работы приложения, обновите измененное правило в базе правил таким же образом.

0 голосов
/ 05 мая 2015

Когда вы приступаете к хранению нескольких версий правил в хранилище данных, вы действительно ищете функции управления бизнес-правилами (BRMS) в Guvnor (в Drools 5.x) или в Drools-WB / KIE-WB.рабочие места в Drools 6.0.

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

...