做这个,是因为在JavaEye上看到看到一篇文章《Play!跑在GAE上,小试GAE》,里面讨论了一个新的Java On Rails式框架,来自法国的Play!(http://www.playframework.org/ )。大概看了下这个框架的介绍,的确很优秀,举点比较cool的特点:
创新互联公司服务项目包括友好网站建设、友好网站制作、友好网页制作以及友好网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,友好网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到友好省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
大概看了下这个框架,感觉蛮好的,但那篇文章里面讨论的主要是,Play!集成在GAE里面的一些问题,这个框架带了个非常非常简单的Blog程序,就没法部署到GAE上面成功。很容易理解,GAE阉割过JDK和对JPA的支持是不完善的。我申请GAE账号很长时间了,但没有玩过,刚好两个一起研究一下。
其实GAE的局限主要是:
- posts.remove(post);
- Collections.reverse(posts);
是不能用的,需要拿出来自己用其他collection里面做,或者在Query的时候排序和过滤。这个限制其实也不麻烦,只是这种设计不适合xxx on rails思想而已,如果是比较早期接触J2EE的话,这个不会陌生。Model定义那几个东西,是直接操作数据库的,也就是我们说的PO,传统的J2EE上面,PO是不可以在Contrioller层操作的,在下面上来的数据需要转为VO才能操作,才能扔给View~这就是DTO模式。Apache的beanutil可以做这个事情,但是这只是个例子,直接setter,getter就可以了。 这里给出一个解决方法:在Play!里面建个vo的包,建一个PostVo,然后用以下代码替代上面那两句,
- List
posts = Post.findAll(); - Iterator
postIt = posts.iterator(); - List
otherPosts = new ArrayList (); - while (postIt.hasNext()) {
- Post postItem = postIt.next();
- if (postItem.id.longValue() != id.longValue()) {
- PostVo postVo = new PostVo();
- postVo.setId(postItem.id);
- postVo.setTitle(postItem.title);
- postVo.setContent(postItem.content);
- postVo.setDate(postItem.date);
- otherPosts.add(postVo);
- }
- }
- Collections.reverse(otherPosts);
当然在view里面要用otherPosts来替代posts,迭代otherPosts就可以了~
经过测试,Blog那个例程已经可以跑起来,可以通过这个网址测试:http://laynezone.appspot.com
总 结:
Play!这个框架我是蛮喜欢的,难得看到Java有类似的快捷框架出现,如果场合合适的话,值得考虑使用。另外,GAE,在持久化那部份限制蛮多的,但是可以理解,毕竟Google底层的持久化结构并不是关系模型。能够把JPA实现到这个程度,已经很好了~
既然客观原因不能改变,我们就自己改变去适应它,毕竟withod RMDB已经喊了很长时间,其实只要观念稍变下,就好了~
由于,我看GAE和Play!两个东西的时间,就是今天(周五)下班到八佰伴吃完个饭回家到现在,不足1个小时,也没研究Play!的源代码,所说之处,难免有错,请大家互相交流~
当前文章:10分钟用Play!在GAE上实现一个Blog
当前链接:http://www.shufengxianlan.com/qtweb/news41/258441.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联