【问题标题】:EJB Schedule task with access to JSF Managed Beans可访问 JSF 托管 Bean 的 EJB 调度任务
【发布时间】:2013-02-25 21:00:23
【问题描述】:

我感觉我正在混合 EJB 和 JSF 托管 bean 职责,但我想要的是可以访问我的 JSF 应用程序范围 bean 的计划任务 EJB(@Singleton@Schedule)。

具体来说,我有一个 JSF @ApplicationScoped bean,它根据它是在开发、测试还是生产中发送不同的电子邮件。我想安排它每 24 小时发送一次电子邮件。完成此任务的最佳方法是什么?

【问题讨论】:

  • EJB 需要@ApplicationScoped bean 来做什么? EJB 本身应该能够生成和发送电子邮件。 Web 层中是否有一些 EJB 需要执行其功能的信息?试图建立从 EJB 到托管 bean 的依赖关系是一个严重的设计缺陷。依赖关系应该是从 Web 层到业务(EJB)层
  • EJB 需要知道 web.xml 中的 javax.faces.PROJECT_STAGE 变量以确定 DEV、TEST 或 PROD。这当前来自应用程序 bean。我使用 EJB 的主要原因是 @Schedule 表示法的简单性。
  • 像IMO那样将两层绑定在一起的要求太微不足道了。将配置外部化为两个组件都可以访问的属性文件。
  • 这是个好主意,我想我会将它外部化到 JNDI 查找中,这样我就不必为不同的环境处理多个属性文件。谢谢!
  • @kolossus 不要浪费代表,发布答案

标签: jsf jsf-2 ejb


【解决方案1】:

将业务层 (EJB) 设置为依赖于表示层是糟糕的设计。反过来(Web 层取决于业务层)是经过时间考验的最佳实践。

EJB 层是为 Web 层提供服务。您的用例试图使 Web 层为 EJB 层提供服务。而需要,IMO 太微不足道了,无法做出这样的妥协。 相反,我建议您将所需配置外部化为 .properties 文件,该文件位于应用程序中两个层都可以访问的安全位置。

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2012-03-24
    • 2012-08-27
    • 2014-03-19
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多