Замена стека Hibernate / Spring / Spring MVC на Hibernate / Guice / Wicket - PullRequest
2 голосов
/ 05 сентября 2011

У меня есть приложение, использующее Hibernate / Spring и Spring MVC, но в качестве мотивации для изучения, а также для сравнения различий, которые я хочу перенести в приложение, в Hibernate / Guice / Wicket.

У меня довольно простые вопросы, но с чего мне начать. Должен ли я начать с замены слоя Spring, а затем слоя Spring MVC?

Могут ли оба работать в одной среде, чтобы я мог начать с редактирования только одного контроллера / представления, а затем развернуть, и как мне это сделать?

Ответы [ 2 ]

3 голосов
/ 06 сентября 2011
  1. Начните с представления:

    Spring MVC все равно не будет работать без Spring.А так как другие уровни не зависят от его API (ну, по крайней мере, не должны), уровень представления должен быть самым простым для изменения (хотя тот, который займет большую часть усилий, так как он будет состоять из полногоповторная реализация).

  2. Перейти к Spring:

    a) Если вы не используете большую часть служебных классов Spring (* Template, * DaoSupport и т. д.) или инфраструктуры(управление транзакциями, безопасность), переход на Guice, вероятно, был бы вопросом переписывания конфигурации (на основе XML или аннотаций) в модулях / аннотациях Guice, поскольку чистое внедрение зависимостей, если не переносимое, в значительной степени напрямую сопоставляется между средами.

    b) Если вы используете служебные классы и инфраструктуру Spring (что вы, вероятно, и делаете, поскольку в этом весь смысл использования Spring вместо контейнеров без добавленной стоимости, еще одной другой зависимости-инъекции).вам придется как-то перенести их в Guice.Если вы планируете делать это постепенно, вы можете искать некоторую интеграцию между ними (возможно, используя инфраструктуру Spring от Guice), и после переноса зависимостей переключитесь на реализацию перехватчиков, встроенную в Guice (и test, test,test , так как небольшие различия в поведении могут сломать ваше приложение). Этот другой вопрос может дать несколько советов по этому вопросу.

  3. Затем Hibernate:

    Поскольку вы будете поддерживать Hibernate, его конфигурации не должныне будет зависеть от перехода.Только его начальная загрузка изменится, когда вы перенесете свою инфраструктуру и конфигурацию в Guice.Я не рекомендую хранить две параллельные SessionFactories, если вы можете избежать этого.

0 голосов
/ 05 сентября 2011

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

  1. отображение URL

    Начальная загрузка springMVC + spring + hibernate и wicket +Guice + Hibernate делается с использованием шаблонов URL.Вы должны сообщить серверу, будет ли springmvc или wicket обслуживать запрос.

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

  2. синхронизация данных

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

Недостатком этого решения является время запуска сервера из-задвойная загрузка hibernate mapping.

Вы должны начать с добавления приложения wicket-guice в ваш web.xml:

<filter>
    <filter-name>guiceFilter</filter-name>
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>guiceFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>com.app.web.guice.MyGuiceServletContextListener</listener-class>
</listener>
...