org.mule.module.management.agent.RmiRegistryAgent.java Source code

Java tutorial

Introduction

Here is the source code for org.mule.module.management.agent.RmiRegistryAgent.java

Source

/*
 * $Id$
 * --------------------------------------------------------------------------------------
 * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
 *
 * The software in this package is published under the terms of the CPAL v1.0
 * license, a copy of which has been included with this distribution in the
 * LICENSE.txt file.
 */

package org.mule.module.management.agent;

import org.mule.AbstractAgent;
import org.mule.api.MuleException;
import org.mule.api.lifecycle.InitialisationException;
import org.mule.config.i18n.MessageFactory;
import org.mule.util.StringUtils;

import java.net.URI;
import java.net.URISyntaxException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.ExportException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Binds to an existing RMI registry or creates a new one on a defined URI. The
 * default is <code>rmi://localhost:1099</code>
 */
public class RmiRegistryAgent extends AbstractAgent {
    /**
     * logger used by this class
     */
    protected transient Log logger = LogFactory.getLog(getClass());

    public static final String DEFAULT_HOSTNAME = "localhost";
    public static final int DEFAULT_PORT = 1099;
    private static final String PROTOCOL_PREFIX = "rmi://";
    public static final String DEFAULT_SERVER_URI = PROTOCOL_PREFIX + DEFAULT_HOSTNAME + ":" + DEFAULT_PORT;
    private Registry rmiRegistry;
    private String serverUri;
    private String host;
    private String port;
    private boolean createRegistry = true;

    public RmiRegistryAgent() {
        super("rmi-registry");
    }

    public String getDescription() {
        return "Rmi Registry: " + serverUri;
    }

    public void start() throws MuleException {
        if (serverUri == null) {
            throw new InitialisationException(MessageFactory.createStaticMessage(
                    "serverUri has not been set, this agent has not been initialized properly."), this);
        }

        URI uri;
        try {
            uri = new URI(serverUri);
        } catch (URISyntaxException e) {
            throw new InitialisationException(e, this);
        }

        if (rmiRegistry == null) {
            try {
                if (createRegistry) {
                    try {
                        rmiRegistry = LocateRegistry.createRegistry(uri.getPort());
                    } catch (ExportException e) {
                        logger.info("Registry on " + serverUri + " already bound. Attempting to use that instead");
                        rmiRegistry = LocateRegistry.getRegistry(uri.getHost(), uri.getPort());
                    }
                } else {
                    rmiRegistry = LocateRegistry.getRegistry(uri.getHost(), uri.getPort());
                }
            } catch (RemoteException e) {
                throw new InitialisationException(e, this);
            }
        }
    }

    public void stop() throws MuleException {
        // TODO how do you unbind a registry??
        rmiRegistry = null;
    }

    public void dispose() {
        // nothing to do
    }

    public void initialise() throws InitialisationException {
        if (StringUtils.isBlank(serverUri)) {
            String theHost = StringUtils.defaultIfEmpty(host, DEFAULT_HOSTNAME);
            String thePort = StringUtils.defaultIfEmpty(port, String.valueOf(DEFAULT_PORT));
            serverUri = PROTOCOL_PREFIX + theHost + ":" + thePort;
        }
    }

    public Registry getRmiRegistry() {
        return rmiRegistry;
    }

    public void setRmiRegistry(Registry rmiRegistry) {
        this.rmiRegistry = rmiRegistry;
    }

    public String getServerUri() {
        return serverUri;
    }

    public void setServerUri(String serverUri) {
        this.serverUri = serverUri;
    }

    public boolean isCreateRegistry() {
        return createRegistry;
    }

    public void setCreateRegistry(boolean createRegistry) {
        this.createRegistry = createRegistry;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }
}