1

次の 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 に通知できるように、リスナーを追加するにはどうすればよいでしょうか?

4

0 に答える 0