spring MBeanInfoFactory 源码
springboot MBeanInfoFactory 代码
文件路径:/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/MBeanInfoFactory.java
/*
* Copyright 2012-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.actuate.endpoint.jmx;
import java.util.List;
import javax.management.MBeanInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanParameterInfo;
import javax.management.modelmbean.ModelMBeanAttributeInfo;
import javax.management.modelmbean.ModelMBeanConstructorInfo;
import javax.management.modelmbean.ModelMBeanInfoSupport;
import javax.management.modelmbean.ModelMBeanNotificationInfo;
import javax.management.modelmbean.ModelMBeanOperationInfo;
import org.springframework.boot.actuate.endpoint.OperationType;
/**
* Factory to create {@link MBeanInfo} from an {@link ExposableJmxEndpoint}.
*
* @author Stephane Nicoll
* @author Phillip Webb
*/
class MBeanInfoFactory {
private static final ModelMBeanAttributeInfo[] NO_ATTRIBUTES = new ModelMBeanAttributeInfo[0];
private static final ModelMBeanConstructorInfo[] NO_CONSTRUCTORS = new ModelMBeanConstructorInfo[0];
private static final ModelMBeanNotificationInfo[] NO_NOTIFICATIONS = new ModelMBeanNotificationInfo[0];
private final JmxOperationResponseMapper responseMapper;
MBeanInfoFactory(JmxOperationResponseMapper responseMapper) {
this.responseMapper = responseMapper;
}
MBeanInfo getMBeanInfo(ExposableJmxEndpoint endpoint) {
String className = EndpointMBean.class.getName();
String description = getDescription(endpoint);
ModelMBeanOperationInfo[] operations = getMBeanOperations(endpoint);
return new ModelMBeanInfoSupport(className, description, NO_ATTRIBUTES, NO_CONSTRUCTORS, operations,
NO_NOTIFICATIONS);
}
private String getDescription(ExposableJmxEndpoint endpoint) {
return "MBean operations for endpoint " + endpoint.getEndpointId();
}
private ModelMBeanOperationInfo[] getMBeanOperations(ExposableJmxEndpoint endpoint) {
return endpoint.getOperations().stream().map(this::getMBeanOperation).toArray(ModelMBeanOperationInfo[]::new);
}
private ModelMBeanOperationInfo getMBeanOperation(JmxOperation operation) {
String name = operation.getName();
String description = operation.getDescription();
MBeanParameterInfo[] signature = getSignature(operation.getParameters());
String type = getType(operation.getOutputType());
int impact = getImpact(operation.getType());
return new ModelMBeanOperationInfo(name, description, signature, type, impact);
}
private MBeanParameterInfo[] getSignature(List<JmxOperationParameter> parameters) {
return parameters.stream().map(this::getMBeanParameter).toArray(MBeanParameterInfo[]::new);
}
private MBeanParameterInfo getMBeanParameter(JmxOperationParameter parameter) {
return new MBeanParameterInfo(parameter.getName(), parameter.getType().getName(), parameter.getDescription());
}
private int getImpact(OperationType operationType) {
if (operationType == OperationType.READ) {
return MBeanOperationInfo.INFO;
}
if (operationType == OperationType.WRITE || operationType == OperationType.DELETE) {
return MBeanOperationInfo.ACTION;
}
return MBeanOperationInfo.UNKNOWN;
}
private String getType(Class<?> outputType) {
return this.responseMapper.mapResponseType(outputType).getName();
}
}
相关信息
相关文章
spring EndpointObjectNameFactory 源码
spring ExposableJmxEndpoint 源码
spring JacksonJmxOperationResponseMapper 源码
spring JmxEndpointsSupplier 源码
spring JmxOperationParameter 源码
0
赞
- 所属分类: 后端技术
- 本文标签: Spring Boot Java Spring
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦