はい、OSGiはこれで大いに役立ちます。
選択したアーキテクチャは問題ないようです。Christianが提案したように、おそらく「SessionManager」も追加することをお勧めします。
これに必要なOSGiの詳細については、次のとおりです。
同じJavaパッケージにパッケージ化されている「サービス」バンドルの2つの異なるバージョンがある場合は、マニフェストでそれらをエクスポートするときに、パッケージバージョンを明確に定義する必要があります。
サービスV1:
Export-Package: com.acme.foo;version="1.24"
およびServicesV2
Export-Package: com.acme.foo;version="2.3"
次に、制限を定義することにより、Webバンドルにインポートされるパッケージを制御できます。たとえば、間隔全体で次のようになります。
Import-Package: com.acme.foo;version="[1.23, 2)"
これの利点は、OSGiのモジュール性とバンドルの個別のクラスローダーにより、com.acme.fooの両方のバージョンを同じシステムにインストールして使用できることです。クラスローダーは1つしかなく、パッケージの1つのバージョンが他のバージョンをシャドウイングするため、「通常の」Javaセットアップではこれを実現できません。
たとえば、OSGiのデモと例をここで見ることができます
これはパッケージとライブラリについてでした。次に、実際のサービスオブジェクトについて説明します。
同じサービスの2つのバージョンをOSGiServiceRegistryで公開することもできます。2つを区別する最も簡単な方法は、サービスを登録するときにサービスプロパティを使用することです。
Hashtable properties = new Hashtable();
properties.put( "service_flavour",
"advanced" );
context.registerService(
SomeService.class.getName(),
this, properties );
次に、小道具を使用して、Webバンドル内の正しいサービスを検索できます。
ServiceTracker someServiceTracker = new ServiceTracker(bc, "(&(objectclass="+SomeService.class.getName()+")(service_flavour=advanced))", null);
someServiceTracker.open();
EBAについてのあなたの質問について-私はあなたが何を意味するのかわかりません。任意のOSGiフレームワークに必要な数のバンドルをインストールでき、それらはすべてOSGiHTTPサービスの異なるエイリアスで登録できます。エイリアスが互いに競合しない限り、問題はありません。必要に応じて、1つのメインサーブレットを作成し、それらをサーブレットとして登録せずに、別のページの処理を他のバンドルに分散することもできます。たとえば、メインのWebサーブレットは、OSGiサービスレジストリでそれらを検索し、作業を分散できます。それはすべて、より多くのアプリケーションロジック/計算などを期待するかどうか、またはいくつかの既存のデータのフォーマットと表現に関するものかどうかによって異なります。
お役に立てれば。