1

GWTをOSGi(Equinox)と統合して、残りのモジュラーシステムにWebベースのUIを提供しようとしています。これまでのところ、GWTサーブレットをOSGiモジュールに埋め込むことができました。

クライアント、サーバー、共有の3つのパッケージで構成されるEclipseGWTプラグインによって生成されたGWTサンプルコードプロジェクトを使用しています。サーバーパッケージ()のクラスはui.server.GreetingServiceImpl、クライアントパッケージ()のインターフェイスを実装し、ui.client.GreetingServiceそれらはすべて同じバン​​ドルに含まれています。

クライアント側のWebページからリモートプロシージャコールを実行しようとすると、次のエラーが発生します。

IncompatibleRemoteServiceException: Could not locate requested interface 'ui.client.GreetingService' in default classloader

クラスローダーによってクラスが見つからなかったことがわかりましたが、これを修正する方法がわかりません。他のバンドルのクラスにアクセスするには、それらを要求またはインポートする必要がありますが、実装クラスと同じバンドルにあるインターフェイスにはアクセスできません。誰かが私を正しい方向に向けることができますか?私は何時間もグーグルしてきました。

4

2 に答える 2

2

GreetingServiceImpl の HttpServlet からメソッド「service」をオーバーライドする必要があります。

@Override 
protected void service(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException { 
    // Cache the current thread 
    Thread currentThread = Thread.currentThread(); 
    // We are going to swap the class loader 
    ClassLoader oldContextClassLoader = 
    currentThread.getContextClassLoader(); 
    currentThread.setContextClassLoader(this.getClass().getClassLoader()); 
    super.service(req, resp); 
    currentThread.setContextClassLoader(oldContextClassLoader); 
} 

したがって、アプリケーションは Equinox で実行されます!!

于 2011-05-26T10:52:54.537 に答える
0

IncompatibleRemoteServiceException は、GUI からの RPC 呼び出しで、@RemoteService アノテーションによって指定されたインターフェイスが見つからなかったことを意味します。

プロジェクトをソース コードとともに投稿できますか?

ところで、このプロジェクトを見ることもできます: http://code.google.com/p/gwt-in-osgi/

于 2011-05-16T06:31:37.400 に答える