【问题标题】:Why to use @LocalBean and an interface at the same time on an EJB class?为什么要在 EJB 类上同时使用 @LocalBean 和接口?
【发布时间】:2019-07-29 05:36:48
【问题描述】:

据我所知,当不想为 EJB 定义任何接口时,可以使用 EJB 上的 @Localbean。然后我看到很多网站,包括 IBM1,都显示这样的内容:

@Stateless
 @Local(LocalA.class)
 @Remote(RemoteA.class)
 @LocalBean
 public class MeineEJB {
     public void localA() {}
     public void remoteA() {}}

如果是无接口EJB,那么@Local(LocalA.class) 在这段代码中的用途是什么? (我假设它是一个接口。) 而且,我不能同时理解@LocaBean 和@Remote。 @LocalBean 说它是一个本地 bean,但我们也将它定义为远程。那为什么注释标题首先是@LocalBean?

感谢大家阅读。

【问题讨论】:

  • stackoverflow.com/questions/10889563/… 很好地涵盖了这一点。是的,同时拥有本地、远程和 localbean 似乎有点毫无意义。将 remote 和 localbean 结合起来可能是有意义的。
  • 感谢您@ewramner 的回复。在问这个问题之前我已经看到了那个链接,它没有回答我的问题。如果您能查看我发送的 IBM 链接或此链接中页面的末尾,我将不胜感激。看起来他们也定义了一个接口。 javacodegeeks.com/2013/03/…
  • 您的两个链接都是示例,它们展示了 EJB 3.1 的可能性,而不是最佳实践。这些示例必须有效,但不必有意义。同一个 bean 使用本地无接口视图、使用 LocalA 的本地接口视图和使用 RemotA 的远程接口视图公开。有可能的。这很常见吗?应该没有吧,我没见过。暴露本地和远程是常见的,但不是全部三个。
  • 谢谢@ewramner。现在这些例子对我来说很有意义。

标签: java jakarta-ee ejb


【解决方案1】:

您只是对为什么 @Local 和 @LocalBean 在同一个 MeinjeEJB 类上进行注释感到困惑。并没有具体说明它们的区别。

无接口 (@LocalBean) 只不过是本地视图的一种变体,它在本地公开 bean 类的所有公共业务方法独立的业务接口。

在 EJB 中,可以将接口公开为本地(即客户端运行在同一个 JVM 中 - Servlet、JSF、另一个 EJB)接口、远程(即客户端是 RMI、其他形式的 RPC 等)接口,或者无接口视图(实现无接口)。即:

@Stateless 
@Local(LocalA.class) @Remote(RemoteA.class) 
@LocalBean 
public class MeineEJB { 
public void localA() {}
 public void remoteA() {}}

如果 bean 至少公开一个接口(本地或远程),它将自动失去无接口视图。所以我们 需要通过在 bean 上使用 @LocalBean 注解明确指定它公开一个无接口视图

注意:不要混淆 MeinjeEJB 类的 @Local 和 @LocalBean。我们需要@LocalBean,因为 MeineEJB 将由客户端(JSF、Servet 等)在本地调用(即不能远程调用)。远程调用的是 MeineEJB 本身的 RemoteA.class。

【讨论】:

    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 2018-10-04
    • 2010-11-04
    • 2011-08-21
    • 2015-12-05
    • 2011-01-23
    • 2015-04-11
    • 1970-01-01
    相关资源
    最近更新 更多