2011年07月18日

WeldからJSFのViewScopedが使えるようになったみたい

Weld(CDI)とMojarra(JSF)の連携がGlassFish v3.1あたりで強化されているみたいなので確認してみたよ。



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はいらないね('-^*/


タグ:Weld CDI ViewScoped
posted by すふぃあ at 10:36| Comment(2) | TrackBack(0) | 雁字