Прежде всего: это скорее дискуссия, чем вопрос, поэтому никогда не будет четкого «да» или «нет» ... Всегда есть за и против, помимо объективных аргументов ( разработчикам не нравится это ); -)
В любом случае, позвольте мне начать с выяснения того, что ваша ситуация очень распространена для всех видов веб-приложений, а проблемы, которые вы описываете, еще более распространены для всех, кто думает о разработке веб-приложений с архитектурной точки зрения.
Столкнувшись с почти идентичным сценарием более года назад, вот наша архитектура:
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.
Не стесняйтесь задавать дополнительные вопросы / сомнения, если хотите.