0

サービスのパラメーターとして必要なクラスをバンドル間で共有できるように、バンドルを編成するための良い方法は何でしょうか。

バンドル間で参照する必要があるクラスタイプを公開するサービスインターフェイスがいくつかあります。例:

public interface DoesThis {
   public CustomClassB doSomething(CustomClassA customClassA);
}

私の理解CustomClassAでは(公開されたサービスと同じバンドルで定義されている場合)、他のバンドルでは利用できないため、パッケージ内のバンドル間のクラス参照を公開してからエクスポートするのが最善でしょうか?

サブ質問と同じように、サービスとパッケージのエクスポートは連携して機能するはずです...これが当てはまるかどうかは、私が読んでいたドキュメントからは明らかではありませんでしたか?

ありがとう

4

1 に答える 1

1

基本的に、はい。インターフェイスによって参照されるすべての型は、エクスポートされたパッケージに含まれている必要があります。いくつかのオプションがあります:

  • OSGiでは常にパッケージ全体をエクスポート/インポートするため、それらはインターフェースと同じパッケージに含まれる可能性があります。
  • それらは別のパッケージに入っている可能性がありますが、サービス インターフェイスと同じバンドルによってエクスポートされます。
  • それらは別のパッケージに含まれ、別のバンドルによってエクスポートされる可能性があります。この場合、サービス インターフェイス バンドルはそのパッケージをインポートする必要があります。

考えてみれば、タイプがエクスポートされないのは意味がありません。たとえば、コンシューマが渡すdoSomething型のオブジェクトを作成できないCustomClassA場合、または戻り値の型を理解できない場合、コンシューマはどのようにメソッドを呼び出すことができCustomClassBますか?

サブ質問に関して...はい、パッケージのエクスポートは主にサービスレジストリをサポートするために存在します。サービスは、プロバイダーとコンシューマーがサービスの「契約」について合意に達することができる場合にのみ機能します。これは、Java 用語で言うと、両者が同じインターフェースをロードすることを意味します。

于 2013-03-17T12:11:16.633 に答える