EJB 3.1 @LocalBean与无注释

2022-08-31 12:51:44

我了解本地视图,远程视图和无界面视图之间的区别。我只是不明白“无视图”(无注释)和无界面视图之间有什么区别。另外,为什么我应该用?如果我根本没有注释界面,有什么区别吗?@Local


答案 1

规则是(从内存中):

  1. Bean 有一个注释 -> Bean 有一个无接口视图@LocalBean
  2. Bean 有一个注释 -> Bean 有一个局部视图@Local
  3. Bean 有一个注释 -> Bean 有一个远程视图@Remote
  4. Bean 没有视图注释,而是直接实现具有@Local注释的接口 -> Bean 具有本地视图
  5. Bean 没有视图注释,而是直接实现具有@Remote注释的接口 -> Bean 具有远程视图
  6. Bean 没有视图注释,但直接实现了一个没有视图注释的接口 - > Bean 具有本地视图
  7. Bean 没有视图注释,也没有实现任何接口 - > Bean 没有接口视图

因此,使用和根本不使用注释都是获得无界面视图的方法。如果你只想要一个无界面的视图,那么最简单的事情就是不去注释。前提是您没有实现任何接口。@LocalBean

部分原因存在于向也具有接口视图的Bean中添加无接口视图的原因。我想在规范作者心目中最重要的场景是你有一个豆子,比如:@LocalBean

@Stateless
public class UserPreferences {
    public String getPreference(String preferenceName);
    public Map<String, String> getPreferences();
}

您希望在本地公开这两种方法,但仅远程公开粗粒度的方法。你可以通过仅使用该方法声明远程接口,然后只需在bean类上打耳光即可做到这一点。没有它,你必须编写一个毫无意义的本地接口,只是为了在本地公开这两个方法。getPreferences()@LocalBean

或者,从另一个角度来看,存在是因为存在无界面视图之类的东西,并且无注释选项作为方便的快捷方式存在。@LocalBean


答案 2
  • 远程 EJB:可以从远程客户端(在不同的 JVM 上运行的客户机,例如在用户机器上运行的 Swing 或 JavaFX 客户机)访问
  • 本地 EJB:只能从运行在同一 JVM 上的其他“组件”进行访问,例如 Web 前端、其他 EJB
  • 无接口视图:与本地视图相同,但不指定业务接口
  • 没有注释:一个简单的 POJO 但不是 EJB

本地/无接口视图比远程 EJB 更有效,因为可以传递对象引用。


推荐