| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Взаимодействие двух JSF-приложений |
| Автор: Maverick 28.5.2007, 14:59 |
| Уважаемые, помогите советом... Существуют два отдельных приложения JSF+EJB3... Для примера, БАНКИ и АДРЕСА... В одном существует сущность Банкир, в котором используется сущность Адрес... И так есть JSF- форма для редактирования данных по Банкиру, в котром есть поле с демонстрацией текущего Адреса банкира... поле снабжено кнопкой для редактирования Адреса, которое должно переводить нас на форму редактирования Адреса... Каким образом организовать взаимодействие? Необходимо: 1) Передавать в форму Адресов идентификатор текущего адреса.. 2) В случае отсутствия Адреса - передавать сигнал об этом и впоследствии предать форме Банкира идентификатор нового адреса... 3) Осуществлять слежение за маневрами пользователя для корректного возвращения в исходную страницу... Я пошел простым путем - формирую URL с параметрами http://бла-бла?parameter=1... но это меня пока не вполне устраивает... возникают вопросы: каким образом, можно установить с какой страницы я пришел на эту JSF-страницу? каким наиболее простым образом можно эти параметры вытащить из URL текущей страницы? каким образом можно указать правильный контекстный URL? поскольку абсолютные адреса слишком неудобны... И вообще правильно ли я поступаю...?? |
| Автор: AntonSaburov 28.5.2007, 17:12 |
| Я честно говоря не сталкивался с такой ситуацией - запоминать страницу, на которую надо вернуться. Варинатов я виже несколько: 1. Можно сделать нечто вроде параметра BACK на странице, который будет представлять из себя просто URL. Каждый сервлет, который будет вызывать какую-то страницу фомирует также и такую ссылку. 2. Запоминать URL в сессии для пользователя и делать специальную команду BACK на нужной странице. При вызове команды извлекать необходимую информацию из сессии и отправляться туда, куда сказано Наверняка можно придумать что-то еще. |
| Автор: ekr 28.5.2007, 17:31 | ||||
можно проанализировать http-заголовок http-referer
организация взаимодействия независимых приложений - всегда геморрой, т.к. они не разделяют общие серверные ресурсы (jsf backing beans, http sessions, etc). мораль - связать их можно или как ты делаешь, по клиентскому слою (параметры), или по общему серверному ресурсу (т.к. приложения разные, они ничего не разделяют, в т.ч. ServletContext), например, данным в БД. FYI: Для асинхронных веб-сервисов часто применяется хранение состояния клиента в БД. |
| Автор: batigoal 28.5.2007, 19:00 |
Этот метод не дает полной гарантии. |
| Автор: YuG 29.5.2007, 09:34 |
| Мысли вслух: всю дополнительную информацию (URL и проч.) сохранять в каком-нибудь Map'e. А сам Map хранить в application scope. Ну а в request'e передавать параметром key нашего Map'a. (понятно, что нужен дополнительный класс-manager для работы с этой табличкой - добавлять данные, очищать мусор и проч.) |
| Автор: Maverick 29.5.2007, 10:00 | ||
ну так этот класс-manager - это ведь EJB? Более легкого способа работы с таблицей я не знаю... |
| Автор: YuG 29.5.2007, 13:59 |
| Maverick, нет, под таблицей я имел ввиду Map ) И EJB в моем простейшем варианте не нужны. |
| Автор: Maverick 29.5.2007, 15:15 |
| При переходе из приложения в приложение - идентификатор сессии измениться? И вообще - как правильно работать в JSF с сессией... ну хотя бы получить ее идентификатор?? |
| Автор: ekr 29.5.2007, 16:09 | ||||
насколько я понял из постановки задачи, приложения разворачиваются как или независимые war или ear. в этом случае они не разделяют servletcontext.
ejb для связи.... попробуй создать на базе одного ejb- или web-приложения фасад поверх всех твоих банкиров и пр. думается, это будет крайне неплохой путь. |
| Автор: Maverick 29.5.2007, 16:40 | ||||
абсолютно верно... отдельные ear...
нельзя ли развить мысль - чуть-чуть... торможу чего-то... |
| Автор: ekr 29.5.2007, 16:53 | ||
не волнуйся, и это пройдет )) смотри: вместо сцепки (не смейся, есть такой термин в теории языков программирования) двух приложений по внешним данным (вншн БД) или по параметрам (как ты вначале хотел) можно использовать design pattern фасад. что это значит: ты имеешь два независимых ejb-приложения (банкиры и чего-то там), и к ним у тебя два независимых клиента (web-apps). вместо двух этих независимых ты делаешь одно, которое будет взаимодействовать с обоими бинами. это и будет фасадом ) в нем у тебя уже таких проблем описанных тобой. не будет ) |
| Автор: Maverick 29.5.2007, 16:58 |
| неа... так не прокатит... дело в том, что адрес используется очень много где (около 20 приложений)... система общая из модульной превратиться в единую... будет одно гигантское приложение... тоже будет нерадостно.... |
| Автор: ekr 29.5.2007, 17:05 | ||||
отнюдь. ты деплоишь бин адреса как независимый jar-модуль и к нему останется доступ из остальных приложений. абсолютно независимых )
ок, смотрите сами ) фишка паттерна фасад как раз в том, что приложения так и остаются независимыми, а эта надстройка - фасад - только как точка входа для клиентов. там изнес-логику сложную вообще можно не внедрять, только интерфейсную, для людишек ))) |
| Автор: Maverick 29.5.2007, 17:07 | ||
да... все EJB будут отдельными jar... но web-приложение-то будет одно? |
| Автор: ekr 29.5.2007, 17:11 | ||
да. а что вас смущает? вынесите оттуда всю серьезную логику на слой бинов, и пусть их хоть 23 будет ) если так сделать, то можно будет это приложение как перчатки менять ) |
| Автор: COVD 29.5.2007, 17:18 |
| Типичный пример сервиса - сервис по обработке платежей через кредитную карту. Это как правило сервис, предоставляемый третьей стороной. Когда клиент должен оплатить услугу, он идет по ссылке на сайт сервиса. В ссылку в виде параметра вставляются 2 адреса, на которые сервис по завершению процедуры перенаправит клиента - один адрес для успешного завершения, другой - для сообщения об ошибке. Наверное, JSF компоненты тоже могут реализовать такой подход. |
| Автор: ekr 29.5.2007, 17:20 |
| COVD, все абсолютно верно ) как раз этот подход в самом начале форума и обсуждался (параметры). PS занимаешься online-платежами? |
| Автор: COVD 29.5.2007, 17:29 | ||
занимался когда-то |
| Автор: Zamuta 29.5.2007, 17:34 |
| Maverick, может это тебе поможет http://www.ibm.com/developerworks/ru/library/j-jtp07294/index.html# |
| Автор: ekr 29.5.2007, 17:46 |
| Zamuta, это немного не про обсуждаемую тему.... в статье описывается методики репликации сессии в кластерном решении между узлами кластера, чень специфическая шняга... |
| Автор: Maverick 4.6.2007, 13:09 |
| Короче тихий ужас... реализовал я EJB с полями типа "текущая страница", "предыдущая страница", "список параметров" по ключу "принципал"... подрубил его к готовым проектам... на выходе из страницы записываем параметры и откуда ушли... на другой странице записываем, где находимся и считываем параметры... Только, блин, JSF при выполнении правил навигации как-то странно это все отрабатывает.... Добавлено через 1 минуту и 7 секунд Если будут еще какие предложения - напишите, плиз... Любые идеи... |