RequestBuilde
現在、 を使用してサーブレットにメッセージを送信するGWT アプリケーションがあり(POST
およびを使用GET
)、サーブレット (doPost
および内doGet
) はリクエストを「一時停止」し (これはサーブレット 3.0 仕様を使用して行われます)、キューに追加します。 .
さらに、バックグラウンドで実行され、新しいデータがあるときにリクエストを「再生」するデーモンスレッドがあります。
これは、今のところ文字列を送信しているだけで、RPC メカニズムを利用してオブジェクトを送信したいという事実を除けば、私にとってはうまく機能します。
私の質問は次のとおりです。拡張するクラス
を作成した場合、どのように処理する必要がありますか?myServiceImpl
RemoteServiceServlet
doPost
doGet
非同期サポートを利用するためにリクエストを一時停止する必要があります。これはどこで行う必要がありますか? this.getThreadLocalRequest()
クラスの RPC メソッドでメソッドを呼び出すことmyServiceImpl
もできますが、それがどれほど賢明かはわかりません。
GWT がその非同期インターフェイスのクライアント側からの呼び出しをどのように処理するかを理解しているかどうかさえわかりません。サーブレットの例を呼び出しdoGet
て、必要な RPC メソッドを呼び出すことを確認しますか?
この RPC ビジネスが正確にどのように機能するかについて、より詳細な技術情報を見つけることができないというだけです。
どんな貸し手
でも感謝します
2 に答える
RPCを理解するには、POSTとGETを忘れて、動作が異なります(つまり、プログラミングの観点からです。内部的にはRPCを使用しますが、エキゾチックなことをしたい場合を除いて、表示したり理解したりする必要はありません)。RPCの出発点としては、GWTドキュメントが適しています:http ://code.google.com/webtoolkit/tutorials/1.6/RPC.html
あなたに要約を与えるために。RPCを使用する場合、サーブレットは、を拡張するだけでなく、myServiceImpl
という名前のインターフェイスのメソッドを実装する必要があります。メソッドは、サーバーに送信するデータを引数として取得します。myService
RemoveServiceServlet
インターフェイスの横にmyService
インターフェイスを作成する必要がありmyServiceAsync
ます(両方のインターフェイスがクライアントサブパッケージに含まれている必要があります)。このインターフェイスには、各メソッドが戻り、追加の最後の引数があることを除いmyServiceAsync
て、インターフェイスと同じメソッドが含まれている必要があります。myService
void
AsyncCallback callback
クライアントでは、GWTをインストルメント化してGWT.createを介してRPCを生成する必要があります(詳細については、ドキュメントを参照してください)。
RPCを使用するには、クライアントコードのインターフェイスでメソッドを呼び出すとmyServiceAsync
、GWTがRPCをサーブレットに送信します。次に、サーブレットは、クライアントに渡した引数を使用してマッチングメソッドを呼び出します。これは非同期で行われます。したがって、クライアントは呼び出しから直接戻ります。
サーバーが結果を送り返すとき、渡したコールバックmyServiceAsync
が使用されるかOnError
、またはOnSuccess
呼び出されます。OnError
サーバー側のメソッドがエラーをスローした場合、それ以外の場合OnSuccess
。はOnSuccess
、サーブレットによって実装されたメソッドで返されたものからの戻り値を引数として持ちます。
当時私が持っていた主な誤解は、GWT RPC が (内部的に) サーブレット メカニズム上に構築されているという事実に関連していたと思います。したがって、GWT RPC はサーブレット上に構築されていたため、非同期サーブレットでそのメカニズムを使用しようとすることは当時不可能でした。 2.5(これも当時)。