【发布时间】: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