[英]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.