繁体   English   中英

在JBoss MBean服务器上注册MBean-无法找到JBoss MBean服务器

[英]Registering an MBean with the JBoss MBean server - Unable to find the JBoss MBean server

我正在使用Spring公开MBean并将其注册到JBoss MBean服务器。 当战争放到JBoss实例中时,这很好用。 但是在运行单元测试时它不起作用(这是有道理的,因为没有JBoss实例在运行)这是spring配置的摘录

<bean id="updateConfigMBean" class="mypackage.UpdateConfigMBean"/>

<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="server">
    <bean class="org.jboss.mx.util.MBeanServerLocator" factory-method="locateJBoss"/>
</property>
<property name="beans">
<map>
<entry key="mypackage:name=configurationMBean" value-ref="updateConfigMBean"/>
</map>
</property>
</bean>

我正在寻找的是一种解决此问题的优雅方法(不想有两个spring配置(用于测试和部署),并且禁用spring配置验证测试不是一种选择。

谢谢!

这是您可能必须具有两个配置的一种情况,一个用于测试,一个用于部署。

这是Maven的优点,因为您在部署配置和测试配置之间有明确的区分。 如果您担心要使两个配置保持最新,则需要以一种结构化配置的方式将所有公共位导入到其他配置中(这就是我们的做法)。

我正在使用@Bean解决该问题。 @Bean是为进行特定于环境的Bean创建而量身定制的。

下面的逻辑基本上是在开发(Tomcat)和测试(JUnit)中使用MBeanServerFactoryBean。 否则,请使用JBoss MBean服务器。

  @Bean
  def mbeanServer: MBeanServer = {
    val server = if (environment == "development" || environment == "test") {
      val factory = new MBeanServerFactoryBean
      factory.setLocateExistingServerIfPossible(true)
      factory.setRegisterWithFactory(true)
      factory.afterPropertiesSet()
      log.info("using default MBeanServer")
      factory.getObject
    } else {
      val clazz = Class.forName("org.jboss.mx.util.MBeanServerLocator")
      val locateJboss = clazz.getMethod("locateJBoss", List.empty[Class[_]].toArray: _*)
      log.info("using JBoss MBeanServer")
      locateJboss.invoke(null, 
           List.empty[java.lang.Object].toArray: _*).asInstanceOf[MBeanServer]
    }
    log.info("mbeanServer: " + server)
    server
  }

在Spring 3.1中,您可以解决此问题,并且仍然可以通过使用配置文件来使用XML配置。 但以上内容适用于Spring 3.0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM