论坛首页 Java企业应用论坛

Play!跑在GAE上,小试GAE

浏览 27677 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-08  
whaosoft 写道
play??中国人做的??

是Play! 最后有个"!" 法国人做的。
0 请登录后投票
   发表时间:2009-07-09  
Jackphone 写道
你如果不想以后会大量修改代码的话,暂时不要用Play!开发GAE应用。因为GAE目前对Java的限制很多,Play!要实现JPASupport和JPAModel同时支持Hibernate和GAE,确实有困难,所以,作者准备添加一个GAESupport类,用户可以编写GAE支持的Model,现在GAE的Java支持本身也只是一个Preview版,所以,现在用Play!开发的GAE应用,将来可能会大规模重构。

BTW.关注Play!意义不仅在于开发GAE应用,它的代码本身就写的很好,有很多值得我们学习的地方。



http://www.playframework.org/manual/contents/gae

现在已经有个可以用用了。。。
0 请登录后投票
   发表时间:2009-07-09  
Laynepeng 写道
Jackphone 写道
你如果不想以后会大量修改代码的话,暂时不要用Play!开发GAE应用。因为GAE目前对Java的限制很多,Play!要实现JPASupport和JPAModel同时支持Hibernate和GAE,确实有困难,所以,作者准备添加一个GAESupport类,用户可以编写GAE支持的Model,现在GAE的Java支持本身也只是一个Preview版,所以,现在用Play!开发的GAE应用,将来可能会大规模重构。

BTW.关注Play!意义不仅在于开发GAE应用,它的代码本身就写的很好,有很多值得我们学习的地方。



http://www.playframework.org/manual/contents/gae

现在已经有个可以用用了。。。

这个早就有了,正因为有这个才试着把Play!跑在GAE上的。
0 请登录后投票
   发表时间:2009-07-10  
在中国gae当作玩具玩玩就行了。
0 请登录后投票
   发表时间:2009-07-10  
pure 写道
Laynepeng 写道
Jackphone 写道
你如果不想以后会大量修改代码的话,暂时不要用Play!开发GAE应用。因为GAE目前对Java的限制很多,Play!要实现JPASupport和JPAModel同时支持Hibernate和GAE,确实有困难,所以,作者准备添加一个GAESupport类,用户可以编写GAE支持的Model,现在GAE的Java支持本身也只是一个Preview版,所以,现在用Play!开发的GAE应用,将来可能会大规模重构。

BTW.关注Play!意义不仅在于开发GAE应用,它的代码本身就写的很好,有很多值得我们学习的地方。



http://www.playframework.org/manual/contents/gae

现在已经有个可以用用了。。。

这个早就有了,正因为有这个才试着把Play!跑在GAE上的。



。。。

Play!确实是好东西,花了十分钟把它的manual看完,试了一下,大概用了20分钟调试就可以了。。。

Blog那个sample,

http://laynezone.appspot.com

回头写个blog,介绍一下做法。。。
0 请登录后投票
   发表时间:2009-07-10  
文章全文在:http://blog.csdn.net/laynepeng/archive/2009/07/10/4338873.aspx

为了不被误会卖广告,把主要有用部份抽出来,如下,

其实GAE的局限主要是:

1. 底层是基于Big Table的,完全不是关系型的结构,让他完全支持JPA的复杂关联关系,太吃力了,所以GAE是不能支持Owned relationship和Many to many owned relationship的,也就是一对多,多对多关系不能支持,官方建议自己建立key,程序里面维护关联关系。Blog这个sample程序,因为存在这Post和Comment两个实体,两者之间是一对多的关系,所以GAE是不能支持的,解决方法很简单,把原来的JPA定义方法去掉,Comment里面加个postId的属性,添加comment时,把这个填上就okay了。
2. GAE限制了java.net.Inet.*这些class,所以Play!自带的ehcache1.5版本是用不了的;ehcache1.6声称支持GAE了,那就下个ehcache-1.6.0.jar替代掉原来Play!自带的那个。
3. GAE里面规定,选取出来的entity不能修改,所以Blog的那个sample里面那种:

posts.remove(post);
Collections.reverse(posts);

是不能用的,需要拿出来自己用其他collection里面做,或者在Query的时候排序和过滤。

经过测试,Blog那个例程已经可以跑起来,可以通过这个网址测试:http://laynezone.appspot.com
0 请登录后投票
   发表时间:2009-07-11  
Laynepeng 写道
文章全文在:http://blog.csdn.net/laynepeng/archive/2009/07/10/4338873.aspx

为了不被误会卖广告,把主要有用部份抽出来,如下,

其实GAE的局限主要是:

1. 底层是基于Big Table的,完全不是关系型的结构,让他完全支持JPA的复杂关联关系,太吃力了,所以GAE是不能支持Owned relationship和Many to many owned relationship的,也就是一对多,多对多关系不能支持,官方建议自己建立key,程序里面维护关联关系。Blog这个sample程序,因为存在这Post和Comment两个实体,两者之间是一对多的关系,所以GAE是不能支持的,解决方法很简单,把原来的JPA定义方法去掉,Comment里面加个postId的属性,添加comment时,把这个填上就okay了。
2. GAE限制了java.net.Inet.*这些class,所以Play!自带的ehcache1.5版本是用不了的;ehcache1.6声称支持GAE了,那就下个ehcache-1.6.0.jar替代掉原来Play!自带的那个。
3. GAE里面规定,选取出来的entity不能修改,所以Blog的那个sample里面那种:

posts.remove(post);
Collections.reverse(posts);

是不能用的,需要拿出来自己用其他collection里面做,或者在Query的时候排序和过滤。

经过测试,Blog那个例程已经可以跑起来,可以通过这个网址测试:http://laynezone.appspot.com

写的很不错,解决了我的相关疑问,前两个限制还算合理,但第三个限制就太不方便了,感觉完全失去了JPA的优势。期望google能有更好的解决办法吧,回头我也试一试,谢谢。
0 请登录后投票
   发表时间:2009-07-11  
GAE最头疼的是,不知道在什么时候,你要翻墙
1 请登录后投票
   发表时间:2009-07-11   最后修改:2009-07-11
pure 写道
Laynepeng 写道
文章全文在:http://blog.csdn.net/laynepeng/archive/2009/07/10/4338873.aspx

为了不被误会卖广告,把主要有用部份抽出来,如下,

其实GAE的局限主要是:

1. 底层是基于Big Table的,完全不是关系型的结构,让他完全支持JPA的复杂关联关系,太吃力了,所以GAE是不能支持Owned relationship和Many to many owned relationship的,也就是一对多,多对多关系不能支持,官方建议自己建立key,程序里面维护关联关系。Blog这个sample程序,因为存在这Post和Comment两个实体,两者之间是一对多的关系,所以GAE是不能支持的,解决方法很简单,把原来的JPA定义方法去掉,Comment里面加个postId的属性,添加comment时,把这个填上就okay了。
2. GAE限制了java.net.Inet.*这些class,所以Play!自带的ehcache1.5版本是用不了的;ehcache1.6声称支持GAE了,那就下个ehcache-1.6.0.jar替代掉原来Play!自带的那个。
3. GAE里面规定,选取出来的entity不能修改,所以Blog的那个sample里面那种:

posts.remove(post);
Collections.reverse(posts);

是不能用的,需要拿出来自己用其他collection里面做,或者在Query的时候排序和过滤。

经过测试,Blog那个例程已经可以跑起来,可以通过这个网址测试:http://laynezone.appspot.com

写的很不错,解决了我的相关疑问,前两个限制还算合理,但第三个限制就太不方便了,感觉完全失去了JPA的优势。期望google能有更好的解决办法吧,回头我也试一试,谢谢。


今天由在外面跑了一天,才看到帖子。第三个限制,其实也不麻烦,只是这种设计不适合xxx on rails思想而已,如果是比较早期接触J2EE的话,这个不会陌生。Model定义那几个东西,是直接操作数据库的,也就是我们说的PO,传统的J2EE上面,PO是不可以在Contrioller层操作的,在下面上来的数据需要转为VO才能操作,才能扔给View~这就是DTO模式。Apache的beanutil可以做这个事情,但是这只是个例子,直接setter,getter就可以了。。。

很简单,在Play!里面建个vo的包,建一个PostVo,然后:

        List<Post> posts = Post.findAll();
        Iterator<Post> postIt = posts.iterator();
        List<PostVo> otherPosts = new ArrayList<PostVo>();
        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~~
我刚上传了个新版本,已经和原来的一样了~~
0 请登录后投票
   发表时间:2009-07-11  
Laynepeng 写道
pure 写道
Laynepeng 写道
文章全文在:http://blog.csdn.net/laynepeng/archive/2009/07/10/4338873.aspx

为了不被误会卖广告,把主要有用部份抽出来,如下,

其实GAE的局限主要是:

1. 底层是基于Big Table的,完全不是关系型的结构,让他完全支持JPA的复杂关联关系,太吃力了,所以GAE是不能支持Owned relationship和Many to many owned relationship的,也就是一对多,多对多关系不能支持,官方建议自己建立key,程序里面维护关联关系。Blog这个sample程序,因为存在这Post和Comment两个实体,两者之间是一对多的关系,所以GAE是不能支持的,解决方法很简单,把原来的JPA定义方法去掉,Comment里面加个postId的属性,添加comment时,把这个填上就okay了。
2. GAE限制了java.net.Inet.*这些class,所以Play!自带的ehcache1.5版本是用不了的;ehcache1.6声称支持GAE了,那就下个ehcache-1.6.0.jar替代掉原来Play!自带的那个。
3. GAE里面规定,选取出来的entity不能修改,所以Blog的那个sample里面那种:

posts.remove(post);
Collections.reverse(posts);

是不能用的,需要拿出来自己用其他collection里面做,或者在Query的时候排序和过滤。

经过测试,Blog那个例程已经可以跑起来,可以通过这个网址测试:http://laynezone.appspot.com

写的很不错,解决了我的相关疑问,前两个限制还算合理,但第三个限制就太不方便了,感觉完全失去了JPA的优势。期望google能有更好的解决办法吧,回头我也试一试,谢谢。


今天由在外面跑了一天,才看到帖子。第三个限制,其实也不麻烦,只是这种设计不适合xxx on rails思想而已,如果是比较早期接触J2EE的话,这个不会陌生。Model定义那几个东西,是直接操作数据库的,也就是我们说的PO,传统的J2EE上面,PO是不可以在Contrioller层操作的,在下面上来的数据需要转为VO才能操作,才能扔给View~这就是DTO模式。Apache的beanutil可以做这个事情,但是这只是个例子,直接setter,getter就可以了。。。

很简单,在Play!里面建个vo的包,建一个PostVo,然后:

        List<Post> posts = Post.findAll();
        Iterator<Post> postIt = posts.iterator();
        List<PostVo> otherPosts = new ArrayList<PostVo>();
        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~~
我刚上传了个新版本,已经和原来的一样了~~

还有一个大文本的问题,GAE只能使用Text字段来存放大文本,这样play!会有问题。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics