001: /**
002: * EasyBeans
003: * Copyright (C) 2006 Bull S.A.S.
004: * Contact: easybeans@ow2.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * --------------------------------------------------------------------------
022: * $Id: MBeanServerHelper.java 1970 2007-10-16 11:49:25Z benoitf $
023: * --------------------------------------------------------------------------
024: */package org.ow2.easybeans.jmx;
025:
026: import java.util.List;
027:
028: import javax.management.AttributeNotFoundException;
029: import javax.management.InstanceNotFoundException;
030: import javax.management.MBeanException;
031: import javax.management.MBeanServer;
032: import javax.management.MBeanServerFactory;
033: import javax.management.MalformedObjectNameException;
034: import javax.management.ObjectName;
035: import javax.management.ReflectionException;
036:
037: /**
038: * Allow to start an MBean server and get an MBeanServer.
039: * @author Florent Benoit
040: */
041: public final class MBeanServerHelper {
042:
043: /**
044: * MBeanServer.
045: */
046: private static MBeanServer mbeanServer = null;
047:
048: /**
049: * Id of the generated MBeanServer.
050: */
051: private static String idMbeanServer = null;
052:
053: /**
054: * Default domain name.
055: */
056: private static final String DEFAULT_DOMAIN_NAME = "EasyBeans";
057:
058: /**
059: * Utility class, no public constructor.
060: */
061: private MBeanServerHelper() {
062:
063: }
064:
065: /**
066: * Gets first available MBean Server.
067: * @return first available MBean server.
068: * @throws JMXRemoteException if no server is available
069: */
070: public static MBeanServer getMBeanServerServer()
071: throws JMXRemoteException {
072: if (getInternalMBeanServer() != null) {
073: return getInternalMBeanServer();
074: }
075: throw new JMXRemoteException(
076: "No running MBeanServer was found.");
077: }
078:
079: /**
080: * @return first MBean server found.
081: */
082: private static MBeanServer getInternalMBeanServer() {
083: List mbeanServers = MBeanServerFactory.findMBeanServer(null);
084: if (mbeanServers.size() > 0) {
085: return (MBeanServer) mbeanServers.get(0);
086: }
087: return null;
088: }
089:
090: /**
091: * Starts an MBeanServer if no MBeanServer is available.
092: * @throws MBeanServerException if MBeanServer can't be started
093: */
094: public static synchronized void startMBeanServer()
095: throws MBeanServerException {
096: mbeanServer = getInternalMBeanServer();
097: // Need to create one
098: if (mbeanServer == null) {
099: // Need to create an MBean server
100: mbeanServer = MBeanServerFactory
101: .createMBeanServer(DEFAULT_DOMAIN_NAME);
102: }
103:
104: ObjectName mbeanServerDelegate = null;
105: try {
106: mbeanServerDelegate = new ObjectName(
107: "JMImplementation:type=MBeanServerDelegate");
108: } catch (MalformedObjectNameException e) {
109: throw new MBeanServerException(
110: "Cannot build an objectName", e);
111: } catch (NullPointerException e) {
112: throw new MBeanServerException(
113: "Cannot build an objectName", e);
114: }
115:
116: try {
117: idMbeanServer = (String) mbeanServer.getAttribute(
118: mbeanServerDelegate, "MBeanServerId");
119: } catch (AttributeNotFoundException e) {
120: throw new MBeanServerException(
121: "Cannot get an attribute on MBeanserver.", e);
122: } catch (InstanceNotFoundException e) {
123: throw new MBeanServerException(
124: "Cannot get an attribute on MBeanserver.", e);
125: } catch (MBeanException e) {
126: throw new MBeanServerException(
127: "Cannot get an attribute on MBeanserver.", e);
128: } catch (ReflectionException e) {
129: throw new MBeanServerException(
130: "Cannot get an attribute on MBeanserver.", e);
131: }
132: }
133:
134: /**
135: * @return the id of the created MbeanServer.
136: */
137: protected static String getIdMbeanServer() {
138: return idMbeanServer;
139: }
140:
141: }
|