001: /*
002: * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved
003: *
004: * This file is part of Resin(R) Open Source
005: *
006: * Each copy or derived work must preserve the copyright notice and this
007: * notice unmodified.
008: *
009: * Resin Open Source is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU General Public License as published by
011: * the Free Software Foundation; either version 2 of the License, or
012: * (at your option) any later version.
013: *
014: * Resin Open Source is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
017: * of NON-INFRINGEMENT. See the GNU General Public License for more
018: * details.
019: *
020: * You should have received a copy of the GNU General Public License
021: * along with Resin Open Source; if not, write to the
022: * Free SoftwareFoundation, Inc.
023: * 59 Temple Place, Suite 330
024: * Boston, MA 02111-1307 USA
025: *
026: * @author Scott Ferguson
027: */
028:
029: package com.caucho.jmx;
030:
031: import com.caucho.log.Log;
032:
033: import javax.management.MBeanServer;
034: import javax.management.MBeanServerDelegate;
035: import java.lang.reflect.Method;
036: import java.util.logging.Level;
037: import java.util.logging.Logger;
038:
039: /**
040: * Resin implementation for an MBeanServer factory.
041: */
042: public class EnvironmentMBeanServerBuilder { // extends MBeanServerBuilder {
043: private static final Logger log = Log
044: .open(EnvironmentMBeanServerBuilder.class);
045:
046: private static MBeanServer _globalServer;
047:
048: private MBeanServer _mbeanServer;
049: private boolean _isInit;
050:
051: public EnvironmentMBeanServerBuilder() {
052: }
053:
054: /**
055: * Creates the delegate.
056: */
057: public MBeanServerDelegate newMBeanServerDelegate() {
058: return new MBeanServerDelegateImpl("Resin-JMX");
059: }
060:
061: /**
062: * Creates the mbean server
063: */
064: public MBeanServer newMBeanServer(String defaultDomain,
065: MBeanServer outer, MBeanServerDelegate delegate) {
066: if (!_isInit) {
067: _isInit = true;
068:
069: try {
070: Class cl = Class
071: .forName("java.lang.management.ManagementFactory");
072:
073: Method method = cl.getMethod("getPlatformMBeanServer",
074: new Class[0]);
075:
076: _mbeanServer = (MBeanServer) method.invoke(null,
077: new Object[0]);
078:
079: return _mbeanServer;
080: } catch (ClassNotFoundException e) {
081: } catch (Throwable e) {
082: log.log(Level.WARNING, e.toString(), e);
083: }
084: }
085:
086: if (_mbeanServer == null) {
087: if (defaultDomain == null)
088: defaultDomain = "resin";
089:
090: //_mbeanServer = new EnvironmentMBeanServer(defaultDomain);
091: }
092:
093: return _mbeanServer;
094: }
095:
096: /**
097: * Creates the mbean server
098: */
099: public static MBeanServer getGlobal(String defaultDomain) {
100: if (_globalServer == null) {
101: if (defaultDomain == null)
102: defaultDomain = "resin";
103:
104: MBeanServerDelegateImpl delegate;
105: delegate = new MBeanServerDelegateImpl("Resin-JMX");
106: _globalServer = new EnvironmentMBeanServer(defaultDomain,
107: delegate);
108: }
109:
110: return _globalServer;
111: }
112: }
|