Groovy是Seamed

发布者    |       Seam

随着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/modelsrc/action请记住,在Seam开发模式下,当您更改(无论是Groovy还是Java)代码时,无需重新启动应用程序。src/action./seam explode(复制Groovy文件)即可完成。

要查看一个完整的Groovy项目,请参阅JBoss Seam示例中的groovybooking项目(撰写时为CVS HEAD)。

此功能(已在CVS HEAD中可用)预计将在下一个主要JBoss Seam版本中推出:我们还有很多惊喜等着你 :-)

注意:如果您对Groovy感兴趣,并且今晚在旧金山,不要错过G2One ,如果您有任何问题,我会在那里。


回到顶部