001 /* 002 * Copyright 2008-2015 UnboundID Corp. 003 * All Rights Reserved. 004 */ 005 /* 006 * Copyright (C) 2015 UnboundID Corp. 007 * 008 * This program is free software; you can redistribute it and/or modify 009 * it under the terms of the GNU General Public License (GPLv2 only) 010 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only) 011 * as published by the Free Software Foundation. 012 * 013 * This program is distributed in the hope that it will be useful, 014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 016 * GNU General Public License for more details. 017 * 018 * You should have received a copy of the GNU General Public License 019 * along with this program; if not, see <http://www.gnu.org/licenses>. 020 */ 021 package com.unboundid.ldap.sdk.unboundidds.monitors; 022 023 024 025 import java.io.Serializable; 026 import java.util.Collections; 027 import java.util.List; 028 029 import com.unboundid.util.NotMutable; 030 import com.unboundid.util.ThreadSafety; 031 import com.unboundid.util.ThreadSafetyLevel; 032 033 034 035 /** 036 * <BLOCKQUOTE> 037 * <B>NOTE:</B> This class is part of the Commercial Edition of the UnboundID 038 * LDAP SDK for Java. It is not available for use in applications that 039 * include only the Standard Edition of the LDAP SDK, and is not supported for 040 * use in conjunction with non-UnboundID products. 041 * </BLOCKQUOTE> 042 * This class defines a data structure that can hold information about a thread 043 * stack trace read from the UnboundID Directory Server's stack trace monitor. 044 * The information available in a thread stack trace includes: 045 * <UL> 046 * <LI>The name of the thread. This is generally a user-friendly string that 047 * indicates what that thread does within the server.</LI> 048 * <LI>The thread ID that is assigned to the thread by the JVM.</LI> 049 * <LI>The stack trace frames for that thread as a list of 050 * {@link StackTraceElement} objects.</LI> 051 * </UL> 052 * See the documentation in the {@link StackTraceMonitorEntry} class for 053 * information about accessing the Directory Server stack trace. 054 */ 055 @NotMutable() 056 @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) 057 public final class ThreadStackTrace 058 implements Serializable 059 { 060 /** 061 * The serial version UID for this serializable class. 062 */ 063 private static final long serialVersionUID = 5032934844534051999L; 064 065 066 067 // The thread ID for this thread. 068 private final int threadID; 069 070 // The list of stack trace elements for the thread. 071 private final List<StackTraceElement> stackTraceElements; 072 073 // The name for this thread. 074 private final String threadName; 075 076 077 078 /** 079 * Creates a new thread stack trace with the provided information. 080 * 081 * @param threadID The thread ID for the associated thread. 082 * @param threadName The name for the associated thread. 083 * @param stackTraceElements A list of the stack trace elements for the 084 * associated thread. It may be empty if no stack 085 * trace was available. 086 */ 087 public ThreadStackTrace(final int threadID, final String threadName, 088 final List<StackTraceElement> stackTraceElements) 089 { 090 this.threadID = threadID; 091 this.threadName = threadName; 092 this.stackTraceElements = Collections.unmodifiableList(stackTraceElements); 093 } 094 095 096 097 /** 098 * Retrieves the thread ID for the associated thread. 099 * 100 * @return The thread ID for the associated thread. 101 */ 102 public int getThreadID() 103 { 104 return threadID; 105 } 106 107 108 109 /** 110 * Retrieves the name of the associated thread. 111 * 112 * @return The name of the associated thread. 113 */ 114 public String getThreadName() 115 { 116 return threadName; 117 } 118 119 120 121 /** 122 * Retrieves the list of stack trace elements for the associated thread. 123 * 124 * @return The list of stack trace elements for the associated thread, or an 125 * empty list if no stack trace was available. 126 */ 127 public List<StackTraceElement> getStackTraceElements() 128 { 129 return stackTraceElements; 130 } 131 }