Java 为什么在EJB类上同时使用@LocalBean和接口?

Java 为什么在EJB类上同时使用@LocalBean和接口?,java,jakarta-ee,ejb,Java,Jakarta Ee,Ejb,正如我所理解的,当人们不想为EJB定义任何接口时,会在EJB上使用@Localbean。然后我看到许多网站,包括IBM,都显示了这样的内容: @Stateless @Local(LocalA.class) @Remote(RemoteA.class) @LocalBean public class MeineEJB { public void localA() {} public void remoteA() {}} 如果它是一个没有接口的EJB,那么@Local(

正如我所理解的,当人们不想为EJB定义任何接口时,会在EJB上使用@Localbean。然后我看到许多网站,包括IBM,都显示了这样的内容:

@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,但我们也将它定义为一个远程bean。那么为什么注释标题首先是@LocalBean呢


谢谢大家的阅读。

您只是对为什么在同一个MeinjeEJB类上注释@Local和@LocalBean感到困惑。并没有具体说明他们之间的差异

no接口(@LocalBean)只是本地视图的一个变体,它在本地公开bean类的所有公共业务方法,而不使用单独的业务接口

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

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


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

这一点在本文中有详细介绍。是的,同时拥有本地、远程和本地bean似乎有点毫无意义。将remote和localbean结合起来可能是有意义的。我感谢您@ewramner的回复。在提出这个问题之前,我已经看到了这个链接,但它并没有回答我的问题。如果您能查看我发送的IBM链接,或此链接中页面的结尾,我将不胜感激。看起来他们也定义了一个接口。您的两个链接都是示例,它们展示了EJB3.1的可能性,而不是最佳实践。这些例子一定有用,但不一定有意义。同一个bean通过一个本地无接口视图、一个本地接口视图(带有LocalA)和一个远程接口视图(带有RemotA)公开。这是可能的。这很普遍吗?可能没有,我还没见过。公开本地和远程是常见的,但不是所有这三种。谢谢@ewramner。现在这些例子对我来说很有意义。可能是
@Stateless 
@Local(LocalA.class) @Remote(RemoteA.class) 
@LocalBean 
public class MeineEJB { 
public void localA() {}
 public void remoteA() {}}