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

org.jolokia.service.discovery.JolokiaDiscovery Maven / Gradle / Ivy

There is a newer version: 2.2.2
Show newest version
package org.jolokia.service.discovery;

import java.io.IOException;
import java.util.List;

import javax.management.ObjectName;

import org.jolokia.server.core.service.api.*;
import org.json.simple.JSONArray;

import static org.jolokia.service.discovery.AbstractDiscoveryMessage.MessageType.QUERY;

/**
 * Discover Jolokia agents via multicast
 *
 * @author roland
 * @since 31.01.14
 */
public class JolokiaDiscovery extends AbstractJolokiaService
        implements JolokiaDiscoveryMBean, JolokiaService.Init {

    // Name has we have been registered
    private ObjectName objectName;

    /**
     * Constructor to be called when called as a service
     * @param pOrder service order
     */
    public JolokiaDiscovery(int pOrder) {
        super(JolokiaService.Init.class,pOrder);
    }

    /**
     * Constructor called for programmatic lookup of the agent
     *
     */
    public JolokiaDiscovery() {
        super(JolokiaService.Init.class, 0);
    }

    @Override
    public void init(JolokiaContext pJolokiaContext) {
        super.init(pJolokiaContext);
        objectName = registerJolokiaMBean(JolokiaDiscovery.OBJECT_NAME,this);
    }

    @Override
    public void destroy() throws Exception {
        unregisterJolokiaMBean(objectName);
        super.destroy(); // Important, must be after any method using a JolokiaContext
    }

    /** {@inheritDoc} */
    public List lookupAgents() throws IOException {
        return lookupAgentsWithTimeout(1000);
    }

    /** {@inheritDoc} */
    public List lookupAgentsWithTimeout(int pTimeout) throws IOException {
        JolokiaContext ctx = getJolokiaContext();
        DiscoveryOutgoingMessage out =
                new DiscoveryOutgoingMessage.Builder(QUERY)
                        .agentId(ctx.getAgentDetails().getAgentId())
                        .build();
        List discovered = MulticastUtil.sendQueryAndCollectAnswers(out, pTimeout, ctx);
        JSONArray ret = new JSONArray();
        for (DiscoveryIncomingMessage in : discovered) {
            ret.add(in.getAgentDetails().toJSONObject());
        }
        return ret;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy