第11章 Groovy集成
JBoss Seam的一个方面是它的RAD(Rapid 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语言的一个灵活的动态语言,但是带着来自Python、Ruby 和 Smalltalk灵感的附加特色。Groovy的优点是双重的:
* Groovy支持Java语法;Java代码是Groovy代码,产生的学习曲线十分平滑。
* Groovy 对象是Java 对象,并且Groovy类是Java类;Groovy平稳地集成了存在的Java库和框架。
TODO: 写一个快速的 Groovy语法附加总结
11.2. 用 Groovy写Seam应用程序
关于它并没有太多说的。因为一个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: 在前面的例子,从Java用hotel.getCity()方法,hotel 类能被访问,getters和 setters由 Groovy 编译器产生。这类语法上的甜头产生的实体代码很简明。
11.2.1.2. Seam component
用Groovy写Seam组件与用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目录中。也不令人吃惊了,当写一个动作,只不过放你的.groovy在src/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/]
分享到:
相关推荐
- **第11章:整合Groovy**:讲解了如何将Groovy与其他系统和服务进行集成,包括Web服务、脚本引擎等。 - **第12章:使用XML工作**:介绍了Groovy中处理XML的强大功能,包括XPath查询、DOM操作等。 ##### 第三部分:...
- 创建第一个Grails应用 - Grails项目的基本结构 **11. The Web Layer** - **介绍**: 探讨了Grails在Web开发方面的功能。 - **核心知识点**: - 控制器的设计模式 - 视图技术(如GSP) - RESTful服务的支持 *...
Groovy是一种动态、灵活的编程语言,它与Java高度兼容,并在Java平台上运行。作为Java开发者扩展能力的工具,Groovy提供了许多简化编程任务的功能,包括面向切面编程(AOP)、闭包以及内置的模板引擎,使得开发更加...
在Groovy中发送HTTP请求是开发者经常需要进行的操作,尤其是在进行API测试或者集成第三方服务时。下面我们将深入探讨如何在Groovy中执行HTTP请求,并分享一些实用的工具和技巧。 1. **HTTP请求方法**: - GET:...
**第11章: Integrating Groovy** - **内容概述**: 探讨如何将Groovy与其他技术栈集成。 - **知识点**: 如何在现有Java项目中引入Groovy,以及Groovy与JavaScript、Python等其他语言的集成。 - **学习目标**: 学会将...
Groovy是基于Java平台的一种敏捷开发语言,它具有动态语言的特性,同时又能与Java无缝集成。Groovy的设计哲学是让程序员能够用更少的代码做更多的事情,这体现在它的语法上,如无需声明变量类型、支持闭包和运算符...
《Groovy杂志 2008年11月》是一本专注于Groovy编程语言和Grails框架的专业出版物。这本杂志由Groovy和Grails社区的顶级专家撰写,为读者提供了深入的技术洞察和实践经验,旨在帮助开发者提升对这两项技术的理解和...
总结起来,Groovy的表达式涵盖了各种运算、条件判断、方法调用、闭包等,提供了强大的灵活性和便利性,使得Groovy成为Java开发者进行快速原型开发、脚本编写和集成测试的理想选择。通过练习和实践,你可以更深入地...
3. **闭包**:Groovy的闭包是其强大之处,它们可以作为第一类公民,可以作为参数传递,也可以作为返回值。 4. **元编程**:Groovy的元编程能力允许在运行时动态修改类和对象的行为,这使得Groovy非常适合做元数据...
在Android开发中,集成第三方框架可以极大地提升开发效率和应用质量。以下是一些常见的三方框架的集成步骤和使用方法: 1. **Volley**:Volley是Google推出的一款网络请求库,适合处理小量的HTTP请求。添加依赖: ...
第11章 与java集成 11.1 服务器端java集成 11.2 通过集成hibernate实现orm 11.2.1 使用hibernatecxml映射 11.2.2 ejb3方式的映射 11.2.3 在pojo实体中使用约束 11.2.4 得到...
第11章 使用 Kotlin 集成 SpringBoot 开发 Web 服务端:讲解如何用 Kotlin 开发 Web 应用。 第12章 使用 Kotlin 集成 Gradle 开发:介绍如何用 Kotlin 编写 Gradle 脚本。 第13章 使用 Kotlin 和 Anko 的 Android ...
第11章:介绍了如何在Spring中整合MyBatis持久层框架,以及如何配置和使用MyBatis的映射文件。 第12章:讨论了如何设计和实现基于Spring的应用程序,包括服务层、数据访问层和表现层的设计原则和实践。 第13章:...
第11章讨论了在Spring中使用MyBatis。MyBatis是一个支持定制化SQL、存储过程以及高级映射的持久层框架。 第12章讲述了设计和实现基于Spring的应用程序。这一章将分享如何将Spring的各个组件和模块组合在一起,构建...
第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 样例...