All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.squirrelframework.foundation.fsm.jmx.ManagementService Maven / Gradle / Ivy

package org.squirrelframework.foundation.fsm.jmx;

import java.lang.management.ManagementFactory;
import java.util.Hashtable;
import java.util.regex.Pattern;

import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;

import org.squirrelframework.foundation.fsm.StateMachine;
import org.squirrelframework.foundation.fsm.annotation.OnStateMachineStart;
import org.squirrelframework.foundation.fsm.annotation.OnStateMachineTerminate;

public class ManagementService {
    
    public static final String DOMAIN = "org.squirrelframework";
    
    public void register(StateMachine fsm) {
        if(fsm.isRemoteMonitorEnabled()) {
            fsm.addDeclarativeListener(this);
        }
    }
    
    @OnStateMachineStart
    public void onStateMachineStart(StateMachine fsm) {
        StateMachineManagementMBean mbean = new StateMachineManagement(fsm);
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
        ObjectName objectName = createObjectName(fsm);
        if (!mbs.isRegistered(objectName)) {
            try {
                mbs.registerMBean(mbean, objectName);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    @OnStateMachineTerminate
    public void onStateMachineTerminate(StateMachine fsm) {
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
        ObjectName objectName = createObjectName(fsm);
        if (mbs.isRegistered(objectName)) {
            try {
                mbs.unregisterMBean(objectName);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    protected ObjectName createObjectName(StateMachine fsm){
        Hashtable properties = new Hashtable(2);
        properties.put("type", quote(fsm.getClass().getSimpleName()));
        properties.put("name", quote(fsm.getIdentifier()));
        try {
            return new ObjectName(DOMAIN, properties);
        } catch (MalformedObjectNameException e) {
            throw new IllegalArgumentException();
        }
    }
    
    public static String quote(String text){
        return Pattern.compile("[:\",=*?]").matcher(text)
                .find() ? ObjectName.quote(text) : text;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy