blob: f89aa091958ca57a2ac64ea75ad18408c01ad415 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.karaf.management;
import java.lang.management.ManagementFactory;
import java.util.List;
import javax.management.MBeanServer;
public class MBeanServerFactory {
private boolean locateExistingServerIfPossible = false;
private String agentId;
private String defaultDomain;
private boolean registerWithFactory = true;
private MBeanServer server;
private boolean newlyRegistered = false;
public boolean isLocateExistingServerIfPossible() {
return locateExistingServerIfPossible;
}
public void setLocateExistingServerIfPossible(boolean locateExistingServerIfPossible) {
this.locateExistingServerIfPossible = locateExistingServerIfPossible;
}
public String getAgentId() {
return agentId;
}
public void setAgentId(String agentId) {
this.agentId = agentId;
}
public String getDefaultDomain() {
return defaultDomain;
}
public void setDefaultDomain(String defaultDomain) {
this.defaultDomain = defaultDomain;
}
public boolean isRegisterWithFactory() {
return registerWithFactory;
}
public void setRegisterWithFactory(boolean registerWithFactory) {
this.registerWithFactory = registerWithFactory;
}
public boolean isNewlyRegistered() {
return newlyRegistered;
}
public void setNewlyRegistered(boolean newlyRegistered) {
this.newlyRegistered = newlyRegistered;
}
public MBeanServer getServer() throws Exception {
if (this.server == null) {
init();
}
return server;
}
public void init() throws Exception {
if (this.locateExistingServerIfPossible || this.agentId != null) {
try {
List servers = javax.management.MBeanServerFactory.findMBeanServer(agentId);
MBeanServer server = null;
if (servers != null && servers.size() > 0) {
this.server = (MBeanServer) servers.get(0);
}
if (server == null && agentId == null) {
this.server = ManagementFactory.getPlatformMBeanServer();
}
if (this.server == null) {
throw new Exception("Unable to locate MBeanServer");
}
} catch (Exception ex) {
if (this.agentId != null) {
throw ex;
}
}
}
if (this.server == null) {
if (this.registerWithFactory) {
this.server = javax.management.MBeanServerFactory.createMBeanServer(this.defaultDomain);
} else {
this.server = javax.management.MBeanServerFactory.newMBeanServer(this.defaultDomain);
}
this.newlyRegistered = this.registerWithFactory;
}
}
public void destroy() throws Exception {
if (this.newlyRegistered) {
javax.management.MBeanServerFactory.releaseMBeanServer(this.server);
}
}
}