こちらのエントリーにありますように、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
この記事に対するコメント