開源技術選型手冊

開源項目網站SourceForge

 

開源軟件覆蓋了軟件應用各個領域。

 

軟件開發中的建模

參與到核心技術研發中。

 

1、In Action

(1)web框架

mvc框架:使開發者專注於業務邏輯,不用分心於如何分派請求。

web要能與外部系統交互,要結合工作流。

 

web框架更多關注業務層。在表現層和數據層可以結合一些其他開源產品。如表現層除了使用jsp,還可以使用velocity和freemarker來呈現。

 

struts2將OSGI的設計理念(模塊化)貫穿其中。

攔截器和攔截器棧,對Action進行預處理和事後處理。

 

約定優於配置是Rails帶入web開發中的概念。

在struts2中,模塊化已經成爲了體系架構中的基本思想:用戶可以通過插件來對框架進行擴展。——把與特定應用無關的新功能組織成插件,應用到多個應用中;規範化的模塊系統。

 

Struts2的OSGI插件:開發人員可以把應用拆分成多個獨立的jar包,只要把它們放到服務器恰當的位置上,該插件就可以把它們一一找出並進行部署,還可以實時添加、移除或升級插件,無需重啓整個應用。 這樣可以在內部把越來越多的功能綁到了插件中去,代碼只需關注核心功能並更加敏捷。

 

簡單的插件體系結構——扔一個jar文件進來就可以擴展框架而不需要手動配置。

 

spring framework提供了應用程序所需的基礎設施。改善應用程序的質量和性能,讓程序更易測試。

spring採用了分層架構,你可以僅僅使用你需要的那部分功能。

spring爲項目帶來的好處:

a、基於spring的應用程序易於測試;

b、spring提供大量輔助方法,類似JDBC、JMS、JavaMail的API在被封裝後以相近的形式出現在開發者面前。有了spring,一切都變得簡單;

c、你的代碼可以完全不用依賴於spring API。

 

B/S架構進入企業級應用開發中。

EJB在沒有工具支持的情況下使用異常複雜。

 

spring的事務管理需要聲明事務管理器,由於Hibernate、JDO、JDBC的事務管理器都不一樣,因此將其與其他事務的配置分開存放。

如:

<!-- 使用註解來實現事務管理-->

<tx:annotation-driven transaction-manager="transactionManager" />

<!-- hibernate的事務管理器-->

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" />

 

在web.xml中載入spring applicationContext的配置

<listener>

        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

 

 非侵入性的特點使得應用程序代碼能完全不依賴於spring API。

 

 spring思想和理念包含了被反覆驗證的最佳實踐,理解了這些,即使沒有框架,一樣能開發優秀的系統。

 

(2)動態語言

靜態語言的數據類型是在編譯期間檢查的,即在寫程序時,要聲明所有變量的數據類型。 

動態語言,也叫腳本語言,是指在運行期間纔去做數據類型檢查的語言。即不需要給任何變量指定數據類型,它會在你第一次賦值給變量時,在內部將數據類型記錄下來。如Ruby、Python、Groovy。

 

ActionScript由Flash Player中的ActionScript虛擬機來執行,主要在Flash內容和應用程序中實現交互性、數據處理以及其它的功能。

Erlang是一個結構化的動態編程語言,內建並行計算支持。——>被廣泛應用於分佈式計算系統。

perl可以很容易操作文本、文件、目錄、計算機和網絡等,可以很容易在任何現代的操作系統上進行移植。

 

對於Python、Ruby和Groovy等動態語言,通常都會結合與相應的web框架使用。如Python和Django、Ruby和Rails、Groovy和Grails等。

 

Python是即譯式的(執行腳本前不需對Python代碼進行編譯)、面向對象的語言。可以用來開發各種程序。

 

python helloworld.py:執行Python腳本;

若選用Python構建web應用,可以選用Django框架。 

 

(3)面向服務架構(SOA)

web服務只是SOA的實現技術之一。

工具有Apache CXF,服務基礎設施;Apache ODE,BPEL引擎;Apache Tuscany,SCA/SDO的第一個參考實現。

 

案例學習

 

Apache CXF是一個開源的服務框架

a、與spring集成——>靈活的配置,出色的性能;

b、提供了RESTful服務的支持;

c、可插撥的框架設計,對其他數據綁定和遺留系統提供了支持;

d、商業友好的Apache許可證

 

CXF支持多種傳輸協議、數據格式:

a、格式:XML、JSON

b、傳輸協議:HTTP、JMS等

c、綁定:SOAP、REST/HTTP

d、可擴展的API允許開發者方便對綁定和消息格式進行擴展;

e、靈活的部署:Tomcat等輕量級容器或spring的容器?或應用服務器中;

 

CXF旨在爲服務創建必要的基礎設施。它的整體架構主要由以下幾個部分組成:

a、Bus

是CXF架構的主幹,爲共享資源提供了一個可配置的場所,作用類似於spring的ApplicationContext。這些共享資源包括WSDL管理器、綁定工廠等。通過對Bus進行擴展,可方便容納自己的資源,或替換現有的資源。默認Bus實現是基於spring的。通過依賴注入,將運行時組件串起來。Bus的創建由BusFactory負責,默認是SpringBusFactory,對應於默認的Bus實現。在構造過程中,SpringBusFactory會搜索META-INF/cxf(就包含在CXF的jar中)下的所有Bean配置文件,根據它們構建一個ApplicationContext。開發者也可提供自己的配置文件來定製Bus。

b、消息傳遞和攔截器

CXF建立於一個通用的消息層之上,主要由消息、攔截器和攔截器鏈組成。CXF是以消息處理爲中心。通過攔截器,開發者可以方便地在消息傳遞、處理的整個過程中對CXF進行擴展。攔截器的方法主要有兩個:handleMessage和handleFault,分別對應消息處理和錯誤處理。在開發攔截器時注意兩點:

攔截器不是線程安全的,不建議在攔截器中定義實例變量並使用它。這一點和JSP/Servlet中對於Filter的處理是一樣的

不要調用下一個攔截器的handleMessage或handleFault,這個工作由InterceptorChain來完成。

c、 前端(FrontEnd)

它爲CXF提供了創建服務的編程模型,當前主要的前端就是JAX-WS。

d、服務模型

CXF中的服務通過服務模型來表示。它主要有兩部分:ServiceInfo和服務本身。ServiceInfo作用類似WSDL,包含接口信息、綁定、端點(EndPoint)等信息;服務包含了ServiceInfo、數據綁定、攔截器和服務屬性等信息。可使用Java類和WSDL來創建服務。一般是由前端負責服務的創建,它通過ServiceFactory來完成。

e、綁定

綁定提供了在傳輸之上映射具體格式和協議的方法,主要的兩個類是Binding和BindingFactory。BindingFactory負責創建Binding。

f、傳輸

爲了向綁定和前端屏蔽傳輸細節,CXF提供了自己的傳輸抽象。其中主要有兩個對象:Conduit和Destination。前者是消息發送的基礎,後者對應消息接收。開發者還可以給Conduit和Destination註冊MessageObserver,以便在消息發送和接收時獲得通知。 

 

CXF可以創建的web服務應用有兩種:服務提供者和服務消費者。

服務只有發佈之後才能被消費

 

熟悉工具涉及領域的協議。雖然CXF提供了簡化服務創建的編程模型,若不瞭解WS-*協議,在遇到問題調試時必然會花不少時間。尤其在SOA的環境中,客戶端和服務不一定使用同一語言、同一工具實現的情況下,互操作問題經常是由於對協議的不同支持造成的。

作爲CXF實現內容的一個重點,JAX-WS值得關注。

spring幾乎已成爲開發服務器端應用的首選

CXF有大量的例子,它們是熟悉和了解CXF的大門。

動態語言Groovy由於其語法和java兼容且提供了不少方便的語法,吸引了不少java開發者。Grails框架。GroovyWS專爲Groovy開發,底層就是CXF。 

 

Axis2不能和spring集成在一起。

 

Apache ODE是基於java的開源WS-BPEL引擎,它的主要功能是執行適用BPEL描述的業務流程,實現業務流程自動化。在開源BPEL引擎領域,建議關注Apache ODE。

ODE可以方便地和ESB(如ServiceMIX、Mule)進行集成。ESB成爲SOA基礎設施的必選件。

在SOA中,WS-BPEL用來描述業務流程。BPEL是基於XML的描述語言,它依賴WSDL來表示web服務接口。

BPEL在SOA中的作用類似工作流領域中的XPDL。BPEL主要關注自動任務的交互,而沒有涉及人工任務的交互。

 

ActiveBPEL提供了基於Eclipse的圖形設計器,ODE並沒有提供。可以使用Intalio Designer或Lomboz作爲替代選擇。

 

 

(4)

 

2、TIPS

(1)

(2)

 

3、PS

(1)

(2)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章