0

以下问题让我想起了

1)我在某处读到:

钝化:有状态 bean 的可扩展性机会

可扩展性在这里意味着什么?

2) 无状态会话 bean 如何比有状态会话 bean 更具可扩展性?

3) 作为

对于钝化,有状态会话 bean 被序列化,对于激活,它将被容器反序列化......

为什么我们确实需要序列化和反序列化,不能在没有序列化和反序列化的情况下完成(钝化和激活)吗?以及序列化如何帮助容器钝化 bean?

4

1 回答 1

2

1) 有状态会话 bean 必须在方法调用之间维护它们的身份和状态。如果这样的 bean 有一段时间没有被访问过,那么容器可以选择钝化它。这意味着它的状态以某种方式在 JVM 之外被保留(通常使用 java 序列化写入磁盘文件),并且它的资源使用(内存)被恢复。当再次访问 SFSB 时,容器将再次激活它(反序列化它)。因此,SFSB 能够更好地扩展(它的更多“实例”可以容纳在单个 JVM 中,但存在相关的时间和 I/O 损失)

2)无状态bean只需要在单个方法调用期间存在,之后可以回收它们使用的任何资源。更常见的是,它们中的一些将被维护在一个池中,并暂时可用于处理特定的方法调用。因此,无状态会话 bean 对可伸缩性的影响很小或没有直接影响。

有状态会话 bean 用于与无状态会话 bean 完全不同的目的。出于可扩展性的考虑,您不会选择其中一个。

3)序列化是Java用来读写任意对象状态的机制。与 SFSB 关联的实例变量必须是可序列化的(除了一些记录在案的异常)。这不仅允许 SFSB 被钝化/激活,还允许将其迁移到其他 JVM 实例以支持故障转移和/或负载平衡。

对于 SFSB,可以通过其他方式进行钝化和激活,但 EJB 规范要求序列化。

于 2015-03-13T11:07:46.480 回答