⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mx4jagent.java

📁 提供ESB 应用mule源代码 提供ESB 应用mule源代码
💻 JAVA
字号:
/* * $Id: Mx4jAgent.java 11964 2008-06-05 19:31:23Z dfeist $ * -------------------------------------------------------------------------------------- * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.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.MuleManifest;import org.mule.config.i18n.CoreMessages;import org.mule.config.i18n.MessageFactory;import org.mule.module.management.mbean.MBeanServerFactory;import org.mule.module.management.support.AutoDiscoveryJmxSupportFactory;import org.mule.module.management.support.JmxSupport;import org.mule.module.management.support.JmxSupportFactory;import org.mule.module.xml.util.XMLUtils;import org.mule.util.BeanUtils;import org.mule.util.ClassUtils;import org.mule.util.StringUtils;import org.mule.util.SystemUtils;import java.net.URI;import java.util.HashMap;import java.util.Map;import javax.management.InstanceNotFoundException;import javax.management.MBeanException;import javax.management.MBeanRegistrationException;import javax.management.MBeanServer;import javax.management.MalformedObjectNameException;import javax.management.ObjectName;import javax.management.ReflectionException;import javax.xml.transform.TransformerFactoryConfigurationError;import mx4j.log.CommonsLogger;import mx4j.log.Log;import mx4j.tools.adaptor.http.HttpAdaptor;import mx4j.tools.adaptor.http.XSLTProcessor;import mx4j.tools.adaptor.ssl.SSLAdaptorServerSocketFactory;import mx4j.tools.adaptor.ssl.SSLAdaptorServerSocketFactoryMBean;import org.apache.commons.logging.LogFactory;/** * <code>Mx4jAgent</code> configures an Mx4J Http Adaptor for Jmx management, * statistics and configuration viewing of a Mule instance. * <p/> * TODO MULE-1353 */public class Mx4jAgent extends AbstractAgent{    public static final String HTTP_ADAPTER_OBJECT_NAME = "name=Mx4jHttpAdapter";    protected static final String DEFAULT_PATH_IN_JAR = StringUtils.replaceChars(ClassUtils.getPackageName(Mx4jAgent.class), '.', '/') +                                                        "/http/xsl";    private static final org.apache.commons.logging.Log logger = LogFactory.getLog(Mx4jAgent.class);    private static final String PROTOCOL_PREFIX = "http://";    public static final String DEFAULT_HOSTNAME = "localhost";    public static final int DEFAULT_PORT = 9999;    public static final String DEFAULT_JMX_ADAPTOR_URL = PROTOCOL_PREFIX + DEFAULT_HOSTNAME + ":" + DEFAULT_PORT;    private String jmxAdaptorUrl;    private String host;    private String port;    private HttpAdaptor adaptor;    private MBeanServer mBeanServer;    private ObjectName adaptorName;    // Adaptor overrides    private String login;    private String password;    private String authenticationMethod = "basic";    // TODO AH check how an embedded scenario can be handled (no mule home)     private String xslFilePath = System.getProperty("mule.home") + "/lib/mule/mule-module-management-" +            MuleManifest.getProductVersion() + ".jar";    private String pathInJar = DEFAULT_PATH_IN_JAR;    private boolean cacheXsl = true;    // SSL/TLS socket factory config    private Map socketFactoryProperties = new HashMap();    private JmxSupportFactory jmxSupportFactory = AutoDiscoveryJmxSupportFactory.getInstance();    private JmxSupport jmxSupport;    public Mx4jAgent()    {        super("jmx-mx4j-adaptor");    }    protected HttpAdaptor createAdaptor() throws Exception    {        Log.redirectTo(new CommonsLogger());        URI uri = new URI(StringUtils.stripToEmpty(jmxAdaptorUrl));        adaptor = new HttpAdaptor(uri.getPort(), uri.getHost());        // Set the XSLT Processor with any local overrides        XSLTProcessor processor;        try        {            processor = new XSLTProcessor();        }        catch (TransformerFactoryConfigurationError e)        {            System.setProperty("javax.xml.transform.TransformerFactory", XMLUtils.TRANSFORMER_FACTORY_JDK5);            processor = new XSLTProcessor();        }        if (StringUtils.isNotBlank(xslFilePath))        {            processor.setFile(xslFilePath.trim());        }        if (StringUtils.isNotBlank(pathInJar))        {            processor.setPathInJar(pathInJar.trim());        }        processor.setUseCache(cacheXsl);        adaptor.setProcessor(processor);        // Set endpoint authentication if required        if (login != null)        {            adaptor.addAuthorization(login, password);            adaptor.setAuthenticationMethod(authenticationMethod);        }        if (socketFactoryProperties != null && !socketFactoryProperties.isEmpty())        {            SSLAdaptorServerSocketFactoryMBean factory;            if (SystemUtils.isIbmJDK())            {                factory = new IBMSslAdapterServerSocketFactory();            }            else            {                // BEA are using Sun's JSSE, so no extra checks necessary                factory = new SSLAdaptorServerSocketFactory();            }            BeanUtils.populateWithoutFail(factory, socketFactoryProperties, true);            adaptor.setSocketFactory(factory);        }        return adaptor;    }    public void initialise() throws InitialisationException    {        try        {            jmxSupport = jmxSupportFactory.getJmxSupport();            mBeanServer = MBeanServerFactory.getOrCreateMBeanServer();            if (StringUtils.isBlank(jmxAdaptorUrl))            {                if (StringUtils.isNotBlank(host) && StringUtils.isNotBlank(port))                {                    jmxAdaptorUrl = PROTOCOL_PREFIX + host + ":" + port;                }                else                {                    jmxAdaptorUrl = DEFAULT_JMX_ADAPTOR_URL;                }            }            adaptor = createAdaptor();            adaptorName = jmxSupport.getObjectName(jmxSupport.getDomainName(muleContext) + ":" + HTTP_ADAPTER_OBJECT_NAME);            unregisterMBeansIfNecessary();            mBeanServer.registerMBean(adaptor, adaptorName);        }        catch (Exception e)        {            throw new InitialisationException(CoreMessages.failedToStart("mx4j agent"), e, this);        }    }    public void start() throws MuleException    {        if (mBeanServer == null)        {            throw new InitialisationException(MessageFactory.createStaticMessage("mBeanServer has not yet been created"), this);        }                try        {            mBeanServer.invoke(adaptorName, "start", null, null);        }        catch (InstanceNotFoundException e)        {            throw new JmxManagementException(                CoreMessages.failedToStart("Mx4j agent"), adaptorName, e);        }        catch (MBeanException e)        {            throw new JmxManagementException(                CoreMessages.failedToStart("Mx4j agent"), adaptorName, e);        }        catch (ReflectionException e)        {            // ignore        }    }    public void stop() throws MuleException    {        if (mBeanServer == null)        {            return;        }        try        {            mBeanServer.invoke(adaptorName, "stop", null, null);        }        catch (InstanceNotFoundException e)        {            throw new JmxManagementException(                CoreMessages.failedToStop("Mx4j agent"), adaptorName, e);        }        catch (MBeanException e)        {            throw new JmxManagementException(                CoreMessages.failedToStop("Mx4j agent"), adaptorName, e);        }        catch (ReflectionException e)        {            // ignore        }    }    /**     * Unregister all Mx4j MBeans if there are any left over the old deployment     */    protected void unregisterMBeansIfNecessary()        throws MalformedObjectNameException, InstanceNotFoundException, MBeanRegistrationException    {        if (mBeanServer != null && mBeanServer.isRegistered(adaptorName))        {            mBeanServer.unregisterMBean(adaptorName);        }    }    /* @see org.mule.api.lifecycle.Disposable#dispose() */    public void dispose()    {        try        {            stop();        }        catch (Exception e)        {            logger.warn("Failed to stop Mx4jAgent: " + e.getMessage());        }        finally        {            try            {                unregisterMBeansIfNecessary();            }            catch (Exception e)            {                logger.error("Couldn't unregister MBean: "                             + (adaptorName != null ? adaptorName.getCanonicalName() : "null"), e);            }        }    }    /* @see org.mule.api.context.Agent#registered() */    public void registered()    {        // nothing to do    }    /* @see org.mule.api.context.Agent#unregistered() */    public void unregistered()    {        // nothing to do    }    // /////////////////////////////////////////////////////////////////////////    // Getters and setters    // /////////////////////////////////////////////////////////////////////////    /* @see org.mule.api.context.Agent#getDescription() */    public String getDescription()    {        return "MX4J Http adaptor: " + jmxAdaptorUrl;    }    /** @return Returns the jmxAdaptorUrl. */    public String getJmxAdaptorUrl()    {        return jmxAdaptorUrl;    }    /** @param jmxAdaptorUrl The jmxAdaptorUrl to set. */    public void setJmxAdaptorUrl(String jmxAdaptorUrl)    {        this.jmxAdaptorUrl = jmxAdaptorUrl;    }    public Map getSocketFactoryProperties()    {        return socketFactoryProperties;    }    public void setSocketFactoryProperties(Map socketFactoryProperties)    {        this.socketFactoryProperties = socketFactoryProperties;    }    public String getLogin()    {        return login;    }    public void setLogin(String login)    {        this.login = login;    }    public String getPassword()    {        return password;    }    public void setPassword(String password)    {        this.password = password;    }    public String getAuthenticationMethod()    {        return authenticationMethod;    }    public void setAuthenticationMethod(String authenticationMethod)    {        this.authenticationMethod = authenticationMethod;    }    public String getXslFilePath()    {        return xslFilePath;    }    public void setXslFilePath(String xslFilePath)    {        this.xslFilePath = xslFilePath;    }    public String getPathInJar()    {        return pathInJar;    }    public void setPathInJar(String pathInJar)    {        this.pathInJar = pathInJar;    }    public boolean isCacheXsl()    {        return cacheXsl;    }    public void setCacheXsl(boolean cacheXsl)    {        this.cacheXsl = cacheXsl;    }    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;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -