2016-10-04 4 views
1

インタフェースを定義しました。インタフェースとしてのEJBが注入されていません

@Local 
public interface MessageService { 
} 

と実装。私は私のリソースクラスに注入しようとしたとき

@Stateless 
public class MessageServiceSome implements MessageService { 
} 

は、私がnullを得ました。

//@Path("/messages") // I'M NOT GOING TO MAKE THIS STATELESS!!! 
public class MessagesResource { 

    // none of follwoing options works 
    // leaves the field null 
    @Inject 
    //@EJB 
    //@EJB(beanName = "MessageServiceSome") 
    private MessageService messageService; 
} 

どうすればこの問題を解決できますか?

UPDATE

私は私の質問には十分ではないことを認めざるを得ないと思います。

MessagesResourceクラスは実際にはサブリソースでした。私はその違いを知らなかった。

この問題には2つの非常に良いスレッドがあります。

  1. https://stackoverflow.com/a/36291890/330457
  2. https://stackoverflow.com/a/24670218/330457

ResourceContextを使用して、他方はInjectを使用しています。

どちらのスレッドも機能していると言っていますが、私は@Injectでしか成功しませんでした。提供情報はほとんどして

答えて

2

、あなたはおそらく2つの迅速なオプションを持っている、あなたは試すことができます:プロジェクト/コンテナがある場合

  1. 休暇は@Injectのみ、CDIは

    @Inject プライベートMessageService messageServiceを有効に。

  2. @EJBのみを残して、本当にbeanNameが必要ですか?

    @EJB private MessageService messageService;

の2つの問題を解決する必要があります。

[UPDATE] それ以外の場合は、アプリケーションサーバーの起動ログを見て、そのBeanがデプロイされているかどうかを確認してください。

関連する問題