在“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
 

 

 

 

如何实现高校科技成果转化的高效对接?.docx 科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

相关推荐

TinyML边缘智能振动诊断实战-ESP32完整工程-v1.0.zip

无硬件可完整体验:固件内置信号合成模拟器(严格复现训练物理模型),串口发 S0~S3 切换 4 种机器故障 算子级正确性:用 inspect_model_ops.py 从 tflite 解析出实际算子(EXPAND_DIMS/CONV_2D/RESHAPE/MEAN/FC/SOFTMAX),固件注册逐一对应——规避了 TFLite Micro 最常见的 "Op type not found" 坑 诚实标注:文档中明确区分“合成演示数据 / 工程近似 / 实测值”,并给出接入真实数据的完整流程

学习Groovy--GroovyJava的语法比较

     以前,山风小子前辈(不知道这样写山风小子高不高兴)写过了GroovyJava之间的比较了,但是,算作充实博客也好,翻译书也好,我还是要写。       大多数的情况下,我们看到的Groovy代码与Java很相似,但是这不是说有的情况。这个有时候会误导有些人产生错误的观念:认为Groovy的语法是Java语法的子集。尽管有很多的相似性,没有哪一种语言是另一种语言的子集的。例如,Groov...

一天到晚游泳的鱼 469

ffmpeg-Muti-solve-rtspnogood.zip

多路推流MP4本地切换测试。跨平台arm_win

基于IDEA13+Grails+Groovy+Extjs4.2实现企业级信息系统快速开发的解决方案总结

项目进行中,后续时间宽松后,对该项目做个深度总结......

SeaSonS 1414

开源Java EE框架 JBoss Seam 详细介绍

摘要:JBoss Seam是“Java EE 5.0的一个轻量级的框架”。这是什么意思?难道Java EE(Enterprise Edition) 5.0本身不是一套“框架吗”?为什么在官方规范之外,还需要另外一个框架?好吧,我们就将seam看作是本应该被包括在Java EE 5.0中的一个“遗漏的框架”吧。它在Java EE 5.0框架的上层,为所有的在企业Web应用中的组件提供了一个统一的、易于

理工科的杜小甫的博客 7062

Java更像JavaScript,而让JavaScript更像Java

JBoss Seam+ExtJS项目中,用Groovy代替Java编写Seam组件,可以让Java更像JavaScript,用JavaScript的感觉去写Java程序变成现实,使代码简洁清晰。在客户端UI层,通过引入命名空间(namespace)机制编程约定,可以让JavaScript更像Java, 提高JavaScript程序的可读性可维护性。 1.让Java更像JavaScript ...

fangzhouxing 13万+

基于SpringBoot+Vue校园失物招领系统的设计与实现

校园失物招领系统的设计与实现前端采用了Vue框架,并结合ElementUI来实现界面的设计与布局。后端采用了SpringBoot框架进行开发设计,并结合了Java语言MySQL数据库来实现。在功能上分为了前端用户模块管理员模块。前端用户模块主要实现了招领物品信息的发布、查询与管理,失物信息的发布、管理以及自动匹配招领物品,查看校园相关通知公告。管理员模块主要实现了物品分类管理、校园通知管理以及物品招领信息的查询统计等功能。校园失物招领系统的实现优化失物招领的流程,提高了校园失物招领的效率,促进了校园文化的建设,营造了良好的诚信氛围。

科技成果转化效率低怎么办?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

产业园区如何搭建统一的科技服务平台?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

复现基于改进秃鹰算法的微电网群经济优化调度研究(Matlab代码实现)

内容概要:本文围绕“基于改进秃鹰算法的微电网群经济优化调度”展开研究,提出了一种改进的秃鹰搜索算法(BES),旨在解决微电网群在复杂运行环境下的多目标、强约束、非线性及高维经济调度问题。通过引入特定优化策略,增强了基础算法的全局搜索能力收敛效率,克服了传统智能算法易陷入局部最优的缺陷。研究构建了一个包含分布式电源、储能系统与多元负荷的微电网群调度模型,以最小化系统综合运行成本为核心目标,综合考虑功率平衡、设备出力能力、储能运行特性等多重约束条件。通过仿真实验验证了所提算法在调度精度、稳定性计算效率方面相较于传统方法具有明显优势,并进一步展示了其在降低能源开支、提升可再生能源消纳水平方面的实际应用价值。; 适合人群:具备一定电力系统基础知识或优化算法背景,从事新能源调度、智能优化算法研究与应用等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于微电网群、综合能源系统等场景下的经济调度优化;②为秃鹰算法及其他群体智能算法的改进、复现与性能对比提供参考范例;③服务于科研仿真、算法验证及工程化应用需求。; 阅读建议:建议读者结合文中提供的Matlab代码实现进行实践操作,重点关注算法改进机制与调度模型的构建逻辑,同时可借助网盘资源获取完整资料,以加深对算法性能表现与应用场景的理解。

Obsidian 是一款本地优先的笔记与知识管理工具,基于 Markdown 文件存储,以双链(Bidirectional Links)为核心,帮助你构建个人知识网络

Obsidian 是一款本地优先的笔记与知识管理工具,基于 Markdown 文件存储,以双链(Bidirectional Links)为核心,帮助你构建个人知识网络

政府科技管理部门如何推动区域科技创新资源配置优化?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

上一篇: JBoss Seam without JSF
下一篇: 让Java更像JavaScript,而让JavaScript更像Java
fangzhouxing
博客等级 码龄19年 1粉丝 4原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值