Class Weld
- All Implemented Interfaces:
ContainerInstanceFactory
This builder is a preferred method of booting Weld SE container.
Typical usage looks like this:
WeldContainer container = new Weld().initialize(); container.select(Foo.class).get(); container.event().select(Bar.class).fire(new Bar()); container.shutdown();
The WeldContainer implements AutoCloseable:
try (WeldContainer container = new Weld().initialize()) {
container.select(Foo.class).get();
}
By default, the discovery is enabled so that all beans from all discovered bean archives are considered. However, it's possible to define a "synthetic" bean archive, or the set of bean classes and enablement respectively:
WeldContainer container = new Weld().beanClasses(Foo.class, Bar.class).alternatives(Bar.class).initialize()) {
Moreover, it's also possible to disable the discovery completely so that only the "synthetic" bean archive is considered:
WeldContainer container = new Weld().disableDiscovery().beanClasses(Foo.class, Bar.class).initialize()) {
In the same manner, it is possible to explicitly declare interceptors, decorators, extensions and Weld-specific options (such as relaxed construction) using the builder.
Weld builder = new Weld()
.disableDiscovery()
.packages(Main.class, Utils.class)
.interceptors(TransactionalInterceptor.class)
.property("org.jboss.weld.construction.relaxed", true);
WeldContainer container = builder.initialize();
The builder is reusable which means that it's possible to initialize multiple Weld containers with one builder. However, note that containers must have a unique identifier assigned when running multiple Weld instances at the same time.
- Author:
- Peter Royle, Pete Muir, Ales Justin, Martin Kouba
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringBy default, the set of bean-defining annotations is fixed.protected final Map<Class<? extends org.jboss.weld.bootstrap.api.Service>,org.jboss.weld.bootstrap.api.Service> static final StringBy default, Weld is allowed to perform efficient cleanup and further optimizations after bootstrap.static final StringBy default, bean archive isolation is enabled.protected org.jboss.weld.bootstrap.spi.BeanDiscoveryModestatic final StringStandard behavior is that emptybeans.xmlis treated as discovery modeannotated.protected final Set<Class<? extends Annotation>>static final StringSee also the CDI specification, section 15.1 Bean archive in Java SE.static final StringBy default, Weld SE does not support implicit bean archives without beans.xml.static final StringBy default, Weld automatically registers shutdown hook during initialization. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddAlternative(Class<?> alternativeClass) Add an alternative class to the list of selected alternatives for a synthetic bean archive.addAlternativeStereotype(Class<? extends Annotation> alternativeStereotypeClass) Add an alternative stereotype class to the list of selected alternative stereotypes for a synthetic bean archive.addBeanClass(Class<?> beanClass) Add a bean class to the set of bean classes for the synthetic bean archive.addBeanClasses(Class<?>... classes) addBeanDefiningAnnotations(Class<? extends Annotation>... annotations) Registers annotations which will be considered as bean defining annotations.addBuildCompatibleExtensions(Class<? extends jakarta.enterprise.inject.build.compatible.spi.BuildCompatibleExtension>... extensionClasses) Add build compatible extensions to the set of extensions.addContainerLifecycleObserver(ContainerLifecycleObserver<?> observer) Add a synthetic container lifecycle event observer.addDecorator(Class<?> decoratorClass) Add a decorator class to the list of enabled decorators for the synthetic bean archive.addExtension(jakarta.enterprise.inject.spi.Extension extension) Add an extension to the set of extensions.addExtensions(jakarta.enterprise.inject.spi.Extension... extensions) addExtensions(Class<? extends jakarta.enterprise.inject.spi.Extension>... extensionClasses) addInterceptor(Class<?> interceptorClass) Add an interceptor class to the list of enabled interceptors for the synthetic bean archive.addPackage(boolean scanRecursively, Class<?> packageClass) A package of the specified class will be scanned and found classes will be added to the set of bean classes for the synthetic bean archive.addPackages(boolean scanRecursively, Class<?>... packageClasses) Packages of the specified classes will be scanned and found classes will be added to the set of bean classes for the synthetic bean archive.addPackages(boolean scanRecursively, Package... packages) addPackages(Class<?>... packageClasses) addPackages(Package... packages) addProperty(String key, Object value) addServices(org.jboss.weld.bootstrap.api.Service... services) Register per-deployment services which are shared across the entire application.alternatives(Class<?>... alternativeClasses) Select alternatives for the synthetic bean archive, all previous values are removed.final WeldalternativeStereotypes(Class<? extends Annotation>... alternativeStereotypeClasses) Select alternative stereotypes for the synthetic bean archive, all previous values are removed.beanClasses(Class<?>... classes) Define the set of bean classes for the synthetic bean archive.protected org.jboss.weld.bootstrap.spi.BeansXmlcontainerId(String containerId) Containers must have a unique identifier assigned when running multiple Weld instances at the same time.protected org.jboss.weld.bootstrap.spi.DeploymentcreateDeployment(org.jboss.weld.resources.spi.ResourceLoader resourceLoader, org.jboss.weld.bootstrap.api.CDI11Bootstrap bootstrap) Extensions to Weld SE can subclass and override this method to customize the deployment before weld boots up.decorators(Class<?>... decoratorClasses) Enable decorators for the synthetic bean archive, all previous values are removed.By default, the discovery is enabled.Disable bean archive isolation, i.e. use a "flat" deployment structure.enableDecorators(Class<?>... decoratorClasses) enableInterceptors(Class<?>... interceptorClasses) extensions(jakarta.enterprise.inject.spi.Extension... extensions) Define the set of extensions.protected Iterable<org.jboss.weld.bootstrap.spi.Metadata<jakarta.enterprise.inject.spi.Extension>>protected <T> TgetInstanceByType(jakarta.enterprise.inject.spi.BeanManager manager, Class<T> type, Annotation... bindings) Utility method allowing managed instances of beans to provide entry points for non-managed beans (such asWeldContainer).protected ObjectgetPropertyValue(String key, Object defaultValue) Bootstraps a new Weld SE container with the current container id (generated value if not set throughcontainerId(String)).interceptors(Class<?>... interceptorClasses) Enable interceptors for the synthetic bean archive, all previous values are removed.booleanprotected booleanprotected booleanprotected booleanAll classes from the packages of the specified classes will be added to the set of bean classes for the synthetic bean archive.properties(Map<String, Object> properties) Set all the configuration properties.Set the configuration property.reset()Reset the synthetic bean archive (bean classes and enablement), explicitly added extensions and services.resetAll()Reset all the state, except for initialized containers.Scans the class path entries - implicit bean archives which don't contain a beans.xml file are supported.selectAlternatives(Class<?>... alternativeClasses) selectAlternativeStereotypes(Class<? extends Annotation>... alternativeStereotypeClasses) setBeanDiscoveryMode(org.jboss.weld.bootstrap.spi.BeanDiscoveryMode mode) Sets the bean discovery mode for synthetic bean archive.setClassLoader(ClassLoader classLoader) Set aClassLoader.setProperties(Map<String, Object> propertiesMap) setResourceLoader(org.jboss.weld.resources.spi.ResourceLoader resourceLoader) Set aResourceLoaderused to scan the application for bean archives.voidshutdown()Shuts down all the containers initialized by this builder.Skip shutdown hook registration.Methods inherited from class jakarta.enterprise.inject.se.SeContainerInitializer
newInstance
-
Field Details
-
ADDITIONAL_BEAN_DEFINING_ANNOTATIONS_PROPERTY
By default, the set of bean-defining annotations is fixed. If set to aSetof annotation classes, the set of bean-defining annotations is augmented with the contents of theSet.This key can be used through {@link #property(String, Object}.
- See Also:
-
ARCHIVE_ISOLATION_SYSTEM_PROPERTY
By default, bean archive isolation is enabled. If set to false, Weld will use a "flat" deployment structure - all bean classes share the same bean archive and all beans.xml descriptors are automatically merged into one.This key can be also used through
property(String, Object).- See Also:
-
EMPTY_BEANS_XML_DISCOVERY_MODE_ALL
Standard behavior is that emptybeans.xmlis treated as discovery modeannotated. This configuration property allows to change the behavior to discovery modeallwhich is how it used to work prior to CDI 4.0. Note that this option is temporary and servers to easy migration. As such, it will be eventually removed.- See Also:
-
SHUTDOWN_HOOK_SYSTEM_PROPERTY
By default, Weld automatically registers shutdown hook during initialization. If set to false, the registration of a shutdown hook is skipped.This key can be also used through
property(String, Object).- See Also:
-
SCAN_CLASSPATH_ENTRIES_SYSTEM_PROPERTY
By default, Weld SE does not support implicit bean archives without beans.xml. If set to true, Weld scans the class path entries and implicit bean archives which don't contain a beans.xml file are also supported.This key can be also used through
property(String, Object).- See Also:
-
JAVAX_ENTERPRISE_INJECT_SCAN_IMPLICIT
See also the CDI specification, section 15.1 Bean archive in Java SE.- See Also:
-
ALLOW_OPTIMIZED_CLEANUP
By default, Weld is allowed to perform efficient cleanup and further optimizations after bootstrap. This feature is normally controlled by integrator throughConfigurationKey.ALLOW_OPTIMIZED_CLEANUPbut in Weld SE a client of the bootstrap API is de facto in the role of integrator.This key can be also used through
property(String, Object).- See Also:
-
beanClasses
-
extendedBeanDefiningAnnotations
-
beanDiscoveryMode
protected org.jboss.weld.bootstrap.spi.BeanDiscoveryMode beanDiscoveryMode -
additionalServices
-
-
Constructor Details
-
Weld
public Weld() -
Weld
- Parameters:
containerId- The container identifier- See Also:
-
-
Method Details
-
containerId
Containers must have a unique identifier assigned when running multiple Weld instances at the same time.- Parameters:
containerId-- Returns:
- self
-
getContainerId
- Returns:
- a container identifier
- See Also:
-
beanClasses
Define the set of bean classes for the synthetic bean archive.- Parameters:
classes-- Returns:
- self
-
addBeanClass
Add a bean class to the set of bean classes for the synthetic bean archive.- Parameters:
beanClass-- Returns:
- self
-
addBeanClasses
- Specified by:
addBeanClassesin classjakarta.enterprise.inject.se.SeContainerInitializer
-
packages
All classes from the packages of the specified classes will be added to the set of bean classes for the synthetic bean archive.Note that the scanning possibilities are limited. Therefore, only directories and jar files from the filesystem are supported.
Scanning may also have negative impact on bootstrap performance.
- Parameters:
packageClasses- classes whose packages are to be added to synthetic bean archive- Returns:
- self
-
addPackages
Packages of the specified classes will be scanned and found classes will be added to the set of bean classes for the synthetic bean archive.- Specified by:
addPackagesin classjakarta.enterprise.inject.se.SeContainerInitializer- Parameters:
scanRecursively-packageClasses-- Returns:
- self
-
addPackages
- Specified by:
addPackagesin classjakarta.enterprise.inject.se.SeContainerInitializer
-
addPackages
- Specified by:
addPackagesin classjakarta.enterprise.inject.se.SeContainerInitializer
-
addPackages
- Specified by:
addPackagesin classjakarta.enterprise.inject.se.SeContainerInitializer
-
addPackage
A package of the specified class will be scanned and found classes will be added to the set of bean classes for the synthetic bean archive.- Parameters:
scanRecursively-packageClass-- Returns:
- self
-
extensions
Define the set of extensions.- Parameters:
extensions-- Returns:
- self
-
addExtension
Add an extension to the set of extensions.- Parameters:
extension- an extension
-
addExtensions
- Specified by:
addExtensionsin classjakarta.enterprise.inject.se.SeContainerInitializer
-
addExtensions
public Weld addExtensions(Class<? extends jakarta.enterprise.inject.spi.Extension>... extensionClasses) - Specified by:
addExtensionsin classjakarta.enterprise.inject.se.SeContainerInitializer
-
addBuildCompatibleExtensions
public Weld addBuildCompatibleExtensions(Class<? extends jakarta.enterprise.inject.build.compatible.spi.BuildCompatibleExtension>... extensionClasses) Add build compatible extensions to the set of extensions.- Parameters:
extensionClasses- build compatible extension classes to use in the container- Returns:
- self
-
addContainerLifecycleObserver
Add a synthetic container lifecycle event observer.- Parameters:
observer-- Returns:
- self
- See Also:
-
interceptors
Enable interceptors for the synthetic bean archive, all previous values are removed.This method does not add any class to the set of bean classes for the synthetic bean archive. It's purpose is solely to compensate the absence of the
beans.xmldescriptor.- Parameters:
interceptorClasses-- Returns:
- self
-
addInterceptor
Add an interceptor class to the list of enabled interceptors for the synthetic bean archive.This method does not add any class to the set of bean classes for the synthetic bean archive. It's purpose is solely to compensate the absence of the
beans.xmldescriptor.- Parameters:
interceptorClass-- Returns:
- self
-
enableInterceptors
- Specified by:
enableInterceptorsin classjakarta.enterprise.inject.se.SeContainerInitializer
-
decorators
Enable decorators for the synthetic bean archive, all previous values are removed.This method does not add any class to the set of bean classes for the synthetic bean archive. It's purpose is solely to compensate the absence of the
beans.xmldescriptor.- Parameters:
decoratorClasses-- Returns:
- self
-
addDecorator
Add a decorator class to the list of enabled decorators for the synthetic bean archive.This method does not add any class to the set of bean classes for the synthetic bean archive. It's purpose is solely to compensate the absence of the
beans.xmldescriptor.- Parameters:
decoratorClass-- Returns:
- self
-
enableDecorators
- Specified by:
enableDecoratorsin classjakarta.enterprise.inject.se.SeContainerInitializer
-
alternatives
Select alternatives for the synthetic bean archive, all previous values are removed.This method does not add any class to the set of bean classes for the synthetic bean archive. It's purpose is solely to compensate the absence of the
beans.xmldescriptor.- Parameters:
alternativeClasses-- Returns:
- self
-
addAlternative
Add an alternative class to the list of selected alternatives for a synthetic bean archive.This method does not add any class to the set of bean classes for the synthetic bean archive. It's purpose is solely to compensate the absence of the
beans.xmldescriptor.- Parameters:
alternativeClass-- Returns:
- self
-
selectAlternatives
- Specified by:
selectAlternativesin classjakarta.enterprise.inject.se.SeContainerInitializer
-
alternativeStereotypes
@SafeVarargs public final Weld alternativeStereotypes(Class<? extends Annotation>... alternativeStereotypeClasses) Select alternative stereotypes for the synthetic bean archive, all previous values are removed.This method does not add any class to the set of bean classes for the synthetic bean archive. It's purpose is solely to compensate the absence of the
beans.xmldescriptor.- Parameters:
alternativeStereotypeClasses-- Returns:
- self
-
selectAlternativeStereotypes
public Weld selectAlternativeStereotypes(Class<? extends Annotation>... alternativeStereotypeClasses) - Specified by:
selectAlternativeStereotypesin classjakarta.enterprise.inject.se.SeContainerInitializer
-
addAlternativeStereotype
Add an alternative stereotype class to the list of selected alternative stereotypes for a synthetic bean archive.This method does not add any class to the set of bean classes for the synthetic bean archive. It's purpose is solely to compensate the absence of the
beans.xmldescriptor.- Parameters:
alternativeStereotypeClass-- Returns:
- self
-
property
Set the configuration property.- Parameters:
key-value-- Returns:
- self
- See Also:
-
ARCHIVE_ISOLATION_SYSTEM_PROPERTYSHUTDOWN_HOOK_SYSTEM_PROPERTYConfigurationKey
-
properties
Set all the configuration properties.- Parameters:
properties-- Returns:
- self
-
addProperty
- Specified by:
addPropertyin classjakarta.enterprise.inject.se.SeContainerInitializer
-
setProperties
- Specified by:
setPropertiesin classjakarta.enterprise.inject.se.SeContainerInitializer
-
addServices
Register per-deployment services which are shared across the entire application.Weld uses services to communicate with its environment, e.g.
ExecutorServicesorTransactionServices.Service implementation may specify their priority using
Priority. Services with higher priority have precedence. Services that do not specify priority have the default priority of 4500.- Parameters:
services-- Returns:
- self
- See Also:
-
Service
-
setBeanDiscoveryMode
Sets the bean discovery mode for synthetic bean archive. Default mode is ANNOTATED.- Parameters:
mode- bean discovery mode in a form of an enum fromBeanDiscoveryMode. Accepted values are ALL, ANNOTATED- Returns:
- self
- Throws:
IllegalArgumentException- if BeanDiscoveryMode.NONE is passed as an argument
-
reset
Reset the synthetic bean archive (bean classes and enablement), explicitly added extensions and services.- Returns:
- self
-
resetAll
Reset all the state, except for initialized containers.- Returns:
- self
- See Also:
-
enableDiscovery
- Returns:
- self
- See Also:
-
disableDiscovery
By default, the discovery is enabled. However, it's possible to disable the discovery completely so that only the "synthetic" bean archive is considered.- Specified by:
disableDiscoveryin classjakarta.enterprise.inject.se.SeContainerInitializer- Returns:
- self
-
isDiscoveryEnabled
public boolean isDiscoveryEnabled()- Returns:
trueif the discovery is enabled,falseotherwise- See Also:
-
initialize
Bootstraps a new Weld SE container with the current container id (generated value if not set throughcontainerId(String)). The container must be shut down properly when an application is stopped. Applications are encouraged to use the try-with-resources statement or invokeWeldContainer.shutdown()explicitly. However, a shutdown hook is also registered during initialization so that all running containers are shut down automatically when a program exits or VM is terminated. This means that it's not necessary to implement the shutdown logic in a class where a main method is used to start the container.- Specified by:
initializein interfaceContainerInstanceFactory- Specified by:
initializein classjakarta.enterprise.inject.se.SeContainerInitializer- Returns:
- the Weld container
- See Also:
-
shutdown
public void shutdown()Shuts down all the containers initialized by this builder. -
setClassLoader
Set aClassLoader. The givenClassLoaderwill be scanned automatically for bean archives if scanning is enabled.- Specified by:
setClassLoaderin classjakarta.enterprise.inject.se.SeContainerInitializer- Parameters:
classLoader-- Returns:
- self
-
setResourceLoader
Set aResourceLoaderused to scan the application for bean archives. If you only want to use a specificClassLoaderfor scanning, usesetClassLoader(ClassLoader)instead.- Parameters:
resourceLoader-- Returns:
- self
- See Also:
-
disableIsolation
Disable bean archive isolation, i.e. use a "flat" deployment structure.- Returns:
- self
- See Also:
-
skipShutdownHook
Skip shutdown hook registration.- Returns:
- self
- See Also:
-
scanClasspathEntries
Scans the class path entries - implicit bean archives which don't contain a beans.xml file are supported.- Returns:
- self
- See Also:
-
addBeanDefiningAnnotations
Registers annotations which will be considered as bean defining annotations. NOTE - If used along with<trim/>bean archives and/or with Weld configuration keyorg.jboss.weld.bootstrap.vetoTypesWithoutBeanDefiningAnnotation, these annotations will be ignored.- Parameters:
annotations- annotations which will be considered as Bean Defining Annotations.- Returns:
- self
-
createDeployment
protected org.jboss.weld.bootstrap.spi.Deployment createDeployment(org.jboss.weld.resources.spi.ResourceLoader resourceLoader, org.jboss.weld.bootstrap.api.CDI11Bootstrap bootstrap) Extensions to Weld SE can subclass and override this method to customize the deployment before weld boots up. For example, to add a custom ResourceLoader, you would subclass Weld like so:
public class MyWeld extends Weld { protected Deployment createDeployment(ResourceLoader resourceLoader, CDI11Bootstrap bootstrap) { return super.createDeployment(new MyResourceLoader(), bootstrap); } }This could then be used as normal:
WeldContainer container = new MyWeld().initialize();
- Parameters:
resourceLoader-bootstrap-
-
getInstanceByType
protected <T> T getInstanceByType(jakarta.enterprise.inject.spi.BeanManager manager, Class<T> type, Annotation... bindings) Utility method allowing managed instances of beans to provide entry points for non-managed beans (such asWeldContainer). Should only called once Weld has finished booting.- Parameters:
manager- the BeanManager to use to access the managed instancetype- the type of the Beanbindings- the bean's qualifiers- Returns:
- a managed instance of the bean
- Throws:
IllegalArgumentException- if the given type represents a type variableIllegalArgumentException- if two instances of the same qualifier type are givenIllegalArgumentException- if an instance of an annotation that is not a qualifier type is givenjakarta.enterprise.inject.UnsatisfiedResolutionException- if no beans can be resolved * @throws AmbiguousResolutionException if the ambiguous dependency resolution rules failIllegalArgumentException- if the given type is not a bean type of the given bean
-
isImplicitScanEnabled
protected boolean isImplicitScanEnabled() -
isSyntheticBeanArchiveRequired
protected boolean isSyntheticBeanArchiveRequired() -
getExtensions
protected Iterable<org.jboss.weld.bootstrap.spi.Metadata<jakarta.enterprise.inject.spi.Extension>> getExtensions() -
buildSyntheticBeansXml
protected org.jboss.weld.bootstrap.spi.BeansXml buildSyntheticBeansXml() -
scanPackages
-
isEnabled
-
getPropertyValue
-