Flex2のアプリをFlex3にコンバージョン。試行.その1

Flex2と言っても、実はもともとFlex2.0であり、Flex2.0.1ではありません。
なので、Flex2.0 → Flex3.0のコンバージョンです。

Flex3.0には /srcディレクトリの出現。

ソースパッケージ、/asset、/css、などなど。自分で作ったディレクトリはすべてここに突っ込んでしまえば問題ナシのよう。アプリケーションのルートが、/srcディレクトリになるということのようですね。ちなみに、メイン.mxmlは必ず/srcの中に入れないと、default application設定ができないようだ。

WebORBとの接続

参考:http://d.hatena.ne.jp/nisyu/20071115/1195113642
なんとびっくり、この日記にあたしのこのブログがリンクされてる!参考してくれて、参考させてくれてありがとうございます!


RoRアプリケーションはサーバにあるため、コンパイルもローカルでやる構成のプロジェクトです。

コンパイルオプション

[Project]-[Properties]-[Flex Compiler]にて、以下のコンパイルオプションを指定。


  • -services "config-xml/services-config.xml"

    ※ホントはWEB-INFにあるべきXMLだけど、/src/config-xml の中に入れて定義してある

  • -locale ja_JP

  • -context-root "/weborb"

    Flex2.0では不要だった定義。Flex2.0.1から必要に。

services-config.xmlの修正

コンパイルしてみると、

チャンネル定義 mx.messaging.channels.RTMPChannel が見つかりません。

と言われ、コンパイルエラーになってしまいます。


さて、そこでhttp://livedocs.adobe.com/flex/3_jp/langref/を探してみたところ、RTMPChannelなんていうクラスは存在していないじゃないか!
なので、参考サイトに書いてあった通り

remove or comment out these lines... 
==================================================== 
1.
<service-include file-path="messaging-config.xml" /> 

2.
<channel-definition id="my-rtmp" class="mx.messaging.channels.RTMPChannel"> 
  <endpoint uri="rtmp://{server.name}:2037" 
            class="flex.messaging.endpoints.RTMPEndpoint"/> 
  <properties> 
    <idle-timeout-minutes>20</idle-timeout-minutes> 
  </properties> 
</channel-definition> 

3.
<watch-file>{context.root}/WEB-INF/flex/messaging-config.xml</watch-file> 
====================================================

これらの記述をコメントアウトしてしまうと、見事コンパイル成功。

クラス構成の修正

Listコントロール(mx.controls.List)のchangeイベント
[ 2.0 ]:flash.events.Event
[ 3.0 ]:mx.events.ListEvent

このため、コンパイルは通るけれど実行させるときに「強制型変換に失敗」してしまう。