Macromedia Flex

Macromedia Flex

Flex表示伺服器滿足了某些IT開發人員的需要。他們希望開發一種應用程式,這種程式既有桌面應用程式的回響性與豐富性,又具有Web傳播範圍廣的特性—即富網際網路應用程式。Flex表示伺服器位於一個組織的N層套用模型的表示層,用運行在客戶端的可執行代碼對現有的HTML生成做了加強。Flex具有基於標準的、用戶熟悉的編程方法及工作流,強大的類庫可創建表示層,從而提供更有效、更真實的終端用戶體驗。

基本信息

簡介

Macromedia FlexMacromedia Flex
Adobe Flex 2 提供企業級富Internet套用的表現層解決方案。Flex系列產品提供了基於標準的編程方法和運行時服務,用於開發和部署套用(將桌面的豐富與Web的無所不及相結合)的表現層:有了Flex,開發人員可利用自身技術和基礎設施構建下一代web應用程式。可用來開發數據儀錶板(dashboard)、電子商務和自助式服務應用程式,提升企業的經營績效。如果您的公司開發要轉銷的軟體,Flex有助於您為客戶提供更佳的用戶體驗。

Macromedia Flex 標記語言簡介(2)

Macromedia FlexMacromedia Flex

數據訪問Macromedia Flex為面向伺服器架構(SOA – service-oriented architecture)而開發。在這一模型中,套用通過與分散在不同地方的服務進行互動,來完成自己的任務。例如,如果創建一個線上旅行套用,你需要與不同的服務進行互動:全球旅館預定服務,目的信息服務,天氣服務等等。這些服務可能以不同的機制來提供,並且來自不同的地方。Flex使你能在客戶端匯集信息,並提供三種不同的數據服務組件,以滿足對服務提供者進行特定數據訪問的需求:WebService組件,HTTPService組件(一般使用XML通過HTTP進行數據訪問)以及RemoteObject組件。MXML允許你用相應的WebService, HTTPService, and RemoteObject標籤來設定與服務的連線。

數據綁定在許多語言中,如何在用戶界面控制項中顯示後台數據,是件令人頭疼的事情,而且非常容易出錯。收集用戶在控制項中輸入的數

Macromedia FlexMacromedia Flex
據,並傳給遠程服務也常常是件乏味的事情。Flex的特色之一,就是提供了雙向的數據綁定機制:你可以將用戶界面控制項綁定到服務調用的數據結果集上,反過來,也可以將服務的參數綁定到用戶界面控制項輸入的值上。下面是一個簡單的股票報價套用。例子使用了WebService標籤來設定與XMMethods提供的股價web服務進行連線。這個例子闡明了Flex的雙向綁定功能。getQuote方法的symbol輸入參數被綁定到symbol TextInput組件上。quote標籤被綁定到getQute方法的調用結果上。{symbol.text}{wsStock.getQuote.result}圖4.股價套用 實際上,Flex數據綁定機制比傳統的重取/顯示(retrieve/display)方式更勝一籌:在Flex套用中,你可以將任意對象的任意屬性綁定到另一任意對象的任意屬性值上。使用層級樣式表CSS)Flex使用層級樣式表標準來保證用戶界面的一致性,並使套用更易於維護。就像在HTML中一樣,你可以在套用中嵌入一個指向外部的樣式表,或在特定的標記元素下將某種風格定義為其屬性。樣式表還允許定義字型。所需字型定義內嵌於套用的位元組碼中,即使用戶的機器上沒有這樣的字型,也能被正確的渲染出來。下面是一個名為main.css的外部樣式表。@font-face {src: url("LucidaSansRegular.ttf");font-family: mainFont;}.error {color: #FF0000;font-size: 12;}.title {font-family: mainFontBold;font-size: 18;}TextArea {backgroundColor:
Macromedia FlexMacromedia Flex
#EEF5EE;}特效複雜Internet套用常常被拿來和客戶/伺服器套用進行比較。因為它們提供了同一級別的用戶體驗。但是,容易忽視的區別是,兩者的用戶各具特點。使用客戶/伺服器套用的客戶通常是備受折磨後,最終適應了他們需要面對的用戶界面。而複雜Internet套用的客戶通常是臨時性的用戶。在這樣的條件下,一個不直觀的用戶界面將會喪失機會。適當的使用特效,如浮動提示和進度狀態,有助於客戶直觀的了解當前內容。在MXML中,你可以通過設定動畫達到這一目的。

總結

Macromedia FlexMacromedia Flex
Flex語言包含了一個豐富的用戶界面組件庫,MXML(一種基於XML的標記語言)和ActionScript(基於ECMA 262的、強類型面向對象程式語言)。MXML用於排布用戶界面和處理套用中其他方面的問題,而ActionScript用來處理用戶互動邏輯。由於Flash平台的普及,Flex使開發者可以開發廣泛的應用程式。開發者可以使用工業標準(如XML,CSS和SVC)和他們所熟悉的模式和範例來創建套用。Flex的分離協作方式和Macromedia公用組件模型也使得開發者和界面設計者能更好的進行協作,在可靠的、易於維護的架構上生產出在用戶體驗方面有突破性的產品。關於作者從1994-2000年,Christophe Coenraets 服務於Powersoft公司,該公司現在已被Sybase併購。他用Java工作始於1996年,並成為公司Java and Internet Application 部門的技術專員。Christophe後來加入Macromedia公司成為公司J2EE套用伺服器JRun的技術專員。Christophe在這一職位上開始研究複雜Internet套用,著手將Flash前端與J2EE後端進行集成,Christophe目前是Macromedia的 new developer-centric Rich Internet Applications initiative的高級專員。過去的十年間,Christophe經常在全球範圍的研討會中發言。

Macromedia Flex 標記語言簡介[1]

Macromedia FlexMacromedia Flex
Christophe CoenraetsMacromedia Flex 專員 Christophe[原作]http://www.macromedia.com/devnet/flex/articles/paradigm.html[翻譯]samhoo([email protected])[注]轉載請保持全文完整Macromedia Flex(開發代號為Royale)是一個展現伺服器,開發者可以用它來開發新一代的“複雜Internet套用”(RIAs - Rich Internet Applications)。複雜Internet套用融合了桌面套用的可用性和web套用的易於管理的優點。Flex是一個在J2EE套用伺服器或servlet容器安裝的展現伺服器。它擁有豐富的用戶界面組件、用於排布這些組件的基於XML的標記語言,以及可以處理用戶互動的面向對象程式語言。這些技術的給我們帶來的是:使用Flash播放器渲染複雜Internet套用,使用工業標準和開發者熟悉的方式進行開發。Flex開發與部署模要開發並部署這個套用,一般要經過以下步驟:1. 用你熟悉的IDE或Flex的“所見即所得”開發工具編寫HelloWold.mxml檔案。

2. 把該檔案部署到套用伺服器上。一般可以通過拷貝HelloWorld.mxml到某個web套用的目錄下,或將HelloWorld.mxml作為套用的一部分打包到WAR檔案中去。當一個用戶首次請求HelloWorld.mxml的時候,伺服器會將MXML代碼編譯為Flash位元組碼(一個SWF檔案)。然後伺服器將產生的SWF檔案發往客戶端,讓Flash播放器執行。對同一個MXML文檔的並發請求,伺服器將跳過編譯過程,直接返回相同的編譯結果。如果你對JavaServer Pages比較熟悉,就會發現它們的模型非常相似。就像JSPs被編譯為Java位元組碼(servlets)一樣,MXML檔案將被編譯為Flash位元組碼。二者的主要不同在於:在Flex中,產生的位元組碼是在客戶端執行的,而由JSP產生的Java位元組碼(servlet)是在伺服器端執行的。通過Flex,你可以將複雜客戶端套用無縫的集成到

Macromedia FlexMacromedia Flex
已有的商業邏輯中。使用MXML用戶界面組件擁有豐富的用戶組件是Flex的一大特色。除了傳統的數據輸入控制項(Text InputTextArea,CheckBox,RadioButton,ComboBox等等),MXML還包括了一些高級組件,用於維護結構化數據(Tree 組件)和大數據集(DataGrid 組件)。為了清晰的組織數據及其處理過程,Flex還提供了導航組件(Tab,ViewStack,Accordion等等)。為了更易於組織用戶界面,Flex容器還定義了布局管理策略,用於指明一個組件相對與另一個組件的位置。Flex組件庫提供了大量的、可實現不同布局策略的容器。比如,在HBox中的組件將被水平排列,而在VBOX中的組件會被垂直排列,而在Grid中組件將以行列的方式進行排列,就象HTML的table一樣。View容器中沒有定義任何布局管理策略,因此你可以用x,y坐標來指定組件的位置。下面給出一個在Flex環境下、具有三個面板的傳統e-mail界面。HBox容器中的Tree是水平排列的,而VBox容器中的DataGrid和TextArea則是垂直排列的。編寫ActionScript代碼Flex語言是事件驅動的。MXML將事件作為標籤的屬性,你可以為它編寫事件監聽器。比如,Button組件有一個click屬性,ComboBox,List和Tree組件有一個change屬性,等等。對於簡單的互動,可以在標籤的事件屬性上直接編寫ActionScript語句。例如,在HelloWorld套用中,存在Button的click事件監聽器中的ActionScripts語句,能把source TextInput 的內容拷貝到destination TextInput中。當邏輯更為複雜的時候,可以定義獨立的ActionScript函式,然後在組件的事件監聽器中調用。例如,你可以象下面一樣,重寫HelloWorld套用:
Macromedia FlexMacromedia Flex
function copy() {destination.text=source.text}創建一個MXML檔案,實際上是創建了一個類。定義在標籤中的ActionScript函式是該類的方法。你可以在MXML檔案或獨立的檔案中定義ActionScript函式。選擇哪種方法,取決你所在的組織,後一種方法可以對開發團隊進行更好的分工。定義自己的組件在Flex中,你可以從頭開始,或通過擴展Flex組件庫中已有的組件,來創建自己的組件。創建組件就象創建一個套用一樣:用MXML排布用戶界面,用ActionScript編寫用界面邏輯。下面的一個例子是,通過擴展VBox類來創建簡單的信用卡選擇組件。組件的名字就是源檔案的名字。如,源檔案的名字是CreditCardChooser.mxml,組件的名字就是CreditCardChooser,這樣,這個標籤名就可以用了。下面的例子就用上了剛才創建的CreditCardChoose組件。界面開發者還能在Macromedia Flash開發環境中創建複雜的可視化組件,並存為SWC檔案。當然,也可以只用ActionScript定義來整個組件,這種方法一般用於定義套用中的非可視組件。你可能會為這樣商業對象創建非可視組件——例如,包含客戶端邏輯的購物車,或是套用中helper類。

Macromedia Flex Builder 2

Macromedia FlexMacromedia Flex

這個速學教程向你介紹項目在Macromedia Flex Builder 2中的概念和教你該如何創建項目。在Flex Builder中,全部Flex應用程式都被包含在項目裡面。 在Flex Builder中創建Flex應用程式之前,必須創建項目。當你在Flex Builder中創建項目,一個主應用程式檔案會跟隨被創建。你能增加另外的資源。如:自定義MXML組件檔案,ActionScript檔案,以及其他的資源來組成你的Flex應用程式。1.啟動Flex Builder,從主選單中選擇File > New > Flex Project。新Flex項目嚮導出現。創建項目將會透過嚮導的步驟來指導你。2.因為你將會不用使用Flex伺服器,選擇No選項並點擊Next。下一個螢幕要求你指定項目的名字和檔案儲存的位置。3.在Project Name中輸入QuickStart。這個是項目的名稱,當你創建一個新的項目後,Flex Builder會產生一個以你的項目名稱為基礎的Flex主應用程式檔案

4.在Project Location中,確定路徑為:X盤:\Documents and Settings\your_user_name\My Documents\Flex\QuickStartFlex Builder將會

Macromedia FlexMacromedia Flex

為你產生這一個資料夾。作為新項目的默認位置是我的文檔資料夾中的Flex資料夾。5.確定Main Application File指定為QuickStart.mxml。當編譯時這個選項決定項目中的那個MXML為主應用程式檔案。6.確定Output Folder指定為bin。這個選項決定, Flex Builder將會把你編譯的Flex應用程式放置在那裡(SWF檔案與HTML檔案).默認時,Flex Builder將放置編譯後的SWF檔案到項目的bin資料夾中。7.點擊Finish。Flex Builder創建一個新的項目與顯示它在Navigator視圖中。Flex項目嚮導自動地產生項目檔案,輸出資料夾(bin), Flex Builder將會把你編譯的Flex應用程式放置在那裡。還有主應用程式檔案(QuickStart.mxml)。學習在Flex中基於約束的布局當用戶重設定Flex應用程式視窗大小時,你想組件在你的布局中是聰明地自我調節大小時,基於約束的布局就能發揮它的作用。你將使用Canvas容器創建基於約束的布局。Canvas容器使組件的大小與位置更有彈性。

它附屬你當Canvas容器重設定大小時自動伸縮與移動組件的能力。例如,如果當用戶將應用程式視窗拖大,你想TextInput檔案本框的寬度跟著伸長,

Macromedia FlexMacromedia Flex

你能固定檔案本框與Canvas容器左邊與右邊的位置,那么檔案本框的寬度將被視窗的寬度而設定。注意:在Flex中,所有的約束是相對於Canvas容器邊緣設定的。不能相對於其它的控制項而設定。創建基於約束的布局的第一個步驟是在Canvas容器中放置組件。在Flex的容器中,只有Canvas容器是支持絕對坐標。像Macromedia Flash的場景一樣,你能拖放與放置組件到Canvas容器的任何位置。對於象素點的準確性來說,你能設定x與y軸。在這部分里,將插入與放置組件來組成一個簡單的反饋表單。1.打開QuickStart項目,選擇File > New > MXML Application,在File Name中輸入Layout.mxml。2.在Navigator視圖中右擊Layout.mxml檔案,選擇Application Management > Set As Default Application,將它指定為默認被編譯的檔案。3.在設計視圖中,從Components面板(Window > Show View > Components)中拖放一個Label與一個TextInput控制項到Canvas容器里。4. 使用滑鼠拖動Label與TextInputl控制項肩並肩在Canvas容器3 分之1下的位置上(其實只要放到Canvas容器里就可以,下面會進行具體的調整)。5.在Flex屬性面板中,展開General與Layout屬性面板。設定General與Layout屬性的選項出現。如果你看到的視圖與上面的不一樣,那請點擊視圖工具條上的View As Form按鈕。

6.在Canvas容器上,選擇Label控制項與在Flex屬性面板給Label設定以下屬性:text: Emaix: 20y: 607. 在Canvas容器上,選擇TextInput控制項與在Flex屬性面板給TextInput設定以下屬性:x: 90y: 60width: 3008. 在工具條上點擊Code按鈕,將視圖轉為代碼視圖。

Macromedia FlexMacromedia Flex
Layout.mxml檔案將包含下面的MXML代碼:程式代碼: 9.在標籤後面輸入下面的代碼來插入剩下的Flex控制項:程式代碼:你能通過工具條上點擊Design按鈕來預覽已做好的布局。這個布局將如下圖:10.保存檔案。11.點擊工具條上的Run按鈕。瀏覽器自動打開並運行你的Flex應用程式。注意: 瀏覽器必須了安裝Flash Player 8.5,Flex 2應用程式才能在瀏覽器中運行。12.拖動應用程式的視窗的邊緣,使應用程式的視窗變大或變小。組件仍然保持與視窗的左與上邊緣的絕對坐標位置,在重設定應用程式視窗大小時,他們不會伸長與縮小。例如:如果你將視窗縮小, Button控制項將消失, TextInput與TextArea控制項將被留下一部分。下一個步驟設定對控制項有約束性的布局,當用戶在重設定應用程式視窗大小時,他們會自動調整大小。定義約束的布局給組件在你的布局定位完後, 你將定義約束的布局,它能使組件跟隨應用程式視窗自我調整大小。1.在設計視圖,選擇TextInput組件。2.在Flex屬性面板,確定Layout類別已被展開。Layout類別包含設定固定的選項。3.定義約束的布局,在Layout類別中點擊左邊與右邊的固定選框,並在左邊文本框輸入90,右邊文文本框輸入60。這是TextInput控制項與Canvas容器的左邊與右邊保持的距離,如下:這兩個固定選框, 跟隨視窗固定TextInput控制項的左右兩邊。在文本框中輸入的數字是指定TextInput控制項與Canvas容器保持的距離有多遠(單位:像素(pixels))。這些約束在MXML代碼里被表示如下:程式代碼: 4.在Canvas容器中選擇TextArea控制項,在Flex屬性面板中,選擇所有的四個固定選框並輸入與邊緣保持的距離,如下:left: 90right: 60top: 90bottom: 190extArea的Flex屬性面板如下:5.在Canvas容器中選擇TextArea控制項,在Flex屬性面板中,選上右邊與下邊的固定選框,並在右邊文本框輸入60,下邊文本框輸入150。6.保存檔案,等待Flex Builder直到編譯完成應用程式,再點擊工具條上的Run按鈕

Macromedia Flex 安裝註冊方法

Macromedia FlexMacromedia Flex
Flex是作為Java應用程式伺服器的模組形式存在,用來解析MXML檔案生成SWF檔案.
試用版的Flex自帶一個Java應用程式伺服器(JRun4)先看看你的機器和系統達到安裝Flex的要求了嗎?
http://www.macromedia.com/software/flex/productinfo/systemreqs/再來看看Flex應用程式都能做寫什麼事情呢?
http://flexapps.macromedia.com/flex15/explorer/explorer.mxml我們開始安裝了,直接選擇Integrated JRun4/Macromedia Flex(整合JRun4/Flex)安裝.裝完後啟動JRun4,打開瀏覽器輸入下面地址就可以看到例子.http://localhost:8700/samples 試用版以兩種模式運行:1,試用模式(只能使用60天,不限制功能和訪問IP)試用模式過期後自動變成開發模式

2,開發模式(無限使用時間,但只允許5個IP訪問)這兩種模式編譯生成的SWF檔案都會在一天后失效.Flex試用版輸入正確註冊碼後就變成正式版,也就沒有了上面的那些限制.正式版的Flex安裝好後安裝目錄下有三個WAR檔案1:flex.war(核心模組)2:samples.war(例子)3:profiler.war(應用程式監視器,查看應用程式運行情況和檢測瓶頸問題.)使用之前你要做的事情就是把他們放到JAVA應用程式伺服器默認站點根目錄下解開,然後重啟伺服器就可用了.可以使用Winzip解壓,或者在命令提示符下輸入:jar -vxf 要解壓的檔案.warJAVA應用程式伺服器推薦使用ResinTOMCAT.官方給出支持的應用程式伺服器列表如下:Macromedia JRun 4 Updater 2 IBM WebSphere Application Server 5 BEA WebLogic Server 7 or 8.1 Tomcat 4.1.29 or 5.0.18 具體配置方法看Luar的文章:http://www.luar.com.hk/flashbook/archives/000260.php 正版用戶升級為正式版的方法:要升級為正式版,你必須提供你的註冊碼信息 (購買Flex後即可獲得).需要到命令提示符進入Macromedia/flex/bin目錄下如果安裝選擇的獨立Flex,輸入下面命令:licensetool -install 註冊碼 ../flex.warlicensetool -install 註冊碼 ../samples.war如果安裝選擇的是整合JRun4/Flex,輸入下面命令:licensetool -install 註冊碼 ../jrun4/servers/default/flexlicensetool -install 註冊碼 ../jrun4/servers/default/samples

整合 Macromedia Flex和 Java

Macromedia FlexMacromedia Flex

那么當前的解決方法有什麼問題嗎?如果應用程式運轉正確且允許用戶是有生產力的,那么可能沒什麼錯誤。但是曾經有很多web開發員抱怨當使用瀏覽器作為客戶機時會限制性能。 這是一些當前開發web應用程式時遇到的問題:1.瀏覽器以不一致的方式解釋scripting 語言, 譬如Java 語言。 這迫使開發員多次寫同樣的代碼來調節各個瀏覽器。2.簡單用戶接口會影響到譬如選中, 基於嚮導的表單, 和大表格數據集的處理,這使得在瀏覽器上需要更多額外的代碼。 3.HTML 是有限的,靜態的標記語言是無法是擴展的。 4. 在用戶接口之內進行事件處理可能是富挑戰性的。 因為被反饋的HTML 頁一次只能被顯示一頁, 而事件沒有回到伺服器之前又是無法更新其它頁的。 5. 只能通過Cookie來達到連續的套用狀態,Cookie它是不支持對象的。

6.使用瀏覽器開發偶爾連線的客戶機幾乎是不可能。很多Web開發員都知道這個事實: 當前工具設定有局限性。當在瀏覽器上工作時開

Macromedia FlexMacromedia Flex

發員必須查找解決方法。對於開發員和用戶來說用一台瘦客戶機是承受不了當前的性能的。Rich Internet Applications為了克服這些局限性,考慮用RIA來開發。 如今RIA給用戶一台胖客戶機來擴展瀏覽器所承受不了的性能。 最普遍套用的J2.EE 的RIA 客戶機是Java 和Flash。 當開發大型的數據中心的應用程式時, RIAs 真的是很強的。開發RIA的幾個可行方法是JDNC (JDesktop Network Components), Laszlo, Thinlet, Java Web Start, 和Macromedia Flex。RIA能解決問題前面已經說過了。 下面是RIAs的一些特徵:1. RIAs提供了和瀏覽器一樣的UI組件, 而且它還提供新的本地的更加豐富的組件。 比如包括一個數字步進, 滑動控制, 一個軸向數據格線要素和選單欄。 2.成熟的RIA套用允許布局管理器由如下構成,譬如制表符瀏覽器, 摺疊,樹結構和其它能和AWT and Swing開發相媲美的布局控制。 3.RIAs 提供拖放能力。 4.RIA 里的語言是一致的,它貫穿於所有客戶機, 不必為不同的實施而重寫。5.在用戶接口,不必每個action都是請求/回應模式。通過富網際網路套用,用戶與UI 相互對話,如果需要也只需要向伺服器發出請求。 RIAs 會運用HTTP 協定方法把數據提交給套用伺服器。但是, 通常更好的用RIAs的機制是遠程, 它會根據RIA 來支持不同的方式。RIAs提供擴展的與HTTP進行通訊的協定。 6.事件處理橫跨多個組件是可能的。

7.RIAs 允許您不使用HttpSession就可以在客戶機存儲更多信息。 這減少了在套用伺服器里所占的記憶體。
8.狀態的連續廣播,

Macromedia FlexMacromedia Flex

通常是以對象的形式,它提供了創建偶爾連線的客戶機的可能性。RIA是相當新的技術,它介紹了開發時涉及到的套用。 它不能解決所有套用, 它是要依賴某種實現。 但是, 如果您認為您的套用可受益於一個更加富有的UI 設計, 那么RIA 也許就可以為您服務。 本文現在將集中於一個RIA 解決方法, Macromedia Flex, 並且集中討論一下。Macromedia FlexMacromedia Flex是RIA的一台商業表示層伺服器。因為這是Flex applications.用的環境,所以必需要安裝Flash外掛程式。 多數瀏覽器已經裝備了Flash外掛程式,對於RIA來說這也有助於正當使用Flex。 我們來討論一下不用Java 插件而使用Flash外掛程式來與J2.EE 套用伺服器通話的意義所在。 開發員使用二個核心語言創建Flex套用。 第一核心語言是MXML, 即Macromedia Flex Markup Language,它擁有一套豐富的XML 標籤,這些標籤允許開發員設計用戶接口。 MXML 也可以被認為是XUL, 或XML UI 語言。不同於HTML,這些標籤是可以擴展的, 它擁有應用程式所需要的額外能力。 其他MXML 結構可以被叫做遠程對象, 在model中存儲返回的數據, 並且對MXML 構件可以自定義您自己的感觀。

第二個Flex開發核心語言是ActionScript 2.0, 它是一個ECMA 支持的語言,與JavaScript 語言類似。 ActionScript 原理是被編碼在MXML 頁裡面的。 這是較強的面向對象的語言,這對於java開發者來說是比較熟悉的。 ActionScript 而且有很大的事件處理能力,

Macromedia FlexMacromedia Flex

它允許應用程式回應動態用戶互動。 由於ActionScript 運行在Flash外掛程式裡面,所以它不同於在瀏覽器里進行JavaScript編碼,不需要重寫幾個同樣編碼的版本來支持不同的瀏覽器。MXML 和ActionScript 是基於文本的語言, 可以寫在一個簡單文本編輯器或 一個IDE 工具譬如Eclipse, 或一個更加老練的工具象由Macromedia 公司的Flex Builder里。 如果您接觸過Java, XML, 和scripting 語言譬如JavaScript 語言的話, 那么您在學習Flex時就要稍微轉下彎了。Flex伺服器負責把MXML 和ActionScript 組件轉換成以.SWF 檔案的形式的Flash位元組碼。這個過程類似於用Java Web套用容器把JSP 檔案編譯成servlets。在Flash運行環境下,SWF 檔案被執行在客戶機里。 Flex伺服器提供其它服務譬如快取, 並發, 和處理遠程對象請求。給您現有的結構介紹一個RIA 框架。

現在你對RIA 概念的已經有些了解了, 讓我們看看怎么把RIA 引入到您現有的結構中去。 其中我們也將著重論述怎樣把RIA表現在一個層狀套用中。 此外, 也會講到當用Flex與一些普遍的公開的框架的結合開發時存在的一些潛在的問題。 這些實例將有助於引入RIA 到您的結構中

Macromedia FlexMacromedia Flex
去。就讓我們先由辨認層狀結構開始。一個結構可能包括以下幾層: 表示層, 業務代表層,業務綜合服務層, 和持久層。 這是各自層的基本實現:Flex Business Delegates Spring Framework Hibernate 接下去的內容將集中講解每一層。我現有的MVC 表示層是怎么樣的?在Web應用程式中表示層是用來給用戶傳遞用戶界面, 處理後端服務請求, 並且存儲信息數據模型用的。對剛接觸RIA的開發員最初可能會傾向於重新使用現有的Struts。 但是, 象Flex這些開發產品都提供了他們自己的MVC 結構。 難道您真地需要維護一個包括二個MVC 結構的表示層嗎?以下是當Flex客戶機通過Struts組件向Java 伺服器作出請求時的實例。在被更高層接收之前,Flex客戶機的請求會先被傳送到Struts表示框架。 怎樣不集成Flex and Struts和其它Java組件。表示框架譬如Struts是由HTTP傳送HTML 請求來運行的。 當用Flex客戶機來使用HTTP 協定時, 開發員就會出於對性能和面向對象的優點考慮,通過HTTP來使用遠程對象而反對提交請求的方式。 所以, 有序化的使用這兩個表示框架會提供協定配錯。 除非您有特定需要直接地用RIA來集成Strut ,這樣才可以避免。 圖2 顯示一個當使用Flex 和 Struts時更好的解決方法介紹Flex 和 Struts與其它Java 組件。建議怎么安排分離的Flex組件 和 Struts組件共存。 但這是有條件的,這需要在當應用程式請求並行RIA 組件和輕量Struts組件的時候。開發員應該運用RIA 客戶機來做點什麼。對於那些熟悉頁面請求應答模式的傳統Web開發員來說,這是一個明確的思想上的轉變。象Flex這樣的RIA 產品並非像Struts一樣是請求或回應驅動。 RIA 客戶機負責在任何情況下更新UI而不必回到伺服器。當使用RIA時Struts不只是您唯一想的事了。 熟悉這類型技術需要時間。 在經歷這些曲折以後, 最大的問題是Java伺服器端組件的綜合化。 這也並非是針對RIA概念。

前面我們已經討論了一些表示層相關的,下面我們討論其它層在我們的套用結構是怎么受影響的。我們已經重置了我們的表示層

Macromedia FlexMacromedia Flex

組件; 我們怎么把它與業務層集成在一起呢?Flex是一個可擴展的RIA 框架,它提供了很多方式與您的J2.EE 組件通信。Flex提供了HTTP 通信,全球資訊網服務通信,還有Macromedia 的私有的AMF (ActionScript 傳訊格式化) 網關。AMF 網關是一個高性能二進制協定,它近似於Flash remoting協定。遠程對象運用HTTP 協定被傳送到AMF 網關。Flex為每個這些通信協定提供MXML 標籤, 這樣一來極大的減少編製程序複雜度。此外, Flex允許您以或異步或同步方式對您的企業等級啟用遠程調用。 通過使用一種異步遠程購買權, 用戶就能夠對客戶機進行一些操作並且即使當發生在傳統全球資訊網套用中時也不被攔截。 您能阻攔用戶與使用同步調用的UI交涉。讓我們來考慮一下怎么讓Flex和我們的業務綜合化層集成呢。 為這我們將使用Spring框架作為我們的綜合化層, 但這對您選擇實施什麼綜合化層並沒有限制。讓我們假設一下您有您的服務運行在Spring microcontainer里, 並且您需要由Flex調用遠程對象。

因為Flex對Spring完全不了解,您也許可以考慮添加一個separate, 即一個薄層作為代表您的service components。 並且, 因為Spring對Java接口起到了很大作用,所以我們可以建立一個代表對象,這個代表對象實施著和Spring服務一樣的Java 界面。 這些代表對象將提供

Macromedia FlexMacromedia Flex
一個減弱了的網關,它從Flex和綜合化層中分離。 您需要做的唯一的事是在Flex配置檔案中配置這些對象因此他們能與AMF 網關共同操作。 這裡有一個實例將說明代表對象是怎樣被配置在server-side flex-config.xml Flex配置檔案里的: com.meagle.flexro.FlexBusinessDelegatestateless-classtruefalseOrderUserAdmin初看Flex你會發現它一些有附加能力,類似於像設定安全性啦,決定委派對象是否申明啦。當Flex發一個遠程的對象呼叫到內層時,它將會干擾一個Flex的委派Java對象.委派對象將會負責對呼叫內層或者服務層 (比如Spring).作為結果的對象將通過AMF網關返回到Flex客戶端,這個對象被稱為ActionScript對象.這裡是一個MXML代碼的例子, Flex客戶端用MXML代碼來遠程調用並將結果存儲到一個數據模式中.用ActionScript equivalents寫的Java的域對象在AMF網關里來回傳遞。這個過程開始於一個請求,這個請求是從Flex伺服器通過AMF網關到應用程式的其他層。

一個返回對象的圖,將會被通過其他Java層,最後通過一個AMF網關返回到伺服器。一旦這個對象通過網關他們就將被轉變為ActionScript equivalents。在ActionScript Order對象里你應該注意Object.RegisterClass這個特別方法。AMF 網關用這個Object

Macromedia FlexMacromedia Flex

.registerClass 方法在Java ActionScript之間來拆整對象。這個方法把客戶端的ActionScript 類註冊到對伺服器端的Java 類。因為這些對象是很相似的,所以你在一個稍微不同的格式里不想重寫你的域對象也是可理解的。像XDoclet 和螞蟻之類的工具允許你自動地產生這 些ActionScript 對象而不是手動地編碼。現在你能像在Flex客戶里的ActionScript equivalents操作你的Java對象了 Flex與持久層集成在使用一個在web上定義好的耦合的體系結構的應用程式中,你不直接和你的持久層對話。使用Flex不應該改變這個體系結構。在大部分情況下,集成層將代替你和你的持久層對話。通常是使用Data Access Object (DAO)來完成的. Data Access Object (DAO) 是用來連線諸如資料庫的永久存儲的數據的。Flex客戶端不直接訪問集成層甚至不直接了解這個層,因為它構築了一個緊密的聯結。讓我們用Hibernate來作為持久層的一個例子。 

 當在Macromedia's AMF gateway環境下使用Hibernate和遠程對象時,會有一對錯誤。Hibernate用戶知道你不能訪問一個不含有已初始化Hibernate會話對象的集合。訪問一個沒有被初始化的動態代理對象的集合會導致運行時錯誤。The AMF 網關不知道如何特定

Macromedia FlexMacromedia Flex
的去尋找Hibernate動態代理對象。一個潛在的方法是面向方面的編程(AOP)。即將一個即將傳送給AMF網關的對象作為委代對象,移除動態代理。這是一個包含傳遞結果對象給攔截器,反覆尋找使用映射並沒有被初始化的代理對象的過程。如果找到什麼無用的代理對象或集合,將他們設定為null。這是一個cross-cutting關注,可以作為一個方面,進而使用AOP語言,比如JBoss AOP, AspectJ, Spring AOP等等。AOP攔截器應該被套用於業務代理層的對象。驗證典型的J2EE web應用程式有許多種身份驗證模式。它有可能是基於容器的身份驗證模式,或者是一些自定義密碼的用戶驗證。像Flex之類的RIA 伺服器允許你在大多數的應用程式伺服器上使用Flash客戶端的自定義身份驗證格式和基於容器的身份驗證。此外,如果你看一看上面的業務授權結構的例子的話,你會發現,為了安全起見你可以分配任務給這些對象。甚至在AMF網關中還有很多異常分支,允許開發者們獲取HttpRequest、HttpResponse和ServletConfig對象來改進您想使用的、帶有授權對象的安全性。總結這篇論文引入了一些概念,目的是為了讓您了解當您使用諸如Flex之類的RIA時的權衡和潛在的缺陷。不論你使用的是Flex還是其它的RIA工具,在構築應用程式的時候都會考慮最重要的是什麼。當評估一個RIA框架時,要確定它有足夠的可擴充性來對應應用程式的需求。此外,在RIAJava之間傳送對象時,需要注意要謹慎的構築綜合性的問題。

相關詞條

相關搜尋

熱門詞條

聯絡我們