【问题标题】:JMX in Spring: Is MBeanServerConnectionFactoryBean Thread-SafeSpring 中的 JMX:MBeanServerConnectionFactoryBean 线程安全吗
【发布时间】:2012-02-16 21:10:42
【问题描述】:

我有一个基于 Spring 的 Web 应用程序,它需要通过 JMX 连接从 ActiveMQ 获取数据。 我正在使用MBeanServerConnectionFactoryBean(在 Spring 中)从 ActiveMQ 获取各种 MBean 属性。

我只有一个MBeanServerConnectionFactoryBean作为成员变量,用来获取数据。如果多个请求/线程同时出现,会有什么问题吗?会有比赛条件吗?

请建议保持代码线程安全的最佳方法。

【问题讨论】:

    标签: spring activemq jmx


    【解决方案1】:

    Spring FactoryBean 对象不打算直接从您的代码中使用,它们应该在您的 Spring 配置中使用。因此,它们被设计为只执行一次。

    如果您想使用它们,包括MBeanServerConnectionFactoryBean,那么您需要在每次想要获取它们创建的对象时创建、配置、使用和丢弃它们。它们绝对是线程安全的。

    更好的是,按照设计的意图去做,并在你的 Spring 配置中使用它们。

    【讨论】:

    • 非常感谢您的回复。最初我在 Spring 配置中创建了 MBeanServerConnectionFactoryBean。但是在我的应用程序启动时,它会尝试与 ActiveMQ(mBean 服务器)建立连接。现在如果 ActiveMQ 服务器关闭,则无法建立连接。即使在启动 ActiveMQ 服务器时,也无法建立 JMX 连接。我别无选择,只能将 MBeanServerConnectionFactoryBean 移动到代码中,并在收到请求时尝试建立连接。这导致了线程安全问题,因为我有一个用于连接的成员变量。请帮忙。
    • @user736492:更仔细地阅读MBeanServerConnectionFactoryBean 的文档。它具有将连接尝试推迟到需要时进行的选项,而不是在启动时进行。
    • 是的,它有一个选项可以在第一次使用时创建连接(而不是在启动时)。但这可能只是第一次尝试连接(一次)。如果 activeMQ 服务器当时关闭,它将不会尝试重新尝试连接。因此,它可能无法解决我为来自浏览器的每个请求重新尝试连接的问题。
    • 嗨,有什么办法可以重新尝试连接到 mbean 服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2012-12-18
    相关资源
    最近更新 更多