Весна - очевидный способ, которым вы должны пользоваться. GWT имеет собственную платформу контроллера RPC, поэтому я не могу понять, для чего вам понадобится платформа веб-приложений (например, JSF).
JPA - разумный выбор по нескольким направлениям, но у него тоже есть проблемы.
Во-первых, это потенциальная проблема при отправке объектов JPA клиенту. GWT (по крайней мере, до 1,5) обеспечивает довольно строгую структуру каталогов, поэтому вам придется помещать свои сущности в исходное дерево GWT. Помимо этого, сериализация (обычно JSON) объектов JPA для клиента и от него потенциально проблематична.
Сущности JPA - это довольно жесткие объекты, которые почти один в один отображают ваши таблицы. Однако это не то, как вы используете данные на уровне представления. Прямой SQL позволит вам выбирать, какие данные вы делаете и не хотите, специально для этой страницы. Таким образом, сущности JPA обычно имеют много полей, которые вам не интересны и не должны сериализоваться (в частности, коллекции отношений «один ко многим»).
Теперь этот аспект SQL - адаптация его к странице - часто упоминается как преимущество сущностей: ваш код не заканчивается заваленными объектами одноразового значения. Дело в том, что вы все равно получаете то же самое в gWT + JPA, но вместо того, чтобы находиться на постоянном уровне или бизнес-уровне, вы в конечном итоге получаете их на уровне представления. Теперь вы можете назвать это преимуществом. Я называю это шесть из одного, полдюжины из другого.
Я на самом деле думаю, что Ibatis гораздо лучше подходит для модели приложения GWT, чем JPA, потому что вы используете прямой SQL, объекты, адаптированные для ваших целей, и эти объекты можно использовать на всем пути от базы данных до клиента. Теперь эта концепция может привести к ужасу многослойных фанатиков, которые довольно распространены на земле Java, но помните, что наслоение - это средство для достижения цели, а не самоцель. Используйте это, если это поможет вам. Нет, если это не так.
Но в этом стеке абсолютно необходимо Spring.
Я также отсылаю вас к Почему Google Web Toolkit не более популярен? и Использование ORM или простого SQL? .