This feature has been implemented in the master branch for a while (Weld 3 alpha releases), but now it has been backported into the 2.2 branch and 2.2.10.Final is the first stable version of Weld with this simplified and unified configuration.
The Problem
Up to now, the configuration of Weld was a little bit difficult to use. There are several configurable components, each one was using a specific source of configuration (system property, marker file, properties file, etc.). The idea of WELD-1791 was to unify the configuration and still remain backward compatible if possible.
The Solution
First, every configurable option has a configuration key associated. There is a single place where all configuration keys are defined - see the org.jboss.weld.config.ConfigurationKey
javadoc or 19.1. Weld configuration. Each configuration property (e.g. value for a configuration key) can be specified:
- in a properties file named
weld.properties
(highest priority), - as a system property,
- by a bootstrap configuration provided by an integrator (lowest priority).
If a configuration key is set in multiple sources (e.g. as a system property and in a properties file), the value from the source with higher priority is taken, other values are ignored. Unsupported configuration keys are also ignored. On the other hand, if an invalid configuration property value is set (e.g. the key expects an integer and recieves a string), the container automatically detects the problem and treats it as a deployment problem.
Example
Say we want to disable the concurrent deployment, so that Weld loads and deploys beans sequentially (19.1.2. Concurrent deployment configuration). At the same time, we'd like to enable the relaxed construction (feature previously called "unsafe proxies"; 19.1.1. Relaxed construction). And finally, we would also like to dump the generated bytecode of client proxies and enhanced subclasses (19.1.6. Debugging generated bytecode).
Before
What do we need to do in Weld before 2.2.10?
- Concurrent deployment - create a properties file
org.jboss.weld.bootstrap.properties
and setconcurrentDeployment
key to false (or use integrator API) - Relaxed construction - create a marker file
META-INF/org.jboss.weld.enableUnsafeProxies
- Dump generated bytecode - set system property
org.jboss.weld.proxy.dump
to the desired path
Now
The simplest solution would be to create a file named weld.properties
and place it on the classpath:
org.jboss.weld.bootstrap.concurrentDeployment=false org.jboss.weld.construction.relaxed=true org.jboss.weld.proxy.dump=/home/mkouba/proxies
Of course, we could also use system properties or integrator API for all or some of the keys.
Exceptions
Unfortunately, there are always exceptions. First, for org.jboss.weld.xml.disableValidating
key it's only possible to use system properties. However, this key is rather obscure and will not be used very often. Also web-specific settings are not part of the "core" configuration (e.g. 19.3. Mapping CDI contexts to HTTP requests).