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.
|
protected static interface |
AgentBuilder.RedefinitionStrategy.ResubmissionEnforcer
A resubmission enforcer determines if a non-loaded class should be scheduled for resubmission or be treated upon first load.
|
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 |
---|---|
protected void |
apply(Instrumentation instrumentation,
AgentBuilder.PoolStrategy poolStrategy,
AgentBuilder.LocationStrategy locationStrategy,
AgentBuilder.DescriptionStrategy descriptionStrategy,
AgentBuilder.FallbackStrategy fallbackStrategy,
AgentBuilder.RedefinitionStrategy.DiscoveryStrategy redefinitionDiscoveryStrategy,
AgentBuilder.LambdaInstrumentationStrategy lambdaInstrumentationStrategy,
AgentBuilder.Listener listener,
AgentBuilder.RedefinitionStrategy.Listener redefinitionListener,
AgentBuilder.RawMatcher matcher,
AgentBuilder.RedefinitionStrategy.BatchAllocator redefinitionBatchAllocator,
AgentBuilder.CircularityLock circularityLock)
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(AgentBuilder.PoolStrategy poolStrategy,
AgentBuilder.LocationStrategy locationStrategy,
AgentBuilder.DescriptionStrategy descriptionStrategy,
AgentBuilder.FallbackStrategy fallbackStrategy,
AgentBuilder.Listener listener,
AgentBuilder.RawMatcher matcher,
AgentBuilder.CircularityLock circularityLock)
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 constraints 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 retransformation, 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 constraints 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(AgentBuilder.PoolStrategy poolStrategy, AgentBuilder.LocationStrategy locationStrategy, AgentBuilder.DescriptionStrategy descriptionStrategy, AgentBuilder.FallbackStrategy fallbackStrategy, AgentBuilder.Listener listener, AgentBuilder.RawMatcher matcher, AgentBuilder.CircularityLock circularityLock)
poolStrategy
- The pool strategy to use.locationStrategy
- The location strategy to use.descriptionStrategy
- The description strategy for resolving type descriptions for types.fallbackStrategy
- The fallback strategy to apply.listener
- The listener to notify on transformations.matcher
- The matcher to identify what types to redefine.circularityLock
- The circularity lock to use.protected void apply(Instrumentation instrumentation, AgentBuilder.PoolStrategy poolStrategy, AgentBuilder.LocationStrategy locationStrategy, AgentBuilder.DescriptionStrategy descriptionStrategy, AgentBuilder.FallbackStrategy fallbackStrategy, AgentBuilder.RedefinitionStrategy.DiscoveryStrategy redefinitionDiscoveryStrategy, AgentBuilder.LambdaInstrumentationStrategy lambdaInstrumentationStrategy, AgentBuilder.Listener listener, AgentBuilder.RedefinitionStrategy.Listener redefinitionListener, AgentBuilder.RawMatcher matcher, AgentBuilder.RedefinitionStrategy.BatchAllocator redefinitionBatchAllocator, AgentBuilder.CircularityLock circularityLock)
instrumentation
- The instrumentation instance to use.poolStrategy
- The type locator to use.locationStrategy
- The location strategy to use.descriptionStrategy
- The description strategy for resolving type descriptions for types.fallbackStrategy
- The fallback strategy to apply.redefinitionDiscoveryStrategy
- The discovery strategy for loaded types to be redefined.lambdaInstrumentationStrategy
- A strategy to determine of the LambdaMetafactory
should be instrumented to allow for the
instrumentation of classes that represent lambda expressions.listener
- The listener to notify on transformations.redefinitionListener
- The redefinition listener for the redefinition strategy to apply.matcher
- The matcher to identify what types to redefine.redefinitionBatchAllocator
- The batch allocator for the redefinition strategy to apply.circularityLock
- The circularity lock to use.Copyright © 2014–2021. All rights reserved.