JAVA

индекс
157,29

Конференция SpringOne 2GX — новинки от SpringSource

Проходящая сейчас (и почти уже закончившаяся) в Новом Орлеане конференция SpringOne 2GX — отличный повод поговорить о том, чем нас радовал SpringSource в последнее время и порадует в ближайшем будущем.

SpringOne 2GX — это ежегодная конференция, проводимой компанией SpringSource. Так как относительно недавно SpringSource стал счастливым обладателем технологий Groovy и Grails, в этом году конференции SpringOne и 2Gx решили объединить в одну.


Spring 3.0



Конечно, главным объявлением стал выпуск версии 3.0 Spring Framework. Новая версия содержит ряд довольно интересных нововведений.

  • Java 5. С нынешней версии Spring Framework базируется на Java 5, со всеми вытекающими последствиями (generics, и т.д.)
  • SpEL — Spring Expression Language — возможность ссылаться на свойства бинов и переменные окружения с помощью выражений типа #{...}, причем не только в XML-конфигурациях, но и в аннотациях
  • Стереотипы — пользоваться аннотациями стало еще удобнее. Появилась возможность самому определять группы аннотаций как новую аннотацию.
  • Поддержка JSR-330
  • Поддержка JSR-303 Bean Validation.
  • REST — возможности создания REST приложений теперь встроена в Spring MVC.
  • Object/XML Mapping перекочевал из Spring WebFlow в ядро Spring. Встроенная поддержка JAXB 2, Castor. Интеграция с Spring MVC и Spring JMS.
  • Поддержка Portlet 2.0 (на конференции докладчик попросил поднять руки тех, кто пользуется портлетами. Поднялась одна рука. «Ну и зачем мы тогда мучимся?», сказал докладчик).
  • Converter и Formatter — альтернатива PropertyEditors.
  • Java EE 6 — пока поддерживаются JSF 2.0, JPA 2.0, JSR-303, JSR-330. Прочие технологии из Java EE 6, как, например, Servlet 3.0, будут включены, когда они появятся в конкретных продуктах, предположительно, к выходу Spring 3.1/3.2


tc Server + Insight


Выпущена бесплатная версия SpringSource tcServer — Developer Edition. Для тех, кто не в курсе, tcServer — это Tomcat с коммерческой поддержкой и некоторыми дополнительными возможности, в-основном, в области управления сервером. Из нового — впервые был представлен Spring Insight Dashboard, который дает разработчикам возможность посмотреть, как приложение исполняется на сервере — проследить вызовы, собрать статистику, отсортировать нитки по времени исполнения, и многое другое. Посмотрите видео (.mov, англ) — впечатляет. Я попробовал на своем продукте, и застыдился — еще оптимизировать и оптимизировать.

SpringSource Tool Suite 2.2.0


STS — это бесплатная (но не открытая) сборка Eclipse. Новая версия включает очень удобные инструменты для работы с Groovy, Grails, Spring Roo, и CloudFoundry.

Roo


Выпущена версия 1.0 Spring Roo. Если вам нравилось, как быстро можно начать писать приложение на Ruby-on-Rails, или Grails, то на Roo это еще быстрее.

CloudFoundry


В CloudFoundry (обсуждалось на хабре ранее) внешние изменения не очень заметны, кроме того, что добавились шаблоны запуска. Но теперь ваше приложение можно загрузить на CloudFoundry из STS, Grails и Roo. Я засекал: берется скрипт из 33 строк на Roo (пример wedding.roo из комплекта поставки), и через 2 с половиной минуты приложение запущено на Амазоновском облаке и доступно широкой публике.

_________
Текст подготовлен в ХабраРедакторе
+21
22 октября 2009, 10:15
8

комментарии (14)

0
thevery #
ну вот насчёт «Roo быстрее Grails» — это спорный ещё вопрос.
0
Kalifriki #
Что есть вообще Roo?
0
Scala #
Spring + AspectJ + Кодогенерация + CLI-интерфейс = RAD-фреймворк Roo.
0
dvolk #
По крайней мере, мотивация для создания Roo была именно такой.

Мне Roo понравился (плюс, его автор — совершенно замечательный тип :) ).

Вот пример скрипта на Roo (тот самый wedding.roo из комплекта):

project --topLevelPackage com.wedding
persistence setup --provider HIBERNATE --database HYPERSONIC_PERSISTENT
database properties list
database properties set --key database.url --value jdbc:hsqldb:${user.home}/my-wedding

entity --name ~.domain.Rsvp
field string code --notNull --sizeMin 1 --sizeMax 30
field string email --sizeMax 30
field number attending --type java.lang.Integer
field string specialRequests --sizeMax 100
field date confirmed --type java.util.Date

test integration
controller scaffold ~.web.RsvpController
selenium test --controller ~.web.RsvpController

// (quit, mvn test, mvn tomcat:run, localhost:8080/wedding, mvn selenium:selenese)

logging setup --level DEBUG --package WEB
security setup

controller class --name ~.web.PublicRsvpController
finder list --class ~.domain.Rsvp --filter code,equ
finder add --finderName findRsvpsByCodeEquals

email sender setup --hostServer 127.0.0.1
field email template --class ~.web.PublicRsvpController

// quit, mvn eclipse:eclipse; import project into Eclipse

// complete manual configuration as described at blog.springsource.com/roo-part-2/

logging setup --level DEBUG


На выходе получаем приложение на Java + Spring + Hibernate, плюс тесты (в т.ч для Selenium) — в виде maven проекта.

По-моему, круто.
0
Kalifriki #
Да… В самом деле, круто.
0
thevery #
>На выходе получаем приложение на Java + Spring + Hibernate
и полное непонимание того, что и как работает…
спасибо, лучше уж grails
0
dvolk #
То есть как это? Что может быть непонятного в связке Spring + Hibernate?! :)

Я, например, к Grails отношусь с подозрением, ибо не до конца понимаю, что оно там внутри делает («а внутре у нее неонка»). То есть, теоретически я знаю, что под капотом у Grails все те же Spring + Hibernate (да?), но все же…

Это в смысле — каждому свое. Лично мне нравится, что я получаю знакомый набор технологий maven + java + spring + hibernate. (Олд скул форева). Выпадет шанс реально поработать с Grails — может, изменю мнение. Groovy я уже полюбил :)
0
thevery #
>То есть как это? Что может быть непонятного в связке Spring + Hibernate?! :)

тут вопрос не в Spring+Hibernate, а, скорее, структуре проекта — я лично не до конца представляю, что делает строчка «finder list --class ~.domain.Rsvp --filter code,equ»

>То есть, теоретически я знаю, что под капотом у Grails все те же Spring + Hibernate (да?), но все же…

да, они. Более того, с грядущей версии 1.2 можно использовать не только Hibernate напрямую, но и Spring (MVC).

>Олд скул форева
вряд ли такие люди, как вы — ЦА для Roo
0
dvolk #
Упомянутая строчка создаст следующий аспект AspectJ:
package com.wedding.domain;

import java.lang.String;
import javax.persistence.EntityManager;
import javax.persistence.Query;

privileged aspect Rsvp_Roo_Finder {

public static Query Rsvp.findRsvpsByCodeEquals(String code) {
if (code == null || code.length() == 0) throw new IllegalArgumentException("The code argument is required");
EntityManager em = Rsvp.entityManager();
Query q = em.createQuery("SELECT Rsvp FROM Rsvp AS rsvp WHERE rsvp.code = :code");
q.setParameter("code", code);
return q;
}

}


Хммм… даже не на Hibernate, оказывается. Интересно, надо покрутить.
0
thevery #
>Хммм… даже не на Hibernate, оказывается. Интересно, надо покрутить.

вот и я говорю — неизвестно, чего он там хорошего или не очень внутри нагенерил.
В grails, кстати, хватило бы просто DomainClass.findRsvpsByCodeEquals(String code) без имплементации))
0
dvolk #
И, кстати, насчет ЦА — не согласен. Мне тоже RAD бывает нужен.
0
makulia #
Grails — действительно очень удобный фреймворк, активно его используем в разработке. Действительно, он основан на вышеупомянутых технологиях. Отличие в том, что разрабатывать веб-приложения на нём гораздо быстрее, чем на связке «Java + Spring + Hibernate». Он и позиционируется как средство для agile-разработки.
+1
Scala #
Всё же хорошо, что популярные фреймворки(Spring, Hibernate) влияют на стандарты. Я надеюсь и OSGi победит в споре о Java. Modularity
+1
dvolk #
Просматривая Twitter по тагу #springone2gx, набрел на прекрасный комментарий: «Производительность GSP в Grails 1.2 повысилась в 2-3 раза благодаря тому, что убрали случайно забытый вызов Thread.sleep()»

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