- 請先安裝JDK,請參考JDK安裝與配置。
- 安裝配置tomcat(for windows),以便運行Java於Server服務端,請參考Tomcat 安裝配置。
注意:本文使用的是tomcat6 , Blazeds 4
Step1.至Adobe Open Source取得Blazeds。
- Adobe Open Source頁面用IE開啟版面會跑掉,可以使用google瀏覽器開啟頁面。
- 點擊Release Builds底下的連結Download the latest BlazeDS Release builds進入adobe下載頁面。
- 進入後會需要登入網頁,沒有帳號向adobe註冊即可。
找到Download,下載BlazeDS binary distribution版本
- turnkey是內含了tomcat
- binary distrbution單純就只有BlazeDS
Step2.將下載回來的BlazeDS壓縮檔解壓縮
- 解壓縮後,於資料夾內會有兩隻檔案,blazeds.war 與 blazeds-bin-readme.htm。
Step3.將blazeds.war置放於tomcat底下的webapps資料夾
- 執行startup運行tomcat,該批次檔位於C:\[你的tomcat資料夾名稱]\bin\startup
- Tomcat運行中遇到.war的檔案會自動將他解壓縮,會看見在webapps底下多了一個blazeds資料夾。
問題:未自動解壓,如果tomcat未自動解壓,是因為tomcat的server.xml未配置。
解決方式:
- 編輯C:\[你的tomcat資料夾]\conf\server.xml檔。
- 於Host參數中加入deployOnStartup="true"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
- 如果你覺得麻煩也可以用解壓縮程式來解他,但tomcat如果會自動解是比較方便。
Step4.更改解壓完blazeds資料夾
- 將blazeds改成blazedsAMF
- 更改完成後應為:C:\tomcat6\webapps\blazedsAMF
- 此步驟可以不變更,依照自己的喜好習慣來決定。
Step6.於blazedsAMF\WEB-INF\src裡創建tw\com\myRemoteService的資料夾結構
- 建立好結構:
- C:\[tomcat資料夾]\webapps\blazedsAMF\WEB-INF\src\tw\com\myRemoteService
Step7.於\webapps\blazedsAMF\WEB-INF\src\tw\com\myRemoteService中建立一支SayHello.java。
程式碼如下:
package tw.com.myRemoteService;
public class SayHello
{
public String sayHello(String name)
{
return "Hi" + name + "Hello";
}
public String sayBadLan(String name)
{
return name + "你是豬頭";
}
}
編輯完成存檔
Step8.編譯SayHello.java
command Line輸入:
- C:\[你的tomcat資料夾]\webapps\blazedsAMF\WEB-INF\src\>javac -d ../classes
tw\com\myRemoteService\SayHello.java - 編譯完成後即可看到在C:\[你的tomcat資料夾]\webapps\blazedsAMF\WEB-INF\classes\tw\com\myRemoteService\底下看見SayHello.class檔。
Step9.配置remoting-config.xml
<destination id="Remote_SayHello">
<properties>
<source>tw.com.myRemoteService.SayHello</source>
</properties>
</destination>
Step10.使用Flex撰寫Client程式
程式碼如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application applicationComplete="main();" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.remoting.Operation;
import mx.rpc.remoting.RemoteObject;
import mx.messaging.channels.AMFChannel;
import mx.messaging.ChannelSet;
private var _channelSet:ChannelSet;
private var _amfChannel:AMFChannel;
private var _remoteObj:RemoteObject;
private var _op:Operation;
private var _uri:String;
private var _channelSetID:String;
private var _source:String;
private var _name:String;
private var _destination:String;
private var _btnEnable:Boolean;
private function main():void
{
iniRemoteProperty();
iniRemoteObj();
_btnEnable = true;
}
public function iniRemoteProperty():void
{
//blazeds的AMF Server Service服務位址
_uri = "http://192.168.11.42:8400/blazedsAMF/messagebroker/amf";
// _channelSetID = "my-amf";
//服務程式來原(由classes\ 之後算起)
_source = "tw.com.myRemoteService.SayHello";
//操作method名稱
_name = "sayHello";
_destination = "Remote_SayHello";
}
private function iniRemoteObj():void
{
//JAVA
_channelSet = new ChannelSet();
_amfChannel = new AMFChannel(_channelSetID , _uri);
_channelSet.addChannel(_amfChannel);
_remoteObj = new RemoteObject();
_remoteObj.destination = _destination;
_remoteObj.channelSet = _channelSet;
_remoteObj.source = _source;
_op = new Operation();
_op.name = _name;
_remoteObj.addEventListener(ResultEvent.RESULT , onResult);
_remoteObj.addEventListener(FaultEvent.FAULT , onFault);
_remoteObj.operations = {sayHello:_op};
}
private function BlazeDS_AMF_Service():void
{
if(_btnEnable == false)return;
_remoteObj.sayHello(input.text);
}
private function onResult(e:ResultEvent):void
{
//trace("成功");
output.text = e.result.toString();
}
private function onFault(e:FaultEvent):void
{
//trace("失敗");
output.text = "Remote失敗";
}
]]>
<mx:Panel width="300" height="200" verticalAlign="middle">
<mx:HBox> <mx:Label text="回傳結果"/>
<mx:TextInput id="output"/>
</mx:HBox>
<mx:HBox>
<mx:Label text="輸入數值"/>
<mx:TextInput id="input"/>
</mx:HBox>
<mx:Button id="sendBtn" label="send" mouseDown="BlazeDS_AMF_Service()" />
</mx:Panel> </mx:Application>
執行結果:
若發生remote問題請先檢查路徑字是否有key錯,因為本文可能會有誤key,其次檢查自己的防火牆設定,是否有檔掉Port。
- 於C:\[你的tomcat資料夾]\webapps\blazedsAMF\WEB-INF\flex底下找到remoting-config.xml
- 我們要加入一段配置如下,讓服務知道client端的要求是要找尋哪一隻程式。
- 請加在</default-channels>與</service>之間。
<destination id="Remote_SayHello">
<properties>
<source>tw.com.myRemoteService.SayHello</source>
</properties>
</destination>
Step10.使用Flex撰寫Client程式
程式碼如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application applicationComplete="main();" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.remoting.Operation;
import mx.rpc.remoting.RemoteObject;
import mx.messaging.channels.AMFChannel;
import mx.messaging.ChannelSet;
private var _channelSet:ChannelSet;
private var _amfChannel:AMFChannel;
private var _remoteObj:RemoteObject;
private var _op:Operation;
private var _uri:String;
private var _channelSetID:String;
private var _source:String;
private var _name:String;
private var _destination:String;
private var _btnEnable:Boolean;
private function main():void
{
iniRemoteProperty();
iniRemoteObj();
_btnEnable = true;
}
public function iniRemoteProperty():void
{
//blazeds的AMF Server Service服務位址
_uri = "http://192.168.11.42:8400/blazedsAMF/messagebroker/amf";
// _channelSetID = "my-amf";
//服務程式來原(由classes\ 之後算起)
_source = "tw.com.myRemoteService.SayHello";
//操作method名稱
_name = "sayHello";
_destination = "Remote_SayHello";
}
private function iniRemoteObj():void
{
//JAVA
_channelSet = new ChannelSet();
_amfChannel = new AMFChannel(_channelSetID , _uri);
_channelSet.addChannel(_amfChannel);
_remoteObj = new RemoteObject();
_remoteObj.destination = _destination;
_remoteObj.channelSet = _channelSet;
_remoteObj.source = _source;
_op = new Operation();
_op.name = _name;
_remoteObj.addEventListener(ResultEvent.RESULT , onResult);
_remoteObj.addEventListener(FaultEvent.FAULT , onFault);
_remoteObj.operations = {sayHello:_op};
}
private function BlazeDS_AMF_Service():void
{
if(_btnEnable == false)return;
_remoteObj.sayHello(input.text);
}
private function onResult(e:ResultEvent):void
{
//trace("成功");
output.text = e.result.toString();
}
private function onFault(e:FaultEvent):void
{
//trace("失敗");
output.text = "Remote失敗";
}
]]>
<mx:Panel width="300" height="200" verticalAlign="middle">
<mx:HBox> <mx:Label text="回傳結果"/>
<mx:TextInput id="output"/>
</mx:HBox>
<mx:HBox>
<mx:Label text="輸入數值"/>
<mx:TextInput id="input"/>
</mx:HBox>
<mx:Button id="sendBtn" label="send" mouseDown="BlazeDS_AMF_Service()" />
</mx:Panel> </mx:Application>
執行結果:
若發生remote問題請先檢查路徑字是否有key錯,因為本文可能會有誤key,其次檢查自己的防火牆設定,是否有檔掉Port。
沒有留言:
張貼留言