usr/src/java/rad/org/opensolaris/os/rad/jmx/RadJMX.java
author David Powell <david.e.powell@oracle.com>
Thu, 11 Aug 2011 15:41:42 -0700
changeset 764 ebb25c1dac73
parent 677 fbc09f84f958
permissions -rw-r--r--
18812 Support building with alternate java implementations
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
677
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
     1
/*
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
     2
 * CDDL HEADER START
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
     3
 *
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
     7
 *
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    11
 * and limitations under the License.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    12
 *
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    18
 *
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    19
 * CDDL HEADER END
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    20
 */
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    21
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    22
/*
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    23
 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    24
 */
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    25
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    26
package org.opensolaris.os.rad.jmx;
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    27
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    28
import java.io.IOException;
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    29
import javax.management.*;
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    30
import org.opensolaris.os.adr.*;
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    31
import org.opensolaris.os.rad.Versions;
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    32
import org.opensolaris.os.rad.Version;
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    33
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    34
public class RadJMX {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    35
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    36
    //
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    37
    // Static data
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    38
    //
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    39
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    40
    // Descriptor fields
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    41
    static final String INTERFACE_NAME = "org.opensolaris.os.rad.interfaceName";
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    42
    static final String API_NAME = "org.opensolaris.os.rad.apiName";
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    43
    static final String PRIVATE_VER = "org.opensolaris.os.rad.privateVersion";
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    44
    static final String UNCOMMITTED_VER =
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    45
	"org.opensolaris.os.rad.uncommittedVersion";
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    46
    static final String COMMITTED_VER =
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    47
	"org.opensolaris.os.rad.commitedVersion";
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    48
    static final String STABILITY = "org.opensolaris.os.rad.stability";
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    49
    // Pointer to private API data - not for general consumption
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    50
    static final String API_PRIVDATA = "org.opensolaris.os.rad.apiPrivate";
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    51
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    52
    //
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    53
    // RadJMXProxy methods
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    54
    //
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    55
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    56
    /**
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    57
     * Creates an MXBean proxy after checking that the client and server
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    58
     * versions of the specified interface are compatible, for the given
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    59
     * stability.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    60
     *
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    61
     * @param connection the MBean Server in which the MBean is registered.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    62
     * @param objectName the name of the MBean to forward to.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    63
     * @param interfaceClass the MBean interface that the proxy will implement.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    64
     * @param notificationBroadcaster whether to implement the
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    65
     * {@code NotificationBroadcaster} interface in the proxy.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    66
     * @param stab the required stability of the MBean interface.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    67
     *
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    68
     * @return a new proxy instance.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    69
     *
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    70
     * @throws IOException if there is error while communicating with the
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    71
     * MBean server.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    72
     * @throws InstanceNotFoundException if there is no MBean registered for
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    73
     * the given object name.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    74
     * @throws IntrospectionException if there an error while introspecting
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    75
     * the management interface.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    76
     * @throws ReflectionException if there is an error while invoking methods
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    77
     * on the MBean using reflection.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    78
     * @throws IncompatibleVersionException if the client and server versions
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    79
     * of the MBean interface are incompatible, for the specified stability.
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    80
     */
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    81
    public static <T> T newMXBeanProxy(MBeanServerConnection connection,
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    82
	ObjectName objectName, Class<T> interfaceClass,
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    83
	boolean notificationBroadcaster, Stability stab) throws IOException,
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    84
	InstanceNotFoundException, IntrospectionException, ReflectionException,
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    85
	IncompatibleVersionException {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    86
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    87
	MBeanInfo mbInfo = connection.getMBeanInfo(objectName);
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    88
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    89
	Versions versions = interfaceClass.getAnnotation(
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    90
	    org.opensolaris.os.rad.Versions.class);
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    91
	Descriptor descriptor = mbInfo.getDescriptor();
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    92
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    93
	assertCompatible(interfaceClass, stab, versions, descriptor);
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    94
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    95
        return JMX.newMXBeanProxy(connection, objectName,
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    96
	    interfaceClass, notificationBroadcaster);
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    97
    }
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    98
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
    99
    public static <T> T newMXBeanProxy(MBeanServerConnection connection,
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   100
	ObjectName objectName, Class<T> interfaceClass,	Stability stab)
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   101
	throws IOException, InstanceNotFoundException, IntrospectionException,
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   102
	ReflectionException, IncompatibleVersionException {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   103
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   104
	return newMXBeanProxy(connection, objectName, interfaceClass,
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   105
	    false, stab);
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   106
    }
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   107
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   108
    private static APIVersion getClientVersion(Stability s, Versions versInfo) {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   109
	if (versInfo != null) {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   110
	    for (Version version : versInfo.versions()) {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   111
		if (version.stability() == s) {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   112
		    return new APIVersion(version.stability(), version.major(),
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   113
			version.minor());
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   114
		}
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   115
	    }
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   116
	}
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   117
	return APIVersion.getNone(s);
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   118
    }
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   119
764
ebb25c1dac73 18812 Support building with alternate java implementations
David Powell <david.e.powell@oracle.com>
parents: 677
diff changeset
   120
    private static void assertCompatible(Class<?> interfaceClass,
ebb25c1dac73 18812 Support building with alternate java implementations
David Powell <david.e.powell@oracle.com>
parents: 677
diff changeset
   121
	Stability stab, Versions vers, Descriptor desc)
ebb25c1dac73 18812 Support building with alternate java implementations
David Powell <david.e.powell@oracle.com>
parents: 677
diff changeset
   122
	throws IncompatibleVersionException {
677
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   123
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   124
	APIVersion vc = getClientVersion(stab, vers);
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   125
	APIVersion vs = APIVersion.getNone(stab);
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   126
	if (vers != null && desc != null && vers.interfaceName() != null &&
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   127
	    vers.interfaceName().equals(desc.getFieldValue(INTERFACE_NAME))) {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   128
	    String aname = vers.apiName();
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   129
	    API api = (API) desc.getFieldValue(API_PRIVDATA);
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   130
	    if (aname != null && api != null) {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   131
		if (aname.equals(desc.getFieldValue(API_NAME))) {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   132
		    vs = api.getVersionByStability(stab);
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   133
		} else {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   134
		    for (API parent : api.getParents()) {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   135
			if (aname.equals(parent.getName())) {
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   136
			    vs = parent.getVersionByStability(stab);
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   137
			    break;
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   138
			}
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   139
		    }
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   140
		}
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   141
	    }
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   142
	}
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   143
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   144
	if (vs.getMajor() != vc.getMajor() || vs.getMinor() < vc.getMinor())
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   145
	    throw new IncompatibleVersionException(interfaceClass, vc, vs);
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   146
    }
fbc09f84f958 18038 CLIENT-2: Expose interface versioning to JMX clients
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents:
diff changeset
   147
}