【问题标题】:EJB3. How JNDI lookup worksEJB3。 JNDI 查找的工作原理
【发布时间】:2011-12-23 12:48:07
【问题描述】:

我正在为使用 EJB 3 进行数据处理构建小框架。
我有从数据源抽象出来的实体访问对象层。现在我需要某种工厂,它可以为我提供正确的 bean 来查询实体。

通过 JNDI 本地 bean 接口将查找作为参数传递给另一个本地 bean 是否安全?来自这个本地接口的每个方法调用会被寻址到同一个 bean,还是每个调用都将传递给不同的无状态 bean,就像在 @EJB 场合一样?

【问题讨论】:

    标签: ejb-3.0 jndi stateless-session-bean


    【解决方案1】:

    您无法保证使用 JNDI 会为您提供相同的 EJB 实例,因此它与使用 @EJB@Inject 的依赖注入相同。 @EJB 和 JNDI 查找之间的唯一区别是 SFSB。在这种情况下,每次您使用 JNDI 查找时,容器都需要为您提供新的 SFSB 实例。

    但是,在我看来,在 EJB 3.x 和依赖注入时代,@EJB/@Inject 注解更容易理解。无需传递任何对象引用,只需使用 @EJB 在每个 EJB 中定义您的依赖项(EJB 协作者)。

    【讨论】:

    • 是的。 DI 非常有用,但我不知道如何用它实现运行时服务外观。有什么办法吗?
    • 那么,您正在使用运行时提供的值(即方法参数)来访问给定的 EJB?
    • 是的。我有两个具有相同接口的不同无状态 bean。并且根据用户操作,我需要选择其中之一来处理请求。
    • 在这种情况下,你会怎么看这个:stackoverflow.com/questions/7920123/… 或这个:stackoverflow.com/questions/7927681/…
    • 看起来很酷。但是,如果我要将每个呼叫路由到不同的 bean,这样做是否正确?豆子不止两个。我有一层存储不同实体的对象。其中一些很复杂,不能仅使用 jpa 获取。此类实体通过特殊实现的 EAO 获取,其他实体仅使用 JPA 进行描述,并且要访问所有这些实体,我可以使用一个 bean。现在我要把这种撕裂与业务逻辑分离。我需要类似服务定位器或注册表之类的东西来将类与操作它的 EAO 相关联。
    猜你喜欢
    • 2011-08-08
    • 2011-11-26
    • 2018-04-04
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多