web-dev-qa-db-ja.com

修飾子@Defaultを使用したタイプXの満たされていない依存関係

Wildfly 8.2内で実行されているEJBに特定のタイプ(Greeter)のオブジェクトを注入しようとしています。ただし、デプロイメントは常に次のメッセージで失敗します

Unsatisfied dependencies for type Greeter with qualifiers @Default

GreeterImplとインジェクションポイントの両方に@Defaultの注釈を付けようとしましたが、うまくいきませんでした。ここに何かが足りませんか?

私のGreeterインターフェイス:

public interface Greeter {
    public void sayHi();
}

私のGreeterImplクラス(Greeterを実装する唯一のクラス):

public class GreeterImpl implements Greeter {
    private static final Logger LOGGER = LoggerFactory.getLogger(GreeterImpl.class);

    @Override
    public void sayHi() {
        LOGGER.info("Hi!");
    }
}

私のScheduledGreeter EJB:

@Stateless
public class ScheduledGreeter {
    @Inject
    private Greeter greeter;

    @Schedule(second = "*/15", minute = "*", hour = "*")
    public void sayHi() {
        greeter.sayHi();
    }
}

ここでCDIについて何かが欠けていますか?これが機能するには、beans.xmlMETA-INFが必要ですか?

編集:それがwarとしてWildflyにデプロイされている、それが重要な場合

13
Martin

Java EE 7)では、JAR/WARのデフォルトのスキャンはannotatedです。つまり、スキャンモードを指定するbeans.xmlがない場合は、デフォルトで注釈ベースのスキャンになります。

クラスGreeterImplには、注釈を定義するBeanがありません-特にスコープはありません。これをオーバーライドするには、beans.xmlを追加するか、@Dependent(または他のスコープ)をGreeterImplに追加します。

28
John Ament