You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by bu...@apache.org on 2015/05/05 20:23:13 UTC

svn commit: r950188 [1/2] - in /websites/staging/deltaspike/trunk/content: ./ staging/documentation/

Author: buildbot
Date: Tue May  5 18:23:13 2015
New Revision: 950188

Log:
Staging update by buildbot for deltaspike

Modified:
    websites/staging/deltaspike/trunk/content/   (props changed)
    websites/staging/deltaspike/trunk/content/staging/documentation/configuration.html
    websites/staging/deltaspike/trunk/content/staging/documentation/core.html
    websites/staging/deltaspike/trunk/content/staging/documentation/jsf.html
    websites/staging/deltaspike/trunk/content/staging/documentation/overview.html
    websites/staging/deltaspike/trunk/content/staging/documentation/projectstage.html
    websites/staging/deltaspike/trunk/content/staging/documentation/scheduler.html
    websites/staging/deltaspike/trunk/content/staging/documentation/security.html
    websites/staging/deltaspike/trunk/content/staging/documentation/servlet.html
    websites/staging/deltaspike/trunk/content/staging/documentation/spi.html
    websites/staging/deltaspike/trunk/content/staging/documentation/test-control.html

Propchange: websites/staging/deltaspike/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Tue May  5 18:23:13 2015
@@ -1 +1 @@
-1675362
+1677875

Modified: websites/staging/deltaspike/trunk/content/staging/documentation/configuration.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/staging/documentation/configuration.html (original)
+++ websites/staging/deltaspike/trunk/content/staging/documentation/configuration.html Tue May  5 18:23:13 2015
@@ -194,23 +194,40 @@ body {
 
         <div id="toc" class="toc">
             <ul class="sectlevel1">
-<li><a href="#_configuration_basics">Configuration Basics</a>
+<li><a href="#_introduction">Introduction</a>
 <ul class="sectlevel2">
 <li><a href="#_benefits_for_production">Benefits for Production</a></li>
 <li><a href="#_drop_in_configuration">Drop-In Configuration</a></li>
 <li><a href="#_cdi_extension_configuration">CDI-Extension Configuration</a></li>
-<li><a href="#_userland_configuration">Userland Configuration</a></li>
 </ul>
 </li>
-<li><a href="#_configresolver">ConfigResolver</a>
+<li><a href="#_accessing_configured_values_using_configresolver">Accessing configured values using ConfigResolver</a>
 <ul class="sectlevel2">
+<li><a href="#_configresolver_methods">ConfigResolver methods</a>
+<ul class="sectlevel3">
 <li><a href="#_getpropertyvalue">getPropertyValue()</a></li>
 <li><a href="#_getprojectstageawarepropertyvalue">getProjectStageAwarePropertyValue()</a></li>
-<li><a href="#_getpropertyawarepropertyvalue">getPropertyAwarePropertyValue()</a></li>
+<li><a href="#_getpropertyawarepropertyvalue">getPropertyAwarePropertyValue()</a>
+<ul class="sectlevel4">
+<li><a href="#_property_value_resolution_sequence">Property value resolution sequence</a></li>
+</ul>
+</li>
 <li><a href="#_handling_of_default_values">Handling of Default Values</a></li>
 </ul>
 </li>
-<li><a href="#_configsource">ConfigSource</a>
+<li><a href="#_typedresolver_api">TypedResolver API</a>
+<ul class="sectlevel3">
+<li><a href="#_supported_types">Supported types</a></li>
+</ul>
+</li>
+<li><a href="#_injection_of_configured_values_into_beans_using_configproperty">Injection of configured values into beans using @ConfigProperty</a>
+<ul class="sectlevel3">
+<li><a href="#_custom_configproperty_types">Custom ConfigProperty types</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a href="#_providing_configuration_using_configsources">Providing configuration using ConfigSources</a>
 <ul class="sectlevel2">
 <li><a href="#_configsources_provided_by_default">ConfigSources Provided by Default</a></li>
 <li><a href="#_reordering_of_the_default_order_of_configsources">Reordering of the Default Order of ConfigSources</a></li>
@@ -221,18 +238,18 @@ body {
 </li>
 </ul>
 </li>
-<li><a href="#_type_safe_configuration">Type-safe Configuration</a></li>
+<li><a href="#_filtering_configured_values">Filtering configured values</a></li>
 </ul>
             <hr>
             <div class="sect1">
-<h2 id="_configuration_basics">Configuration Basics</h2>
+<h2 id="_introduction">Introduction</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>The goal of the DeltaSpike configuration mechanism is to make it
 obsolete to touch released binaries for changing the configuration of
 your project. All values which are needed in your code (but should not
 be hardcoded as static final constants) can be maintained via
-DeltaSpikes own configuration mechanism in a very flexible and powerful
+DeltaSpike&#8217;s own configuration mechanism in a very flexible and powerful
 way.</p>
 </div>
 <div class="sect2">
@@ -284,28 +301,41 @@ the <code>ConfigResolver</code> which re
 application.</p>
 </div>
 </div>
-<div class="sect2">
-<h3 id="_userland_configuration">Userland Configuration</h3>
-<div class="paragraph">
-<p>DeltaSpike also provides a mechanism to inject those configured values
-using the <code>@ConfigProperty</code> CDI Qualifier.</p>
-</div>
-</div>
 </div>
 </div>
 <div class="sect1">
-<h2 id="_configresolver">ConfigResolver</h2>
+<h2 id="_accessing_configured_values_using_configresolver">Accessing configured values using ConfigResolver</h2>
 <div class="sectionbody">
 <div class="paragraph">
-<p>The <code>ConfigResolver</code> is the central point to pick up configured values
-in DeltaSpike.</p>
+<p>The <code>ConfigResolver</code> is the central point to access configuration in DeltaSpike. There are several different APIs
+ and ways to access the individual configured values, each suitable for a different purpose:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>ConfigResolver</code> methods for easy programmatic access to values</p>
+</li>
+<li>
+<p><code>TypedResolver</code> API for typed configuration values and precise control over resolution</p>
+</li>
+<li>
+<p><code>@ConfigProperty</code> for injection of configured values into beans</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>All three mechanisms are described in the following sections.</p>
 </div>
 <div class="sect2">
-<h3 id="_getpropertyvalue">getPropertyValue()</h3>
+<h3 id="_configresolver_methods">ConfigResolver methods</h3>
 <div class="paragraph">
-<p>The method <code>ConfigResolver#getPropertyValue(String key)</code> allows to
-provide a string based key and returns the configured value as <code>String</code>,
-or <code>null</code> if no value has been found.</p>
+<p>ConfigResolver offers several methods for easy access to String values of configured properties.</p>
+</div>
+<div class="sect3">
+<h4 id="_getpropertyvalue">getPropertyValue()</h4>
+<div class="paragraph">
+<p>The method <code>ConfigResolver#getPropertyValue(String key)</code> returns the value configured for a given key
+as <code>String</code>, or <code>null</code> if no value has been found.</p>
 </div>
 <div class="paragraph">
 <p><code>ConfigResolver#getAllPropertyValues(String key)</code> has a similar contract
@@ -322,14 +352,13 @@ configuration:</p>
 </div>
 </div>
 </div>
-<div class="sect2">
-<h3 id="_getprojectstageawarepropertyvalue">getProjectStageAwarePropertyValue()</h3>
+<div class="sect3">
+<h4 id="_getprojectstageawarepropertyvalue">getProjectStageAwarePropertyValue()</h4>
 <div class="paragraph">
 <p>The method
 <code>ConfigResolver#getProjectStageAwarePropertyValue(String key)</code> utilizes
 the <a href="projectstage.html">DeltaSpike ProjectStage</a> mechanism to allow
-configured values to depend on the current <code>ProjectStage</code> of the system
-we run on.</p>
+configured values to depend on the current <code>ProjectStage</code> of the running system.</p>
 </div>
 <div class="paragraph">
 <p>This is done by first looking up the ProjectStage (this internally
@@ -347,8 +376,8 @@ following lookup chain until we found a
 </ul>
 </div>
 </div>
-<div class="sect2">
-<h3 id="_getpropertyawarepropertyvalue">getPropertyAwarePropertyValue()</h3>
+<div class="sect3">
+<h4 id="_getpropertyawarepropertyvalue">getPropertyAwarePropertyValue()</h4>
 <div class="paragraph">
 <p>The method
 <code>ConfigResolver#getProjectStageAwarePropertyValue(String key, String property)</code>
@@ -356,17 +385,16 @@ first looks up the configured value of t
 value to determine the final lookup path. All those lookups take the
 <a href="projectstage.html">DeltaSpike ProjectStage</a> mechanism into account.</p>
 </div>
-<div class="paragraph">
-<p>Given we have the following code in our program:</p>
-</div>
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">String</span> dbUserName = ConfigResolver.getPropertyAwarePropertyValue(<span class="string"><span class="delimiter">&quot;</span><span class="content">databaseconfig.username</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">dbvendor</span><span class="delimiter">&quot;</span></span>);</code></pre>
 </div>
 </div>
+<div class="sect4">
+<h5 id="_property_value_resolution_sequence">Property value resolution sequence</h5>
 <div class="paragraph">
-<p>This will end up in the following lookup sequences. First we need to
-resolve the value of the property:</p>
+<p>The following lookup sequence will be performed until a value is found:
+First, the value of the <em>parameter</em> property is resolved:</p>
 </div>
 <div class="ulist">
 <ul>
@@ -385,13 +413,13 @@ the following lookup chain is used until
 <div class="ulist">
 <ul>
 <li>
-<p>key + '.' + property + projectstage, e.g. "databaseconfig.username.mysql.Production"</p>
+<p>key + '.' + propertyValue + '.' + projectstage, e.g. "databaseconfig.username.mysql.Production"</p>
 </li>
 <li>
-<p>key + '.' + property, e.g. "databaseconfig.username.mysql"</p>
+<p>key + '.' + propertyValue, e.g. "databaseconfig.username.mysql"</p>
 </li>
 <li>
-<p>key + '.' + projectstage, e.g. "databaseconfig.username.Production"</p>
+<p>key + '.' + projectStage, e.g. "databaseconfig.username.Production"</p>
 </li>
 <li>
 <p>key, e.g. "databaseconfig.username"</p>
@@ -399,8 +427,9 @@ the following lookup chain is used until
 </ul>
 </div>
 </div>
-<div class="sect2">
-<h3 id="_handling_of_default_values">Handling of Default Values</h3>
+</div>
+<div class="sect3">
+<h4 id="_handling_of_default_values">Handling of Default Values</h4>
 <div class="paragraph">
 <p>There is a 2nd variant of all those methods where it is possible to
 provide a default value which gets returned instead of <code>null</code> or if the
@@ -419,17 +448,215 @@ of the <code>ConfigSources</code>. The v
 cached in the ConfigResolver but might be cached in the ConfigSources.
 This makes the overall calculation a bit slower, but allows for values
 to change dynamically if someone likes to for example implement a
-<code>JmxConfigSource</code> (not yet part of DeltaSpike, but easily
-implementable).
+<code>JmxConfigSource</code> (not yet part of DeltaSpike, but easily implementable).
 </td>
 </tr>
 </table>
 </div>
 </div>
 </div>
+<div class="sect2">
+<h3 id="_typedresolver_api">TypedResolver API</h3>
+<div class="paragraph">
+<p>Very often the configured values represent more than just strings&#8201;&#8212;&#8201;number types and booleans are commonly used as
+configuration types. ConfigResolver provides a builder-style API to access configuration values as specific types.</p>
+</div>
+<div class="paragraph">
+<p>The API is accessed by a call to <code>ConfigResolver.resolve(propertyKey)</code>.</p>
+</div>
+<div class="paragraph">
+<p>The simplest usage of the API is resolution of a String property, equivalent to a call to
+<code>ConfigResolver.getPropertyValue(propertyKey)</code>.</p>
+</div>
+<div class="listingblock">
+<div class="title">Simple example of TypedResolver</div>
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">String</span> userName = ConfigResolver.resolve(<span class="string"><span class="delimiter">&quot;</span><span class="content">user.name</span><span class="delimiter">&quot;</span></span>).getValue();</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The call to <code>ConfigResolver.resolve(..)</code> returns a builder which has methods to refine the resolution, including the
+following:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>as(Class&lt;N&gt; clazz)</code>&#8201;&#8212;&#8201;defines the return type of the property</p>
+</li>
+<li>
+<p><code>parameterizedBy(String propertyName)</code>&#8201;&#8212;&#8201;sets a parameter for the resolution, similarly as in
+<a href="#_getpropertyawarepropertyvalue">ConfigResolver.getPropertyAwarePropertyValue</a></p>
+</li>
+<li>
+<p><code>withCurrentProjectStage(boolean with)</code>&#8201;&#8212;&#8201;indicates whether the current ProjectStage should be taken into account
+for the resolution</p>
+</li>
+<li>
+<p><code>strictly(boolean strictly)</code>&#8201;&#8212;&#8201;indicates, whether the <a href="#_property_value_resolution_sequence">property value
+resolution sequence</a> should be taken into account. When set to true, the sequence is not followed.</p>
+</li>
+<li>
+<p><code>withDefault(T value)</code>&#8201;&#8212;&#8201;sets the default value, used in case the resolution returns <code>null</code></p>
+</li>
+<li>
+<p><code>getValue()</code>&#8201;&#8212;&#8201;terminates the builder and returns the resolved value with the appropriate type</p>
+</li>
+</ul>
+</div>
+<div class="listingblock">
+<div class="title">A more complete example of TypedResolver</div>
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">Integer</span> dbPort = ConfigResolver
+    .resolve(<span class="string"><span class="delimiter">&quot;</span><span class="content">db.port</span><span class="delimiter">&quot;</span></span>)
+    .as(<span class="predefined-type">Integer</span>.class)
+    .withProjectStage(<span class="predefined-constant">true</span>)
+    .parameterizedBy(<span class="string"><span class="delimiter">&quot;</span><span class="content">db.vendor</span><span class="delimiter">&quot;</span></span>)
+    .withDefault(<span class="integer">3306</span>)
+    .getValue();</code></pre>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_supported_types">Supported types</h4>
+<div class="paragraph">
+<p>The types supported out of the box include: String, Integer, Long, Float, Double, Boolean, Class.
+Custom types can be supported by providing an implementation of the <code>ConfigResolver.Converter</code> interface.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">Date</span> deadline = ConfigResolver.resolve(<span class="string"><span class="delimiter">&quot;</span><span class="content">deadline</span><span class="delimiter">&quot;</span></span>).as(<span class="predefined-type">Date</span>.class, <span class="keyword">new</span> CustomDateConverter()).getValue());</code></pre>
+</div>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">CustomDateConverter</span> <span class="directive">implements</span> ConfigResolver.Converter&lt;<span class="predefined-type">Date</span>&gt; {
+
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">Date</span> convert(<span class="predefined-type">String</span> value)
+    {
+        <span class="predefined-type">String</span><span class="type">[]</span> parts = value.split(<span class="string"><span class="delimiter">&quot;</span><span class="content">-</span><span class="delimiter">&quot;</span></span>);
+        <span class="keyword">return</span> <span class="keyword">new</span> <span class="predefined-type">GregorianCalendar</span>(<span class="predefined-type">Integer</span>.valueOf(parts[<span class="integer">0</span>]), <span class="predefined-type">Integer</span>.valueOf(parts[<span class="integer">1</span>]),
+                <span class="predefined-type">Integer</span>.valueOf(parts[<span class="integer">2</span>])).getTime();
+    }
+}</code></pre>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_injection_of_configured_values_into_beans_using_configproperty">Injection of configured values into beans using @ConfigProperty</h3>
+<div class="paragraph">
+<p>DeltaSpike provides a way to inject configured values into your code via the qualifier <code>@ConfigProperty</code>.
+The supported types are the same as the <a href="#_supported_types">supported types of the TypedResolver</a>.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@ApplicationScoped</span>
+<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeRandomService</span>
+{
+    <span class="annotation">@Inject</span>
+    <span class="annotation">@ConfigProperty</span>(name = <span class="string"><span class="delimiter">&quot;</span><span class="content">endpoint.poll.interval</span><span class="delimiter">&quot;</span></span>)
+    <span class="directive">private</span> <span class="predefined-type">Integer</span> pollInterval;
+
+    <span class="annotation">@Inject</span>
+    <span class="annotation">@ConfigProperty</span>(name = <span class="string"><span class="delimiter">&quot;</span><span class="content">endpoint.poll.servername</span><span class="delimiter">&quot;</span></span>)
+    <span class="directive">private</span> <span class="predefined-type">String</span> pollUrl;
+
+    ...
+ }</code></pre>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_custom_configproperty_types">Custom ConfigProperty types</h4>
+<div class="paragraph">
+<p>Custom types can be injected using <code>@ConfigProperty</code> by providing a custom producer.
+DeltaSpike provides a base implementation for custom producers in the class <code>BaseConfigPropertyProducer</code>
+which offers the following methods:
+* <code>getStringPropertyValue</code>&#8201;&#8212;&#8201;looks for the property name in <code>@ConfigProperty</code> annotation on the injection point.
+If not found, it looks for it in other annotations on the injection point.
+* <code>getPropertyValue</code>&#8201;&#8212;&#8201;a shortcut to <a href="#_configresolver">ConfigResolver#getProjectStageAwarePropertyValue</a>
+* <code>getAnnotation</code>&#8201;&#8212;&#8201;extracts any annotation type from the injection point, useful when a custom annotation
+is used instead of <code>@ConfigProperty</code></p>
+</div>
+<div class="paragraph">
+<p>The following example uses <code>getStringPropertyValue</code> and a custom <code>@Location</code> annotation annotated <code>@ConfigProperty</code>.
+In such case, the <code>@Location</code> annotation is bound to a single fixed property name and acts as a type-safe replacement
+for <code>@ConfigProperty(name = "locationId")</code>.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@ApplicationScoped</span>
+<span class="directive">public</span> <span class="type">class</span> <span class="class">CustomConfigPropertyProducer</span> <span class="directive">extends</span> BaseConfigPropertyProducer {
+
+    <span class="annotation">@Produces</span>
+    <span class="annotation">@Dependent</span>
+    <span class="annotation">@Location</span>
+    <span class="directive">public</span> LocationId produceLocationId(InjectionPoint injectionPoint)
+    {
+        <span class="predefined-type">String</span> configuredValue = getStringPropertyValue(injectionPoint);
+
+        <span class="keyword">return</span> LocationId.valueOf(configuredValue.trim().toUpperCase());
+    }
+}</code></pre>
+</div>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>@Target({ FIELD, METHOD })
+@Retention(RUNTIME)
+@ConfigProperty(name = "locationId", defaultValue = "LOCATION_X")
+@Qualifier
+public @interface Location {}</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>@ConfigProperty</code> annotation doesn&#8217;t need to be used at all. Instead, a custom annotation can be provided and
+obtained in the producer using <code>getAnnotation</code> and <code>getPropertyValue</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>@ApplicationScoped
+public class NumberConfigPropertyProducer extends BaseConfigPropertyProducer
+{
+    @Produces
+    @Dependent
+    @NumberConfig(name = "unused")
+    public Float produceNumberProperty(InjectionPoint injectionPoint) throws ParseException
+    {
+        // resolve the annotation
+        NumberConfig metaData = getAnnotation(injectionPoint, NumberConfig.class);
+
+        // get the configured value from the underlying configuration system
+        String configuredValue = getPropertyValue(metaData.name(), metaData.defaultValue());
+
+        // format according to the given pattern
+        DecimalFormat df = new DecimalFormat(metaData.pattern(), new DecimalFormatSymbols(Locale.US));
+        return df.parse(configuredValue).floatValue();
+    }
+}</pre>
+</div>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>@Qualifier
+public @interface NumberConfig
+{
+    @Nonbinding
+    String name();
+
+    @Nonbinding
+    String defaultValue() default ConfigProperty.NULL;
+
+    @Nonbinding
+    String pattern() default "#0.00";
+}</pre>
+</div>
+</div>
+</div>
+</div>
+</div>
 </div>
 <div class="sect1">
-<h2 id="_configsource">ConfigSource</h2>
+<h2 id="_providing_configuration_using_configsources">Providing configuration using ConfigSources</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>A <code>ConfigSource</code> is exactly what its name says: a source for configured
@@ -568,8 +795,13 @@ implementations provided by DeltaSpike d
 <h4 id="_propertyfileconfig">PropertyFileConfig</h4>
 <div class="paragraph">
 <p>For registering all your own property files of a certain name in your
-classpath to get picked up as <code>ConfigSource`s you can also provide a
-class which implements the `PropertyFileConfig</code> interface.</p>
+classpath to get picked up as ConfigSources you can also provide a
+class which implements the <code>PropertyFileConfig</code> interface.</p>
+</div>
+<div class="paragraph">
+<p>The method <code>isOptional</code> indicates whether your custom property file is mandatory.
+If a mandatory property file is not found during deployment, DeltaSpike throws
+an <code>IllegalStateException</code> and stops the deployment.</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -580,6 +812,12 @@ class which implements the `PropertyFile
     {
         <span class="keyword">return</span> <span class="string"><span class="delimiter">&quot;</span><span class="content">myconfig.properties</span><span class="delimiter">&quot;</span></span>;
     }
+
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="type">boolean</span> isOptional()
+    {
+        <span class="keyword">return</span> <span class="predefined-constant">false</span>;
+    }
 }</code></pre>
 </div>
 </div>
@@ -606,27 +844,46 @@ dependency to the module that contains t
 </div>
 </div>
 <div class="sect1">
-<h2 id="_type_safe_configuration">Type-safe Configuration</h2>
+<h2 id="_filtering_configured_values">Filtering configured values</h2>
 <div class="sectionbody">
 <div class="paragraph">
-<p>DeltaSpike provides a way to directly inject configured values into your
-code via the qualifier <code>@ConfigProperty</code>.</p>
+<p>It is possible to perform filtering on all configured values on their way between the ConfigSource and user code.
+This might be useful for example for decryption of values from an encrypted ConfigSource or to hide passwords from a
+log.</p>
+</div>
+<div class="paragraph">
+<p>DeltaSpike doesn&#8217;t provide any filters by default but custom filters can be provided by implementing the
+<code>ConfigFilter</code> interface. This is then enabled either using the ServiceLoader mechanism or by calling <code>ConfigResolver
+.addConfigFilter(ConfigFilter)</code>. Provided ConfigFilters are then enabled for the whole application.</p>
+</div>
+<div class="paragraph">
+<p>Once some filters are provided, all operations of ConfigResolver return filtered values.</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>.A custom ConfigFilter</pre>
+</div>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre>@ApplicationScoped
-public class SomeRandomService
+<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">DecryptingConfigFilter</span> <span class="directive">implements</span> ConfigFilter
 {
-    @Inject
-    @ConfigProperty(name = "endpoint.poll.interval")
-    private Integer pollInterval;
-
-    @Inject
-    @ConfigProperty(name = "endpoint.poll.servername")
-    private String pollUrl;
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">String</span> filterValue(<span class="predefined-type">String</span> key, <span class="predefined-type">String</span> value)
+    {
+        <span class="keyword">if</span> (key.contains(<span class="string"><span class="delimiter">&quot;</span><span class="content">encrypted</span><span class="delimiter">&quot;</span></span>))
+        {
+            <span class="keyword">return</span> decrypt(value);
+        }
+        <span class="keyword">return</span> value;
+    }
 
-    ...
- }</pre>
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">String</span> filterValueForLog(<span class="predefined-type">String</span> key, <span class="predefined-type">String</span> value)
+    {
+        <span class="keyword">return</span> <span class="string"><span class="delimiter">&quot;</span><span class="content">&lt;value encrypted&gt;</span><span class="delimiter">&quot;</span></span>;
+    }
+}</code></pre>
 </div>
 </div>
 </div>

Modified: websites/staging/deltaspike/trunk/content/staging/documentation/core.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/staging/documentation/core.html (original)
+++ websites/staging/deltaspike/trunk/content/staging/documentation/core.html Tue May  5 18:23:13 2015
@@ -194,52 +194,77 @@ body {
 
         <div id="toc" class="toc">
             <ul class="sectlevel1">
-<li><a href="#_overview">Overview</a></li>
-<li><a href="#_configure_your_projects">Configure Your Projects</a></li>
-<li><a href="#_use_the_module_features">Use the Module Features</a>
+<li><a href="#_deltaspike_configuration">DeltaSpike Configuration</a>
 <ul class="sectlevel2">
-<li><a href="#_core_api">Core - API</a>
-<ul class="sectlevel3">
-<li><a href="#_deltaspike_configuration">DeltaSpike Configuration</a></li>
-<li><a href="#_beanprovider">BeanProvider</a></li>
+<li><a href="#_internal_configuration">Internal configuration</a></li>
+</ul>
+</li>
+<li><a href="#_beanprovider">BeanProvider</a>
+<ul class="sectlevel2">
+<li><a href="#_dependentprovider">DependentProvider</a></li>
+</ul>
+</li>
 <li><a href="#_beanmanagerprovider">BeanManagerProvider</a></li>
+<li><a href="#_annotationinstanceprovider">AnnotationInstanceProvider</a></li>
 <li><a href="#_type_safe_projectstage">Type-safe ProjectStage</a></li>
 <li><a href="#__exclude">@Exclude</a>
-<ul class="sectlevel4">
+<ul class="sectlevel2">
 <li><a href="#_custom_expressioninterpreter">Custom ExpressionInterpreter</a></li>
 </ul>
 </li>
 <li><a href="#_type_safe_view_config">Type-safe View-Config</a></li>
 <li><a href="#_literals">Literals</a></li>
-<li><a href="#_messages_and_i18n">Messages and I18n</a></li>
+<li><a href="#_messages_and_i18n">Messages and i18n</a>
+<ul class="sectlevel2">
 <li><a href="#_dynamic_message_builder">Dynamic Message Builder</a>
-<ul class="sectlevel4">
+<ul class="sectlevel3">
 <li><a href="#_creating_message_instances">Creating Message Instances</a></li>
-<li><a href="#_customizing_the_message_context">Customizing the Message Context</a></li>
+<li><a href="#_customizing_the_message_context">Customizing the Message Context</a>
+<ul class="sectlevel4">
+<li><a href="#_messageresolver">MessageResolver</a></li>
+<li><a href="#_messageinterpolator">MessageInterpolator</a></li>
+<li><a href="#_localeresolver">LocaleResolver</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a href="#_injecting_resources">Injecting Resources</a>
+<ul class="sectlevel2">
+<li><a href="#_custom_resource_providers">Custom resource providers</a></li>
 </ul>
 </li>
-<li><a href="#_injecting_resources">Injecting Resources</a></li>
 <li><a href="#_exception_control">Exception Control</a>
-<ul class="sectlevel4">
+<ul class="sectlevel2">
 <li><a href="#_usage">Usage</a></li>
-<li><a href="#_exception_handlers">Exception Handlers</a></li>
+<li><a href="#_exception_handlers">Exception Handlers</a>
+<ul class="sectlevel3">
+<li><a href="#__exceptionhandler">@ExceptionHandler</a></li>
+<li><a href="#__handles_and_beforehandles">@Handles and @BeforeHandles</a></li>
+<li><a href="#_ordinal">Ordinal</a></li>
+</ul>
+</li>
 <li><a href="#_exception_chain_processing">Exception Chain Processing</a></li>
-<li><a href="#_apis_for_exception_information_and_flow_control">APIs for Exception Information and Flow Control</a></li>
+<li><a href="#_apis_for_exception_information_and_flow_control">APIs for Exception Information and Flow Control</a>
+<ul class="sectlevel3">
+<li><a href="#_exceptionevent">ExceptionEvent</a></li>
+</ul>
+</li>
 </ul>
 </li>
 <li><a href="#_scopes">Scopes</a>
-<ul class="sectlevel4">
+<ul class="sectlevel2">
 <li><a href="#__windowscoped">@WindowScoped</a></li>
 <li><a href="#__viewaccessscoped">@ViewAccessScoped</a></li>
 <li><a href="#__groupedconversationscoped">@GroupedConversationScoped</a></li>
-</ul>
-</li>
 <li><a href="#_creating_a_custom_cdi_scope">Creating a Custom CDI Scope</a></li>
-<li><a href="#_deactivatable">Deactivatable</a></li>
 </ul>
 </li>
-<li><a href="#_core_utils">Core - Utils</a>
-<ul class="sectlevel3">
+<li><a href="#_deactivatable">Deactivatable</a></li>
+<li><a href="#_utilities">Utilities</a>
+<ul class="sectlevel2">
+<li><a href="#_annotationutils">AnnotationUtils</a></li>
 <li><a href="#_arraysutils">ArraysUtils</a></li>
 <li><a href="#_beanutils">BeanUtils</a></li>
 <li><a href="#_contextutils">ContextUtils</a></li>
@@ -251,44 +276,87 @@ body {
 </ul>
 </li>
 </ul>
-</li>
-</ul>
             <hr>
-            <div class="sect1">
-<h2 id="_overview">Overview</h2>
+            <div id="preamble">
 <div class="sectionbody">
 <div class="paragraph">
-<p>The Core module provides fundamental and defining DeltaSpike API and utility classes. As such, this module must be included in every project that uses DeltaSpike.</p>
+<p>The Core module provides fundamental and defining DeltaSpike API and utility classes. As such, this module must be included in every project that uses DeltaSpike.
+Instructions for configuring your projects to use the DeltaSpike Core module are detailed in
+<a href="configure.html">Configure DeltaSpike in Your Projects</a> as part of the general instructions for configuring your projects for DeltaSpike.</p>
 </div>
 </div>
 </div>
 <div class="sect1">
-<h2 id="_configure_your_projects">Configure Your Projects</h2>
+<h2 id="_deltaspike_configuration">DeltaSpike Configuration</h2>
 <div class="sectionbody">
 <div class="paragraph">
-<p>Instructions for configuring your Maven-based and Maven-independent projects to use the DeltaSpike Core module are detailed in <a href="configure.html">Configure DeltaSpike in Your Projects</a> as part of the general instructions for configuring your projects for DeltaSpike.</p>
-</div>
+<p>DeltaSpike provides a very flexible application configuration mechanism. Its main goal is to make it possible
+to never have to rebuild a project just for the sake of adjusting configuration values. It respects the usual
+software development cycle and takes into account project stages, various configuration sources and resolution
+mechanisms. Configuration can be overridden just by dropping a JAR into the classpath.</p>
 </div>
+<div class="paragraph">
+<p>Detailed documentation is available on a separate page: <a href="configuration.html">Configuration</a>.</p>
 </div>
-<div class="sect1">
-<h2 id="_use_the_module_features">Use the Module Features</h2>
-<div class="sectionbody">
 <div class="sect2">
-<h3 id="_core_api">Core - API</h3>
-<div class="sect3">
-<h4 id="_deltaspike_configuration">DeltaSpike Configuration</h4>
+<h3 id="_internal_configuration">Internal configuration</h3>
 <div class="paragraph">
-<p>This is described in a separate page solely targeting <a href="configuration.html">configuration</a> mechanics, API and SPI.</p>
+<p>The functionality of DeltaSpike itself and its modules is adjustable using the same mechanism. There are two main
+types of internal configuration:</p>
 </div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>static configuration:</strong> certain configurable options, like the maximum number of windows in the window scope or the
+priority for DeltaSpike&#8217;s global interceptors, are defined using the DeltaSpike configuration mechanism and can be
+adjusted by redefining their value in the <code>apache-deltaspike.properties</code> file, as described in the
+<a href="configuration.html">documentation</a>. All of these configuration options and their corresponding properties can be
+found as members of interfaces extending <code>DeltaSpikeBaseConfig</code>, e.g. <code>CoreBaseConfig</code> which configures the core
+ module.</p>
+</li>
+<li>
+<p><strong>dynamic configuration:</strong> certain values can change dynamically during runtime and some may differ even among
+contexts. For example, much of the behaviour of the JSF module is configured in <code>JsfModuleConfig</code>. To override any of
+ the default configuration options, the <code>JsfModuleConfig</code> bean can be overridden using a custom implementation of
+ <code>JsfModuleConfig</code> which would be annotated <code>@Alternative</code> or <code>@Specializes</code>. All of the dynamic CDI-based
+ configuration beans can be found as implementations of the <code>DeltaSpikeConfig</code> interface.</p>
+</li>
+</ul>
 </div>
-<div class="sect3">
-<h4 id="_beanprovider">BeanProvider</h4>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_beanprovider">BeanProvider</h2>
+<div class="sectionbody">
 <div class="paragraph">
-<p>The <code>BeanProvider</code> is a class which provides (static) util methods which
-allow to lookup beans if it is not possible to inject them via <code>@Inject</code>
-or if the lookup depends on dynamic conditions. Instead of using the
-term 'bean', the term 'contextual instance' is used because that&#8217;s the
-term used by CDI itself.</p>
+<p>The <code>BeanProvider</code> utility class provides static methods for manual lookup of bean instances in places where
+standard injection is not available or if the lookup depends on dynamic conditions.</p>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+<code>BeanProvider</code> is only used to look up normal-scoped contextual
+instances. To obtain instances of dependent-scoped beans, use <a href="#_dependentprovider">DependentProvider</a>.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+The term 'contextual instance' is used instead of 'bean' because that&#8217;s the term used by CDI itself.
+</td>
+</tr>
+</table>
 </div>
 <div class="paragraph">
 <p>The following example shows a simple lookup. With the second parameter
@@ -376,11 +444,8 @@ destroy them manually - especially if yo
 can also call the previous util method with an additional parameter to
 filter dependent scoped instances.</p>
 </div>
-<div class="paragraph">
-<div class="title">Resolving All Contextual Instances of a Given Type without Dependent</div>
-<p>Scoped Instances</p>
-</div>
 <div class="listingblock">
+<div class="title">Resolving All Contextual Instances of a Given Type without Dependent-scoped Instances</div>
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">List</span>&lt;MyServiceInterface&gt; myServiceList = BeanProvider.getContextualReferences(MyServiceInterface.class, <span class="predefined-constant">false</span>, <span class="predefined-constant">false</span>);</code></pre>
 </div>
@@ -397,9 +462,38 @@ fields.</p>
 <pre class="CodeRay highlight"><code data-lang="java">BeanProvider.injectFields(myObject);</code></pre>
 </div>
 </div>
+<div class="sect2">
+<h3 id="_dependentprovider">DependentProvider</h3>
+<div class="paragraph">
+<p><code>DependentProvider</code> must be used instead of <code>BeanProvider</code> to obtain instances of dependent-scoped beans to allow for
+their proper destruction.</p>
 </div>
-<div class="sect3">
-<h4 id="_beanmanagerprovider">BeanManagerProvider</h4>
+<div class="paragraph">
+<p>When obtaining contextual instances using <code>@Inject</code>, the normal-scoped ones get destroyed along with their associated
+context. However, instances of dependent-scoped beans&#8201;&#8212;&#8201;as implied by their name&#8201;&#8212;&#8201;depend on the lifecycle of
+the contextual instance which declares them and get destroyed along with this declaring bean&#8217;s instance.</p>
+</div>
+<div class="paragraph">
+<p>However, if dependent-scoped instances are obtained programmatically using <code>DependentProvider</code>, there&#8217;s no
+"declaring bean" to speak of and they <strong>must be destroyed manually</strong>.</p>
+</div>
+<div class="listingblock">
+<div class="title">Obtaining and destroying an instance of a dependent-scoped bean using DependentProvider</div>
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">DependentProvider&lt;MyBean&gt; myBeanProvider = BeanProvider.getDependent(MyBean.class);
+MyBean myBean = myBeanProvider.get();
+
+<span class="comment">// ...work with myBean...</span>
+
+myBeanProvider.destroy();</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_beanmanagerprovider">BeanManagerProvider</h2>
+<div class="sectionbody">
 <div class="paragraph">
 <p>This mechanism provides access to the <code>BeanManager</code> by registering the
 current <code>BeanManager</code> during the startup. This is really handy if you
@@ -431,8 +525,63 @@ the lookup strategy you used before, you
 (e.g. in <code>/META-INF/apache-deltaspike.properties</code>).</p>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_type_safe_projectstage">Type-safe ProjectStage</h4>
+</div>
+<div class="sect1">
+<h2 id="_annotationinstanceprovider">AnnotationInstanceProvider</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Java EE provides a standard mechanism for obtaining annotation instances&#8201;&#8212;&#8201;the <code>AnnotationLiteral</code> class.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">CurrentUserLiteral</span> <span class="directive">extends</span> AnnotationLiteral&lt;CurrentUser&gt; <span class="directive">implements</span> CurrentUser {}</code></pre>
+</div>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">CurrentUser user = <span class="keyword">new</span> CurrentUserLiteral() {};</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><code>AnnotationLiteral</code> can however be used only if the annotation class name is known beforehand.
+<code>AnnotationInstanceProvider</code> is the solution for dynamic creation of annotation instances, with
+the option to provide a map of values for annotation members. That might be useful in many situations,
+especially for CDI extension authors. For example:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>avoiding a compile-time dependency on an annotation class</p>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">Class</span>&lt;? <span class="directive">extends</span> <span class="predefined-type">Annotation</span>&gt; priorityAnnotationClass = ClassUtils.tryToLoadClassForName(<span class="string"><span class="delimiter">&quot;</span><span class="content">javax.annotation.Priority</span><span class="delimiter">&quot;</span></span>);
+priorityAnnotationInstance = AnnotationInstanceProvider.of(priorityAnnotationClass, mapOfMemberValues);</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>getting an instance of a dynamically obtained annotation class</p>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">Annotation</span> exceptionQualifier = AnnotationInstanceProvider.of(jsfModuleConfig.getExceptionQualifier());</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>or simply for the sake of a prettier syntax compared to <code>AnnotationLiteral</code></p>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">CurrentUser principal = AnnotationInstanceProvider.of(CurrentUser.class);</code></pre>
+</div>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_type_safe_projectstage">Type-safe ProjectStage</h2>
+<div class="sectionbody">
 <div class="paragraph">
 <p>The DeltaSpike <a href="projectstage.html">ProjectStage</a> mechanism allows to use configuration and implementations depending on the server environment you currently run on.</p>
 </div>
@@ -440,8 +589,10 @@ the lookup strategy you used before, you
 <p>DeltaSpike provides some pre-defined <a href="projectstage.html#_introduction">ProjectStages</a> but it&#8217;s also possible to create your own <a href="projectstage.html#_custom_project_stages">Custom Project Stage</a>, Please, check the <a href="projectstage.html">DeltaSpike ProjectStage</a> page for more details.</p>
 </div>
 </div>
-<div class="sect3">
-<h4 id="__exclude">@Exclude</h4>
+</div>
+<div class="sect1">
+<h2 id="__exclude">@Exclude</h2>
+<div class="sectionbody">
 <div class="paragraph">
 <p>With <code>@Exclude</code> it is possible to annotate beans which should be ignored
 by CDI even if they are in a CDI enabled archive.</p>
@@ -532,8 +683,8 @@ active if it is not excluded during the
 }</code></pre>
 </div>
 </div>
-<div class="sect4">
-<h5 id="_custom_expressioninterpreter">Custom ExpressionInterpreter</h5>
+<div class="sect2">
+<h3 id="_custom_expressioninterpreter">Custom ExpressionInterpreter</h3>
 <div class="paragraph">
 <p>By default only a very simple and limited syntax is supported. In real
 projects there are usually quite concrete requirements. Since it would
@@ -575,17 +726,21 @@ ExpressionInterpreter is needed:</p>
 </div>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_type_safe_view_config">Type-safe View-Config</h4>
+</div>
+<div class="sect1">
+<h2 id="_type_safe_view_config">Type-safe View-Config</h2>
+<div class="sectionbody">
 <div class="paragraph">
 <p>TODO (Overview)</p>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_literals">Literals</h4>
+</div>
+<div class="sect1">
+<h2 id="_literals">Literals</h2>
+<div class="sectionbody">
 <div class="paragraph">
 <p>Literals allow the instantiation of annotations by extending the
-abstract class 'javax.enterprise.util.AnnotationLiteral'</p>
+abstract class <code>javax.enterprise.util.AnnotationLiteral</code></p>
 </div>
 <div class="listingblock">
 <div class="title">Example</div>
@@ -647,8 +802,10 @@ abstract class 'javax.enterprise.util.An
 </ul>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_messages_and_i18n">Messages and I18n</h4>
+</div>
+<div class="sect1">
+<h2 id="_messages_and_i18n">Messages and i18n</h2>
+<div class="sectionbody">
 <div class="paragraph">
 <p>The following implementation is the minimal effort to use type-safe
 messages (which are hardcoded in this case).</p>
@@ -743,11 +900,10 @@ simple type-safe message.</p>
 }</code></pre>
 </div>
 </div>
-</div>
+<div class="sect2">
+<h3 id="_dynamic_message_builder">Dynamic Message Builder</h3>
 <div class="sect3">
-<h4 id="_dynamic_message_builder">Dynamic Message Builder</h4>
-<div class="sect4">
-<h5 id="_creating_message_instances">Creating Message Instances</h5>
+<h4 id="_creating_message_instances">Creating Message Instances</h4>
 <div class="paragraph">
 <p>The following implementation creates an instance of <code>Message</code> for the
 key <code>hello</code>. The final text will be resolved and interpolated lazily.
@@ -803,10 +959,10 @@ hello=Hello %s from %s</code></pre>
 </div>
 </div>
 </div>
+<div class="sect3">
+<h4 id="_customizing_the_message_context">Customizing the Message Context</h4>
 <div class="sect4">
-<h5 id="_customizing_the_message_context">Customizing the Message Context</h5>
-<div class="sect5">
-<h6 id="_messageresolver">MessageResolver</h6>
+<h5 id="_messageresolver">MessageResolver</h5>
 <div class="paragraph">
 <p>A message-resolver is responsible for creating the message-text based on
 the message-descriptor (key or inline-text), the current locale (and in
@@ -839,8 +995,8 @@ Message message = <span class="local-var
 contain placeholders which are processed by a <code>MessageInterpolator</code></p>
 </div>
 </div>
-<div class="sect5">
-<h6 id="_messageinterpolator">MessageInterpolator</h6>
+<div class="sect4">
+<h5 id="_messageinterpolator">MessageInterpolator</h5>
 <div class="paragraph">
 <p>A <code>MessageInterpolator</code> replaces the placeholders in a message-text with
 the arguments of the message.</p>
@@ -864,8 +1020,8 @@ Message message = <span class="local-var
 </div>
 </div>
 </div>
-<div class="sect5">
-<h6 id="_localeresolver">LocaleResolver</h6>
+<div class="sect4">
+<h5 id="_localeresolver">LocaleResolver</h5>
 <div class="paragraph">
 <p>A locale resolver provides the current locale. The locale is, for example, used
 to by a <code>MessageResolver</code> to choose the correct language for the
@@ -891,8 +1047,11 @@ Message message = this.messageContext.lo
 </div>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_injecting_resources">Injecting Resources</h4>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_injecting_resources">Injecting Resources</h2>
+<div class="sectionbody">
 <div class="paragraph">
 <p>DeltaSpike has simple APIs for performing basic resource loading and
 property file reading.</p>
@@ -905,15 +1064,24 @@ property file reading.</p>
 </div>
 </div>
 <div class="paragraph">
-<p>This can be used to read files, from classpath or on your local file
-system, using two default implementations: <code>ClasspathResourceProvider</code>
-and <code>FileResourceProvider</code>. They can be extended as well by implementing
-the <code>InjectableResourceProvider</code> interface to allow reading from
-alternate sources, if needed (e.g. database LOBs, NoSQL storage areas).</p>
+<p>This can be used to read resources from the classpath or from the file
+system using the two default implementations&#8201;&#8212;&#8201;<code>ClasspathResourceProvider</code>
+and <code>FileResourceProvider</code>&#8201;&#8212;&#8201;or from any other source using a custom provider.</p>
 </div>
+<div class="sect2">
+<h3 id="_custom_resource_providers">Custom resource providers</h3>
+<div class="paragraph">
+<p>The <code>InjectableResourceProvider</code> interface can be implemented to allow reading from
+alternate sources if needed (e.g. database LOBs, NoSQL storage areas). A base class called <code>AbstractResourceProvider</code>
+is provided by DeltaSpike and contains most of the methods for potential implementations. The only method which must be
+provided is the <code>readStream(InjectableResource)</code> which returns an InputStream.</p>
 </div>
-<div class="sect3">
-<h4 id="_exception_control">Exception Control</h4>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_exception_control">Exception Control</h2>
+<div class="sectionbody">
 <div class="paragraph">
 <p>Exception handling in DeltaSpike is based around the CDI eventing model.
 While the implementation of exception handlers may not be the same as a
@@ -936,8 +1104,8 @@ developer. In most cases, you register a
 annotating a handler method. Alternatively, you can handle an exception
 programmatically, just as you would observe an event in CDI.</p>
 </div>
-<div class="sect4">
-<h5 id="_usage">Usage</h5>
+<div class="sect2">
+<h3 id="_usage">Usage</h3>
 <div class="paragraph">
 <p>The entire exception handling process starts with an event. This helps
 keep your application minimally coupled to DeltaSpike, but also allows
@@ -979,8 +1147,8 @@ your class for use later within a try/ca
 constructed with the exception to be handled.</p>
 </div>
 </div>
-<div class="sect4">
-<h5 id="_exception_handlers">Exception Handlers</h5>
+<div class="sect2">
+<h3 id="_exception_handlers">Exception Handlers</h3>
 <div class="paragraph">
 <p>As an application developer (i.e., an end user of DeltaSpike&#8217;s exception
 handling), you&#8217;ll be focused on writing exception handlers. An exception
@@ -1025,8 +1193,8 @@ methods which have a parameter which is
 <code>ExceptionEvent&lt;T extends Throwable&gt;</code> annotated with the <code>@Handles</code>
 annotation.</p>
 </div>
-<div class="sect5">
-<h6 id="__exceptionhandler">@ExceptionHandler</h6>
+<div class="sect3">
+<h4 id="__exceptionhandler">@ExceptionHandler</h4>
 <div class="paragraph">
 <p>The <code>@ExceptionHandler</code> annotation is simply a marker annotation that
 instructs the DeltaSpike exception handling CDI extension to scan the
@@ -1047,8 +1215,8 @@ bean for handler methods.</p>
 methods on this bean.</p>
 </div>
 </div>
-<div class="sect5">
-<h6 id="__handles_and_beforehandles">@Handles and @BeforeHandles</h6>
+<div class="sect3">
+<h4 id="__handles_and_beforehandles">@Handles and @BeforeHandles</h4>
 <div class="paragraph">
 <p><code>@Handles</code> is a method parameter annotation that designates a method as
 an exception handler. Exception handler methods are registered on beans
@@ -1178,8 +1346,8 @@ will propagate up the stack and all hand
 cease. Any exception that was being handled will be lost.</p>
 </div>
 </div>
-<div class="sect5">
-<h6 id="_ordinal">Ordinal</h6>
+<div class="sect3">
+<h4 id="_ordinal">Ordinal</h4>
 <div class="paragraph">
 <p>When DeltaSpike finds more than one handler for the same exception type,
 it orders the handlers by ordinal. Handlers with higher ordinal are
@@ -1235,8 +1403,8 @@ invoke (until a handler marks exception
 </div>
 </div>
 </div>
-<div class="sect4">
-<h5 id="_exception_chain_processing">Exception Chain Processing</h5>
+<div class="sect2">
+<h3 id="_exception_chain_processing">Exception Chain Processing</h3>
 <div class="paragraph">
 <p>When an exception is thrown, chances are it is nested (wrapped) inside
 other exceptions. (If you&#8217;ve ever examined a server log, you&#8217;ll
@@ -1308,8 +1476,8 @@ thing since what useful information can
 <code>EJBException</code>?</p>
 </div>
 </div>
-<div class="sect4">
-<h5 id="_apis_for_exception_information_and_flow_control">APIs for Exception Information and Flow Control</h5>
+<div class="sect2">
+<h3 id="_apis_for_exception_information_and_flow_control">APIs for Exception Information and Flow Control</h3>
 <div class="paragraph">
 <p>There are two APIs provided by DeltaSpike that should be familiar to
 application developers:</p>
@@ -1324,8 +1492,8 @@ application developers:</p>
 </li>
 </ul>
 </div>
-<div class="sect5">
-<h6 id="_exceptionevent">ExceptionEvent</h6>
+<div class="sect3">
+<h4 id="_exceptionevent">ExceptionEvent</h4>
 <div class="paragraph">
 <p>In addition to providing information about the exception being handled,
 the <code>ExceptionEvent</code> object contains methods to control the exception
@@ -1336,30 +1504,30 @@ chain or unmuting the current handler. F
 <div class="ulist">
 <ul>
 <li>
-<p><code>abort()</code> - terminate all handling immediately after this handler,
+<p><code>abort()</code>&#8201;&#8212;&#8201;terminate all handling immediately after this handler,
 does not mark the exception as handled, does not re-throw the exception.</p>
 </li>
 <li>
-<p><code>throwOriginal()</code> - continues through all handlers, but once all
+<p><code>throwOriginal()</code>&#8201;&#8212;&#8201;continues through all handlers, but once all
 handlers have been called (assuming another handler does not call
 abort() or handled()) the initial exception passed to DeltaSpike is
 rethrown. Does not mark the exception as handled.</p>
 </li>
 <li>
-<p><code>handled()</code> - marks the exception as handled and terminates further
+<p><code>handled()</code>&#8201;&#8212;&#8201;marks the exception as handled and terminates further
 handling.</p>
 </li>
 <li>
-<p><code>handleAndContinue()</code> - default. Marks the exception as handled and
+<p><code>handleAndContinue()</code>&#8201;&#8212;&#8201;default. Marks the exception as handled and
 proceeds with the rest of the handlers.</p>
 </li>
 <li>
-<p><code>skipCause()</code> - marks the exception as handled, but proceeds to the
+<p><code>skipCause()</code>&#8201;&#8212;&#8201;marks the exception as handled, but proceeds to the
 next cause in the cause container, without calling other handlers for
 the current cause.</p>
 </li>
 <li>
-<p><code>rethrow(Throwable)</code> - Throw a new exception after this handler is
+<p><code>rethrow(Throwable)</code>&#8201;&#8212;&#8201;Throw a new exception after this handler is
 invoked</p>
 </li>
 </ul>
@@ -1372,27 +1540,28 @@ the <code>unmute()</code> method on <cod
 </div>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_scopes">Scopes</h4>
+</div>
+<div class="sect1">
+<h2 id="_scopes">Scopes</h2>
+<div class="sectionbody">
 <div class="paragraph">
 <p>DeltaSpike Core provides the API and SPI for several scopes. Currently
 all scopes are only implemented in the <a href="jsf.html#_scopes">JSF module</a>.</p>
 </div>
-<div class="sect4">
-<h5 id="__windowscoped">@WindowScoped</h5>
+<div class="sect2">
+<h3 id="__windowscoped">@WindowScoped</h3>
 
 </div>
-<div class="sect4">
-<h5 id="__viewaccessscoped">@ViewAccessScoped</h5>
+<div class="sect2">
+<h3 id="__viewaccessscoped">@ViewAccessScoped</h3>
 
 </div>
-<div class="sect4">
-<h5 id="__groupedconversationscoped">@GroupedConversationScoped</h5>
+<div class="sect2">
+<h3 id="__groupedconversationscoped">@GroupedConversationScoped</h3>
 
 </div>
-</div>
-<div class="sect3">
-<h4 id="_creating_a_custom_cdi_scope">Creating a Custom CDI Scope</h4>
+<div class="sect2">
+<h3 id="_creating_a_custom_cdi_scope">Creating a Custom CDI Scope</h3>
 <div class="paragraph">
 <p>To create a custom CDI scope to match your needs, complete the following steps:</p>
 </div>
@@ -1478,8 +1647,11 @@ javax.enterprise.inject.spi.Bean instanc
 </ol>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_deactivatable">Deactivatable</h4>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_deactivatable">Deactivatable</h2>
+<div class="sectionbody">
 <div class="paragraph">
 <p>DeltaSpike allows you to deactivate its own Extensions. You just need to
 implement your <a href="spi.html#_classdeactivator">ClassDeactivator</a>.</p>
@@ -1519,70 +1691,93 @@ other <a href="configuration.html#_confi
 </div>
 </div>
 </div>
-<div class="sect2">
-<h3 id="_core_utils">Core - Utils</h3>
+<div class="sect1">
+<h2 id="_utilities">Utilities</h2>
+<div class="sectionbody">
 <div class="paragraph">
-<p>DeltaSpike provides many utility-classes (no constructor / static
+<p>DeltaSpike provides many utility classes (no constructor / static
 methods) that can be useful for your project.</p>
 </div>
 <div class="paragraph">
 <p>Below you can find an information about these classes.</p>
 </div>
-<div class="sect3">
-<h4 id="_arraysutils">ArraysUtils</h4>
+<div class="sect2">
+<h3 id="_annotationutils">AnnotationUtils</h3>
+<div class="paragraph">
+<p>Utilities for working with annotations on methods and classes.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>#findAnnotation</code>&#8201;&#8212;&#8201;obtains an <code>Annotation</code> instance of a given annotation <code>Class</code> from the given <code>Annotation[]</code>, recursing any possible stereotype tree along the way</p>
+</li>
+<li>
+<p><code>#extractAnnotationFromMethod</code>&#8201;&#8212;&#8201;uses <code>findAnnotation</code> to obtain an <code>Annotation</code> from a given <code>Method</code></p>
+</li>
+<li>
+<p><code>#extractAnnotationFromMethodOrClass</code>&#8201;&#8212;&#8201;uses <code>findAnnotation</code> to obtain an <code>Annotation</code> on either the given <code>Method</code> or the given <code>Class</code>, in that order</p>
+</li>
+<li>
+<p><code>#getQualifierHashCode</code>&#8201;&#8212;&#8201;computes the hashCode of a qualifier annotation, taking into account only the "binding" members (not annotated <code>@Nonbinding</code>)</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_arraysutils">ArraysUtils</h3>
 <div class="paragraph">
 <p>A collection of utilities for working with Arrays</p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><code>#asSet</code> - Create a set from an array. If the array contains duplicate
+<p><code>#asSet</code>&#8201;&#8212;&#8201;Create a set from an array. If the array contains duplicate
 objects, the last object in the array will be placed in resultant set.</p>
 </li>
 </ul>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_beanutils">BeanUtils</h4>
+<div class="sect2">
+<h3 id="_beanutils">BeanUtils</h3>
 <div class="paragraph">
 <p>A set of utility methods for working with beans.</p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><code>#getQualifiers</code> - Extract the qualifiers from a set of annotations.</p>
+<p><code>#getQualifiers</code>&#8201;&#8212;&#8201;Extract the qualifiers from a set of annotations.</p>
 </li>
 <li>
-<p><code>#extractAnnotation</code> - Extract the annotations.</p>
+<p><code>#extractAnnotation</code>&#8201;&#8212;&#8201;Extract the annotations.</p>
 </li>
 <li>
-<p><code>#createInjectionPoints</code> - Given a method, and the bean on which the method is declared, create a collection of injection points representing the parameters of the method.</p>
+<p><code>#createInjectionPoints</code>&#8201;&#8212;&#8201;Given a method, and the bean on which the method is declared, create a collection of injection points representing the parameters of the method.</p>
 </li>
 </ul>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_contextutils">ContextUtils</h4>
+<div class="sect2">
+<h3 id="_contextutils">ContextUtils</h3>
 <div class="paragraph">
 <p>A set of utility methods for working with contexts.</p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><code>#isContextActive</code> - Checks if the context for the scope annotation is active.</p>
+<p><code>#isContextActive</code>&#8201;&#8212;&#8201;Checks if the context for the scope annotation is active.</p>
 </li>
 </ul>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_classdeactivationutils">ClassDeactivationUtils</h4>
+<div class="sect2">
+<h3 id="_classdeactivationutils">ClassDeactivationUtils</h3>
 <div class="paragraph">
 <p>Helper methods for <code>ClassDeactivator</code></p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><code>#isActivated</code> - Evaluates if the given <code>Deactivatable</code> is active.</p>
+<p><code>#isActivated</code>&#8201;&#8212;&#8201;Evaluates if the given <code>Deactivatable</code> is active.</p>
 </li>
 </ul>
 </div>
@@ -1590,72 +1785,71 @@ objects, the last object in the array wi
 <p>To add a custom <code>ClassDeactivator</code> add <code>org.apache.deltaspike.core.spi.activation.ClassDeactivator=my.CustomClassDeactivator</code> to <code>META-INF\apache-deltaspike.properties</code>. Or configure it via a custom <code>ConfigSource</code>.</p>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_exceptionutils">ExceptionUtils</h4>
+<div class="sect2">
+<h3 id="_exceptionutils">ExceptionUtils</h3>
 <div class="paragraph">
 <p>Helper methods to deal with Exceptions</p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><code>#throwAsRuntimeException</code> - helper which allows to use a trick to throw a catched checked exception without a wrapping exception.</p>
+<p><code>#throwAsRuntimeException</code>&#8201;&#8212;&#8201;helper which allows to use a trick to throw a catched checked exception without a wrapping exception.</p>
 </li>
 <li>
-<p><code>#changeAndThrowException</code> - helper which allows to use a trick to throw a cached checked exception without a wrapping exception.</p>
+<p><code>#changeAndThrowException</code>&#8201;&#8212;&#8201;helper which allows to use a trick to throw a cached checked exception without a wrapping exception.</p>
 </li>
 </ul>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_propertyfileutils">PropertyFileUtils</h4>
+<div class="sect2">
+<h3 id="_propertyfileutils">PropertyFileUtils</h3>
 <div class="paragraph">
 <p>Helper methods for Property files</p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><code>#resolvePropertyFiles</code> - Allows to lookup for resource bundle files.</p>
+<p><code>#resolvePropertyFiles</code>&#8201;&#8212;&#8201;Allows to lookup for resource bundle files.</p>
 </li>
 <li>
-<p><code>#loadProperties</code> - Load a Properties file from the given URL.</p>
+<p><code>#loadProperties</code>&#8201;&#8212;&#8201;Load a Properties file from the given URL.</p>
 </li>
 <li>
-<p><code>#getResourceBundle</code> - Return the ResourceBundle for the current default Locale.</p>
+<p><code>#getResourceBundle</code>&#8201;&#8212;&#8201;Return the ResourceBundle for the current default Locale.</p>
 </li>
 </ul>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_proxyutils">ProxyUtils</h4>
+<div class="sect2">
+<h3 id="_proxyutils">ProxyUtils</h3>
 <div class="paragraph">
 <p>Helper for CDI proxies</p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><code>#getUnproxiedClass</code> - Return class of the real implementation.</p>
+<p><code>#getUnproxiedClass</code>&#8201;&#8212;&#8201;Return class of the real implementation.</p>
 </li>
 <li>
-<p><code>#isProxiedClass</code> - Analyses if the given class is a generated proxy class.</p>
+<p><code>#isProxiedClass</code>&#8201;&#8212;&#8201;Analyses if the given class is a generated proxy class.</p>
 </li>
 </ul>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_stringutils">StringUtils</h4>
+<div class="sect2">
+<h3 id="_stringutils">StringUtils</h3>
 <div class="paragraph">
 <p>A collection of utilities for working with Strings.</p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><code>#isEmpty</code> - return true if the String is null or empty ( <code>string.trim().isEmpty()</code> )</p>
+<p><code>#isEmpty</code>&#8201;&#8212;&#8201;return true if the String is null or empty ( <code>string.trim().isEmpty()</code> )</p>
 </li>
 </ul>
 </div>
 </div>
 </div>
-</div>
 </div>
         </div>
 

Modified: websites/staging/deltaspike/trunk/content/staging/documentation/jsf.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/staging/documentation/jsf.html (original)
+++ websites/staging/deltaspike/trunk/content/staging/documentation/jsf.html Tue May  5 18:23:13 2015
@@ -654,7 +654,7 @@ from <code>window.name</code></p>
 <p>Any window or browser tab detection will be disabled for the current
 request. Scopes like @WindowScoped, @GroupedConversationScoped or
 @ViewAccessScoped will not work. This is also the default mode if the
-current request doesis not support Javascript or if the user agent is a
+current request does not support Javascript or if the user agent is a
 bot/crawler.</p>
 </div>
 </div>
@@ -835,7 +835,7 @@ as the bean is referenced by a page - th
 next page (if it is used again the bean will be forwarded again). It is
 important that it is based on the view-id of a page (it is not based on
 the request) so, for example, Ajax requests do not trigger a cleanup if the
-request doesis not access all view-access scoped beans of the page. That&#8217;s
+request does not access all view-access scoped beans of the page. That&#8217;s
 also the reason for the name @<em>View</em>AccessScoped.</p>
 </div>
 <div class="listingblock">
@@ -1179,7 +1179,7 @@ inheritance.</p>
 <p>In the following example <code>Pages.Admin.Index</code>, <code>Pages.Admin.Home</code> and
 <code>Pages.Admin.Statistics.Home</code> inherit the meta-data from <code>Pages.Admin</code>
 because they implement the interface whereas
-<code>Pages.Admin.Statistics.Index</code> doesis not. However, <code>Pages.Admin.Home</code>
+<code>Pages.Admin.Statistics.Index</code> does not. However, <code>Pages.Admin.Home</code>
 overrides <code>View#navigation</code>. During the bootstrapping process the
 meta-data gets merged and at runtime you only see the final result
 (which is cached).</p>

Modified: websites/staging/deltaspike/trunk/content/staging/documentation/overview.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/staging/documentation/overview.html (original)
+++ websites/staging/deltaspike/trunk/content/staging/documentation/overview.html Tue May  5 18:23:13 2015
@@ -194,141 +194,91 @@ body {
 
         <div id="toc" class="toc">
             <ul class="sectlevel1">
-<li><a href="#_background">Background</a>
-<ul class="sectlevel2">
-<li><a href="#_cdi">CDI</a></li>
-<li><a href="#_portable_cdi_extensions">Portable CDI Extensions</a></li>
-</ul>
-</li>
-<li><a href="#_about_apache_deltaspike">About Apache DeltaSpike</a></li>
-<li><a href="#_features_of_deltaspike">Features of DeltaSpike</a>
+<li><a href="#_features">Features</a>
 <ul class="sectlevel2">
 <li><a href="#_java_ee_7_without_java_ee_7">Java EE 7 without Java EE 7!</a></li>
 <li><a href="#_jsf_improvements">JSF Improvements</a></li>
 <li><a href="#_productivity_improvements">Productivity Improvements</a></li>
 </ul>
 </li>
-<li><a href="#_next">Next</a></li>
-</ul>
-            <hr>
-            <div class="sect1">
-<h2 id="_background">Background</h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="_cdi">CDI</h3>
-<div class="paragraph">
-<p>Java Contexts and Dependency Injection for the Java EE platform (<a href="https://jcp.org/en/jsr/detail?id=299">JSR 299</a>), abbreviated to CDI, was introduced as part of Java EE6. The core features of CDI are as follows:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>improved stateful object lifecycles with an additional context named <em>Conversation</em> that encompasses a series of requests within one session and lifecycle management by the container according to well-defined contexts</p>
-</li>
-<li>
-<p>dependency injection conducted in a type-safe manner, with type checking conducted at compilation time so errors are exposed earlier and debugging is easier</p>
-</li>
-<li>
-<p>event notification facility for object interaction</p>
-</li>
-<li>
-<p>a better approach for interceptors with annotations binding interceptors to objects and with a new interceptor named <em>decorator</em> that knows about individual bean attributes through inheritence and is more appropriate for use in solving business problems</p>
-</li>
-<li>
-<p>a Service Provider Interface (SPI) for developing portable extensions to the CDI container</p>
-</li>
+<li><a href="#_background">Background</a>
+<ul class="sectlevel2">
+<li><a href="#_cdi">CDI</a></li>
+<li><a href="#_portable_cdi_extensions">Portable CDI Extensions</a></li>
 </ul>
-</div>
-<div class="paragraph">
-<p>CDI is a <a href="https://jcp.org/en/home/index">Java Community Process (JCP)</a> standard. All Java EE6 compliant application servers must provide support for CDI. <a href="http://weld.cdi-spec.org/">JBoss Weld</a> is a reference implementation of the CDI specification and other spec-compliant implementations exist such as <a href="http://openwebbeans.apache.org/">Apache OpenWebBeans (OWB)</a>. While CDI is a Java EE6 essential, CDI can also be used in Java SE environments with the aid of standalone CDI implementations.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_portable_cdi_extensions">Portable CDI Extensions</h3>
-<div class="paragraph">
-<p>The CDI Service Provider Interface (SPI) is exposed to enable extension of the CDI feature set by third-parties. Portable CDI extensions extend CDI implementations and improve existing Java EE APIs by enabling integration of different technologies.</p>
-</div>
-<div class="paragraph">
-<p>As set out in the CDI specification, a portable CDI extenstion may integrate with a CDI container as follows:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>providing its own beans, interceptors and decorators to the container</p>
-</li>
-<li>
-<p>injecting dependencies into its own objects using the dependency injection service</p>
-</li>
-<li>
-<p>providing a context implementation for a custom scope</p>
-</li>
-<li>
-<p>augmenting or overriding the annotation-based metadata with metadata from some other source</p>
 </li>
+<li><a href="#_next">Next</a></li>
 </ul>
-</div>
-<div class="paragraph">
-<p>As indicated by the name, <em>portable</em> CDI extensions can be used with any spec-compliant CDI implementation.</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_about_apache_deltaspike">About Apache DeltaSpike</h2>
+            <hr>
+            <div id="preamble">
 <div class="sectionbody">
 <div class="paragraph">
 <p>Apache DeltaSpike is a collection of portable CDI extensions. These ready-to-use modules enable you to integrate tested API extensions into your Java projects.</p>
 </div>
 <div class="paragraph">
-<p>DeltaSpike consists of a core module and a number of optional modules for providing additional enterprise functionality to your applications. The modules include features for enhanced security with type-safe control over method invocations, integration with schedulers, injection of CDI objects into validators, and a transactional context and scope. DeltaSpike also provides boot and shutdown control over CDI containers in Java SE applications.</p>
+<p>DeltaSpike consists of a core module and a number of <a href="modules.html">optional modules</a> for providing additional
+enterprise functionality to your applications. The modules include features for enhanced security with type-safe
+control over method invocations, integration with schedulers, injection of CDI objects into validators, a
+transactional context and scope, and much more. DeltaSpike also provides boot and shutdown control over CDI containers
+in Java SE applications.</p>
 </div>
 <div class="paragraph">
-<p>As a CDI extension, DeltaSpike must be used in conjunction with a CDI implementation and supports both JBoss Weld and Apache OpenWebBeans. DeltaSpike has been tested on a range of application servers and containers that utilize these CDI implementations, such as Apache TomEE, JBoss AS, WildFly, Oracle GlassFish, and Jetty.</p>
+<p>As a CDI extension, DeltaSpike must be used in conjunction with a CDI implementation and supports both JBoss Weld
+and Apache OpenWebBeans. DeltaSpike is tested on a range of application servers and CDI-enabled containers
+including Apache TomEE, JBoss AS, WildFly, Oracle GlassFish, and Jetty.</p>
 </div>
 <div class="paragraph">
-<p>In addition to the portable CDI extension modules, DeltaSpike provides a number of examples to show you how to use and get the most from this technology.</p>
+<p>DeltaSpike provides a number of <a href="http://deltaspike.apache.org/examples.html">examples</a> to show you how to use and get
+the most from this technology.</p>
 </div>
 </div>
 </div>
 <div class="sect1">
-<h2 id="_features_of_deltaspike">Features of DeltaSpike</h2>
+<h2 id="_features">Features</h2>
 <div class="sectionbody">
 <div class="sect2">
 <h3 id="_java_ee_7_without_java_ee_7">Java EE 7 without Java EE 7!</h3>
 <div class="paragraph">
-<p><strong>Transactional support for non-EJB beans:</strong> The Transactional Interceptor in DeltaSpike paved the way for @Transactional in Java EE 7.</p>
+<p><strong>Transactional support for non-EJB beans:</strong> The Transactional Interceptor in DeltaSpike paved the way for
+<code>@Transactional</code> in Java EE 7.</p>
 </div>
 <div class="paragraph">
-<p><strong>Injectable Servlet objects:</strong> Allows the developer to inject CDI beans on Servlets on Java EE 6/CDI 1.0 environments</p>
+<p><strong>Injectable Servlet objects:</strong> Enables CDI injection in Servlets in Java EE 6/CDI 1.0 environments</p>
 </div>
 <div class="paragraph">
 <p><strong>Injectable resources:</strong> Configuration, resource bundles,&#8230;&#8203; are easy to inject when using CDI and Apache DeltaSpike.</p>
 </div>
 <div class="paragraph">
-<p><strong>@Exclude annotation:</strong> it is possible to annotate beans which should be ignored by CDI even if they are in a CDI enabled archive on Java EE 6/CDI 1.0 environment where you cais not use @Vetoed or a veto based on ProjectStages or expressions is needed.</p>
+<p><strong>@Exclude annotation:</strong> Lets you prevent classes from being treated as CDI beans even if they are in a CDI-enabled
+archive in a Java EE 6/CDI 1.0 environment where <code>@Vetoed</code> is unavailable or when you need to veto based on
+ProjectStages or expressions.</p>
 </div>
 <div class="paragraph">
-<p><strong>Scheduling tasks</strong>: Async processes in a non Java EE 7 environment.</p>
+<p><strong>Scheduling tasks</strong>: Async processes in a non-EE7 environment.</p>
 </div>
 <div class="paragraph">
-<p><strong>Bean Validation integration:</strong> Allows to inject CDI beans and EJB in to Constraint-Validators.</p>
+<p><strong>Bean Validation integration:</strong> Injection of CDI beans and EJBs into Constraint Validators.</p>
 </div>
 <div class="paragraph">
-<p><strong>BeanProvider:</strong> Access the BeanManager and CDI beans even in non managed classes like JPA-2.0 EntityListeners or Spring Beans.</p>
+<p><strong>BeanProvider:</strong> Access the BeanManager and CDI beans even in non-managed classes like JPA 2.0 EntityListeners or
+Spring Beans.</p>
 </div>
 </div>
 <div class="sect2">
 <h3 id="_jsf_improvements">JSF Improvements</h3>
 <div class="paragraph">
-<p><strong>Multi-window handling:</strong> Allows to manage logical windows for batches,&#8230;&#8203; or in case of JSF it offers proper separation of browser-tabs.</p>
+<p><strong>Multi-window handling:</strong> Management of logical windows for batch jobs, browser tab separation in JSF and more.</p>
 </div>
 <div class="paragraph">
-<p><strong>Type-safe view-config:</strong> It allows to bind meta-data (e.g. for security) to views with a type-safe, but flexible approach. It provides a more solid navigation in case of JSF and helps a lot in the maintenance phase.</p>
+<p><strong>Type-safe view-config:</strong> Lets you bind metadata (e.g. for security) to views with a flexible type-safe approach. It
+provides a more solid navigation in case of JSF and helps a lot in the maintenance phase.</p>
 </div>
 <div class="paragraph">
-<p><strong>View-Controller:</strong> Based on type-safe view-configs view-controller annotations provide a type-safe alternative to standard-tags.</p>
+<p><strong>View-Controller:</strong> Based on type-safe view-configs, view-controller annotations provide a type-safe alternative to
+standard tags.</p>
 </div>
 <div class="paragraph">
-<p><strong>Injection on Converters and Validators:</strong> Allows to inject CDI beans and EJB in to JSF Converters and Validators.</p>
+<p><strong>Injection in Converters and Validators:</strong> Inject CDI beans and EJBs into JSF Converters and Validators.</p>
 </div>
 <div class="paragraph">
 <p><strong>JSF event broadcasting to CDI:</strong> Allows CDI to be notified about JSF events</p>
@@ -337,10 +287,10 @@ body {
 <div class="sect2">
 <h3 id="_productivity_improvements">Productivity Improvements</h3>
 <div class="paragraph">
-<p><strong>Security based on annotations:</strong> The foundation for building a robust, capable and non invasive security solution.</p>
+<p><strong>Security based on annotations:</strong> The foundation for building a robust, capable and non-invasive security solution.</p>
 </div>
 <div class="paragraph">
-<p><strong>New CDI scopes:</strong> TransactionScoped, WindowScoped, ViewScoped, ViewAccess scope, Grouped conversion scope</p>
+<p><strong>New CDI scopes:</strong> TransactionScoped, WindowScoped, ViewScoped, ViewAccess scope, Grouped conversation scope.</p>
 </div>
 <div class="paragraph">
 <p><strong>Container Control and Test Control:</strong> Java SE with CDI, all with a unifying API. Start, stop, add classes to a running CDI container.</p>
@@ -349,16 +299,84 @@ body {
 <p><strong>Data Module:</strong> An out of the box entity framework solution complete with support for container or application managed persistence contexts, as well as JDBC.</p>
 </div>
 <div class="paragraph">
-<p><strong>Decoupled Exception handling:</strong> Allows to do exception handling in one location similar to CDI Observers.</p>
+<p><strong>Decoupled Exception handling:</strong> Event-based exception handling framework, similar to the CDI event observer mechanism.</p>
 </div>
 <div class="paragraph">
-<p><strong>JMX integration:</strong> Any CDI bean can be exposed via JMX easily with one annotation.</p>
+<p><strong>JMX integration:</strong> Any CDI bean can be exposed via JMX easily with a single annotation.</p>
 </div>
 <div class="paragraph">
 <p><strong>Type-safe i18n messages:</strong> Localized messages are easy to use with an interface and a resource bundle, no more boilerplate and your messages now have context within the code.</p>
 </div>
 <div class="paragraph">
-<p><strong>Type-safe ProjectStages:</strong> Compared to ProjectStages in JSF, DeltaSpike provides a type-safe, but still extensible approach which can be used in CDI based applications.</p>
+<p><strong>Type-safe ProjectStages:</strong> Compared to ProjectStages in JSF, DeltaSpike provides a type-safe, but still extensible
+approach which can be used in CDI-based applications.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_background">Background</h2>
+<div class="sectionbody">
+<div class="sect2">
+<h3 id="_cdi">CDI</h3>
+<div class="paragraph">
+<p>Java Contexts and Dependency Injection for the Java EE platform (<a href="https://jcp.org/en/jsr/detail?id=299">JSR 299</a>),
+ abbreviated <em>CDI</em> was introduced as part of Java EE 6. The core features of CDI are as follows:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>improved stateful object lifecycles with an additional context named <em>Conversation</em> that encompasses a series of requests within one session and lifecycle management by the container according to well-defined contexts</p>
+</li>
+<li>
+<p>dependency injection conducted in a type-safe manner, with type checking conducted at compilation time so errors are exposed earlier and debugging is easier</p>
+</li>
+<li>
+<p>event notification facility for object interaction</p>
+</li>
+<li>
+<p>a better approach for interceptors with annotations binding interceptors to objects and with a new interceptor
+named <em>decorator</em> that knows about individual bean attributes through inheritance and is more appropriate for use in
+ solving business problems</p>
+</li>
+<li>
+<p>a Service Provider Interface (SPI) for developing portable extensions to the CDI container</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>CDI is a <a href="https://jcp.org/en/home/index">Java Community Process (JCP)</a> standard. All Java EE 6 compliant
+application servers must provide support for CDI. <a href="http://weld.cdi-spec.org/">JBoss Weld</a> is a reference
+implementation of the CDI specification and other spec-compliant implementations exist such as <a href="http://openwebbeans.apache.org/">Apache OpenWebBeans (OWB)</a>. While CDI is a Java EE 6 essential, CDI can also be used in Java SE environments with the aid of standalone CDI implementations.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_portable_cdi_extensions">Portable CDI Extensions</h3>
+<div class="paragraph">
+<p>The CDI Service Provider Interface (SPI) is exposed to enable extension of the CDI feature set by third parties.
+Portable CDI extensions extend CDI implementations and improve existing Java EE APIs by enabling integration of different technologies.</p>
+</div>
+<div class="paragraph">
+<p>As set out in the CDI specification, a portable CDI extension may integrate with a CDI container as follows:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>providing its own beans, interceptors and decorators to the container</p>
+</li>
+<li>
+<p>injecting dependencies into its own objects using the dependency injection service</p>
+</li>
+<li>
+<p>providing a context implementation for a custom scope</p>
+</li>
+<li>
+<p>augmenting or overriding the annotation-based metadata with metadata from some other source</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>As indicated by the name, <em>portable</em> CDI extensions can be used with any spec-compliant CDI implementation.</p>
 </div>
 </div>
 </div>

Modified: websites/staging/deltaspike/trunk/content/staging/documentation/projectstage.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/staging/documentation/projectstage.html (original)
+++ websites/staging/deltaspike/trunk/content/staging/documentation/projectstage.html Tue May  5 18:23:13 2015
@@ -342,10 +342,10 @@ determine the string is the ConfigResolv
 <p><code>ProjectStageProducer</code> provides the producer method which allows to
 inject the current ProjectStage. However, in some cases it is needed to
 use ProjectStages also during the bootstrapping process of the CDI
-container and you cais not use injection. In such cases you can use
+container and you can not use injection. In such cases you can use
 <code>ProjectStageProducer.getInstance().getProjectStage()</code> to resolve the
 current ProjectStage. This helper also contains helpers for unit-tests
-- e.g. <code>#setProjectStage</code>. However, those methods shouldis not be needed
+- e.g. <code>#setProjectStage</code>. However, those methods should not be needed
 for users (we just need them for testing different ProjectStage
 scenarios).</p>
 </div>

Modified: websites/staging/deltaspike/trunk/content/staging/documentation/scheduler.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/staging/documentation/scheduler.html (original)
+++ websites/staging/deltaspike/trunk/content/staging/documentation/scheduler.html Tue May  5 18:23:13 2015
@@ -414,7 +414,7 @@ start a job once (without registering it
 <h3 id="_custom_scheduler">Custom Scheduler</h3>
 <div class="paragraph">
 <p>It is possible to replace the default integration with Quartz. Any scheduler that supports cron-expressions for job-classes can be used.
-For more information, see <a href="http://org.apache.deltaspike.test.scheduler.custom" class="bare">http://org.apache.deltaspike.test.scheduler.custom</a>.</p>
+For more information, see <a href="https://deltaspike.apache.org/javadoc/1.3.0/org/apache/deltaspike/scheduler/spi/Scheduler.html">Scheduler javadoc</a>.</p>
 </div>
 </div>
 </div>

Modified: websites/staging/deltaspike/trunk/content/staging/documentation/security.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/staging/documentation/security.html (original)
+++ websites/staging/deltaspike/trunk/content/staging/documentation/security.html Tue May  5 18:23:13 2015
@@ -483,7 +483,7 @@ as part of our security authorizer!</p>
 <p><code>@Secured</code> is build on <code>@SecurityBindingType</code> and a very simple
 alternative to the rest of the security module. It is a basic hook to
 integrate a custom security concept, third-party frameworks, etc. It
-doesis not provide a full blown security concept like the rest of the
+does not provide a full blown security concept like the rest of the
 security module, but other DeltaSpike modules ensure that the security
 concepts are integrated properly (e.g. correct behaviour within custom
 scope implementations,&#8230;&#8203;). It just allows to integrate other security

Modified: websites/staging/deltaspike/trunk/content/staging/documentation/servlet.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/staging/documentation/servlet.html (original)
+++ websites/staging/deltaspike/trunk/content/staging/documentation/servlet.html Tue May  5 18:23:13 2015
@@ -277,7 +277,7 @@ register the listeners and filters in yo
 <div class="ulist">
 <ul>
 <li>
-<p>Your container doesis not support Servlet 3.0 or newer.</p>
+<p>Your container does not support Servlet 3.0 or newer.</p>
 </li>
 <li>
 <p>You have set <code>metadata-complete=true</code> in your <code>web.xml</code>.</p>