Java tutorial
/* * ============================================================================ * The Apache Software License, Version 1.1 * ============================================================================ * * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without modifica- * tion, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowledgment: "This product includes software * developed by SuperBonBon Industries (http://www.sbbi.net/)." * Alternately, this acknowledgment may appear in the software itself, if * and wherever such third-party acknowledgments normally appear. * * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be * used to endorse or promote products derived from this software without * prior written permission. For written permission, please contact * info@sbbi.net. * * 5. Products derived from this software may not be called * "SuperBonBon Industries", nor may "SBBI" appear in their name, * without prior written permission of SuperBonBon Industries. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * This software consists of voluntary contributions made by many individuals * on behalf of SuperBonBon Industries. For more information on * SuperBonBon Industries, please see <http://www.sbbi.net/>. */ package net.sbbi.upnp.jmx; import javax.management.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import mx4j.log.CommonsLogger; /** * JMX manager for UPNP devices, entry point for the MX4j HTTP admin console * @author <a href="mailto:superbonbon@sbbi.net">SuperBonBon</a> * @version 1.0 */ public class JMXManager { private final static JMXManager instance = new JMXManager(); private final static Log log = LogFactory.getLog(JMXManager.class); private ObjectName discBeanName = null; private MBeanServer server; public final static JMXManager getInstance() { return instance; } public final static JMXManager getNewInstance(MBeanServer server) { JMXManager manager = new JMXManager(); manager.setMBeanserver(server); return manager; } private void setMBeanserver(MBeanServer server) { this.server = server; } public void startup(int discoveryTimeout) throws Exception { discBeanName = new ObjectName("UPNPLib discovery:name=Discovery MBean_" + this.hashCode()); UPNPDiscoveryMBean bean = new UPNPDiscovery(discoveryTimeout, true, true); server.registerMBean(bean, discBeanName); } public void shutdown() { try { server.unregisterMBean(discBeanName); } catch (Exception ex) { log.error("Error occured during UPNPDiscoveryMBean unregistration", ex); } } private MBeanServer initMBeanServer(MBeanServerConfig conf) throws Exception { mx4j.log.Log.redirectTo(new CommonsLogger()); // make sure that MX4j Server builder is used String oldSysProp = System.getProperty("javax.management.builder.initial"); System.setProperty("javax.management.builder.initial", "mx4j.server.MX4JMBeanServerBuilder"); MBeanServer server = MBeanServerFactory.createMBeanServer("UPNPLib"); if (oldSysProp != null) { System.setProperty("javax.management.builder.initial", oldSysProp); } ObjectName serverName = new ObjectName("Http:name=HttpAdaptor"); server.createMBean("mx4j.tools.adaptor.http.HttpAdaptor", serverName, null); // set attributes server.setAttribute(serverName, new Attribute("Port", new Integer(conf.adapterAdapterPort))); Boolean allowWanBool = new Boolean(conf.allowWan); if (allowWanBool.booleanValue()) { server.setAttribute(serverName, new Attribute("Host", "0.0.0.0")); } else { server.setAttribute(serverName, new Attribute("Host", "localhost")); } ObjectName processorName = new ObjectName("Http:name=XSLTProcessor"); server.createMBean("mx4j.tools.adaptor.http.XSLTProcessor", processorName, null); server.setAttribute(processorName, new Attribute("LocaleString", conf.locale)); server.setAttribute(processorName, new Attribute("UseCache", Boolean.FALSE)); server.setAttribute(processorName, new Attribute("PathInJar", "net/sbbi/jmx/xsl")); server.setAttribute(serverName, new Attribute("ProcessorName", processorName)); // add user names server.invoke(serverName, "addAuthorization", new Object[] { conf.adapterUserName, conf.adapterPassword }, new String[] { "java.lang.String", "java.lang.String" }); // use basic authentication server.setAttribute(serverName, new Attribute("AuthenticationMethod", "basic")); // starts the server server.invoke(serverName, "start", null, null); return server; } public final static void main(String args[]) { if (args.length != 6) { log.info( "Usage : JMXManager <AdapterPort> <UserName> <Password> <AllowWan> <Locale> <discoveryTimeout>"); System.exit(0); } try { JMXManager manager = JMXManager.getInstance(); MBeanServerConfig conf = new MBeanServerConfig(args); manager.setMBeanserver(manager.initMBeanServer(conf)); manager.startup(conf.discoveryTimeout); } catch (Exception ex) { log.error("Error during startup", ex); } } private final static class MBeanServerConfig { private String adapterAdapterPort; private String adapterUserName; private String adapterPassword; private String allowWan; private String locale; private int discoveryTimeout; private MBeanServerConfig(String args[]) { adapterAdapterPort = args[0]; adapterUserName = args[1]; adapterPassword = args[2]; allowWan = args[3]; locale = args[4]; discoveryTimeout = Integer.parseInt(args[5]); } } }