JSF 2.0 - возможности областей применения бобов - PullRequest
3 голосов
/ 02 апреля 2011

Я отправил пару вопросов, но еще не получил ответа. Все, что я здесь заявляю, касается JSF 2.0. * В основном.

Типичный компонент содержит информацию, отображаемую на странице. Обычное веб-приложение для бизнеса - это набор страниц, каждая из которых включает состояние просмотра-редактирования-сохранения, представленное несколькими страницами в формате xhtml. Поэтому мы создаем единый компонент для управления этими состояниями. Но есть несколько проблем, которые я опишу в ближайшее время:

1) Каждая страница представляет собой отдельное представление, что вынуждает вас поместить боб в область действия сеанса . Это приводит к взлому хранилища сессий.
2) Передача параметров между представлениями . Для редактирования документа необходимо знать идентификатор документа и / или другой набор объектов. Размещение их в сеансе не является хорошим решением (раздутый сеанс антипаттерна).

До сих пор было предпринято несколько попыток исправить ситуацию.

a) t: saveState . Он делал свою работу много лет. Но сейчас мы от этого избавляемся. б) Шовный разговор . Это наложило так много проблем относительно момента, когда разговор умирает. Время ожидания не так просто установить, так как мы не знаем, как долго, например, бизнес-пользователь будет редактировать документ. Не решение для нас.
c) CODI (не пробовал) Кажется, это хорошая реализация JSR 299, и потенциально может решить все проблемы, но она так редко документирована и, поскольку является расширением, придерживается WELD, что является еще одним рамки, и мы просто хотим использовать всю мощь JSF.
г) пружинный поток . Ну, это очень хорошая структура, хорошо документированная, отличный контейнер IOC, область действия потока и все другие полезные вещи, которые она предоставляет, могут быть исправлением. Это решает проблему умножения табуляции (это моя формулировка, так что извините, если неясно, к чему я клоню). Представьте, что у нас есть страница редактирования, и вы просматриваете bean-объект в области видимости, и мы заполняем форму. Если пользователь открывает другую страницу в новой вкладке, GET-запрос запускается и бин выходит из области видимости. Веб-поток может распознать такую ​​проблему и запустить новый поток, если открыта новая вкладка.

(продолжение в веб-потоке) Но оно монолитно и заставит нас переписать весь проект. Да, я знаю, что он поддерживает JSF, и я немного потестировал и проверил его, чтобы посмотреть, отвечает ли он требованиям или нет. Это не из-за его безопасности. К сожалению, у нас нет ни времени, ни ресурсов, чтобы построить новый проект с нуля.

У нас почти закончились решения. JSF - это отличный фреймворк, тщательно протестированный и используемый во многих проектах. Но разработчики отказываются включать CDI в него.

Кто-нибудь может порекомендовать какое-либо решение проблемы редактирования-просмотра-сохранения с одним компонентом? Любой архитектурный совет будет очень полезен. Заранее большое спасибо.

Ответы [ 2 ]

5 голосов
/ 02 апреля 2011

Прежде всего: это скорее дискуссия, чем вопрос, поэтому никогда не будет четкого «да» или «нет» ... Всегда есть за и против, помимо объективных аргументов ( разработчикам не нравится это ); -)

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

Столкнувшись с почти идентичным сценарием более года назад, вот наша архитектура:

Java EE 6 с JSF 2.0, CDI (+ EJB 3 и JPA, но это выходит за рамки этого ответа).

  • ViewScoped Фасоль, по одному на просмотр (JSF ViewScope подключен к CDI с гранями шва 3)
  • ConversationScoped SFSB в качестве фасада на случай использования для бизнес-логики, границы транзакции / безопасности (фасад ссылается на 1 - n контроллеров представления)
  • RequestScoped Услуги (без сохранения состояния для повторного использования для других клиентов (через различные фасады)

Все это работает как брелок, практически без клеевого кода между слоями.

1) Каждая страница выглядит иначе заставляя вас поместить боб в Объем сеанса. Это берет свое раздувание хранилища сессии.

2) Передача параметров между представлениями. Для редактирования документа необходимо знать идентификатор документа и / или другого набор объектов. Размещение их в сессия не является хорошим решением (раздутый сеанс антипаттерна).

Я абсолютно с тобой. Вот почему мы используем разговоры.

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

С 3-летним опытом производства Seam 2/3, я уверяю вас, что это абсолютно управляемо. Разговор подходит для использования как перчатка, и через некоторое время вы больше не хотите больше ничего использовать. И уж точно не сеанс; -)

в) CODI (не пробовал) Кажется, это хорошая реализация JSR 299 и, Потенциально может решить все проблемы но это едва ли документировано и, будучи продолжением, придерживается СВАРКА, которая является еще одной основой и мы просто хотим использовать всю мощь JSF.

Если вы хотите использовать CODI, вам не нужен Weld, оба являются реализациями JSR 299. На момент написания статьи Weld гораздо лучше документирован и используется чаще. Я даже не знаю, является ли CODI окончательным?

г) Весеннее течение. Ну это очень хорошая основа, обильно документированная, отличный контейнер МОК, объем потока и все остальные приятные мелочи быть лекарством Это решает умножить вкладку проблема (это моя формулировка, так что прости мне, если неясно, что я получаю в). Представьте, что у нас есть страница редактирования и рассмотрите объемный боб, и мы заполняем форма. Если пользователь открывает другую страницу в новой вкладке запускается запрос GET и боб выходит из области видимости. Веб поток может распознать такую ​​проблему и запускает новый поток, если новая вкладка имеет был открыт.

Проблема мультитаб также решается с помощью Seam / Weld / CODI. Это так девяностых ...

У нас почти закончились решения. JSF является отличной основой, была испытано и использовано во многих проекты. Но разработчики отказываются включите в него CDI.

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

Все, что я могу вам сказать: мне тоже пришлось убедить моих коллег использовать CDI. Я сделал это с рабочим прототипом в описанном макете, и теперь, год спустя, все в команде довольны нашим технологическим стеком ... :-)

Подводя итог этому довольно длинному ответу:

Java EE 6 является отличным технологическим стеком для такого рода приложений, и вы должны попробовать его. Описываемые вами проблемы не только разрешимые с Java EE 6, но и скорее проблемы, которые команда разработчиков имела в виду при разработке API.

Не стесняйтесь задавать дополнительные вопросы / сомнения, если хотите.

1 голос
/ 19 августа 2011

Просто общее примечание:

OpenWebBeans , Сварка и CanDI являются реализациями JSR-299 , таким образомреальные контейнеры, обеспечивающие функциональность управления контекстными экземплярами, контекстами, событиями и т. д.

CODI - это портативное расширение JSR-299 (например, Seam3 is), который будет работать на любом контейнере CDI.Вы можете использовать CODI во всех CDI-контейнерах, упомянутых выше.

CODI в основном предоставляет несколько разных вещей:

1.) Модуль ядра, который содержит полезные вещи, такие как @ProjectStageActivation (включение / отключение)bean-компоненты на основе JSF ProjectStage), сообщения для инъекций,

2.) JSF поддерживают модули с множеством дополнительных областей, таких как @ViewAccessScoped, @WindowScoped (bean per window), @ConversationGroup, тип safe @View navigation, CDI@PhaseListener и т. Д.

3.) JPA @ Поддержка транзакций.Это обеспечит вам постоянство без необходимости использования EJB

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