com.sun.enterprise.v3.admin.DynamicInterceptor Maven / Gradle / Ivy
Show all versions of payara-micro Show documentation
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package com.sun.enterprise.v3.admin;
import com.sun.enterprise.util.LocalStringManagerImpl;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.*;
import javax.management.*;
import javax.management.loading.ClassLoaderRepository;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.rmi.ssl.SslRMIClientSocketFactory;
/**
* This Interceptor wraps the real MBeanServer so that additional interceptor code can be
* "turned on" at a later point. However, it must be possible to start the MBeanServer even before
* the JVM calls main(). Therefore,
* This class must not depend on anything that can't initialize before the JVM calls main().
* This includes things like logging which is not happy being invoked
* that early.
*
* When instantiated at startup, the instance of this class that wraps the real MBeanServer
* is termed the "Primary Interceptor". There can only be one such Interceptor for each
* real* MBeanServer. MBeanServer #0 is the Platform MBeanServer, and this class must be
* used for GlassFish. Additional MBeanServers can be created if desired.
*
* This class can also be used to implement an Interceptor which can be set for use by the Primary
* Interceptor. Such interceptors are used only for get/setAttribute(s) and invoke(), though
* the use of them could be expanded for other methods.
*
* Note that many methods are declared 'final' for efficiency. If a subclass needs
* to override a method, remove 'final'. Until that time, we might as well remain efficient,
* since most methods won't be overridden.
*/
public class DynamicInterceptor implements MBeanServer {
private volatile MBeanServer mDelegateMBeanServer;
private static final HashMap instanceConnections =
new HashMap();
private static final LocalStringManagerImpl localStrings =
new LocalStringManagerImpl(DynamicInterceptor.class);
private static final String SERVER_PREFIX = "amx:pp=/domain/servers";
private static final String CLUSTER_PREFIX = "amx:pp=/domain/clusters";
private static final String CONFIG_PREFIX = "amx:pp=/domain/configs/config[";
private static final String JSR77_PREFIX = "amx:pp=/J2EEDomain";
private static final String MON_PREFIX = "amx:pp=/mon/server-mon[";
public DynamicInterceptor() {
mDelegateMBeanServer = null;
// we must initialize this eagely in order to avoid initializing this at the time of shutdown and failing
// because the modules have been shutdown. See GLASSFISH-18109 for more details.
MbeanService.getInstance();
}
private DynamicInterceptor.ReplicationInfo getTargets(final ObjectName objectName) throws InstanceNotFoundException {
//TODO : Check if we already have a target list for this ObjectName
//create a ReplicationInfo instance
DynamicInterceptor.ReplicationInfo result = new DynamicInterceptor.ReplicationInfo();
// if this is for create Mbean
if (objectName == null) {
result.addInstance("server");
return result;
}
String oName = objectName.toString();
// Initialize the MBeanService and check if we are on DAS
if (MbeanService.getInstance() == null) {
result.addInstance("server");
return result;
}
// Now lets start analysing the Object Name.
if (objectName.getKeyProperty("type") != null &&
(objectName.getKeyProperty("type").equals("Mapper") ||
objectName.getKeyProperty("type").equals("Connector") ||
objectName.getKeyProperty("type").equals("Engine") ||
objectName.getKeyProperty("type").equals("ProtocolHandler") ||
objectName.getKeyProperty("type").equals("Service") ||
objectName.getKeyProperty("type").equals("Host") ||
objectName.getKeyProperty("type").equals("Loader") ||
objectName.getKeyProperty("type").equals("JspMonitor") ||
objectName.getKeyProperty("type").equals("Valve"))) {
result.addInstance("server");
return result;
}
//If its a MBean corresponding to config
if (isConfig(oName)) {
String configName = getName(oName);
if (configName != null && configName.endsWith("-config")) {
String targetName = configName.substring(0, configName.indexOf("-config"));
if ((!"default".equals(targetName)) && (!"server".equals(targetName))) {
result.addAllInstances(MbeanService.getInstance().getInstances(configName));
}
} else {
result.addInstance("server");
}
}
// if its a MBean corresponding to a cluster
if (isCluster(oName)) {
String targetName = getName(oName);
if (targetName != null) {
result.addAllInstances(MbeanService.getInstance().getInstances(targetName));
}
}
// if its an MBean corresponding to a server
if (isServer(oName)) {
String targetName = getName(oName);
if (targetName != null) {
result.addInstance(targetName);
if (!("server".equals(targetName)))
result.setTargetIsAnInstance(true);
} else {
result.addInstance("server");
}
}
// If its an MBean corresponding to a JSR77 managed object
if (isJSR77(oName, objectName)) {
if (objectName.getKeyProperty("j2eeType") != null &&
objectName.getKeyProperty("j2eeType").equals("J2EEDomain")) {
result.addInstance("server");
} else if (objectName.getKeyProperty("j2eeType") != null &&
objectName.getKeyProperty("j2eeType").equals("J2EEServer")) {
String targetInstance = objectName.getKeyProperty("name");
if (MbeanService.getInstance().isValidServer(targetInstance)) {
result.addInstance("server");
result.addInstance(targetInstance);
}
} else {
String targetInstance = objectName.getKeyProperty("J2EEServer");
if (MbeanService.getInstance().isValidServer(targetInstance)) {
result.addInstance(targetInstance);
}
}
}
// If its an monitoring MBean
if (isMonitoring(oName)) {
String targetName = getName(oName);
result.addInstance(targetName);
if (!("server".equals(targetName)))
result.setTargetIsAnInstance(true);
}
// If its a generic query
if ("amx:*".equals(oName) || "*.*".equals(oName)) {
result.addInstance("server");
result.addAllInstances(MbeanService.getInstance().getAllInstances());
}
if (objectName.getKeyProperty("type") != null) {
if (objectName.getKeyProperty("type").equals("domain-root") ||
objectName.getKeyProperty("type").equals("domain") ||
objectName.getKeyProperty("type").equals("resources") ||
objectName.getKeyProperty("type").equals("system-applications") ||
objectName.getKeyProperty("type").equals("applications") ||
objectName.getKeyProperty("type").equals("realms") ||
objectName.getKeyProperty("type").equalsIgnoreCase("MBeanServerDelegate")) {
result.addInstance("server");
}
}
if (oName.startsWith("amx-support") || oName.startsWith("jmxremote")) {
result.addInstance("server");
}
if ((MbeanService.getInstance().isDas())) {
result.addInstance("server");
return result;
}
// What abouut JVM
return result;
}
private DynamicInterceptor.ReplicationInfo getInstance(final ObjectName o) throws InstanceNotFoundException {
return getTargets(o);
}
private MBeanServerConnection getInstanceConnection(String instanceName) throws InstanceNotFoundException {
// first check if this is on the same instance as the one in the argument
// In such a case we delegate to the local MBeanServer
if (MbeanService.getInstance().isInstance(instanceName)) {
return getDelegateMBeanServer();
}
// check if this needs a secure connection
if (MbeanService.getInstance().isSecureJMX(instanceName)) {
return getSecureInstanceConnection(instanceName);
}
synchronized (instanceConnections) {
if (!instanceConnections.containsKey(instanceName)) {
try {
String urlStr = "service:jmx:rmi:///jndi/rmi://" +
MbeanService.getInstance().getHost(instanceName) + ":" +
MbeanService.getInstance().getJMXPort(instanceName) + "/jmxrmi";
JMXServiceURL url = new JMXServiceURL(urlStr);
JMXConnector jmxConn = JMXConnectorFactory.connect(url);
MBeanServerConnection conn = jmxConn.getMBeanServerConnection();
instanceConnections.put(instanceName, conn);
} catch (Exception ex) {
throw new InstanceNotFoundException(ex.getLocalizedMessage());
}
}
return instanceConnections.get(instanceName);
}
}
private MBeanServerConnection getSecureInstanceConnection(String instanceName) throws InstanceNotFoundException {
synchronized (instanceConnections) {
if (!instanceConnections.containsKey(instanceName)) {
try {
final Map env = new HashMap();
// Provide the SSL/TLS-based RMI Client Socket Factory required
// by the JNDI/RMI Registry Service Provider to communicate with
// the SSL/TLS-protected RMI Registry
SslRMIClientSocketFactory csf = new SslRMIClientSocketFactory();
env.put("com.sun.jndi.rmi.factory.socket", csf);
String urlStr = "service:jmx:rmi:///jndi/rmi://" +
MbeanService.getInstance().getHost(instanceName) + ":" +
MbeanService.getInstance().getJMXPort(instanceName) + "/jmxrmi";
JMXServiceURL url = new JMXServiceURL(urlStr);
JMXConnector jmxConn = JMXConnectorFactory.connect(url, env);
MBeanServerConnection conn = jmxConn.getMBeanServerConnection();
instanceConnections.put(instanceName, conn);
} catch (Exception ex) {
throw new InstanceNotFoundException(ex.getLocalizedMessage());
}
}
return instanceConnections.get(instanceName);
}
}
/**
* Get the MBeanServer to which the request can be delegated.
*/
public MBeanServer getDelegateMBeanServer() {
return mDelegateMBeanServer;
}
public void setDelegateMBeanServer(final MBeanServer server) {
mDelegateMBeanServer = server;
}
public Object invoke(final ObjectName objectName, final String operationName,
final Object[] params, final String[] signature)
throws ReflectionException, InstanceNotFoundException, MBeanException {
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
Object returnValue = null;
try {
for (String svr : result.getInstances()) {
if ("server".equals(svr)) {
returnValue = getDelegateMBeanServer().invoke(objectName, operationName, params, signature);
} else {
returnValue = getInstanceConnection(svr).invoke(objectName, operationName, params, signature);
}
}
} catch (IOException ioex) {
throw new ReflectionException(ioex);
}
return returnValue;
}
public final Object getAttribute(final ObjectName objectName, final String attributeName)
throws InstanceNotFoundException, AttributeNotFoundException, MBeanException, ReflectionException {
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
if (!result.isTargetAnInstance())
return getDelegateMBeanServer().getAttribute(objectName, attributeName);
try {
return getInstanceConnection(result.getInstances().get(0)).getAttribute(objectName, attributeName);
} catch (IOException ioex) {
throw new ReflectionException(ioex);
}
}
public void setAttribute(final ObjectName objectName, final Attribute attribute) throws
InstanceNotFoundException, AttributeNotFoundException, MBeanException,
ReflectionException, InvalidAttributeValueException {
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
try {
if (result.isTargetAnInstance()) {
getInstanceConnection(result.getInstances().get(0)).setAttribute(objectName, attribute);
return;
}
for (String svr : result.getInstances()) {
if ("server".equals(svr))
getDelegateMBeanServer().setAttribute(objectName, attribute);
else
getInstanceConnection(svr).setAttribute(objectName, attribute);
}
} catch (IOException ioex) {
throw new ReflectionException(ioex);
}
}
public final AttributeList getAttributes(final ObjectName objectName, final String[] attrNames)
throws InstanceNotFoundException, ReflectionException {
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
try {
if (result.isTargetAnInstance())
return getInstanceConnection(result.getInstances().get(0)).getAttributes(objectName, attrNames);
else
return getDelegateMBeanServer().getAttributes(objectName, attrNames);
} catch (IOException ioex) {
throw new ReflectionException(ioex);
}
}
public AttributeList setAttributes(final ObjectName objectName, final AttributeList attributeList)
throws InstanceNotFoundException, ReflectionException {
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
AttributeList ret = null;
try {
if (result.isTargetAnInstance())
return getInstanceConnection(result.getInstances().get(0)).setAttributes(objectName, attributeList);
for (String svr : result.getInstances()) {
if ((result.getInstances().get(0).equals("server")))
ret = getDelegateMBeanServer().setAttributes(objectName, attributeList);
else
ret = getInstanceConnection(svr).setAttributes(objectName, attributeList);
}
} catch (IOException ioex) {
throw new ReflectionException(ioex);
}
return ret;
}
public final ObjectInstance registerMBean(final Object obj, final ObjectName objectName)
throws NotCompliantMBeanException, MBeanRegistrationException, InstanceAlreadyExistsException {
return getDelegateMBeanServer().registerMBean(obj, objectName);
}
public final void unregisterMBean(final ObjectName objectName)
throws InstanceNotFoundException, MBeanRegistrationException {
// System.out.println("Unregistering MBean :"+objectName.toString());
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
try {
if (result.isTargetAnInstance()) {
getInstanceConnection(result.getInstances().get(0)).unregisterMBean(objectName);
return;
}
for (String svr : result.getInstances()) {
if ("server".equals(svr))
getDelegateMBeanServer().unregisterMBean(objectName);
else
getInstanceConnection(svr).unregisterMBean(objectName);
}
} catch (IOException io) {
throw new MBeanRegistrationException(io);
}
}
public final Integer getMBeanCount() {
return getDelegateMBeanServer().getMBeanCount();
}
@Override
public final Set queryMBeans(final ObjectName objectName, final QueryExp expr) {
//if(objectName == null)
// return Collections.EMPTY_SET;
try {
Set returnVal = null;
List instance = getInstance(objectName).getInstances();
for (String ins : instance) {
Set tmp;
if (ins.equals("server"))
tmp = getDelegateMBeanServer().queryMBeans(objectName, expr);
else
tmp = getInstanceConnection(ins).queryMBeans(objectName, expr);
if (returnVal == null)
returnVal = tmp;
else
returnVal.addAll(tmp);
}
return returnVal;
} catch (Exception e) {
return Collections.EMPTY_SET;
}
}
public final MBeanInfo getMBeanInfo(final ObjectName objectName)
throws InstanceNotFoundException, IntrospectionException, ReflectionException {
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
try {
if (result.isTargetAnInstance())
return getInstanceConnection(result.getInstances().get(0)).getMBeanInfo(objectName);
else
return getDelegateMBeanServer().getMBeanInfo(objectName);
} catch (IOException ioex) {
throw new ReflectionException(ioex);
}
}
public final boolean isRegistered(final ObjectName objectName) {
if (objectName == null)
return false;
try {
List instance = getInstance(objectName).getInstances();
for (String instanceName : instance) {
if (instanceName.equals(System.getProperty("com.sun.aas.instanceName"))) {
return getDelegateMBeanServer().isRegistered(objectName);
} else {
continue;
}
}
return false;
/*if((instance.get(0).equals("server")))
return getDelegateMBeanServer().isRegistered( objectName );
return getInstanceConnection(instance.get(0)).isRegistered(objectName); */
} catch (Exception ex) {
return false;
}
}
public final void addNotificationListener(final ObjectName objectName,
final NotificationListener notificationListener,
final NotificationFilter notificationFilter, final Object obj)
throws InstanceNotFoundException {
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
try {
if (result.isTargetAnInstance()) {
getInstanceConnection(result.getInstances().get(0)).addNotificationListener(
objectName, notificationListener, notificationFilter, obj);
return;
}
for (String svr : result.getInstances()) {
if ("server".equals(svr))
getDelegateMBeanServer().addNotificationListener(objectName,
notificationListener, notificationFilter, obj);
else
getInstanceConnection(svr).addNotificationListener(objectName, notificationListener,
notificationFilter, obj);
}
} catch (IOException ioex) {
throw new InstanceNotFoundException(ioex.getLocalizedMessage());
}
}
public final void addNotificationListener(final ObjectName objectName, final ObjectName objectName1,
final NotificationFilter notificationFilter, final Object obj)
throws InstanceNotFoundException {
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
try {
if (result.isTargetAnInstance()) {
getInstanceConnection(result.getInstances().get(0)).addNotificationListener(
objectName, objectName1, notificationFilter, obj);
return;
}
for (String svr : result.getInstances()) {
if ("server".equals(svr))
getDelegateMBeanServer().addNotificationListener(objectName,
objectName1, notificationFilter, obj);
else
getInstanceConnection(svr).addNotificationListener(objectName, objectName1,
notificationFilter, obj);
}
} catch (IOException ioex) {
throw new InstanceNotFoundException(ioex.getLocalizedMessage());
}
}
public final ObjectInstance createMBean(final String str, final ObjectName objectName)
throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException,
MBeanException, NotCompliantMBeanException {
return createMBean(str, objectName, (Object[]) null, (String[]) null);
}
public final ObjectInstance createMBean(final String str, final ObjectName objectName,
final ObjectName objectName2)
throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException,
NotCompliantMBeanException, InstanceNotFoundException {
return createMBean(str, objectName, objectName2, (Object[]) null, (String[]) null);
}
public final ObjectInstance createMBean(final String str, final ObjectName objectName, final Object[] obj,
final String[] str3)
throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException,
MBeanException, NotCompliantMBeanException {
try {
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
ObjectInstance ret = null;
if (result.isTargetAnInstance())
return getInstanceConnection(result.getInstances().get(0)).createMBean(str, objectName, obj, str3);
for (String svr : result.getInstances())
if (svr.equals("server"))
ret = getDelegateMBeanServer().createMBean(str, objectName, obj, str3);
else
ret = getInstanceConnection(svr).createMBean(str, objectName, obj, str3);
return ret;
} catch (InstanceNotFoundException ex) {
throw new MBeanException(ex);
} catch (IOException ex) {
throw new MBeanException(ex);
}
}
public final ObjectInstance createMBean(final String str, final ObjectName objectName,
final ObjectName objectName2, final Object[] obj, final String[] str4)
throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException,
MBeanException, NotCompliantMBeanException, InstanceNotFoundException {
try {
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
ObjectInstance ret = null;
if (result.isTargetAnInstance())
return getInstanceConnection(result.getInstances().get(0)).createMBean(str, objectName,
objectName2, obj, str4);
for (String svr : result.getInstances())
if (svr.equals("server"))
ret = getDelegateMBeanServer().createMBean(str, objectName, objectName2, obj, str4);
else
ret = getInstanceConnection(svr).createMBean(str, objectName, objectName2, obj, str4);
return ret;
} catch (InstanceNotFoundException ex) {
throw new MBeanException(ex);
} catch (IOException ex) {
throw new MBeanException(ex);
}
}
public final ObjectInputStream deserialize(String str, byte[] values)
throws OperationsException, ReflectionException {
return getDelegateMBeanServer().deserialize(str, values);
}
public final ObjectInputStream deserialize(final ObjectName objectName, final byte[] values)
throws InstanceNotFoundException, OperationsException {
return getDelegateMBeanServer().deserialize(objectName, values);
}
public final ObjectInputStream deserialize(final String str, final ObjectName objectName, byte[] values)
throws InstanceNotFoundException, OperationsException, ReflectionException {
return getDelegateMBeanServer().deserialize(str, objectName, values);
}
public final String getDefaultDomain() {
return getDelegateMBeanServer().getDefaultDomain();
}
public final ObjectInstance getObjectInstance(ObjectName objectName) throws InstanceNotFoundException {
if (objectName == null)
throw new InstanceNotFoundException();
List instance = getInstance(objectName).getInstances();
if (instance.size() != 1)
throw new InstanceNotFoundException(localStrings.getLocalString("interceptor.objectName.wrongservernames",
"This mbean call does not support multiple target instances"));
if ((instance.get(0).equals("server")))
return getDelegateMBeanServer().getObjectInstance(objectName);
try {
return getInstanceConnection(instance.get(0)).getObjectInstance(objectName);
} catch (IOException ioex) {
throw new InstanceNotFoundException(ioex.getLocalizedMessage());
}
}
public final Object instantiate(final String str) throws ReflectionException, MBeanException {
return getDelegateMBeanServer().instantiate(str);
}
public final Object instantiate(final String str, final ObjectName objectName)
throws ReflectionException, MBeanException, InstanceNotFoundException {
if (objectName == null)
throw new InstanceNotFoundException();
return getDelegateMBeanServer().instantiate(str, objectName);
}
public final Object instantiate(final String str, final Object[] obj, final String[] str2)
throws ReflectionException, MBeanException {
return getDelegateMBeanServer().instantiate(str, obj, str2);
}
public final Object instantiate(final String str, final ObjectName objectName, final Object[] obj,
final String[] str3)
throws ReflectionException, MBeanException, InstanceNotFoundException {
if (objectName == null)
throw new InstanceNotFoundException();
return getDelegateMBeanServer().instantiate(str, objectName, obj, str3);
}
public final boolean isInstanceOf(final ObjectName objectName, final String str)
throws InstanceNotFoundException {
if (objectName == null)
throw new InstanceNotFoundException();
List instance = getInstance(objectName).getInstances();
if (instance.size() != 1)
throw new InstanceNotFoundException(localStrings.getLocalString("interceptor.objectName.wrongservernames",
"This mbean call does not support multiple target instances"));
if ((instance.get(0).equals("server")))
return getDelegateMBeanServer().isInstanceOf(objectName, str);
try {
return getInstanceConnection(instance.get(0)).isInstanceOf(objectName, str);
} catch (IOException ioex) {
throw new InstanceNotFoundException(ioex.getLocalizedMessage());
}
}
public final Set queryNames(final ObjectName objectName, final QueryExp queryExp) {
Set returnVal = null;
//if(objectName == null)
//return Collections.EMPTY_SET;
List instance;
try {
instance = getInstance(objectName).getInstances();
} catch (InstanceNotFoundException e) {
return Collections.EMPTY_SET;
}
for (String ins : instance) {
Set tmp = null;
if (ins.equals("server")) {
tmp = getDelegateMBeanServer().queryNames(objectName, queryExp);
} else {
try {
tmp = getInstanceConnection(ins).queryNames(objectName, queryExp);
} catch (Exception e) {
//Swallowing this intentionally
//Because this can happen only if the instance is down / not responding
}
}
if (tmp != null) {
if (returnVal == null)
returnVal = tmp;
else
returnVal.addAll(tmp);
}
}
if (returnVal == null)
return Collections.EMPTY_SET;
return returnVal;
}
public final void removeNotificationListener(final ObjectName objectName, final ObjectName objectName1)
throws InstanceNotFoundException, ListenerNotFoundException {
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
try {
if (result.isTargetAnInstance()) {
getInstanceConnection(result.getInstances().get(0)).removeNotificationListener(objectName, objectName1);
return;
}
for (String svr : result.getInstances()) {
if (svr.equals("server"))
getDelegateMBeanServer().removeNotificationListener(objectName, objectName1);
else
getInstanceConnection(svr).removeNotificationListener(objectName, objectName1);
}
} catch (IOException ioex) {
throw new InstanceNotFoundException(ioex.getLocalizedMessage());
}
}
public final void removeNotificationListener(final ObjectName objectName,
final NotificationListener notificationListener)
throws InstanceNotFoundException, ListenerNotFoundException {
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
try {
if (result.isTargetAnInstance()) {
getInstanceConnection(result.getInstances().get(0)).removeNotificationListener(objectName, notificationListener);
return;
}
for (String svr : result.getInstances()) {
if (svr.equals("server"))
getDelegateMBeanServer().removeNotificationListener(objectName, notificationListener);
else
getInstanceConnection(svr).removeNotificationListener(objectName, notificationListener);
}
} catch (IOException ioex) {
throw new InstanceNotFoundException(ioex.getLocalizedMessage());
}
}
public final void removeNotificationListener(final ObjectName objectName,
final NotificationListener notificationListener,
final NotificationFilter notificationFilter, final Object obj)
throws InstanceNotFoundException, ListenerNotFoundException {
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
try {
if (result.isTargetAnInstance()) {
getInstanceConnection(result.getInstances().get(0)).removeNotificationListener(objectName,
notificationListener, notificationFilter, obj);
return;
}
for (String svr : result.getInstances()) {
if (svr.equals("server"))
getDelegateMBeanServer().removeNotificationListener(objectName,
notificationListener, notificationFilter, obj);
else
getInstanceConnection(svr).removeNotificationListener(objectName,
notificationListener, notificationFilter, obj);
}
} catch (IOException ioex) {
throw new InstanceNotFoundException(ioex.getLocalizedMessage());
}
}
public final void removeNotificationListener(final ObjectName objectName, final ObjectName objectName1,
final NotificationFilter notificationFilter, final Object obj)
throws InstanceNotFoundException, ListenerNotFoundException {
if (objectName == null)
throw new InstanceNotFoundException();
DynamicInterceptor.ReplicationInfo result = getInstance(objectName);
try {
if (result.isTargetAnInstance()) {
getInstanceConnection(result.getInstances().get(0)).removeNotificationListener(objectName,
objectName1, notificationFilter, obj);
return;
}
for (String svr : result.getInstances()) {
if (svr.equals("server"))
getDelegateMBeanServer().removeNotificationListener(objectName,
objectName1, notificationFilter, obj);
else
getInstanceConnection(svr).removeNotificationListener(objectName,
objectName1, notificationFilter, obj);
}
} catch (IOException ioex) {
throw new InstanceNotFoundException(ioex.getLocalizedMessage());
}
}
public final ClassLoader getClassLoader(final ObjectName objectName) throws InstanceNotFoundException {
if (objectName == null)
throw new InstanceNotFoundException();
return getDelegateMBeanServer().getClassLoader(objectName);
}
public final ClassLoader getClassLoaderFor(final ObjectName objectName) throws InstanceNotFoundException {
if (objectName == null)
throw new InstanceNotFoundException();
return getDelegateMBeanServer().getClassLoaderFor(objectName);
}
public final ClassLoaderRepository getClassLoaderRepository() {
return getDelegateMBeanServer().getClassLoaderRepository();
}
public final String[] getDomains() {
return getDelegateMBeanServer().getDomains();
}
private boolean isConfig(String oName) {
return oName.startsWith(CONFIG_PREFIX);
}
private boolean isCluster(String oName) {
return oName.startsWith(CLUSTER_PREFIX);
}
private boolean isServer(String oName) {
return oName.startsWith(SERVER_PREFIX);
}
private boolean isJSR77(String oName, ObjectName o) {
if (o.getKeyProperty("j2eeType") != null) {
return true;
} else if (oName.startsWith(JSR77_PREFIX)) {
return true;
} else {
return false;
}
}
private boolean isMonitoring(String oName) {
return oName.startsWith(MON_PREFIX);
}
private String getName(String oName) {
if (oName.indexOf('[') != -1) {
return oName.substring(oName.indexOf('[') + 1, oName.indexOf(']'));
} else {
return null;
}
}
private static class ReplicationInfo {
private boolean instanceTarget = false;
private List instances = new ArrayList();
boolean isTargetAnInstance() {
return instanceTarget;
}
void setTargetIsAnInstance(boolean b) {
instanceTarget = b;
}
List getInstances() {
return instances;
}
void addInstance(String s) {
if (!instances.contains(s)) {
instances.add(s);
}
}
void addAllInstances(List list) {
instances.addAll(list);
}
}
}