Archive

Archive for the ‘Design’ Category

The Role of the Enterprise Service Bus

October 27, 2006 (Friday) 2 comments

InfoQ: Presentation: The Role of the Enterprise Service Bus

這是一個很讚的 ESB (Enterprise Service Bus) Presentation,演講者 Mark Richards 對 ESB 有非常深入的研究。演講回答了一個很多人會問的問題,為什麼要用 ESB?

根據 Mark 所說的,ESB 能夠把 business service 跟 implementation service 分開來,business service 是指該 domain 的一些服務,例如下單等等專業的語言;而 implementation service 只是一些 CRUD 一類的程式操作,來實作出像下單樣的功能。把這兩個部份分開完全合符了 SOA 的架構跟概念,也把 business process 跟 technical 切開。ESB 其中兩個重要的能力,process choreography 負責 business process 的管理;而 service orchestration 處理 implementation service 的串接。這是一個很重要的觀念。

演講最後提到了 open source 的 ESB,包括了 MuleServiceMix。比較之下,Mule 比較像是一個 lightweight 的框架,讓你以 POJO 實作任何型式的 service。而 ServiceMix 則是已經把該有的都整合好,能以各種各樣的方式去實作出 ESB 的 end point。

ESB 雖然仍很少在實際上看到運用的機會,但它建基於 XML、Web Services、BPEL 以及 SOA 等等的概念與技術之上,成為一個實現學術界論文描繪的 Web Services 烏托邦不可或缺的架構。也是至今真正能把 BPEL 等技術串接起來比較讓人信服的方式。ESB 會不會就是以後資訊系統的樣子,則還要慢慢去觀察。

technorati tags:, , ,

Blogged with Flock

Full Stack Framework 的流行 – 從單點變套餐

October 11, 2006 (Wednesday) 5 comments

我們去餐廳的時候,很常會點套餐。套餐省略了一一挑選的麻煩;對不了解菜色的人而言,套餐會從前菜到點心配好好的;通常也有一些折扣或是附餐。雖然失去了單點的自由度,但還是有很多人都會選用套餐。

Java,尤其是用在 web development 上,有各式各樣的 framework 跟技術。如果要一一選用跟搭配起來,往往是一種痛苦。畢竟能享受從挑選零件再組出一台跑車的人是極少數的人。每個元件都要弄懂也是一種很大的學習負擔。自從 Ruby on Rails 問世以來,很多人都喜歡上它的簡化跟整套 full stack 的 framework。或許是接受到 Ruby on Rails 的刺激,Java community 有很多類似的想法出現,如果你覺得慢慢把 Struts、Spring、Hibernate 等等全都學會再組裝起來很難的話,或許選用一個 full stack framework 也可以達到類似的效果。

以下點名一部份的 full stack framework,有些其實在 Ruby on Rails 之前已經出現了:

AppFuse:或許他不該叫 framework,它是一個把 Struts, Spring, Hibernate 等等 framework 預先組裝好的環境。其組裝的方式可以作為學習對象。Presentation Tier 可以選用 Struts/WebWork/JSF/Tapestry/SpringMVC;Persistence Tier 可以選用 Hibernate/iBATIS。AppFuse 已經在蠻成熟的一個階段了,我本身也在實際的 project 上運用過它,節省了不少開發時間。缺點是所用的 framework 也許不是在最新的版本。

JBoss Seam:這是 Hibernate 的作者 Gavin King 的力作。我個人非常喜歡這個 framework,原因不在它使用了 JSF+EJB3 這些 JCP 的標準,說真的如果不好用標準早是華而不實的東西。我喜歡它是因為大量運用了 annotation 減少了要開發的 code,而且那些 annotation 看得出來是在多次的經驗中提煉出來的,非常切合開發者真正的需求。而 JSF 跟 EJB3 的無間結合讓所要開發的 number of class 大量減少。如果沒有任何負擔的情況之下,我覺得 JBoss Seam 是最佳選擇。只是它目前還有些許的不成熟。

RIFE:一個很成熟的 framework,不過它的概念有點特立獨行,也沒有用到一些主流的 framework。看過它的 demo 我覺得它的想法有達到目的,但因為離主流有點差距,能得到的資源較少。它也可以跟 Spring 等等做整合。

Grails:由 groovy 為主軸的 full stack framework,目前還在很早期的階段。不過 groovy 這種 scripting language 的簡便,讓 Java 也有機會跟 Ruby on Rails 一拼。後端是以 Spring+Hibernate 為基礎。我覺得這個 framework 潛力很大。

其他如 TrailsProject Able 等等因為我沒有太多的研究,不一一詳列,事實上一定還有很多我沒看過或是已經忘記名字的 framework 存在。所能看到的是 full stack framework 的興起,如果是你要追求快速開發,也許要改為注意 full stack framework 的動向,而不單單是個別 framework。在以上的 framework 裡,幾乎都用到了 Spring,也就是說 Spring 這種 middle tier 的 framework 佔有重要的角色。當然 JBoss Seam 是用了 EJB3,不過功能上類似。而 middle tier 的能力就決定了 full stack framework 整合的能力。所以未來 Spring 或是 EJB3 的角色會更重要而使用更廣泛。

如果你還在煩惱用哪些 framework 作為你的 baseline,在學習怎麼把不用 tier 的 framework 組裝在一起的話,那麼何不看看以上幾個 full stack framework 呢?或許你單點的菜色其實跟套餐差不多,而套餐還送你附餐飲料呢!

technorati tags:, , , , , , , , , ,

Blogged with Flock

Validation with Annotations — 驗證新趨勢

September 28, 2006 (Thursday) 4 comments

Validation 是每個像樣一點的系統必備的功能,不過做法就有很多了。以 Java Web AP 為例,從 JavaScript 的 Validation 到使用 Java Code 去做,或是使用 Jarkata Commons Validator 都是很常見的方法,也各有優缺點。

最近在網路上出現了一些跟 Validation 相關的文章,包括有 Hibernate can meet your validation needsSpring Validation with Java Annotations。或許你會奇怪,Hibernate 跟 Spring 並不是在處理 Validation 的事情的。到底是怎麼回事呢?原來現在最流行的 Validation 方法是使用 Annotation!在 domain model class 的 getter/setter 上加上 Annotation Tag,例如:@Required 就代表這個值是必需填入的。@Length(max = 10) 代表最長不能起過 10 個字元等等。在 domain model 宣告完成後,在需要時再由 Java 程式去執行驗證,而驗證是自動依據 Annotation 的設定所做的。

不管用 Hibernate 或是 Spring 做,概念上都大同小異。把 Validation 資訊放在 domain model 的好處是,不管在哪個 level 想做驗證,都會用到同樣的資訊。否則很有可能會變成在 User Input 寫一段,存取 DB 時又寫一段。而事實上驗證的資訊放在 domain model 事實上是最適合的了,因為驗證限制可以說是 domain model 的一項註解。

Annotation 在 Java 5 出現以來,有很多範例應用。但相對實戰上使用,而且必需要使用 Annotation 才能達成的任務一直都不是很多。直到最近,不少 Annotation 應用都已經成熟。不久的將來,Annotation 就會變成常用的 Java 語法,而系統中出現 Annotation 就跟出現平常的 code 一樣自然。

technorati tags:, , ,

Blogged with Flock

Ajax4jsf – JSF 的一支強心針

August 6, 2006 (Sunday) Leave a comment

Ajax4jsf Open Source Project for Adding AJAX to JSF Applications without JavaScript: Downloads Articles, Examples, Tutorials

之前一直對 JSF 在 Ajax 上的 support 非常不以為然,因為都是一些 JSF 的 implementation 提供了有 ajax support 的 component。這樣聽起來是沒有什麼問題,但仔細一想會發現如果遇到沒有合用的元件,或是一些跨元件的問題時,麻煩就大了。當然一些 commercial 的 JSF implementation 應該夠強大去解決這些問題。但 open source 的 JSF 就沒辦法在 Ajax 上發揮自如了。

Ajax4jsf 在 Server side 放入一層比 JSF 更前面的 Front controller,等於是 hack JSF component 的 lifecycle。另外,Ajax4jsf 提供了一些 support 的 jsf taglib,在 JSF page 中使用可以針對不同的時機 (Javascript event) 去發動 Ajax4jsf 的 request,並進行 reRender component 等動作。後端方面因為跟 JSF lifecycle 整合在一起,所以也不用擔心 client/server inconsistence 或 refresh 的問題。

整體看來,Ajax4jsf 沒特定針對哪一種 JSF component,解決了 JSF 在 Ajax support 上的一大問題。使用 Ajax4jsf 是不需要寫 Javascript 的,雖然這點對 JSF developer 應該算是理所當然的了。基本上只要 Ajax4jsf 支援針對 JSF component 操作的事件足夠的話,對 JSF developer 來說已經足以建出一個 Ajax application 了。要是 JSR 把 Ajax4jsf 列入 JSF 的 spec 的話,那麼 JSF 大可號稱是一個 Ajax inside 的 Web MVC framework。看到 Ajax4jsf,對 JSF 又回復了一點興趣了,有了 Ajax4jsf,我大可以不要管什麼 post only 的問題了。真不知道是技術環境的反覆還是我自己三心兩意?

technorati tags:,

Blogged with Flock

XML/SWF Charts – 新一代的網站圖表工具

July 26, 2006 (Wednesday) 16 comments

在 Web 上常常需要顯示圖表,而圖表如果是由動態資料產生的,就必需要有繪圖的 API 來幫忙製圖。以 Java 來說,大家熟知的是 JFreeChart。JFreeChart 提供的繪圖 API,在 web 環境的話,就要在 server 先把圖產生,再由 client 端顯示。這樣對 server 也是一個負擔,當很多人想要看各種不同的圖表時,系統的回應時間變慢、暫存檔的量大增,都是可以預見的。

XML/SWF Charts 是一個由 SWF (Flash) 在 client 端繪圖的 API。Server 只要準備 XML 格式的資料,圖的部份由 Flash 幫你在 client 端繪畫起來。省了 server 的 loading,也沒有暫存檔的產生,而且因為是 flash 做的,還可以有動畫特效,簡單、好用又美觀,絕對是 web 產生動態圖表的不二之選!

大家在這個連結可以看到很多範例,我不用貼圖的方式是因為貼圖沒有動畫的效果。事實上 W3Counter WUFOO 裡的圖似乎也都是用這個 API 做的,看來這個 API 已經得到 AJAX 界的肯定。

使用上其實也蠻簡單的,首先 下載 XML/SWF Charts 的 library,解開後有一個 charts.swf 和 charts_library 的資料夾。把它們放到 web 可以 access 得到的地方。在 html 或是動態網頁檔加入以下的 flash object:

<OBJECT classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″ codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0&#8243; WIDTH=”400″ HEIGHT=”250″ id=”charts” ALIGN=””> <PARAM NAME=movie VALUE=”charts.swf?library_path=charts_library&xml_source=sample.xml”> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#666666> <EMBED src=”charts.swf?library_path=charts_library&xml_source=sample.xml” quality=high bgcolor=#666666 WIDTH=”400″ HEIGHT=”250″ NAME=”charts” ALIGN=”” swLiveConnect=”true” TYPE=”application/x-shockwave-flash” PLUGINSPAGE=”http://www.macromedia.com/go/getflashplayer”&gt; </EMBED> </OBJECT>

其中 src 的部份要指向 charts.swf 的所在位置。而後面的 sample.xml 就是圖表的資料來源囉。Sample.xml 由一個固定的 xml 格式表示圖表的原始資料。以下列的圖表為列:

2001 2002 2003 2004
Region A 5 10 30 63
Region B 100 20 65 55
Region C 56 21 5 90

那麼 Data 的格式就要如下:

<chart>
    <chart_type>column</chart_type>
    <chart_data>
      <row>
         <null/>
         <string>2001</string>
         <string>2002</string>
         <string>2003</string>
         <string>2004</string>
      </row>
      <row>
         <string>Region A</string>
         <number>5</number>
         <number>10</number>
         <number>30</number>
         <number>63</number>
      </row>
      <row>
         <string>Region B</string>
         <number>100</number>
         <number>20</number>
         <number>65</number>
         <number>55</number>
      </row>
      <row>
         <string>Region C</string>
         <number>56</number>
         <number>21</number>
         <number>5</number>
         <number>90</number>
      </row>
   </chart_data>
</chart>
而產生出的圖表就是這個樣子囉:

補充一下,圖表的一些格式、設定參數,是由 chart attributes 來設定,上面的 <chart_type> 就決定了系統要畫出什麼圖表。而 chart 的資料來源也可以帶有參數,讓 server 依參數動態產生 xml data。以上就大觀念作了簡單的解釋,詳細的部份請參閱 TutorialReference,畢竟參數太多了,很難一一解說。

這樣的 web 圖表架構,其實本身就是一種 AJAX。而 XML/SWF Charts 是可以免費使用的,只是圖會是可以點的,而點選就跳到 XML/SWF Charts 的 site。如果選擇付費的話,其實也不會很貴,USD $45 就可以買到一個 domain + any subdomain。我覺得 XML/SWF Charts 很有潛力成為知名圖表工具,甚至變成 Web 的圖表標準。而它的 host,maani.us 還提供了很多有趣跟有用的工具,像有一個是 flash 做成的汽車儀表板,實在太讚了。強力推介!

technorati tags:, , , ,

Blogged with Flock

Ajax 不是罪 — 錯用 Ajax 的反醒

July 21, 2006 (Friday) 1 comment

Ajax,我懶得再解釋它了。

Ajax,很多人支持它,推崇它。

Ajax,也有不少人罵:Ajax 的七宗罪Ajax: 99% Bad

到底 Ajax 是對是錯?用 Ajax 是不是有罪?還是如網路上 Ajax 支持者所言;「欲加之罪,何無患詞?」 Ajax 是工具,是 Web developer 的武器,武器是不會有罪的,但錯用這把利器的人就可能有罪了。這篇文章,只要你想寫 Ajax,請你一定要看:The Right Way to do Ajax is Declaratively。內容長篇大論,而且可能也不是很好懂,說實在話,我也不是全都能了解,但是身為一個 Ajax developer,我想有必要知道什麼是對的。以下就我能理解的部份,做一個整理 (但還是希望大家能看看原文):

全文重點在:不要亂寫一堆 Javascript 搞互動網頁!(Don’t write your interactive Web application in custom
Javascript! )
事實上,有很多標準的方式可以優雅的做到 Ajax。例如:Hijax, hinclude, XForms, SVG, XBL, etc.

Hijax 由 Hijack Ajax 所組成的字,教你由 non Ajax design 出發,整理好你的 html, css, javascript,然後再由 Ajax 去 Hijack (綁架) 你的 Http request 變成使用 XMLHTTPRequest 去達成 Ajax。內容也有提到 AHAH 的觀念。Hijax 確保系統跟 no Ajax 的設計很接近,避免了 Ajax Monster 的出現。

REST based design + Server Cache + Client-side page construction 可以加速 Web performance。而 client-side page construction 的例子可以用類似 SiteMesh 的但在 client 使用的 solution,hInclude。同樣的,DB 裡的資料也可以用 client-side page construction 去呈現,不必由 server 產生出全部的 html。

後面談到的 Xhtml2、XForms,以前曾看過一些介紹,但年代久遠,已經記不清楚了。只知道解決了很多 html 的問題。不過這些標準的實作目前很少在成熟的技術討論中看到,要如何在實務上使用也許還有一段距離。

這篇提供了不少 Ajax 的正當設計手法,但在不了解之前,想必大家都做了不少錯誤的示範了。對這些錯誤好好檢討改進的話,Ajax 就不會再被認為是一種罪了。

technorati tags:, , , ,

Blogged with Flock

用 Ajax 做 Portlet

July 17, 2006 (Monday) 3 comments

Ajaxian » Ajax Portlet Communication with DWR

這個想法其實也不新鮮啦,Portlet 本來就是一個資訊呈現的方式,而 Ajax 是在 Web 傳送資料的好方法,兩個配在一起一拍即合。目前有一個叫作 light 的 portal 本身就是全面運用了 Ajax 的技術,效果自然會跟 NetVibes 等 Web 2.0 portal 有點類似。即使是用舊有的 portal 系統,還是有救,就像那篇文章中提到的方式,用 DWR 去把資料拉過來就是一個很好的解法。好處是可以大量減少了 MVC 層的苦工,直接用 DWR 去接 Business Tier 去拉資料回來。

當然新的想法總是有兩面的看法,不讚同的人很多是因為了解不足。這時候如何能夠證明新想法是好的就很重要了。以這個 Ajax + Portlet 的案例來說,一點都不用擔心很難說服別人,因為這個想法是在 IBM developer works 上發表的 http://www-128.ibm.com/developerworks/java/library/j-ajaxportlet/index.html?ca=drs-,這麼一來,如果硬是說這想法不可行是有點說不過去了。有趣的是,裡面範例用的不是 IBM 的 portal,而是 Jetspeed2,Apache 的JSR-168 portal,當然是 open source 的囉!

突然想起 ptt 鄉民們很流行的一句話,”閃開!讓專業的來!”

technorati tags:, ,

Blogged with Flock