6

在会话 bean 代码上使用静态变量是不可能的。这种限制是任意的还是有根据的?为什么?

此致

4

3 回答 3

16

关于 EJB 限制的常见问题解答中所述,使用 EJB 的限制之一是:

企业 bean 不应读取或写入非最终静态字段

在关于静态字段的讨论中进一步扩展:

在 EJB 中不允许使用非最终静态类字段,因为此类字段会使企业 bean 难以或无法分发。静态类字段在特定类的所有实例之间共享,但仅在单个 Java 虚拟机 (JVM) 中共享。更新静态类字段意味着在类的所有实例之间共享该字段的值。但是,如果一个类同时在多个 JVM 中运行,则只有与更新实例在同一 JVM 中运行的那些实例才能访问新值。换句话说,如果在单个 JVM 中运行,非最终静态类字段的行为将不同于在多个 JVM 中运行。EJB 容器保留了跨多个 JVM 分发企业 bean 的选项(运行在同一台服务器上,或任何服务器集群上)。

如果这些字段被标记为最终字段,则使用静态类字段是可接受的做法。由于最终字段无法更新,企业 bean 的实例可以由容器分发,而无需担心这些字段的值变得不同步。

于 2012-02-04T14:58:38.080 回答
5

这是根本。根据这个太阳文档

在 EJB 中不允许使用非最终静态类字段,因为此类字段会使企业 bean 难以或无法分发。静态类字段在特定类的所有实例之间共享,但仅在单个 Java 虚拟机 (JVM) 中共享。*

于 2012-02-04T14:56:57.217 回答
1

static意味着类或所有对象的唯一性。

现在,javabeans应该有用户特定的数据,static字段对这些没有任何意义。

一个用户编辑一个变量,它也会为所有其他用户更新。(免费:-))。

但是,如果您想要这些的静态行为(即对所有用户使用相同的数据),那么您就有application了这个目的。

于 2012-02-04T14:55:03.333 回答