我了解本地视图、远程视图和无接口视图之间的区别,但我不明白“无视图” (没有注释) 和无接口视图之间的区别。另外,为什么我需要在我的接口上注释 @Local
?如果我完全不注释接口,会有什么区别吗?
我了解本地视图、远程视图和无接口视图之间的区别,但我不明白“无视图” (没有注释) 和无接口视图之间的区别。另外,为什么我需要在我的接口上注释 @Local
?如果我完全不注释接口,会有什么区别吗?
这些规则如下:
@LocalBean
注解 -> Bean具有无接口视图@Local
注解 -> Bean具有本地视图@Remote
注解 -> Bean具有远程视图@Local
注解的接口 -> Bean具有本地视图@Remote
注解的接口 -> Bean具有远程视图因此,使用@LocalBean
和不加注解都是获得无接口视图的方法。如果您只需要无接口视图,则最简单的方法是不进行任何注解。前提是您也没有实现任何接口。
@LocalBean
存在的部分原因是将无接口视图添加到同时具有接口视图的bean中。我想规范作者头脑中最主要的情况是您拥有如下Bean:
@Stateless
public class UserPreferences {
public String getPreference(String preferenceName);
public Map<String, String> getPreferences();
}
如果你想在本地公开两种方法,但只想在远程粗略公开getPreferences()
,你可以声明一个仅包含该方法的远程接口,然后将@LocalBean
附加到bean类上。如果没有它,你需要编写一个无意义的本地接口才能在本地公开这两种方法。
或者,换个角度看,@LocalBean
的存在是因为存在无接口视图,而无注解选项存在是方便的快捷方式。
@LocalBean
进行注释一样。 - Tom Anderson本地/无接口视图比远程EJB更高效,因为对象引用可以传递。
无接口视图与 EJB 3.0 本地视图具有相同的行为,例如,它支持诸如按引用传递调用语义、事务和安全性传播等功能。但是,无接口视图不需要单独的接口,也就是说,所有 bean 类的公共方法都会自动暴露给调用者。默认情况下,任何具有空实现子句且未定义任何其他本地或远程客户端视图的会话 bean 都会公开一个无接口客户端视图。