Reinject injection points after bean redefinition. Define and register new bean in BeanManager if a new bean class is defined.
Redefine proxy class if proxied class is redefined. Appropriate redefinition can be specified in hotswap-agent.properties
file. Generally
there are 2 approaches what to do after bean class redefinition:
- reinject injection points in existing bean instances - bean instances survives
- reload existing bean instances in contexts - bean instances are lost
Weld plugin uses reinjection by default, but it is not desired in some cases. Therefore it is possible to specify precise reloading strategy
in hotswap-agent.properties config
file using parameter weld.beanReloadStrategy
using following values:
- NEVER - (default strategy) reinject existing bean instances after bean class redefinition, never reload contexts
- FIELD_SIGNATURE_CHANGE - reload bean instances after any field change including annotation of fields
- METHOD_FIELD_SIGNATURE_CHANGE reload bean instances after any method/field change including all modifications specified for FIELD_SIGNATURE_CHANGE
- CLASS_CHANGE - reload bean instances after any class change and any modification from previous strategies.
Plugin initialization is done in org.jboss.as.weld.deployment.BeanDeploymentArchiveImpl
constructor in case if Weld is running under Wildfly or
in org.jboss.weld.environment.deployment.WeldBeanDeploymentArchive
in other cases. An instance of BeanDeploymentArchiveAgent is created for each
bean archive found and then it is registered in BdaAgentRegistry. ProxyFactory is patched to call ProxyClassLoadingDelegate methods when proxy class is
created. Each instance of ProxyFactory is registered in WeldPlugin in registeredProxiedBeans map. When proxied bean class is redefined than appropriate
proxy factory instance is found and is forced to recreate proxy class.
If a new proxy class is created than weld creates common beans instead proxied beans.