次の JMX コードを検討してください。
public class UserJMXBeanExpose {
private UserJMXBeanImpl userJMXBean;
@Required
public void setUserJMXBean(UserJMXBeanImpl userJMXBean) {
this.userJMXBean = userJMXBean;
}
public void init() throws MBeanRegistrationException, InstanceAlreadyExistsException, NotCompliantMBeanException, MalformedObjectNameException {
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName objectName = new ObjectName("MineStar:type=UserJMXBeanExpose,name=Statistics");
MineStarMBean impl = new MineStarMBean();
impl.addProperty(new PropertyAdapter("User", "User List", "java.lang.String") {
public Object getValue() {
if (userJMXBean == null) return 0;
return userJMXBean.getUserAttributes();
}
});
server.registerMBean(impl, objectName);
}
}
そして、このコード:
public class UserJMXBeanImpl implements UserJMXBean {
private List<User> userList = new ArrayList<>();
public void addUser(User user){
userList.add(user);
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
public String[] getUserAttributes(){
for(User user : this.getUserList()){
return new String[]{user.getUserId(),user.getRoles()};
}
return null;
}
}
クラスごとgetUserAttributes()
に新しく追加されたユーザーで値を更新するように、JMX にリスナーを追加するにはどうすればよいですか?UserJMXBeanImpl
新しいユーザーが impl クラスに追加されるたびに、jmx 情報を更新する必要があります。または、新しいユーザーが impl クラスに追加されるたびにデータを公開するように UserJMXBeanExpose に通知できるように、リスナーを追加するにはどうすればよいでしょうか?