代码之家  ›  专栏  ›  技术社区  ›  artemb

如何强制JBoss4.2.3为每个请求清除hibernate的会话缓存?

  •  2
  • artemb  · 技术社区  · 16 年前

    在我看来,JBoss对多个请求重用实体管理器和底层hibernate会话。我已经运行了一个测试,该测试证明在某些情况下,即使只是使用 em.find() .

    如何禁用此行为并强制清除或丢弃已使用的会话,以确保每个请求都使用清除缓存处理?

    UPD:

    HTTP请求1。会话bean创建一个实体实例,并使用字段“A”将其存储为值1。持久化实体获取ID=4。

    HTTP请求2。会话bean查找ID=4的实体,将其字段“A”设置为值2并保存它。

    HTTP请求3。会话bean查找ID=4的实体并检查其字段“A”。如果值为1,它做一件事,如果值为2,它做另一件事。

    如果请求3中的EM恰好与请求1中的EM相同,则会发生意外行为。我对此进行了测试,得到了大约10%的失败案例。

    2 回复  |  直到 16 年前
        1
  •  0
  •   Narayan    16 年前

    你试过了吗 evicting 对象 Session ?

        2
  •  0
  •   artemb    16 年前

    好吧,我知道了。JBoss正确处理会话,我的测试中有一个bug=)对不起,谢谢你的帮助