org.arm4.arm40.tranreport
public class ArmTranReport extends ArmTransaction implements ArmTranReport
ArmTranReport
is similar to ArmTransaction
.
Both are used to provide data about executing transactions. Instances
of both are created based on metadata represented by an
ArmTransactionDefinition
, which in turn is scoped by an
application definition. Both are scoped by a running application
instance, represented by ArmApplication.
There are two fundamental differences:
ArmTransaction
, the response time is measured based
on start()
and stop()
events. With
ArmTranReport
, the application measures the response time,
and reports it with a single report()
event.
ArmTransaction
, the transaction always executes on
the local system in the same JVM (Java Virtual Machine). With
ArmTranReport
, the transaction may execute in the same
JVM, in a different JVM on the same system, or on a different system.
ArmTranReport
object
is created with an ArmApplication
. When executing in a
different JVM on the same system or on a different system, the
ArmTranReport
object is created with an
ArmApplicationRemote
(a subclass of
ArmApplication
).
The two key methods of ArmTranReport are generateCorrelator
and ArmTranReport.
generateCorrelator()
generates a new correlator using the
immutable data set in the factory method and the current property values
set by the four setter methods. It is assumed that
generateCorrelator()
is executed zero or once per transaction
instance. The practical ramification is that the method implementation
will update its internal state to have a unique identifier for an
instance (the equivalent of ArmTransaction
's start handle).
getCorrelator()
returns the most recently generated
ArmCorrelator
or null, if generateCorrelator()
has never been executed.
report()
is used to provide measurements about a completed
transaction. There are two forms. Both provide the status (one of the
STATUS_*
constants in ArmConstants
) and the
response time, measured in nanoseconds.
One also provides a stop time in the form of milliseconds
since January 1, 1970, which is the same format returned by
java.lang.System.currentTimeMillis()
. If a stop time is not
provided, or a stop time of -1 (USE_CURRENT_TIME
) is provided,
the ARM implementation substitutes the current time; that is, the time
when the report()
method executes. The optional form that
takes a string is a way for an application to provide additional diagnostic
details when the status is something other than STATUS_GOOD
.
generateCorrelator()
updates the internal
state for a new transaction instance. The first time report()
executes after generateCorrelator()
, report()
will not update the internal state for a new transaction instance;
it will use the instance identifier from the
generateCorrelator()
. If report()
executes
twice in succession, or if generateCorrelator()
has never
been executed, report()
will update the internal state for
a new transaction instance. Summarizing, there are two patterns:
generateCorrelator()
is not used. report()
is
executed after each instance completes, and each time it generates a new
instance identifier, like a start handle.
generateCorrelator()
and report()
are used in
pairs. First generateCorrelator()
establishes the transaction
instance identifiers, as well as creating a correlator. This correlator
is sent to downstream transactions. After the downstream transactions
complete, and the current instance completes, report()
provides the measurements. In this case report()
does not
update the transaction instance identifier.
ArmApplication
and ArmTransactionDefinition
, there are four optional
setter methods to establish additional instance-level context.
They can be used at any time to update the attribute within the object.
The only time the properties are meaningful is when
generateCorrelator()
or report()
executes.
At the moment either method executes, the current values are used, any
or all of which may be null. See the description provided for the
individual methods below.
Objects implementing this interface are created using
ArmTranReportFactory.
Version: $Revision$ $Date$
Field Summary | |
---|---|
protected long | m_responseTime |
protected int | m_status |
Constructor Summary | |
---|---|
ArmTranReport(ArmApplication app, ArmTransactionDefinition definition, ArmFactory factory)
Create ARM Transaction Report.
| |
ArmTranReport(ArmApplication app, ArmTransactionDefinition definition, ArmMetricGroup group, ArmFactory factory)
Create ARM Transaction Report.
|
Method Summary | |
---|---|
ArmCorrelator | generateCorrelator() |
long | getResponseTime() |
int | getStatus() |
int | report(int status, long respTime) |
int | report(int status, long respTime, long stopTime) |
int | report(int status, long respTime, String diagnosticDetail) |
int | report(int status, long respTime, long stopTime, String diagnosticDetail) |
Parameters: app definition factory
Parameters: app definition group factory