歡迎您光臨本站 註冊首頁

Google App Engine for Java: 第 2 部分:構建殺手級應用程序

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
諸如 Google App Engine for Java™ 這樣的雲平台的關鍵在於能夠設計、構建和部署專業級的應用程序 —— 可以非常容易地進行伸縮。在這個包含三部分的 Google App Engine for Java 系列文章第二篇中,Rick Hightower 將通過一個分步指南,使用 Google App Engine for Java 來編寫和部署一個簡單的聯繫人管理應用程序,從而超越 第 1 部分 中提供的現成示例。

在介紹使用 App Engine for Java 構建可伸縮 Java 應用程序的 第 1 部分 中,您了解了 Google 雲計算平台(即 PAAS)為 Java 開發人員提供的 Eclipse 工具和基礎設施。該文章中的示例都是預先準備的,這樣您可以將精力集中到 App Engine for Java 與 Eclipse 的集成中,並快速構建和部署不同類型的應用程序 — 即使用 Google Web Toolkit (GWT) 構建的應用程序和基於 servlet 的應用程序。本文將在此基礎上展開,並且在本系列第 3 部分中提供了更加高級的編程實踐。

您將構建的聯繫人管理應用程序允許用戶存儲基本的聯繫人信息,比如名稱、電子郵件地址和電話號碼。要創建這個應用程序,將需要使用 Eclipse GWT 項目創建嚮導。

雲計算空間

您是否希望隨時獲取最新的雲計算消息?是否想得到雲計算相關的技術知識?developerWorks 雲計算空間就是這樣一個雲計算信息資源的門戶,在這裡您可以了解來自 IBM 和業界其他媒體的最新信息,並且得到如何在雲環境中使用 IBM 軟體的入門知識。

IBM 在 Amazon EC2 雲計算環境中提供了 DB2、Informix、Lotus、WebSphere 等方面的 AMI 鏡像資源。您只需按使用量支付少量費用,就可以使用到雲上的數據、門戶、Web 內容管理、情景應用等服務。歡迎您隨時訪問 雲計算空間,獲取更多信息。

從 CRUD 到聯繫人應用程序

正如目前您已經了解到的一樣,在 App Engine for Java 中構建新應用程序的第一步就是在 Eclipse 啟動項目創建嚮導。之後,您可以打開 GWT 項目啟動嚮導來創建 GWT 項目(本文 第 1 部分 給出了在 App Engine for Java 中創建 GWT 項目的詳細說明)。

對於這個練習,您將啟動一個簡單的 CRUD 應用程序,並稍後添加實際的存儲。我們將使用一個具有模擬實現的數據訪問對象(DAO),如清單 1 所示:


清單 1. ContactDAO 介面
				    package gaej.example.contact.server;    import java.util.List;    import gaej.example.contact.client.Contact;    public interface ContactDAO {      void addContact(Contact contact);      void removeContact(Contact contact);      void updateContact(Contact contact);      List<Contact> listContacts();  }  

ContactDAO 添加了各種方法,可以添加聯繫人、刪除聯繫人、更新聯繫人,並返回一個所有聯繫人的列表。它是一個非常基本的 CRUD 介面,可以管理聯繫人。Contact 類是您的域對象,如清單 2 所示:


清單 2. 聯繫人域對象(gaej.example.contact.client.Contact)
				    package gaej.example.contact.client;    import java.io.Serializable;    public class Contact implements Serializable {            private static final long serialVersionUID = 1L;      private String name;      private String email;      private String phone;        public Contact() {                }            public Contact(String name, String email, String phone) {          super();          this.name = name;          this.email = email;          this.phone = phone;      }        public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }      public String getEmail() {          return email;      }      public void setEmail(String email) {          this.email = email;      }      public String getPhone() {          return phone;      }      public void setPhone(String phone) {          this.phone = phone;      }              }  

對於這個應用程序的第一個版本,您將使用一個模擬對象將聯繫人存儲在一個內存集合中,如清單 3 所示:


清單 3. Mock DAO 類
				    package gaej.example.contact.server;    import gaej.example.contact.client.Contact;    import java.util.ArrayList;  import java.util.Collections;  import java.util.LinkedHashMap;  import java.util.List;  import java.util.Map;    public class ContactDAOMock implements ContactDAO {        Map<String, Contact> map = new LinkedHashMap<String, Contact>();            {          map.put("rhightower@mammatus.com",             new Contact("Rick Hightower", "rhightower@mammatus.com", "520-555-1212"));          map.put("scott@mammatus.com",             new Contact("Scott Fauerbach", "scott@mammatus.com", "520-555-1213"));          map.put("bob@mammatus.com",             new Contact("Bob Dean", "bob@mammatus.com", "520-555-1214"));        }           public void addContact(Contact contact) {          String email = contact.getEmail();          map.put(email, contact);      }        public List<Contact> listContacts() {          return Collections.unmodifiableList(new ArrayList<Contact>(map.values()));      }        public void removeContact(Contact contact) {          map.remove(contact.getEmail());      }        public void updateContact(Contact contact) {                  map.put(contact.getEmail(), contact);      }    }  

創建遠程服務

您現在的目標是創建一個允許您使用 DAO 的 GWT GUI。將使用 ContactDAO 介面上的所有方法。第一步是將 DAP 類(未來版本將直接與伺服器端的數據存儲通信,因此必須位於伺服器中)的功能封裝到一個服務中,如清單 4 所示:


清單 4. ContactServiceImpl
				  package gaej.example.contact.server;    import java.util.ArrayList;  import java.util.List;    import gaej.example.contact.client.Contact;  import gaej.example.contact.client.ContactService;    import com.google.gwt.user.server.rpc.RemoteServiceServlet;    public class ContactServiceImpl extends RemoteServiceServlet implements ContactService {      private static final long serialVersionUID = 1L;      private ContactDAO contactDAO = new ContactDAOMock();        public void addContact(Contact contact) {          contactDAO.addContact(contact);      }        public List<Contact> listContacts() {          List<Contact> listContacts = contactDAO.listContacts();          return new ArrayList<Contact> (listContacts);      }        public void removeContact(Contact contact) {          contactDAO.removeContact(contact);            }        public void updateContact(Contact contact) {          contactDAO.updateContact(contact);      }          }  

注意,ContactServiceImpl 實現了 RemoteServiceServlet,隨後定義方法來添加聯繫人、列出聯繫人、刪除聯繫人,以及更新聯繫人。它將所有這些操作委託給 ContactDAOMock。ContactServiceImpl 不過是一個圍繞 ContactDAO 的包裝器,後者將 ContactDAO 功能公開給 GWT GUI。ContactServiceImpl 在 web.xml 文件中被映射到 URI /contactlist/contacts,如清單 5 所示:


清單 5. web.xml 中的 ContactService
				    <servlet>      <servlet-name>contacts</servlet-name>      <servlet-class>gaej.example.contact.server.ContactServiceImpl</servlet-class>    </servlet>       <servlet-mapping>      <servlet-name>contacts</servlet-name>      <url-pattern>/contactlist/contacts</url-pattern>    </servlet-mapping>  

要使 GUI 前端訪問該服務,需要定義一個遠程服務介面和一個非同步遠程服務介面,如清單 6 和 7 所示:


清單 6. ContactService
				  package gaej.example.contact.client;    import java.util.List;    import com.google.gwt.user.client.rpc.RemoteService;  import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;    @RemoteServiceRelativePath("contacts")  public interface ContactService extends RemoteService {      List<Contact> listContacts();      void addContact(Contact contact);      void removeContact(Contact contact);      void updateContact(Contact contact);  }  


[火星人 ] Google App Engine for Java: 第 2 部分:構建殺手級應用程序已經有449次圍觀

http://coctec.com/docs/linux/show-post-68758.html