3

我正在使用以下版本:

  • 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版本的同一个故事,不记得了。

4

1 回答 1

0

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

于 2012-05-20T08:41:34.503 回答