Лучшие практики использования Drools Expert / Flow в веб-приложении - PullRequest
9 голосов
/ 29 сентября 2010

В настоящее время я учу себя Drools Expert / Flow, а также GWT.Я хочу использовать Drools Flow в качестве шины событий / команд и механизма бизнес-правил для достижения слабой связи между различными частями приложения.

До сих пор я получал и Expert, и Flow, работающие из моих тестовых случаев, ноМне трудно понять, как наилучшим образом реализовать потоки в веб-контейнере.

Должен ли я поместить все строительные леса в EJB сеанса без сохранения состояния и позволить каждому запросу настроить все с нуля, а затем запустить потоки / правила?Это кажется пустой тратой ресурсов для меня.Могу ли я вместо этого хранить один сеанс знаний и обмениваться этими сеансами между веб-запросами, обращаясь к нему одновременно, масштабируется ли этот сценарий и является ли он потокобезопасным (я полагаю, нет)?Является ли объединение сессий знаний хорошей идеей?

Что я спрашиваю, так это в основном, если есть какие-либо лучшие практики для вышеперечисленного?Документация и примеры, хотя в остальном довольно хорошие, не ясны по этим конкретным вопросам.

Я читал кое-что о Drools Grid, не уверен, решит ли это мою проблему, и кажется, что она находится в разработке.Если мои вопросы неясны, скажите, пожалуйста.

БР Магнус

1 Ответ

4 голосов
/ 21 декабря 2010

База знаний является поточно-ориентированной и имеет большой вес (ее создание недешево), поэтому вы, вероятно, захотите сохранить ее в области приложения.

В настоящее время большинство людей склонны использовать архитектуру без состояния и создавать сеанс StatelessKnowlegdeSession (поток, небезопасный и дешевый в создании) для каждого веб-запроса, например, в сессионном компоненте без состояния (или в компоненте beam / CDI, или в весеннем компоненте) , Однако, если вы обладаете мощью EJB с сохранением состояния, может быть полезным продолжать использовать один StafefulKnowlegdeSession для обработки всех запросов в одном и том же диалоге.

Я не уверен, является ли StatefulKnowlegdeSession потокобезопасным (так не думаю), поэтому я сделал вопрос: https://issues.jboss.org/browse/JBRULES-2842

...