Your SlideShare is downloading. ×
0
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
GAE/J 簡介
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

GAE/J 簡介

2,997

Published on

GAE/J 簡介 on TWJUG

GAE/J 簡介 on TWJUG

Published in: Technology, News & Politics
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,997
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
1
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. GAE/J 簡介 Cloud Tu
  • 2. Agenda <ul><li>GAE 是什麼 </li></ul><ul><li>為何選擇 GAE </li></ul><ul><li>GAE 支援的程式語言 </li></ul><ul><li>事前準備 </li></ul><ul><li>快速上手 </li></ul><ul><li>深入研究 </li></ul><ul><li>Q&A </li></ul>
  • 3. GAE(GoogleAppEngine) 是什麼 <ul><li>官方講法 ( http://code.google.com/intl/en/appengine/docs/whatisgoogleappengine.html ) </li></ul><ul><li>簡單來說就是「雲端的 ServletContainer 」 </li></ul><ul><ul><li>Google 提供 ServletContainer </li></ul></ul><ul><ul><li>Google 幫你維護系統 </li></ul></ul><ul><ul><li>你開發在這之上的 App </li></ul></ul>
  • 4. 為何選擇 GAE <ul><li>免費 ! </li></ul><ul><ul><li>只在小型 App 的狀況下啦 </li></ul></ul><ul><li>收費標準 </li></ul><ul><ul><li>請參考價目表 ( http:// code.google.com/intl/en/appengine/docs/billing.html ) </li></ul></ul><ul><li>Google 幫你搞定 Scale 、 Security… 一堆阿殺不魯的工作 </li></ul><ul><li>雲端服務器比較不會掛掉 </li></ul><ul><li>免費 ! </li></ul><ul><ul><li>只在小型 App 的狀況下啦 </li></ul></ul><ul><li>收費標準 </li></ul><ul><ul><li>請參考價目表 ( http:// code.google.com/intl/en/appengine/docs/billing.html ) </li></ul></ul><ul><li>Google 幫你搞定 Scale 、 Security… 一堆阿殺不魯的工作 </li></ul><ul><li>雲端服務器比較不會掛掉 </li></ul>
  • 5. GAE 支援的程式語言 <ul><li>可以選擇 </li></ul><ul><ul><li>Python </li></ul></ul><ul><ul><li>Java </li></ul></ul><ul><ul><li>Go </li></ul></ul><ul><li>本次介紹 Java 版 GAE </li></ul>
  • 6. 事前準備 <ul><li>必備技能 </li></ul><ul><ul><li>JSP 、 Servlet 程式能力 </li></ul></ul><ul><ul><li>略懂 JUnit </li></ul></ul><ul><ul><li>略懂 Emma </li></ul></ul>
  • 7. 事前準備 <ul><li>安裝下列 Eclipse plugin </li></ul><ul><ul><li>EclEmma( http://www.eclemma.org/installation.html ) </li></ul></ul><ul><ul><li>GAE 相關 plugin ( http://code.google.com/intl/en/appengine/docs/java/gettingstarted/installing.html ) </li></ul></ul>
  • 8. 快速上手 <ul><li>官方版 </li></ul><ul><ul><li>http://code.google.com/intl/en/appengine/docs/java/gettingstarted/ </li></ul></ul><ul><li>超簡單版本 ( 流程如下 ) </li></ul><ul><ul><li>1. 寫 HelloWorldServlet </li></ul></ul><ul><ul><li>2. 設定 appengine-web.xml 、 web.xml </li></ul></ul><ul><ul><li>3.Local 端測試 </li></ul></ul><ul><ul><ul><li>LocalAppUrl( http://localhost:8888/ ) </li></ul></ul></ul><ul><ul><ul><li>LocalAdminConsoleUrl( http://localhost:8888/_ah/admin ) </li></ul></ul></ul><ul><ul><li>4. 上傳至 GAE </li></ul></ul>
  • 9. 快速上手 <ul><li>Live Demo </li></ul>
  • 10. 深入研究 <ul><li>申請 GAE 帳號 </li></ul><ul><ul><li>至 https://appengine.google.com/ 進行申請 </li></ul></ul><ul><ul><li>申請流程教學可參考 http://nchc-gae.blogspot.com/2009/05/google-app-engine.html </li></ul></ul><ul><li>GAE 提供的功能 </li></ul><ul><ul><li>http://code.google.com/intl/en/appengine/docs/java/overview.html </li></ul></ul><ul><li>本次介紹主題 </li></ul><ul><ul><li>Servlet + Datastore + JUnit + Emma </li></ul></ul>
  • 11. 深入研究 ( Servlet+Datastore+JUnit+Emma) <ul><li>Servlet </li></ul><ul><ul><li>JavaEE 上那套玩意兒,沒有不同 </li></ul></ul><ul><li>Datastore </li></ul><ul><ul><li>GAE 專用的資料庫服務,與傳統關聯式資料庫不同,是分散式資料結構資料庫 (NoSQL) </li></ul></ul><ul><li>JUnit </li></ul><ul><ul><li>老牌的單元測試框架 </li></ul></ul><ul><li>Emma </li></ul><ul><ul><li>程式碼涵蓋率工具 </li></ul></ul>
  • 12. 深入研究 (Servlet) <ul><li>大家都會 Servlet ,直接略過…  </li></ul>
  • 13. 深入研究 ( Datastore) <ul><li>Datastore 簡述 </li></ul><ul><ul><li>GAE 上面提供的分散式資料結構資料庫 (NoSQL) 服務 </li></ul></ul><ul><li>Datastore 裡的術語 </li></ul><ul><ul><li>Kind 、 Entity 、 Key 、 Property </li></ul></ul><ul><ul><li>Query 、 Index </li></ul></ul><ul><ul><li>EntityGroup </li></ul></ul><ul><ul><li>Transaction </li></ul></ul>
  • 14. 深入研究 ( Datastore) 什麼是 Kind 、 Entity 、 Key 、 Property? User 傳統關聯式資料庫 Datastore User Sport Null Null Favor2 Movie Null Null Favor3 Music Cloud 1 Music Tom 3 Null John 2 Favor1 Name PK Music Favor Cloud Name 1 Key John Name 2 Key Music , Sport , Movie Favor Tom Name 3 Key Kind Table Key PK Property Field Entity Row
  • 15. 深入研究 ( Datastore) DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); Entity employee = new Entity(&quot;Employee&quot;); employee.setProperty(&quot;firstName&quot;, &quot;Antonio&quot;); employee.setProperty(&quot;lastName&quot;, &quot;Salieri&quot;); Date hireDate = new Date(); employee.setProperty(&quot;hireDate&quot;, hireDate); employee.setProperty(&quot;attendedHrTraining&quot;, true); datastore.put(employee); 什麼是 Kind 、 Entity 、 Key 、 Property? 在 Entity 的 constructor 中指定。未指定時,系統會自動指派一個 UUID 的 key
  • 16. 深入研究 ( Datastore) <ul><li>如何進行 Query? </li></ul><ul><ul><li>官方文件 ( http://code.google.com/intl/en/appengine/docs/java/datastore/queries.html ) </li></ul></ul><ul><ul><li>有建立 Index 的 Property 才可被當查詢條件 </li></ul></ul><ul><ul><li>大多數的 Property 會被自動建立 Index(Blob 這類的資料不會建立 Index) </li></ul></ul><ul><ul><li>範例 </li></ul></ul>Query q = new Query(&quot;Person&quot;); q.addFilter(&quot;lastName&quot;, Query.FilterOperator.EQUAL , lastNameParam); q.addFilter(&quot;height&quot;, Query.FilterOperator.LESS_THAN , maxHeightParam); PreparedQuery pq = datastore.prepare(q); pq.asIterable();
  • 17. 深入研究 ( Datastore) <ul><li>Query 的限制 ? </li></ul><ul><ul><li>存在的 Property 才可進行查詢或排序 </li></ul></ul><ul><ul><li>查詢條件式中 只能在一個 Property 使用不等式 ,其它都必需為等式 </li></ul></ul><ul><ul><li>如果要進行排序,建議將查詢條件式中被指定的 Properties 都明確指定其排序順序 </li></ul></ul><ul><ul><li>還有一大堆限制,請上官網爬文 ( http://code.google.com/intl/en/appengine/docs/java/datastore/queries.html ) </li></ul></ul>
  • 18. 深入研究 ( Datastore) <ul><li>什麼是 EntityGroup ,有何用處 ? </li></ul><ul><ul><li>有相同 ParentKey 的 Entities 稱之為同一 EntityGroup </li></ul></ul><ul><ul><li>同一 EntityGroup 的 Entities 可綁定在同一 Transaction 進行資料操作 </li></ul></ul><ul><ul><li>EntityGroup 一般使用在 OneToMany 的資料關聯之上 </li></ul></ul>
  • 19. 深入研究 ( Datastore) 什麼是 EntityGroup ,有何用處 ? User 自動產生 RootKey ParentKey Cloud Name 1 Key 自動產生 RootKey ParentKey John Name 2 Key 2 ParentKey Mary Name 3 Key 2 ParentKey Mary Name 4 Key 2 ParentKey Joe Name 5 Key A EntityGroup B EntityGroup
  • 20. 深入研究 ( Datastore) Entity parent = new Entity(&quot;User&quot;); Entity child1 = new Entity(&quot;User&quot;, parent.getKey()); Entity child2 = new Entity(&quot;User&quot;, parent.getKey()); 什麼是 EntityGroup ,有何用處 ? Constructor 未指定其 ParentKey 時,系統自動幫你產生一個 RootKey <ul><li>child1 、 child2 有相同的 parentkey ,二者可綁定在同個 Transaction 進行資料操作 </li></ul><ul><li>可在 parent 刪除時,一併把子項 (child1 、 child2) 刪除 ( 註:非系統本身特性,而是在刪除時在程式碼裡註明一併刪除 ) </li></ul>
  • 21. 深入研究 ( Datastore) <ul><li>Transaction 的特性為何 ? </li></ul><ul><ul><li>跟傳統資料庫的 Transaction 大不同 </li></ul></ul><ul><ul><li>同個 EntityGroup 的資料才可以綁定 Transaction </li></ul></ul><ul><ul><li>一個 Transaction 只許可 一個 EntityGroup 進行操作, GAE 不許可同個 Transaction 綁定多個 EntityGroup </li></ul></ul><ul><ul><li>官方文件 ( http://code.google.com/intl/en/appengine/docs/java/datastore/transactions.html ) </li></ul></ul>
  • 22. 深入研究 ( Datastore) <ul><li>Datastore 格式的選擇 </li></ul><ul><ul><li>The High Replication Datastore( 官方建議的選擇 ) </li></ul></ul><ul><ul><li>The Master/Slave Datastore </li></ul></ul><ul><ul><li>官方文件 ( http://code.google.com/intl/en/appengine/docs/java/datastore/hr/ ) </li></ul></ul>
  • 23. 深入研究 ( Datastore) 其實…可以利用 JPA 或 JDO 對 Datastore 進行操作 ! 我個人比較不建議利用此方式 因為…到頭來還是必需深入了解 Datastore 才能解決資料存取層的各種問題
  • 24. 深入研究 (JUnit + Emma) <ul><li>GAE 本身提供各類 Service 的 MockObject 可供測試 </li></ul><ul><li>官方文件 ( http://code.google.com/intl/en/appengine/docs/java/tools/localunittesting.html ) </li></ul>
  • 25. 深入研究 (JUnit) GAE 本身提供模擬 Server 端環境的 MockObject
  • 26. 深入研究 (Emma) 綠色區塊代表已測到部份,紅色則是末測部份 百分比指涵蓋率
  • 27. <ul><li>設定 appengine-web.xml </li></ul><ul><ul><li>官方文件 ( http://code.google.com/intl/en/appengine/docs/java/config/appconfig.html#About_appengine_web_xml ) </li></ul></ul><ul><ul><li>範例 </li></ul></ul><ul><li>上傳至 GAE </li></ul><ul><ul><li>可利用 Eclipse plugin 上傳或手動下 Console 指令 </li></ul></ul>深入研究 (Config) <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?> <appengine-web-app xmlns=&quot;http://appengine.google.com/ns/1.0&quot;>   <application> application-id </application>   <version> 1 </version> </appengine-web-app>
  • 28. 深入研究 <ul><li>Live Demo </li></ul>
  • 29. GAE 大爆炸 !!!
  • 30. 深入研究 (GAE 的限制 ) <ul><li>GAE 發生問題的原因 </li></ul><ul><ul><li>一個 HttpRequest&Response 要在 30 秒完成,否則噴 Error </li></ul></ul><ul><ul><li>Datastore 裡一次取出海量的資料,可能會被 GAE 丟出 Error </li></ul></ul><ul><ul><li>Local 端測試結果與 GAE 上 極度可能 大不同 ! </li></ul></ul><ul><ul><li>別想開 MultiThread , GAE 不準你亂搞 ! </li></ul></ul><ul><ul><li>想存取 GAE Server 端檔案系統 ? 門都沒有 ! </li></ul></ul><ul><ul><li>還有很多限制…等著你燃燒熱血來試試 </li></ul></ul>
  • 31. <ul><li>GAE 諸多限制背後的原因 ? </li></ul><ul><li>安全 & 效能 </li></ul>深入研究 (GAE 的限制 )
  • 32. <ul><li>Q&A </li></ul>

×