BlazeDS 是一個基于服務器的 Java 遠程控制 (remoting) 和 Web 消息傳遞 (messaging) 技術,它提供了 Java 應用程序和運行在瀏覽器上的 Adobe Flex 應用程序相互通信的一種手段,并且是一種高效的手段。也就是說它實現了 Java 和 Flex 的無縫集成。
BlazeDS是開源的,Adobe原來有一個商業版本,這是商業版本的開源化的產品,功能比商業版本少一些,但基本滿足需要。
Flex與后臺服務器上的應用程序通信的手段有三個:
(1) HTTPService: 采用標準的HTTP請求,服務器返回 XML 格式的消息;
(2) WebService: 采用SOAP消息格式進行通信,也是XML格式,它是一種專門用于Web的業界標準;
(3) RemoteObject: 采用 AMF 消息格式進行通信,這是二進制的格式,因此它的效率最高。BlazeDS就是采用這個技術的。
據說 BlazeDS 還將開發適用于 .net 和 PHP 版本,不過采用相同技術(RemoteObject)的各種開源產品也已有多種了,可在 Java, .net, PHP下使用。
本文的目的是詳細說明BlazeDS開發環境的安裝,以及創建BlazeDSr的 Hello, world! 項目的過程。
一、相關軟件
1、安裝 Java JDK 5.0 以上版本;
這是必備的。
2、安裝 Eclipse 3.2 以上版本;
這也是必備的。
3、安裝 MyEclipse 6.0 以上版本;
它用于開發 J2EE 項目,可編寫 Java 程序,編寫網頁等。
4、安裝 Flex Builder 3 Plug-in版本(不能用獨立版本);
它用于開發 Flex 前端界面。
5、安裝 tomcat 6.0 以上版本;
Web服務器,也可用其它的,例如JBoss等。
6、下載 BlazeDS,有二個版本:
一是只有4M大小的版本,這是核心;
二是166M的版本,稱為blazeds-turnkey,它內置了tomcat以及文檔、實例和支持實例的數據庫系統(HSQL),以及flex sdk。
本教程只需BlazeDS的核心,下載后備用。
二、安裝過程
1、安裝 Java JDK 5.0 或 6.0,注意不是JRE,只要一路 Next 就行;
安裝完要作環境變量配置:
JAVA_HOME,為JDK的安裝目錄,如 C:\Program Files\Java\jdk1.6.0_06
CLASSPATH,值為 .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar,注意最前面的句號,不能漏了;
path,為安裝目錄下的 bin目錄,值為 %JAVA_HOME%\bin
2、安裝 Eclipse 3.2,只要解壓縮到任意一個目錄中;
直接運行其中的 eclipse.exe 文件即可,為提高運行速度,可為其分配更多的內存,即運行時加上下述參數:
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
方法是為 eclipse.exe 建立一個快捷方式,然后在快捷方式的屬性中在eclipse.exe后加一空格,再加上上述參數
3、安裝 MyEclipse 6.0 以上版本,在安裝過程中需要指定 Eclipse 的位置,然后一路 Next即可;
安裝后運行MyEclipse或eclipse都同樣是打開MyEclipse;
4、安裝 Flex Builder 3 Plug-in版本,可以安裝在任意的目錄中,在安裝過程中同樣需要指定 Eclipse 的位置,然后一路 Next 即可;
安裝后需配置 eclipse:
在上述第2步中的eclipse目錄下創建一個目錄,名為links,如果已經存在該目錄(通常是已有了),則使用原有的;
在links目錄下新建一個文件,名為 flex.link(文件名任意,后綴必須是link),內容為path=Flex Builder 3 Plug-in的安裝目錄,例如:
path=D:\\program\\Adobe\\Flex Builder 3 Plug-in
注意目錄的分隔符或者用“\\”,或者用“/”,前者為Windows風格,后者為Linix風格;
5、安裝 tomcat 6.0,將文件解壓縮到任意目錄中。
6、BlazeDS 在創建項目時用;
三、創建Hello, workd項目:
下述步聚將創建名為web的一個集成Java的Flex項目, 需要時還可以添加 hibernate, spring能力。下面的web都是指項目名,可以改為你的項目名。
1、創建一個MyEclipse的Web Project項目;
在MyEclipse中,選擇 File -> New,在彈出的菜單中選 Web Project,如果看不到該選項,則選 Others,然后再選:
MyEclipse -> Java Enterprise Projects -> Web Project
在下一步中指定項目的名稱,例如web,在這一步中記得將Source folder改為另外的名字,例如javasrc或jsrc,這是為了避免與flex的源文件夾名沖突;
其它保留默認值,完成項目的創建。
2、為項目配置服務器
首先啟動 tomcat 服務器:
在tomcat解壓縮的目錄中的bin下找到 startup.bat 文件,雙擊運行,這時將打開一個命令行窗口,在整個開發過程中不要關閉這個窗口,否則tomcat就停止了。
配置MyEclipse使用上述的tomcat 服務器;
將項目發布到 tomcat服務器;
上述2個小步聚不會做的,請查一下MyEclipse項目的使用的資料(配置tomcat,發布項目,啟動和停止tomcat)。
配置后可以用瀏覽器測試項目是否能正常運行:
http://127.0.0.1:8080/web/index.jsp
3、將 BlazeDS 解壓縮到項目中,步聚如下:
將下載的 BlazeDS.war 文件改后綴名為 zip,然后解壓縮到任意的目錄中,再將解壓縮出來的二個文件夾移動或復制到前一步中創建的項目中。
注意:這兩個文件夾是META-INF和WEB-INF,要把它們覆蓋上一步創建的項目中的同名目錄,僅是目錄名相同,文件是不同的。
復制后不要忘記重新發布一下項目,否則下一步不能做。
4、為項目添加Flex Project Nature;
這一步比較重要,必須是在前述所有步聚正確完成后才能進行:
從項目右鍵菜單中選擇 Flex Project Nature -> Add Flex Project Nature (在選擇中是第二個選擇);
在彈出的窗口中的Application server type 選擇 J2EE;
在下一個窗口中設置好合適的參數:
(1)反選 Use default location for local LiveCycle Date Services server
(2)Root folder: 選擇項目發布的目錄:例如:D:\program\tomcat6\webapps\web
(3)Root URL: 在瀏覽器中訪問項目的網址,例如:http://localhost:8080/web/
(4)Context root: 項目的上下文,一般就是項目名,例如:/web
項目必須是有BlazeDS的相關包,即上一步中復制到項目中,然后再發布到上述設置的目錄中。
設置好后,還需要點擊 Validation configuration,測試配置是否正確,只有正確時,才能繼續進行下去。
這時會出現一個錯誤提示,當完成下述設置后,錯誤將得到改正。并且整個項目創建完成。
修改項目的Flex Compile選項:
從項目右鍵菜單中選擇 Properties;
在打開的窗口中選擇 Flex Compiler,然后在右邊的 User a specific SDK中選 Flex 3.2。
項目創建成功
4、測試Flex 前端;
先測試 Flex 前端,在web.mxml文件中增加一行,添加一個Label,使整個文件內容如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Label x="228" y="95" text="Hello, World!"/>
</mx:Application>
|
按執行按鈕,這時應該彈出瀏覽器窗口,能看到頁面的內容 Hello, World!
5、測試與Java的集成:
將項目切換到MyEclipse Java Enterprise 視圖
在javasrc中按需要創建包,然后創建一個類:
package org.ngweb.flex;
public class Hello {
public String sayHello(){
return "Hello, world!";
}
public String sayHello(String s){
return "Hello, "+s+"!";
}
}
|
將項目視圖切換到 Flex Development 視圖:
打開 WebRoot/WEB-INF/flex/remoting-config.xml文件,將其修改成:
<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
class="flex.messaging.services.RemotingService">
<adapters>
<adapter-definition id="java-object"
class="flex.messaging.services.remoting.adapters.JavaAdapter"
default="true" />
</adapters>
<default-channels>
<channel ref="my-amf" />
</default-channels>
<!-- 新增的是下面六行,其它沒有改變 -->
<destination id="helloWorld">
<properties>
<!-- 這里要寫完整路徑:包名 + 類名 -->
<source>org.ngweb.flex.Hello</source>
</properties>
</destination>
</service>
|
然后在web.mxml中,添加一段代碼(第4步增加的Label可以刪除掉),使其成為(可以直接復制使用,有關代碼的含義請參見其它資料):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
private function resultHandler(event:ResultEvent):void {
Alert.show(event.result.toString(), "成功");
}
private function faultHandler(event:FaultEvent):void {
Alert.show(event.fault.toString(), "失敗");
}
]]>
</mx:Script>
<!-- destination 屬性值要和 remoting-config.xml 中 destination 的 id 一致-->
<mx:RemoteObject id="remoteObject"
destination="helloWorld"
result="resultHandler(event)"
fault="faultHandler(event)"/>
<mx:Button label="發送消息" click="remoteObject.sayHello('huang')" x="256.5" y="197"/>
</mx:Application>
|