Netty处理程序中的Spring事务支持

时间:2012-05-19 07:26:26

标签: spring hibernate transactions netty

我使用以下版本:

  • Spring 3.1.1.RELEASE
  • Netty 3.4.0.Final
  • Hibernate 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版本可能是同样的故事,不记得了。

1 个答案:

答案 0 :(得分:0)

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