Struts2 и несколько активных мастеров / рабочих процессов - PullRequest
1 голос
/ 02 сентября 2011

В настоящее время я работаю над приложением Struts2, которое объединяет мастера / рабочий процесс для получения желаемых результатов.Чтобы было понятнее, есть бизнес-объект, который изменяется на трех разных страницах (в основном с помощью вызовов AJAX).В данный момент я использую действие ModelDriven (которое распространяется на все действия, работающие с одним и тем же бизнес-объектом) в сочетании с перехватчиком Scope.Хотя это работает нормально, если пользователь обрабатывает данные только для одного бизнес-объекта за раз, если пользователь открывает мастер для разных объектов на нескольких вкладках (и мы все делаем это, когда мы хотим завершить работу быстрее), все станет грязно,в основном из-за того, что в сеансе хранится только один бизнес-объект.

Я прочитал несколько статей об использовании перехватчика области разговора ( основная статья ) и об использовании областиплагин ( здесь ).Однако оба подхода, похоже, имеют проблемы:

  • перехватчик области разговора не автоматически истекает при разговорах и не интегрируется должным образом со Struts2;
  • плагином Scopeне хватает надлежащей документации, и последняя сборка была сделана в 2007 году (и фактически включает в себя некоторые идеи, написанные Марком Менаром, когда он определяет свой перехватчик области разговора, хотя он не использует тот же код).

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

Итак, опытные разработчики Struts2, что вы предлагаете?Как мне это реализовать?

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Хорошо, это не полностью испеченная идея.Но, поскольку никто другой не предоставил ничего, вот с чего я бы начал.

1) Посмотрим, сможете ли вы переместить весь поток на одну страницу.Я большой сторонник меньшего количества страниц, это лучший подход.Это совсем не уменьшает сложность приложения, но пользователь обычно находит интерфейс более интуитивно понятным.Один из самых простых способов добиться этого - использовать плагин json и множество вызовов ajax для ваших служб json.

2) Если вам нужно переходить между страницами (или просто думать, что реализация # 1 слишком сложна на стороне клиента), я бы обратился к тегу s: token.Самая первая страница для запуска потока будет использовать этот тег, который будет создавать уникальное значение при каждом вызове.Вы будете хранить карту в своем сеансе модельных объектов.Действие нужно будет снабдить моделью, посмотрев ее из сессии.

Есть пара проблем с # 2.Один, как вы удерживаете сеанс от получения слишком большого количества доменных объектов?а) Ну, это может и не иметь значения, если сеанс установлен на шесть часов, вы можете быть уверены, что за ночь они прояснятся.б) предоставил интерфейс самоуправления, который может получать / устанавливать / перечислять объекты в сеансе.Сначала это может быть то, о чем вы подумали, но это позволит работнику выполнить определенное количество, а затем остановиться и поработать над другим.Если единица работы имеет какое-то значимое имя (номер счета или что-то еще), это может быть весьма полезно

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

Вы можете выяснить более сложную систему, запустив поток с помощью токена, а затем используя другой токен на каждой странице.«flowId» и «currentPageId» соответственно, тогда вы можете построить график допустимых переходов.

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

0 голосов
/ 14 февраля 2012

Для Struts2 теперь имеется плагин для общения, который достигает всех этих целей при минимальной работе, требующейся от разработчика: http://code.google.com/p/struts2-conversation/

Он имеет: -обесцененные разговоры -сбор мертвых разговоров -конвенция по конфигурации саннотации и соглашения об именах - наследуемые диалоги - полностью интегрированные со Struts2 - область диалога также может использоваться bean-компонентами, управляемыми контейнером Spring IoC

Надеюсь, это кому-нибудь поможет.

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