`
robbin
  • 浏览: 4799124 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:135739
社区版块
存档分类
最新评论

Warp framework - 一个相当有前途的Java轻量级Web开发框架

    博客分类:
  • Java
阅读更多
Warp framework 是最近刚刚发布的、基于Google Guice的轻量级Web开发框架,我也是在JavaEye网站的新闻频道看到的这条新闻: warp-persist 1.0: 为Google Guice专门提供持久层与事务处理的框架,通过这个新闻仔细阅读了Warp网站上面的文档,感觉到很振奋,Warp是一个相当棒的Java Web框架,而且前景非常看好。

Warp框架充分利用了JDK5.0的Annotation和泛型机制,并且基于Google Guice这个IoC框架,提供了full-stack的Web开发设施,他主要包含了四个部分:

warp-persist框架:封装Hibernate和JPA,提供事务管理和持久化资源管理
warp-dynamic-finder:提供了基于Annotation的动态查询功能,让数据库查询变得异常简单,不再需要DAO层
warp-mvc:借鉴了Tapestry5,提供了一个基于事件机制和组件化的Web层,并且组件注入方式高度IoC化
warp-servlet: 提供了一些Servlet的封装和附加的高级功能,例如URL过滤,和其他web框架集成等等

这几年来,Java在Web开发框架方面的进步显得很有限,Spring/Hibernate组合对撼JBoss Seam形成两大竞争的主流态势,但是这两个Web框架在Web快速开发方面的创新还显得不够好:Spring是越来越臃肿了,配置文件也是越来越复杂难懂了;JBoss Seam门槛又过高,而且集成的JSF一向受人垢病,并非完美的解决方案,特别是在Ruby on Rails横空出世之后,Java社区对于简洁易用的快速web开发框架的企盼也是一直很高的。

Warp在我看来是这方面做的最好的,它有以下几个鲜明的特点:

一、充分利用JDK5的annotation,简化编程和配置文件

Warp基于Google Guice并且发扬光大,自身无配置文件,所有功能完成均通过annotation,所以编程相当简洁

二、大量使用JDK5的泛型编程,提供强类型安全保证

虽说脚本语言的Duck Typing理念很流行,不过Java的优势也就是类型安全,Spring大量运用反射和XML配置等于是放弃了Java的优势。Warp在泛型方面做的很好,我相信在IDE的帮助下,Warp编程会更轻松

三、Warp-persist提供了声明式的事务管理,终于可以取代Spring了

Google Guice很好很强大,但是它没有事务管理能力和资源管理能力,所以无法取代spring,但是Warp-persist填补了这一缺憾,注入和管理Hibernate很容易:

Injector injector = Guice.createInjector(..., PersistenceService
			.usingHibernate()
			.across(UnitOfWork.TRANSACTION)
			.buildModule());


要声明事务比spring可简单多了:

public class MyService {
    @Inject Provider<Session> session; 

    @Transactional 
    public void createNewPerson() {
        session.get().saveOrUpdate(new Person(...)); 
    } 
}


Warp支持Hibernate/JPA的所有事务管理策略,不但注入方式简单,而且声明事务方式更简单,代码看着简洁,写着更省心。

四、Dynamic Finder实在很酷!

还是直接看代码吧:

@Finder(query="from Person")
public List<Person> listAll() { return null; }

用annotation声明一下,一行查询代码都没有,你还要DAO干啥呢?

@Finder(query="from Person where firstName = :firstName")
Person find(@Named("firstName") String name);

带参数的绑定变量查询,还是一行代码不用写,DAO是啥?

@Finder(query="from Person")
List<Person> listAll(@FirstResult int first, @MaxResults int max);

带分页的查询,还是一行代码不用写,谁用DAO我跟谁急 !


五、Web层也极其简单

Warp-MVC模仿了Tapestry 5的架构,但是作者做了大量的改良和简化,作者解释了一下为什么不直接使用Tapestry,而是自己开发的理由。

Warp-MVC看起来像一个Tapestry的简化版,有组件的概念,事件响应的方式,但是非常易用,非常简洁,URL映射也通过annotation方式声明,作者在自己的博客上面提供了相关的简单示例,可以参考:

http://www.jroller.com/dhanji/

Warp框架是最近几年来,我看到的第一个走在正确发展方向上的Java Web框架:结构简单、易用使用、但充分发挥了Java自身的语法优势,非常值得期待!

目前Warp框架还不是特别成熟,但是Warp-persistent已经相当稳定了,如果你是使用Hibernate/Spring/Struts来开发项目的话,不妨试试Warp,把spring换掉改成Hibernate/Warp/Struts2.0,也是一个不错的解决方案,全部运用annotation,让你的项目Zero Configuration。

友情提醒:Warp官方网站无法直接访问,建议在FireFox浏览器上面安装gladder插件,跨越GFW。

Warp Framework - 官方网站








分享到:
评论
40 楼 bottom 2008-03-08  
It must be very careful when comparing something with another.  Somebody did the same and was blamed by Spring team a while ago. http://blog.springsource.com/main/2007/11/09/a-response-to-ejb-3-and-spring-comparative-analysis/

Some of the comparison to spring in this article is invalid.  Please look at the latest spring 2.5 annotation support.
39 楼 jsifa 2008-03-07  
开发效率与运行速度是成反比的~~
38 楼 manmoon 2008-03-07  
<div class='quote_title'>kabbesy 写道</div><div class='quote_div'><p>半年多以前,当时就是在完善一份自己的范型DAO,从googlecode上搜到warp了。 </p><p> </p><pre name='code' class='java'>@Finder(query="from Person")  
List&lt;Person&gt; listAll(@FirstResult int first, @MaxResults int max);  </pre><p><br/>看到这个的时候,的确感到惊艳。 但静下来想想,问题大过于漂亮。 </p><p><br/>这样子做好处在于,只使用DAO接口,而取消了DAO的实现类(记得没错的话,它好像是动态生成一个实现类) 。但就这点优势够大么?我不认为:</p><p>1、它只能提供最基础的db操作,也就是模拟dao中最简单的那种,连很可能出现的类型转化都没法做到,更不谈拥有逻辑的部分了。</p><p>2、sql或者hql算是“标准语法”,而@FirstResult却有着学习代价。一旦带着对annotation滥用的抵触情绪,可能看都看不下去了(我干嘛去熟悉一个小破框架的annotation用法)。</p><p> </p><p>对GUICE我满支持的,但更期待spring3能大幅度加强对Java5的支持,比如提供范型化的HibernateTemplate,以及更丰富的annotation支持。</p></div><br/>恩,支持!
37 楼 kabbesy 2008-03-07  
<p>半年多以前,当时就是在完善一份自己的范型DAO,从googlecode上搜到warp了。 </p><p> </p><pre name='code' class='java'>@Finder(query="from Person")  
List&lt;Person&gt; listAll(@FirstResult int first, @MaxResults int max);  </pre><p><br/>看到这个的时候,的确感到惊艳。 但静下来想想,问题大过于漂亮。 </p><p><br/>这样子做好处在于,只使用DAO接口,而取消了DAO的实现类(记得没错的话,它好像是动态生成一个实现类) 。但就这点优势够大么?我不认为:</p><p>1、它只能提供最基础的db操作,也就是模拟dao中最简单的那种,连很可能出现的类型转化都没法做到,更不谈拥有逻辑的部分了。</p><p>2、sql或者hql算是“标准语法”,而@FirstResult却有着学习代价。一旦带着对annotation滥用的抵触情绪,可能看都看不下去了(我干嘛去熟悉一个小破框架的annotation用法)。</p><p> </p><p>对GUICE我满支持的,但更期待spring3能大幅度加强对Java5的支持,比如提供范型化的HibernateTemplate,以及更丰富的annotation支持。</p>
36 楼 murainwood 2008-03-07  
同意Robbin的所说的"Java的优势"
35 楼 murainwood 2008-03-07  
Norther 写道
大部分人还在质疑anntotation的时候 实干家已经去战斗了

dynamic finder部分让人眼前一亮 赞一个先

项目早已大量使用了.
34 楼 Norther 2008-03-07  
大部分人还在质疑anntotation的时候 实干家已经去战斗了

dynamic finder部分让人眼前一亮 赞一个先
33 楼 williamy 2008-03-07  
Robin说的我还是不同意
既然要说运行效率,那么考虑另一种情况,如果要求是一天4亿PV,你可以想象运行效率如何,我们公司用的是struts精简版本+Oracle Procedures,缓存是terrycotta的老版本,这个就是运行效率。
把开发效率和运行效率都提高到极致,那是6级Mountain King的技能,我们凡人基本上只能观望
既然要用开发效率的框架,那么对运行效率的要求,肯定不高,反正要求不高,于是grails这类东西才有生存的理由
而不得不追求运行效率的公司,对于开发效率,基本上,领导都是一句话“你们多抓一倍的人来”
32 楼 galaxystar 2008-03-07  
如果能支持ibatis,估计会让它的易用性会大大减弱。
不过,还是看好anntotation广泛应用。
31 楼 robbin 2008-03-07  
williamy 写道
请对比Grails

Grails我说过很多遍的,注定不可能成为主流的东西。Java语言的优势就是静态类型带来的安全检查,所以Java可以做大规模的项目,有强大的IDE支持,好的Java框架要发挥这个优势,而不是向Grails那样完全放弃静态类型往Duck Typing方向走,那样的话,你语言的动态性上面先天就比不上Ruby,后天又丧失了Java自身的优势,两边不靠的东西,完全不看好。
30 楼 hyhongyong 2008-03-07  
Warp framework发布到哪儿了?
有没有相关的文档?
看起来很好啊。
29 楼 williamy 2008-03-07  
请对比Grails
28 楼 seril 2008-03-07  
svn在这里:
http://warp-persist.googlecode.com/svn/trunk/warp-persist/
27 楼 惊鸿逝水 2008-03-07  
ajunisme 写道
开发框架的很大部分原因是希望将一些高耦合性的东西转移到配置文件,现在都放到源代码中不是背道而驰了吗?晕!


应该说开发框架的很大部分原因是希望将变化的东西转移到配置文件!所以Warp framework 简直做到极致,哈哈
26 楼 ajunisme 2008-03-07  
开发框架的很大部分原因是希望将一些高耦合性的东西转移到配置文件,现在都放到源代码中不是背道而驰了吗?晕!
25 楼 agile_boy 2008-03-07  
好像动态finder方法没有GORM方便,不过性能应该还不错吧,观察一下看看
24 楼 zgd 2008-03-07  
robbin 写道
ssuupv 写道
我们现在产品基于spring hibernate,这个框架有些功能确实没办法解决.最近在选型,看了一段seam框架,感觉对工具依赖性太大了,并且跟jboss绑定的很紧.哎,不知道用什么好了.


不知道你说的限制是什么,我推荐你试试这样的框架组合: Struts2.0 + Google Guice + Warp-persist + JPA(Hibernate)

我不明白你的标题,你为什么称之为Web框架?
23 楼 ardenliu 2008-03-07  
robbin 写道
ardenliu 写道


我用spring的唯一原因是管理transaction,IOC重来就没有觉得有用。


如果是这样的话,那就更应该扔掉spring,改用warp了。


但是warp只支持Hibernate, JPA, Db4objects啊,我要jdbc支持啊
22 楼 hlxiong 2008-03-07  
引用
Java代码
@Finder(query="from Person")  
public List<Person> listAll() { return null; } 

这样的查询方式确实很easy,但问题是,通常情况下并不是查询完结果就可以返回的,一般都要对查询结果做一定的处理,比如时间格式转化、相关业务处理等,用这种方法如何获取查询结果呢?有办法在方法体里获取得吗?还是要另外写方法去调用这个listAll方法然后再处理?
21 楼 ssuupv 2008-03-07  
spring目前,分布式数据库(数据库有可能会上W个(各库的结构是一样)),工作流,Portal,rule,JMS,JMX.缓存,都不是他本身框架提供只是调用别人.这个不像Seam,他们JBPM,JbossPortal.JboosRule,全是JBOSS提供整体解决方案,并且也支持有状态SessionBean,这个虽说用的不多,但是在实际开发,没他解决问题比较麻烦.

相关推荐

    warp-persist-2.0-20090214.zip

    warp-persist-2.0是最近刚刚发布的、基于Google Guice的轻量级Web开发框架。 Warp是一个相当棒的Java Web框架,而且前景非常看好。 Warp框架充分利用了JDK5.0的Annotation和泛型机制,并且基于Google Guice这个...

    Themes-Warp-Framework-7:一款快速和简洁的主题框架,它提供了丰富的工具集,用于开发跨平台的主题。这里是中文文档

    Themes-Warp-Framework-7 一款快速和简洁的主题框架,它提供了丰富的工具集,用于开发跨平台的主题。 适用于YOOtheme出品的基于 Warp 7 框架的所有 Wordpress 主题和 Joomla 模板。 中文语言包:

    Warp Framework-开源

    Warp框架是使用Python构建的应用程序框架。 它具有仅基于元数据的智能属性和对象管理功能。 当前支持Zope,并具有将其扩展到基于GTK / SQL / etc。的应用程序的空间。

    Cloudflare_WARP_Release-x64.msi

    Cloudflare_WARP_Release-x64.msi

    Python库 | warp10-jupyter-0.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:warp10-jupyter-0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    ovh-warp10-datasource:用于Warp10平台的Grafana数据源

    Grafana Warp 10:trade_mark:数据源插件 安装插件 使用grafana-cli sudo grafana-cli plugins install ovh-warp10-datasource installing ovh-warp10-datasource @ 2.2.0 from: ...

    Cloudflare_WARP_Release-x64.msi.cab

    Cloudflare_WARP_Release-x64.msi.cab

    Guice+Struts2+warp-persist 简单实例

    借助Guice+Struts2+Warp-persist来构建一个比较轻盈的web开发框架,目的是想抛砖引玉。随后还会将Scala部分整合进来,目的就是唯恐框架不烂!(*^__^*)。 对于代码的不妥之处欢迎各路高手斧正。 mail to : meconsea@...

    warp-proxy:生成代理或模拟服务器的命令行工具

    一个简单的命令行,用于快速启动Web服务器,该服务器将您的请求代理到外部服务器或本地文件(JSON)。 对于测试和开发非常有帮助。 不用于生产。 使用风险自负。 入门 使用安装warp-proxy: npm install warp-...

    Python库 | warp_rnnt-0.0.3.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:warp_rnnt-0.0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    百度开源的人工智能软件 WARP-CTC.zip

    2016年新年伊始,百度硅谷实验室向 GitHub上传了 Warp-CTC C 代码库,并在一篇博客文章中鼓励开发者使用这些代码。据悉,CTC 代码结合了多个不同的神经网络设计,以处理不完美的数据集,并采用更复杂的数据模式,...

    warp-cli:使用祝福构建的CLI工具集原型

    经线 基于Blessed库的CLI工具集原型 概述 安装 $ npm install warp-cli --save 用法 $ npm start

    meta-warp7-distro:WaRP7的Yocto项目

    meta-warp7-distro 该自述文件包含有关构建meta-warp7-distro DISTRO层的信息。 有关详细信息,请参见下面的相应部分。 快速开始 要获取BSP,您需要安装回购协议并将其用作: 安装回购实用程序: $: mkdir ~/bin...

    warp-rnnt:CUDA-Warp RNN-换能器

    一个GPU实现RNN换能器(格雷夫斯 , )。 该代码是从移植的(由Awni Hannun编写),并且充分利用了CUDA warp机制。 损失的主要瓶颈是基于动态规划算法的前进/后退。 特别是,存在一个嵌套循环,用于填充形状为(T,...

    warp-plus-cloudflare:在Warp +上获取无限GB的脚本(https

    一个在Warp +上获得无限GB的项目( ) [?!]更新日志 修复gui版本(v 2.0)。 修复gui版本(v 2.1)ssl错误。 下载适用于Windows OS的App 测试在线版本 [?]如何在Windows,Mac,Linux上使用此脚本 首先下载...

    Go-warp让您通过一个简单的命令安全地共享您的终端

    warp 让您通过一个简单的命令安全地共享您的终端

    百度硅谷warp-CTC

    Warp-CTC是百度前期为了在最新的计算机芯片上更快速运行而专门研发的一种改良版深度学习算法。

    Cloudflare-WARP优选IP,解决使用限制

    为了解决这个烦恼,大佬们推出了很多好用的工具来解决这个麻烦,这里上传的就是其中一个,相当好用的,通过精选一些可用的ip,实现Cloudflare原始功能,亲测选择延迟最低的那一个ip就好了,有很多可以选择的ip,网速...

    Guice2.0+Hibernate3.2+warp-persist-2.0+Struts2+JPA

    轻量级的Guice2.0代替了Spring,速度更快,项目体积更小,Hibernate3.2与JPA的结合使用代替了传统的配置文件,使Hibernate的开发更简单,本项目基本上是零配置开发,由于我只能上传小于15M的文件,故JAR被我删除了,...

Global site tag (gtag.js) - Google Analytics