我理解本地视图、远程视图和无接口视图之间的区别。我只是不明白“无视图”(无注释)和无接口视图之间的区别。还有,为什么我要用@Local注释我的界面?如果我根本不在中注释界面,会有什么不同吗?
发布于 2012-06-05 19:22:46
规则是(从内存中):
@LocalBean批注-> bean具有无接口视图@Local批注-> bean具有本地视图@Remote批注-> bean具有远程视图<代码>H112Bean没有视图批注,但直接实现具有@Remote批注的接口-> Bean具有远程视图<代码>H114Bean没有视图批注但是直接实现了一个没有视图标注的接口-> bean有一个本地视图
因此,使用@LocalBean和根本不使用注释都是获得无接口视图的两种方式。如果你只是想要一个无界面的视图,那么最简单的事情就是不加注释。如果你没有实现任何接口的话。
@LocalBean存在的部分原因是将无接口视图添加到也具有接口视图的bean。我想在spec作者的脑海中最重要的场景是你有一个bean,像这样:
@Stateless
public class UserPreferences {
public String getPreference(String preferenceName);
public Map<String, String> getPreferences();
}您可能希望在本地公开这两种方法,但仅远程公开粗粒度的getPreferences()。您可以使用该方法声明一个远程接口,然后在bean类上添加@LocalBean。如果没有它,您将不得不编写一个毫无意义的本地接口来在本地公开这两个方法。
或者,从另一种角度来看,注释之所以存在,是因为有一种叫做无接口视图的东西,并且无注释选项作为一种方便的快捷方式而存在。
发布于 2012-06-05 07:12:56
本地/无接口视图比远程EJB更有效,因为可以传递对象引用。
发布于 2012-06-05 18:34:03
我认为您/我们感到的困惑是历史/后向兼容性(可以这么说)的结果。我不能区分任何区别(除了规格。如果我们使用local-view,则需要实现来创建接口)
无接口视图具有与EJB3.0本地视图相同的行为,例如,它支持按引用传递调用语义以及事务和安全传播等功能。但是,无接口视图不需要单独的接口,也就是说,bean类的所有公共方法都自动向调用者公开。默认情况下,任何具有空implements子句且未定义任何其他本地或远程客户端视图的会话bean都会公开一个无接口客户端视图。
https://stackoverflow.com/questions/10889563
复制相似问题