--- old/jdk/src/java.management/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java 2017-02-01 16:12:52.000000000 +0000
+++ /dev/null 2017-02-01 16:12:52.000000000 +0000
@@ -1,1834 +0,0 @@
-/*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package javax.management.remote.rmi;
-
-import java.io.IOException;
-import java.rmi.MarshalledObject;
-import java.rmi.UnmarshalException;
-import java.rmi.server.Unreferenced;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.Permission;
-import java.security.Permissions;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.security.ProtectionDomain;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-
-import javax.management.*;
-import javax.management.remote.JMXServerErrorException;
-import javax.management.remote.NotificationResult;
-import javax.security.auth.Subject;
-import sun.reflect.misc.ReflectUtil;
-
-import static com.sun.jmx.mbeanserver.Util.cast;
-import com.sun.jmx.remote.internal.ServerCommunicatorAdmin;
-import com.sun.jmx.remote.internal.ServerNotifForwarder;
-import com.sun.jmx.remote.security.JMXSubjectDomainCombiner;
-import com.sun.jmx.remote.security.SubjectDelegator;
-import com.sun.jmx.remote.util.ClassLoaderWithRepository;
-import com.sun.jmx.remote.util.ClassLogger;
-import com.sun.jmx.remote.util.EnvHelp;
-import com.sun.jmx.remote.util.OrderClassLoaders;
-import javax.management.loading.ClassLoaderRepository;
-
-/**
- *
Implementation of the {@link RMIConnection} interface. User
- * code will not usually reference this class.
- *
- * @since 1.5
- */
-/*
- * Notice that we omit the type parameter from MarshalledObject everywhere,
- * even though it would add useful information to the documentation. The
- * reason is that it was only added in Mustang (Java SE 6), whereas versions
- * 1.4 and 2.0 of the JMX API must be implementable on Tiger per our
- * commitments for JSR 255.
- */
-public class RMIConnectionImpl implements RMIConnection, Unreferenced {
-
- /**
- * Constructs a new {@link RMIConnection}. This connection can be
- * used with the JRMP transport. This object does
- * not export itself: it is the responsibility of the caller to
- * export it appropriately (see {@link
- * RMIJRMPServerImpl#makeClient(String,Subject)}).
- *
- * @param rmiServer The RMIServerImpl object for which this
- * connection is created. The behavior is unspecified if this
- * parameter is null.
- * @param connectionId The ID for this connection. The behavior
- * is unspecified if this parameter is null.
- * @param defaultClassLoader The default ClassLoader to be used
- * when deserializing marshalled objects. Can be null, to signify
- * the bootstrap class loader.
- * @param subject the authenticated subject to be used for
- * authorization. Can be null, to signify that no subject has
- * been authenticated.
- * @param env the environment containing attributes for the new
- * RMIServerImpl. Can be null, equivalent to an
- * empty map.
- */
- public RMIConnectionImpl(RMIServerImpl rmiServer,
- String connectionId,
- ClassLoader defaultClassLoader,
- Subject subject,
- Map env) {
- if (rmiServer == null || connectionId == null)
- throw new NullPointerException("Illegal null argument");
- if (env == null)
- env = Collections.emptyMap();
- this.rmiServer = rmiServer;
- this.connectionId = connectionId;
- this.defaultClassLoader = defaultClassLoader;
-
- this.subjectDelegator = new SubjectDelegator();
- this.subject = subject;
- if (subject == null) {
- this.acc = null;
- this.removeCallerContext = false;
- } else {
- this.removeCallerContext =
- SubjectDelegator.checkRemoveCallerContext(subject);
- if (this.removeCallerContext) {
- this.acc =
- JMXSubjectDomainCombiner.getDomainCombinerContext(subject);
- } else {
- this.acc =
- JMXSubjectDomainCombiner.getContext(subject);
- }
- }
- this.mbeanServer = rmiServer.getMBeanServer();
-
- final ClassLoader dcl = defaultClassLoader;
-
- ClassLoaderRepository repository = AccessController.doPrivileged(
- new PrivilegedAction() {
- public ClassLoaderRepository run() {
- return mbeanServer.getClassLoaderRepository();
- }
- },
- withPermissions(new MBeanPermission("*", "getClassLoaderRepository"))
- );
- this.classLoaderWithRepository = AccessController.doPrivileged(
- new PrivilegedAction() {
- public ClassLoaderWithRepository run() {
- return new ClassLoaderWithRepository(
- repository,
- dcl);
- }
- },
- withPermissions(new RuntimePermission("createClassLoader"))
- );
-
- this.defaultContextClassLoader =
- AccessController.doPrivileged(
- new PrivilegedAction() {
- @Override
- public ClassLoader run() {
- return new CombinedClassLoader(Thread.currentThread().getContextClassLoader(),
- dcl);
- }
- });
-
- serverCommunicatorAdmin = new
- RMIServerCommunicatorAdmin(EnvHelp.getServerConnectionTimeout(env));
-
- this.env = env;
- }
-
- private static AccessControlContext withPermissions(Permission ... perms){
- Permissions col = new Permissions();
-
- for (Permission thePerm : perms ) {
- col.add(thePerm);
- }
-
- final ProtectionDomain pd = new ProtectionDomain(null, col);
- return new AccessControlContext( new ProtectionDomain[] { pd });
- }
-
- private synchronized ServerNotifForwarder getServerNotifFwd() {
- // Lazily created when first use. Mainly when
- // addNotificationListener is first called.
- if (serverNotifForwarder == null)
- serverNotifForwarder =
- new ServerNotifForwarder(mbeanServer,
- env,
- rmiServer.getNotifBuffer(),
- connectionId);
- return serverNotifForwarder;
- }
-
- public String getConnectionId() throws IOException {
- // We should call reqIncomming() here... shouldn't we?
- return connectionId;
- }
-
- public void close() throws IOException {
- final boolean debug = logger.debugOn();
- final String idstr = (debug?"["+this.toString()+"]":null);
-
- synchronized (this) {
- if (terminated) {
- if (debug) logger.debug("close",idstr + " already terminated.");
- return;
- }
-
- if (debug) logger.debug("close",idstr + " closing.");
-
- terminated = true;
-
- if (serverCommunicatorAdmin != null) {
- serverCommunicatorAdmin.terminate();
- }
-
- if (serverNotifForwarder != null) {
- serverNotifForwarder.terminate();
- }
- }
-
- rmiServer.clientClosed(this);
-
- if (debug) logger.debug("close",idstr + " closed.");
- }
-
- public void unreferenced() {
- logger.debug("unreferenced", "called");
- try {
- close();
- logger.debug("unreferenced", "done");
- } catch (IOException e) {
- logger.fine("unreferenced", e);
- }
- }
-
- //-------------------------------------------------------------------------
- // MBeanServerConnection Wrapper
- //-------------------------------------------------------------------------
-
- public ObjectInstance createMBean(String className,
- ObjectName name,
- Subject delegationSubject)
- throws
- ReflectionException,
- InstanceAlreadyExistsException,
- MBeanRegistrationException,
- MBeanException,
- NotCompliantMBeanException,
- IOException {
- try {
- final Object params[] =
- new Object[] { className, name };
-
- if (logger.debugOn())
- logger.debug("createMBean(String,ObjectName)",
- "connectionId=" + connectionId +", className=" +
- className+", name=" + name);
-
- return (ObjectInstance)
- doPrivilegedOperation(
- CREATE_MBEAN,
- params,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof ReflectionException)
- throw (ReflectionException) e;
- if (e instanceof InstanceAlreadyExistsException)
- throw (InstanceAlreadyExistsException) e;
- if (e instanceof MBeanRegistrationException)
- throw (MBeanRegistrationException) e;
- if (e instanceof MBeanException)
- throw (MBeanException) e;
- if (e instanceof NotCompliantMBeanException)
- throw (NotCompliantMBeanException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- public ObjectInstance createMBean(String className,
- ObjectName name,
- ObjectName loaderName,
- Subject delegationSubject)
- throws
- ReflectionException,
- InstanceAlreadyExistsException,
- MBeanRegistrationException,
- MBeanException,
- NotCompliantMBeanException,
- InstanceNotFoundException,
- IOException {
- try {
- final Object params[] =
- new Object[] { className, name, loaderName };
-
- if (logger.debugOn())
- logger.debug("createMBean(String,ObjectName,ObjectName)",
- "connectionId=" + connectionId
- +", className=" + className
- +", name=" + name
- +", loaderName=" + loaderName);
-
- return (ObjectInstance)
- doPrivilegedOperation(
- CREATE_MBEAN_LOADER,
- params,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof ReflectionException)
- throw (ReflectionException) e;
- if (e instanceof InstanceAlreadyExistsException)
- throw (InstanceAlreadyExistsException) e;
- if (e instanceof MBeanRegistrationException)
- throw (MBeanRegistrationException) e;
- if (e instanceof MBeanException)
- throw (MBeanException) e;
- if (e instanceof NotCompliantMBeanException)
- throw (NotCompliantMBeanException) e;
- if (e instanceof InstanceNotFoundException)
- throw (InstanceNotFoundException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- @SuppressWarnings("rawtypes") // MarshalledObject
- public ObjectInstance createMBean(String className,
- ObjectName name,
- MarshalledObject params,
- String signature[],
- Subject delegationSubject)
- throws
- ReflectionException,
- InstanceAlreadyExistsException,
- MBeanRegistrationException,
- MBeanException,
- NotCompliantMBeanException,
- IOException {
-
- final Object[] values;
- final boolean debug = logger.debugOn();
-
- if (debug) logger.debug(
- "createMBean(String,ObjectName,Object[],String[])",
- "connectionId=" + connectionId
- +", unwrapping parameters using classLoaderWithRepository.");
-
- values =
- nullIsEmpty(unwrap(params, classLoaderWithRepository, Object[].class,delegationSubject));
-
- try {
- final Object params2[] =
- new Object[] { className, name, values,
- nullIsEmpty(signature) };
-
- if (debug)
- logger.debug("createMBean(String,ObjectName,Object[],String[])",
- "connectionId=" + connectionId
- +", className=" + className
- +", name=" + name
- +", signature=" + strings(signature));
-
- return (ObjectInstance)
- doPrivilegedOperation(
- CREATE_MBEAN_PARAMS,
- params2,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof ReflectionException)
- throw (ReflectionException) e;
- if (e instanceof InstanceAlreadyExistsException)
- throw (InstanceAlreadyExistsException) e;
- if (e instanceof MBeanRegistrationException)
- throw (MBeanRegistrationException) e;
- if (e instanceof MBeanException)
- throw (MBeanException) e;
- if (e instanceof NotCompliantMBeanException)
- throw (NotCompliantMBeanException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- @SuppressWarnings("rawtypes") // MarshalledObject
- public ObjectInstance createMBean(String className,
- ObjectName name,
- ObjectName loaderName,
- MarshalledObject params,
- String signature[],
- Subject delegationSubject)
- throws
- ReflectionException,
- InstanceAlreadyExistsException,
- MBeanRegistrationException,
- MBeanException,
- NotCompliantMBeanException,
- InstanceNotFoundException,
- IOException {
-
- final Object[] values;
- final boolean debug = logger.debugOn();
-
- if (debug) logger.debug(
- "createMBean(String,ObjectName,ObjectName,Object[],String[])",
- "connectionId=" + connectionId
- +", unwrapping params with MBean extended ClassLoader.");
-
- values = nullIsEmpty(unwrap(params,
- getClassLoader(loaderName),
- defaultClassLoader,
- Object[].class,delegationSubject));
-
- try {
- final Object params2[] =
- new Object[] { className, name, loaderName, values,
- nullIsEmpty(signature) };
-
- if (debug) logger.debug(
- "createMBean(String,ObjectName,ObjectName,Object[],String[])",
- "connectionId=" + connectionId
- +", className=" + className
- +", name=" + name
- +", loaderName=" + loaderName
- +", signature=" + strings(signature));
-
- return (ObjectInstance)
- doPrivilegedOperation(
- CREATE_MBEAN_LOADER_PARAMS,
- params2,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof ReflectionException)
- throw (ReflectionException) e;
- if (e instanceof InstanceAlreadyExistsException)
- throw (InstanceAlreadyExistsException) e;
- if (e instanceof MBeanRegistrationException)
- throw (MBeanRegistrationException) e;
- if (e instanceof MBeanException)
- throw (MBeanException) e;
- if (e instanceof NotCompliantMBeanException)
- throw (NotCompliantMBeanException) e;
- if (e instanceof InstanceNotFoundException)
- throw (InstanceNotFoundException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- public void unregisterMBean(ObjectName name, Subject delegationSubject)
- throws
- InstanceNotFoundException,
- MBeanRegistrationException,
- IOException {
- try {
- final Object params[] = new Object[] { name };
-
- if (logger.debugOn()) logger.debug("unregisterMBean",
- "connectionId=" + connectionId
- +", name="+name);
-
- doPrivilegedOperation(
- UNREGISTER_MBEAN,
- params,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof InstanceNotFoundException)
- throw (InstanceNotFoundException) e;
- if (e instanceof MBeanRegistrationException)
- throw (MBeanRegistrationException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- public ObjectInstance getObjectInstance(ObjectName name,
- Subject delegationSubject)
- throws
- InstanceNotFoundException,
- IOException {
-
- checkNonNull("ObjectName", name);
-
- try {
- final Object params[] = new Object[] { name };
-
- if (logger.debugOn()) logger.debug("getObjectInstance",
- "connectionId=" + connectionId
- +", name="+name);
-
- return (ObjectInstance)
- doPrivilegedOperation(
- GET_OBJECT_INSTANCE,
- params,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof InstanceNotFoundException)
- throw (InstanceNotFoundException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- @SuppressWarnings("rawtypes") // MarshalledObject
- public Set
- queryMBeans(ObjectName name,
- MarshalledObject query,
- Subject delegationSubject)
- throws IOException {
- final QueryExp queryValue;
- final boolean debug=logger.debugOn();
-
- if (debug) logger.debug("queryMBeans",
- "connectionId=" + connectionId
- +" unwrapping query with defaultClassLoader.");
-
- queryValue = unwrap(query, defaultContextClassLoader, QueryExp.class, delegationSubject);
-
- try {
- final Object params[] = new Object[] { name, queryValue };
-
- if (debug) logger.debug("queryMBeans",
- "connectionId=" + connectionId
- +", name="+name +", query="+query);
-
- return cast(
- doPrivilegedOperation(
- QUERY_MBEANS,
- params,
- delegationSubject));
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- @SuppressWarnings("rawtypes") // MarshalledObject
- public Set
- queryNames(ObjectName name,
- MarshalledObject query,
- Subject delegationSubject)
- throws IOException {
- final QueryExp queryValue;
- final boolean debug=logger.debugOn();
-
- if (debug) logger.debug("queryNames",
- "connectionId=" + connectionId
- +" unwrapping query with defaultClassLoader.");
-
- queryValue = unwrap(query, defaultContextClassLoader, QueryExp.class, delegationSubject);
-
- try {
- final Object params[] = new Object[] { name, queryValue };
-
- if (debug) logger.debug("queryNames",
- "connectionId=" + connectionId
- +", name="+name +", query="+query);
-
- return cast(
- doPrivilegedOperation(
- QUERY_NAMES,
- params,
- delegationSubject));
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- public boolean isRegistered(ObjectName name,
- Subject delegationSubject) throws IOException {
- try {
- final Object params[] = new Object[] { name };
- return ((Boolean)
- doPrivilegedOperation(
- IS_REGISTERED,
- params,
- delegationSubject)).booleanValue();
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- public Integer getMBeanCount(Subject delegationSubject)
- throws IOException {
- try {
- final Object params[] = new Object[] { };
-
- if (logger.debugOn()) logger.debug("getMBeanCount",
- "connectionId=" + connectionId);
-
- return (Integer)
- doPrivilegedOperation(
- GET_MBEAN_COUNT,
- params,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- public Object getAttribute(ObjectName name,
- String attribute,
- Subject delegationSubject)
- throws
- MBeanException,
- AttributeNotFoundException,
- InstanceNotFoundException,
- ReflectionException,
- IOException {
- try {
- final Object params[] = new Object[] { name, attribute };
- if (logger.debugOn()) logger.debug("getAttribute",
- "connectionId=" + connectionId
- +", name=" + name
- +", attribute="+ attribute);
-
- return
- doPrivilegedOperation(
- GET_ATTRIBUTE,
- params,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof MBeanException)
- throw (MBeanException) e;
- if (e instanceof AttributeNotFoundException)
- throw (AttributeNotFoundException) e;
- if (e instanceof InstanceNotFoundException)
- throw (InstanceNotFoundException) e;
- if (e instanceof ReflectionException)
- throw (ReflectionException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- public AttributeList getAttributes(ObjectName name,
- String[] attributes,
- Subject delegationSubject)
- throws
- InstanceNotFoundException,
- ReflectionException,
- IOException {
- try {
- final Object params[] = new Object[] { name, attributes };
-
- if (logger.debugOn()) logger.debug("getAttributes",
- "connectionId=" + connectionId
- +", name=" + name
- +", attributes="+ strings(attributes));
-
- return (AttributeList)
- doPrivilegedOperation(
- GET_ATTRIBUTES,
- params,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof InstanceNotFoundException)
- throw (InstanceNotFoundException) e;
- if (e instanceof ReflectionException)
- throw (ReflectionException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- @SuppressWarnings("rawtypes") // MarshalledObject
- public void setAttribute(ObjectName name,
- MarshalledObject attribute,
- Subject delegationSubject)
- throws
- InstanceNotFoundException,
- AttributeNotFoundException,
- InvalidAttributeValueException,
- MBeanException,
- ReflectionException,
- IOException {
- final Attribute attr;
- final boolean debug=logger.debugOn();
-
- if (debug) logger.debug("setAttribute",
- "connectionId=" + connectionId
- +" unwrapping attribute with MBean extended ClassLoader.");
-
- attr = unwrap(attribute,
- getClassLoaderFor(name),
- defaultClassLoader,
- Attribute.class, delegationSubject);
-
- try {
- final Object params[] = new Object[] { name, attr };
-
- if (debug) logger.debug("setAttribute",
- "connectionId=" + connectionId
- +", name="+name
- +", attribute name="+attr.getName());
-
- doPrivilegedOperation(
- SET_ATTRIBUTE,
- params,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof InstanceNotFoundException)
- throw (InstanceNotFoundException) e;
- if (e instanceof AttributeNotFoundException)
- throw (AttributeNotFoundException) e;
- if (e instanceof InvalidAttributeValueException)
- throw (InvalidAttributeValueException) e;
- if (e instanceof MBeanException)
- throw (MBeanException) e;
- if (e instanceof ReflectionException)
- throw (ReflectionException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- @SuppressWarnings("rawtypes") // MarshalledObject
- public AttributeList setAttributes(ObjectName name,
- MarshalledObject attributes,
- Subject delegationSubject)
- throws
- InstanceNotFoundException,
- ReflectionException,
- IOException {
- final AttributeList attrlist;
- final boolean debug=logger.debugOn();
-
- if (debug) logger.debug("setAttributes",
- "connectionId=" + connectionId
- +" unwrapping attributes with MBean extended ClassLoader.");
-
- attrlist =
- unwrap(attributes,
- getClassLoaderFor(name),
- defaultClassLoader,
- AttributeList.class, delegationSubject);
-
- try {
- final Object params[] = new Object[] { name, attrlist };
-
- if (debug) logger.debug("setAttributes",
- "connectionId=" + connectionId
- +", name="+name
- +", attribute names="+RMIConnector.getAttributesNames(attrlist));
-
- return (AttributeList)
- doPrivilegedOperation(
- SET_ATTRIBUTES,
- params,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof InstanceNotFoundException)
- throw (InstanceNotFoundException) e;
- if (e instanceof ReflectionException)
- throw (ReflectionException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- @SuppressWarnings("rawtypes") // MarshalledObject
- public Object invoke(ObjectName name,
- String operationName,
- MarshalledObject params,
- String signature[],
- Subject delegationSubject)
- throws
- InstanceNotFoundException,
- MBeanException,
- ReflectionException,
- IOException {
-
- checkNonNull("ObjectName", name);
- checkNonNull("Operation name", operationName);
-
- final Object[] values;
- final boolean debug=logger.debugOn();
-
- if (debug) logger.debug("invoke",
- "connectionId=" + connectionId
- +" unwrapping params with MBean extended ClassLoader.");
-
- values = nullIsEmpty(unwrap(params,
- getClassLoaderFor(name),
- defaultClassLoader,
- Object[].class, delegationSubject));
-
- try {
- final Object params2[] =
- new Object[] { name, operationName, values,
- nullIsEmpty(signature) };
-
- if (debug) logger.debug("invoke",
- "connectionId=" + connectionId
- +", name="+name
- +", operationName="+operationName
- +", signature="+strings(signature));
-
- return
- doPrivilegedOperation(
- INVOKE,
- params2,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof InstanceNotFoundException)
- throw (InstanceNotFoundException) e;
- if (e instanceof MBeanException)
- throw (MBeanException) e;
- if (e instanceof ReflectionException)
- throw (ReflectionException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- public String getDefaultDomain(Subject delegationSubject)
- throws IOException {
- try {
- final Object params[] = new Object[] { };
-
- if (logger.debugOn()) logger.debug("getDefaultDomain",
- "connectionId=" + connectionId);
-
- return (String)
- doPrivilegedOperation(
- GET_DEFAULT_DOMAIN,
- params,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- public String[] getDomains(Subject delegationSubject) throws IOException {
- try {
- final Object params[] = new Object[] { };
-
- if (logger.debugOn()) logger.debug("getDomains",
- "connectionId=" + connectionId);
-
- return (String[])
- doPrivilegedOperation(
- GET_DOMAINS,
- params,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- public MBeanInfo getMBeanInfo(ObjectName name, Subject delegationSubject)
- throws
- InstanceNotFoundException,
- IntrospectionException,
- ReflectionException,
- IOException {
-
- checkNonNull("ObjectName", name);
-
- try {
- final Object params[] = new Object[] { name };
-
- if (logger.debugOn()) logger.debug("getMBeanInfo",
- "connectionId=" + connectionId
- +", name="+name);
-
- return (MBeanInfo)
- doPrivilegedOperation(
- GET_MBEAN_INFO,
- params,
- delegationSubject);
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof InstanceNotFoundException)
- throw (InstanceNotFoundException) e;
- if (e instanceof IntrospectionException)
- throw (IntrospectionException) e;
- if (e instanceof ReflectionException)
- throw (ReflectionException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- public boolean isInstanceOf(ObjectName name,
- String className,
- Subject delegationSubject)
- throws InstanceNotFoundException, IOException {
-
- checkNonNull("ObjectName", name);
-
- try {
- final Object params[] = new Object[] { name, className };
-
- if (logger.debugOn()) logger.debug("isInstanceOf",
- "connectionId=" + connectionId
- +", name="+name
- +", className="+className);
-
- return ((Boolean)
- doPrivilegedOperation(
- IS_INSTANCE_OF,
- params,
- delegationSubject)).booleanValue();
- } catch (PrivilegedActionException pe) {
- Exception e = extractException(pe);
- if (e instanceof InstanceNotFoundException)
- throw (InstanceNotFoundException) e;
- if (e instanceof IOException)
- throw (IOException) e;
- throw newIOException("Got unexpected server exception: " + e, e);
- }
- }
-
- @SuppressWarnings("rawtypes") // MarshalledObject
- public Integer[] addNotificationListeners(ObjectName[] names,
- MarshalledObject[] filters,
- Subject[] delegationSubjects)
- throws InstanceNotFoundException, IOException {
-
- if (names == null || filters == null) {
- throw new IllegalArgumentException("Got null arguments.");
- }
-
- Subject[] sbjs = (delegationSubjects != null) ? delegationSubjects :
- new Subject[names.length];
- if (names.length != filters.length || filters.length != sbjs.length) {
- final String msg =
- "The value lengths of 3 parameters are not same.";
- throw new IllegalArgumentException(msg);
- }
-
- for (int i=0; i action =
- new PrivilegedAction() {
- public NotificationResult run() {
- return getServerNotifFwd().fetchNotifs(csn, t, mn);
- }
- };
- if (acc == null)
- return action.run();
- else
- return AccessController.doPrivileged(action, acc);
- } finally {
- serverCommunicatorAdmin.rspOutgoing();
- }
- }
-
- /**
- *
Returns a string representation of this object. In general,
- * the toString method returns a string that
- * "textually represents" this object. The result should be a
- * concise but informative representation that is easy for a
- * person to read.
- *
- * @return a String representation of this object.
- **/
- @Override
- public String toString() {
- return super.toString() + ": connectionId=" + connectionId;
- }
-
- //------------------------------------------------------------------------
- // private classes
- //------------------------------------------------------------------------
-
- private class PrivilegedOperation
- implements PrivilegedExceptionAction