gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:11:53 27 4
gpt4 key购买 nike

我正在使用以下版本:

  • Spring 3.1.1.RELEASE
  • Netty 3.4.0.Final
  • hibernate 3.5.6-Final

现在,我有一个运行良好的 Netty 服务器 - 服务器的根、管道工厂和拥有一切的服务器的基本“ stub ”都使用 Spring 设置。在这个 stub 中,spring @Transactional 注释工作得很好。

但是,在处理程序中,它们是有状态的并且根据用户所处的状态动态创建 - @Transactional 不起作用。我很确定我明白为什么。我什至有一个“解决方案”——但它不是很好。

在解码器和编码器之后,我添加了一个 ExecutionHandler:

pipeline.addLast("execution", new ExecutionHandler(new OrderedMemoryAwareThreadPoolExecutor(16,1000000, 1000000)));

这似乎是 Spring 事务支持中断的地方。由于 Spring 不知道这些线程,它不能将任何事务绑定(bind)到它们。这些类被正确代理,但在调试中它们没有关联的事务。

我的解决方案很烂,需要用真正的解决方案代替:

Session sess = SessionFactoryUtils.getSession(getSessionFactory(), true);

这很糟糕,因为它依赖于我来释放 session ,而且它甚至可能不是事务性的,我没有检查过。它在很多方面都很糟糕。

无论如何 - 问题的根源。鉴于上述技术,我的 @Transactional 符号在 Netty 处理程序上工作的途径是什么?

编写一个可识别 Spring 的 ExecutionHandler

注意:我无法升级到 Hibernate 4,因为它与组中另一个项目中使用的 Spring-Flex 不兼容。 Spring 版本可能是同样的故事,不记得了。

最佳答案

我建议您在 spring 容器内创建这些 netty 的处理程序,并将服务或持久层注入(inject)处理程序,这样您就可以使这些层独立于 netty,当然这些都是老式的 spring bean。

关于Netty 处理程序中的 Spring 事务支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10663240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com