我有一個JSF2項目(GlassJish 3.1上的Mojarra)。是否執行此JSF模式中斷依賴注入?
我有一個ViewScoped豆,通過一個工具類,像這樣引用服務:
@ManagedBean
@ApplicationScoped
public static class ServicesUtil {
@EJB
UserService userService;
@EJB
EmailService emailService;
/** getters/setters **/
}
和
@ManagedBean
@ViewScoped
public class UserHandler {
public String method() {
ServicesUtil.getUserService().doUserStuff();
return "newPage";
}
}
我的問題是,因爲ServicesUtil是ApplicationScoped,意思是隻存在整個應用程序的每個服務的一個實例?這是不好的做法?如果正確完成,GlassFish中的CDI是否會根據需要創建新實例?
同樣,如果服務被注入UserHandler,而不是應用程序可擴展性更高?
我們添加ServicesUtil圖層的原因是我的一位同事說,他在ViewScope時偶爾會遇到注入在Handler中工作的問題。在ViewScoped bean中使用@EJB是否有困難?
任何幫助,非常感謝!
Rob
嗨,你能否詳細說明這個問題:「@ViewScoped不能與CDI bean結合使用」 - 我不明白你的意思。我目前使用javax.faces.bean.ManagedBean和javax.ejb.EJB註釋。再次感謝! –
他意味着當您使用'javax.annotation.ManagedBean'(或'javax.inject.Named')時它將不起作用。 – BalusC
目前看着相同的模式。注入viewscoped bean會保持ejb ref,並且如果服務器死亡並且會話故障轉移到新的jvm(如果HA不重要,則不會出現問題)會出錯。上面的模式是注入和服務定位模式之間的一個很好的中間模式,即使用'@ EJB'來注入應用程序,然後使用request/viewscoped bean中的這些模式。 – andyfinch