【问题标题】:By using ejb 3 , jsf and jboss is it possible to call an EJB method from web module?通过使用 ejb 3 、 jsf 和 jboss 是否可以从 Web 模块调用 EJB 方法?
【发布时间】:2010-05-03 14:30:46
【问题描述】:

即使我的 Java EE 应用程序中有不同的模块,包括 myproject-web 和 myproject-ejb;是否可以从 web 模块中的托管 bean 调用(或注入)我在 ejb 模块中的 ejb 会话 bean? 当我之前询问时,我看到以下声明:

@EJB private BeanInterface yourbean

但是,我想知道是否有可能在不同的上下文之间相互调用(其中一个在 ejb 上下文中,另一个 -managed bean- 在 web 上下文中)?

任何帮助将不胜感激。

【问题讨论】:

    标签: jsf ejb-3.0 session-bean


    【解决方案1】:

    您可以在@ManagedBean 类中注入@EJB,但反之则不行。如果您想在 EJB 类中执行所需的业务逻辑,那么您必须自己将托管 bean 实例作为方法参数传递。

    @Stateless
    public class EJB {
        public void process(ManagedBean bean) {
            // Business logic.
        }
    }
    
    @ManagedBean
    public class ManagedBean {
        @EJB private EJB ejb;
    
        public void submit() {
            ejb.process(this);
        }
    }
    

    【讨论】:

    • +1,但我会谨慎地将整个托管 bean 传递给 EJB。您可以有效地传递代理,这在 EJB 上下文中可能无关紧要。 + 这很可能违反了“得墨忒耳法则”
    • 首先,非常感谢您的回复。那么,您的意思是我不必进行 jndi 查找即可从 Web 模块中找到位于 ejb 上下文中的 ejb 会话?我知道如果 ejb 和托管 bean 在同一个上下文中,同一个模块(如 myProject-ejb),则可以使用@EJB anno 进行注入。但是,我不知道是否可以从不同的上下文中注入...您对此有任何想法吗?非常感谢,巴里斯
    【解决方案2】:

    如果你真的想要这个,我想你可以尝试编写自己的属性解析器并自己注入(我没有尝试过)。

    【讨论】:

      【解决方案3】:

      我发现现在不编写自己的解析器是不可能的。谢谢

      【讨论】:

      • Bariscan,您能描述一下您的解决方案吗?
      • 我还没有找到解决方案,抱歉。
      猜你喜欢
      • 1970-01-01
      • 2012-08-23
      • 2013-05-09
      • 1970-01-01
      • 2017-06-02
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多