JavaEE 6检索另一个用户的数据

时间:2015-10-21 11:21:22

标签: jsf transactions ejb java-ee-6 glassfish-3

另一位程序员告诉我一个问题,一个用户有时会看到另一个登录用户的数据。可能他们同时要求相同的背景。我想,这是不可能发生的?自垃圾收集,容器管理的事务和JSessionID 没有看代码,很难猜测。但也许你有暗示。 他正在使用这种结构: JavaEE 6编写的Web应用程序,在Glassfish v3上单独使用EJB和Web容器 JSF + PrimeFaces框架

提前致谢

1 个答案:

答案 0 :(得分:1)

好消息是EJB体系结构绝对能够隔离数据,因此这将是您代码中的错误。

要寻找的是你正在使用的那种豆类:

  • 如果您有有状态的bean,容器将确保每个客户端都获得正确的实例。
  • 如果您使用无状态bean,则会在客户端之间共享这些bean。如果您在这些状态中存储任何特定于客户端的状态,则可以轻松地跨会话共享。
  • 如果使用单例,则需要确保不存储特定于会话的状态,并且任何共享状态都使用适当的锁。
  • 还值得检查您的应用程序逻辑 - 如果看起来数据是跨会话共享的,那么它是否可能只是错误的数据?

最后,您需要的最重要的事情是适当的调试日志记录。您需要从日志中获取有关正在发生的事情的足够信息,以确定问题出错的位置。不幸的是,这种争用问题可能是繁琐而难以捕捉的,特别是对于调试器而言,但适当的日志记录将使您的生活在任何情况下都更好。

当然,这一切都非常模糊和通用,但没有关于系统的更多细节是不可避免的。我建议寻找存储在无状态bean上的状态作为第一步!