nod::ぶろぐ:RIA::Flex/AIR/Flash

FlashやFlex,(Ajax),S2Flex2,ActionScript3,yui-frameworks,Akabanaプロジェクトなどのメモ帳

Flex2でOpenAMFに接続してみる(ASで接続成功編)

こちらのエントリーにありますように、RemoteObjectタグを使ってのOpenAMFへの接続に失敗したので、仕方なく元ネタにあった接続方法を試してみました。

この方法では無事接続に成功しました。

この方法だと、flex-services.xmlの用意や、コンパイラの設定などはせずに、ASファイルとmxmlファイルだけで接続することができます。(OpenAMFの設定は必要です。)

まずは、新規にFlex2プロジェクトを作成します。その後にASファイルとmxmlファイルを作成していきます。

1.NetConnection2.asの作成

元の元のエントリにあったものをそのままasファイルとして保存しました。 packageはJavaでいうところのデフォルトパッケージになるのでプロジェクト直下に保存します。

NetConnection2.as:

package

{

import flash.net.NetConnection;



public class NetConnection2 extends flash.net.NetConnection

{

public function AppendToGatewayUrl(append:String):Void

{

}

public function AddHeader():Void

{

}

public function ReplaceGatewayUrl():Void

{

}

}

}

2.mxmlファイルの作成

あとは、OpenAMFで用意されたメソッドを呼び出すmxmlファイルを作成します。
作成したNetConnection2のEncodingをAMF0に設定して接続します。

var gatewayURL:String = "http://localhost:8080/openamf/gateway"; var conn:NetConnection2 = new NetConnection2(); conn.objectEncoding=ObjectEncoding.AMF0; conn.connect(gatewayURL);

あとは、サーバ側のメソッド呼び出し後に実行するAS側のメソッドをResponderに設定し、callメソッドで呼び出します。
callメソッドの引数として、呼び出すメソッドをクラスの完全名を含めて指定します。パラメータがあるときには、第二引数以降に指定します。


<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.macromedia.com/2005/mxml" xmlns="*">

<mx:Script>

import mx.rpc.events.ResultEvent;

import mx.utils.ObjectUtil;

import mx.rpc.remoting.mxml.RemoteObject;

import flash.net.ObjectEncoding;

import NetConnection2;

import flash.net.NetConnection;




public function TestBeanResult(result:Event)

{

resultDump.text = "Result" +result;

}

public function getValue(){

var gatewayURL:String = "http://localhost:8080/openamf/gateway";

var conn:NetConnection2 = new NetConnection2();

conn.objectEncoding = ObjectEncoding.AMF0;

conn.connect(gatewayURL);

var r:Responder = new Responder(TestBeanResult);

conn.call("org.openamf.examples.TestBean.getTestValue", r);



}

public function setValue(){



var gatewayURL:String = "http://localhost:8080/openamf/gateway";

var conn:NetConnection2 = new NetConnection2();

conn.objectEncoding=ObjectEncoding.AMF0;

conn.connect(gatewayURL);



var r:Responder = new Responder(TestBeanResult);

conn.call("org.openamf.examples.TestBean.setTestValue", r,inp.text);


}

</mx:Script>



<mx:Panel label="Operations" height="100%" width="20%" >

<mx:TextInput id="inp" width="100" />

<mx:Button label="setTestValue" width="100" click="setValue();"/>

<mx:Button label="getTestValue" width="100" click="getValue();"/>

</mx:Panel>

<mx:Panel label="Rsults" height="100%" width="80%" x="162" y="2">

<mx:TextArea id="resultDump" height="50%" width="50%" text="results:"/>

</mx:Panel>

</mx:Application>


3.呼び出し実行

NetConnection2.asとmxmlファイル(NetConnection.mxml)を作成後、、NetConnection.mxmlを実行して、swfファイルを作成します。

あわせて、Tomcatを実行してOpenAMFでリクエストを受け付けるようにします。
メソッドを呼び出したときにわかるようにブレークポイントを指定しておきました。

生成したswfにある"setTestValue","getTestValue"ボタンをクリックして実行!

無事にブレークポイントで指定した場所で止まりました。
パラメータもサーバ側にわたすことができました。

AMFPHPとの違いは、接続するURLと呼び出すメソッドがPHPのメソッドからjavaのメソッドのみであっさり接続することができました。

これらのクラスを利用するカスタムタグを作れば、RemoteObjectタグと同様の使い勝手が期待できますね。



AMFPHP 1.0 Works with Flex 2 / Flash Player 8.5 Alpha
http://www.jessewarden.com/archives/2005/12/amfphp_10_works.html

AMFPHPとFlex2の連携方法
http://www.noridon.net/weblogs/archives/2006/01/amfphp_10_works.html

Flex2でOpenAMFに接続してみる。(1)失敗編
http://www.noridon.net/weblogs/archives/2006/01/flex2openamf1.html

Posted by nod at 2006年01月09日 23:13 | コメント (0) | トラックバック (0) | Clip!! | Clip!! | このエントリーを含むはてなブックマーク |digg it! |del.icio.us it!

この記事に対するコメント

この記事に対するコメントはまだありません。


コメントを投稿する




保存しますか?



この記事のトラックバックURL


この記事に対するトラックバック

この記事に対するトラックバックはまだありません。



Flex.org - The Directory for Flex Get Adobe Flash Player Made with dreamweaverMade with fireworksPowered by Movable Type 3.36Powered by Wandering Wind
Copyright : [Articles] (C) nod::ぶろぐ:RIA::Flex/AIR/Flash All Rights Reserved.
[Comments/Trackbacks] ... Authors of those have rights.