第11章 Groovy集成

11 Groovy集成

 

JBoss Seam的一个方面是它的RADRapid Application Development快速应用程序开发)能力。虽然没有与RAD同义的,在这个空间里的一个有趣的工具是动态语言。迄今为止,选择一个动态语言是要求一个完全不同的开发平台(带有一个API集和一个运行时间库的一个开发平台这样宠大,以致于你再也不愿想使用你的老的向后兼容的Java[sic] APIs,其是幸运的,因为无论何时你被迫使用那些所有的APIs)。???动态语言构建在Java虚拟机的顶层,并且Groovy [http://groovy.codehaus.org]在细节上打破了在仓库内的这种方法。

 

现在JBoss Seam联合了动态语言世界与Java EE世界,通过无缝集成了静态的和动态语言两者。为了这个任务,JBoss Seam让程序程序开发者使用最好的工具,不用上下文切换。写动态Seam组件完全象写正规的Seam组件。你使用同样的注释,同样的APIs,同样的所有事物。

 

11.1. Groovy 介绍

 

Groovy 是基于Java语言的一个灵活的动态语言,但是带着来自PythonRuby Smalltalk灵感的附加特色。Groovy的优点是双重的:

 

* Groovy支持Java语法;Java代码是Groovy代码,产生的学习曲线十分平滑。

* Groovy 对象是Java 对象,并且Groovy类是Java类;Groovy平稳地集成了存在的Java库和框架。

 

TODO: 写一个快速的 Groovy语法附加总结

 

11.2. GroovySeam应用程序

 

关于它并没有太多说的。因为一个Groovy对象是一个Java对象,实质上你能写任何Seam组件,或对它值得写任何类,使用Groovy并部署它。你也能在同一个应用程序中混合Groovy类和Java类。

 

11.2.1. Groovy 组件

 

因为到现在你已注意到,Seam大量使用注释。为了对注释支持,你确定你使用了Groovy 1.1以上版本。这儿有用在一个Seam 应用程序中的一些groovy代码例子。

 

11.2.1.1. 实体

 

    @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天然地支持属性(getter/setter)概念,所以不需要明确地写冗余的getters setters 在前面的例子,从Javahotel.getCity()方法,hotel 类能被访问,getters setters Groovy 编译器产生。这类语法上的甜头产生的实体代码很简明。

 

11.2.1.2. Seam component

 

GroovySeam组件与用Java写方法上并没有什么不同:注释被用来标记类为一个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])

    }

}

 

11.2.2. seam-gen

 

Seam gen有一个透明的Groovy集成。不用任何附加的底层必要的东西,你能在seam-gen支持的项目中写Groovy代码。当写一个Groovy实体时,只不过放你的.groovy文件在src/model目录中。也不令人吃惊了,当写一个动作,只不过放你的.groovysrc/action目录中。

 

11.3. 部署

 

部署Groovy类非常象部署Java类(令人吃惊,不需要写,也不遵守一个为了支持一个多语言组件框架的3-letter复合规范。)

 

除了标准部署,在部署期间,JBoss Seam有能力,不用重启应用程序重部署JavaBeans Seam组件类,在部署/测试周期节省了大量时间。当.groovy被部署时,对GroovyBeans Seam组件提供同样的支持。

 

11.3.1. 部署Groovy代码

 

Groovy类是Java类,就象一个Java类一样也用字节代码表示。为了部署,一个 Groovy 实体,一个 Groovy 会话bean 或者一个Groovy Seam 组件,一个汇编步骤是必要的。一个通用方法是使用groovyc ant任务。一旦编译,一个groovyc 类与一个Java类并没有什么不同,并且应用程序服务器会同等对待它们。注意,这允许一个无缝的Groovy Java code混合。

 

11.3.2. 在部署期间,本地.groovy文件的部署

 

JBoss Seam天然地支持.groovy文件部署 (也就是说不编辑) ,用增加的热部署模式(仅部署)。这使一个快速的edit/test周期可行。为了设置.groovy部署,下面的配置在章节2.8,“Seam和增加的热部署”,并且部署你的Groovy 代码 (.groovy 文件) 进入WEB-INF/dev 目录。 GroovyBean组件会逐步获得,不需要重启应用程序(并且显然不是任一的应用程序服务器)

 

要意识到,象正规的Seam热部署一样,本地.groovy文件部署会遭遇到同样的限止:

 

*组件必须是 JavaBeans GroovyBeans.它们不能是 EJB3 bean

*实体不能被热部署

*热部署可用的组件对任何部署在WEB-INF/dev外的类会是不可见的。

* Seam调试模式必须被激活

 

11.3.3. seam-gen

 

Seam-gen透明地支持Groovy 文件部署和汇编。这包括在部署模式下的本地.groovy文件部署 (较小的汇编)。如果你创建了一个seam-gen WAR类项目,在src/action 目录下的Java Groovy类会自动成为增加的热部署的候选人。如果你是在生产模式,在部署前,Groovy文件只是被编译。

 

examples/groovybooking目录下,你会发现一个活生生的例子,Booking 演示应用程序,完全是用Groovy写的,并且支持增加的热部署。

 

[Groovy – Home           http://groovy.codehaus.org/]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值