package com.bagri.tools.vvm.manager;
import java.util.HashSet;
import java.util.Set;
import javax.management.MBeanServerConnection;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import com.sun.tools.visualvm.application.Application;
import com.sun.tools.visualvm.application.jvm.Jvm;
import com.sun.tools.visualvm.application.type.ApplicationType;
import com.sun.tools.visualvm.application.type.ApplicationTypeFactory;
import com.sun.tools.visualvm.application.type.MainClassApplicationTypeFactory;
import com.sun.tools.visualvm.core.datasupport.DataRemovedListener;
import com.sun.tools.visualvm.tools.jmx.JmxModel;
import com.sun.tools.visualvm.tools.jmx.JmxModelFactory;
public class BagriApplicationTypeProvider extends MainClassApplicationTypeFactory implements DataRemovedListener<Application> {
private static BagriApplicationTypeProvider instance = new BagriApplicationTypeProvider();
private Set<Application> admins = new HashSet<>();
@Override
public ApplicationType createApplicationTypeFor(Application app, Jvm jvm, String mainClass) {
if ("com.bagri.server.hazelcast.BagriCacheServer".equals(mainClass)) {
String role = jvm.getSystemProperties().getProperty("bdb.cluster.node.role", "");
boolean isAdmin = "admin".equalsIgnoreCase(role);
if (isAdmin) {
admins.add(app);
app.notifyWhenRemoved(this);
}
return new BagriApplicationType(app.getPid(), isAdmin);
}
return null;
}
@Override
public void dataRemoved(Application source) {
admins.remove(source);
}
private boolean isAdminApp(Application app) {
return admins.contains(app);
}
static void initialize() {
ApplicationTypeFactory.getDefault().registerProvider(instance);
}
static void uninitialize() {
ApplicationTypeFactory.getDefault().unregisterProvider(instance);
}
static boolean isBargiAdminApp(Application application) {
return instance.isAdminApp(application);
}
}