会话bean中的静态变量限制

时间:2012-02-04 14:48:43

标签: java java-ee distribution session-bean

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

祝你好运

3 个答案:

答案 0 :(得分:13)

正如FAQ on EJB restrictions中所述,使用EJB的一个限制是:

  

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

discussion on static fields中进一步扩展:

  

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

     

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

答案 1 :(得分:5)

这是根本的。根据{{​​3}},

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

答案 2 :(得分:1)

  

static对于所有对象的类OR来说都是唯一的。

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

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

但是,如果您希望这些行为具有静态行为(即为所有用户使用相同的数据),则为此目的application