2010年6月8日 星期二

Blazeds4 配置與Flex Remote測試 ,使用tomcat6

§Blazeds 配置與Flex Remote測試(for windows system)
注意:本文使用的是tomcat6 , Blazeds 4
Step1.至Adobe Open Source取得Blazeds。
  • Adobe Open Source頁面用IE開啟版面會跑掉,可以使用google瀏覽器開啟頁面。








 登入後按下IAgree




找到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

  • 於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。

沒有留言:

張貼留言