タイトル通りBlazeDSでFlexとJavaを通信させる最小限の設定(だと思う)
~Java側の設定~
①まず、AdobeのBlazeDSのページからライブラリをダウンロード
②これを展開し、以下の4つをjavaのWEB-INF/libにつっこむ
・backport-util-concurrent.jar
・flex-messaging-common.jar
・flex-messaging-core.jar
・flex-messaging-remoting.jar
③Blaze用の設定ファイルをWEB-INF/flex/services-config.xmlに作成
メモ:flexっていうフォルダは自分で作る!!
説明のため、hogeパッケージのFooクラスにflexからアクセスする為のメソッドを起き、
名前を、hogehogeと名づけ、http://www.example.com/BlazeTest/
でアクセスすると仮定すると、(blazeTestはTomcatで設定)
内容は、
ここで重要なのは15行目と19行目だけ
15行目のは、flex側の設定で出てくる。
19行目のは、flexから呼ばれるJavaクラスを登録する。Java Beansって書いてあるけど、呼び出したいメソッドのJavaクラスのことだと思う。HttpServletを継承する必要はない。
引数、戻り値に使うJavaBeansはここで登録しなくてもいけた。
④実際に呼びだされるJavaクラスの作成。
先ほど登録したクラスを作成。
引数、戻り値がある場合は、flex側とjava側の両方に全く同じフィールドとそのgetter,setterメソッドしか持たないBeanクラスを作る必要がある。Java側はフツーのJavaBeansで良い。ちなみに戻り値に使うクラスはSerializableをimplementsしていなければならない。
説明のため、barメソッドを呼び出すとする
⑤④の設定ファイルを読み込むようにweb.xmlに追加
WEB-INF/web.xmlに以下の内容を追加する。
~Flex側での設定~
①mxmlにdestinationを指定
mxml内にremoteObjectを書く
ここでlocalhost:8080は自分の環境に合わせて変更し、destinationはJava側で設定した↑の15行目の文字列が入る。
②通信開始を呼ぶメソッドを書く
ASのfunction内でもmxmlのclickとかchangeでもいいけど、そこで
srv.bar()と書けば通信してくれる。引数がある場合はもちろんここにいれる。
戻り値は、srv.bar.lastResultで取得できるが、この通信は非同期で行われるので、ASのfuncrion内でこのメソッドを呼んでも、通信が終わる前に次の行が処理されてしまうので注意。
受信が完了した時に、barResultというfunctionを呼んで処理をしたい場合は、①のRemoteObjectを以下のように変更する。
nameには、java側の呼び出すメソッド名、resultには、受信後にflex側で呼び出すfunctionを指定してやる。
③Flex側でもBeansを作成
通信で扱う変数は、Beanに格納しなければならない。(ただし、戻り値のStringの場合は必要ない)
また、FlexとJava側で作成したBeansを関連関連付けるため、AS側のBeanクラスのpublic classの前の行に
~Java側の設定~
①まず、AdobeのBlazeDSのページからライブラリをダウンロード
②これを展開し、以下の4つをjavaのWEB-INF/libにつっこむ
・backport-util-concurrent.jar
・flex-messaging-common.jar
・flex-messaging-core.jar
・flex-messaging-remoting.jar
③Blaze用の設定ファイルをWEB-INF/flex/services-config.xmlに作成
メモ:flexっていうフォルダは自分で作る!!
説明のため、hogeパッケージのFooクラスにflexからアクセスする為のメソッドを起き、
名前を、hogehogeと名づけ、http://www.example.com/BlazeTest/
でアクセスすると仮定すると、(blazeTestはTomcatで設定)
内容は、
ここで重要なのは15行目と19行目だけ
15行目のは、flex側の設定で出てくる。
19行目のは、flexから呼ばれるJavaクラスを登録する。Java Beansって書いてあるけど、呼び出したいメソッドのJavaクラスのことだと思う。HttpServletを継承する必要はない。
引数、戻り値に使うJavaBeansはここで登録しなくてもいけた。
④実際に呼びだされるJavaクラスの作成。
先ほど登録したクラスを作成。
引数、戻り値がある場合は、flex側とjava側の両方に全く同じフィールドとそのgetter,setterメソッドしか持たないBeanクラスを作る必要がある。Java側はフツーのJavaBeansで良い。ちなみに戻り値に使うクラスはSerializableをimplementsしていなければならない。
説明のため、barメソッドを呼び出すとする
⑤④の設定ファイルを読み込むようにweb.xmlに追加
WEB-INF/web.xmlに以下の内容を追加する。
~Flex側での設定~
①mxmlにdestinationを指定
mxml内にremoteObjectを書く
ここでlocalhost:8080は自分の環境に合わせて変更し、destinationはJava側で設定した↑の15行目の文字列が入る。
②通信開始を呼ぶメソッドを書く
ASのfunction内でもmxmlのclickとかchangeでもいいけど、そこで
srv.bar()と書けば通信してくれる。引数がある場合はもちろんここにいれる。
戻り値は、srv.bar.lastResultで取得できるが、この通信は非同期で行われるので、ASのfuncrion内でこのメソッドを呼んでも、通信が終わる前に次の行が処理されてしまうので注意。
受信が完了した時に、barResultというfunctionを呼んで処理をしたい場合は、①のRemoteObjectを以下のように変更する。
nameには、java側の呼び出すメソッド名、resultには、受信後にflex側で呼び出すfunctionを指定してやる。
③Flex側でもBeansを作成
通信で扱う変数は、Beanに格納しなければならない。(ただし、戻り値のStringの場合は必要ない)
また、FlexとJava側で作成したBeansを関連関連付けるため、AS側のBeanクラスのpublic classの前の行に
[RemoteClass(alias="hoge.FooBeans")]などとJavaBeansのパッケージ名を含んでクラスを教えてあげなければならない。
戻り値に使う場合はもちろん[Bindable]も必要
たぶん、これでいくはず
<参考>
Adobe - Developer Center
Adobe BlazeDSを自分のWebアプリケーションに組み込む設定

コメントする