GlassFish v3のころは、連携が十分じゃなかったんだよね。
具体的には、@ManagedBeanに対して、@Injectが動かなかったの。
でも今は動くようになってる。
比較していくと、普通にWeld(CDI)の場合はこんな感じ。
テキストエディタで書いてるから間違ってたらごめんなさい。
@javax.inject.Named
@javax.enterprise.context.RequestScoped
public class HogeComponent {
// CDIとしてDIされる。
@javax.inject.Inject
PiyoComponent piyo;
}
これでCDI管理の元で、Injectされる。
で、今までMojarra(JSF)で同じことやろうとすると、こんな感じ。
@javax.faces.bean.ManagedBean
@javax.faces.bean.ViewScoped
public class HogeComponent {
// JSFとしてDIされる。
@javax.faces.bean.ManagedProperty
PiyoComponent piyo;
}
@Injectが使えなかったってこと。
ManagedBeanだと、CDI管理下に入らないから、
CDIがInjectするための@Injectが動かなかったんだと思う。
Weldの良いところは、なんでも@Injectで入れちゃうぞ、っていうことだから、
『ManagedBeanの方使わなければいいじゃん。』っていう話でもあったんだけど、
そうすると、ViewScopedが使えなくなるという……。
下のようなのは動かないってこと。
@javax.inject.Named
@javax.faces.bean.ViewScoped
public class HogeComponent {
// GlassFish v3では動かない。
@javax.inject.Inject
PiyoComponent piyo;
}
このために、Weldで動くViewScopedを自作するというのをやってたんだけど、
GlassFish v3.1に載ってるWeldさんならそんな必要もなくなったみたい。
結局、下のでCDI管理下に入るようになったのかな。
@javax.faces.bean.ManagedBean
@javax.faces.bean.ViewScoped
public class HogeComponent {
// GlassFish v3.1では動く。
@javax.inject.Inject
PiyoComponent piyo;
}
これで、Injectがちゃんとされる。JSF全体がCDI管理下に入った感じかな。
もうオリジナルなViewScopedはいらないね('-^*/