ambari java api使用_Ambari 2.7.3接口二次开发流程

Ambari 2.7.3接口二次开发流程

1. 编写实体类(Entity)

路径: src/main/java/org/apache/ambari/server/orm/entities/自定义实体类.java

对应的数据表为 auditlog_table,添加注解@Table、@Entity、@Id、@Column;自定义属性:id和note;添加getter/setter方法。

a30456a79d9b369486058648cb79e75f.png

还需要在 /src/main/resources/META-INF/persistence.xml里面添加entityTest的信息。

95c0c9d5dd264ae238a6770cf6672b6d.png

2. 编写DAO层

路径: src/main/java/org/apache/ambari/server/orm/dao/TestUserDao.java

sql语句要遵循JPA规范,如果要指定表的某一个属性,比如id,则id的表现形式为 test.id。

706c0863f53c198b0743fc82e99404c4.png

3. 编写service层

路径: src/main/java/org/apache/ambari/server/api/services/users/TestUserService.java

a40cc3ea09ea851d2f15c2f9be7debcd.png

4. 声明Resource类型

1) Resource.java

路径: org.apache.ambari.server.controller.spi.Resource.java

49265558cec77703889589512f50f01d.png

a1f98b3b5c2068b9f07481738c75cc89.png

2) AuditlogResourceDefinition.java

路径: org.apache.ambari.server.api.resources.TestUserResourceDefinition.java

7c9916983e39d4b2218708a366a81124.png

3) ResourceInstanceFactoryImpl.java

路径: org.apache.ambari.server.api.resources.ResourceInstanceFactoryImpl.java

3a7665308e3a9a7689febfc06e2981b0.png

4)ResourceProviderFactory.java

路径: org.apache.ambari.server.controller.ResourceProviderFactory.java

ee8ac3334ad21b3bb780f7489d246103.png

5) AbstractControllerResourceProvider.java

路径: org.apache.ambari.server.controller.internal.AbstractControllerResourceProvider.java

7480444c39f2fb758ec88690a3769407.png

5. 编写resourceProvider

路径: org.apache.ambari.server.controller.internal.AuditlogResourceProvider.java

1) 继承AbstractControllerResourceProvider类

public class TestUserResourceProvider extends AbstractControllerResourceProvider

public static final Logger LOG = LoggerFactory.getLogger(TestUserResourceProvider.class);

//定义属性值

public static final String USER_RESOURCE_CATEGORY = "auditlog";

public static final String AUDIT_ID_PROPERTY_ID = "id";

public static final String AUDIT_TIME_PROPERTY_ID = "time";

public static final String AUDIT_USER_PROPERTY_ID = "user";

public static final String AUDIT_STATUS_PROPERTY_ID = "status";

public static final String AUDIT_OPERATION_PROPERTY_ID = "operation";

public static final String AUDIT_REMOTEIP_PROPERTY_ID = "remoteIp";

public static final String AUDIT_NOTE_PROPERTY_ID = "note";

public static final String USER_USERNAME_PROPERTY_ID = USER_RESOURCE_CATEGORY + "/" + AUDIT_ID_PROPERTY_ID;

public static final String USER_DISPLAY_NAME_PROPERTY_ID = USER_RESOURCE_CATEGORY + "/" + AUDIT_TIME_PROPERTY_ID;

public static final String USER_LOCAL_USERNAME_PROPERTY_ID = USER_RESOURCE_CATEGORY + "/" + AUDIT_USER_PROPERTY_ID;

public static final String USER_ACTIVE_PROPERTY_ID = USER_RESOURCE_CATEGORY + "/" + AUDIT_STATUS_PROPERTY_ID;

public static final String USER_CREATE_TIME_PROPERTY_ID = USER_RESOURCE_CATEGORY + "/" + AUDIT_OPERATION_PROPERTY_ID;

public static final String USER_CONSECUTIVE_FAILURES_PROPERTY_ID = USER_RESOURCE_CATEGORY + "/" + AUDIT_REMOTEIP_PROPERTY_ID;

public static final String USER_ADMIN_PROPERTY_ID = USER_RESOURCE_CATEGORY + "/" + AUDIT_NOTE_PROPERTY_ID;

/**

* 用户资源的键属性id。

*/

private static Map keyPropertyIds = ImmutableMap.builder()

.put(Resource.Type.TestUser, AUDIT_ID_PROPERTY_ID)

.build();

private static Set propertyIds = Sets.newHashSet(

USER_USERNAME_PROPERTY_ID,

USER_DISPLAY_NAME_PROPERTY_ID,

USER_LOCAL_USERNAME_PROPERTY_ID,

USER_ACTIVE_PROPERTY_ID,

USER_CREATE_TIME_PROPERTY_ID,

USER_CONSECUTIVE_FAILURES_PROPERTY_ID,

USER_ADMIN_PROPERTY_ID

);

/**

* 为给定的管理控制器创建新的资源提供程序。

* @param managementController

*/

@AssistedInject

TestUserResourceProvider(@Assisted AmbariManagementController managementController) {

super(Resource.Type.TestUser, propertyIds, keyPropertyIds, managementController);

setRequiredCreateAuthorizations(EnumSet.of(RoleAuthorization.AMBARI_MANAGE_USERS));

setRequiredDeleteAuthorizations(EnumSet.of(RoleAuthorization.AMBARI_MANAGE_USERS));

}

// 4) getResource()

@Override

public Set getResources(Request request, Predicate predicate)

throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {

final Set requests = new HashSet();

if (predicate == null) {

requests.add(getRequest(null));

} else {

for (Map propertyMap : getPropertyMaps(predicate)) {

requests.add(getRequest(propertyMap));

}

}

Set responses = getResources(new Command>() {

@Override

public Set invoke() throws AmbariException, AuthorizationException {

return getManagementController().getTestUser(requests);

}

});

if (LOG.isDebugEnabled()) {

LOG.debug("Found clusters matching getClusters request"

+ ", clusterResponseCount=" + responses.size());

}

Set requestedIds = getRequestPropertyIds(request, predicate);

Set resources = new HashSet();

for (TestUserResponse auditlogResponse : responses) {

ResourceImpl resource = new ResourceImpl(Resource.Type.TestUser);

String note =testUserResponse.getNote();

String[] sourceNoteArray = note.split(", ");

String time = sourceNoteArray[0].replace("T", " ").replaceAll("\\..*", "");

String user = sourceNoteArray[1].replace("User(", "").replace(")", "");

String status = note.split("Status\\(")[1].split("\\)")[0];

boolean isOperation = note.contains("Operation");

String operation = null;

if (isOperation) {

operation = note.split("Operation\\(")[1].split("\\),")[0];

} else {

operation = "";

}

boolean isRemoteIp = note.contains("RemoteIp");

String remoteIp = null;

if (isRemoteIp) {

remoteIp = note.split("RemoteIp\\(")[1].split("\\)")[0];

} else {

remoteIp = "";

}

// 该方法是判断requestedIds是否包含AUDIT_ID_PROPERTY_ID,如果包含则返回true,将值存入resource中;反之则不存入。

setResourceProperty(resource, AUDIT_ID_PROPERTY_ID,

testUserResponse.getId(), requestedIds);

setResourceProperty(resource, AUDIT_TIME_PROPERTY_ID,

time, requestedIds);

setResourceProperty(resource, AUDIT_USER_PROPERTY_ID,

user, requestedIds);

setResourceProperty(resource, AUDIT_STATUS_PROPERTY_ID,

status, requestedIds);

setResourceProperty(resource, AUDIT_OPERATION_PROPERTY_ID,

operation, requestedIds);

setResourceProperty(resource, AUDIT_REMOTEIP_PROPERTY_ID,

remoteIp, requestedIds);

setResourceProperty(resource, AUDIT_NOTE_PROPERTY_ID,

note, requestedIds);

resources.add(resource);

}

return resources;

}

//5) 类内其他方法

/**

* ----- ResourceProvider ------------------------------------------------

*/

@Override

protected Set getPKPropertyIds() {

return new HashSet<>(keyPropertyIds.values());

}

private TestUserRequest getRequest(Map properties) {

if (properties == null) {

return new TestUserRequest(null);

}

TestUserRequest request = new TestUserRequest ((String)properties.get(USER_USERNAME_PROPERTY_ID));

request.setId((String) properties.get(AUDIT_ID_PROPERTY_ID));

request.setNote((String) properties.get(AUDIT_NOTE_PROPERTY_ID));

return request;

}

7. 新建TestUserRequest类

路径: src/main/java/org/apache/ambari/server/controller/TestUserRequest.java

5546e8e90760b8ab5b1efd10532fdade.png

8. 新建TestUserResponse类

路径: src/main/java/org/apache/ambari/server/controller/TestUserResponse.java

20e7b6080506e6dc4850c2778eb02dd6.png

9.添加getTestUser()

mbariManagementController类内添加getTestUser()

路径:org.apache.ambari.server.controller.AmbariManagementController.java

ccad32f76e5d2c97d8a54726af5aa237.png

在AmbariManagementControllerImpl类内实现getTestUser()

72dcb357cfc615848e60b134ff25363f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值