2012-08-30 2 views
1

동일한 서비스를 제공하지만 여러 고객에게 브랜딩되는 화이트 라벨/멀티 테넌트 서버를 사용하고 있습니다. JMX를 사용하여 각 고객의 상태 (호출 nbr, 오류 nbr 등)를 모니터하고 싶습니다.JMX MBeans를 동적으로 인스턴스화합니다.

스프링 주스 주석을 사용하여 POJO를 연결하는 방법을 알고 있습니다 (아래 코드 참조). 고객이 원하는 MBean 하나를 정말로 원하지만, 서버 시작시 고객이 동적으로로드되기 때문에 주석을 사용하여 연결하는 방법을 알지 못합니다.

이것이 가능합니까? 그렇지 않은 경우, 시작할 때 내 MBean을 인스턴스화 할 수 있습니까? 우리가 무엇

@Component 
@ManagedResource(objectName = "TravelAPI:name=Customer") 
public class CustomerStatus extends GeneralCustomerStatus { 

    @ManagedAttribute 
    String customerId; 
    . 
    . 
    . 


} 

답변

6

은 실제로 동적 객체를 인스턴스화하는 엔티티를 가지고있는 MBeanExporter를 통해 JMX로 등록하는 것입니다. MBeanExporter 인스턴스를 팩토리 엔티티에 삽입 한 다음 MBeanExporter.registerManagedResource(...)을 호출합니다. 우리는 또한 그래서 동적 오브젝트가 그 고유하게 자신의 이름을 제공 할 수있는 NamingPolicy를 사용

... 
mbeanExporter.registerManagedResource(beanInstance); 
... 

@Required 
public void setMbeanExporter(MBeanExporter mbeanExporter) { 
    this.mbeanExporter = mbeanExporter; 
} 

: 예를 들어

우리는 그런 짓을. 그 여기에 대한 자세한 내용을 참조하십시오 : 여담으로

Change @ManagedResource objectName dynamically

, 내 SimpleJMX package 동적 객체에 도움이되는 몇 가지 코드가 있습니다.

관련 문제