【发布时间】:2015-09-24 14:02:54
【问题描述】:
我最近一直在阅读有关 Java 对象的安全发布的文章(例如:http://shipilev.net/blog/2014/safe-public-construction/)。
直到现在,在依赖容器管理的并发性时,我都毫无疑问地信任 EJB 容器。
现在我想知道 1) EJB 容器如何确保 EJB 本身安全发布? 2) EJB 容器如何确保其 EJB 创建的对象被安全发布(例如 EJB 实例变量)?
例如随着时间的推移,不同的线程可以访问无状态会话 bean(我不必同时说),因此不安全的发布是一个潜在的问题。
对于 1),我大致看到了可能性,例如通过包装 EJB 并使用一些不稳定的访问来保证总订单。
对于 2),我看不出 EJB 容器如何执行它。 如果 EJB 3.1 规范禁止将实例变量保留在 EJB 中,如果它可以被不同的线程访问? 也许“不要担心容器管理的 EJB 中的并发”这句话是不正确的,我应该在我的 EJB 实例变量中使用的类的类定义中使用安全发布模式(包括 volatile 和/或 final 关键字)?
令我惊讶的是,作为一名 Java 开发人员,我错过了这么多年的基本问题。
问候, 拉尔斯
【问题讨论】:
标签: ejb safe-publication