我正在使用以下版本:
然而,在处理程序中(这些处理程序是有状态的,并根据用户处于的状态动态创建的)-
在解码器和编码器之后,我添加了一个ExecutionHandler:
- Spring 3.1.1.RELEASE
- Netty 3.4.0.Final
- Hibernate 3.5.6-Final
@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版本可能也是同样的情况,我记不清了。