MetadataMBeanInfoAssembler不支持JDK动态代理

时间:2014-04-27 15:05:25

标签: java spring java-ee jmx

最近我在Spring Web应用程序中添加了JMX支持。

这适用于@Component的bean,但是,对于某些服务,添加@ManagedResource

时似乎存在问题

我有一个使用@Service方法注释的spring服务。 我正在尝试使用@ManagedResource将JMX添加到该服务,但看起来春天在注册bean时遇到了麻烦:

org.springframework.beans.factory.BeanCreationException:
     Caused by: org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'mbeanExporter': Invocation of init method
failed; nested exception is
org.springframework.jmx.export.UnableToRegisterMBeanException: Unable
to register MBean [...] with key 'appAnalysisServiceImpl'; nested
exception is org.springframework.jmx.export.MBeanExportException:
Could not create ModelMBean for managed resource [
     l@6142152] with key 'myservice'; nested exception is java.lang.IllegalArgumentException: MetadataMBeanInfoAssembler does
not support JDK dynamic proxies - export the target beans directly or
use CGLIB proxies instead
             at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1486)
             at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524)

从异常消息来看,spring似乎需要为这种类提供一个特殊的导出器。 如何在不编写自己的导出器的情况下直接导出bean?

1 个答案:

答案 0 :(得分:0)

如果您的服务使用@Transactional,则Spring无法创建ModelBean,因为服务已被代理。