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

3
我正在使用以下版本:
  • 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

注意:由于与组中另一个项目中使用的Spring-Flex不兼容,我无法升级到Hibernate 4。Spring版本可能也是同样的情况,我记不清了。

1个回答

0
我建议您在Spring容器中创建这些Netty处理程序,并将服务或持久化层注入到处理程序中,以便使这些层与Netty独立,并且这些都是老派的Spring Bean。

至少有一个不起作用的bean是由Spring创建的。这并没有帮助——问题出在它们运行的线程上。 - Jason Maskell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接