2011-03-24 3 views
3

: 그것은 새로운 MBean에 등록자동 등록 해제되는 MBean (WebLogic 서버에 배포) 내 Spring 애플리케이션 나는 다음과 스프링 빈 정의가에서

<context:mbean-server /> 

<bean id="mbeanExporter" class="org.springframework.jmx.export.MBeanExporter"> 
    <property name="beans"> 
     <map> 
      <entry key="SpringBeans:name=hibernateStatisticsMBean,subsystem=${subsystem}" value-ref="hibernateStatisticsMBean" />       
     </map> 
    </property> 
</bean> 

<bean name="hibernateStatisticsMBean" class="org.hibernate.jmx.StatisticsService"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

응용 프로그램입니다 전개되고 완벽하게 작동합니다. 그러나 응용 프로그램을 배포 해제하고 다시 배포하면 이미 존재하는 MBean에 대해 불만을 토로합니다.

응용 프로그램 배포 취소 중에 MBean을 자동으로 등록 취소 할 수 있습니까? Spring을 통해 수행 할 수 있습니까? 아니면 WebLogic을위한 마법을 사용해야합니까?

+0

ContextLoaderListener를 사용하여 콘텍스트를 생성 했습니까? 컨텍스트가 닫히지 않아서 다른 문제가 발생할 수 있기 때문일 수 있습니다. – gkamal

답변

5

는 다음과 같은 속성을 추가

<property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING"/> 

그래서 당신의 MBeanExporter에이 같다고 :

<bean id="mbeanExporter" class="org.springframework.jmx.export.MBeanExporter"> 
    <property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING"/> 
    <property name="beans"> 
     <map> 
      <entry key="SpringBeans:name=hibernateStatisticsMBean,subsystem=${subsystem}" value-ref="hibernateStatisticsMBean" />       
     </map> 
    </property> 
</bean> 
2

는 응용 프로그램을 다시 시작 할 수 있습니다 즉, 귀하의 문제를 해결할 수 있습니다 REGISTRATION_REPLACE_EXISTING를 사용하지만 해결되지 않습니다 질문 : "응용 프로그램 배포 취소 중에 MBean을 자동으로 등록 취소 할 수 있습니까?"

MBeanExporter는 DisposeBean을 구현하므로 ApplicationContext가 닫힐 때 응용 프로그램을 배포 취소 할 때 발생해야하며 destroy 메소드가 호출되어 이전에 등록 된 Bean과 수신기를 등록 취소합니다.

등록을 취소하는 동안 발생하는 모든 문제를 출력하는 다양한 로깅 비트가 있습니다.

트리거이므로 ApplicationContext가 실제로 닫혀 있는지 확인해야합니다.

1

현재 허용되는 답변은 이후에 비추천 된 코드를 참조합니다. 업데이트를 준수하려면 약간의 변경이 필요합니다 (Spring 3.2 이상).

<property name="registrationPolicy"> 
    <util:constant static-field="org.springframework.jmx.support.RegistrationPolicy.REPLACE_EXISTING" /> 
</property> 

제공된 "대답"의 "registrationBehaviorName"속성은 "registrationPehyspace"속성을 대체합니다.

+0

Spring이 열거 형 이름을 인식하기 때문에 로 단순화 할 수 있습니다. – berhauz

관련 문제