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 26 package sun.management; 27 28 import java.lang.management.LockInfo; 29 import javax.management.openmbean.CompositeType; 30 import javax.management.openmbean.CompositeData; 31 import javax.management.openmbean.CompositeDataSupport; 32 import javax.management.openmbean.OpenDataException; 33 34 /** 35 * A CompositeData for LockInfo for the local management support. 36 * This class avoids the performance penalty paid to the 37 * construction of a CompositeData use in the local case. 38 */ 39 public class LockInfoCompositeData extends LazyCompositeData { 40 private final LockInfo lock; 41 42 private LockInfoCompositeData(LockInfo li) { 43 this.lock = li; 44 } 45 46 public LockInfo getLockInfo() { 47 return lock; 48 } 49 50 public static CompositeData toCompositeData(LockInfo li) { 51 if (li == null) { 52 return null; 53 } 54 55 LockInfoCompositeData licd = new LockInfoCompositeData(li); 56 return licd.getCompositeData(); 57 } 58 59 protected CompositeData getCompositeData() { 60 // CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH 61 // LOCK_INFO_ATTRIBUTES! 62 final Object[] lockInfoItemValues = { 63 new String(lock.getClassName()), 64 lock.getIdentityHashCode(), 65 }; 66 67 try { 68 return new CompositeDataSupport(LOCK_INFO_COMPOSITE_TYPE, 69 LOCK_INFO_ATTRIBUTES, 70 lockInfoItemValues); 71 } catch (OpenDataException e) { 72 // Should never reach here 73 throw Util.newException(e); 74 } 75 } 76 77 private static final CompositeType LOCK_INFO_COMPOSITE_TYPE; 78 static { 79 try { 80 LOCK_INFO_COMPOSITE_TYPE = (CompositeType) 81 MappedMXBeanType.toOpenType(LockInfo.class); 82 } catch (OpenDataException e) { 83 // Should never reach here 84 throw Util.newException(e); 85 } 86 } 87 88 static CompositeType compositeType() { 89 return LOCK_INFO_COMPOSITE_TYPE; 90 } 91 92 private static final String CLASS_NAME = "className"; 93 private static final String IDENTITY_HASH_CODE = "identityHashCode"; 94 private static final String[] LOCK_INFO_ATTRIBUTES = { 95 CLASS_NAME, 96 IDENTITY_HASH_CODE, 97 }; 98 99 /* 100 * Returns a LockInfo object mapped from the given CompositeData. 101 */ 102 public static LockInfo toLockInfo(CompositeData cd) { 103 if (cd == null) { 104 throw new NullPointerException("Null CompositeData"); 105 } 106 107 if (!isTypeMatched(LOCK_INFO_COMPOSITE_TYPE, cd.getCompositeType())) { 108 throw new IllegalArgumentException( 109 "Unexpected composite type for LockInfo"); 110 } 111 112 String className = getString(cd, CLASS_NAME); 113 int identityHashCode = getInt(cd, IDENTITY_HASH_CODE); 114 return new LockInfo(className, identityHashCode); 115 } 116 117 private static final long serialVersionUID = -6374759159749014052L; | 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 26 package sun.management; 27 28 import java.lang.management.LockInfo; 29 import java.util.Map; 30 import javax.management.openmbean.CompositeType; 31 import javax.management.openmbean.CompositeData; 32 import javax.management.openmbean.CompositeDataSupport; 33 import javax.management.openmbean.OpenDataException; 34 35 /** 36 * A CompositeData for LockInfo for the local management support. 37 * This class avoids the performance penalty paid to the 38 * construction of a CompositeData use in the local case. 39 */ 40 public class LockInfoCompositeData extends LazyCompositeData { 41 private final LockInfo lock; 42 43 private LockInfoCompositeData(LockInfo li) { 44 this.lock = li; 45 } 46 47 public LockInfo getLockInfo() { 48 return lock; 49 } 50 51 public static CompositeData toCompositeData(LockInfo li) { 52 if (li == null) { 53 return null; 54 } 55 56 LockInfoCompositeData licd = new LockInfoCompositeData(li); 57 return licd.getCompositeData(); 58 } 59 60 protected CompositeData getCompositeData() { 61 Map<String,Object> items = Map.of( 62 CLASS_NAME, lock.getClassName(), 63 IDENTITY_HASH_CODE, lock.getIdentityHashCode() 64 ); 65 66 try { 67 return new CompositeDataSupport(LOCK_INFO_COMPOSITE_TYPE, items); 68 } catch (OpenDataException e) { 69 // Should never reach here 70 throw Util.newException(e); 71 } 72 } 73 74 private static final CompositeType LOCK_INFO_COMPOSITE_TYPE; 75 static { 76 try { 77 LOCK_INFO_COMPOSITE_TYPE = (CompositeType) 78 MappedMXBeanType.toOpenType(LockInfo.class); 79 } catch (OpenDataException e) { 80 // Should never reach here 81 throw Util.newException(e); 82 } 83 } 84 85 static CompositeType compositeType() { 86 return LOCK_INFO_COMPOSITE_TYPE; 87 } 88 89 private static final String CLASS_NAME = "className"; 90 private static final String IDENTITY_HASH_CODE = "identityHashCode"; 91 92 /* 93 * Returns a LockInfo object mapped from the given CompositeData. 94 */ 95 public static LockInfo toLockInfo(CompositeData cd) { 96 if (cd == null) { 97 throw new NullPointerException("Null CompositeData"); 98 } 99 100 if (!isTypeMatched(LOCK_INFO_COMPOSITE_TYPE, cd.getCompositeType())) { 101 throw new IllegalArgumentException( 102 "Unexpected composite type for LockInfo"); 103 } 104 105 String className = getString(cd, CLASS_NAME); 106 int identityHashCode = getInt(cd, IDENTITY_HASH_CODE); 107 return new LockInfo(className, identityHashCode); 108 } 109 110 private static final long serialVersionUID = -6374759159749014052L; |