妄想その6 -昨日のエントリの解。FlexとJavaリモーティングをもっともっと簡単に!!!-
昨日のエントリ「BlazeDSをDisる(っていうのはうそでBlazeDSで使いにくいところ)」の自分なりの解。
それがこの妄想その6です。
BlazeDSは素晴らしいフレームワークなんですが、(いまんところ)Javaとのリモーティングだけに使いたい
自分にとっては若干重たい。あと設定ファイルはやっぱり少し面倒くさい、そういう人向けの解決方法ですw
簡単にどうやって解決したかというと、
です。
まあモノをみてもらったほうがわかりやすいので、まずはJavaのPOJOはこんな感じPageクラス。
@Page("login") public class LoginPage { @Amf public Navigation login(LoginContext loginContext) { if (loginContext == null) { throw new NullPointerException(); } if (loginContext.getUsername() != null && loginContext.getPassword() != null) { System.out.println("login successful"); loginContext.setSuccess(true); return AmfResponse.to(loginContext);//AMF用レスポンスを返すときはAmfResponseを使う。 } throw new NullPointerException(); } }
重要なポイントは
- @Pageでアノテーション指定した値(ここではlogin)
- AMF通信での呼び出しで呼び出したいメソッドに@Amfってつけること
です。
@AmfはAMF通信から呼び出すことを許可しますよっていうマーカーだと思ってください。
あ、LoginContextってのは単なるPOJOです。Java側とAS側で同じようなオブジェクトがいるだけです。
で、これを呼び出します。まずmxmlの抜粋。
<?xml version="1.0" encoding="utf-8"?> <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300" title="従業員管理ログイン" xmlns:employee="examples.employee.*"> <employee:LoginController id="loginController"/> <mx:RemoteObject id="loginRemote" destination="login" endpoint="t2"/> //Formの記述が、つらつらある。 </mx:Panel>
ここで、RemoteObjectの記述方法に注目です^^
重要なのはdestination部分。ここを@Pageアノテーションの値(ここではlogin)とあわせておきます。
endpoint指定は適当でいいですw ここではt2としておきます。
で、実際によびだしてみます。
var context:LoginContext = new LoginContext(); context.username = view.username.text; context.password = view.password.text; var token:AsyncToken = view.loginRemote.login(context); //リモート呼び出しの結果をごにょごにょ。
これだけ。かんたーーーーん。
設定ファイルも必要ないし、コンパイルオプションも必要なっしんぐです。
ちなみに今までの妄想と同じ枠組みの中でうごいてます。
で、んじゃあ実際何すんねんていう、開発時にやるべきことをまとめると、
- JavaでPOJOクラスを作って、呼び出したいdestinationと同じ値を@Pageの値としてセット!
- そのクラスの呼び出したいメソッドに@Amfってつける
- Flex側でRemoteObjectのdestination属性に@Pageでつけた値と同じのを設定!
はい、これだけ。簡単。らーくちん。
ちなみに副次的な効果として、BlazeDSのcoreとcommonしか使ってないので
依存ライブラリも少ないです。
こんなフレームワーク妄想でした。
次回の妄想はFileUploadにもどる予定です。脱線しなければw