【发布时间】:2012-02-26 20:09:00
【问题描述】:
不可能在会话 bean 代码中使用静态变量。这种限制是任意的还是有根据的?为什么?
最好的问候
【问题讨论】:
-
好吧,不是不可能,试试
final static
标签: java jakarta-ee distribution session-bean
不可能在会话 bean 代码中使用静态变量。这种限制是任意的还是有根据的?为什么?
最好的问候
【问题讨论】:
final static
标签: java jakarta-ee distribution session-bean
正如FAQ on EJB restrictions 中所述,使用 EJB 的限制之一是:
企业 bean 不应读取或写入非最终静态字段
在discussion on static fields中进一步扩展:
非最终静态类字段在 EJB 中是不允许的,因为这些字段使企业 bean 难以或无法分发。静态类字段在特定类的所有实例之间共享,但仅在单个 Java 虚拟机 (JVM) 内共享。更新静态类字段意味着在类的所有实例之间共享该字段的值。但是,如果一个类同时在多个 JVM 中运行,则只有与更新实例在同一 JVM 中运行的那些实例才能访问新值。换句话说,如果在单个 JVM 中运行,非最终静态类字段的行为将不同于在多个 JVM 中运行。 EJB 容器保留了跨多个 JVM 分布企业 bean 的选项(在同一台服务器上运行,或在任何服务器集群上运行)。不允许使用非最终静态类字段,因为企业 bean 实例的行为取决于它们是否分布。
如果这些字段被标记为最终字段,则使用静态类字段是可接受的做法。由于 final 字段无法更新,企业 bean 的实例可以由容器分发,而无需担心这些字段的值会变得不同步。
【讨论】:
nonfinal static fields 的限制,而不是对nonfinal static primitives AND any static complex types?这有点误导。
这是基本的。按照这个sun documenation,
非最终静态类字段在 EJB 中是不允许的,因为这些字段会使企业 bean 难以或无法分发。静态类字段在特定类的所有实例之间共享,但仅在单个 Java 虚拟机 (JVM) 内共享。 *
【讨论】:
static表示类或所有对象的唯一性。
现在,javabeans 应该有用户特定的数据,static 字段对这些没有任何意义。
一个用户编辑一个变量,它也会为所有其他用户更新。 (免费 :-))。
但是,如果您想要这些的静态行为(即为所有用户使用相同的数据),您可以使用 application 来实现此目的。
【讨论】: