001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.geronimo.system.jmx;
018
019 import java.lang.management.ManagementFactory;
020 import java.util.ArrayList;
021
022 import javax.management.MBeanServer;
023 import javax.management.MBeanServerFactory;
024
025 import org.apache.geronimo.gbean.GBeanInfo;
026 import org.apache.geronimo.gbean.GBeanInfoBuilder;
027
028 /**
029 * Creates a real mbean server of finds an existing one with the specified mbeanServerId
030 *
031 * @version $Rev: 806547 $ $Date: 2009-08-21 21:36:27 +0800 (Fri, 21 Aug 2009) $
032 */
033 public class RealMBeanServerReference implements MBeanServerReference {
034 private static final String GERONIMO_DEFAULT_DOMAIN = "geronimo";
035
036 private MBeanServer mbeanServer;
037
038 public RealMBeanServerReference(boolean usePlatformMBeanServer,
039 String mbeanServerId) throws MBeanServerNotFound {
040 if (usePlatformMBeanServer) {
041 mbeanServer = ManagementFactory.getPlatformMBeanServer();
042 } else {
043 ArrayList servers = MBeanServerFactory.findMBeanServer(mbeanServerId);
044 if (servers.size() == 0) {
045 mbeanServer = MBeanServerFactory.createMBeanServer(GERONIMO_DEFAULT_DOMAIN);
046 } else if (servers.size() > 1) {
047 throw new MBeanServerNotFound(servers.size() + " MBeanServers were found with the agent id " + mbeanServerId);
048 } else {
049 mbeanServer = (MBeanServer) servers.get(0);
050 }
051 }
052 }
053
054 /**
055 * Finds an existing MBeanServer with default domain GERONIMO_DEFAULT_DOMAIN
056 * or creates a new one if there isn't any.
057 */
058 public RealMBeanServerReference() {
059 // Find all MBeanServers
060 ArrayList<MBeanServer> servers = MBeanServerFactory.findMBeanServer(null);
061 for (MBeanServer server : servers) {
062 // Look for one with default domain GERONIMO_DEFAULT_DOMAIN
063 if (GERONIMO_DEFAULT_DOMAIN.equals(server.getDefaultDomain())) {
064 mbeanServer = server;
065 break;
066 }
067 }
068 if (mbeanServer == null) {
069 // No MBeanServer with default domain GERONIMO_DEFAULT_DOMAIN exists. Create one.
070 mbeanServer = MBeanServerFactory.createMBeanServer(GERONIMO_DEFAULT_DOMAIN);
071 }
072 }
073
074 public MBeanServer getMBeanServer() {
075 return mbeanServer;
076 }
077 public static final GBeanInfo GBEAN_INFO;
078
079 static {
080 GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(RealMBeanServerReference.class);
081 infoFactory.addAttribute("mbeanServerId", String.class, true);
082 infoFactory.addAttribute("usePlatformMBeanServer", boolean.class, true);
083 infoFactory.setConstructor(new String[]{"usePlatformMBeanServer", "mbeanServerId"});
084 GBEAN_INFO = infoFactory.getBeanInfo();
085 }
086
087 public static GBeanInfo getGBeanInfo() {
088 return GBEAN_INFO;
089 }
090 }