2013-02-25 65 views
0

我有一種感覺,我混合了EJB和JSF託管bean的職責,但我想要的是一個計劃任務EJB(@Singleton@Schedule),可以訪問我的JSF應用程序作用域bean 。有權訪問JSF託管豆的EJB計劃任務

具體來說,我有一個JSF @ApplicationScoped bean,它根據開發,測試或生產中是否發送不同的電子郵件。我想安排這個每24小時發送一次電子郵件。什麼是實現這一目標的最佳方式?

+1

EJB需要'@ ApplicationScoped' bean的用途是什麼? EJB本身應該能夠生成和發送電子郵件。 EJB層中是否有一些信息需要執行它的功能?試圖建立從EJB到託管bean的依賴關係是一個嚴重的設計缺陷。依賴性應該從Web層到業務(EJB)層 – kolossus 2013-02-25 21:29:54

+0

EJB需要知道web.xml中的javax.faces.PROJECT_STAGE變量以確定DEV,TEST或PROD。目前來自應用程序bean。涉及EJB的主要原因是'@ Schedule'表示法的簡單性。 – Strumbles 2013-02-25 21:53:43

+1

將這兩層綁定在一起的要求太過簡單,就像IMO那樣。將配置外部化爲兩個組件均可訪問的屬性文件。 – kolossus 2013-02-25 22:20:07

回答

3

將業務層(EJB)設置爲依賴於表示層的設計很糟糕。相反(Web層取決於業務層)是經過時間考驗的最佳實踐。

EJB層將向Web層提供服務。您的用例試圖使Web層爲EJB層提供服務。而國際海事組織的需求太小,無法做出這樣的妥協。 我建議您將應用程序中安全位置的.properties文件中所需的配置文件外部化,這兩個層級都有權訪問該配置文件。