2011-05-15 21 views
0

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

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

私はクライアント側のWebページからのリモートプロシージャコールを作成しようとすると、私はエラーを取得する:

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

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

答えて

0

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

あなたのプロジェクトをソースコードで投稿できますか?

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

+0

返信いただきありがとうございます。私はそれを動かすことができた、私は気づいていなかった循環的な依存関係があったことが分かりました。インターフェイスはバンドルの外側から、GWTの包み込まれたバンドルを含むバンドルによってアクセスされていました。私は 'Eclipse-RegisterBuddy:GWT-bundle'行を私のUiバンドルのマニフェストファイルに追加し、GWTバンドルのマニフェストへの' Eclipse-BuddyPolicy:registered'行を追加することで修正しました。あなたがリンクしたプロジェクトを見ていきます。 – clangenhoven

2

メソッドをオーバーライドするために必要とされる「サービス」のHttpServletからあなたGreetingServiceImpl上:

@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); 
} 

をこのように、アプリケーションは春分上で実行されます!!

関連する問題