1/* 2 * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package javax.management; 27 28// java import 29import java.io.Serializable; 30 31// RI import 32import javax.management.ObjectName; 33 34 35/** 36 * Used to represent the object name of an MBean and its class name. 37 * If the MBean is a Dynamic MBean the class name should be retrieved from 38 * the <CODE>MBeanInfo</CODE> it provides. 39 * 40 * @since 1.5 41 */ 42public class ObjectInstance implements Serializable { 43 44 45 /* Serial version */ 46 private static final long serialVersionUID = -4099952623687795850L; 47 48 /** 49 * @serial Object name. 50 */ 51 private ObjectName name; 52 53 /** 54 * @serial Class name. 55 */ 56 private String className; 57 58 /** 59 * Allows an object instance to be created given a string representation of 60 * an object name and the full class name, including the package name. 61 * 62 * @param objectName A string representation of the object name. 63 * @param className The full class name, including the package 64 * name, of the object instance. If the MBean is a Dynamic MBean 65 * the class name corresponds to its {@link 66 * DynamicMBean#getMBeanInfo() 67 * getMBeanInfo()}<code>.getClassName()</code>. 68 * 69 * @exception MalformedObjectNameException The string passed as a 70 * parameter does not have the right format. 71 * 72 */ 73 public ObjectInstance(String objectName, String className) 74 throws MalformedObjectNameException { 75 this(new ObjectName(objectName), className); 76 } 77 78 /** 79 * Allows an object instance to be created given an object name and 80 * the full class name, including the package name. 81 * 82 * @param objectName The object name. 83 * @param className The full class name, including the package 84 * name, of the object instance. If the MBean is a Dynamic MBean 85 * the class name corresponds to its {@link 86 * DynamicMBean#getMBeanInfo() 87 * getMBeanInfo()}<code>.getClassName()</code>. 88 * If the MBean is a Dynamic MBean the class name should be retrieved 89 * from the <CODE>MBeanInfo</CODE> it provides. 90 * 91 */ 92 public ObjectInstance(ObjectName objectName, String className) { 93 if (objectName.isPattern()) { 94 final IllegalArgumentException iae = 95 new IllegalArgumentException("Invalid name->"+ 96 objectName.toString()); 97 throw new RuntimeOperationsException(iae); 98 } 99 this.name= objectName; 100 this.className= className; 101 } 102 103 104 /** 105 * Compares the current object instance with another object instance. 106 * 107 * @param object The object instance that the current object instance is 108 * to be compared with. 109 * 110 * @return True if the two object instances are equal, otherwise false. 111 */ 112 public boolean equals(Object object) { 113 if (!(object instanceof ObjectInstance)) { 114 return false; 115 } 116 ObjectInstance val = (ObjectInstance) object; 117 if (! name.equals(val.getObjectName())) return false; 118 if (className == null) 119 return (val.getClassName() == null); 120 return className.equals(val.getClassName()); 121 } 122 123 public int hashCode() { 124 final int classHash = ((className==null)?0:className.hashCode()); 125 return name.hashCode() ^ classHash; 126 } 127 128 /** 129 * Returns the object name part. 130 * 131 * @return the object name. 132 */ 133 public ObjectName getObjectName() { 134 return name; 135 } 136 137 /** 138 * Returns the class part. 139 * 140 * @return the class name. 141 */ 142 public String getClassName() { 143 return className; 144 } 145 146 /** 147 * Returns a string representing this ObjectInstance object. The format of this string 148 * is not specified, but users can expect that two ObjectInstances return the same 149 * string if and only if they are equal. 150 */ 151 public String toString() { 152 return getClassName() + "[" + getObjectName() + "]"; 153 } 154 } 155