0

インターフェースMyInterfraceがあります。

システムにはいくつかの EAR があり、それぞれがそのインターフェイスの独自の実装を持っています。名前のないすべての実装を見つける必要があります ( ? extends MyInterface )。

私はjava.util.ServiceLoaderを使用することに決め、その中に META-INF/services/com.example.MyInterface を含む jar を作成しました。この jar はどの EAR でもデプロイできます。

jar には、int の init メソッド内にサーブレットと次のコードがあります。

ServiceLoader<MyInterface > loader = ServiceLoader.load(MyInterface .class);
Iterator<MyInterface > it = loader.iterator();

しかし、イテレータはまだ空です..

services/com.example.MyInterface を EARs META-INF に追加しようとしましたが、結果は同じです。

このアプローチは、jboss 6 と tomcat でうまく機能します。

4

1 に答える 1

3

When i had the same problem, it was solved by trying lazyloading

private static class LoaderHolder {
   ServiceLoader<MyInterface > loader = ServiceLoader.load(MyInterface .class);
  }

Iterator<MyInterface > it = LoaderHolder .loader.iterator();
于 2012-11-07T13:54:55.263 に答える