客户不得对内部实施做出任何假设

时间:2017-07-12 08:32:42

标签: ejb-3.1 java-ee-7 ejb-3.2

从EJB3.2规范中获取的完整句子:

  

与无界面视图的引用交互时,客户端   不得对内部实施做出任何假设   引用,例如可能的任何特定于实例的状态   出现在参考文献中

我实际上是想了解这实际意味着什么,我想知道是否有人可以提供一些例子。

修改
上面的句子来自3.4.4节会话Bean的无界面视图,也许这个信息很有帮助

1 个答案:

答案 0 :(得分:1)

生成无接口视图代理时,EJB容器必须创建EJB类的子类,并覆盖所有公共方法以提供代理行为(如安全性,事务)。

您可以获取对bean的引用(例如,将其传递给另一个ejb):

NoInterfaceBean bean = ejbContext.getBusinessObject(NoInterfaceBean.class);

这将返回一个带有类类型的引用,该类型与bean类本身相同(通常,如果EJB具有业务接口,它将返回接口类),但是它不是对NoInterfaceBean实例的引用(而是对具有相同名称的代理类)。可以把它想象成一个对你的bean的拉皮条的引用,关于你

  

不得对内部实施做出任何假设

与"正常"基本相同EJB' S。你知道你的bean实例有一些魔力,但是由于你将接口作为类类型,它已经很清楚,实现接口的每个类都可以有不同的内部实现。

因此,规范强调了这一点上的差异。即使它看起来像是对具体类的引用,也不是(正如他们在规范的下一段JSR-000345 Enterprise JavaBeansTM 3.2 Final Release中所说的那样:

  

虽然引用对象与类型兼容   对应的bean类类型,没有规定的关系   介绍和内部实现之间   bean实例的实现。