我使用以下版本:
现在,我有一个运行良好的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版本可能是同样的故事,不记得了。
答案 0 :(得分:0)
我建议你在spring容器中创建这些netty的处理程序,并将服务或持久层注入到处理程序中,这样你就可以让这些层独立于netty,当然这些都是老式的spring bean。