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 2013/06/09 11:26:33 UTC

svn commit: r864998 [15/15] - in /websites/staging/deltaspike/trunk/content: ./ deltaspike/ deltaspike/draft/ deltaspike/resources/ draft/ resources/ resources/css/ resources/files/ resources/images/ resources/js/

Added: websites/staging/deltaspike/trunk/content/security.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/security.html (added)
+++ websites/staging/deltaspike/trunk/content/security.html Sun Jun  9 09:26:31 2013
@@ -0,0 +1,370 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="deltaspike-generate-pages">
+    <meta name="author" content="chm">
+
+    <title>Apache DeltaSpike - DeltaSpike Security Module</title>
+
+    
+
+    
+    <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file to you under the Apache License, Version 2.0 (the &quot;License&quot;); you may not use this file except in compliance with the License.  You may obtain a copy of the License at . http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License. -->
+
+    <!-- Styles -->
+    
+    <link href="./deltaspike/resources/css/bootstrap.css" rel="stylesheet">    
+    <!--<link href="./deltaspike/resources/css/prettify.css" rel="stylesheet" /> -->
+    <link href="./deltaspike/resources/css/codehilite.css" rel="stylesheet" />
+    <link href="./deltaspike/resources/css/bootstrap-responsive.css" rel="stylesheet">
+    <style type="text/css">
+        body {
+            padding-top: 60px;
+            padding-bottom: 40px;
+        }
+    </style>
+	<script type="text/javascript">
+
+	  var _gaq = _gaq || [];
+	  _gaq.push(['_setAccount', 'UA-36103647-1']);
+	  _gaq.push(['_trackPageview']);
+	
+	  (function() {
+		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+	  })();
+	
+	</script>
+</head>
+
+<body>
+
+    <div class="navbar navbar-fixed-top">
+        <div class="navbar-inner">
+            <div class="container">
+                <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                </a>
+                <a class="brand" href="index.html"><img src="./deltaspike/resources/images/deltaspike-logo-medium.png"/></a>
+                <div class="nav-collapse">
+                    <ul class="nav">
+                        <li class="active"><a href="./deltaspike/index.html">Home</a></li>
+                        <li><a href="./deltaspike/documentation.html">Documentation</a></li>
+                        <li><a href="./deltaspike/source.html">Source</a></li>
+                        <!-- <li><a href="./deltaspike/download.html">Download</a></li> -->
+                        <li><a href="./deltaspike/community.html">Community</a></li>
+                        <!-- <li><a href="./deltaspike/support.html">Support</a></li>  -->
+                        <li><a href="./deltaspike/news.html">News</a></li>
+                        <li><a href="./deltaspike/migration-guide.html">Migration</a></li>
+                    </ul>
+                </div><!--/.nav-collapse -->
+                <form id="search-form" action="http://www.google.com/search" method="get"  class="navbar-search pull-right" >
+                    <input value="incubator.apache.org/deltaspike" name="sitesearch" type="hidden"/>
+                    <input class="search-query" name="q" id="query" type="text" />
+                </form>
+            </div>
+        </div>
+    </div>
+
+    <div class="container">
+      <div class="row">
+          <div class="span12">
+              <div class="page-title">
+                <h1>DeltaSpike Security Module</h1>
+              </div>
+              <div class="toc">
+<ul>
+<li><a href="#securitybinding-for-class-and-method-invocations">SecurityBinding for class and method invocations</a></li>
+<li><a href="#integrating-3rd-party-security-frameworks">Integrating 3rd party security frameworks</a><ul>
+<li><a href="#secured">@Secured</a></li>
+<li><a href="#accessdecisionvoter">AccessDecisionVoter</a></li>
+<li><a href="#securityviolation">SecurityViolation</a></li>
+<li><a href="#secured-and-stereotypes-with-custom-meta-data">@Secured and Stereotypes with custom Meta-data</a></li>
+</ul>
+</li>
+<li><a href="#accessdecisionvotercontext">AccessDecisionVoterContext</a><ul>
+<li><a href="#securitystrategy-spi">SecurityStrategy SPI</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<hr />
+<p><strong>Hint:</strong>
+If you are using features described by this page and the CDI container you are using is Weld (or OpenWebBeans in BDA mode), you have to enable the security interceptor in your beans.xml file:</p>
+<div class="codehilite"><pre><span class="nt">&lt;beans&gt;</span>
+    <span class="nt">&lt;interceptors&gt;</span>
+        <span class="nt">&lt;class&gt;</span>org.apache.deltaspike.security.impl.extension.SecurityInterceptor<span class="nt">&lt;/class&gt;</span>
+    <span class="nt">&lt;/interceptors&gt;</span>
+<span class="nt">&lt;/beans&gt;</span>
+</pre></div>
+
+
+<h1 id="securitybinding-for-class-and-method-invocations">SecurityBinding for class and method invocations</h1>
+<p>This feature of the security module functions by intercepting method calls, and performing a security check before invocation is allowed to proceed.</p>
+<p>In order to use the DeltaSpike security module, you must first have installed the proper dependencies into your POM file. Once this is complete, you may proceed to create a security parameter binding annotation. This is what we will use to add security behavior to our business classes and methods.</p>
+<p>Create the SecurityBinding:</p>
+<div class="codehilite"><pre><span class="nd">@Retention</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="n">RUNTIME</span><span class="o">)</span>
+<span class="nd">@Target</span><span class="o">({</span><span class="n">TYPE</span><span class="o">,</span> <span class="n">METHOD</span><span class="o">})</span>
+<span class="nd">@Documented</span>
+<span class="nd">@SecurityBindingType</span>
+<span class="kd">public</span> <span class="nd">@interface</span> <span class="n">CustomSecurityBinding</span> <span class="o">{</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>Next, we must define an Authorizer class to implement behavior for our custom SecurityBindingType. This class is simply a CDI bean which declares a @Secures method, qualified with the security binding annotation we created in the first step.</p>
+<p>This method has access to the InvocationContext of the method call, so if we need to access parameter arguments, we can do so using the given context. Note that we may also inject other beans into the parameter list of our @Secures method.</p>
+<p>Create the Authorizer:</p>
+<div class="codehilite"><pre><span class="nd">@ApplicationScoped</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">CustomAuthorizer</span>
+<span class="o">{</span>
+    <span class="nd">@Secures</span>
+    <span class="nd">@CustomSecurityBinding</span>
+    <span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">doSecuredCheck</span><span class="o">(</span><span class="n">InvocationContext</span> <span class="n">invocationContext</span><span class="o">,</span> <span class="n">BeanManager</span> <span class="n">manager</span><span class="o">,</span> <span class="nd">@LoggedIn</span> <span class="n">User</span> <span class="n">user</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span>
+    <span class="o">{</span>
+        <span class="k">return</span> <span class="n">user</span><span class="o">.</span><span class="na">isLoggedIn</span><span class="o">();</span> <span class="c1">// perform security check</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>We can then use our new annotation to secure business or bean methods. This binding annotation may be placed on the entire class (securing all methods,) or on individual methods that you wish to secure.</p>
+<p>Secure a bean method:</p>
+<div class="codehilite"><pre><span class="nd">@ApplicationScoped</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SecuredBean1</span>
+<span class="o">{</span>
+    <span class="nd">@CustomSecurityBinding</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">doSomething</span><span class="o">(</span><span class="n">Thing</span> <span class="n">thing</span><span class="o">)</span>
+    <span class="o">{</span>
+        <span class="n">thing</span><span class="o">.</span><span class="na">doSomething</span><span class="o">();</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>Next, we may access parameter values from the method invocation directly in our authorizer bean by creating custom @SecurityParameterBinding types; this is a simple step once we have completed the work above:</p>
+<p>Create a parameter binding annotation:</p>
+<div class="codehilite"><pre><span class="nd">@Retention</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="n">RUNTIME</span><span class="o">)</span>
+<span class="nd">@Target</span><span class="o">({</span><span class="n">PARAMETER</span><span class="o">})</span>
+<span class="nd">@Documented</span>
+<span class="nd">@SecurityParameterBinding</span>
+<span class="kd">public</span> <span class="nd">@interface</span> <span class="n">CurrentThing</span> <span class="o">{</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>Now, when a secured method is invoked, we can inject actual parameter values as arguments into our authorizer method, providing domain-level security in our applications:</p>
+<p>Update the Authorizer to use parameter binding:</p>
+<div class="codehilite"><pre><span class="nd">@ApplicationScoped</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">CustomAuthorizer</span>
+<span class="o">{</span>
+    <span class="nd">@Secures</span>
+    <span class="nd">@CustomSecurityBinding</span>
+    <span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">doSecuredCheck</span><span class="o">(</span><span class="n">InvocationContext</span> <span class="n">invocationContext</span><span class="o">,</span> <span class="n">BeanManager</span> <span class="n">manager</span><span class="o">,</span> <span class="nd">@LoggedIn</span> <span class="n">User</span> <span class="n">user</span><span class="o">,</span> <span class="nd">@CurrentThing</span> <span class="n">Thing</span> <span class="n">thing</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span>
+    <span class="o">{</span>
+        <span class="k">return</span> <span class="n">thing</span><span class="o">.</span><span class="na">hasMember</span><span class="o">(</span><span class="n">user</span><span class="o">);</span> <span class="c1">// perform security check against our method parameter</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>Note that our business method must also be annotated.</p>
+<p>Complete the parameter binding:</p>
+<div class="codehilite"><pre><span class="nd">@ApplicationScoped</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SecuredBean1</span>
+<span class="o">{</span>
+    <span class="nd">@CustomSecurityBinding</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">doSomething</span><span class="o">(</span><span class="nd">@CurrentThing</span> <span class="n">Thing</span> <span class="n">thing</span><span class="o">)</span>
+    <span class="o">{</span>
+        <span class="n">thing</span><span class="o">.</span><span class="na">doSomething</span><span class="o">();</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>Our method is now secured, and we are able to use given parameter values as part of our security authorizer!</p>
+<p>There may be cases where you may want to base your authorization logic on the result of the secured method and do the security check after the method invocation.
+Just use the same security binding type for that case:</p>
+<div class="codehilite"><pre><span class="nd">@ApplicationScoped</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SecuredBean1</span>
+<span class="o">{</span>
+    <span class="nd">@CustomSecurityBinding</span>
+    <span class="kd">public</span> <span class="n">Thing</span> <span class="nf">loadSomething</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="k">return</span> <span class="n">thingLoader</span><span class="o">.</span><span class="na">load</span><span class="o">();</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>Now you need to access the return value in the authorizer method. You can inject it using the @SecuredReturn annotation.
+Update the Authorizer to use a secured return value:</p>
+<div class="codehilite"><pre><span class="nd">@ApplicationScoped</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">CustomAuthorizer</span>
+<span class="o">{</span>
+    <span class="nd">@Secures</span>
+    <span class="nd">@CustomSecurityBinding</span>
+    <span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">doSecuredCheck</span><span class="o">(</span><span class="nd">@SecuredReturn</span> <span class="n">Thing</span> <span class="n">thing</span><span class="o">,</span> <span class="nd">@LoggedIn</span> <span class="n">User</span> <span class="n">user</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span>
+    <span class="o">{</span>
+        <span class="k">return</span> <span class="n">thing</span><span class="o">.</span><span class="na">hasMember</span><span class="o">(</span><span class="n">user</span><span class="o">);</span> <span class="c1">// perform security check against the return value</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>Now the authorization will take place after the method invocation using the return value of the business method.</p>
+<p>Complete the parameter binding:</p>
+<div class="codehilite"><pre><span class="nd">@ApplicationScoped</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SecuredBean1</span>
+<span class="o">{</span>
+    <span class="nd">@CustomSecurityBinding</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">doSomething</span><span class="o">(</span><span class="nd">@CurrentThing</span> <span class="n">Thing</span> <span class="n">thing</span><span class="o">)</span>
+    <span class="o">{</span>
+        <span class="n">thing</span><span class="o">.</span><span class="na">doSomething</span><span class="o">();</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>Our method is now secured, and we are able to use given parameter values as part of our security authorizer!</p>
+<h1 id="integrating-3rd-party-security-frameworks">Integrating 3rd party security frameworks</h1>
+<h2 id="secured">@Secured</h2>
+<p><code>@Secured</code> is build on <code>@SecurityBindingType</code> and a very simple alternative to the rest of the security module.
+It's a basic hook to integrate a custom security concept, 3rd party frameworks,... . It doesn't 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,...). It just allows to integrate other security frameworks easily.</p>
+<p>(In MyFaces CODI it was originally a CDI interceptor. This part changed a bit, because between the interceptor and <code>@Secured</code> is the <code>@SecurityBindingType</code> concept which triggers <code>@Secured</code> as on possible approach. Therefore the basic behaviour remains the same and you can think about it like an interceptor.)</p>
+<p>Securing all intercepted methods of a CDI bean:</p>
+<div class="codehilite"><pre><span class="c1">//...</span>
+<span class="nd">@Secured</span><span class="o">(</span><span class="n">CustomAccessDecisionVoter</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SecuredBean</span>
+<span class="o">{</span>
+    <span class="c1">//...</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>or</p>
+<p>Securing specific methods:</p>
+<div class="codehilite"><pre><span class="c1">//...</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SecuredBean</span>
+<span class="o">{</span>
+    <span class="nd">@Secured</span><span class="o">(</span><span class="n">CustomAccessDecisionVoter</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
+    <span class="kd">public</span> <span class="n">String</span> <span class="nf">getResult</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="c1">//...</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<h2 id="accessdecisionvoter">AccessDecisionVoter</h2>
+<p>This interface is (besides the <code>Secured</code> annotation) the most important part of the concept. Both artifact types are also the only required parts:</p>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">CustomAccessDecisionVoter</span> <span class="kd">implements</span> <span class="n">AccessDecisionVoter</span>
+<span class="o">{</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="n">Set</span><span class="o">&lt;</span><span class="n">SecurityViolation</span><span class="o">&gt;</span> <span class="n">checkPermission</span><span class="o">(</span><span class="n">AccessDecisionVoterContext</span> <span class="n">accessDecisionVoterContext</span><span class="o">)</span>
+    <span class="o">{</span>
+        <span class="n">Method</span> <span class="n">method</span> <span class="o">=</span> <span class="n">accessDecisionVoterContext</span><span class="o">.&lt;</span><span class="n">InvocationContext</span><span class="o">&gt;</span><span class="n">getSource</span><span class="o">().</span><span class="na">getMethod</span><span class="o">();</span>
+
+        <span class="c1">//...</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>[TODO] hint about the changed parameter/s</p>
+<h2 id="securityviolation">SecurityViolation</h2>
+<p>In case of a detected violation a <code>SecurityViolation</code> has to be added to the result returned by the <code>AccessDecisionVoter</code>.</p>
+<p>[TODO] AbstractAccessDecisionVoter</p>
+<h2 id="secured-and-stereotypes-with-custom-meta-data">@Secured and Stereotypes with custom Meta-data</h2>
+<p>If there are multiple <code>AccessDecisionVoter</code> and maybe in different constellations, it's easier to provide an expressive CDI stereotypes for it. Later on that also allows to change the behaviour in a central place.</p>
+<p>Stereotype support of @Secured:</p>
+<div class="codehilite"><pre><span class="nd">@Named</span>
+<span class="nd">@Admin</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyBean</span> <span class="kd">implements</span> <span class="n">Serializable</span>
+<span class="o">{</span>
+  <span class="c1">//...</span>
+<span class="o">}</span>
+
+<span class="c1">//...</span>
+<span class="nd">@Stereotype</span>
+<span class="nd">@Secured</span><span class="o">(</span><span class="n">RoleAccessDecisionVoter</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
+<span class="kd">public</span> <span class="nd">@interface</span> <span class="n">Admin</span>
+<span class="o">{</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>Furthermore, it's possible to provide custom meta-data easily.</p>
+<p>Stereotype of @Secured with custom meta-data:</p>
+<div class="codehilite"><pre><span class="nd">@Named</span>
+<span class="nd">@Admin</span><span class="o">(</span><span class="n">securityLevel</span><span class="o">=</span><span class="mi">3</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyBean</span> <span class="kd">implements</span> <span class="n">Serializable</span>
+<span class="o">{</span>
+  <span class="c1">//...</span>
+<span class="o">}</span>
+
+<span class="c1">//...</span>
+<span class="nd">@Stereotype</span>
+<span class="nd">@Secured</span><span class="o">(</span><span class="n">RoleAccessDecisionVoter</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
+<span class="kd">public</span> <span class="nd">@interface</span> <span class="n">Admin</span>
+<span class="o">{</span>
+  <span class="kt">int</span> <span class="nf">securityLevel</span><span class="o">();</span>
+<span class="o">}</span>
+
+<span class="nd">@ApplicationScoped</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">RoleAccessDecisionVoter</span> <span class="kd">implements</span> <span class="n">AccessDecisionVoter</span>
+<span class="o">{</span>
+    <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="kt">long</span> <span class="n">serialVersionUID</span> <span class="o">=</span> <span class="o">-</span><span class="mi">8007511215776345835L</span><span class="o">;</span>
+
+    <span class="kd">public</span> <span class="n">Set</span><span class="o">&lt;</span><span class="n">SecurityViolation</span><span class="o">&gt;</span> <span class="n">checkPermission</span><span class="o">(</span><span class="n">AccessDecisionVoterContext</span> <span class="n">voterContext</span><span class="o">)</span>
+    <span class="o">{</span>
+        <span class="n">Admin</span> <span class="n">admin</span> <span class="o">=</span> <span class="n">voterContext</span><span class="o">.</span><span class="na">getMetaDataFor</span><span class="o">(</span><span class="n">Admin</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">(),</span> <span class="n">Admin</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+        <span class="kt">int</span> <span class="n">level</span> <span class="o">=</span> <span class="n">admin</span><span class="o">.</span><span class="na">securityLevel</span><span class="o">();</span>
+        <span class="c1">//...</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<h1 id="accessdecisionvotercontext">AccessDecisionVoterContext</h1>
+<p>[TODO]</p>
+<h2 id="securitystrategy-spi">SecurityStrategy SPI</h2>
+<p>[TODO]</p>
+          </div>
+      </div>
+
+      <hr>
+
+      <footer>
+        <p>Copyright © 20011-2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</p>
+        <p>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+      </footer>
+
+    </div> <!-- /container -->
+
+    <!-- Javascript
+    ================================================== -->
+    <!-- Placed at the end of the document so the pages load faster -->
+    <!--<script src="./deltaspike/resources/js/prettyfy.js"></script> -->
+    <script src="./deltaspike/resources/js/prettyprint.js"></script>
+    <script src="./deltaspike/resources/js/jquery.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-transition.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-alert.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-modal.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-dropdown.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-scrollspy.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-tab.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-tooltip.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-popover.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-button.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-collapse.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-carousel.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-typeahead.js"></script>
+
+</body>
+</html>
\ No newline at end of file

Added: websites/staging/deltaspike/trunk/content/source.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/source.html (added)
+++ websites/staging/deltaspike/trunk/content/source.html Sun Jun  9 09:26:31 2013
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="deltaspike-generate-pages">
+    <meta name="author" content="chm">
+
+    <title>Apache DeltaSpike - Get Source and compile it</title>
+
+    
+
+    
+    <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file to you under the Apache License, Version 2.0 (the &quot;License&quot;); you may not use this file except in compliance with the License.  You may obtain a copy of the License at . http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License. -->
+
+    <!-- Styles -->
+    
+    <link href="./deltaspike/resources/css/bootstrap.css" rel="stylesheet">    
+    <!--<link href="./deltaspike/resources/css/prettify.css" rel="stylesheet" /> -->
+    <link href="./deltaspike/resources/css/codehilite.css" rel="stylesheet" />
+    <link href="./deltaspike/resources/css/bootstrap-responsive.css" rel="stylesheet">
+    <style type="text/css">
+        body {
+            padding-top: 60px;
+            padding-bottom: 40px;
+        }
+    </style>
+	<script type="text/javascript">
+
+	  var _gaq = _gaq || [];
+	  _gaq.push(['_setAccount', 'UA-36103647-1']);
+	  _gaq.push(['_trackPageview']);
+	
+	  (function() {
+		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+	  })();
+	
+	</script>
+</head>
+
+<body>
+
+    <div class="navbar navbar-fixed-top">
+        <div class="navbar-inner">
+            <div class="container">
+                <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                </a>
+                <a class="brand" href="index.html"><img src="./deltaspike/resources/images/deltaspike-logo-medium.png"/></a>
+                <div class="nav-collapse">
+                    <ul class="nav">
+                        <li class="active"><a href="./deltaspike/index.html">Home</a></li>
+                        <li><a href="./deltaspike/documentation.html">Documentation</a></li>
+                        <li><a href="./deltaspike/source.html">Source</a></li>
+                        <!-- <li><a href="./deltaspike/download.html">Download</a></li> -->
+                        <li><a href="./deltaspike/community.html">Community</a></li>
+                        <!-- <li><a href="./deltaspike/support.html">Support</a></li>  -->
+                        <li><a href="./deltaspike/news.html">News</a></li>
+                        <li><a href="./deltaspike/migration-guide.html">Migration</a></li>
+                    </ul>
+                </div><!--/.nav-collapse -->
+                <form id="search-form" action="http://www.google.com/search" method="get"  class="navbar-search pull-right" >
+                    <input value="incubator.apache.org/deltaspike" name="sitesearch" type="hidden"/>
+                    <input class="search-query" name="q" id="query" type="text" />
+                </form>
+            </div>
+        </div>
+    </div>
+
+    <div class="container">
+      <div class="row">
+          <div class="span12">
+              <div class="page-title">
+                <h1>Get Source and compile it</h1>
+              </div>
+              <h1 id="vcs-repository">VCS / Repository</h1>
+<p>We are using GIT as a Version Control System. The official GIT repository of the project is available <a href="https://git-wip-us.apache.org/repos/asf/deltaspike.git">here</a>.</p>
+<h3 id="initial-checkout">Initial 'checkout'</h3>
+<div class="codehilite"><pre><span class="n">git</span> <span class="n">clone</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">git</span><span class="o">-</span><span class="n">wip</span><span class="o">-</span><span class="n">us</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">org</span><span class="o">/</span><span class="n">repos</span><span class="o">/</span><span class="n">asf</span><span class="o">/</span><span class="n">deltaspike</span><span class="p">.</span><span class="n">git</span>
+</pre></div>
+
+
+<h3 id="update-existing-clone">Update existing clone</h3>
+<div class="codehilite"><pre><span class="n">git</span> <span class="n">pull</span> <span class="o">--</span><span class="n">rebase</span>
+</pre></div>
+
+
+<h2 id="read-only-mirrors">Read-only Mirrors</h2>
+<h3 id="github-mirror">GitHub-Mirror</h3>
+<div class="codehilite"><pre><span class="n">git</span> <span class="n">clone</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">github</span><span class="p">.</span><span class="n">com</span><span class="o">/</span><span class="n">apache</span><span class="o">/</span><span class="n">deltaspike</span>
+</pre></div>
+
+
+<p>More information can be found <a href="https://help.github.com/articles/which-remote-url-should-i-use">here</a>.</p>
+<h2 id="git-workflow">GIT Workflow</h2>
+<p>We follow an <a href="suggested-git-workflows.html">unified GIT workflow</a> to keep the commit history straight and therefore simple and clean.
+General details about GIT at Apache are available <a href="http://wiki.apache.org/couchdb/Git_At_Apache_Guide">here</a> and at <a href="http://git-wip-us.apache.org">http://git-wip-us.apache.org</a>.</p>
+<p><strong>Hint:</strong></p>
+<p>If you are new to Git you might like to try the <a href="http://git.or.cz/course/svn.html">Git guide for subversion users</a> or have a look at the <a href="http://git-scm.com/book">Git community book</a>.</p>
+<h1 id="build">Build</h1>
+<p>So now you probably want to <strong><code>build the code</code></strong>. So follow the instructions <a href="build.html">here</a></p>
+<h1 id="tools-ide">Tools / IDE</h1>
+<p>Commits (and in the best case also patches), have to follow our "formatting rules".
+The following section provides settings for IDEs used by us.</p>
+<h2 id="intellij">IntelliJ</h2>
+<p><a href="resources/files/settings.jar">Attached</a> you can find the settings for formatting the source code. Import them via File | Import Settings...</p>
+<h2 id="eclipse">Eclipse</h2>
+<p>For Eclipse you can use this <a href="resources/files/deltaspike-code-conventions.xml">Code Formatter Profile</a>. Import it via Window | Preferences | Java | Code Style | Formatter</p>
+          </div>
+      </div>
+
+      <hr>
+
+      <footer>
+        <p>Copyright © 20011-2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</p>
+        <p>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+      </footer>
+
+    </div> <!-- /container -->
+
+    <!-- Javascript
+    ================================================== -->
+    <!-- Placed at the end of the document so the pages load faster -->
+    <!--<script src="./deltaspike/resources/js/prettyfy.js"></script> -->
+    <script src="./deltaspike/resources/js/prettyprint.js"></script>
+    <script src="./deltaspike/resources/js/jquery.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-transition.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-alert.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-modal.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-dropdown.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-scrollspy.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-tab.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-tooltip.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-popover.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-button.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-collapse.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-carousel.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-typeahead.js"></script>
+
+</body>
+</html>
\ No newline at end of file

Added: websites/staging/deltaspike/trunk/content/spi.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/spi.html (added)
+++ websites/staging/deltaspike/trunk/content/spi.html Sun Jun  9 09:26:31 2013
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="deltaspike-generate-pages">
+    <meta name="author" content="chm">
+
+    <title>Apache DeltaSpike - DeltaSpike Service Provider Interface (SPI)</title>
+
+    
+
+    
+    <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file to you under the Apache License, Version 2.0 (the &quot;License&quot;); you may not use this file except in compliance with the License.  You may obtain a copy of the License at . http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License. -->
+
+    <!-- Styles -->
+    
+    <link href="./deltaspike/resources/css/bootstrap.css" rel="stylesheet">    
+    <!--<link href="./deltaspike/resources/css/prettify.css" rel="stylesheet" /> -->
+    <link href="./deltaspike/resources/css/codehilite.css" rel="stylesheet" />
+    <link href="./deltaspike/resources/css/bootstrap-responsive.css" rel="stylesheet">
+    <style type="text/css">
+        body {
+            padding-top: 60px;
+            padding-bottom: 40px;
+        }
+    </style>
+	<script type="text/javascript">
+
+	  var _gaq = _gaq || [];
+	  _gaq.push(['_setAccount', 'UA-36103647-1']);
+	  _gaq.push(['_trackPageview']);
+	
+	  (function() {
+		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+	  })();
+	
+	</script>
+</head>
+
+<body>
+
+    <div class="navbar navbar-fixed-top">
+        <div class="navbar-inner">
+            <div class="container">
+                <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                </a>
+                <a class="brand" href="index.html"><img src="./deltaspike/resources/images/deltaspike-logo-medium.png"/></a>
+                <div class="nav-collapse">
+                    <ul class="nav">
+                        <li class="active"><a href="./deltaspike/index.html">Home</a></li>
+                        <li><a href="./deltaspike/documentation.html">Documentation</a></li>
+                        <li><a href="./deltaspike/source.html">Source</a></li>
+                        <!-- <li><a href="./deltaspike/download.html">Download</a></li> -->
+                        <li><a href="./deltaspike/community.html">Community</a></li>
+                        <!-- <li><a href="./deltaspike/support.html">Support</a></li>  -->
+                        <li><a href="./deltaspike/news.html">News</a></li>
+                        <li><a href="./deltaspike/migration-guide.html">Migration</a></li>
+                    </ul>
+                </div><!--/.nav-collapse -->
+                <form id="search-form" action="http://www.google.com/search" method="get"  class="navbar-search pull-right" >
+                    <input value="incubator.apache.org/deltaspike" name="sitesearch" type="hidden"/>
+                    <input class="search-query" name="q" id="query" type="text" />
+                </form>
+            </div>
+        </div>
+    </div>
+
+    <div class="container">
+      <div class="row">
+          <div class="span12">
+              <div class="page-title">
+                <h1>DeltaSpike Service Provider Interface (SPI)</h1>
+              </div>
+              <h1 id="deactivatable">Deactivatable</h1>
+<p>This mechanism is only used for artifacts <strong>like</strong> implementations of (<code>javax.enterprise.inject.spi.Extension</code>) which <strong>can't</strong> be deactivated with std. CDI mechanisms.</p>
+<p>This interface is just a marker interface which is implemented by all pre-configured DeltaSpike artifacts which can be deactivated manually (e.g. to improve the performance if a part isn't needed, to provide a custom implementation if the default implementation isn't pluggable by default or to bypass an implementation which causes an issue (in this case please also <strong>contact us</strong> and we will fix it)).</p>
+<p>To deactivate a class it's required to implement <code>ClassDeactivator</code>. Returning 'false' or 'true' allows to de-/activate the class in question.
+Retuning null means that the current class-deactivator doesn't have information about the class in question and can't provide a result.
+Since <code>ClassDeactivator</code> implementations are configured with the low-level config of DeltaSpike, the class-deactivator with the highest ordinal has the final decision.
+DeltaSpike itself doesn't deactivate an implementation, however, an add-on or a 3rd party portable CDI extension based on DeltaSpike (Core+) can use the concept to deactivate a default implementation of DeltaSpike in favour of its own implementation.</p>
+<p><strong>Attention</strong>: due to the ordinal feature of the low-level config approach it's possible that a class-deactivator with a higher ordinal, e.g. used in a concrete project, can re-activate a deactivated implementation.<br />
+<strong>Please note</strong> that you might have to deactivate the parts of the add-on or 3rd party CDI extension which relies on its own implementation. Therefore, you should <strong>be really careful with re-activation</strong>.) The implementation should be stateless because the result will be cached and as soon as everything is initialized the class-deactivators won't be used any longer.</p>
+<h2 id="classdeactivator">ClassDeactivator</h2>
+<p>A class-deactivator allows to specify deactivated classes.</p>
+<div class="codehilite"><pre><span class="c1">//This class needs to be configured via one of the supported config sources!</span>
+<span class="n">public</span> <span class="k">class</span> <span class="n">CustomClassDeactivator</span> <span class="k">extends</span> <span class="n">ClassDeactivator</span>
+<span class="p">{</span>
+    <span class="p">@</span><span class="n">Override</span>
+    <span class="n">public</span> <span class="n">Boolean</span> <span class="n">isActivated</span><span class="p">(</span><span class="n">Class</span><span class="o">&lt;?</span> <span class="k">extends</span> <span class="n">Deactivatable</span><span class="o">&gt;</span> <span class="n">targetClass</span><span class="p">)</span>
+    <span class="p">{</span>
+        <span class="k">if</span> <span class="p">(</span><span class="n">targetClass</span><span class="p">.</span><span class="n">equals</span><span class="p">(</span><span class="n">MyClass</span><span class="p">.</span><span class="k">class</span><span class="p">))</span>
+        <span class="p">{</span>
+            <span class="k">return</span> <span class="n">Boolean</span><span class="p">.</span><span class="no">FALSE</span><span class="p">;</span>
+        <span class="p">}</span>
+        <span class="k">return</span> <span class="k">null</span><span class="p">;</span> <span class="c1">//no result for the given class</span>
+    <span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>A class-deactivator will be resolved from the environment via the default resolvers or via a custom resolver which allows to use any type of configuration-format.
+(see <code>org.apache.deltaspike.core.api.config.ConfigResolver</code>). The key is the fully qualified name of the interface (<code>org.apache.deltaspike.core.api.activation.ClassDeactivator</code>).</p>
+<h1 id="configsource">ConfigSource</h1>
+<p>[TODO]</p>
+<h2 id="configsourceprovider">ConfigSourceProvider</h2>
+<p>[TODO]</p>
+<h2 id="baseconfigpropertyproducer">BaseConfigPropertyProducer</h2>
+<p>[TODO]</p>
+<h1 id="interceptorstrategy">InterceptorStrategy</h1>
+<p>[TODO]</p>
+<h1 id="global-alternative">Global Alternative</h1>
+<p>There are several application servers (using CDI 1.0) which can't handle alternative CDI beans correctly (e.g. due to a too strict interpretation or a broken implementation). Therefore, DeltaSpike allows to use the std. <code>@Alternative</code> annotation and an additional config entry for DeltaSpike which allows to use the alternative implementation as a global alternative.</p>
+<p><strong>Std. CDI alternative implementation (without the required XML config)</strong></p>
+<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">CustomBean</span>
+<span class="p">{</span>
+<span class="p">}</span>
+
+<span class="p">@</span><span class="n">Alternative</span>
+<span class="o">//</span><span class="p">...</span>
+<span class="n">public</span> <span class="n">class</span> <span class="n">AlternativeCustomBean</span> <span class="n">extends</span> <span class="n">CustomBean</span>
+<span class="p">{</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>Instead of configuring the alternative in the beans.xml, a global alternative needs to be configured in /META-INF/apache-deltaspike.properties. CDI 1.1 should fix this issue and migrating to it means to remove the config entry for DeltaSpike again and move to the std. CDI config approach.</p>
+<div class="codehilite"><pre><span class="n">custom</span><span class="p">.</span><span class="n">CustomBean</span><span class="p">=</span><span class="n">custom</span><span class="p">.</span><span class="n">AlternativeCustomBean</span>
+</pre></div>
+          </div>
+      </div>
+
+      <hr>
+
+      <footer>
+        <p>Copyright © 20011-2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</p>
+        <p>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+      </footer>
+
+    </div> <!-- /container -->
+
+    <!-- Javascript
+    ================================================== -->
+    <!-- Placed at the end of the document so the pages load faster -->
+    <!--<script src="./deltaspike/resources/js/prettyfy.js"></script> -->
+    <script src="./deltaspike/resources/js/prettyprint.js"></script>
+    <script src="./deltaspike/resources/js/jquery.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-transition.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-alert.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-modal.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-dropdown.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-scrollspy.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-tab.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-tooltip.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-popover.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-button.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-collapse.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-carousel.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-typeahead.js"></script>
+
+</body>
+</html>
\ No newline at end of file

Added: websites/staging/deltaspike/trunk/content/suggested-git-workflows.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/suggested-git-workflows.html (added)
+++ websites/staging/deltaspike/trunk/content/suggested-git-workflows.html Sun Jun  9 09:26:31 2013
@@ -0,0 +1,239 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="deltaspike-generate-pages">
+    <meta name="author" content="chm">
+
+    <title>Apache DeltaSpike - </title>
+
+    
+
+    
+    <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file to you under the Apache License, Version 2.0 (the &quot;License&quot;); you may not use this file except in compliance with the License.  You may obtain a copy of the License at . http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License. -->
+
+    <!-- Styles -->
+    
+    <link href="./deltaspike/resources/css/bootstrap.css" rel="stylesheet">    
+    <!--<link href="./deltaspike/resources/css/prettify.css" rel="stylesheet" /> -->
+    <link href="./deltaspike/resources/css/codehilite.css" rel="stylesheet" />
+    <link href="./deltaspike/resources/css/bootstrap-responsive.css" rel="stylesheet">
+    <style type="text/css">
+        body {
+            padding-top: 60px;
+            padding-bottom: 40px;
+        }
+    </style>
+	<script type="text/javascript">
+
+	  var _gaq = _gaq || [];
+	  _gaq.push(['_setAccount', 'UA-36103647-1']);
+	  _gaq.push(['_trackPageview']);
+	
+	  (function() {
+		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+	  })();
+	
+	</script>
+</head>
+
+<body>
+
+    <div class="navbar navbar-fixed-top">
+        <div class="navbar-inner">
+            <div class="container">
+                <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                </a>
+                <a class="brand" href="index.html"><img src="./deltaspike/resources/images/deltaspike-logo-medium.png"/></a>
+                <div class="nav-collapse">
+                    <ul class="nav">
+                        <li class="active"><a href="./deltaspike/index.html">Home</a></li>
+                        <li><a href="./deltaspike/documentation.html">Documentation</a></li>
+                        <li><a href="./deltaspike/source.html">Source</a></li>
+                        <!-- <li><a href="./deltaspike/download.html">Download</a></li> -->
+                        <li><a href="./deltaspike/community.html">Community</a></li>
+                        <!-- <li><a href="./deltaspike/support.html">Support</a></li>  -->
+                        <li><a href="./deltaspike/news.html">News</a></li>
+                        <li><a href="./deltaspike/migration-guide.html">Migration</a></li>
+                    </ul>
+                </div><!--/.nav-collapse -->
+                <form id="search-form" action="http://www.google.com/search" method="get"  class="navbar-search pull-right" >
+                    <input value="incubator.apache.org/deltaspike" name="sitesearch" type="hidden"/>
+                    <input class="search-query" name="q" id="query" type="text" />
+                </form>
+            </div>
+        </div>
+    </div>
+
+    <div class="container">
+      <div class="row">
+          <div class="span12">
+              <div class="page-title">
+                <h1></h1>
+              </div>
+              <h1 id="suggested-workflows">Suggested workflows</h1>
+<h2 id="avoid-git-pull">Avoid git-pull!</h2>
+<p>git-pull should never get invoked if you have dirty files lying around or if your branch is ahead of master.
+This will always lead to some dirty artifacts in the commit history:</p>
+<div class="codehilite"><pre><span class="n">Merge</span> <span class="n">branch</span> <span class="s">&#39;master&#39;</span> <span class="n">of</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">git</span><span class="o">-</span><span class="n">wip</span><span class="o">-</span><span class="n">us</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">org</span><span class="o">/</span><span class="n">deltaspike</span> <span class="n">into</span> <span class="n">master</span>
+</pre></div>
+
+
+<h2 id="git-pull-rebase">git pull --rebase</h2>
+<p>An easy version for getting rid of the auto-merges is using </p>
+<div class="codehilite"><pre><span class="c">%&gt; git pull --rebase</span>
+</pre></div>
+
+
+<p>Please note that this sometimes trashes your working tree if there are unmergeable files around. Cleaning this up with a forced manual rebase is not something we would recommend for a git beginner.</p>
+<h3 id="working-in-an-own-branch">Working in an own branch</h3>
+<p>This is actually the suggested way to prevent auto-merges.</p>
+<p>Create an own branch where you do your feature work. Either do all your work in one branch or create one branch per feature you are working on.</p>
+<div class="codehilite"><pre><span class="c">%&gt; git branch mybranch</span>
+</pre></div>
+
+
+<p>After you finished your feature, <code>git-add</code> and <code>git-commit</code> your work. Check with <code>git-status</code> that you don't have any dirty files and uncommitted changes around. You can use <code>git-stash</code> to 'backup' unfinished work.</p>
+<p>Then switch back to the master branch and pull changes done by other committers in the meantime.</p>
+<div class="codehilite"><pre><span class="c">%&gt; git checkout master</span>
+<span class="c">%&gt; git pull --rebase</span>
+</pre></div>
+
+
+<p>You should now get all the changes done by other committers and the will get applied to your local master branch.
+Now go back to your private branch and rebase your locally performed work to the HEAD of master.</p>
+<div class="codehilite"><pre><span class="c">%&gt; git checkout mybranch</span>
+<span class="c">%&gt; git rebase master</span>
+</pre></div>
+
+
+<p>If you got conflicts, you will get lines with "&gt;&gt;&gt;&gt;" added to those files. Resolve those conflicts manually, add them and finish the rebase.</p>
+<p>Check with <code>git-status</code> and <code>gitk</code> if the merge went well and the history now contains your changes.
+If all is well, go back to the master branch and merge your changes in.</p>
+<div class="codehilite"><pre><span class="c">%&gt; git pull --rebase     // (just for safety, you should see no changes)</span>
+<span class="c">%&gt; git checkout master</span>
+<span class="c">%&gt; git merge mybranch</span>
+</pre></div>
+
+
+<p>Finally you can push your changes to the ASF git repo</p>
+<div class="codehilite"><pre><span class="c">%&gt; git push</span>
+</pre></div>
+
+
+<h2 id="contribution-workflow">Contribution workflow</h2>
+<h3 id="creating-patches">Creating patches</h3>
+<p>You should use the following workflow, if you plan to contribute patches or new features to DeltaSpike.</p>
+<p>First update you local copy of the repository:</p>
+<div class="codehilite"><pre><span class="c">%&gt; git checkout master</span>
+<span class="c">%&gt; git pull --rebase</span>
+</pre></div>
+
+
+<p>Then create a new local branch for your work. It's good practice to name it after the corresponding JIRA issue.</p>
+<div class="codehilite"><pre><span class="c">%&gt; git checkout -b DELTASPIKE-XXX</span>
+</pre></div>
+
+
+<p>Now you can start to work on your patch. When you are finished, commit your changes. But don't forget to <strong>add the name of the JIRA issue to the commit message</strong>.</p>
+<div class="codehilite"><pre><span class="c">%&gt; git add -am &quot;DELTASPIKE-XXX: Fixed some issue&quot;</span>
+</pre></div>
+
+
+<p>For small patches we recommend to do a single commit containing your changes. For larger contributions you should try to group your work into separate sub-tasks that you can commit one by one.</p>
+<p>Before you create your patch you should make sure that your local repository is up to date with the master repository. This is very important especially if you work on your branch for a long time. Use the following commands to pull the latest changes from the upstream repository and rebase your branch against the current master.</p>
+<div class="codehilite"><pre><span class="c">%&gt; git checkout master</span>
+<span class="c">%&gt; git pull --rebase</span>
+<span class="c">%&gt; git checkout DELTASPIKE-XXX</span>
+<span class="c">%&gt; git rebase master</span>
+</pre></div>
+
+
+<p>Now you are ready to create your patch:</p>
+<div class="codehilite"><pre><span class="c">%&gt; git checkout DELTASPIKE-XXX</span>
+<span class="c">%&gt; git format-patch --stdout master &gt; ../DELTASPIKE-XXX.patch</span>
+</pre></div>
+
+
+<p>Please attach the resulting patch file to the correspoding JIRA issue.</p>
+<h3 id="applying-patches">Applying patches</h3>
+<p>If you are a committer and want to apply a patch you should do so in a separate branch.</p>
+<div class="codehilite"><pre><span class="c">%&gt; git checkout -b DELTASPIKE-XXX</span>
+</pre></div>
+
+
+<p>Then apply the patch using <code>git-am</code> and rebase it against the master branch.</p>
+<div class="codehilite"><pre><span class="c">%&gt; git am &lt; ../DELTASPIKE-XXX.patch </span>
+<span class="c">%&gt; git rebase master</span>
+</pre></div>
+
+
+<p>After reviewing the changes and testing the code, the changes are ready to be merged into the master branch:</p>
+<div class="codehilite"><pre><span class="c">%&gt; git checkout master</span>
+<span class="c">%&gt; git merge DELTASPIKE-XXX</span>
+<span class="c">%&gt; git branch -d DELTASPIKE-XXX</span>
+</pre></div>
+
+
+<h2 id="discussion-workflow-optional">Discussion workflow (optional)</h2>
+<p>All discussions which lead to a decision take place on the mailing list. Sometimes it's required to show-case an idea esp. if the solution is more than few lines. As shown above it makes sense to use local branches for developing new parts. Git allows to push such local branches to a public repository. So it's easier to share it with the community for discussing it. The following listings show an example in combination with GitHub - for sure it works with any hosting platform like BitBucket, Google-Code,... The only important part here is that such branches <em>NEVER</em> get pushed to the main Apache repository to keep the commit history as clean as possible.</p>
+<p><strong>Initial setup</strong></p>
+<div class="codehilite"><pre><span class="c">%&gt; git clone https://git-wip-us.apache.org/repos/asf/incubator-deltaspike.git ./</span>
+<span class="c">%&gt; git remote add discuss https://[username]@github.com/[username]/[repo-name].git</span>
+<span class="c">%&gt; git push -u discuss master</span>
+</pre></div>
+
+
+<p><strong>Branches for discussions</strong></p>
+<div class="codehilite"><pre><span class="c">%&gt; git checkout -b DELTASPIKE-XXX</span>
+<span class="o">//</span>1<span class="o">-</span><span class="n">n</span> <span class="n">commits</span>
+<span class="c">%&gt; git push discuss DELTASPIKE-XXX</span>
+<span class="o">//</span><span class="n">share</span> <span class="n">the</span> <span class="n">link</span> <span class="n">to</span> <span class="n">the</span> <span class="n">branch</span> <span class="k">for</span> <span class="n">the</span> <span class="n">discussions</span>
+</pre></div>
+
+
+<p><em>If the community agrees on the suggested change, the implementation will be applied to the origin master. A committer has to follow the steps described above for the basic workflow to keep the commit history simple, clean and straight. A contributor has to follow the steps described above for creating a patch.</em></p>
+<p><strong>Delete the branch again</strong></p>
+<div class="codehilite"><pre><span class="c">%&gt;git push discuss :DELTASPIKE-XXX</span>
+<span class="c">%&gt;git branch -d DELTASPIKE-XXX</span>
+</pre></div>
+          </div>
+      </div>
+
+      <hr>
+
+      <footer>
+        <p>Copyright © 20011-2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</p>
+        <p>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+      </footer>
+
+    </div> <!-- /container -->
+
+    <!-- Javascript
+    ================================================== -->
+    <!-- Placed at the end of the document so the pages load faster -->
+    <!--<script src="./deltaspike/resources/js/prettyfy.js"></script> -->
+    <script src="./deltaspike/resources/js/prettyprint.js"></script>
+    <script src="./deltaspike/resources/js/jquery.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-transition.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-alert.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-modal.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-dropdown.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-scrollspy.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-tab.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-tooltip.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-popover.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-button.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-collapse.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-carousel.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-typeahead.js"></script>
+
+</body>
+</html>
\ No newline at end of file

Added: websites/staging/deltaspike/trunk/content/support.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/support.html (added)
+++ websites/staging/deltaspike/trunk/content/support.html Sun Jun  9 09:26:31 2013
@@ -0,0 +1,114 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="deltaspike-generate-pages">
+    <meta name="author" content="chm">
+
+    <title>Apache DeltaSpike - Support</title>
+
+    
+
+    
+    <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file to you under the Apache License, Version 2.0 (the &quot;License&quot;); you may not use this file except in compliance with the License.  You may obtain a copy of the License at . http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License. -->
+
+    <!-- Styles -->
+    
+    <link href="./deltaspike/resources/css/bootstrap.css" rel="stylesheet">    
+    <!--<link href="./deltaspike/resources/css/prettify.css" rel="stylesheet" /> -->
+    <link href="./deltaspike/resources/css/codehilite.css" rel="stylesheet" />
+    <link href="./deltaspike/resources/css/bootstrap-responsive.css" rel="stylesheet">
+    <style type="text/css">
+        body {
+            padding-top: 60px;
+            padding-bottom: 40px;
+        }
+    </style>
+	<script type="text/javascript">
+
+	  var _gaq = _gaq || [];
+	  _gaq.push(['_setAccount', 'UA-36103647-1']);
+	  _gaq.push(['_trackPageview']);
+	
+	  (function() {
+		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+	  })();
+	
+	</script>
+</head>
+
+<body>
+
+    <div class="navbar navbar-fixed-top">
+        <div class="navbar-inner">
+            <div class="container">
+                <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                </a>
+                <a class="brand" href="index.html"><img src="./deltaspike/resources/images/deltaspike-logo-medium.png"/></a>
+                <div class="nav-collapse">
+                    <ul class="nav">
+                        <li class="active"><a href="./deltaspike/index.html">Home</a></li>
+                        <li><a href="./deltaspike/documentation.html">Documentation</a></li>
+                        <li><a href="./deltaspike/source.html">Source</a></li>
+                        <!-- <li><a href="./deltaspike/download.html">Download</a></li> -->
+                        <li><a href="./deltaspike/community.html">Community</a></li>
+                        <!-- <li><a href="./deltaspike/support.html">Support</a></li>  -->
+                        <li><a href="./deltaspike/news.html">News</a></li>
+                        <li><a href="./deltaspike/migration-guide.html">Migration</a></li>
+                    </ul>
+                </div><!--/.nav-collapse -->
+                <form id="search-form" action="http://www.google.com/search" method="get"  class="navbar-search pull-right" >
+                    <input value="incubator.apache.org/deltaspike" name="sitesearch" type="hidden"/>
+                    <input class="search-query" name="q" id="query" type="text" />
+                </form>
+            </div>
+        </div>
+    </div>
+
+    <div class="container">
+      <div class="row">
+          <div class="span12">
+              <div class="page-title">
+                <h1>Support</h1>
+              </div>
+              
+          </div>
+      </div>
+
+      <hr>
+
+      <footer>
+        <p>Copyright © 20011-2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</p>
+        <p>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+      </footer>
+
+    </div> <!-- /container -->
+
+    <!-- Javascript
+    ================================================== -->
+    <!-- Placed at the end of the document so the pages load faster -->
+    <!--<script src="./deltaspike/resources/js/prettyfy.js"></script> -->
+    <script src="./deltaspike/resources/js/prettyprint.js"></script>
+    <script src="./deltaspike/resources/js/jquery.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-transition.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-alert.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-modal.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-dropdown.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-scrollspy.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-tab.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-tooltip.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-popover.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-button.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-collapse.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-carousel.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-typeahead.js"></script>
+
+</body>
+</html>
\ No newline at end of file

Added: websites/staging/deltaspike/trunk/content/supporters.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/supporters.html (added)
+++ websites/staging/deltaspike/trunk/content/supporters.html Sun Jun  9 09:26:31 2013
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="deltaspike-generate-pages">
+    <meta name="author" content="chm">
+
+    <title>Apache DeltaSpike - DeltaSpike supporters</title>
+
+    
+
+    
+    <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file to you under the Apache License, Version 2.0 (the &quot;License&quot;); you may not use this file except in compliance with the License.  You may obtain a copy of the License at . http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License. -->
+
+    <!-- Styles -->
+    
+    <link href="./deltaspike/resources/css/bootstrap.css" rel="stylesheet">    
+    <!--<link href="./deltaspike/resources/css/prettify.css" rel="stylesheet" /> -->
+    <link href="./deltaspike/resources/css/codehilite.css" rel="stylesheet" />
+    <link href="./deltaspike/resources/css/bootstrap-responsive.css" rel="stylesheet">
+    <style type="text/css">
+        body {
+            padding-top: 60px;
+            padding-bottom: 40px;
+        }
+    </style>
+	<script type="text/javascript">
+
+	  var _gaq = _gaq || [];
+	  _gaq.push(['_setAccount', 'UA-36103647-1']);
+	  _gaq.push(['_trackPageview']);
+	
+	  (function() {
+		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+	  })();
+	
+	</script>
+</head>
+
+<body>
+
+    <div class="navbar navbar-fixed-top">
+        <div class="navbar-inner">
+            <div class="container">
+                <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                </a>
+                <a class="brand" href="index.html"><img src="./deltaspike/resources/images/deltaspike-logo-medium.png"/></a>
+                <div class="nav-collapse">
+                    <ul class="nav">
+                        <li class="active"><a href="./deltaspike/index.html">Home</a></li>
+                        <li><a href="./deltaspike/documentation.html">Documentation</a></li>
+                        <li><a href="./deltaspike/source.html">Source</a></li>
+                        <!-- <li><a href="./deltaspike/download.html">Download</a></li> -->
+                        <li><a href="./deltaspike/community.html">Community</a></li>
+                        <!-- <li><a href="./deltaspike/support.html">Support</a></li>  -->
+                        <li><a href="./deltaspike/news.html">News</a></li>
+                        <li><a href="./deltaspike/migration-guide.html">Migration</a></li>
+                    </ul>
+                </div><!--/.nav-collapse -->
+                <form id="search-form" action="http://www.google.com/search" method="get"  class="navbar-search pull-right" >
+                    <input value="incubator.apache.org/deltaspike" name="sitesearch" type="hidden"/>
+                    <input class="search-query" name="q" id="query" type="text" />
+                </form>
+            </div>
+        </div>
+    </div>
+
+    <div class="container">
+      <div class="row">
+          <div class="span12">
+              <div class="page-title">
+                <h1>DeltaSpike supporters</h1>
+              </div>
+              <h1 id="support-deltaspike">Support DeltaSpike</h1>
+<p>Apache DeltaSpike gets support from many community members.</p>
+<h2 id="git-mirrors">Git Mirrors</h2>
+<p>Besides the official GitHub mirror there are the following mirrors:</p>
+<ul>
+<li><a href="https://github.com/DeltaSpike/Mirror">https://github.com/DeltaSpike/Mirror</a> (+ the corresponding internal <a href="http://www.irian.at">Irian</a> mirror for the sync.)</li>
+</ul>
+<h2 id="mailing-list-mirrors">Mailing-list Mirrors</h2>
+<ul>
+<li><a href="http://incubator.markmail.org/search/?q=list%3Aorg.apache.incubator.deltaspike-dev">Markmail</a></li>
+<li><a href="https://s.apache.org/deltaspike-dev_nabble">Nabble</a></li>
+</ul>
+<h2 id="integration-tests">(Integration) Tests</h2>
+<p>So far we test the following environments on a regular basis (daily ci build)</p>
+<ul>
+<li>Apache OpenWebBeans (embedded):  Apache build server</li>
+<li>JBoss Weld (embedded): Apache build server</li>
+<li>JBoss AS7: <a href="http://www.c4j.be">c4j</a></li>
+<li>Glassfish 3.1.x: <a href="http://www.c4j.be">c4j</a></li>
+<li>Apache TomEE: Apache build server</li>
+</ul>
+<p>So far we test the following environments on a regular basis (manually)</p>
+<ul>
+<li>Weblogic Server 12c: <a href="http://www.c4j.be">c4j</a></li>
+</ul>
+<p>As soon as we have the corresponding config (and/or Arquillian Plugin)</p>
+<ul>
+<li>Apache Tomcat 7: DeltaSpike committers (manually)</li>
+<li>Jetty: DeltaSpike committers (manually)</li>
+</ul>
+<p><strong>Feel free to support us</strong> as well with new environments or with one of the environments we already check on a regular basis (to unburden/backup our existing supports).</p>
+          </div>
+      </div>
+
+      <hr>
+
+      <footer>
+        <p>Copyright © 20011-2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</p>
+        <p>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+      </footer>
+
+    </div> <!-- /container -->
+
+    <!-- Javascript
+    ================================================== -->
+    <!-- Placed at the end of the document so the pages load faster -->
+    <!--<script src="./deltaspike/resources/js/prettyfy.js"></script> -->
+    <script src="./deltaspike/resources/js/prettyprint.js"></script>
+    <script src="./deltaspike/resources/js/jquery.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-transition.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-alert.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-modal.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-dropdown.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-scrollspy.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-tab.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-tooltip.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-popover.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-button.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-collapse.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-carousel.js"></script>
+    <script src="./deltaspike/resources/js/bootstrap-typeahead.js"></script>
+
+</body>
+</html>
\ No newline at end of file