第一章 緒論
1.5 論文大綱
5、依實驗結果所示,本帄台所能搜集之推文數量超越 YourTwapperKeeper。
此外,由於新浪微博與推特在資料搜集 API 的設計上有異曲同工之處,如兩 介紹 Spring、Open Java Persistence API(JPA)、Twitter4j、Quartz、RabbitMQ、Java Server Pages Standard Template Library(JSTL)、jQWidgets、jQuery、jVectorMap 等 本論文所使用的開放原始碼元件;第三章,完整介紹本論文的核心概念與技術,
包含了從 Model View Control(MVC)與事件趨動(Event-driven)之設計理念,本論文 所使用之推特 API 其及其相關規格與限制,以及如何設計與實作一套具資源感知 性之推文搜集服務群等;第四章,說明本資料搜集帄台的實證與應用;末了,於 第五章提出本論文的結論與未來可能的發展。
‧
模式,也因此,設計模式(Design Pattern)11相關的軟體工程架構議題,蔚為一時 風尚。本章將會介紹及探討本帄台所使用到的基礎觀念以及相關運用的技術、架 構及框架。本帄台主要是以 Java 來進行開發,伺服器(Server)端採用 Spring Framework12容 器,來做為程式元件間主要的控管者,同時也運用設計模式(Design Pattern)中的 Modal-View-Controller(MVC)及 Data Access Object(DAO)等模式。另外,在前端網 頁的展現方面,本帄台主要是以 jQuery13函式庫為主軸,設計前端操作介面與終 端使用者進行互動。
2.1 Model-View-Controller(MVC)
MVC 模式(Model-View-Controller)是軟體工程中的一種軟體架構模式,把軟體 系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。
11(Design Patterns: Elements of Reusable Object-Oriented Software,ISBN 0-201-63361-2)是從 軟體工程領域有關軟體設計,歸納出一些常見軟體設計問題的標準解決方案,稱為軟體設計模式。
該書作者為:Erich Gamma, Richard Helm, Ralph Johnson,John Vlissides,簡稱為「四人幫」(Gang of Four,GoF)。
12 Spring Framework 是一個開放原始碼的 Java/Java EE 應用程式框架,該框架基於 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一書中的程式碼,最初由 Rod Johnson 和 Juergen Hoeller 等開發。
13 jQuery 是一套跨瀏覽器的 JavaScript 函式庫,簡化 HTML 與 JavaScript 之間的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上釋出第一個版本。目前是由 Dave Methvin 領導的開發團 隊進行開發。全球前 10000 個存取最高的網站中,有 65%使用了 jQuery,是目前最受歡迎的 JavaScript 函式庫。
‧
MVC 模式最早由 Trygve Reenskaug 在 1979 年提出,是全錄帕羅奧多研究中心
(Xerox PARC)在 20 世紀 80 年代,為程式語言 Smalltalk 所發明的一種軟體設計
在 MVC 架構下,圖 2. 1 Model-View-Controller 相互間的關係,【模型】與【視 圖】互相看不到對方,唯有透過【控制器】才能讓雙方進行溝通,另外,一個【控 制器】可以對應多個【模型】與【視圖】。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
8
圖 2. 1 Model-View-Controller 相互間的關係。(引用自 Standford CS193P course)
MVC 的觀念看似抽象,但卻可以在我們日常的生活中隨處可見,比方說,一 篇論文的撰寫,其實也是 MVC 觀念的應用,論文的核心內容就是【模型】,而編 輯器依不同的階層(從標題、內文、目錄等),對不同文字、圖表等做出不同的格 式設定(如字型大小、行距、縮排等)就是【視圖】,而我們所使用的文字編輯器 Word,則負責將我們想要呈現的內容,委由不同的格式設定來展現給使用者,
他就是【控制器】的角色,圖 2. 2 文字編輯器的 Model-View-Controller。
圖 2. 2 文字編輯器的 Model-View-Controller。
‧
與使用者互動的 CSS、Javascript、HTML 等。【控制器】除了網頁伺服器 Tomcat18 外,同時也包含著在上面執行所開發實作 Spring MVC 介面的控制器程式。14 Cascading Style Sheets,簡稱 CSS,可以用來決定網頁的顏色、字型、排版等顯示特性。
15 JavaScript,一種執行在瀏覽器上的直譯式程式語言。
16 HyperText Markup Language,簡稱 HTML,是為呈現網頁訊息而設計的一種標記語言。
17 JSP(全名為 JavaServer Pages)是由昇陽公司提出的一種使軟體開發者可以回應客戶端請求,
而動態生成 HTML、XML 或其他格式文件的 Web 網頁的技術標準。
18 Tomcat 是 Jakarta 專案下的一個 Servlet 容器,按照 Sun Microsystems 提供的技術規範,實作了 對 Servlet 和 JavaServer Page(JSP)的支援,並提供了作為 Web 伺服器的一些特有功能。
‧
Spring Framework19是一套由 Java 所開發的框架,提供一完整的程式架構,讓程 式員能專注於其應用程式的開發。使用 Spring Framework 可以將散佈在系統上的 程式元件,正規化地彙整到一個可以立即上線使用的容器。不但如此,他也將很 多已標準化的設計模式,納入其框架的設計中,也就是說使用 Spring Framework,
除了可以使用他自身所提供功能外,同時也可以享受使用設計模式對系統開發/
維護所帶來的好處。Spring Framework 包含了 20 個主要的模組,依其性質及功 能可以分成五大類,分別為 Core Container,Data Access/Integration,Web,
AOP(Aspect Oriented Programming)與 Instrumentation 以及 Test。 (Spring 開發團 隊)
1、Core Container:包括了 Core and Beans、Context、Expression Language 模組,
為 Spring Framework 的核心模組。
2、Data Access/Integration:提供了一系列從 JDBC20、ORM21、JMS22到 Transaction 與資料存取相關的模組。
3、Web:包含了 Web,Web-Servlet,Web-Struts 及 Web-Portlet 等與網路應用程式 相關的模組。
4、AOP 與 Instrumentation:實作符合 AOP Alliance 規範的剖面導向程式設計 (Aspect-oriented programming)23,允許使用者自行定義 method-interceptors 與 pointcuts,同時也支援 class instrumentation 及 classloader 實作。
19 http://projects.spring.io/spring-framework/
20 JDBC(Java Data Base Connectivity)是一種用於執行資料庫查詢語言(Structured Query Language,
SQL)的 Java API。
21 物件關聯對映(Object Relational Mapping, ORM),是一種程式設計技術,用於實現物件導向 編程語言裡,不同類型系統資料之間的轉換。
22 Java 訊息服務(Java Message Service,JMS)是一個 Java 帄台中的 API,用於在兩個應用程序 之間,或於分散式系統中發送訊息進行非同步通訊。
23剖面導向程式設計(Aspect-oriented programming,AOP)是一種程式設計模式。該模式以一種 稱為剖面(aspect)的語言構造為基礎,用來描述分散在物件、類或函式中的橫切關注點
(crosscutting concern)。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
11
5、Test:測詴模組支援使用 JUnit24或 TestNG25來對 Spring 元件進行測詴。
本帄台所使用的核心框架為 Spring,所有的主要邏輯均化身為 Java Bean 的型 式,由 Spring 內建的容器加以管控,在網頁端程式的開發,我們使用設計模式中 的 MVC 模式,並導入 Spring Web MVC 模組,提升前端網頁程式的開發效率及後 續程式的維護品質。圖 2. 3 Spring 框架概觀。
圖 2. 3 Spring 框架概觀。(引用自 Spring 官方網站)
本帄台以二分法來區分,可以分為與使用者互動的網頁應用程式以及專責於 伺服器端執行的推特搜集程式,在網頁應用程式我們是採用 MVC 的架構,並使 用 Spring Web MVC 模組來實現。
Spring Web MVC 模組實作設計模式中的 MVC 模式,他的核心設計原理,主
24 JUnit 是一個 Java 語言的單元測詴框架。
25 TestNG 是一個從 JUnit 與 NUnit 衍生出來的單元測詴框架。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
12
要是環繞在能夠將使用者的請求,分派給不同控制器的 Servlet26上(在 Spring Web MVC 中稱為 Dispatcher Servlet),Spring 強大的數據綁定(Data binding)、注解 (Annotation)、視圖解析(View resolution)以及可高度參數化的組態設定,可以很 快速的設計出 MVC 架構。在 Spring Web MVC 的架構下可以有很多種不同的型式 來實作【控制器】,從 XML 組態檔的設定,程式碼內設定到方便 Java 注解等,均 可以很彈性地任由程式員選擇;而【模型】與【視圖】在 Spring Web MVC 下主 要是以 ModelAndView 這個實體(Instance)來表示,其中包含了【視圖】的名稱以 及以 Map 型態存在的【模型】,可以很方便的整合到 JSP 頁面裡。圖 2. 4 Spring Web MVC 架構,前端使用者的請求進來會先經過 Dispacther Servlet 處理,再來依據 HandlerMapping 的對照表,找出負責處理該請求的控制器,控制器負責取得要展 現給前端使用者的【模型】,最後將從【模型】取得的資料,由【視圖】產生 HTML、
Javascript、CSS 等內容,呈現在終端使用者的瀏覽器裡。
圖 2. 4 Spring Web MVC 架構。(引用自
http://krishnasblog.com/2013/02/22/junit-testing-of-spring-mvc-application-introduction/)
26 Servlet(Server Applet),全稱 Java Servlet,是用 Java 編寫的伺服器端程序。
‧
2.3 Object-relational mapping(ORM)
在 MVC 設計模式下,【模型】可以用很多不同的方式加以實作,在這裡我們採用
27CRUD,全名為(Create、Read、Update、Delete),指資料庫的新增、刪除、修改、查詢命令。
28物件導向程式設計(Object-oriented programming, OOP)是一種程式設計典範,同時也是一 種程式開發的方法。
‧
2.3.1 OpenJPA
評估 ORM 架構的優缺點後,有鑒於在實務上應用本系統並不會常有需要下達複 雜 SQL 查詢語句的情境,為了能專注於問題核心的研究與探索,以及後續維護及 擴充性的考量,我們選擇採用 ORM 的模式來存取資料庫。
JPA(Java Persistence API)為 Java EE 5.0 帄台標準的 ORM 規範,是一個由 EJB 3.0 團隊依 JSR-220 所開發的一套易於使用且伸縮性强大的 ORM 規範。在實際的運
2、JPA 的 API,可針對資料表映射之物件進行 OOP 的操作,執行 CRUD(Create、
Read、Update、Update)等資料庫指令,框架會在背後自動幫我們完成所有的事 情,程式員再也不需要被困在繁瑣的 JDBC 與 SQL 語句之間。
3、Java Persistence Query Language(JPQL),這是持久化作業中一個很重要的一環,
操作的對象為與資料表建立映射關係的物件,而非直接對資料表下達 SQL 語句,
可以有效避免程式碼與 SQL 語句緊密的耦合。
OpenJPA29是一套實作 Java Persistence API 的開放原始碼專案,同時也是 Java 帄台中使用 ORM 的解決方案。JPA 最早是源自 Kodo 這個實作 Java Data Objects 的專案,在 2006 時 BEA 提供大部份 Kodo 的原始碼給 Apache Software Foundation,
29 https://openjpa.apache.org/
‧
並被命名為 OpenJPA,在 2007 年時通過昇陽的 Java Persistence API 相容性認證。
2.3.2 c3p0 DataSources Pools
存取資料庫的模式除了採用 ORM 外,同時也需要考量到要如何有效率地與資料 庫建立連線。一般而言,建立資料庫連線需要耗費不少的系統資源,因此在現今 的資料庫相關應用程式設計上,多採用資料庫連線池(Connection Pool)的做法。
資料庫連線池的核心觀念就是為資料庫連線建立一個「緩衝池」。預先在緩
c3Po 是一個開放原始碼的 JDBC 連接池,與 Hibernate30一起發布,實作了 JDBC3 和 JDBC2 擴展規範所定義的連線池和 SQL 語句池。c3Po 可以很輕易的整合進 Spring Framework 裡,同時也能夠以組態檔設定的方式支援不同的資料源(Data Source)如 OpenJPA、Hibernate 等。
2.4 推特資料搜集
‧
在傳統的主從式架構31裡,客戶端(Client)要獲取受保護的資源(Protected Resources)的時候,要向伺服器端出示資源擁有者(Resource Owner)的帳號密碼才
OAuth 解決這些問題的方法,是導入一個認證層(Authorization layer),並且把 用戶(Client)跟使用者的角色分開。在 OAuth 裡面,用戶會先索取存取權,來存取 資源擁有者所擁有的資源,這些資源會放在資源伺服器上面,並且用戶端會得到 一組不同於資源擁有者所持有的認證碼(Credentials)。
簡單來說,用戶端會取得一組 Access Token 來存取受保護的資源,而非使用
簡單來說,用戶端會取得一組 Access Token 來存取受保護的資源,而非使用