`
fangzhouxing
  • 浏览: 213319 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在“JBoss Seam+ExtJS”项目中使用Groovy代替Java

阅读更多

阅读了《Groovy In Action》一书,做了网上调研,经历了最初的FUD(Fear, uncertainty, doubt )过程,最终决定使用Groovy代替Java来写JBoss Seam组件。

 

本文是近一个月来, 使用Groovy编程的几点粗浅的体会。最后展示了一些Groovy源代码。

 

1.好处

 

(1)代码变得非常简洁,能够直接把程序的意图表现出来。同样的功能,很难想象再回到Java去编程。

(2)闭包(Closure)的使用,大大简化了某些算法,尤其是集合操作,开发效率大为提高。

(3)可以用JavaScript的感觉去写Groovy程序,因为两者都属于动态类型语言。

 

2.不便之处

 

(1)Groovy Eclipse Plugin的当前版本(2008-01-03发表)的编译速度还比较慢,功能上太弱。希望在未来的几个月中,这种情况能得到改变。

(2)编译阶段,对方法名引用错误,或者方法传递参数的错误,不再提示,要等到运行时才能发现。

(3)GlassFish中检测不到Groovy编写的类的修改,无法获得自动加载的热部署好处。 

 

3.不确定之处

 

(1)是否会影响到整个后台程序的运行速度?

(2)是否能被开发团队中其他成员接受和欢迎? 

 

4.Groovy代码展示1:Hibernate实体类

package com.divo.app.domain

import javax.persistence.*
import org.jboss.seam.annotations.*

//网格视图-用户版本
@Entity
@Name("app.myGridView")
@Table(name="app_MyGridView",uniqueConstraints = [
   @UniqueConstraint(columnNames =
   ["viewId", "userId"] )
])
class MyGridView {
    
    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE, generator="appNextId")
    @TableGenerator(name="appNextId", table="app_NextId", allocationSize=1)
    Long id
    
    @Column(nullable=false)
    Long userId
    
    @Column(nullable=false)
    Long viewId
    
    @Column(nullable=false,length=4000)
    String viewState
	
}
//EOP

 

 

5.Groovy代码展示2:作为JBoss Seam组件的服务类

package com.divo.app.service

import org.hibernate.*

import org.jboss.seam.annotations.*
import org.jboss.seam.security.*

import com.divo.app.domain.*
import com.divo.core.misc.*
import com.divo.core.util.*

@Name("app.appInfoService")
@AutoCreate
class AppInfoService extends BaseService {

    String appInfoFileName
    
    def getAppInfo() {
	    def dir = appInfoFileName?"":AppUtil.getRootDir() 
	
	    def s = Constants.FILE_SEPARATOR
	    def fileName = appInfoFileName?appInfoFileName:"app${s}version.txt"
	    def file = new File(dir+fileName)
	    def appInfo = new AppInfo() 
		
	    def count = 0
	    file.splitEachLine(/\,/){
		    if (it.size()>1 && count>0) {
				appInfo.version = it[0]
				appInfo.buildId = it[1]
				appInfo.copyright = it[2]
				appInfo.productName = it[3]
				appInfo.isDebug = (it[6]=="Y" || it[6]=="y")
		    }
		    count++
	    }	    
	   appInfo.currentDate = DateTimeUtil.getNowDate()
	   appInfo.contextPath = appInfoFileName?"":AppUtil.getContextPath() 
	   appInfo
    }
    
}
//EOP
  

6.Groovy代码展示3:单元测试类

 

package com.divo.app.service.test

import org.testng.annotations.*
import com.divo.app.service.*
import com.divo.core.util.*
import com.divo.core.misc.*

class AppInfoServiceTest extends AppTestCase {

    def _service
    
    @BeforeClass
    @Override
    void init() {
        super.init()
        
        _service = new AppInfoService()
    }
   
    @BeforeMethod
    @Override
    void begin() {
        super.begin()
        
        _service.setSession(session)
    }
    
    @Test 
    void canGetAppInfo() {
	    _service.appInfoFileName = "test//version.txt"  
	    def appInfo = _service.getAppInfo()
	    def currentDate = DateTimeUtil.getNowDate()	    
	    
	    assert appInfo.version=="2.0.0-b1"
	    assert appInfo.buildId=="2008020112"
	    assert appInfo.copyright=="fzx"
	    assert appInfo.productName=="软件问题跟踪系统"
	    assert appInfo.currentDate==currentDate
    }
    
}
//EOP
 

 

 

 

分享到:
评论
1 楼 fangzhouxing 2008-01-25  
Groovy Eclipse Plugin 有新版本了(2008-01-23):
http://dist.codehaus.org/groovy/distributions/updateDev/

相关推荐

    Jboss seam3 实战

    通过这些知识点,可以更深入地了解JBoss Seam3框架及其在实际项目开发中的应用。需要注意的是,由于文档来源可能涉及到OCR技术转换过程中的文字识别错误,这些知识点的信息可能存在细微偏差。在实际应用中,应以官方...

    《SeamInAction》+《JbossSeam》+《官方中文指南》

    RichFaces是Seam中的一个增强JSF功能的库,提供了丰富的AJAX支持;JBoss是Red Hat公司开发的应用服务器,它支持并推荐使用Seam框架。 在实际开发中,开发者可以通过这些资源学习如何使用Seam进行组件注入、依赖管理...

    jboss seam 中文文档集合

    《JSF标签》简体中文版.pdf涵盖了JSF的各种组件、转换器、验证器以及与后台数据交互的方法,有助于提升开发者在JSF项目中的效率。 **4. A4J (Ajax for JSF)** A4J 是一个扩展JSF的库,提供了一套AJAX支持,允许...

    JBoss Seam

    通过这些实例,读者可以学习到如何在实际项目中应用Seam框架,解决常见的问题,并优化应用性能。书中还详细介绍了Seam的组件模型、依赖注入、转换和验证机制等核心概念,帮助开发者深入理解框架的内部工作原理。 ##...

    JBOSS SEAM组件中文手册

    Seam是一个开源的企业级Java框架,由JBoss公司开发,旨在简化Java EE应用程序的开发。它将多种技术如JavaServer Faces (JSF),Java Persistence API (JPA),EJB 3,Inversion of Control (IoC)和Aspect-Oriented ...

    jboss教程及深入浅出JBoss+Seam

    【JBoss教程及深入浅出JBoss+Seam】是一个针对企业级Java应用服务器JBoss的深度学习资源,其中包含了两个主要部分:JBoss教程和对JBoss与Seam框架结合使用的详细介绍。这两个主题都是Java开发人员在部署和管理企业...

    JBoss Seam入门介绍

    在Seam中,一切皆组件,无论你是倾向于采用分层架构(如J2EE)还是简单的架构,都可以得到支持。组件可以是无状态或有状态的,有状态的组件可与多种预定义上下文关联,如业务流程上下文或方法上下文,这为Seam赋予了...

    jboss seam 2.0 中文手册

    整理自jboss seam 中文站,压缩为chm格式,便于广大jboss seam爱好者阅读,所有版权归jboss seam中文站所有。

    Jboss 7 + EJB 3.0 + Eclipse环境配置

    Jboss 7 + EJB 3.0 + Eclipse环境配置

    jbossseam eclipse安装 例子学习.doc

    在接下来的学习过程中,您可以利用这个环境来实践各种 JBoss Seam 示例项目,从而深入理解其特性和应用场景。同时,随着实践经验的积累,您还可以尝试使用 JFreeChart 和 Flex 等工具进一步丰富您的应用,提高用户...

    Jboss Seam中文版

    7. **在JBoss 4.0下使用Seam**:由于JBoss 4.0版本较老,因此需要特别注意兼容性问题。 #### 第三章:上下文相关的组件模型 这一章深入探讨了Seam中的核心概念——组件模型,以及各种不同的上下文环境。 1. **...

    Jboss Seam 三本最受欢迎的教材

    【JBoss Seam】是Java企业级应用开发框架,它整合了JSF(JavaServer Faces)、EJB(Enterprise JavaBeans)3.0、JPA(Java Persistence API)以及一系列其他技术,为开发人员提供了一个强大的全栈式解决方案。Seam...

    深入浅出JBoss Seam.pdf

    JBoss Seam被称为是“Java EE 5.0的一个轻量级的框架”,这个表述意味着Seam是建立在Java EE 5.0之上的一层,为开发者提供了一个更加统一且易于理解的编程模型。Seam的目标是简化企业级Web应用的开发,特别是对于...

    seam+jsf+richfaces+ajax4jsf 电子书

    - Seam中的依赖注入和事件处理 - 如何利用Seam进行安全性和国际化设置 - 例子和实战项目,展示如何结合使用这些技术构建实际应用 掌握这些知识点后,开发者将能够高效地构建出功能丰富、用户体验优秀的Java Web应用...

    jboss seam 2.01GA REF DOC

    - **创建项目**:在 Eclipse 中创建一个新的 Java 项目。 - **导入模板**:使用 seam-gen 生成的模板初始化项目。 **2.3 创建新动作** - **定义动作**:通过 seam-gen 自动生成的动作模板定义新的动作类。 - **...

    深入浅出JBoss Seam

    作为Hibernate的创造者Gavin King的作品,Seam在设计之初就考虑到了ORM的最佳实践,它在整个Web交互生命周期中管理持久上下文,避免了DTO等技术的使用,提高了代码的整洁性和可维护性。 总的来说,JBoss Seam是一个...

    jboss seam 教程

    - **使用JSF 1.2 RI**:提供了如何在JBoss平台上使用JSF 1.2参考实现来部署和运行Seam应用的具体步骤。 #### 三、结语 通过以上内容的学习,读者可以全面了解JBoss Seam框架的核心功能和技术特点,掌握如何使用...

Global site tag (gtag.js) - Google Analytics