1. 程式人生 > >java開發人員為什麼要學習flex和blazeds

java開發人員為什麼要學習flex和blazeds

本文列述了13Java程式設計師應當學習FlexBlazeDS的理由,討論了為什麼Flex結合BlazeDS是開發RIA的最佳組合之一。無論是高度互動的網站還是以Java為後端的企業應用,這項組合都是最佳選擇之一。更重要的是,這項組合能同時為開發員和企業帶來高回報(ROI)。

在闡述Java程式設計師應當學習BlazeDS13條理由時,我以一個假想的蘇打分派系統來展示如何讓已有的Java程式轉變為RIA應用。通過這個例子,我同時還會講解到BlazeDS在已有Java應用或新建Java應用中的多種不同用法。

理由一:開源

Flex軟體開發工具箱(SDK)的核心是個開源框架,專門用來開發、維護那些在不同瀏覽器、不同作業系統下介面都相同的

RIA應用。Flex釋出採用的是Mozilla公共許可證(Mozilla Public License)。編譯後的Flex應用在Adobe Flash平臺下執行。

BlazeDS是連線FlexJava的索橋,是項針對遠端呼叫和訊息傳遞的開源技術。在Java應用伺服器上,它以servlet的形式存在,因此可以在任何標準Java網路應用中運用它。BlazeDSLGPLLesser GNU Public License)公共許可證書釋出。在釋出BlazeDS的同時,Adobe還公佈了AMFActionScript Message Format)規格說明,BlazeDSJavaFlex客戶端間以這種簡潔的二進位制格式實現通訊。

理由二:完善的社群支援

Flex社群非常活躍,社群貢獻了大量專案。Flex.org,這個配以社群新聞的Adobe站點幾乎每天都有新的社群貢獻;Yahoo!上的Flex使用者組的成員也已經超過了11000

再比如Google Code上的Flexlib專案,已經提交了大量的開源UI元件。SwizMate專案貢獻了優化事件處理的框架;還有Gorilla Logic貢獻了自動化UI測試的Flex Monkeym專案。

理由三:帶來廣闊的就業前景

AdobeFlex“傳道士”——James Ward看來,Flex高階開發員的市場需求非常大,學習Flex能讓你擁有極具市場競爭力的開發技能。

理由四:更高的業務效益回報

總體上,開發企業web應用不是個輕鬆的活,這基本上是眾所周知的事實。FlexBlazeDS提供的不僅僅是功能強大的開發工具,而且開發技術本身相對也非常簡單。開發效率可以得到大幅度的提升,產品因此可以很快推向市場。FlexFlash帶來的使用者體驗也相對更有魅力,對增加流量、提高用戶轉化率(conversion rate)很有幫助。

很經典的一個例子是Borders連鎖書店。他們最近釋出了帶有魔法書架的新網站,這個網站採用Flash介面來模擬書籍借閱的過程。 Borders 發現這一模擬借閱非常明顯地提到了使用者轉換率:藉助這個Flash驅動的介面,使用者可以瀏覽書籍、DVDCD的封面,使用者轉換率比其他沒有此項功能的網站高出62

理由五:Flex是第一個專門為建立UI而設計的語言

大部分語言都不是在第一時間設計其對UI的支援。JavaSwing包的實現剛好是個很好的證明。也就是這個原因,很多像捆綁資料這樣的簡單動作在Swing當中的實現就非常痛苦。用 Swing最大的問題在於,要想提高開發效率就必須要對其API瞭如指掌。

Flex剛好相反,它是專門為建立web UI而設計的。正如Bruce Eckel所說,Flex是第一個針對UI開發的領域特定語言(DSL)。用Flex構建UI比其它諸如JSPJSFSwing等技術簡便得多。語言本身糅合了資料繫結、事件處理、控制元件佈局以及其它一些UI常用開發技巧,就算對語言沒有深刻的理解也不會影響開發效率。

理由六:程式設計風格近似於Java

你可以繼續使用現有的Java開發工具來開發Flex應用。當然也可以採用SDK中攜帶的免費命令列工具,Adobe Flex Builder(一個Eclipse外掛),或最近的IntelliJ IDEA 8

Flex提供的是一個有狀態環境,在這個環境中,資料從客戶端載入。這種程式設計模式更像是開發桌面客戶端而非HTML程式設計,這種風格對於用過Java Swing程式設計的開發員來說應該是相當熟悉。

FlexMXML(類似XMLUI標記語言)和Adobe ActionScript(面向物件的解析語言)的結合體。鑑於這種結合方式,Flex程式設計與Java非常相似,因為兩者用的都是熟知的面向物件的概念。

最理想的開發環境是把Flex應用建立在web部署資料夾下。這樣一來,每次更新應用之後都不需要重新部署,只要在瀏覽器下重新整理一下就可以了。用FlexBlazeDS開發後,開發效率絕對比之前有很大的提升。

理由七:BlazeDS可以在任何Java應用伺服器上執行

BlazeDS目前已釋出了多個版本,其中的turnkey版本還包含了為BlazeDS配置的Apache Tomcat。本文中,我用的是二進位制釋出版本,其中含有一個WAR用來展示如何把應用部署到各種應用伺服器上去。不用這個WAR的話,你也可以從中提取 JAR檔案放到自己的專案中去。關於安裝BlazeDS的各種選項內容,可以參見BlazeDSwiki

這裡舉一個簡單的例子,比方說要在已有的一個簡單的蘇打調配系統中應用BlazeDS。你只要把JAR檔案放到專案資料夾下,然後就可以在應用裡直接用BlazeDS,可以部署到能夠部署應用的任何地方。

在專案中新增BlazeDS,只需要完成下面兩個步驟:

1.解壓縮BlazeDS WAR檔案的內容:jar xvf blazeds.war

2.JAR檔案都拷貝到專案的lib資料夾下:cp -R WEB-INF/lib /sodaSample

理由八:可以在已有Java應用中運用

比方說這個簡單的蘇打調配系統,假設你想要擴充套件這個已開發好的服務,讓其它Flex應用可以遠端呼叫。在現成的應用中配置BlazeDS的基本步驟有:

1.修改WEB-INF/flex資料夾下的BlazeDS配置檔案

2.在該應用對應的web.xml檔案裡定義MessageBrokerServletsession監聽器

配置好BlazeDS之後,再把蘇打調配服務新增到BlazeDS遠端配置檔案裡,Flex客戶就能遠端呼叫了。這個過程通過在配置檔案裡定義一個目的地(destination)、一個或多個通道(channel)來傳輸資料。基本的AMF通道定義在services.xml檔案裡。下面這段配置 remoting-config.xml裡定義了目的地(destination):

<destination id="sodaService" channels="my-amf">
<properties>
<source>com.gorillalogic.sodaSample.SodaService</source>
</properties>
</destination>

通過在遠端呼叫配置檔案裡定義端點(endpoint),Flex客戶端就可以呼叫任何一個基本的Java服務。

要是想把Java資料模型也傳送到Flex客戶端的話,只要在ActionScript類中定義好兩者間的對映:

[Bindable]
[RemoteClass(alias="com.gorillalogic.sodaSample.SodaModel")]

這段程式碼告訴Flex,在遠端呼叫的服務返回SodaModel的時候,把它對映到FlexSodaModel。本例中的Flex客戶端顯示的就是如何呼叫這個Java服務。呼叫返回一個已經填寫好預定資訊的SodaModel

public function callSodaService():void {
var sodaType:String = type.text;
var sodaCount:int = parseInt(cnt.text);
var flag:Boolean = preOpen.selected;
remoteObject.getSoda(sodaType, sodaCount, flag);
}

private function resultHandler(event:ResultEvent):void {
var sodaModel:SodaModel = event.result as SodaModel;
}

Flex返回的結果是通用的result變數,可以直接對映到你的SodaModel。這裡我就不深入討論怎麼實現映射了,但其中值得提到的是要在編譯配置裡宣告services-config.xml路徑,像這樣:

-locale en_US -services=/nsource/sodaSample/web/WEB-INF/flex/services-config.xml -context-root /

如果不新增這個路徑的話,你的Flex客戶端就沒發找到Java服務。同樣的方式,你還能把一個物件從客戶端傳遞迴伺服器端。比如,你可以把一個空的soda model發回伺服器(審校注:原文這裡寫的是客戶端,根據上下文判斷這裡應該是伺服器端)。

理由九:可以通過Java來擴充套件和修改BlazeDS

假如你想新增特殊的日誌來記錄蘇打調配服務被呼叫的情況,那麼你可以擴充套件標準的Java介面卡來新增日誌功能。

首先,新增一個繼承了JavaAdapterJava類:

import flex.messaging.services.remoting.adapters.JavaAdapter.
public class TimingJavaAdapter extends JavaAdapter{

其次,過載invoke()方法:

public Object invoke(Message message) {
RemotingMessage remotingMessage = (RemotingMessage) message;
String operation = remotingMessage.getOperation();
String destination = remotingMessage.getDestination();

Logger.info("calling " + operation + " on destination " + destination);
Object data = super.invoke(message);
return data;
}

這個方法中,你可以看到呼叫之後的操作和呼叫的目的地(destination)。這種方法也能用來處理其它一些問題,比如記錄向伺服器傳送呼叫需要多長時間。

理由十:HTMLJSP也能呼叫BlazeDS

HTMLJSP也能呼叫BlazeDS,這種呼叫有幾種不同的實現方式,比如通過Browser ManagerfflashVarsf來實現。Flex應用能夠讀取由HTML頁面設定的fflashVarsf

比方說你想要通過HTML頁面來發送你的使用者名稱和準備預定的蘇打型別,你可以在HTML頁面這樣設定flashVars

<object id='SodaSample' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab' height='100%' width='100%'>
<param name='src' value='SodaSample.swf'/>
<param name='flashVars' value='username=ryan&type=coke'/>
<embed name='mySwf' src='SodaSample.swf' pluginspage='http://www.adobe.com/go/getflashplayer' height='100%' width='100%'flashVars='username=ryan&type=coke'/>
</object>

然後,在Flex應用中,你可以通過讀取應用引數來獲取這些變數:

var username:String;
if (Application.application.parameters.hasOwnProperty("username")) {
username = Application.application.parameters.username;
}

理由十一:FlexBlazeDS的資料傳輸效能遠勝於其它Ajax解決方案

目前使用的遠端過程呼叫(RPC)都預設選擇AMF二進位制協議。AMF是個開放的標準,而且相當快。James Ward曾舉例比較過多種遠端呼叫解決方案。儘管其它Ajax技術——比如Dojo——已經能夠快速處理幾百行的資料,但是用FlexBlazeDS話可以輕鬆搞定成千上萬行。(請參考James Ward's census,可以瞭解下各種不同的RIA資料載入技術的測評。)

理由十二:Java客戶端能夠直接呼叫BlazeDS

最新發布的BlazeDS當中含有一個JavaAMF類,通過這個類,你可以在Java客戶端直接呼叫BlazeDS伺服器。對於單元測試和載入測試來說,BlazeDS的這種呼叫方式非常實用。

理由十三:Spring下也能用

AdobeSpring互相聯手,嘗試將雙方專案整合起來。他們釋出的第一個Spring–BlazeDS整合版本就向大家展示了他們的良苦用心。Spring Bean能夠以遠端服務的方式被呼叫,因此可以清除很多重複的配置檔案。更多這方面的相關資訊,可以參考該專案的主頁。

結論

開源的BlazeDS建立在Java基礎上,無論是對新的還是已有的Java伺服器專案來說都是個很好的選擇。FlexBlazeDS技術能夠提供高效能的遠端通訊,支援FlexJava間的物件對映,因此是RIA開發的理想選擇。FlexBlazeDS的開發新手,如果曾經是Java開發員的話,會發現整個開發過程效率非常高,而且很容易掌握。

FlexBlazeDS還是開發大型Java企業應用的理想選擇。我們組開發的上個專案中,應用涉及到50多個不同的介面,而且伺服器和客戶端之間需要規律性地互傳幾千行的程式碼。這類應用幾乎沒法通過傳統的Ajax技術來實現。但是在引入了FlexBlazeDS之後,我們在年內就釋出了第一個版本。看,這就是這對動態組合為你的應用開發專案帶來的過人之處。

相關推薦

java開發人員為什麼學習flexblazeds

本文列述了13個Java程式設計師應當學習Flex和BlazeDS的理由,討論了為什麼Flex結合BlazeDS是開發RIA的最佳組合之一。無論是高度互動的網站還是以Java為後端的企業應用,這項組合都是最佳選擇之一。更重要的是,這項組合能同時為開發員和企業帶來高回報(RO

遊戲開發人員學習哪些東西?

相對於網路程式設計師、資料庫程式設計師,遊戲程式設計師似乎顯得更為時尚。遊戲市場帶來廣闊前景和無限商機,遊戲程式設計師作為技術的載體,其價值也在不斷被放大。 在遊戲程式開發方面,大致可以將技術劃分為如下幾個模組: 遊戲架構、圖形影象、圖形特效、遊戲邏輯、遊戲介面、人工智慧、聲音音效、網路連線

Java開發想嘗試大資料資料探勘,如何規劃學習

大資料火了幾年了,但是今年好像進入了全民大資料時代,本著對科學的鑽(zhun)研(bei)精(tiao)神(cao),我在17年年初開始自學大資料,後經過系統全面學習,於這個月跳槽到現任公司。 現在已經從之前的java後端開發正式轉大資料開發,專案資料50T,日均資料增長2

Java開發人員必知必會的20種常用類庫API

坐穩了沒?要開車了哦 一個有經驗的Java開發人員特徵之一就是善於使用已有的輪子來造車。《Effective Java》的作者Joshua Bloch曾經說過:“建議使用現有的API來開發,而不是重複造輪子”。在本文中,我將分享一些Java開發人員應該熟悉的最有用的和必

IntelliJ IDEA詳細配置使用教程(適用於Java開發人員)

前言 正所謂工欲善其事必先利其器,對開發人員而言若想提高編碼效率,一款高效的開發工具是必不可少的,相信看到該部落格的朋友們都已經對IntelliJ IDEA有所瞭解了,所以此處就不對IntelliJ IDEA進行介紹,而是直接闡述在實際開發中應用場景。博主使用

Java開發人員必知必會的常用類庫API

一個有經驗的Java開發人員特徵之一就是善於使用已有的輪子來造車。《Effective Java》的作者Joshua Bloch曾經說過:“建議使用現有的API來開發,而不是重複造輪子”。在本文中,我將分享一些Java開發人員應該熟悉的最有用的和必要的庫和API。順便說一句,這裡不包括框架,如S

細說java開發人員的成長路線_java學習路線

很多人都在學習java的開發,java自1995年釋出了jdk1.0之後,發展非常迅速,至今已有20多年的歷史,他服務於各大領域,同時也是名副其實的世界第一程式語言,隨著近期大資料和人工智慧的快速發展,java無疑再次鞏固自己第一的位置。經歷了那麼多年的發展湧現出很多java

轉載----編寫高質量代碼:改善Java程序的151個建議(第1章:JAVA開發中通用的方法準則___建議1~5)

ase 重載方法 name 原理 .get tin stat eas 容易 閱讀目錄 建議1:不要在常量和變量中出現易混淆的字母 建議2:莫讓常量蛻變成變量    建議3:三元操作符的類型務必一致   建議4:避免帶有變長參數的方法重載 建議5:別讓null值和空值威

Java開發人員的Play Framework(2.4)介紹 Part1:Play的優缺點以及適用場景

dead 跟著 框架 sta web 錯誤 gist 解壓 環遊世界 1. 關於這篇系列這篇系列不是Play框架的Hello World,由於這樣的文章網上已經有非常多。這篇系列會首先結合實際代碼介紹Play的特點以及適用場景。然後會有幾篇文章介紹Play與Spring

我是一名java開發人員,ibernae以四川成都春熙路發生

。。 原創文章 django 本地 b- 發展 動畫 統一 之間 谷歌在安卓P版本中已經提供了統一的適配方案,可是在安卓O版本上如何適配呢?本文將詳細介紹華為安卓O版本劉海屏適配方案。使用華為提供的劉海屏SDK進 最近一個買房經驗分享在 GiHub 上火了,不到四天的時間迅

第1篇 java 8 流的學習----篩選切片

篩選、切片和匹配  查詢、匹配和歸約  使用數值範圍等數值流  從多個源建立流  無限流 /** * 篩選和切片 */ public class Demo01 { public static void main(String[] args) { List&l

優秀的Java開發人員只能待在底層嗎?

很多人做Java開發2,3年後,都會感覺自己遇到瓶頸。什麼都會又什麼都不會,如何改變困境,為什麼很多人寫了7,8年還是一個碼農,工作中太多被動是因為不懂底層原理。公司的工作節奏又比較快,難有機會學習架構原理,也沒人教,所以這個時候,學習架構原理,擴充套件思維,對自己以後職業生涯尤為重要。 同樣公

阿里巴巴Java開發手冊--程式碼抒寫規範注意

Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念 PO(persistant object) 持久物件 在 o/r 對映的時候出現的概念,如果沒有 o/r 對映,沒有這個概念存在了。通常對應資料模型 ( 資料庫 ), 本身還有部分業務邏輯的

Kotlin學習筆記:為什麼學習kotlinkotlin的整合

Google在2017年的I/O大會上已經宣佈kotlin正式成為Android的一級開發語言。 為什麼要學習Kotlin Google釋出申明,目前已經有35%的Android專業開發人員使用kotlin(爆發式增長) Google與Oracle源於

Java多執行緒學習---Conditionwait、notify(十三)

1.問題:實現兩個執行緒交叉執行(Condition和wait、notify都可以實現) public class ConditionStudy { public static void main(String[] args) { //執行緒程式碼 BussinessTes

寫給伺服器端Java開發人員的Kotlin簡介

Kotlin簡介 JetBrains有一個明確的目標:讓Kotlin成為一種多平臺語言,並提供100%的Java互操作性。Kotlin最近的成功和成熟水平為它進入伺服器端提供了一個很好的機會。 選擇Kotlin的理由 許多語言都試圖成為更好的Java。Kotlin在語言和生態系統方面做得都很好。成為更

java開發工具必備神器——Notepad++jd-gui下載安裝使用

  Notepad++是 Windows作業系統下的一套文字編輯器,有完整的中文化介面及支援多國語言編寫的功能(UTF8技術)。除了可以用來製作一般的純文字說明檔案,也十分適合編寫計算機程式程式碼。Notepad++ 不僅有語法高亮度顯示,也有語法摺疊功能,並且支援巨集以及擴充基本功能的外掛模組。

Java入門進階學習資料專案實戰資源

比較好的Java入門資源,逐個知識點選破 比較好的Java入門資源 連結 JAVA 自學網站 http://how2j.cn?p=48616 JAVA 練習題 http://how2j.

非科班Java程式設計師的學習過程社招經歷總結

個人發展目標 首先我覺得個人今後想做什麼方向也是比較重要的,除了資料結構常用演算法、作業系統、網路、資料庫這些常用基礎外,國內網際網路公司基本上雖然說刷題也是必須的,但光刷題肯定是不夠的,多少還是有方向重點的。雖然說後端語言不是關鍵,要轉也問題不大,但是畢竟時間有限,又要去把c++的stl原始碼

Spring Boot 針對 Java 開發人員的安裝指南

Spring Boot 可以使用經典的開發工具或者使用安裝的命令列工具。不管使用何種方式,你都需要確定你的 Java 版本為 Java SDK v1.8 或者更高的版本。在你開始安裝之前,你需要確定你當前安裝的 Java 版本滿足系統執行的需要。 你可以使用下面的命令進行檢視