public static enum AgentBuilder.RedefinitionStrategy extends Enum<AgentBuilder.RedefinitionStrategy>
A redefinition strategy regulates how already loaded classes are modified by a built agent.
Important: Most JVMs do not support changes of a class's structure after a class was already
loaded. Therefore, it is typically required that this class file transformer was built while enabling
AgentBuilder.disableClassFormatChanges()
.
Modifier and Type | Class and Description |
---|---|
static interface |
AgentBuilder.RedefinitionStrategy.BatchAllocator
A batch allocator which is responsible for applying a redefinition in a batches.
|
protected static class |
AgentBuilder.RedefinitionStrategy.Collector
A collector is responsible for collecting classes that are to be considered for modification.
|
static interface |
AgentBuilder.RedefinitionStrategy.DiscoveryStrategy
A strategy for discovering types to redefine.
|
protected static interface |
AgentBuilder.RedefinitionStrategy.Dispatcher
A dispatcher for interacting with the instrumentation API.
|
static interface |
AgentBuilder.RedefinitionStrategy.Listener
A listener to be applied during a redefinition.
|
static interface |
AgentBuilder.RedefinitionStrategy.ResubmissionScheduler
A resubmission scheduler is responsible for scheduling a job that is resubmitting unloaded types that failed during retransformation.
|
protected static interface |
AgentBuilder.RedefinitionStrategy.ResubmissionStrategy
A resubmission strategy is responsible for enabling resubmission of types that failed to resubmit.
|
Enum Constant and Description |
---|
DISABLED
Disables redefinition such that already loaded classes are not affected by the agent.
|
REDEFINITION
Applies a redefinition to all classes that are already loaded and that would have been transformed if
the built agent was registered before they were loaded.
|
RETRANSFORMATION
Applies a retransformation to all classes that are already loaded and that would have been transformed if
the built agent was registered before they were loaded.
|
Modifier and Type | Field and Description |
---|---|
protected static AgentBuilder.RedefinitionStrategy.Dispatcher |
DISPATCHER
A dispatcher to use for interacting with the instrumentation API.
|
Modifier and Type | Method and Description |
---|---|
void |
apply(Instrumentation instrumentation,
AgentBuilder.Listener listener,
AgentBuilder.CircularityLock circularityLock,
AgentBuilder.PoolStrategy poolStrategy,
AgentBuilder.LocationStrategy locationStrategy,
AgentBuilder.RedefinitionStrategy.DiscoveryStrategy redefinitionDiscoveryStrategy,
AgentBuilder.RedefinitionStrategy.BatchAllocator redefinitionBatchAllocator,
AgentBuilder.RedefinitionStrategy.Listener redefinitionListener,
AgentBuilder.LambdaInstrumentationStrategy lambdaInstrumentationStrategy,
AgentBuilder.DescriptionStrategy descriptionStrategy,
AgentBuilder.FallbackStrategy fallbackStrategy,
AgentBuilder.RawMatcher typeMatcher,
AgentBuilder.RawMatcher ignoredTypeMatcher)
Applies this redefinition strategy by submitting all loaded types to redefinition.
|
protected abstract void |
check(Instrumentation instrumentation)
Checks if this strategy can be applied to the supplied instrumentation instance.
|
protected boolean |
isEnabled()
Indicates that this redefinition strategy applies a modification of already loaded classes.
|
protected boolean |
isRetransforming()
Indicates if this strategy requires a class file transformer to be registered with a hint to apply the
transformer for retransformation.
|
protected abstract AgentBuilder.RedefinitionStrategy.Collector |
make()
Creates a collector instance that is responsible for collecting loaded classes for potential retransformation.
|
static AgentBuilder.RedefinitionStrategy |
valueOf(String name)
Returns the enum constant of this type with the specified name.
|
static AgentBuilder.RedefinitionStrategy[] |
values()
Returns an array containing the constants of this enum type, in
the order they are declared.
|
public static final AgentBuilder.RedefinitionStrategy DISABLED
public static final AgentBuilder.RedefinitionStrategy REDEFINITION
Applies a redefinition to all classes that are already loaded and that would have been transformed if
the built agent was registered before they were loaded. The created ClassFileTransformer
is not
registered for applying retransformations.
Using this strategy, a redefinition is applied as a single transformation request. This means that a single illegal redefinition of a class causes the entire redefinition attempt to fail.
Note: When applying a redefinition, it is normally required to use a AgentBuilder.TypeStrategy
that applies
a redefinition instead of rebasing classes such as AgentBuilder.TypeStrategy.Default.REDEFINE
. Also, consider
the constrains given by this type strategy.
public static final AgentBuilder.RedefinitionStrategy RETRANSFORMATION
Applies a retransformation to all classes that are already loaded and that would have been transformed if
the built agent was registered before they were loaded. The created ClassFileTransformer
is registered
for applying retransformations.
Using this strategy, a retransformation is applied as a single transformation request. This means that a single illegal retransformation of a class causes the entire retransformation attempt to fail.
Note: When applying a redefinition, it is normally required to use a AgentBuilder.TypeStrategy
that applies
a redefinition instead of rebasing classes such as AgentBuilder.TypeStrategy.Default.REDEFINE
. Also, consider
the constrains given by this type strategy.
protected static final AgentBuilder.RedefinitionStrategy.Dispatcher DISPATCHER
public static AgentBuilder.RedefinitionStrategy[] values()
for (AgentBuilder.RedefinitionStrategy c : AgentBuilder.RedefinitionStrategy.values()) System.out.println(c);
public static AgentBuilder.RedefinitionStrategy valueOf(String name)
name
- the name of the enum constant to be returned.IllegalArgumentException
- if this enum type has no constant with the specified nameNullPointerException
- if the argument is nullprotected boolean isRetransforming()
true
if a class file transformer must be registered with a hint for retransformation.protected abstract void check(Instrumentation instrumentation)
instrumentation
- The instrumentation instance to validate.protected boolean isEnabled()
true
if this redefinition strategy applies a modification of already loaded classes.protected abstract AgentBuilder.RedefinitionStrategy.Collector make()
public void apply(Instrumentation instrumentation, AgentBuilder.Listener listener, AgentBuilder.CircularityLock circularityLock, AgentBuilder.PoolStrategy poolStrategy, AgentBuilder.LocationStrategy locationStrategy, AgentBuilder.RedefinitionStrategy.DiscoveryStrategy redefinitionDiscoveryStrategy, AgentBuilder.RedefinitionStrategy.BatchAllocator redefinitionBatchAllocator, AgentBuilder.RedefinitionStrategy.Listener redefinitionListener, AgentBuilder.LambdaInstrumentationStrategy lambdaInstrumentationStrategy, AgentBuilder.DescriptionStrategy descriptionStrategy, AgentBuilder.FallbackStrategy fallbackStrategy, AgentBuilder.RawMatcher typeMatcher, AgentBuilder.RawMatcher ignoredTypeMatcher)
instrumentation
- The instrumentation instance to use.listener
- The listener to notify on transformations.circularityLock
- The circularity lock to use.poolStrategy
- The type locator to use.locationStrategy
- The location strategy to use.redefinitionDiscoveryStrategy
- The discovery strategy for loaded types to be redefined.redefinitionBatchAllocator
- The batch allocator for the redefinition strategy to apply.redefinitionListener
- The redefinition listener for the redefinition strategy to apply.lambdaInstrumentationStrategy
- A strategy to determine of the LambdaMetafactory
should be instrumented to allow for the
instrumentation of classes that represent lambda expressions.descriptionStrategy
- The description strategy for resolving type descriptions for types.fallbackStrategy
- The fallback strategy to apply.typeMatcher
- Identifies types that should be instrumented.ignoredTypeMatcher
- Identifies types that should not be instrumented.Copyright © 2014–2019. All rights reserved.