OSCHINA 第 12 期高手问答 —— Play Framework

红薯 发布于 2012/03/18 09:59
阅读 7K+
收藏 5

Play Framework 刚刚发布了 2.0 正式版,Play!是一个full-stack(全栈的)Java Web应用框架,包括一个简单的无状态MVC模型,具有Hibernate的对象持续,一个基于Groovy的模板引擎,以及建立一个现代Web应用所需的所有东西。

本期 OSCHINA 高手问答我们请来土椒网创始人曹江华(@arden )为我们解答 Play Framework 使用中的各种问题。

曹江华(@arden ),网名太阳里的雪,中国几千万程序员中的一名小卒。喜欢关注和研究新技术,早期Play!开发框架技术研究者及实际项目应用者。曾以Play!为核心技术先后开发过泡椒网、土椒网等多个网站。目前为土椒网tujiao.com创始人,2011年12月抛弃上班一族挤身于竟争非常激烈的愺根创业者一族。今后5年致力于土椒网的发展,为广大儿童做点有意义有价值的事情。

OSCHINA 高手问答远离喷子和与主题无关的讨论,谢谢支持。

下面请大家就 Play Framework 的相关问题向 @arden 提问:)

也可以针对 Play Framework 的框架思路进行讨论 

加载中
1
Sephiroth
Sephiroth

我来第一个提问,哈哈

1.Play!1.x版本中,在应用电子商务类应用时,需要注意那些问题呢;

2.Play!有很多成熟的模块,有哪些可以推荐使用呢,有些模块不怎么符合国情,使用起来极其不便;

3.关于Play!部署的容器,就目前几种常见的容器,哪些容器比较推荐呢。

4.Play!有哪些优势和劣势;

5.Play!的性能瓶颈在哪里。

貌似提问的有点多了......,还请曹兄不惜赐教。

1
arden
arden

引用来自“Sephiroth”的答案

我来第一个提问,哈哈

1.Play!1.x版本中,在应用电子商务类应用时,需要注意那些问题呢;

2.Play!有很多成熟的模块,有哪些可以推荐使用呢,有些模块不怎么符合国情,使用起来极其不便;

3.关于Play!部署的容器,就目前几种常见的容器,哪些容器比较推荐呢。

4.Play!有哪些优势和劣势;

5.Play!的性能瓶颈在哪里。

貌似提问的有点多了......,还请曹兄不惜赐教。

1)在电子商务类网站跟其它类型网站应用Play其实遇到的问题都会差不多,也许在电子商务类网站比较要注意的一点可能就是session的问题,因为Play的session机制是基于Cookie的,本身没有服务器端session的概念,这个时候就需要你自己对其session进行简单的封装和处理。

2)Play目前的模块确实比较多,由于国情决定很多好用的模块在国内也许需要进行适当的修改和改善。在土椒网用的比较多的是springrouterplay-loaderplay-redisplay-asset等几个,其中play-asset, play-loader是我们自己写的两个插件。play-loader是用来加载外部及其它目录java源代码,asset是一个基于国外的一个静态资源js,css等管理插件的改写。

3)如果你用了Play其实压根就没必要再用其它tomcat,resiin,glassfish等容器了,因为Play本来讲究的就是开发敏捷,简单,部署方便。其实Play自带的netty性能已经非常不错。

4)Play最大的优势就是开发方便、快速简洁、适合敏捷开发,快速让产品开发完成并上线试运行。当然劣势就是目前还处理发展阶段,有很多需要完善的地方,国内知道的人也比较少,用的人就更少了,资源相对来说比较缺乏,还好就是Play学习起来相对简单。

5)Play最大的性能可能就在于Groovy模版引擎。不过目前Play2.0会好很多。当然Play1也已经有些在性能上面进行改善的模版引擎,如:japidplay-thymeleaffaster-groovy-templates

另外我基于兴趣爱好专门做了一个Play中文交流社区,http://playframework.me,欢迎大家前来交流和讨论Play相关技术。

goandroid
goandroid
原来这个交流社区是你搭建的啊,昨天安装的时候遇到点小问题,搜了一下都没解决,照着这个网站上弄好了: )
JFinal
JFinal
Play确实是Java Web 开发的一次革新,赞一个
0
hulei
hulei

第二个问题:

大家都知道Play Framework 1.x 2.0 控制器为static,请问:

当在大访问量下,恰巧在同一精确时间N个客户端访问static的控制器,是否会有一个客户端得到的是其他客户端的结果??

yeyanzhao
yeyanzhao
回复 @二的基本算合格 : 请问关于static方法调用时的内存分配策略,在什么文档里可以查到相关说明, 或者有没有什么好的帖子资料可以推荐的。谢了!
yeyanzhao
yeyanzhao
回复 @红薯 : 看了下play2提供的jpa的例子,里面的Model层也大量使用了static方法, 这是让人很不解的地方。因为static的变量加载到内存后,在程序周期内就会一直存在于内存。 而大量的model模块都使用static 方法,这是基于什么样的设计考虑呢?请教!
二的基本算合格
二的基本算合格
如果我没记错,java的静态方法是在每次调用时重新分配空间,所以如果你仅使用局部变量就不存在并发的问题,如果使用全局变量,最好能将全局变量设置为final,否则并发会有问题,另外静态方法是不能被GC释放的,这个也是性能的一个瓶颈。
chunquedong
chunquedong
每个方法运行时都有自己的栈空间,这和方法递归调用时不相互影响是一个道理。 至于访问到全局静态变量问题,静态方法和实例方法都会出现这种并发问题。
小败
小败
@hulei : 静态方法只能使用局部变量,或类里面的静态变量,他在使用局部变量的时,也都会实例化这个局部变量,比如有100个人同时调用这个方法,那么就会有100个同名的局部变量在内存里,那么大家虽然都使用的这个方法,但是用的都是自己的变量
下一页
0
涂传龙
涂传龙

初学者路过

完全看不懂说

二的基本算合格
二的基本算合格
每个人都是从不懂到懂,在实践中思考,很快你就懂了!
0
arden
arden
Play确实很多大量使用static,但如果不是在程序中大量使用static的容器级别的变量,如:list, set, map等长久不释放,基本上是不会有什么大的问题。
0
UlricQin
UlricQin

我问个问题:

由于历史遗留问题,现在我们的项目依赖于多个数据库,Play!可否提供php的Yii框架那样的直接对多个数据库进行操作的方案?(多个数据库的表结构不同)

谢谢~

0
大东哥
大东哥
土椒网做得很不错啊,这种网站比较有价值,能分享一下架构吗?
0
arden
arden

引用来自“titanrain”的答案

我问个问题:

由于历史遗留问题,现在我们的项目依赖于多个数据库,Play!可否提供php的Yii框架那样的直接对多个数据库进行操作的方案?(多个数据库的表结构不同)

谢谢~

有一个 play-multidb 插件,可以支持多数据源。另外如果你想用多数据库也可以直接集成spring这个插件。
0
arden
arden

引用来自“大东哥”的答案

土椒网做得很不错啊,这种网站比较有价值,能分享一下架构吗?
土椒网目前主要是基于Play技术框架构建的,另外集成了Spring,直接使用了spring jdbc template做为数据库层。
arden
arden
@亻紫菜彡 现在好象有一个mybaties的插件,https://github.com/bftanase/mybatisplay
南宫仟秋
南宫仟秋
数据库层用myBatis觉的不错,小巧
arden
arden
关于业务数据层是直接封装到spring的service层来了,没有下拉在controller里写大量的业务逻辑。
大东哥
大东哥
想知道你的应用分层吗?还是在controller中直接用new JdbcTemplate?有没有定义spring bean?我这里确实是面要重启的,那个选项也打开了。
arden
arden
我们用Spring,如果不用注解的话,修改bean是不需要重启的。你是不是把application.conf文件里的#play.spring.component-scan=true这个打开呢?
下一页
0
鉴客
鉴客
我的问题是:在生产环境中用什么来跑 Play 应用最好呢? 是成熟的应用服务器,还是用 Play 自身呢?
小查查
小查查
回复 @青春陪葬了无知的年华 : 我们用的Nginx+Play集群,你说所的日IP20W,这个不是Play服务器能否承受的问题,还得看你的带宽,你的硬件,以及你程序本身的优化。
iSea
iSea
每天ip20w,用自身的服务器是否可行?
hulei
hulei
生产的话绝对要自带的啦,调试会少很多麻烦。
arden
arden
刚开始最重要的还是先把产品完善及运转起来。
arden
arden
这个具体没去对比过,不过对于我们这这种流量一般的网站,刚开始没必要过多考虑性能问题。如果有时间到时候看去做个对比测试。
下一页
返回顶部
顶部