Можно ли настроить OFBiz для работы в качестве единого монолитного веб-приложения?

OFBiz по умолчанию работает как набор небольших веб-приложений, каждое из которых имеет собственный фронт-контроллер. Веб-приложения OFBiz обычно зависят от множества общих модулей. Как правило, модули специального назначения или горячего развертывания в конечном итоге зависят практически от всех модулей в framework и приложениях... со встроенным контейнером все библиотеки переходят в загрузчик классов совместно используемой библиотеки Catalina, но если ofbiz необходимо развернуть в другом контейнере, простого способа просто не существует. единственные варианты я считаю

  1. package ofbiz как EAR с EAR/lib или EAR/APP-INF/lib, чтобы все веб-приложения имели доступ к общему набору ресурсов пути к классам на уровне EAR. Обычно config каждого модуля, lib и все важные файлы ofbiz-$module.jar.
  2. каждое веб-приложение упаковывает каждый из необходимых jar-файлов в свой собственный WEB-INF/lib... слишком много дублирования, а также в некотором смысле увеличивает объем файловой системы
  3. используйте путь к классу системы приложений вместо папки catalina shared.lib, что означает, что JVM должна быть выделена для ofbiz, поскольку в противном случае ее jar-файлы будут мешать другим одноуровневым развертываниям и, возможно, даже самому контейнеру, обычно таким вещам, как XML, XSL, STAX apis и т.д..

учитывая, что ofbiz загружает большинство ресурсов, используя файловую систему (ofbiz.home + component://). К чему веб-приложению действительно нужен доступ в обычном контексте сервлета, так это

  • контроллер.xml
  • ресурсы classpath — в различных файлах ofbiz-$module.jar в shared.lib. как правило, config, lib каждого модуля и все важные файлы ofbiz-$module.jar
  • импортированные (component://) ресурсы веб-приложения, такие как другие controller.xml для различных модулей. наиболее важным является файл framework/common/webcommon/WEB-INF/controller.xml, который обеспечивает стандартную реализацию безопасности, такую ​​как checkLogin и autoLogin....

Мне было интересно, можем ли мы каким-то образом упаковать несколько веб-приложений в одно монолитное веб-приложение, используя пространство имен переднего контроллера, чтобы война сопоставлялась с одним корневым содержимым, например, / (ROOT на tomcat ) и /content, /webtools, /catalog, /ecommerce и т. д. – это скорее просто пространства имен/подконтексты URL-адресов. чем отдельные веб-приложения. framework/common/webcommon/WEB-INF/controller.xml может стать корневым контроллером для / (ROOT в tomcat) и предоставить checkLogin, autoLogin и т. д. для всех веб-приложений без необходимости импорта каждым контроллером этого контроллера. XML

Это позволило бы нам просто использовать модель развертывания, когда мы хотели бы перейти к другим контейнерам, таким как, скажем, weblogic, jboss и др., где нам было бы лучше создать одно веб-приложение со всеми его зависимостями, аккуратно упакованными в его WEB-INF. /lib, чтобы он мог сосуществовать с другими развертываниями в одном контейнере, не мешая их зависимостям и их версиям...

Я полагаю, что у struts было такое модульное пространство имен, где мог быть struts.xml корневого уровня (в нашем случае controller.xml), и каждый модуль был бы папкой со своим собственным модулем /struts.xml или модулем /struts-module.xml и т. д. ...

я лично чувствую, что это было бы полезно .. я недостаточно думал о недостатках. их может быть много? я честно не знаю. Я также не уделял должного внимания темам. Разработчики явно не хотели бы видеть какие-либо изменения в способе размещения или организации кода.. Так что с некоторыми незначительными? :) изменений в основном коде MVC в фреймворке, мы могли бы потенциально поддержать этот тип развертывания, используя простой скрипт сборки ant, который превращает веб-приложения-кандидаты в объединенное монолитное веб-приложение...

я надеялся увидеть дебаты по достоинствам этой идеи... я даже был бы готов потратить некоторое время на выполнение этой работы, если бы я получил какое-то направление и вклад..


person arajashe    schedule 03.11.2013    source источник


Ответы (2)


Рассматривали ли вы использование шеф-повара для развертывания Ofbiz вместо этого?

Я написал следующую кулинарную книгу, чтобы продемонстрировать, как это может работать:

person Mark O'Connor    schedule 03.11.2013

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

Одним из ограничений является плоское пространство имен для запросов в файлах controller.xml, и то, что вы описываете, будет лучшим способом справиться с этим (используйте другую точку монтирования ControlServlet для каждого приложения компонента OFBiz). Для этого могут потребоваться некоторые изменения кода для написания URL-адреса (тег @ofbizUrl FTL и базовый код, используемый в другом месте). Также потребуется немного работы, чтобы написать цель ant или что-то еще для создания файла WAR, извлечения всех веб-приложений из различных компонентов (или только тех, которые нужны), написания объединенного файла web.xml и т. д. и т. д.

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

Одной из проблем, связанных с внесением этого и многих подобных изменений в OFBiz, является большая база кода, большая база пользователей и несколько большая группа коммиттеров с разными мнениями по подобным вещам. По этим и другим причинам многие идеи по улучшению OFBiz не могут быть легко реализованы там, и именно поэтому я начал проект Moqui Framework в 2010 году.

Moqui развертывается с помощью одного файла WAR и может иметь внешний или встроенный каталог среды выполнения, чтобы упростить развертывание в службах хостинга WAR, таких как AWS ElasticBeanstalk, а также в контейнерах сервлетов, таких как Apache Tomcat. Файл WAR также представляет собой исполняемый файл JAR, использующий встроенный контейнер сервлетов Winstone для упрощения разработки и автоматизированного тестирования. Подробнее о запуске и развертывании Moqui можно узнать здесь:

http://www.moqui.org/framework/docs/RunDeploy.html

Кстати, это одна из сотен идей по улучшению OFBiz, вошедших в Moqui Framework и отдельный проект с моделью данных и сервисами (Mantle Business Artifacts). Общая информация о нем здесь:

http://www.moqui.org/

person David E. Jones    schedule 08.01.2014
comment
спасибо за ваше мнение Дэвид. у меня было подозрение, что я просил нетривиальное изменение. Никогда нельзя недооценивать гениальность сообщества, так что я попытал счастья :) Я слежу за вашим проектом moqui и с нетерпением жду, как он будет развиваться и найдет более широкое признание. Вы бы назвали эту постановку готовой на сегодняшний день? - person arajashe; 17.01.2014
comment
Да, Moqui в настоящее время готов к производству (некоторое время, особенно с конца 2012 года). Однако вы правы в том, что он до сих пор не используется широко, а более полные бизнес-артефакты, построенные на его основе, появились гораздо позже, первый выпуск состоялся всего несколько месяцев назад. - person David E. Jones; 21.01.2014