我正在使用以下版本:
- 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 处理程序上工作的路径是什么?
写一个ExecutionHandler
知道 Spring 的?
注意:我无法升级到 Hibernate 4,因为与组中另一个项目中使用的 Spring-Flex 缺乏兼容性。可能是Spring版本的同一个故事,不记得了。