`
alienj
  • 浏览: 79834 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

第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/]

分享到:
评论

相关推荐

    Groovy in action

    - **第11章:整合Groovy**:讲解了如何将Groovy与其他系统和服务进行集成,包括Web服务、脚本引擎等。 - **第12章:使用XML工作**:介绍了Groovy中处理XML的强大功能,包括XPath查询、DOM操作等。 ##### 第三部分:...

    Groovy and Grails Recipes(清晰PDF)

    - 创建第一个Grails应用 - Grails项目的基本结构 **11. The Web Layer** - **介绍**: 探讨了Grails在Web开发方面的功能。 - **核心知识点**: - 控制器的设计模式 - 视图技术(如GSP) - RESTful服务的支持 *...

    [Groovy入门]第十讲.使用模板引擎开发界面

    Groovy是一种动态、灵活的编程语言,它与Java高度兼容,并在Java平台上运行。作为Java开发者扩展能力的工具,Groovy提供了许多简化编程任务的功能,包括面向切面编程(AOP)、闭包以及内置的模板引擎,使得开发更加...

    groovy http请求

    在Groovy中发送HTTP请求是开发者经常需要进行的操作,尤其是在进行API测试或者集成第三方服务时。下面我们将深入探讨如何在Groovy中执行HTTP请求,并分享一些实用的工具和技巧。 1. **HTTP请求方法**: - GET:...

    Groovy in Action

    **第11章: Integrating Groovy** - **内容概述**: 探讨如何将Groovy与其他技术栈集成。 - **知识点**: 如何在现有Java项目中引入Groovy,以及Groovy与JavaScript、Python等其他语言的集成。 - **学习目标**: 学会将...

    Groovy语法系列教程之字符串(三).pdf

    Groovy是基于Java平台的一种敏捷开发语言,它具有动态语言的特性,同时又能与Java无缝集成。Groovy的设计哲学是让程序员能够用更少的代码做更多的事情,这体现在它的语法上,如无需声明变量类型、支持闭包和运算符...

    groovy杂志 2008年11月

    《Groovy杂志 2008年11月》是一本专注于Groovy编程语言和Grails框架的专业出版物。这本杂志由Groovy和Grails社区的顶级专家撰写,为读者提供了深入的技术洞察和实践经验,旨在帮助开发者提升对这两项技术的理解和...

    groovy代码-groovy 表达式练习

    总结起来,Groovy的表达式涵盖了各种运算、条件判断、方法调用、闭包等,提供了强大的灵活性和便利性,使得Groovy成为Java开发者进行快速原型开发、脚本编写和集成测试的理想选择。通过练习和实践,你可以更深入地...

    发布Groovy文档CHM(截至20110408)

    3. **闭包**:Groovy的闭包是其强大之处,它们可以作为第一类公民,可以作为参数传递,也可以作为返回值。 4. **元编程**:Groovy的元编程能力允许在运行时动态修改类和对象的行为,这使得Groovy非常适合做元数据...

    集成第三方框架相关文档

    在Android开发中,集成第三方框架可以极大地提升开发效率和应用质量。以下是一些常见的三方框架的集成步骤和使用方法: 1. **Volley**:Volley是Google推出的一款网络请求库,适合处理小量的HTTP请求。添加依赖: ...

    Grails权威指南

    第11章 与java集成  11.1 服务器端java集成  11.2 通过集成hibernate实现orm  11.2.1 使用hibernatecxml映射  11.2.2 ejb3方式的映射  11.2.3 在pojo实体中使用约束  11.2.4 得到...

    kotlin之极简教程

    第11章 使用 Kotlin 集成 SpringBoot 开发 Web 服务端:讲解如何用 Kotlin 开发 Web 应用。 第12章 使用 Kotlin 集成 Gradle 开发:介绍如何用 Kotlin 编写 Gradle 脚本。 第13章 使用 Kotlin 和 Anko 的 Android ...

    Pro Spring 3(带目录版)

    第11章:介绍了如何在Spring中整合MyBatis持久层框架,以及如何配置和使用MyBatis的映射文件。 第12章:讨论了如何设计和实现基于Spring的应用程序,包括服务层、数据访问层和表现层的设计原则和实践。 第13章:...

    Pro Spring 3

    第11章讨论了在Spring中使用MyBatis。MyBatis是一个支持定制化SQL、存储过程以及高级映射的持久层框架。 第12章讲述了设计和实现基于Spring的应用程序。这一章将分享如何将Spring的各个组件和模块组合在一起,构建...

    Java Application Architecture Modularity Patterns with Examples Using OSGi Part2

    第11章 扩展性模式 11.1 抽象化模块 11.1.1 表述 11.1.2 描述 11.1.3 多种实现 11.1.4 效果 11.1.5 样例 11.1.6 小结 11.2 实现工厂 11.2.1 表述 11.2.2 描述 11.2.3 多种实现 11.2.4 效果 11.2.5 样例...

Global site tag (gtag.js) - Google Analytics