会话bean中的静态变量限制

tha*_*shd 5 java distribution session-bean java-ee

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

最好的祝福

Ósc*_*pez 15

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

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

在静态领域讨论中进一步扩展:

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

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

  • 这就是我的想法,为什么然后EJB规范提到了对"非最终静态字段"的限制,而不是"非最终静态原语"**和**"任何静态复杂类型"?这有点误导. (2认同)

kos*_*osa 5

这是根本的.根据这个太阳文件,

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