Совместное использование объектов между портлетами без использования переменных сеанса - PullRequest
0 голосов
/ 07 апреля 2011

В настоящее время у нас есть два вида портлетов, связанных с поиском. Первый - для запуска поиска, назовем его SearchPortlet, а второй - для форматирования и отображения результатов, назовем его ResultPortlet.

С течением времени код этих портлетов претерпел ряд мутаций, чтобы удовлетворить требования клиентов. И мы достигли точки, когда любое изменение в любом портлете приводит к открытию десятков отчетов об ошибках. Чтобы поделиться результатами поиска, портлеты используют переменные, установленные для объекта PortletSession . Это привело к тому, что всевозможные условные операторы были разбросаны повсюду в попытке управлять объектами в сеансе и убедиться, что они удалены, прочитаны или заменены в соответствующий момент.

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

  1. Параметры публичного рендеринга
  2. События портлета

Поскольку объект, которым я делюсь между экземплярами SearchPortlet и ResultPortlet, является объектом SearchResult, я предполагаю, что события портлета - моя лучшая ставка, учитывая, что параметры рендеринга являются просто объектами String.

С точки зрения требований - когда пользователь запускает поиск в SearchPortlet, SearchResults должны быть доступны для экземпляров ResultPortlet, которые могут находиться на той же странице или в других частях сайта. Кроме того, большое количество пользователей может выполнять поиск одновременно, и не должно быть совместного использования SearchResults между пользователями.

Пользователь также может дополнительно отфильтровать поиск, щелкнув ссылку «фильтр по ...» на странице результатов, но я не хочу, чтобы портлет результатов имел какое-либо отношение к выполнению поиска. Когда пользователь нажимает на ссылку для запуска другого поиска, портлет ResultsPortlet является целью действия (я думаю), поэтому, возможно, мне нужно сгенерировать событие для отправки в SearchPortlet, который затем может запустить поиск, прежде чем, в свою очередь, сгенерировать дальнейший набор результатов .. но какой SearchPortlet будет отправлено событие? Может быть, мне стоит вообще отказаться от идеи отдельных портлетов поиска и результата? Я пока не уверен.

Итак, наконец, мои вопросы таковы: мой взгляд на это до сих пор звучит? Я что-то пропустил? Есть ли какие-то ошибки, о которых вы думаете, мне нужно знать? Вы делали что-то подобное в прошлом, и если да, то как это прошло?

Заранее спасибо за любые отзывы.

РЕДАКТИРОВАТЬ: Другая соответствующая ссылка .

...