随着Groovy 1.1 beta版和新版Java 5注解的支持推出,我们能否在Groovy中编写Seam应用程序呢?确实很棒,您可以使用JBoss Seam(在写作时CVS HEAD)这样做。
支持哪些内容,它是如何工作的?
您可以使用Groovy编写任何实体和任何操作。只需在Groovy类上使用Seam注解,它们就变成了Seam组件。
@Scope(ScopeType.SESSION) @Name("bookingList") class BookingListAction implements Serializable { @In EntityManager em @In User user @DataModel List<Booking> bookings @DataModelSelection Booking booking @Logger Log log @Factory public void getBookings() { bookings = em.createQuery(''' select b from Booking b where b.user.username = :username order by b.checkinDate''') .setParameter("username", user.username) .getResultList() } public void cancel() { log.info("Cancel booking: #{bookingList.booking.id} for #{user.username}") Booking cancelled = em.find(Booking.class, booking.id) if (cancelled != null) em.remove( cancelled ) getBookings() FacesMessages.instance().add("Booking cancelled for confirmation number #{bookingList.booking.id}", new Object[0]) } }
顺便说一句,您可以使用Groovy来编写您的实体,Hibernate会自动支持它们。没有约束,没有限制,没有XML ;-)
@Entity @Name("hotel") class Hotel implements Serializable { @Id @GeneratedValue Long id @Length(max=50) @NotNull String name @Length(max=100) @NotNull String address @Length(max=40) @NotNull String city @Length(min=2, max=10) @NotNull String state @Length(min=4, max=6) @NotNull String zip @Length(min=2, max=40) @NotNull String country @Column(precision=6, scale=2) BigDecimal price @Override String toString() { return "Hotel(${name},${address},${city},${zip})" } }
Groovy文件由构建系统中的groovyc编译器编译;然后它们对容器来说就像普通类一样。
让它更加Groovy
让我们更进一步,当Seam处于开发模式时,.groovy文件可以不涉及groovyc构建时编译而直接部署。就像热重部署的Java Seam组件一样,将您的.groovy文件复制到WEB-INF/dev目录。
无需重新启动应用程序(更不用说容器了):下一次请求将透明地重新加载Groovy类,提供一个相当平滑的开发环境。快速开发时间,快速部署时间。
目前此模式仅限于Seam JavaBean组件:EJB 3.0会话豆和实体(尚不支持)热重部署。我们正在考虑增强JBoss EJB 3容器以消除这一限制(尽管在其他容器中您仍将遇到这一限制)。
如何设置它?
使用seam-gen,您可以在一分钟内生成一个支持Groovy的开发环境。
./seam setup # use project type WAR, the rest is at your will ./seam new-project # that's it
然后您就完成了,您可以在以下任一位置编写.groovy代码src/model或src/action请记住,在Seam开发模式下,当您更改(无论是Groovy还是Java)代码时,无需重新启动应用程序。src/action(./seam explode(复制Groovy文件)即可完成。
要查看一个完整的Groovy项目,请参阅JBoss Seam示例中的groovybooking项目(撰写时为CVS HEAD)。
此功能(已在CVS HEAD中可用)预计将在下一个主要JBoss Seam版本中推出:我们还有很多惊喜等着你 :-)
注意:如果您对Groovy感兴趣,并且今晚在旧金山,不要错过G2One ,如果您有任何问题,我会在那里。