2012-01-23 12 views
1

GWTを初めて使用していて、GWT RPCで対処することができますが、内部で制御フローがどのように行われるかを理解する上で問題があります。どのようにAJAXに変換されるのですか?GWT RPCの基本制御フローの説明

GWT.create(someService.class)の代わりにnew()を使用してRPC呼び出しを行うことはできますか? なぜ2つのインターフェースを作成するのではなく、Async版を使用するのはなぜですか?

我々は

TaskService Async = GWT.create(TaskService.class); 

を使用する場合、内部で何が起こる私はそれがブラウザの特定hashname.jsファイルを選択することを読みましたが、完全な制御の流れを理解していないです。また、どのようにコールバックオブジェクトが使用されます。

要点を指摘することで誰かがコントロールフローを説明できますか?

UPDATE:@Thomas Broyerは、すべてが私は念のためにGWT.create()結合延期(後半/ランタイム)に役立ち、クライアント側の.rpcファイルがあることを確認し...わかります。あれは正しいですか?

答えて

3
  1. GWT.create()この場合、GWTジェネレータを呼び出します。 Asyncインターフェイスを実装するクラスが生成されます(そのため、インターフェイスを宣言するだけで、自分で実装することはできません)。
    RPC Plumbing Diagramを参照してください。
    ジェネレータを使用する(または特定のインプリメンテーションを選択しますが、GWT-RPCの場合はジェネレータが使用されます)、deferred bindingと呼ばれます。

  2. だから、newは使用できません。

  3. なぜ2つのインターフェイスがあるのか​​については、これはGWTがサーバー側のコード(同期)がクライアント側のコード(非同期)と一致していることを確認できるようにするためです。 同期インターフェイスでGWT.createと呼び出した理由は、非同期の実装を残しているためです。 GWT-RPCをゼロから再実装するのは、そうしないと思います。

  4. 生成されたクラスは、呼び出し(メソッド名と引数)をシリアライズし、AJAX要求(RequestBuilderを使用)を行います。応答を逆シリアル化します(宣言された型または例外のいずれかを逆シリアル化します)

  5. コールは非同期であるため、逆シリアル化が行われた後にコールバックが使用されますデコードされたオブジェクトとonSuccessを呼び出すか、デコードされた例外を持つonFailureを呼び出します。
    は明確な答えのためGetting Used to Asynchronous Calls

+0

感謝を参照してください。あなたはただ更新を確認できますか?宜しくお願いします。 – abhihello123

+0

_deferred binding_の "deferred"は、 "コードを書くときではなく、コンパイル時に"という意味です。実行時ではありません。 * .gwt.rpcファイルは、サーバー側(GWTコンパイルとは独立している)のサーバーコード(クライアントがどのようにコンパイルされているか)と通信するため、サーバー側のみ(AFAIK)で使用されます。クラスはGWT-RPCを経由します。 –

+0

クライアント側にあるクラスは、生成されたすべての.cache.htmlファイルに存在します(遅延バインディングを支援します)。それで、なぜ生成された内部クラス(非同期インターフェースを実装する)が遅延バインディングに特別にリンクされているようなのですか? – abhihello123

関連する問題