Хобрук: Ваш путь к мастерству в программировании

Приложение Drools Kie без Maven

Как разработчик я хочу создать проект Maven и создать исполняемое автономное приложение JAR. (Без весенней загрузки)

В процессе разработки и сборки я хочу добавить артефакт Drools Kie в качестве зависимости

<dependency>
 <groupId>com.mycompany</groupId>
 <artifactId>mydrools</artifactId>
 <version>[1.0.0,)</version>
</dependency>

создайте мое приложение как исполняемый файл Jar и запустите его. В моем приложении есть код для вызова движка Drools:

KieSession kSession = kContainer.newKieSession();
kSession.insert(myBean);
kSession.fireAllRules();

Прежде всего, пока я развертываю свое приложение на производстве:

  • Я не хочу устанавливать Maven на свой рабочий сервер
  • Я не хочу, чтобы мое приложение сканировало локальный или удаленный репозиторий Maven.
  • Я хочу, чтобы мое приложение периодически автоматически сканировало новую версию моего артефакта Drools Kie без какой-либо ссылки на репозиторий Maven, просто просматривая файловую систему

Я пробовал с

String fileName = System.getenv("HOME") + "/libs/mydrools-1.0.0.jar";
File file = new File(fileName);
KieRepository kieRepository = ks.getRepository();        
KieContainer kContainer = ks.newKieContainer(ks.newReleaseId("com.mycompany", "mydrools", "1.0.0"));
kieRepository.addKieModule(ks.getResources().newFileSystemResource(file));
KieScanner kScanner = ks.newKieScanner( kContainer );
kScanner.start( 10000L );

Загрузка JAR работает нормально, но мне кажется, что я также вынужден настроить хотя бы минимальный репозиторий Maven (папка ~ / .m2 и файл settings.xml). Я получаю кучу ошибок из-за плагина org.apache.maven и связанных с ним классов.

Конечно, я не хочу, чтобы моя производственная среда полагалась или зависела от какой-либо конфигурации Maven. Я просто хочу запустить JAR с другим JAR (например, libs / mydrools-1.0.0.jar) в качестве зависимости и, возможно, динамически перезагрузить эту зависимость, пока я обновляю libs / mydrools-1.0.0.jar.

В основном мне нужно полностью отключить внутренний плагин Drools Kie Maven (офлайн).

Как это можно сделать с помощью Drools 6.2.0.Final?

Обновить

Этот вопрос строго связан с

Использование архитектуры Maven Drools 6 полностью в автономном режиме

http://lists.jboss.org/pipermail/rules-users/2014-June/036245.html


  • Я полагаю, что сканирование файловой системы лучше всего выполнять с помощью java.nio.WatchService, чтобы увидеть, был ли развернут новый KieBase. Сборка (т.е. компиляция Drools) должна выполняться в среде разработки. (Я не вижу веских причин запускать движок Drools во время разработки и сборки.) 13.03.2015
  • Хорошая причина в том, что использование KieScanner - поэтому динамическая перезагрузка артефакта - это способ обновить движок без прерывания обслуживания (без остановки, повторного развертывания и перезапуска). Но никто не позволит производственному приложению просматривать (даже внутренний) репозиторий Maven: я не хочу, чтобы Drools Kie перезагружал артефакты, которые я мог не контролировать (например, org.apache. *). Я хочу, чтобы Ки перезагружал только мой собственный артефакт Drools, ничего больше и без Maven. Просто файл Jar. 15.03.2015
  • Обратите внимание, что запуск Drools Engine означает, что вы запускаете сеанс, созданный из базы знаний, применяя правила к объектам, вставленным как факты. Итак: зачем запускать движок во время разработки и сборки? 15.03.2015
  • Хорошо, мое описание неточно, это два отдельных шага: - разработка и сборка и развертывание: мой артефакт Drools является зависимостью Maven для сборки (и позже) развертывания где-то моего исполняемого файла Jar - мой исполняемый файл Jar будет запускать движок Drools 15.03.2015
  • Затем мы возвращаемся к моему первоначальному утверждению: используйте WatchService, чтобы узнать, был ли развернут новый KieBase. - Хотя насчет отсутствия перебоев в обслуживании я не уверен. Новый KieBase - это полностью новый набор правил, заменяющих, добавляющих, удаляющих правила. Как это должно работать с государством во всех формах, основанном на фактах, повестке дня и Механизме? 15.03.2015
  • Да, это, конечно, отдельная история. Теперь мы хотим начать с набора правил без сохранения состояния, чтобы движок ничего не запомнил о предыдущих фактах и ​​правилах. 16.03.2015

Ответы:


1

Ответ - нет. KIE 6. * (и 7) имеет встроенный maven, класс KieScanner использует maven для поиска обновлений. Сканер будет работать лучше, если в ReleaseId вы укажете диапазон версий, например. [1.0.0,)

Моя компания находится в процессе развертывания приложений на основе KIE в производственной среде. Мы настраиваем репозиторий Artifactory в PROD, также будет репозиторий maven.

Вы можете по существу отключить часть maven, не используя KieScanner, вместо этого используйте getKieClasspathContainer () для получения контейнера KIE. Однако вы не будете выполнять динамическое обновление правил.

KIE также предоставляет сервер выполнения, который помещает правила в REST API. Правила Execution Server также можно обновить через maven.

13.05.2016
  • Ваш ответ подтверждает наши опасения и причину, по которой мы хотим перейти от решения Maven / external jar к полностью RESTful-приложению (которое, кстати, предоставляется в последних версиях Drools) 15.05.2016
  • Поставляется ли KIE 7. * со встроенным Maven? 02.02.2018

  • 2

    С архитектурной точки зрения у вас есть три модели развертывания правил:

    Модель №1 - это режим динамического обновления правил. В версии 5.3 она перетаскивала скомпилированные классы через http, теперь в 6 и 7 она использует maven в качестве транспорта, поскольку обеспечивает управление версиями и на сегодняшний день является наиболее продуктивным механизмом управления версиями артефактов. и транспортный инструмент. В этом режиме у вас есть производственное приложение (jar или war), которое извлекает правила (через эфир maven через kie-ci) из репозитория maven (при желании вы можете иметь специальный репозиторий maven для PROD). Если вы используете эту модель, вам понадобится kie-ci в качестве зависимости, и она волшебным образом будет использовать maven под капотом.

    Вы можете использовать сканер и настроить maven settings.xml, у которого нет <servers>, и поэтому он должен извлекать только из папки ~/.m2 рабочего сервера, что позволяет развернуть файловую систему сервера и использовать сканер OOTB без какой-либо опасности это тянет извне.

    Модель № 2 - это неизменяемая модель правил. Итак, концепция заключается в том, что вы встраиваете правила в приложение как ресурс, их нельзя обновлять. Это хорошо работает с неизменяемыми развертываниями, такими как конвейеры компакт-дисков и развертывания контейнеров / докеров, которые должны проверять состояние приложения, как оно есть прямо сейчас. Сказав, что контейнеры не запрещают возможность динамического обновления, я говорю с чисто архитектурной точки зрения. Для этого опустите kie-ci из deps и используйте getKieClasspathContainer () (как сказал кто-то) для загрузки правил из папки ресурсов, и он никогда не будет пытаться обновить без повторного развертывания приложения.

    Модель № 3 - это централизованный "серверный" режим (и я добавляю его только для полноты из-за ограниченного использования). Здесь вы централизованно выполняете правила вне среды выполнения вашего приложения, что стало популярным благодаря механизму правил (и маркетингу) IBM. Однако для большинства случаев использования он неэффективен, за исключением приложения с управляемым типом службы, где требуется перекрестная оплата. Он не масштабируется естественным образом вместе с приложением, сущности должны де / сериализоваться по сети, поэтому производительность низкая и т. Д., Однако вы получаете централизованное ведение журнала.

    26.10.2018
  • В Модели № 2 исключение kie-ci из deps было для меня спасением жизни. 16.02.2021
  • Новые материалы

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

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

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.