Автоматически отменять регистрацию MBeans (зарегистрированную Spring), когда приложение WebLogic не развернуто - PullRequest
3 голосов
/ 24 марта 2011

В моем приложении Spring (которое развернуто на сервере WebLogic) у меня есть следующие определения bean-компонентов 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 уже там.

Как автоматически отменить регистрацию MBean во время удаления приложения? Это может быть сделано через Spring или мне нужно сделать магию WebLogic для этого?

Ответы [ 3 ]

5 голосов
/ 24 марта 2011

Добавьте следующее свойство:

<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>
3 голосов
/ 06 апреля 2011

Использование REGISTRATION_REPLACE_EXISTING может решить вашу проблему, т. Е. Позволяет перезапустить приложение, но не отвечает на вопрос, который вы задали - «Как я могу автоматически отменить регистрацию MBean во время удаления приложения?».

MBeanExporter реализует DisposableBean, поэтому, когда ApplicationContext закрывается, что должно происходить, когда приложение не развернуто, вызывается его метод destroy, который отменяет регистрацию bean-компонентов и слушателей, которые были ранее зарегистрированы.

Естьразличные биты журналирования, которые будут выводить любые проблемы, возникающие при отмене регистрации.

Вы должны проверить, что ApplicationContext действительно закрывается, потому что это триггер.

2 голосов
/ 14 июля 2014

В настоящее время принятый ответ теперь ссылается на код, который с тех пор устарел. Небольшое изменение необходимо для соответствия обновлению (Spring 3.2 и выше).

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

Свойство registrationPolicy заменяет "registrationBehaviorName" в предоставленном ответе.

...