【问题标题】:How Open Session In View works with jms connection/session?Open Session In View 如何与 jms 连接/会话一起使用?
【发布时间】:2017-01-26 05:47:23
【问题描述】:

我们有一个 grails Web 应用程序,它接受 http 请求并使用 activemq 将处理委托给 pub-sub jms。

由于在将消息发布到目的地后返回 http 请求,因此 Open Session In View 拦截器令牌是否在发布后立即关闭?

当订阅者开始处理来自activemq队列的消息时(这里的服务方法是订阅者),整个事务(订阅者服务方法中有多个事务)是否会在单个会话中或者是否为hibernate模板策略打开会话将使用单个事务并在提交后关闭它? 如果是这样,对于单个 jms 消息处理,会有多个会话打开和关闭?

我一直在摸不着头脑,但无法解决,任何帮助都会有用!

【问题讨论】:

  • 您是否在使用任何插件,例如 Grails 的 JMS 插件?这将有助于回答您的问题。
  • @JoshuaMoore 是的,我们正在使用 grails "jms:1.3" 作为插件。

标签: hibernate session grails jms


【解决方案1】:

好的,这里有几个问题。

让我们从第一个开始:

... Open Session In View 拦截器令牌是否在发布后立即关闭?

它像往常一样关闭。当 HTTP 请求结束时。发布 JMS 消息对此没有影响。

下一步:

当订阅者开始处理来自 activemq 队列的消息时...整个事务是否会在一个会话中...?

答案是视情况而定。这取决于您可以使用自己的代码更改默认行为。但是,如果您遵循单一事务服务方法的最常见模式来处理消息,那么将只使用一个休眠会话(由 JMS 插件功能提供)和一个事务(由您的服务方法提供)。事务和休眠会话都将关闭

【讨论】:

  • 那么,每个与代理的 jms 连接都会有一个新的休眠会话来接收消息吗?我一直在寻找 jms 会话和休眠会话之间的关系,但没有找到任何具体的东西。任何来源都会有所帮助!
猜你喜欢
  • 1970-01-01
  • 2010-12-11
  • 2011-02-01
  • 2011-03-15
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 2016-02-28
相关资源
最近更新 更多