4

以前org.springframework.jmx.export.annotation.@ManagedOperationはメソッドを MBean として公開していました。

メソッド名とは異なるオペレーション名が欲しいのですが、マネージオペレーションには属性がありません。

例えば:

@ManagedOperation
public synchronized void clearCache() 
{
   // do something
}

この操作を name = "ResetCache" で公開します。

4

2 に答える 2

10

に委任するだけの別のメソッドを定義しますclearCache()。インターフェイス名が紛らわしい場合は、常にこれを行います。のdescription = "resets the cache"内部@ManagedOperationも良い考えかもしれません。

@ManagedOperation(description = "resets the cache")
public void resetCache() {
   clearCache();
}
于 2012-01-18T13:55:31.600 に答える
5

カスタム アノテーションを作成します。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface JmxName {
    String value();
}

そして、のカスタムサブクラスMetadataMBeanInfoAssembler:

public class CustomMetadataMBeanInfoAssembler extends MetadataMBeanInfoAssembler {

    private String getName(final Method method) {
        final JmxName annotation = method.getAnnotation(JmxName.class);
        if (annotation != null) {
            return annotation.value();
        }else
            return method.getName();
        }
    }
    protected ModelMBeanOperationInfo createModelMBeanOperationInfo(Method method, String name, String beanKey) {
            return new ModelMBeanOperationInfo(getName(method),
                getOperationDescription(method, beanKey),
                getOperationParameters(method, beanKey),
                method.getReturnType().getName(),
                MBeanOperationInfo.UNKNOWN);
    }

}

CustomMetadataMBeanInfoAssembler を配線する (そしてアノテーションを使用する) と、動作するはずです。

<bean id="jmxAttributeSource"
      class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>

<!-- will create management interface using annotation metadata -->
<bean id="assembler"
      class="com.yourcompany.some.path.CustomMetadataMBeanInfoAssembler">
    <property name="attributeSource" ref="jmxAttributeSource"/>
</bean>
于 2012-01-18T12:49:33.807 に答える