日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
10分鐘用Play!在GAE上實(shí)現(xiàn)一個(gè)Blog

做這個(gè),是因?yàn)樵贘avaEye上看到看到一篇文章《Play!跑在GAE上,小試GAE》,里面討論了一個(gè)新的Java On Rails式框架,來自法國的Play!(http://www.playframework.org/ )。大概看了下這個(gè)框架的介紹,的確很優(yōu)秀,舉點(diǎn)比較cool的特點(diǎn):

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括友好網(wǎng)站建設(shè)、友好網(wǎng)站制作、友好網(wǎng)頁制作以及友好網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,友好網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到友好省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

  • Bind an HTTP parameter to a Java method parameter: 就是說,可以在URL上直接調(diào)用Controller里面的方法;
  • Redirect to an action by simply calling the corresponding Java method:這個(gè)不用解析了;
  • Don't Repeat Yourself when passing Java objects to templates: 也就是說,從controller往View傳數(shù)據(jù),不需要把object放在map里面,可以類似:render(titile, article, user);這樣做,就是Java5里面的動(dòng)態(tài)參數(shù)的使用啦;
  • Straightforward file upload management;
  • Distribute an application to several JVMs without configuring anything;
  • Fix the bug and hit Reload: 這個(gè)無敵,大概就是說,修改程序后,直接reload程序就好,框架自動(dòng)編譯程序,因?yàn)檫@個(gè)框架內(nèi)部帶了個(gè)Container,所以可以做到這個(gè)。這個(gè)有點(diǎn)像把Java給動(dòng)態(tài)化了,調(diào)試起來省不少事;
  • 另外就是多個(gè)plugin可以使用等等。

大概看了下這個(gè)框架,感覺蠻好的,但那篇文章里面討論的主要是,Play!集成在GAE里面的一些問題,這個(gè)框架帶了個(gè)非常非常簡單的Blog程序,就沒法部署到GAE上面成功。很容易理解,GAE閹割過JDK和對JPA的支持是不完善的。我申請GAE賬號(hào)很長時(shí)間了,但沒有玩過,剛好兩個(gè)一起研究一下。

其實(shí)GAE的局限主要是:

  1. 底層是基于Big Table的,完全不是關(guān)系型的結(jié)構(gòu),讓他完全支持JPA的復(fù)雜關(guān)聯(lián)關(guān)系,太吃力了,所以GAE是不能支持Owned relationship和Many to many owned relationship的,也就是一對多,多對多關(guān)系不能支持,官方建議自己建立key,程序里面維護(hù)關(guān)聯(lián)關(guān)系。Blog這個(gè)sample程序,因?yàn)榇嬖谶@Post和Comment兩個(gè)實(shí)體,兩者之間是一對多的關(guān)系,所以GAE是不能支持的,解決方法很簡單,把原來的JPA定義方法去掉,Comment 里面加個(gè)postId的屬性,添加comment時(shí),把這個(gè)填上就okay了。
  2. GAE限制了java.net.Inet.*這些class,所以Play!自帶的ehcache1.5版本是用不了的;ehcache1.6聲稱支持GAE了,那就下個(gè)ehcache-1.6.0.jar替代掉原來Play!自帶的那個(gè)。
  3. GAE里面規(guī)定,選取出來的entity不能修改,所以Blog的那個(gè)sample里面那種:
 
 
 
  1. posts.remove(post);  
  2. Collections.reverse(posts); 

是不能用的,需要拿出來自己用其他collection里面做,或者在Query的時(shí)候排序和過濾。這個(gè)限制其實(shí)也不麻煩,只是這種設(shè)計(jì)不適合xxx on rails思想而已,如果是比較早期接觸J2EE的話,這個(gè)不會(huì)陌生。Model定義那幾個(gè)東西,是直接操作數(shù)據(jù)庫的,也就是我們說的PO,傳統(tǒng)的J2EE上面,PO是不可以在Contrioller層操作的,在下面上來的數(shù)據(jù)需要轉(zhuǎn)為VO才能操作,才能扔給View~這就是DTO模式。Apache的beanutil可以做這個(gè)事情,但是這只是個(gè)例子,直接setter,getter就可以了。 這里給出一個(gè)解決方法:在Play!里面建個(gè)vo的包,建一個(gè)PostVo,然后用以下代碼替代上面那兩句,

 
 
 
  1. List posts = Post.findAll();  
  2. Iterator postIt = posts.iterator();  
  3. List otherPosts = new ArrayList();  
  4. while (postIt.hasNext()) {  
  5.       Post postItem = postIt.next();  
  6.       if (postItem.id.longValue() != id.longValue()) {  
  7.           PostVo postVo = new PostVo();  
  8.           postVo.setId(postItem.id);  
  9.           postVo.setTitle(postItem.title);  
  10.           postVo.setContent(postItem.content);  
  11.           postVo.setDate(postItem.date);  
  12.           otherPosts.add(postVo);  
  13.      }  
  14. }  
  15.       Collections.reverse(otherPosts); 

當(dāng)然在view里面要用otherPosts來替代posts,迭代otherPosts就可以了~

經(jīng)過測試,Blog那個(gè)例程已經(jīng)可以跑起來,可以通過這個(gè)網(wǎng)址測試:http://laynezone.appspot.com

總  結(jié):

Play!這個(gè)框架我是蠻喜歡的,難得看到Java有類似的快捷框架出現(xiàn),如果場合合適的話,值得考慮使用。另外,GAE,在持久化那部份限制蠻多的,但是可以理解,畢竟Google底層的持久化結(jié)構(gòu)并不是關(guān)系模型。能夠把JPA實(shí)現(xiàn)到這個(gè)程度,已經(jīng)很好了~

既然客觀原因不能改變,我們就自己改變?nèi)ミm應(yīng)它,畢竟withod RMDB已經(jīng)喊了很長時(shí)間,其實(shí)只要觀念稍變下,就好了~

由于,我看GAE和Play!兩個(gè)東西的時(shí)間,就是今天(周五)下班到八佰伴吃完個(gè)飯回家到現(xiàn)在,不足1個(gè)小時(shí),也沒研究Play!的源代碼,所說之處,難免有錯(cuò),請大家互相交流~


分享標(biāo)題:10分鐘用Play!在GAE上實(shí)現(xiàn)一個(gè)Blog
文章地址:http://www.5511xx.com/article/cojehcd.html