1

少なくとも2つのバージョンの機能を同時にサポートする必要があります。Web側またはサービスに配置できます。つまり、Webのユーザーごとにレイアウトが異なるか、ユーザーごとにサービスの実装が異なります。ログインに基づいて、適切なバージョンのWebアプリケーション/バンドルにユーザーをルーティングできるはずです。

私たちはこのようなことを考えました(ここでより大きな画像を参照してくださいhttp://i.stack.imgur.com/6NxhF.png)。

ここに画像の説明を入力してください

また、複数のWebアプリケーション/バンドルを1つのEBAとしてデプロイすることは可能ですか?はいの場合、これらのWebアプリ/バンドル間でセッションを共有することは可能ですか?私たちはOSGiを初めて使用するので、選択したデザインに関する提案を楽しみにしています。これに関するヘルプ/提案に感謝します。

ありがとう、

バブ。

4

2 に答える 2

2

OSGiはあなたにぴったりかもしれません。私の前回のプロジェクトでは、あなたのアプローチと同等のものがありました。OSGiを使用してバックエンドシステムを開発しました。このシステムでは、バックエンドの機能を使用したい他のさまざまなバンドルの開始点としてバックエンドコネクタがありました。あなたの場合、バックエンドは共有バンドルコンテキストです。次に、SOAP Webサービス、いくつかのサーブレット、およびバックエンドコネクタに要求を送信するWebページ(OSGiベースである必要があります)がありました。もちろん、マネージャーのような内部バンドルに直接リクエストを送信することもできますが、階層化アーキテクチャを提案します。共有セッションの場合:問題は、どのコンポーネントがセッションの処理を担当するかということです。環境にWebアプリケーションだけでなく、データベースまたはインメモリアプローチを介してセッションを管理することもできます。「SessionManager」共有コンテキストのバンドルは、ユーザーセッション(識別用のsessionid)の作成、sessionidと一時データの関連付け、sessionidのデータの取得、およびsessionidの一時データの削除を担当します。このアプローチでは、各クライアントリクエストはセッションIDを送信する必要があります。これは、共有コンテキストのどこかで検証されます。その後、Webセッションは必要ありません。作成されたセッションIDは、通信の要求/応答の特定のHTTPヘッダーエントリに保存できます。しかし、それは1つのアプローチにすぎません。その後、Webセッションは必要ありません。作成されたセッションIDは、通信の要求/応答の特定のHTTPヘッダーエントリに保存できます。しかし、それは1つのアプローチにすぎません。その後、Webセッションは必要ありません。作成されたセッションIDは、通信の要求/応答の特定のHTTPヘッダーエントリに保存できます。しかし、それは1つのアプローチにすぎません。

うまくいけば、上記のすべてがあなたに意味をなすでしょう。そうでない場合は私にメールを送ってください、そして私たちはそれをより深く議論することができます。:)時々、写真はたくさんの文章としてもっと言います、そしてあなたが望むなら私はいくつかを描くことができます。;)

ご挨拶。キリスト教徒

于 2012-06-04T20:04:36.663 に答える
1

はい、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サービスレジストリでそれらを検索し、作業を分散できます。それはすべて、より多くのアプリケーションロジック/計算などを期待するかどうか、またはいくつかの既存のデータのフォーマットと表現に関するものかどうかによって異なります。

お役に立てれば。

于 2012-06-05T08:43:53.030 に答える