< prev index next >

src/java.management/share/classes/java/lang/management/MonitorInfo.java

Print this page




  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 java.lang.management;
  27 
  28 import javax.management.openmbean.CompositeData;
  29 import sun.management.MonitorInfoCompositeData;
  30 
  31 /**
  32  * Information about an object monitor lock.  An object monitor is locked
  33  * when entering a synchronization block or method on that object.
  34  *
  35  * <h3>MXBean Mapping</h3>
  36  * <tt>MonitorInfo</tt> is mapped to a {@link CompositeData CompositeData}
  37  * with attributes as specified in
  38  * the {@link #from from} method.
  39  *
  40  * @author  Mandy Chung
  41  * @since   1.6
  42  */
  43 public class MonitorInfo extends LockInfo {
  44 
  45     private int    stackDepth;
  46     private StackTraceElement stackFrame;
  47 
  48     /**
  49      * Construct a <tt>MonitorInfo</tt> object.
  50      *
  51      * @param className the fully qualified name of the class of the lock object.
  52      * @param identityHashCode the {@link System#identityHashCode
  53      *                         identity hash code} of the lock object.
  54      * @param stackDepth the depth in the stack trace where the object monitor
  55      *                   was locked.
  56      * @param stackFrame the stack frame that locked the object monitor.
  57      * @throws IllegalArgumentException if
  58      *    <tt>stackDepth</tt> &ge; 0 but <tt>stackFrame</tt> is <tt>null</tt>,
  59      *    or <tt>stackDepth</tt> &lt; 0 but <tt>stackFrame</tt> is not
  60      *       <tt>null</tt>.
  61      */
  62     public MonitorInfo(String className,
  63                        int identityHashCode,
  64                        int stackDepth,
  65                        StackTraceElement stackFrame) {
  66         super(className, identityHashCode);
  67         if (stackDepth >= 0 && stackFrame == null) {
  68             throw new IllegalArgumentException("Parameter stackDepth is " +
  69                 stackDepth + " but stackFrame is null");
  70         }
  71         if (stackDepth < 0 && stackFrame != null) {
  72             throw new IllegalArgumentException("Parameter stackDepth is " +
  73                 stackDepth + " but stackFrame is not null");
  74         }
  75         this.stackDepth = stackDepth;
  76         this.stackFrame = stackFrame;
  77     }
  78 
  79     /**
  80      * Returns the depth in the stack trace where the object monitor
  81      * was locked.  The depth is the index to the <tt>StackTraceElement</tt>
  82      * array returned in the {@link ThreadInfo#getStackTrace} method.
  83      *
  84      * @return the depth in the stack trace where the object monitor
  85      *         was locked, or a negative number if not available.
  86      */
  87     public int getLockedStackDepth() {
  88         return stackDepth;
  89     }
  90 
  91     /**
  92      * Returns the stack frame that locked the object monitor.
  93      *
  94      * @return <tt>StackTraceElement</tt> that locked the object monitor,
  95      *         or <tt>null</tt> if not available.
  96      */
  97     public StackTraceElement getLockedStackFrame() {
  98         return stackFrame;
  99     }
 100 
 101     /**
 102      * Returns a <tt>MonitorInfo</tt> object represented by the
 103      * given <tt>CompositeData</tt>.
 104      * The given <tt>CompositeData</tt> must contain the following attributes
 105      * as well as the attributes specified in the
 106      * <a href="LockInfo.html#MappedType">
 107      * mapped type</a> for the {@link LockInfo} class:
 108      * <blockquote>
 109      * <table border summary="The attributes and their types the given CompositeData contains">
 110      * <tr>
 111      *   <th align=left>Attribute Name</th>
 112      *   <th align=left>Type</th>
 113      * </tr>
 114      * <tr>
 115      *   <td>lockedStackFrame</td>
 116      *   <td><tt>CompositeData as specified in the
 117      *       <a href="ThreadInfo.html#StackTrace">stackTrace</a>
 118      *       attribute defined in the {@link ThreadInfo#from
 119      *       ThreadInfo.from} method.
 120      *       </tt></td>
 121      * </tr>
 122      * <tr>
 123      *   <td>lockedStackDepth</td>
 124      *   <td><tt>java.lang.Integer</tt></td>
 125      * </tr>
 126      * </table>
 127      * </blockquote>
 128      *
 129      * @param cd <tt>CompositeData</tt> representing a <tt>MonitorInfo</tt>
 130      *
 131      * @throws IllegalArgumentException if <tt>cd</tt> does not
 132      *   represent a <tt>MonitorInfo</tt> with the attributes described
 133      *   above.
 134 
 135      * @return a <tt>MonitorInfo</tt> object represented
 136      *         by <tt>cd</tt> if <tt>cd</tt> is not <tt>null</tt>;
 137      *         <tt>null</tt> otherwise.
 138      */
 139     public static MonitorInfo from(CompositeData cd) {
 140         if (cd == null) {
 141             return null;
 142         }
 143 
 144         if (cd instanceof MonitorInfoCompositeData) {
 145             return ((MonitorInfoCompositeData) cd).getMonitorInfo();
 146         } else {
 147             MonitorInfoCompositeData.validateCompositeData(cd);
 148             String className = MonitorInfoCompositeData.getClassName(cd);
 149             int identityHashCode = MonitorInfoCompositeData.getIdentityHashCode(cd);
 150             int stackDepth = MonitorInfoCompositeData.getLockedStackDepth(cd);
 151             StackTraceElement stackFrame = MonitorInfoCompositeData.getLockedStackFrame(cd);
 152             return new MonitorInfo(className,
 153                                    identityHashCode,
 154                                    stackDepth,
 155                                    stackFrame);
 156         }
 157     }


  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 java.lang.management;
  27 
  28 import javax.management.openmbean.CompositeData;
  29 import sun.management.MonitorInfoCompositeData;
  30 
  31 /**
  32  * Information about an object monitor lock.  An object monitor is locked
  33  * when entering a synchronization block or method on that object.
  34  *
  35  * <h3>MXBean Mapping</h3>
  36  * {@code MonitorInfo} is mapped to a {@link CompositeData CompositeData}
  37  * with attributes as specified in
  38  * the {@link #from from} method.
  39  *
  40  * @author  Mandy Chung
  41  * @since   1.6
  42  */
  43 public class MonitorInfo extends LockInfo {
  44 
  45     private int    stackDepth;
  46     private StackTraceElement stackFrame;
  47 
  48     /**
  49      * Construct a {@code MonitorInfo} object.
  50      *
  51      * @param className the fully qualified name of the class of the lock object.
  52      * @param identityHashCode the {@link System#identityHashCode
  53      *                         identity hash code} of the lock object.
  54      * @param stackDepth the depth in the stack trace where the object monitor
  55      *                   was locked.
  56      * @param stackFrame the stack frame that locked the object monitor.
  57      * @throws IllegalArgumentException if
  58      *    {@code stackDepth} &ge; 0 but {@code stackFrame} is {@code null},
  59      *    or {@code stackDepth} &lt; 0 but {@code stackFrame} is not
  60      *       {@code null}.
  61      */
  62     public MonitorInfo(String className,
  63                        int identityHashCode,
  64                        int stackDepth,
  65                        StackTraceElement stackFrame) {
  66         super(className, identityHashCode);
  67         if (stackDepth >= 0 && stackFrame == null) {
  68             throw new IllegalArgumentException("Parameter stackDepth is " +
  69                 stackDepth + " but stackFrame is null");
  70         }
  71         if (stackDepth < 0 && stackFrame != null) {
  72             throw new IllegalArgumentException("Parameter stackDepth is " +
  73                 stackDepth + " but stackFrame is not null");
  74         }
  75         this.stackDepth = stackDepth;
  76         this.stackFrame = stackFrame;
  77     }
  78 
  79     /**
  80      * Returns the depth in the stack trace where the object monitor
  81      * was locked.  The depth is the index to the {@code StackTraceElement}
  82      * array returned in the {@link ThreadInfo#getStackTrace} method.
  83      *
  84      * @return the depth in the stack trace where the object monitor
  85      *         was locked, or a negative number if not available.
  86      */
  87     public int getLockedStackDepth() {
  88         return stackDepth;
  89     }
  90 
  91     /**
  92      * Returns the stack frame that locked the object monitor.
  93      *
  94      * @return {@code StackTraceElement} that locked the object monitor,
  95      *         or {@code null} if not available.
  96      */
  97     public StackTraceElement getLockedStackFrame() {
  98         return stackFrame;
  99     }
 100 
 101     /**
 102      * Returns a {@code MonitorInfo} object represented by the
 103      * given {@code CompositeData}.
 104      * The given {@code CompositeData} must contain the following attributes
 105      * as well as the attributes specified in the
 106      * <a href="LockInfo.html#MappedType">
 107      * mapped type</a> for the {@link LockInfo} class:
 108      * <blockquote>
 109      * <table border summary="The attributes and their types the given CompositeData contains">
 110      * <tr>
 111      *   <th align=left>Attribute Name</th>
 112      *   <th align=left>Type</th>
 113      * </tr>
 114      * <tr>
 115      *   <td>lockedStackFrame</td>
 116      *   <td><code>CompositeData as specified in the
 117      *       <a href="ThreadInfo.html#StackTrace">stackTrace</a>
 118      *       attribute defined in the {@link ThreadInfo#from
 119      *       ThreadInfo.from} method.
 120      *       </code></td>
 121      * </tr>
 122      * <tr>
 123      *   <td>lockedStackDepth</td>
 124      *   <td>{@code java.lang.Integer}</td>
 125      * </tr>
 126      * </table>
 127      * </blockquote>
 128      *
 129      * @param cd {@code CompositeData} representing a {@code MonitorInfo}
 130      *
 131      * @throws IllegalArgumentException if {@code cd} does not
 132      *   represent a {@code MonitorInfo} with the attributes described
 133      *   above.
 134 
 135      * @return a {@code MonitorInfo} object represented
 136      *         by {@code cd} if {@code cd} is not {@code null};
 137      *         {@code null} otherwise.
 138      */
 139     public static MonitorInfo from(CompositeData cd) {
 140         if (cd == null) {
 141             return null;
 142         }
 143 
 144         if (cd instanceof MonitorInfoCompositeData) {
 145             return ((MonitorInfoCompositeData) cd).getMonitorInfo();
 146         } else {
 147             MonitorInfoCompositeData.validateCompositeData(cd);
 148             String className = MonitorInfoCompositeData.getClassName(cd);
 149             int identityHashCode = MonitorInfoCompositeData.getIdentityHashCode(cd);
 150             int stackDepth = MonitorInfoCompositeData.getLockedStackDepth(cd);
 151             StackTraceElement stackFrame = MonitorInfoCompositeData.getLockedStackFrame(cd);
 152             return new MonitorInfo(className,
 153                                    identityHashCode,
 154                                    stackDepth,
 155                                    stackFrame);
 156         }
 157     }
< prev index next >