EJB3:为什么事务语义和有状态都考虑了实现细节?

事务语义和状态完整性被认为是EJB3中的实现细节。 实现可以决定是使用bean还是容器管理的事务。 它可以决定容器管理事务的类型。 它可以决定它是满州还是无国籍。 但从逻辑上讲,这些都是重要的界面细节。 示例:(a)使用bean托管事务的bean无法使用容器管理事务调用bean。 (b)无状态bean不能调用满状态bean。 当提供EJB3接口时,您不知道它需要什么样的事务语义。同样,你不知道它是满州还是无国籍。 您需要额外的实施细节。示例:文档。 在运行时,可以动态地实例化不同的bean和调用链。因此可能出现无效状态。现在 - 容器可以捕获这些情况;但为什么要等到运行时? 为什么事务语义和状态丰满度要求不是接口的一部分?     
已邀请:
  事务语义和   考虑国家充实   EJB3中的实现细节。一个   实施可以决定是否   使用bean或容器管理   交易。它可以决定类型   容器管理事务。   它可以决定它是否满州   或无国籍的。 从客户的角度来看,我理解国家管理的重点确实很重要。 关于交易,这有点棘手。 交易类型(
bean-managed
container-managed
)是实施细节(我不确定你的例子(a))。 传播语义不是。 (
required
mandatory
none
等)。   现在 - 容器可以捕获这些   的情况;但为什么要等到   运行? 即使接口中存在所有内容,类型系统仍然不足以在编译类型中强制执行规则。 无论如何,你需要一个工具来根据它们的应用语义来检查这些约束。如果解析注释,IDE可以执行此操作,容器可以在部署模块时执行此操作,更糟糕的是,它在运行时失败。   为什么是事务语义和   国家充实要求不是一部分   界面? java接口仅包含有关组件正确用法的有限信息集,无论是类,bean还是API。大多数组件的总体合同比接口中暴露的更复杂。 例子: 线程安全:如何在不查看文档的情况下知道特定类是否是线程安全的?
ContentHandler.characters()
:你怎么知道每个XML标签可以多次调用它? 而这样的例子不胜枚举... 我个人使用术语合同来指代完整的约束集。从类型系统的角度来看,界面只给出了方法的签名。 如果您对该主题感兴趣,我建议您按合同查看设计。很长一段时间以来,将组件之间的合同正式化的想法已经存在。 所以我的答案是:因为即使它是,你仍然需要更多的信息。     

要回复问题请先登录注册