必要に応じて、少なくとも 2 つの主要なソリューションがある場合があります。
- ファーム全体にインストールされた単一のリスナーを使用し (Extension Manager を使用してファーム全体にインストールするか、「lib」フォルダーに jar をダンプするだけで)、現在の wikiID をキーとしてモデルのキャッシュを保持します。そうすれば、イベントをインターセプトするときに、リスナーは現在の wiki ID を (コンテキストまたは影響を受けるドキュメントの参照から) 取得し、それを使用してメモリ内モデルを検索するため、イベントごとにモデルを初期化する必要がなくなります。 . キャッシュは、単純なマップから、XWiki のキャッシュ モジュールを使用するなど、より構成可能でスケーラブルなソリューションまで、何でもかまいません。
- Wiki コンポーネント マネージャーを使用して、各 Wiki に 1 つずつ、リスナーの N インスタンスを実際に登録します。それを行うには、次のことができます。
- Extension Manager UI を展開して使用し、個々の wiki にコンポーネントをインストールします (ファーム全体ではなく、注意してください!)。コンポーネントを、サブウィキにインストールする UI/フレーバーの依存関係にすることで、これを簡素化できます。これにより、サブウィキの UI をインストールすると、サブウィキに自動的にインストールされます。このように、コンポーネントのコードは現在の wiki (インストールされているもの) のみを考慮し、現在の wiki のモデルのキャッシュのみを考慮します。
- または、プログラムによる方法では、既存の各ウィキを繰り返し処理し、それぞれについて、現在繰り返し処理されているウィキにコンテキスト ウィキを設定し、「ウィキ」ComponentManager を動的に取得します (「コンポーネント モジュール」のドキュメントで「名前空間コンポーネント マネージャー」を参照してください)。 )、リスナーの新しいインスタンスを作成し、それをその wiki コンポーネント マネージャーに登録します。このコードは、XWiki インスタンスの開始時に 1 回実行されます。ただし、これらのコンポーネント インスタンスの同期を維持する必要があり、新しい wiki が作成されるたびに、新しいリスナー インスタンスも登録する必要があります。このプロセスを簡素化する宣言型の方法 ATM はありません。
方法 2.2 は、たとえ可能であったとしても、不必要に複雑になるため、あまりお勧めしません。
方法 2.1 は最も簡単に記述できますが、展開するには少し作業が必要です (つまり、構成済みの Maven リポジトリまたは XWiki リポジトリ (「XWiki リポジトリ アプリケーション」も参照) でアーティファクトを使用できるようにする必要があります)。管理者がインストールできます)。
方法 1 は、実装も展開も簡単なので、ユースケースに適している場合はお勧めします。
編集:コメントに記載されているように、オプション 2 は現在サポートされていません。詳細については、 XCOMMONS-213を参照してください。