【问题标题】:Spring transaction support in Netty handlersNetty 处理程序中的 Spring 事务支持
【发布时间】:2012-05-19 07:26:25
【问题描述】:

我正在使用以下版本:

  • 春季 3.1.1.RELEASE
  • Netty 3.4.0.Final
  • 休眠 3.5.6-Final

现在,我有一个运行良好的 Netty 服务器 - 服务器的根、管道工厂和拥有一切的服务器的基本“存根”都使用 Spring 设置。在这个存根中,spring @Transactional 注释工作得很好。

但是,在有状态且根据用户所处的状态动态创建的处理程序中 - @Transactional 不起作用。我很确定我明白为什么。我什至有一个“解决方案”——但不是很好。

在解码器和编码器之后,我添加了一个 ExecutionHandler:

pipeline.addLast("execution", new ExecutionHandler(new OrderedMemoryAwareThreadPoolExecutor(16,1000000, 1000000)));

这似乎是 Spring 事务支持中断的地方。由于 Spring 不知道这些线程,它不能将任何事务绑定到它们。这些类被正确代理,但在调试中它们没有关联的事务。

我的解决方案很烂,需要换成真正的解决方案:

Session sess = SessionFactoryUtils.getSession(getSessionFactory(), true);

这很糟糕,因为它依赖于我来释放会话,而且它甚至可能不是事务性的,我没有检查过。它在很多方面都很糟糕。

无论如何 - 问题的根源。鉴于上述技术,我的 @Transactional 符号在 Netty 处理程序上工作的途径是什么?

写一个支持 Spring 的 ExecutionHandler

注意:我无法升级到 Hibernate 4,因为与 Spring-Flex 不兼容,在组中的另一个项目中使用。可能是Spring版本的同一个故事,不记得了。

【问题讨论】:

    标签: spring hibernate transactions netty


    【解决方案1】:

    我建议你在 spring 容器中创建这些 netty 的处理程序,并将服务或持久层注入到处理程序中,这样你就可以让这些层独立于 netty,当然这些都是老式的 spring bean。

    【讨论】:

    • 至少有一个无法运行的 bean 是由 Spring 创建的。它没有帮助 - 这是他们正在运行的线程。
    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 2019-09-16
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2013-03-06
    相关资源
    最近更新 更多