All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.enterprise.v3.admin.DynamicInterceptor Maven / Gradle / Ivy

The newest version!
/*
 * 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 { // System.out.println("\nInitialize the environment map"); 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); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy