首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EJB 3.1 @LocalBean与无注释

EJB 3.1 @LocalBean与无注释
EN

Stack Overflow用户
提问于 2012-06-05 07:00:56
回答 3查看 64.9K关注 0票数 78

我理解本地视图、远程视图和无接口视图之间的区别。我只是不明白“无视图”(无注释)和无接口视图之间的区别。还有,为什么我要用@Local注释我的界面?如果我根本不在中注释界面,会有什么不同吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-05 19:22:46

规则是(从内存中):

  1. Bean具有@LocalBean批注-> bean具有无接口视图
  2. bean具有@Local批注-> bean具有本地视图
  3. bean具有@Remote批注-> bean具有远程视图
  4. Bean没有视图批注,但直接实现具有@Local批注-> Bean的接口

<代码>H112Bean没有视图批注,但直接实现具有@Remote批注的接口-> Bean具有远程视图<代码>H114Bean没有视图批注但是直接实现了一个没有视图标注的接口-> bean有一个本地视图

  1. bean没有视图标注,也没有实现接口-> bean有一个无接口的视图

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

@LocalBean存在的部分原因是将无接口视图添加到也具有接口视图的bean。我想在spec作者的脑海中最重要的场景是你有一个bean,像这样:

代码语言:javascript
复制
@Stateless
public class UserPreferences {
    public String getPreference(String preferenceName);
    public Map<String, String> getPreferences();
}

您可能希望在本地公开这两种方法,但仅远程公开粗粒度的getPreferences()。您可以使用该方法声明一个远程接口,然后在bean类上添加@LocalBean。如果没有它,您将不得不编写一个毫无意义的本地接口来在本地公开这两个方法。

或者,从另一种角度来看,注释之所以存在,是因为有一种叫做无接口视图的东西,并且无注释选项作为一种方便的快捷方式而存在。

票数 141
EN

Stack Overflow用户

发布于 2012-06-05 07:12:56

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

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

票数 15
EN

Stack Overflow用户

发布于 2012-06-05 18:34:03

我认为您/我们感到的困惑是历史/后向兼容性(可以这么说)的结果。我不能区分任何区别(除了规格。如果我们使用local-view,则需要实现来创建接口)

无接口视图具有与EJB3.0本地视图相同的行为,例如,它支持按引用传递调用语义以及事务和安全传播等功能。但是,无接口视图不需要单独的接口,也就是说,bean类的所有公共方法都自动向调用者公开。默认情况下,任何具有空implements子句且未定义任何其他本地或远程客户端视图的会话bean都会公开一个无接口客户端视图。

Oracle Blog before release of EJB 3.1

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10889563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档