2011-12-02 97 views
0

当阅读有关Java的状态和无状态bean的文件,我有点明白,但有这种一般的情况下,使我困惑:需要澄清的Java状态bean

  • 我有一个Web服务,它需要在内存中数据来处理请求,并且这些数据通过Web服务请求添加到内存中,而不是从数据库加载。为了简单起见,请考虑Web服务提供处理学生数据的方法,但首先,需要将班级中所有学生的数据放入内存中,假设数据只是暂时的,把它们从任何数据库中加载并加载。
  • 假设第一步我们有3个客户端调用Web服务来将许多学生的数据添加到Web服务中。
  • 第二步,每个客户调用一个web服务方法,int getRank(student)表示,这个方法的实现只是循环所有学生的数据,并根据他在特定主题上的标记检查输入学生的排名。就这样,一个整数将被返回,我们不需要存储任何客户服务相关的东西,所以我想我们不需要一个有状态的bean。然而,由于在每次将学生数据发送到服务器之后,这些数据需要留在内存中,似乎我们在这里有某种有状态的东西,但我不知道它叫什么,并且这是否使服务称为有状态的Web服务。

谢谢你的任何想法。

回答

0

这听起来像“缓存”给我。您定期更新驻留在内存中的一大块数据以节省网络延迟;这是可能的,因为块不是太大。

我想说任何标准的缓存解决方案都可以。加载值时必须小心,以确保读取操作不会发生,并确保它是有序的过程。多个客户不应该有任何机会损害其他人的数据。

我同意 - 你不需要有状态的会话bean。你需要缓存。

+0

谢谢。 “缓存”听起来很复杂,如果我有一个全局数据收集对象,并且只是将项目添加到该列表中,该怎么办? – longbkit

+1

缓存应该是“大部分读取”的 - 你比它更频繁地读取缓存。这听起来像你的多客户端加载操作是周期性的,没有写入。真的吗?如果没有,您只需在写操作和无效值期间进行同步,以确保没有人看到过时的数据。查看产品 - EhCache和Terracotta是开源的。连贯性不是。 http://www.terracotta.org/ – duffymo

+0

如果数据量不是太大,性能是第一优先,那么我应该只使用全局数据集合而不是缓存? – longbkit