環境

  • JDK 1.8.0 u31 (x64)
  • NetBeans IDE 8.0.2
  • Arquillian core 1.1.7.Final
  • Arquillian Glassfish container 1.0.0.CR4

ソース

こんな風にConversationScopedをつけたクラスを用意しました。

MyBean.java

@ConversationScoped
public class MyBean implements Serializable {
  // (略)
}

上記クラスをテストするためのクラスを用意しました。

MyBeanTest.java

@RunWith(Arqullian.class)
public class MyBeanTest {
    @Deployment
    public static Archive<?> createDeployment() {
        return ShrinkWrap.create(WebArchive.class).addClass(MyBean.class);
    }

    @Inject
    private MyBean myBean;
    // (略)
}

結果

テストを実行すると、MyBeanをインジェクトできなくて失敗します。


Caused by: org.jboss.weld.exceptions.IllegalArgumentException: WELD-001408: Unsatisfied dependencies for type MyBean with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private MyBeanTest.instance
  at MyBeanTest.instance(MyBeanTest.java:0)

考察

こんなコードを付け加えてBeanManagerに取り扱ってもらえているかどうか確認すると、MyBeanは入っていません。


BeanManager bm = CDI.current().getBeanManager();
Set<Bean<?>> beans = bm.getBeans(Object.class, new AnnotationLiteral<Any>(){});
for (Bean<?> bean:beans) {
    System.out.println(bean.getBeanClass().getName());
}

ConversationScopedではなく、ApplicationScopedやRequestScopedなどではちゃんとインジェクトできます。

何か追加で書かないといけないコードがあるのかもしれません。