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

javax.management.remote.message.MBeanServerRequestMessage Maven / Gradle / Ivy

Go to download

A modification of the OpenDMK JMX remote implementation. Licensed under the Apache Software License v2.0 as permitted by the original CDDL license

There is a newer version: 1.2.1
Show newest version
/*
 * JPPF.
 * Copyright (C) 2005-2016 JPPF Team.
 * http://www.jppf.org
 *
 * Licensed 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.
 */
/*
 * @(#)file      MBeanServerRequestMessage.java
 * @(#)author    Sun Microsystems, Inc.
 * @(#)version   1.20
 * @(#)lastedit  07/03/08
 * @(#)build     @BUILD_TAG_PLACEHOLDER@
 *
 * 
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * 
 * Copyright (c) 2007 Sun Microsystems, Inc. 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 http://opendmk.dev.java.net/legal_notices/licenses.txt or in the 
 * LEGAL_NOTICES folder that accompanied this code. 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 found at
 *     http://opendmk.dev.java.net/legal_notices/licenses.txt
 * or in the LEGAL_NOTICES folder that accompanied this code.
 * Sun designates this particular file as subject to the "Classpath" exception
 * as provided by Sun in the GPL Version 2 section of the License file that
 * accompanied this code.
 * 
 * If applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * 
 *       "Portions Copyrighted [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 or 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 javax.management.remote.message;

import java.util.concurrent.atomic.AtomicLong;

import javax.management.*;
import javax.security.auth.Subject;

/**
 * 

* An {@link MBeanServerConnection} method call, encoded as an object. Objects of this type are sent from the client end to the server end of a JMX API connection. * The result of the method is sent as an {@link MBeanServerResponseMessage}. *

Instances of this class are immutable. *

The method to be called is specified by an integer constant; these constants are defined in this class. * Overloaded methods such as createMBean define a different constant for each overloaded version. *

The parameters to the method are provided as an Object[] when the MBeanServerRequestMessage is constructed. * Except where specified, the number and type of these parameters are the same as for the MBeanServerConnection method to be called. * Similarly, except where specified, the type of the value returned in the corresponding MBeanServerResponseMessage is the return type * of the method to be called, or null if this type is void. *

Because an MBean can use a class loader other than the default one, some parameters need to be wrapped before being encoded in * an MBeanServerRequestMessage. See {@link javax.management.remote.generic.ObjectWrapping ObjectWrapping} and the JMX Remote API specification. *

Subject delegation might be used by supplying the appropriate delegation subject on each request. * The delegation subject is the subject on which the authorization checks are performed for this request. * If null the authorization checks are performed on the authentication subject instead. */ public class MBeanServerRequestMessage implements Message { /** * Explicit serialVersionUID. */ private static final long serialVersionUID = -4181036756525151109L; /** *

Identifier for the method {@link MBeanServerConnection#addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)}. * This message allows several listeners to be added at the same time. *

The meaning of this message is : register for notifications from the given MBeans that match the given filters. * The remote client can subsequently retrieve the notifications using {@link NotificationRequestMessage}. *

For each listener, the original NotificationListener and handback are kept on the client side; * in order for the client to be able to identify them, the server generates and returns a unique listenerID. * This listenerID is forwarded with the Notifications to the remote client. *

The parameters contained in the MBeanServerRequestMessage for this method are an array of ObjectName and an array of Object. * Both arrays have the same size. Each element of the array of Object contains null or a NotificationFilter object wrapped using {@link javax.management.remote.generic.ObjectWrapping ObjectWrapping}. *

The corresponding {@link MBeanServerResponseMessage} will contain an Integer[] that identifies the listeners that were registered. * Subsequent notifications sent from server to client will include this identifier to indicate which listener is to receive the notification. */ public final static int ADD_NOTIFICATION_LISTENERS = 1; /** *

Identifier for the method {@link MBeanServerConnection#addNotificationListener(ObjectName, ObjectName, NotificationFilter, Object)}. *

The parameters contained in the MBeanServerRequestMessage for this method are the four parameters to the method. * The NotificationFilter and Object parameters are wrapped using {@link javax.management.remote.generic.ObjectWrapping ObjectWrapping}. */ public final static int ADD_NOTIFICATION_LISTENER_OBJECTNAME = 2; /** * Identifier for the method {@link MBeanServerConnection#createMBean(String, ObjectName)}. */ public final static int CREATE_MBEAN = 3; /** * Identifier for the method {@link MBeanServerConnection#createMBean(String, ObjectName, Object[], String[])}. *

The Object[] parameter is wrapped using {@link javax.management.remote.generic.ObjectWrapping ObjectWrapping}. */ public final static int CREATE_MBEAN_PARAMS = 4; /** * Identifier for the method {@link MBeanServerConnection#createMBean(String, ObjectName, ObjectName)}. */ public final static int CREATE_MBEAN_LOADER = 5; /** *

Identifier for the method {@link MBeanServerConnection#createMBean(String, ObjectName, ObjectName, Object[], String[])}. *

The Object[] parameter is wrapped using {@link javax.management.remote.generic.ObjectWrapping ObjectWrapping}. */ public final static int CREATE_MBEAN_LOADER_PARAMS = 6; /** * Identifier for the method {@link MBeanServerConnection#getAttribute(ObjectName, String)}. */ public final static int GET_ATTRIBUTE = 7; /** * Identifier for the method {@link MBeanServerConnection#getAttributes(ObjectName, String[])}. */ public final static int GET_ATTRIBUTES = 8; /** * Identifier for the method {@link MBeanServerConnection#getDefaultDomain()}. */ public final static int GET_DEFAULT_DOMAIN = 9; /** * Identifier for the method {@link MBeanServerConnection#getDomains()}. */ public final static int GET_DOMAINS = 10; /** * Identifier for the method {@link MBeanServerConnection#getMBeanCount()}. */ public final static int GET_MBEAN_COUNT = 11; /** * Identifier for the method {@link MBeanServerConnection#getMBeanInfo(ObjectName)}. */ public final static int GET_MBEAN_INFO = 12; /** * Identifier for the method {@link MBeanServerConnection#getObjectInstance(ObjectName)}. */ public final static int GET_OBJECT_INSTANCE = 13; /** *

Identifier for the method {@link MBeanServerConnection#invoke(ObjectName, String, Object[], String[])}. *

The Object[] parameter is wrapped using {@link javax.management.remote.generic.ObjectWrapping ObjectWrapping}. */ public final static int INVOKE = 14; /** *

Identifier for the method {@link MBeanServerConnection#isInstanceOf(ObjectName, String)}. *

A successful {@link MBeanServerResponseMessage} response will contain a return value of type Boolean. */ public final static int IS_INSTANCE_OF = 15; /** *

Identifier for the method {@link MBeanServerConnection#isRegistered(ObjectName)}. *

A successful {@link MBeanServerResponseMessage} response will contain a return value of type Boolean. */ public final static int IS_REGISTERED = 16; /** * Identifier for the method {@link MBeanServerConnection#queryMBeans(ObjectName, QueryExp)}. */ public final static int QUERY_MBEANS = 17; /** * Identifier for the method {@link MBeanServerConnection#queryNames(ObjectName, QueryExp)}. */ public final static int QUERY_NAMES = 18; /** *

Identifier for the method {@link MBeanServerConnection#removeNotificationListener(ObjectName, NotificationListener)}. *

The parameters contained in the MBeanServerRequestMessage for this method are the ObjectName and an Integer[]. *

The Integer[] contains the identifiers that the server returned for every {@link #ADD_NOTIFICATION_LISTENERS} message on this connection * that specified the given ObjectName and NotificationListener and that was not cancelled by a subsequent {@link #REMOVE_NOTIFICATION_LISTENER} or * {@link #REMOVE_NOTIFICATION_LISTENER_FILTER_HANDBACK} message. */ public final static int REMOVE_NOTIFICATION_LISTENER = 19; /** *

Identifier for the method {@link MBeanServerConnection#removeNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)}. *

The parameters contained in the MBeanServerRequestMessage for this method are the ObjectName and an Integer. *

The Integer contains the identifier that the server returned for the {@link #ADD_NOTIFICATION_LISTENERS} message on this connection that * specified the given ObjectName,NotificationListener, NotificationFilter, and Object handback. */ public final static int REMOVE_NOTIFICATION_LISTENER_FILTER_HANDBACK = 20; /** *

Identifier for the method {@link MBeanServerConnection#removeNotificationListener(ObjectName, ObjectName)}. *

The parameters contained in the MBeanServerRequestMessage for this method are the two ObjectName parameters. */ public final static int REMOVE_NOTIFICATION_LISTENER_OBJECTNAME = 21; /** *

Identifier for the method {@link MBeanServerConnection#removeNotificationListener(ObjectName, ObjectName, NotificationFilter, Object)}. *

The parameters contained in the MBeanServerRequestMessage for this method are the four parameters to the method. * The NotificationFilter and Objectparameters are wrapped using {@link javax.management.remote.generic.ObjectWrapping ObjectWrapping}. */ public final static int REMOVE_NOTIFICATION_LISTENER_OBJECTNAME_FILTER_HANDBACK = 22; /** *

Identifier for the method {@link MBeanServerConnection#setAttribute(ObjectName, Attribute)}. *

The Attribute parameter is wrapped using {@link javax.management.remote.generic.ObjectWrapping ObjectWrapping}. */ public final static int SET_ATTRIBUTE = 23; /** *

Identifier for the method {@link MBeanServerConnection#setAttributes(ObjectName, AttributeList)}. *

The AttributeList is wrapped using {@link javax.management.remote.generic.ObjectWrapping ObjectWrapping}. */ public final static int SET_ATTRIBUTES = 24; /** * Identifier for the method {@link MBeanServerConnection#unregisterMBean(ObjectName)}. */ public final static int UNREGISTER_MBEAN = 25; /** * @serial This message's unique identifier. * @see #getMessageId() */ private final long messageId; /** * @serial The method identifier of this message. * @see #getMethodId() */ private final int methodId; /** * @serial The method parameters. * @see #getParams() */ private final Object[] params; /** * @serial The delegation subject. * @see #getDelegationSubject() */ private final Subject delegationSubject; /** * Sequence number generator for the requetss. */ private static AtomicLong count = new AtomicLong(0L); /** * Constant for an empty parameters array. */ private static final Object[] NO_PARAMS = new Object[0]; /** * Constructs a message to invoke the method with the given identifier and parameters. Each constructed object gets a unique message ID, as returned by {@link #getMessageId()}. * @param methodId the identifier of an MBeanServerConnection method. * This should be one of the integer constants defined in this class. The behavior is not specified if it is not. * @param params parameters to the method. The number and types of the parameters depend on the method, as specified by the definition of the corresponding integer constant in this class. * @param delegationSubject the subject on which the authorization checks are performed for this request. * If null the authorization checks are performed on the authentication subjectinstead. */ public MBeanServerRequestMessage(final int methodId, final Object[] params, final Subject delegationSubject) { messageId = newId(); this.methodId = methodId; this.params = (params == null) ? NO_PARAMS : params; this.delegationSubject = delegationSubject; } /** * Returns the method identifier of this message. * @return the MBeanServerConnection method that this MBeanServerRequestMessage corresponds to. * This will be one of the integer constants defined in this class. */ public int getMethodId() { return methodId; } /** * Returns the method parameters. * @return the method parameters. The number and types of the parameters depend on the method, as specified by the definition of the corresponding integer constant in this class. * The returned arraymust not be modified by the caller. */ public Object[] getParams() { return params; } /** * Returns the delegation subject. * @return the delegation subject on which the authorization checks are performed for this request. */ public Subject getDelegationSubject() { return delegationSubject; } /** * Returns this message's unique identifier. Every instance of this class has a different identifier. * @return the unique identifier of this message. */ public long getMessageId() { return messageId; } /** * Genrate a new request id. * @return a new id as a {@code long} value. */ private static long newId() { return count.incrementAndGet(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy