`
vanadiumlin
  • 浏览: 505464 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多

颠覆臃肿的JavaEE开发框架(bloated Enterprise Java stacks)的Play框架1.0发布,它在很多方面有其革命性的独创,也有助于我们了解现在JavaEE框架的不足。

Play框架吸收PHP RUBY动态语言的特点,采取即时源码编写,即时激活,框架本身融合了编译器和服务器。取代了 compile-package-deploy 过程,提高产品的开发效率。Play框架甚至提供在线编辑器,在线修改BUG后即时投入应用。

主要架构特点:

1、一个非常简单的开发周期。此框架自动编译和重新装载源文件的任何改变。

2简单的无状态MVC架构:智能捆绑HTTP参数到Java方法参数。
Play框架认为一边是数据库保存状态,一边是浏览器也可以保存状态,那么还要中间件MVC保存Session状态干什么呢?
HttpSession
有很多问题,虽然可以处理针对某个用户的状态,但是万一用户中途离开怎么办,HttpSession对资源消耗,以及在可伸缩性方面是有问题的。Play框架秉承share nothing架构思想,不再象黑客那样破解原本自然正常Http模型,然后强行植入状态,无状态架构可以并行同时输出多个页面,提高Web性能。

3、内置基于Apache Mina的快速HTTP服务器。

4、一个基于Groovy的强大的模板引擎,具有多层继承,定制用户标签的能力,Play框架认为JSP & Expression Language模板机制很好,但是需要太多配置,吸收其模板设计,剔除配置。等。

5、优秀的错误报告功能:当发生异常,此框架会直接显示出错代码,甚至是模板代码。
6 RESTFul

众所周知的Servlet API Struts其实是扭曲的,使用奇怪的APIHttp协议隐藏起来,Play框架认为一个Web应用框架应该给用完整的 直接的对Http调用和使用,这其实就是RESTFul精神。

这样 URIplay framework的主要概念。

对一个Java对象的调用,不是写Java语句,而是使用URI就可以,如下:
GET /clients/{id}
实际是调用Clients对象的show方法。
7、集成JPA 持久层

Play框架采取JPA作为持久化,并且使其更方便使用。
个人意见:这段代码倒是直接将持久层和表现层直接耦合在一起,没看到Domain Model了。看来DDD需要普及到每个角落不容易啊。)
8整合了缓存支持,可以使用memcached作为分布式缓存
9融入了OpenID 这样单点登录SSO技术。
10提出组件重用,可以重用各种组件,包括CSS Javascript

个人点评:总体来说,Play框架是一个与Struts2 JSF Tapestry竞争的框架,但是又整合了持久层和服务器。

业务系统市场分析

90%web业务开源系统都是php版本的,特别是新兴产品的开源实现,java的身影几乎销声匿迹了。可惜java出身的人去阅读php风格的代码简直是一种受虐。这其实说明一个道理,java优美的架构还是很有价值的。但优美+务实的平衡才是最佳选择。
 框架对比:

 

 

 

 

 

运行方式与服务器兼容性:

 

Play 应用可使用这么几种方式运行:标准Servlet容器、独立服务器、Google App EngineStax 云计算平台,等等
你也可以将应用发布到标准的应用服务器上执行,大部分应用程序支持Play应用。

下面的应用服务器都可以用来运行Play应用

这些应用服务器经过测试是支持Play 1.0.2的,但其他版本尚未经过充分测试。

 

JBoss 4.2.x

JBoss 5.x

JBoss 6M2

Glasshfish v3

IBM Websphere 6.1

IBM Websphere 7

Geronimo 2.x

Tomcat 6.x

Jetty 7.x

Resin 4.0.5

 

详细分析与外界介绍:

下图是 Play Framework 框架中用到所有的 jar 包的集合,位于 {play}/framework/lib 目录

 Play! Framework 07年的一个项目,08年开源,091125日发布了1.0版。发布后我就一直在学习这个框架。现在正式发布版本已经是1.01版,而且1.1版本也在每日更新。可以在http://download.playframework.org 下载已发布版本,和每日的最新版。


 

bc. # Additional modules

# ~~~~~

mdoule.gwt=../gwt

module.cms=../cms

module.forum=../forum

module.directory=../directory



学习Play!的过程中,最经常的感受就是——简直太简单了!并不是说Play!是一个设计简单的框架,相反学习中发现处处都会发现Play!设计的完整,这种完整性甚至包括网站设计和学习文档Play!的简单之处在于它学习和使用起来非常简单。使用Play!新建项目,所有的目录结构都会自动建立。Play!摒弃了传统的JSP,Servlet技术(这太伟大了),自己提供了一套非常易用的MVC 框架。Play!内建了JPA的支持,内置了Hibernate作为默认的持久化引擎。

Play!
还内置了HSQLDB 数据库,支持内存数据库,非常方便做项目开发和测试。



Play!
Controller采用命名约定:



1 <form action="@{Application.createUser}">
2     <input name="name" />
3     <input name="password" />
4     <input type="submit" value="Create User" />
5 </form>




无需其他任何配置,Play!会自动映射form中的namepassword参数至createUser方法。



View
Play!使用以Groovy语法写好的html模板中去以render()方法的参数渲染,并将结果回传给客户端。

 

外界介绍:
Play!
虽然使用简单,扩展性却非常强大,篇幅所限所述不能详尽。http://www.playframework.org Play!的官方网站,推荐大家到这儿看看。Play!的文档非常详细,教程中有份手把手做一个Blog引擎的教程,相信照着做一下之后一定会让你学会Play! Framework,那时你一定会爱上她的!

 

 

貌似正常的开发流程,总要面对项目原型构建的问题,重新发明轮子,或者把以前的家伙式儿再搬出来reuse一下?此时此景,都不是最佳选择。

  90%web业务开源系统都是php版本的,特别是新兴产品的开源实现,java的身影几乎销声匿迹了。可惜java出身的人去阅读php风格的代码简直是一种受虐。这其实说明一个道理,java优美的架构还是很有价值的。但优美+务实的平衡才是最佳选择。


  这不,基于java的类RoR风格的full-stack framework的话题又回到我的视线内了,


  几年前是appfuse,基于此搞过几个小项目,但发现熟悉appfuse本身就已经稍重了。而appfuse看起来还真只是个toydemo show +study 为主。


  后来国内出现了springside,应该是借鉴了appfuse的思想,更简单,更符合国情一些了。基于springside开发中小项目也没问题,但国内的开源产品很少能在真正意义上通过多人协作持续变得越来越健壮,版本发布计划总是落单,向下兼容,核心代码等品质还不稳定。


  再到今天的play!framework,几个同事也对play!framework很看好,貌似是目前java阵营里最ROR,同时java开发人员又最易上手的框架了。


  不得不承认,web开发已经完全是php等脚本语言占优了,就算你开发新一代的企业级产品,你也会发现互联网化+轻量化也是个潮流。就算是IBM team collaboration software - Lotus Quickr ,虽然server端是开发了10多年的老系统。但quickr要做的也是在应用层上基于server做业务扩展。这样,再复杂的系统,在前端应用层上来看其实也可以轻装上阵了。


  很多java开发人员对ROR风格不屑一顾甚至根本不关注,不了解,也许是被sun+ibam下毒太深了吧?其实想想,spring的基于接口 bean管理的xml在很多时候也是写一次,到项目下线也未曾修改过。


  java本身也太过强调仅仅java语法层面上的通用,抽象,配置,甚至太OO了,在java诞生的时代,这种做法是很先进的,而当今web应用开发算是一个特定领域,这种不与时俱进,不考虑web开发实际特点的做法有点杀鸡用牛刀之嫌,必然打不过转为web开发场景设计的新的动态脚本语言。 java毕竟不是专为web开发设计的语言,随着时间的推移,java的身躯越来越笨重,版本升级很慢,期待jdk7加强对动态语言的支持:JSR292。但这还不够,就像ruby on rails一样。还得有一个rails框架支撑。java官方的脚步实在是。。。只能用非官方的框架了。


  在中国,企业级系统至少一大半是比互联网线上产品还小的系统。特别是中国互联网公司的玩得还是硬气功,之内的企业级系统开发很多还是停留在一个人,两三个人搞定一个系统的层次上。那这样看来,就算有人认为play!framework不一定适合巨复杂的业务系统,那怎么也很适合这样场景的系统开发了吧。


  appfuse更新的越来越慢,是有原因的。因为play!framework这样的新一代类java ROR full-stack framework已经初长成。GrailsJRuby,也占据新一代java ROR full-stack framework的市场,但与之相比,play!framework的好处是兼容现有的java代码,语法,更加适合过渡期的需要,当然由于基于java这种强类型的静态类型安全检查语言,这也势必通过一些hack手法使play!变得很ROR


  周末网上找了些资料,在电脑上play了一下playframework,的确比appfusespringsideRoR,当然就更好用。


  play!framework 是无状态的mvc框架,搭配memcached,伸缩性应该没啥问题(集群水平扩展应该很好做。)


  play!framework 支持jrebel类似的j效果,修改java代码,无须重启,热部署,很方便。再也不用重复edit-complie-deploy-running漫长之路了,


  还有,java mvc框架最麻烦,最弱的就属view层的模板语言和js实现了,play!framework 采用的是Gsp Groovy server page),及jquery框架。模板语法简练很多。


  也不要被play这个词蒙蔽,play!framework 还是很DDD的。只有属性和getset方法的贫血模型不见了,取而代之的是有行为的充血模型,很DDD吧。


  play!framework 真的很full-stack,连httpserver都给你提供了,


  play!framework Python取代Maven来完成创建,运行等与系统的交互。appfuse之所以学习成本比较高,其实都花在maven本身的配置,理解,使用上了。Python应该更适合于系统打交道,更轻便吧。


  play!framework 本身支持插件机制。扩展应该也没问题。估计也一大堆可用的组件,这个很重要,http://www.playframework.org/modulesspring orm(应该也有Ibatis吧),lucene searchMongoDB,甚至Scala。都很不错。


  想在Model层用一下no-sq的话,Siena组件可以做介个(Siena orm+mongodb就可以了吧)


  
The siena module automatically enable Siena support for your application.

  
Read more at http://www.sienaproject.com/

  我想,支持可插拔组件的框架是衡量一个好框架最重要的指标,一下子事无巨细都塞给你,你肯定消化不良,由繁入减可太难了。好多开源实现都犯同样的问题。搞得你在相当长的一段时间内很头大,饱尝贪多嚼不烂之苦。play!framework 的默认配置可真清爽,连spring bean管理都不是默认配置,根据业务需求不断做加法,正是我想要的。哈哈。

缺点: 


  有人声称play!framework不适合多人协作开发,晕,门户网站千万级用户量的系统核心开发人员也不会超过5-8人。更何况,在多人开发的情况下也是尽量一人负责一块儿的,相反,现在好多开源框架恰恰过多考虑了不符合中国实际的多人协同开发场景,搞得框架分离得过于松散,过于流水线,搞得一两个人开发项目时,反倒觉得麻烦得要死。所以不适合多人协作开发好像也算不上什么缺点。


  ROR COC就是要改变java程序员妄图对一切应用都机械地力求基于接口编程,通用,显式配置才放心的习惯。大部分web应用开发只要做到webservice restful api层面上的面向接口编程,和通用性基本就足够了。不要忘了restful api本身已经是抽象得巨好的架构了。这样,web开发人员才可能提升开发效率,把时间和精力放到业务逻辑本身,这样才有敏捷开发的可能。想想,如果你的开发要点和时间都消耗在未雨绸缪,坐在椅子上凭空想象n年后的需求变更,而作所谓的基于接口编程,再加上缓慢的编译,部署,运行,怎么可能适应敏捷开发的要求呢?反而会导致一个项目虎头蛇尾,前期优雅得要命,后期丑陋得要命,都往action甚至jsp里堆代码了,何苦呢?反不如,一开始就低下你高贵的头颅,心平气和务实地去ROR了。

  总之,简单说,如果play!framework真的兼容了javaphpruby等动态语言的优势,那就是目前java人员web开发最佳的选择之一。




 

  • 大小: 577.6 KB
分享到:
评论
4 楼 cppmule 2015-01-10  
Play!在国内实际产品级应用案例有吗?有哪些公司在用?
国外的LikedIn内部是否大量好用?目前感觉Java开发人员更适合使用1.2.x。
3 楼 linkerlin 2012-03-12  
个人觉得,以后应该是web socket + 纯前端框架。
2 楼 winerdaxian 2011-11-15  
很好的文章,总结的真好!!!
1 楼 estn_h 2011-08-26  
很好!研究研究,还望多指点指点。

相关推荐

    play框架学习手册

    本手册将详细介绍Play框架的核心概念、安装配置、项目结构、基本使用和高级特性。 **一.绪论** 1.1 框架概述 Play框架是一种轻量级的Web应用框架,它遵循MVC(模型-视图-控制器)架构模式,并且为开发人员提供了...

    play测试案例

    总结来说,这个压缩包中的"play测试案例"是一个介绍如何在Play框架中进行单元测试和集成测试的项目。通过学习这个案例,我们可以了解如何创建和运行针对Controller的测试,以及如何利用Play提供的测试工具来确保代码...

    Play Framework Cookbook

    本书介绍了 Play Framework 中集成的测试框架,以及如何编写有效的测试用例来确保代码质量。 - **数据库交互**:Play Framework 内置了 Ebean ORM 工具,用于简化与数据库之间的交互。书中详细讲解了如何配置和使用 ...

    GooglePlay代码及服务器部署

    总结来说,Google Play代码构建涉及Android Studio、签名、混淆等多个环节,而服务器部署则涵盖了应用发布、版本控制、数据分析等多个方面。此外,服务端开发与部署同样关键,包括选择服务器、框架、数据库,以及...

    play1.x连接mongodb

    总结来说,通过Play 1.x与MongoDB的集成,我们可以利用Morphia实现高效的数据操作。配置正确的连接信息,定义数据模型,以及在代码中使用Datastore接口,是连接并操作MongoDB的关键步骤。同时,确保进行充分的单元...

    android play Asset Delivery 打包工具和批处理文件

    总结来说,Android Play Asset Delivery结合bundletool和批处理文件,为大型应用和游戏提供了高效、灵活的分发方案。通过理解并熟练运用这些工具,开发者可以优化其产品的分发策略,提升用户满意度。

    PlayFramework框架缓存.pdf

    总结起来,Play Framework的缓存功能是构建高性能Web应用的关键组件之一。正确理解和使用缓存API,结合适当的缓存策略,可以极大地优化数据库交互,提升系统响应速度,同时要留意缓存的局限性,如数据一致性问题和...

    as3 adobe air ios airplay

    9. **兼容性和适配**:由于AirPlay功能依赖于iOS系统和Apple TV等硬件,开发者需要确保应用程序在各种设备和系统版本上的兼容性。 10. **测试与调试**:在实际设备上进行广泛的测试是确保AirPlay功能正常工作的关键...

    google-play-services_lib

    总结来说,"google-play-services_lib"是Android开发中的关键组件,它简化了对Google服务的集成,提高了应用的用户体验和功能多样性。正确理解和使用这个库对于开发高质量的Android应用至关重要。

    play2学习文档

    该文档的描述部分提到“希望大家好好的利用此资源学习play2,paly是一个很好的全栈框架”,强调了Play2框架的价值和重要性,鼓励读者认真对待这份学习资源。这说明文档的重点在于指导读者全面深入地学习Play2框架,...

    Play Framework Cookbook.pdf

    - **项目初始化与环境搭建**:详细介绍如何快速搭建 Play Framework 项目环境,包括依赖管理、构建工具的选择等。 - **数据库操作**:讲解如何使用 Play Framework 内置的 Ebean ORM 工具进行数据库操作,包括数据...

    Play Framework Cookbook Second Edition

    - **定义与背景**:Play Framework 是一个开源的 Web 开发框架,适用于 Java 和 Scala,特别强调高生产力、易于测试和可扩展性。它采用了一种轻量级、非阻塞的架构,能够高效地处理大量并发请求,非常适合构建现代 ...

    play-java-fileupload-example.zip_java_play_rately7

    总结来说,"play-java-fileupload-example.zip_java_play_rately7" 是一个基于Java的Play Framework项目,用于演示如何在Play的rately7版本中处理文件上传操作。通过研究此示例,开发者可以学习到如何在实际项目中...

    模拟器安装googleplay

    总结来说,"模拟器安装googleplay"涉及到的知识点包括: 1. Android虚拟设备(AVD)的创建和管理。 2. Google Play服务的必要性和作用。 3. Android Debug Bridge(adb)的使用,包括安装`apk`文件。 4. 批处理文件...

    Airplay一款经典且小巧的音乐播放器,总内在不足2M

    **知识点详解** 1. **音乐播放器的基本概念** ...总结,Airplay以其小巧的体积、出色的界面设计和可能的多功能性,成为了音乐爱好者的一个理想选择,尤其适合那些寻求高效、美观和轻量级音乐播放解决方案的用户。

    play framework 框架个人笔记

    - flash:跨请求存储,用于一次性消息传递。 - params:等同于request.getParameters(),获取请求参数。 - renderArgs:渲染到模板的数据。 - validation:用于验证数据。 - Controller类提供多种便利方法,如...

    Playframework cookbook

    - **环境准备**:介绍如何搭建适合 Play Framework 运行的开发环境,包括 JDK、Scala 版本的选择等。 - **框架安装**:指导如何下载并安装 Play Framework,以及如何通过 SBT(Scala Build Tool)进行项目管理。 ##...

    play的用法PPT学习教案.pptx

    通过这个PPT的学习,我们可以更好地理解和掌握play这个词在不同情境下的准确用法,从而提升英语表达的准确性。无论是写作还是口语交流,了解并熟练运用这些用法都是非常重要的,特别是在与音乐、体育或者娱乐相关的...

    play开发手册,数据库开发,配置,单元测试,定时任务等相关文档

    10. **Play开发Tip总结**: 最后,这份文档可能是开发者经验的汇集,包含了开发过程中的一些技巧和常见问题的解决方案,对于快速解决问题和提升开发效率非常有帮助。 通过学习以上文档,开发者不仅可以掌握Play...

Global site tag (gtag.js) - Google Analytics