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

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 - 官方网站








分享到:
评论
100 楼 hmilylxs 2008-07-30  
少研究框架,多看看底层。要以不变应万变!你们明白我那意思吗?
99 楼 HenryYu 2008-06-24  
如果站在与spring比较的层面看,此框架是比spring进步。
但是,从j2ee应用整个角度来看,始终没有跳出spring画的圈圈。
意义不大
98 楼 ray_linn 2008-06-24  
诶...怎么比也不如asp.net mvc简洁~哈哈
97 楼 xuyao 2008-06-23  
最后肯定和当年的guice一样
96 楼 zhu_chen001 2008-06-19  
逻辑层里面大量的annotation是不推荐的
95 楼 phoenixup 2008-06-19  
robbin 写道
williamy 写道
请对比Grails

Grails我说过很多遍的,注定不可能成为主流的东西。Java语言的优势就是静态类型带来的安全检查,所以Java可以做大规模的项目,有强大的IDE支持,好的Java框架要发挥这个优势,而不是向Grails那样完全放弃静态类型往Duck Typing方向走,那样的话,你语言的动态性上面先天就比不上Ruby,后天又丧失了Java自身的优势,两边不靠的东西,完全不看好。


这个我支持~~Grails放弃了Java本身的优势~~很难走的远,玩具而已~
94 楼 phoenixup 2008-06-19  
官网打不开~~不过这个框架真的很清爽~~~非常好~~~Java很久没有一些令人愉快的东西了,Guice是一个启发~~JDK5的注解特性,崇尚简单就是美的思想,Java有些局部第二春的感觉了,真的非常不错~~~
93 楼 lw1130 2008-06-03  
靠 看起来确实很兴奋啊 决定瞅一下
92 楼 dhxyu 2008-04-27  
不要下太大的结论吧?
取代是不可能的,存在就有理。
当然新的东西是可以尝试的,我们公司还使用oracle forms进行开发,当然是数据仓库和模型的架构决定的!
相信spring 3.0出来了,很多问题也会有相应的解决,期待更好的解决方案。
91 楼 hax 2008-04-18  
ajoo 写道
robbin 写道

我不这么看。这个ViewBlog类似Webwork的Action,本身是prototype的,每次请求创建,为啥就不能有状态呢?就是RoR的controller也是一样,每次请求创建controller实例。

再说@Event,这个就是Webwork里面的Interceptor的东西,起到AOP作用的,在RoR里面也有类似的Filter概念,没觉得加一个@Event怎么会复杂。

不过话说回来,在ViewBlog这个具体的例子当中,使用@Event的方式来初始化数据,的确没有必要,例子举的不恰当。

状态不可怕,可怕的是状态变迁。这个例子里面,就涉及了before initialized和initialized两个状态。而且优先使用immutable也是基本的best practice吧?Guice也是强调constructor injection的。

interceptor不会有状态变化,所以无所谓。要说这个,更象servlet的init(),老掉牙很丑陋的东西。


ajoo同志深得我心,我批OperaMask的IoVC的那个例子的@BeforeRender也是同样的理由啊,可惜有人老是说我不懂JSF的6种phase云云。。。
90 楼 jaketyao 2008-04-01  
SSH 是主流。
很成熟。。
warp 等它成熟了,在学习。。。。。
89 楼 cnoss 2008-03-27  
http://www.iteye.com/post/499411,这篇文章中所提到的项目就是基于Guice实现的一个REST架构风格,也借鉴了sping2.5中的相关特性,希望大家提出宝贵意见。
88 楼 indexchen 2008-03-24  
Warp-persist提供了声明式的事务管理,终于可以取代Spring了

难道spring就没有声明式事务管理? 别动不动就取代,spring提供的远不止Ioc,DI,
spring  可以将第三方好的框架都集成到应用中,提高开发效率,这是很重要的。
87 楼 timerri 2008-03-24  
一把新的瑞士军刀。你需要重新习惯它才能使用....

86 楼 ivorytower 2008-03-24  
对于SSH
更期待简洁
85 楼 ajoo 2008-03-23  
光说不练假把式。我自己根据这个想法实现了一个基于Guice的rest框架。
@Resource("foo/{foo.id}")
public class Foo {
  @Inject public Foo(@RestParam("foo.id") String id) {
     ...
  }
}

new ResourceBinder(binder()).bindResource(Foo.class);
bind(ResourceLocator.class).to(GuiceResourceLocator.class);

class FooAction {
  private final ResourceLocator resourceLocator;

  public String run() {
    Foo foo = resourceLocator.getResource(request.getPathInfo(), Foo.class);
    ...
  }
}


嘿嘿,为什么没有@RestMethod之类的?因为我没想明白为什么rest method和资源定位不是正交的。拿到了Foo之后你怎么处理完全是自己的事情了,和框架可以毫无关系了。这样不是比框架大包大揽更好?

好处呢?简单,完全的依赖注入,除了这些rest参数,你可以注入任何Guice里面的依赖。

84 楼 zbird 2008-03-21  
Norther 写道
wuyingsong 写道
manmoon 写道
零配置是没了,都转向硬编码了,我看不出annotation 比配置文件好到哪里。



首先要确认一点是什么是配置文件,哪些东西才是配置,像hibernate对象关系映射这种东西有人会在运行时修改吗?

没有的,这种东西就应该以更接近代码的形式出现,annotation的意义就在于此。

支持这个,老早就对JAVA的官僚反感了。
JAVA开发者老是会假定出很多在实际运行中根本不可能出现的变化。
struts在这方面实在是太明显了。
这么多的view配置了做少,难不成在产品发布后还有人去改jsp路径?
83 楼 Norther 2008-03-19  
wuyingsong 写道
manmoon 写道
零配置是没了,都转向硬编码了,我看不出annotation 比配置文件好到哪里。



首先要确认一点是什么是配置文件,哪些东西才是配置,像hibernate对象关系映射这种东西有人会在运行时修改吗?

没有的,这种东西就应该以更接近代码的形式出现,annotation的意义就在于此。
82 楼 wuyingsong 2008-03-19  
manmoon 写道
零配置是没了,都转向硬编码了,我看不出annotation 比配置文件好到哪里。

81 楼 williamy 2008-03-14  
秦始皇小时候家里穷,玩的东西很少,不过也算玩过积木,就说它吧
一个个积木是不同的,放在不同的口袋里,他想堆一个长城
但是长城好长,不容易一下就想清楚,于是我在地板上画了图,
图上表示了如何一个个积木组装起来。由于长城好长,从山海关到加疫关
于是地上的图也很长,后来秦始皇觉得自己一个人堆长城很有难度,于是就
自己搞定出一个方案,让农民工去建造
--------------------------------------------------
rod j以前玩C++的,玩Java很少,不过也算知道javaBean,就说他吧
一个个javabean是不同的,放在不同的package里,rod想写一个系统
系统很大,不容易一下想清楚,于是在xml上写了一些表述
xml上描述了如何一个个bean的组装过程,由于系统好大,从用户登录到用户积分
于是xml上的内容很长,后来rod觉得手工组装很难,于是就自己
搞定出一个方案,让程序去组装

所以说ioc本身出发点很简单的


相关推荐

    warp-persist-2.0-20090214.zip

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

    Cloudflare WARP Release-x64.msi

    Cloudflare WARP Release-x64 安装包

    Warp Framework-开源

    Warp Framework 是一个用Python编程语言开发的高效应用程序框架,其设计理念在于提供一种简洁而强大的方式来构建各种类型的应用。这个框架的核心特性是它的智能属性和对象管理机制,这些机制基于元数据进行操作,...

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

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

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

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

    rust-web-framework-comparison:比较一些用Rust编写的Web框架和库

    本文将深入探讨"rust-web-framework-comparison"项目,它提供了一个对比不同Rust Web框架和库的资源,帮助开发者选择最适合他们需求的工具。以下是关于Rust Web开发的一些关键知识点: 1. Rust语言基础: Rust是一...

    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: ...

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

    提供的压缩包名为`warp-cli-master`,这可能是一个包含了warp-cli源代码的完整版本,包括所有必要的文件和目录,如源码、测试文件、配置文件等。开发者可以查看源代码以了解其内部工作原理,甚至可以根据自己的需求...

    百度硅谷warp-CTC

    【百度硅谷warp-CTC】是百度公司在其硅谷研发中心推出的一种优化的连续标注计算(Connectionist Temporal Classification, CTC)实现,旨在提升在现代高性能计算硬件上的运行效率。CTC是一种常用的序列到序列模型的...

    为Arch_Linux提供可安装的Cloudflare_Warp_ArchLinux-Warp-deb.zip

    为Arch_Linux提供可安装的Cloudflare_Warp_ArchLinux-Warp-deb

    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

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

    标题 "Go-warp让您通过一个简单的命令安全地共享您的终端" 涉及到的是一个基于Go语言开发的工具——Warp,它提供了一种便捷且安全的方式,让用户能够通过命令行分享自己的终端会话。这个工具对于远程协作、演示或者...

    Python库 | sol-warp-0.2.4.tar.gz

    标题中的"Python库 | sol-warp-0.2.4.tar.gz"指的是一个特定版本的Python库,名为sol-warp,版本号为0.2.4,并且它被压缩成一个tar.gz文件进行分发。在Python编程环境中,库(Library)是用于扩展其功能的模块集合,...

    Guice+Struts2+warp-persist 简单实例

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

    Java_非官方的warp客户端android.zip

    Java_非官方的WARP客户端Android项目是一个针对Android平台的第三方实现,允许用户在移动设备上使用WARP技术。WARP(Wireless Application Protocol)是一种通信协议,旨在提高无线网络上的数据传输效率和安全性。非...

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

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

    meta-warp7-distro:WaRP7的Yocto项目

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

    warp:超级便捷,可组合的Web服务器框架,可提高扭曲速度

    Warp是一款用Rust编程语言编写的高效、轻量级且极其灵活的Web服务器框架。它以其易于使用、高性能和高度可组合性著称,为开发人员提供了一种编写Web服务的新方式。在了解Warp之前,我们先来看看Rust本身——一种系统...

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

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

Global site tag (gtag.js) - Google Analytics