2017-03-23 1 views
0

Spring JMX 주석을 사용하여 일부 정보를 내보내려고합니다 (xml : D가 없음). 나는 String과 Integer 타입을 내보내기를 성취 하였지만, 나는 내가 생성 한 클래스의 어떤 객체도 export 할 수 없었다.Spring JMX 주석을 사용하여 객체 내보내기

이것은 @Configuration 클래스입니다.

@Configuration 
@EnableMBeanExport 
@ComponentScan({"my.packages"}) 
public class AppManager { 

    public static void main(String[] args) { 

     AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); 
     context.register(AppManager.class); 
     context.refresh(); 


     try { 
      TimeUnit.MINUTES.sleep(30); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Bean(name = "jmxExporter") 
    public Exporter jmxExporter() { 
     return new Exporter(); 
    } 
} 

이것은 내가 갖고 싶은 몇 가지 특성이있는 클래스입니다.

public class MyClass implements Serializable { 

    private int param1; 
    private int param2; 
    private int param3; 

    public MyClass() { 
     // calculate all params 
    } 

    public int getParam1() { 
     return this.param1; 
    } 

    public int getParam2() { 
     return this.param2; 
    } 

    public int getParam3() { 
     return this.param3; 
    } 

} 

이것은 속성을 내보내는 클래스입니다.

import org.springframework.jmx.export.annotation.ManagedAttribute; 
import org.springframework.jmx.export.annotation.ManagedResource; 

@ManagedResource(objectName = "my.packages:type=JMX,name=Exporter") 
public class Exporter { 

    @ManagedAttribute 
    public String getString() { //This works! 
     return "Test string"; 
    } 

    @ManagedAttribute 
    public MyClass getMyClass() { //This does not work 
     return new MyClass(); 
    } 

} 

개별적으로 내보낼 수없는 실시간 정보가 있기 때문에 매번 MyClass 개체를 만들어야합니다.

JConsole에서 속성 값은 "사용할 수 없음"입니다.

저는 JMX를 처음 접했고 분명히 누락되었습니다.

도움 주셔서 감사합니다.

답변

0

CompositeData를 반환하여 해결했습니다.

@ManagedAttribute 
public CompositeData getMyClass() { 
    return createCompositeDataForMyClass(); 
} 

저는이를 위해 CompositeDataSupport를 구축했습니다.

return new CompositeDataSupport(compositeType, itemNames, itemValues); 

여기서 compositeType은 CompositeType이고 itemNames는 String []이고 itemValues는 Object []입니다.

의 CompositeType

new CompositeType(typeName, typeDescription, itemNames, itemDescriptions, itemTypes); 

유형 이름처럼 뭔가 만들 수 있습니다, typeDescription은 문자열입니다. itemNames 및 itemDescriptions은 String []입니다. itemTypes는 OpenType []입니다. SimpleType 및 CompositeType을 사용하여 OpenType을 작성할 수 있습니다.

이 모든 객체는

import javax.management.openmbean.*; 
로 가져와야합니다
관련 문제