【问题标题】:Stateful session bean passivation and serialization - EJB有状态会话 bean 钝化和序列化 - EJB
【发布时间】:2015-05-15 14:42:35
【问题描述】:

以下问题在我脑海中浮现

1) 我在某处读到:

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

可扩展性在这里是什么意思?

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

3) 作为

为了钝化一个有状态的会话 bean 被序列化并且为了 激活它将被容器反序列化...

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

【问题讨论】:

    标签: java jakarta-ee serialization ejb stateful-session-bean


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢您的回复……但它没有解决我的前两个问题。您能否详细说明最后一段(例如序列化如何帮助钝化和激活)?谢谢
    • 在第一点中,您写道“通常使用 java 序列化写入磁盘文件”......请给我任何参考/链接吗?谢谢
    • 没有参考。这代表了我的观察。我广泛使用了 JBoss/WildFly、WebSphere 和 WebLogic。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2015-10-03
    • 2015-03-12
    • 1970-01-01
    相关资源
    最近更新 更多