当前位置:  开发笔记 > 运维 > 正文

Windows服务应用程序中的NHibernate会话管理

如何解决《Windows服务应用程序中的NHibernate会话管理》经验,为你挑选了1个好方法。

我正在开发和作为Windows服务运行的应用程序.还有其他组件包括一些WCF服务,客户端GUI等 - 但它是访问数据库的Windows服务.

因此,该应用程序是一个长期运行的服务器,我想提高其性能和可伸缩性,我希望改善数据访问等.我发布了另一个关于二级缓存的帖子.

这篇文章是关于访问数据库的长期运行线程的会话管理.我应该使用线程静态上下文吗?如果是这样,是否有任何关于如何实施的例子.

网络上每个使用NHibernate的人似乎都非常关注Web应用程序风格的体系结构.对于非Web应用程序设计,似乎缺乏文档/讨论.

目前,我的长期运行线程执行此操作:

    调用3或4个DAO方法

    验证返回的分离对象的状态.

    如果需要,更新状态.

    调用几个DAO方法来持久化更新的实例.(传入对象的id和实例本身 - DAO将再次从DB中检索对象,并在提交事务之前设置更新的值和session.SaveOrUpdate().

    睡觉'n'秒

    重复一遍!

因此,以下是我们为每个DAO方法使用的常见模式:

使用sessionFactory.OpenSession()打开会话

开始交易

db工作.检索/更新等

提交trans

(例外情况下的回滚)

最后总是处理事务和session.Close()

对于DAO类的每个方法调用都会发生这种情况.我怀疑这是我们这样做的某种反模式.

但是,我无法在任何地方找到足够的方向来改进它.

请注意,虽然这个线程在后台运行,做其中的东西,有来自WCF客户端的请求,每个客户端可以自己进行2-3个DAO调用 - 有时查询/更新长时间运行的线程处理的相同对象.

任何有关改进我们设计的想法/建议/指示将不胜感激.如果我们能够进行一些很好的讨论,我们可以将它作为一个社区维基,并可能从http://nhibernate.info链接到这里

克里希纳



1> steffenj..:

对于非Web应用程序设计,似乎缺乏文档/讨论.

这也是我的经历.但是,您所关注的模型对我来说似乎是正确的.您应该始终打开会话,提交更改,然后再次关闭它.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有