2012-02-25 10 views
0

私はいくつかのGWTモジュールとWebアプリケーションをJettyで実行しています。彼らはそれぞれLoginService RPCインターフェイスを使いたいので、私はこのインターフェイスとサーブレットの実装を共通のモジュールに入れます。私は自分のルートWebコンテキストからサーブレット(LoginServiceImpl)を提供し、web.xmlはurl "/ loginService"に公開します。別のGWTモジュールでは、このサービスを使用するために、私は今 複数のクライアントモジュール/アプリケーション間でGWT RPC RemoteServiceServletを共有する方法

LoginServiceAsync loginService = GWT.create(LoginService.class); 
ServiceDefTarget t = (ServiceDefTarget)loginService; 
t.setServiceEntryPoint("/loginService"); 

は、loginServiceを使用しようとしているモジュールは 議論と呼ばれている...このように、エントリポイントを設定しなければならなかった、と私はこれを取得しますサーバー上でエラーが発生しました。

ERROR: The serialization policy file 
'/discussions/discussions/7B344C69AD493C1EC707EC98FE148AA0.gwt.rpc' was not found; 
did you forget to include it in this deployment? 

サーブレットは、クライアント(ディスカッションモジュール)を記述するエラーを報告しています。私はRPC配管がクライアントからこの.rpcファイルの名前を渡したことを推測しています。サーブレットは現在それを探しています。 (?)実験として、* .gwt.rpcファイルをディスカッションモジュールからルートWebコンテキストにコピーしてサーブレットがそれらを見つけることができました。これはエラーを停止しました。しかし、私はまだ別のエラーが発生します:

com.google.gwt.user.client.rpc.SerializationException: Type  
'mystuff.web.shared.User' was not assignable to 
'com.google.gwt.user.client.rpc.IsSerializable' and did not have a custom field 
serializer. For security purposes, this type will not be serialized.: ... 

このクラスはシリアル化可能です。以前は他のモジュールで動作していたので、今は失われています。

複数のクライアントモジュールからLoginServiceを使用する正しい方法は何ですか?

更新:

このエラーは、ホストされたDEVMODEにまで見せていた、そしてそれは、完全なコンパイル後に去っていきました。たぶんこれはgwt serialization policy hosted mode out of syncに関連しています。問題をよりうまく再現できたら、私はもう一度更新します。

答えて

0

私の答えはhereです。簡単な答えはmystuff.web.shared.Userのソースをコンパイル時にdiscussionsモジュールに利用可能にする必要があります。

+0

これはそれだとは思わない。 'User'クラスは既に' LoginService'クラスと同じパッケージに入っています。これは、そのサービスが呼び出されているため、確実に取得されています。また、このエラーはクライアント側ではなくサーバー側で発生しています。 –

+0

あなたはランタイムについて話しているようですが、ソースはコンパイル時に利用可能ですか?つまり、そのパスを "discussion" gwt.xmlファイルにソースパスとしてリストする必要があり、ディスカッションモジュールを構築するために使用しているメカニズムを使用して利用可能にする必要があります。 – Jason482

+0

短い答えは「はい」です。コンパイル時に利用可能です。私はdevmodeで動いているので少し違いますが、共通モジュールは 'inherits'要素としてDiscussions.gwt.xmlにあります。そして、Common.gwt.xmlはソースパスとして正しいパスを持っています。次に、この同じソースパスが通常の 'ant devmode'ターゲットのクラスパスに追加されます。これは数週間働いています。私はサービスのサーバー側の実装を変更しました。 –

関連する問題