Author: buildbot Date: Mon Jan 6 14:48:38 2014 New Revision: 892998 Log: Staging update by buildbot for deltaspike
Modified: websites/staging/deltaspike/trunk/content/ (props changed) websites/staging/deltaspike/trunk/content/jsf.html Propchange: websites/staging/deltaspike/trunk/content/ ------------------------------------------------------------------------------ --- cms:source-revision (original) +++ cms:source-revision Mon Jan 6 14:48:38 2014 @@ -1 +1 @@ -1555642 +1555830 Modified: websites/staging/deltaspike/trunk/content/jsf.html ============================================================================== --- websites/staging/deltaspike/trunk/content/jsf.html (original) +++ websites/staging/deltaspike/trunk/content/jsf.html Mon Jan 6 14:48:38 2014 @@ -126,6 +126,7 @@ </li> <li><a href="#grouped-conversations">(Grouped-)Conversations</a><ul> <li><a href="#terminating-conversations">Terminating Conversations</a></li> +<li><a href="#sub-conversation-groups">Sub-Conversation-Groups</a></li> </ul> </li> <li><a href="#support-of-ear-deployments">Support of EAR deployments</a></li> @@ -989,6 +990,65 @@ If you have an use-case (e.g. a wizard) <p>Hint: DeltaSpike conversations get closed/restarted immediately instead of keeping them until the end of the request like std. conversations do, because the behaviour of std. conversations breaks a lot of use-cases. However, if you really need to keep them until the end of the request, you can close them in a <code>@PostRenderView</code> callback.</p> +<h2 id="sub-conversation-groups">Sub-Conversation-Groups</h2> +<p>Due to the parallel conversation concept of DeltaSpike there is no need of something like nested conversations. Just use them in parallel and terminate them in a fine-granular way as soon as you don't need them any longer. As described above, you can terminate a whole conversation-group. However, sometimes it's essential to have subgroups if you need to end just a part of an use-case instead of all beans related to an use-case. +A sub-group is just a class or an interface used to identify a bunch of beans within a group. To terminate such a sub-group, it's just needed to pass the class/interface to the corresponding API for terminating a conversation. The sub-group gets detected autom. and instead of terminating a whole conversation-group, the beans of the sub-group get un-scoped.</p> +<p>Example - Explicitly listing beans of a sub-group:</p> +<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyGroup</span><span class="o">{}</span> + +<span class="nd">@GroupedConversationScoped</span> +<span class="nd">@ConversationGroup</span><span class="o">(</span><span class="n">MyGroup</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">BeanA</span> <span class="o">{}</span> + +<span class="nd">@GroupedConversationScoped</span> +<span class="nd">@ConversationGroup</span><span class="o">(</span><span class="n">MyGroup</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">BeanB</span> <span class="o">{}</span> + +<span class="nd">@GroupedConversationScoped</span> +<span class="nd">@ConversationGroup</span><span class="o">(</span><span class="n">MyGroup</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">BeanC</span> <span class="o">{}</span> + +<span class="nd">@ConversationSubGroup</span><span class="o">(</span><span class="n">subGroup</span> <span class="o">=</span> <span class="o">{</span><span class="n">BeanA</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">BeanB</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">MySubGroup</span> <span class="kd">extends</span> <span class="n">MyGroup</span> <span class="o">{}</span> + +<span class="c1">//or</span> + +<span class="nd">@ConversationSubGroup</span><span class="o">(</span><span class="n">of</span> <span class="o">=</span> <span class="n">MyGroup</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">subGroup</span> <span class="o">=</span> <span class="o">{</span><span class="n">BeanA</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">BeanB</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">MySubGroup</span> <span class="o">{}</span> +</pre></div> + + +<p>Example - Terminating a sub-group:</p> +<div class="codehilite"><pre><span class="nd">@Inject</span> +<span class="kd">private</span> <span class="n">GroupedConversationManager</span> <span class="n">conversationManager</span><span class="o">;</span> + +<span class="c1">//...</span> +<span class="k">this</span><span class="o">.</span><span class="na">conversationManager</span><span class="o">.</span><span class="na">closeConversationGroup</span><span class="o">(</span><span class="n">MySubGroup</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> +</pre></div> + + +<p>As you see the class/interface of the sub-group has to extend/implement the group or you specify it via the @ConversationSubGroup#of. With @ConversationSubGroup#subGroup you can list all beans which belong to the sub-group. If you have a lot of such beans or you would like to form (sub-)use-case oriented groups, you can use implicit groups:</p> +<p>Example - Implicit sub-group:</p> +<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">Wizard</span> <span class="o">{}</span> + +<span class="nd">@ConversationSubGroup</span><span class="o">(</span><span class="n">of</span> <span class="o">=</span> <span class="n">MyGroup</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">subGroup</span> <span class="o">=</span> <span class="n">Wizard</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">ImplicitSubGroup</span> +<span class="o">{</span> +<span class="o">}</span> + +<span class="nd">@Named</span><span class="o">(</span><span class="s">"myWizard"</span><span class="o">)</span> +<span class="nd">@GroupedConversationScoped</span> +<span class="nd">@ConversationGroup</span><span class="o">(</span><span class="n">MyGroup</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">WizardController</span> <span class="kd">implements</span> <span class="n">Serializable</span><span class="o">,</span> <span class="n">Wizard</span> +<span class="o">{</span> + <span class="c1">//...</span> +<span class="o">}</span> + +<span class="k">this</span><span class="o">.</span><span class="na">conversationManager</span><span class="o">.</span><span class="na">closeConversationGroup</span><span class="o">(</span><span class="n">ImplicitSubGroup</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> +</pre></div> + + +<p>In the listing above all beans which implement the Wizard interface will be closed as soon as you close the ImplicitSubGroup.</p> <h1 id="support-of-ear-deployments">Support of EAR deployments</h1> <p>Before using features described by this page, please ensure that you are aware of <a href="https://issues.apache.org/jira/browse/DELTASPIKE-335">DELTASPIKE-335</a> and the corresponding impact.</p> <h1 id="hints">Hints</h1>