Рассмотрение перехода с Java / Spring MVC на Grails

В настоящее время я использую Java & Spring (MVC) для создания веб-приложения и подумываю о переходе на Grails. Буду признателен за обратную связь / понимание следующего:

  1. У меня есть несколько контекстов приложения в текущем веб-приложении Java / Spring, которое я загружаю через web.xml ContextLoaderListener; возможно ли иметь несколько контекстов приложения в Grails? Если да, то как?

  2. Это веб-приложение широко использует успокаивающую веб-службу CXF, а текущее веб-приложение Java / Spring использует связанный клиент CXF HTTP. Могу ли я продолжать использовать HTTP-клиент (Java) CXF в Grails?

  3. Я реализовал Spring Security с помощью пользовательской реализации UserDetails и UserDetailsService, могу ли я повторно использовать эти реализации в Grails «как есть» или я должен их повторно реализовать?

  4. Есть случай, когда я полагался на шаблон Spring jdbc (а не на доступный ORM) и дополнительный источник данных, который я определил в контексте приложения. Могу ли я повторно использовать его в Grails?

  5. Я планирую использовать Maven в качестве инструмента управления проектами; есть ли проблемы с использованием Maven с Grails, где есть комбинация groovy и java?

Изменить: я подумываю о переходе на Grails, чтобы сделать разработку веб-компонента веб-приложения «быстрее», как Ruby-on-Rails. Кроме того, я рассматриваю Grails, а не Ruby-on-Rails, потому что я хочу продолжать использовать JVM, и я баловался с Grails в прошлом, и его было довольно легко подобрать и использовать.


person MDS    schedule 15.06.2010    source источник


Ответы (4)


  1. Наверное. Grails использует подкласс Spring ContextLoaderListener, который он настраивает в файле web.xml. Я могу ответить более точно, если вы дадите мне знать, как вы это делаете с помощью Spring MVC.

  2. да. Возможно, вас даже заинтересует плагин CXF, хотя я не могу за него ручаться:

    http://grails.org/plugin/cxf

  3. Вы должны иметь возможность использовать их как есть. Однако вы можете проверить, легко ли это сделать с помощью плагина Spring Security. Я верю, что это так, но вы сможете получить окончательный ответ от Берта Беквита, автора плагина.

  4. да. Вы также можете заполучить фабрику сеансов Hibernate, чтобы делать необработанные вещи Hibernate. GORM также может работать с несколькими источниками данных:

    http://grails.org/plugin/datasources

    Еще один Берт Беквит с одним :)

  5. Это зависит от того, что вы подразумеваете под «комбинацией Groovy и Java». Вы можете создавать проекты Grails с помощью Maven, но интеграция не совсем гладкая. Если в вашем проекте Grails есть Java и Groovy, об этом позаботятся автоматически.

В ответ на Bozho я использую стандартные сервисы Grails + GORM и по-другому не стал бы. Обратите внимание: если вы используете Java для сервисов и модель предметной области, у вас не будет автоматической перезагрузки сервисов. Вы также теряете преимущества выразительности и лаконичности, которые дает Groovy.

При желании вы можете использовать статические типы в сервисах Grails, чтобы упростить для вашей IDE выполнение автозавершения кода. Он также может дать вам подсказки о свойствах и методах, которые он не распознает (что соответствует ошибкам компиляции Java). Тем не менее, даже если вы используете статические типы, Groovy не может выполнять проверки типов во время компиляции. Вы узнаете о них только во время выполнения.

person Peter Ledbrook    schedule 16.06.2010
comment
Плагин ядра Spring Security очень настраиваемый, см. Главу 7 на странице burtbeckwith. github.com/grails-spring-security-core/docs/manual - и вы всегда можете использовать Spring Security напрямую без плагина, как в обычном приложении Spring. В дополнение к плагину Datasources (который перенаправляет некоторые из ваших доменных классов на другую базу данных) вы также можете создать второй DataSource в resources.groovy и получить к нему доступ с помощью groovy.sql.Sql или JdbcTemplate. - person Burt Beckwith; 16.06.2010
comment
Спасибо за подробный ответ, это было очень полезно. Кстати, я загружаю несколько контекстов, указав их в параметре contextConfigLocation, то есть classpath: applicationContext.xml @Burt: Спасибо за предупреждение о параметрах безопасности; Я не знал, что плагин можно настраивать или что я могу использовать Spring Security напрямую. - person MDS; 18.06.2010

Вы можете делать все это в Grails. Он поддерживает все существующие классы Java и конфигурации пружин (grails построен на основе Spring mvc)

Однако я бы действительно не рекомендовал переносить все приложение на grails. Возможно, вы можете переместить только веб-слой, если у вас есть веб-разработчики, не являющиеся экспертами по Java.

Уровень обслуживания, доступ к данным и т. Д. Лучше оставить чистой Java. То есть только ваши веб-контроллеры - компоненты, которые собирают ввод пользователя, обрабатывают HTTP-запросы и сеансы, должны использовать grails. В остальном - классы обслуживания без сохранения состояния и ваша модель предметной области лучше всего на языке Java. Это мое мнение, но у меня уже есть некоторый опыт работы с grails, и статическая типизация на уровне сервиса избавит вас от многих проблем.

person Bozho    schedule 15.06.2010
comment
не могли бы вы объяснить, что вы имеете в виду: уровень обслуживания, доступ к данным и т. д. лучше оставаться чистой Java. Вы предлагаете, чтобы я использовал Spring / JPA / Hibernate напрямую, а не GORM? - person MDS; 16.06.2010
comment
Я не согласен. GORM (наряду с архитектурой плагинов) - самая мощная часть Grails, поэтому, если вы не воспользуетесь этим преимуществом, вы можете просто сделать чистую Java. - person Jean Barmash; 16.06.2010
comment
@Jean Barmash, это личное предпочтение. Я сам никогда бы не стал писать на динамическом языке, если бы мне не пришлось (например, принудительно в рамках проекта), но это зависит от обстоятельств. - person Bozho; 16.06.2010

2) Да, вы можете использовать CXF как есть. Поверх CXF есть хороший слой под названием GroovyWS. Я использовал его только для использования служб SOAP, но, возможно, в нем есть что-то и для REST. Это действительно удобно. Для использования служб REST я использовал HTTP Builder

4) Да. Вы можете продолжать использовать, например, spring для настройки источника данных или любым другим способом, который вы делаете сегодня. Использование нескольких источников данных не проблема.

5) Недавно я пробовал использовать Grails (1.2.1) с Maven. Это работает, но были некоторые проблемы с Maven и Grails, пытающимися управлять зависимостями. Документация, пожалуй, самая худшая часть. Я еще не пробовал обновиться до 1.3 из-за некоторых основных JIRA, связанных с Maven, но 1.3.2 уже не за горами, и эти проблемы теперь решены :) Также будет архетип maven 1.3.2. С нетерпением жду этого. «Развертывание и разрешение плагинов из репозиториев Maven» - одна из новых функций Grails 1.3, так что, вероятно, дела обстоят лучше. В дорожной карте 1.3.2 говорится о выпуске сегодня, но на данный момент осталось еще 8 проблем, так что я думаю, что завтра, выпуски Grails обычно вовремя. Если вы можете дождаться этого, вы, вероятно, избавите себя от некоторых проблем.

person rlovtang    schedule 16.06.2010
comment
Спасибо, что сообщили мне о GroovyWS и HTTP Builder; оба кажутся очень полезными, и мне нужно будет изучить оба подробнее. - person MDS; 18.06.2010

Если вы ищете быструю разработку приложений, но в остальном не испытываете особого энтузиазма по поводу groovy, вам следует обратить внимание на spring-roo. Он предлагает те же функции RAD, но создает полностью стандартное приложение java + ORM + spring-mvc (которое не имеет фактических зависимостей (время выполнения или компиляция) от roo). Он определенно не такой зрелый, как grails, но вы можете обнаружить, что он лучше подходит для вашего существующего опыта работы со статически типизированным java-кодом, существующим ORM и т. Д. Я сделал всего пару небольших домашних проектов в roo, но я очень до сих пор впечатлен, особенно тем, насколько легко настроить сгенерированный код и перемещаться между написанным и сгенерированным кодом. Первоначальное руководство очень быстрое и очень информативное.

person ideasculptor    schedule 21.06.2010