Hibernate:使用单例会话写入日志(无刷新)

时间:2015-11-28 18:40:51

标签: java hibernate session nhibernate castle-windsor

我正在考虑使用Singleton Session为我们的应用程序编写请求日志。

通常我会将Hibernate与Lifestyle PerWebRequest一起使用,但在我的特定情况下,没有Http Context(我们使用套接字线程来监听请求)。但是,我注意到,因为我们只使用会话来记录日志,所以我也可以使用单例 Hibernate会话

即使多个线程运行会话,所有请求日志都会在会话中加起来并在Hibernate感觉舒适时保存。没有必要在>之后立即阅读日志,这样就可以了。

代码将是这样的:

// Got socket request
// Doing some stuff here, saving to a legacy database (cannot use Hibernate with this one)

var logging = new Message(info);
loggingService.save(logging); // FYI: in case it fail, we don't want to roll back the previous work

我唯一担心的是,当我们想要在多台机器上运行2个程序进行负载平衡时,那么这可能是个问题。我认为在这种情况下我们必须做一些锁定/同步以避免可能的冲突(尽管我现在想不到任何冲突)。

对于Singleton会话是否可以使用,或者有可能的影响我没想过?

1 个答案:

答案 0 :(得分:0)

这"辉煌"使用Singleton Session的想法花了我很多时间来清理混乱。起初它产生了良好的结果,但随后出现了许多不可预测的错误。

现在我可以确认Session不是为这样的东西而设计的。 我选择删除这个问题,但后来又决定留在这里为那些拥有相同"辉煌时刻的人#34;。

TL; DR:我建议每个人坚持使用"良好的旧方式":一个主题 - 一个会话。