package javax.slee.management;
import javax.slee.ComponentID;
import javax.slee.InvalidArgumentException;
import javax.slee.UnrecognizedComponentException;
import javax.slee.facilities.Level;
import javax.slee.facilities.TraceLevel;
/**
* The <code>TraceMBean</code> interface defines the management interface for the SLEE
* tracing subsystem. Using the <code>TraceMBean</code>, a management client may get or
* set the trace filter levels used to control whether or not the Trace MBean generates
* {@link TraceNotification TraceNotifications} for trace messages emitted by SLEE
* components such as SBBs, profiles, and resource adaptor entities.
* <p>
* The JMX Object Name of a <code>TraceMBean</code> object is specified by the
* {@link #OBJECT_NAME} constant. Alternatively, the Object Name can be obtained by
* a management client via the {@link SleeManagementMBean#getTraceMBean()} method.
* <p>
* <b>Trace Filter Levels</b><br>
* A {@link TraceLevel trace filter level} may be assigned to each
* {@link javax.slee.facilities.Tracer tracer} used by a particular {@link NotificationSource}.
* Different trace filter levels may be assigned for a tracer with the same name but associated
* with different notification sources. For example, for the tracer named
* <code>"com.foo"</code>, it is possible to set the trace filter level the tracer
* to <code>TraceLevel.FINEST</code> for some SBB in a service and <code>TraceLevel.INFO</code>
* for another SBB in the same service, as each SBB is a unique notification source.
* <p>
* When a message is emitted to a tracer, the effective trace filter level is used to
* determine whether or not the Trace MBean generates a {@link TraceNotification}. The
* effective trace filter level of a tracer is equal to the trace filter level assigned
* to the tracer for the notification source in which the <code>Tracer</code> object was
* created. If a trace filter level has not been assigned to that tracer, the effective
* trace filter level is inherited from its nearest ancestor in the tracer hierarchy
* that has an assigned trace filter level. The root tracer of each possible notification
* source always has a trace filter level assigned to it, which initially defaults to
* {@link TraceLevel#INFO}. A SLEE implementation should (but is not required to)
* persist any trace filter levels set during normal operation, so that trace filter levels
* can be restored upon a complete server restart.
* <p>
* As an example, assume the following management operations (only) have been invoked
* on the Trace MBean:
* <p><ul><code>
* SbbNotification sbb = ...<br>
* setTraceLevel(sbb, "", TraceLevel.INFO);<br>
* setTraceLevel(sbb, "com.foo", TraceLevel.FINEST);
* </code></ul><p>
* The following management operations would return effective trace levels as indicated:
* <p><ul><code>
* getTraceLevel(sbb, "") == TraceLevel.INFO<br>
* getTraceLevel(sbb, "com") == TraceLevel.INFO<br>
* getTraceLevel(sbb, "com.foo") == TraceLevel.FINEST<br>
* getTraceLevel(sbb, "com.foo.bar") == TraceLevel.FINEST<br>
* </code></ul>
* <p>
* When a trace message is emitted to a tracer, if the trace level of the trace message is
* greater than or equal to the effective trace filter level of the tracer for the notification
* source it was created for, a {@link TraceNotification} will be generated by the Trace MBean
* and delivered to any notification listeners. Otherwise the trace message is silently
* discarded by the SLEE.
* <p>
* <b>Notifications</b><br>
* Since a <code>TraceMBean</code> object can emit trace notifications, it is required that
* the <code>TraceMBean</code> object implement the <code>javax.management.NotificationBroadcaster</code>
* interface.
* <p>
* <b>Note:</b> In SLEE 1.0 a Trace MBean emitted only one type of notification,
* defined by {@link #TRACE_NOTIFICATION_TYPE}. As of SLEE 1.1, a <code>TraceMBean</code>
* object may emit trace notifications of different types, depending on the notification
* source of the tracer used to emit the trace message. The SLEE-defined classes that
* implement {@link NotificationSource} each specify the type of trace notification
* that is generated for the notification source.
*/
public interface TraceMBean {
/**
* The JMX Object Name string of the SLEE Trace MBean, equal to the string
* "javax.slee.management:name=Trace".
* @since SLEE 1.1
*/
public static final String OBJECT_NAME = "javax.slee.management:name=Trace";
/**
* The notification type of {@link TraceNotification Trace} notifications
* emitted by this MBean. The notification type is equal to the string
* "javax.slee.management.trace".
* @deprecated Different notification types may be generated by the Trace MBean depending
* on where the trace message was emitted. The SLEE-defined classes that implement
* {@link NotificationSource} each specify a particular trace notification type for the
* notification source.
*/
public static final String TRACE_NOTIFICATION_TYPE = "javax.slee.management.trace";
/**
* Set the trace filter level for a particular component. The <code>TraceMBean</code>
* only generates trace notifications if the trace level of a trace message
* generated by a component is equal to or greater than the trace filter level
* set for that component.
* <p>
* The default trace filter level for a component is {@link Level#OFF},
* ie. trace notifications are never generated for the component unless the trace
* filter level is explicitly set to a different level.
* @param id the identifier of the component.
* @param traceLevel the new trace filter level for the component.
* @throws NullPointerException if <code>id</code> is <code>null</code>.
* @throws UnrecognizedComponentException if <code>id</code> is not a recognizable
* <code>ComponentID</code> object for the SLEE or it does not correspond
* with a component installed in the SLEE.
* @throws ManagementException if the trace level could not be set due to a
* system-level failure.
* @deprecated This method uses a <code>ComponentID</code> to identify a notification
* source and thus is not compatible with the changes made to the tracing
* subsystem in SLEE 1.1. It has been replaced with {@link #setTraceLevel(NotificationSource, String, TraceLevel)}.
*/
public void setTraceLevel(ComponentID id, Level traceLevel)
throws NullPointerException, UnrecognizedComponentException, ManagementException;
/**
* Get the trace filter level for a particular component.
* <p>
* The default trace filter level for a component is {@link Level#OFF},
* ie. trace notifications are never generated for the component unless the trace
* filter level is explicitly set to a different level.
* @param id the identifier of the component.
* @return the trace filter level for the component.
* @throws NullPointerException if <code>id</code> is <code>null</code>.
* @throws UnrecognizedComponentException if <code>id</code> is not a recognizable
* <code>ComponentID</code> object for the SLEE or it does not correspond
* with a component installed in the SLEE.
* @throws ManagementException if the trace level could not be set due to a
* system-level failure.
* @deprecated This method uses a <code>ComponentID</code> to identify a notification
* source and thus is not compatible with the changes made to the tracing
* subsystem in SLEE 1.1. It has been replaced with {@link #getTraceLevel(NotificationSource, String)}.
*/
public Level getTraceLevel(ComponentID id)
throws NullPointerException, UnrecognizedComponentException, ManagementException;
/**
* Get the names of the tracers that have been requested by the specified notification source.
* @param notificationSource the notification source.
* @return an array of tracer names corresponding to the tracers that have been requested by
* the specified notification source.
* @throws NullPointerException if <code>notificationSource</code> is <code>null</code>.
* @throws UnrecognizedNotificationSourceException if <code>notificationSource</code>
* does not identify a notification source recognizable by the SLEE.
* @throws ManagementException if the tracer names could not be obtained due to a
* system-level failure.
* @since SLEE 1.1
*/
public String[] getTracersUsed(NotificationSource notificationSource)
throws NullPointerException, UnrecognizedNotificationSourceException, ManagementException;
/**
* Set the trace filter level of the specified tracer for the specified notification
* source to the specified trace level.
* @param notificationSource the notification source.
* @param tracerName the name of the tracer for which the trace level should be assigned.
* The empty string denotes the root tracer.
* @param level the trace filter level to be assigned to the tracer.
* @throws NullPointerException if any argument is <code>null</code>.
* @throws UnrecognizedNotificationSourceException if <code>notificationSource</code>
* does not identify a notification source recognizable by the SLEE.
* @throws InvalidArgumentException if <code>tracerName</code> is not a valid tracer name.
* @throws ManagementException if the trace filter level could not be set due to a
* system-level failure.
* @since SLEE 1.1
*/
public void setTraceLevel(NotificationSource notificationSource, String tracerName, TraceLevel level)
throws NullPointerException, UnrecognizedNotificationSourceException,
InvalidArgumentException, ManagementException;
/**
* Unset the trace filter level of the specified tracer for the specified notification
* source. This method removes any trace filter level previously assigned to the tracer
* so that the effective trace filter level of that tracer is subsequently obtained from
* the tracer's parent tracer.
* <p>
* This method has no effect, and returns without error, if no trace filter level is
* currently assigned to the specified tracer.
* <p>
* The trace filter level for the root tracer (identified by the empty string) cannot be
* unset.
* @param notificationSource the notification source.
* @param tracerName the name of the tracer for which the trace level should be unset.
* @throws NullPointerException if any argument is <code>null</code>.
* @throws UnrecognizedNotificationSourceException if <code>notificationSource</code>
* does not identify a notification source recognizable by the SLEE.
* @throws InvalidArgumentException if <code>tracerName</code> is not a valid tracer name, or
* is the empty string (denoting the root tracer).
* @throws ManagementException if the trace filter level could not be unset due to a
* system-level failure.
* @since SLEE 1.1
*/
public void unsetTraceLevel(NotificationSource notificationSource, String tracerName)
throws NullPointerException, UnrecognizedNotificationSourceException,
InvalidArgumentException, ManagementException;
/**
* Get the names of the tracers for which a trace filter level has been assigned
* for the specified notification source. This method returns the list of tracer names
* for which trace filter levels have been assigned for the notification source using the
* {@link #setTraceLevel(NotificationSource, String, TraceLevel) setTraceLevel} method,
* and for which the trace filter level has not yet been unset using the
* {@link #unsetTraceLevel(NotificationSource, String) unsetTraceLevel} method.
* @param notificationSource the notification source.
* @throws NullPointerException if <code>notificationSource</code> is <code>null</code>.
* @throws UnrecognizedNotificationSourceException if <code>notificationSource</code>
* does not identify a notification source recognizable by the SLEE.
* @throws ManagementException if the tracer names could not be obtained due to a
* system-level failure.
* @since SLEE 1.1
*/
public String[] getTracersSet(NotificationSource notificationSource)
throws NullPointerException, UnrecognizedNotificationSourceException, ManagementException;
/**
* Get the effective trace filter level of the specified tracer for the specified
* notification source. Note that the returned trace level may not be directly assigned
* to the specified tracer, but may have been obtained from the tracer's nearest
* ancestor that has a trace filter level assigned.
* <p>
* The default trace filter level for the root tracer for all tracers is {@link TraceLevel#INFO}.
* Thus the default effective trace filter level for all tracers obtained by a notification
* source is also {@link TraceLevel#INFO}.
* @param notificationSource the notification source.
* @param tracerName the name of the tracer for which the effective trace level should be
* obtained. The empty string denotes the root tracer.
* @return the current effective trace filter level for the tracer.
* @throws NullPointerException if any argument is <code>null</code>.
* @throws UnrecognizedNotificationSourceException if <code>notificationSource</code>
* does not identify a notification source recognizable by the SLEE.
* @throws InvalidArgumentException if <code>tracerName</code> is not a valid tracer name.
* @throws ManagementException if the trace filter level could not be obtained due to a
* system-level failure.
* @since SLEE 1.1
*/
public TraceLevel getTraceLevel(NotificationSource notificationSource, String tracerName)
throws NullPointerException, InvalidArgumentException,
UnrecognizedNotificationSourceException, ManagementException;
}