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/01/07 19:46:54 UTC
svn commit: r845361 [2/3] - in /websites/staging/deltaspike/trunk/content:
./ deltaspike/container-control.html deltaspike/core.html
deltaspike/documentation.html deltaspike/jpa.html
deltaspike/resources/css/bootstrap.css deltaspike/security.html
Modified: websites/staging/deltaspike/trunk/content/deltaspike/documentation.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/deltaspike/documentation.html (original)
+++ websites/staging/deltaspike/trunk/content/deltaspike/documentation.html Mon Jan 7 18:46:54 2013
@@ -80,53 +80,68 @@
</div>
<div class="toc">
<ul>
-<li><a href="#with-java-ee6">With Java-EE6+</a></li>
-<li><a href="#with-java-ee5-or-servlet-containers">With Java-EE5 or Servlet Containers</a></li>
-<li><a href="#project-configuration-getting-started-without-maven">Project-Configuration - Getting Started (without Maven)</a></li>
-<li><a href="#project-configuration-with-maven">Project-Configuration (with Maven)</a><ul>
-<li><a href="#configuration-of-deltaspike-core">Configuration of DeltaSpike-Core</a></li>
-<li><a href="#configuration-of-deltaspike-modules">Configuration of DeltaSpike-Modules</a><ul>
+<li><a href="#introduction">Introduction</a></li>
+<li><a href="#getting-started">Getting Started</a><ul>
+<li><a href="#project-configuration-without-maven">Project Configuration without Maven</a></li>
+<li><a href="#project-configuration-with-maven">Project Configuration with Maven</a><ul>
+<li><a href="#configuration-of-deltaspike-core">Configuration of DeltaSpike Core</a></li>
+<li><a href="#configuration-of-deltaspike-modules">Configuration of DeltaSpike Modules</a><ul>
<li><a href="#security-module">Security Module</a></li>
<li><a href="#jpa-module">JPA Module</a></li>
<li><a href="#jsf-module">JSF Module</a></li>
</ul>
</li>
+<li><a href="#with-java-se">With Java SE</a><ul>
+<li><a href="#add-the-deltaspike-container-ctrl-api">Add the DeltaSpike Container Ctrl API</a></li>
+<li><a href="#add-a-cdi-container-container-ctrl-impl">Add a CDI container + Container Ctrl Impl</a></li>
</ul>
</li>
-<li><a href="#with-java-se">With Java-SE</a><ul>
-<li><a href="#add-the-deltaspike-container-ctrl-api">Add the DeltaSpike Container-Ctrl API</a></li>
-<li><a href="#add-a-cdi-container-container-ctrl-impl">Add a CDI container + Container-Ctrl Impl</a><ul>
<li><a href="#for-apache-openwebbeans">... for Apache OpenWebBeans</a></li>
<li><a href="#for-jboss-weld-ri">... for JBoss Weld (RI)</a></li>
</ul>
</li>
-<li><a href="#start-the-cdi-container">Start the CDI container</a></li>
</ul>
</li>
+<li><a href="#deployment-mode">Deployment mode</a><ul>
+<li><a href="#with-java-ee6">With Java EE6+</a></li>
+<li><a href="#with-java-ee5-or-servlet-containers">With Java EE5 or Servlet Containers</a></li>
+<li><a href="#standard-java-se6">Standard Java SE6+</a></li>
+</ul>
+</li>
+<li><a href="#start-a-cdi-container-using-java-se">Start a CDI container using Java SE</a></li>
<li><a href="#module-overview">Module Overview</a><ul>
<li><a href="#core-required">Core (required)</a></li>
<li><a href="#security-optional">Security (optional)</a></li>
<li><a href="#jpa-optional">JPA (optional)</a></li>
<li><a href="#jsf-optional">JSF (optional)</a></li>
-<li><a href="#container-control-optional">Container-Control (optional)</a><ul>
-<li><a href="#usage">Usage</a></li>
-<li><a href="#cdicontainer">CdiContainer</a></li>
-<li><a href="#contextcontrol-usage">ContextControl usage</a></li>
-<li><a href="#attaching-a-request-context-to-a-new-thread-in-ee">Attaching a Request Context to a new thread in EE</a></li>
-</ul>
-</li>
+<li><a href="#container-control-optional">Container Control (optional)</a></li>
</ul>
</li>
</ul>
</div>
<hr />
-<h1 id="with-java-ee6">With Java-EE6+</h1>
-<p>If you are using DeltaSpike in a Java-EE6 environment, you don't need to configure a CDI implementation explicitly because it's shipped with the container.</p>
-<h1 id="with-java-ee5-or-servlet-containers">With Java-EE5 or Servlet Containers</h1>
-<p>Java-EE5 application servers as well as pure servlet containers like Apache Tomcat don't provide a CDI implementation out-of-the-box. So don't forget to setup the CDI implementation of your choice.</p>
-<h1 id="project-configuration-getting-started-without-maven">Project-Configuration - Getting Started (without Maven)</h1>
+<h1 id="introduction">Introduction</h1>
+<p>Apache DeltaSpike project has been created to support the development of portable CDI extensions that provide useful features for Java applications
+not provided out of the box by the CDI spec (Security, JPA, ...). CDI extensions created by the DeltaSpike community are packaged as modules.</p>
+<p>The goal of the project is also to provide useful classes to :</p>
+<div class="codehilite"><pre><span class="o">*</span> <span class="n">Boot</span> <span class="n">CDI</span> <span class="n">Container</span> <span class="p">(</span><span class="n">Weld</span><span class="p">,</span> <span class="n">OpenWebbeans</span><span class="p">,</span> <span class="n">OpenEJB</span><span class="p">)</span> <span class="k">for</span> <span class="n">Java</span> <span class="n">SE</span><span class="p">,</span>
+<span class="o">*</span> <span class="n">Stage</span> <span class="n">a</span> <span class="n">project</span><span class="p">,</span>
+<span class="o">*</span> <span class="n">Provide</span> <span class="k">new</span> <span class="n">scopes</span> <span class="p">(</span><span class="n">Window</span> <span class="n">Scope</span><span class="p">,</span> <span class="o">...</span><span class="p">),</span>
+<span class="o">*</span> <span class="n">Manage</span> <span class="n">messages</span> <span class="ow">and</span> <span class="n">configurations</span>
+</pre></div>
+
+
+<p>The project is currently tested on different CDI implementations like Apache OpenWebBeans and JBoss Weld, and also on different Java Web containers like Apache TomEE or JavaEE, JBoss-AS7, Oracle GlassFish 3.1+, Oracle Weblogic Server 12c.</p>
+<p>[TODO] Define what portable means like also CDI extension and refers to documentation links</p>
+<h1 id="getting-started">Getting Started</h1>
+<p>A DeltaSpike project can be designed using or not Apache Maven and consists in a collection of jar files. Depending on your needs, you will package DeltaSpike core jar (api and impl) files or extend
+the list with DeltaSpike modules. DeltaSpike Api and Impl are mandatory and provide code required to benefits of portable CDI extensions or useful features
+created.</p>
+<p>Remark : For Java SE, an additional step is required as you have to select the CDI implementation of your choice to boot a CDI container.</p>
+<p>[TODO] Add a section or remark to explain how to package & deploy DeltaSpike in an OSGI environment (Apache Felix, Apache Karaf, Apache ServiceMix)</p>
+<h2 id="project-configuration-without-maven">Project Configuration without Maven</h2>
<p>You can manually download all JARs described above from the maven repository or you get <a href="source.html">the source-code</a> and <a href="build.html">build</a> DeltaSpike manually.</p>
-<h1 id="project-configuration-with-maven">Project-Configuration (with Maven)</h1>
+<h2 id="project-configuration-with-maven">Project Configuration with Maven</h2>
<p><strong>Hint:</strong>
In the listings below replace the placeholders for the version with the version of your choice or use:</p>
<div class="codehilite"><pre><span class="nt"><properties></span>
@@ -135,7 +150,7 @@ In the listings below replace the placeh
</pre></div>
-<h2 id="configuration-of-deltaspike-core">Configuration of DeltaSpike-Core</h2>
+<h3 id="configuration-of-deltaspike-core">Configuration of DeltaSpike Core</h3>
<div class="codehilite"><pre><span class="nt"><dependency></span>
<span class="nt"><groupId></span>org.apache.deltaspike.core<span class="nt"></groupId></span>
<span class="nt"><artifactId></span>deltaspike-core-api<span class="nt"></artifactId></span>
@@ -152,8 +167,8 @@ In the listings below replace the placeh
</pre></div>
-<h2 id="configuration-of-deltaspike-modules">Configuration of DeltaSpike-Modules</h2>
-<h3 id="security-module">Security Module</h3>
+<h3 id="configuration-of-deltaspike-modules">Configuration of DeltaSpike Modules</h3>
+<h4 id="security-module">Security Module</h4>
<div class="codehilite"><pre><span class="nt"><dependency></span>
<span class="nt"><groupId></span>org.apache.deltaspike.modules<span class="nt"></groupId></span>
<span class="nt"><artifactId></span>deltaspike-security-module-api<span class="nt"></artifactId></span>
@@ -170,7 +185,7 @@ In the listings below replace the placeh
</pre></div>
-<h3 id="jpa-module">JPA Module</h3>
+<h4 id="jpa-module">JPA Module</h4>
<div class="codehilite"><pre><span class="nt"><dependency></span>
<span class="nt"><groupId></span>org.apache.deltaspike.modules<span class="nt"></groupId></span>
<span class="nt"><artifactId></span>deltaspike-jpa-module-api<span class="nt"></artifactId></span>
@@ -187,7 +202,7 @@ In the listings below replace the placeh
</pre></div>
-<h3 id="jsf-module">JSF Module</h3>
+<h4 id="jsf-module">JSF Module</h4>
<div class="codehilite"><pre><span class="nt"><dependency></span>
<span class="nt"><groupId></span>org.apache.deltaspike.modules<span class="nt"></groupId></span>
<span class="nt"><artifactId></span>deltaspike-jsf-module-api<span class="nt"></artifactId></span>
@@ -204,8 +219,10 @@ In the listings below replace the placeh
</pre></div>
-<h1 id="with-java-se">With Java-SE</h1>
-<p>Java-SE doesn't provide a CDI implementation out-of-the-box. So don't forget to add the CDI implementation of your choice.</p>
+<h3 id="with-java-se">With Java SE</h3>
+<p>To use DeltaSpike with Java SE, we must provide additional jars file corresponding to the DeltaSpike CDI Controller API
+and its implementation. The Controller uses Java Services to resolve the CDI container (<a href="http://docs.jboss.org/weld/reference/1.1.5.Final/en-US/html/">JBoss Weld</a>, <a href="http://openwebbeans.apache.org">Apache OpenWebbeans</a> (and <a href="http://openejb.apache.org">Apache OpenEJB</a>)) and
+implementation contains the code to manage the <a href="#container-control-optional">CDI container and contexts</a>.</p>
<p><strong>Hint:</strong>
In the listings below replace the placeholders for the version with the version of your choice or use:</p>
<div class="codehilite"><pre><span class="nt"><properties></span>
@@ -216,7 +233,7 @@ In the listings below replace the placeh
</pre></div>
-<h2 id="add-the-deltaspike-container-ctrl-api">Add the DeltaSpike Container-Ctrl API</h2>
+<h4 id="add-the-deltaspike-container-ctrl-api">Add the DeltaSpike Container Ctrl API</h4>
<div class="codehilite"><pre><span class="nt"><dependency></span>
<span class="nt"><groupId></span>org.apache.deltaspike.cdictrl<span class="nt"></groupId></span>
<span class="nt"><artifactId></span>deltaspike-cdictrl-api<span class="nt"></artifactId></span>
@@ -226,7 +243,7 @@ In the listings below replace the placeh
</pre></div>
-<h2 id="add-a-cdi-container-container-ctrl-impl">Add a CDI container + Container-Ctrl Impl</h2>
+<h4 id="add-a-cdi-container-container-ctrl-impl">Add a CDI container + Container Ctrl Impl</h4>
<h3 id="for-apache-openwebbeans">... for Apache OpenWebBeans</h3>
<div class="codehilite"><pre><span class="nt"><dependency></span>
<span class="nt"><groupId></span>org.apache.openwebbeans<span class="nt"></groupId></span>
@@ -268,14 +285,25 @@ In the listings below replace the placeh
</pre></div>
-<h2 id="start-the-cdi-container">Start the CDI container</h2>
-<p>DeltaSpike allows you to control a CDI container via a generic API and special support modules for
-<a href="http://docs.jboss.org/weld/reference/1.1.5.Final/en-US/html/">JBoss Weld</a>, <a href="http://openwebbeans.apache.org">Apache OpenWebbeans</a> (and <a href="http://openejb.apache.org">Apache OpenEJB</a>).</p>
-<p>To bootstrap a CDI container in your Java application, you just need to instantiate the <code>CdiContainer</code> and call the <code>#boot</code> method.</p>
+<h1 id="deployment-mode">Deployment mode</h1>
+<p>DeltaSpike can be deployed in different Java environments. Depending which Java container and release you are using, the procedure which is different
+is explained here after.</p>
+<h2 id="with-java-ee6">With Java EE6+</h2>
+<p>If you are using DeltaSpike in a Java EE6 environment, you don't need to configure a CDI implementation explicitly because it's shipped with the container.</p>
+<h2 id="with-java-ee5-or-servlet-containers">With Java EE5 or Servlet Containers</h2>
+<p>Java EE5 application servers as well as pure servlet containers like Apache Tomcat / Eclipse Jetty don't provide a CDI implementation out-of-the-box.
+So don't forget to setup the CDI implementation of your choice.</p>
+<h2 id="standard-java-se6">Standard Java SE6+</h2>
+<p>If you are only using a JDK and runs Java in a standalone or standard mode (Java SE), then DeltaSpike will allow you to boot a CDI implementation where you can use Dependency Injection with
+a Bean Manager. Such an example will be presented at the next section.</p>
+<h1 id="start-a-cdi-container-using-java-se">Start a CDI container using Java SE</h1>
+<p>This code snippet show you how with a Java MainApplication a CDI container can be started (= boot) by DeltaSpike using Java SE and how you
+ define a CDI scope and resolve beans injected.</p>
+<p><strong>Hint</strong>: To bootstrap a CDI container in your Java application, you just need to instantiate the <code>CdiContainer</code> and call the <code>#boot</code> method.</p>
<div class="codehilite"><pre><span class="kn">import</span> <span class="nn">org.apache.deltaspike.cdise.api.CdiContainer</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.apache.deltaspike.cdise.api.CdiContainerLoader</span><span class="o">;</span>
-<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SimpleApp</span> <span class="o">{</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">MainApp</span> <span class="o">{</span>
<span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
<span class="n">CdiContainer</span> <span class="n">CdiContainer</span> <span class="o">=</span> <span class="n">CdiContainerLoader</span><span class="o">.</span><span class="na">getCdiContainer</span><span class="o">();</span>
@@ -297,7 +325,7 @@ In the listings below replace the placeh
<span class="kn">import</span> <span class="nn">org.apache.deltaspike.cdise.api.ContextControl</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">javax.enterprise.context.ApplicationScoped</span><span class="o">;</span>
-<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SimpleApp</span> <span class="o">{</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">MainApp</span> <span class="o">{</span>
<span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
<span class="n">CdiContainer</span> <span class="n">CdiContainer</span> <span class="o">=</span> <span class="n">CdiContainerLoader</span><span class="o">.</span><span class="na">getCdiContainer</span><span class="o">();</span>
@@ -324,73 +352,38 @@ The resolved bean is a normal CDI bean w
<p>Before the application exits, you have to call <code>#shutdown</code> to destroy beans,... in a well-ordered fashion.</p>
<h1 id="module-overview">Module Overview</h1>
+<p>The core features of DeltaSpike project are packaged under the following different modules. Some of them are mandatory while others are optional</p>
<h2 id="core-required">Core (required)</h2>
+<p>Definition : Contain the API and util classes of DeltaSpike project</p>
+<p>Features :</p>
+<ul>
+<li>BeanProvider & Manager</li>
+<li>ProjectStage</li>
+<li>Config & Property</li>
+<li>Messages & I18n</li>
+<li>Exception Handling & Control</li>
+</ul>
<p><a class="btn" href="core.html">View details »</a></p>
<h2 id="security-optional">Security (optional)</h2>
+<p>Definition : Intercept and check security</p>
+<p>Features :</p>
+<p>*</p>
<p><a class="btn" href="security.html">View details »</a></p>
<h2 id="jpa-optional">JPA (optional)</h2>
+<p>Definition :</p>
+<p>Features :</p>
+<p>*</p>
<p><a class="btn" href="jpa.html">View details »</a></p>
<h2 id="jsf-optional">JSF (optional)</h2>
+<p>Definition :</p>
+<p>Features :</p>
+<p>*</p>
<p><a class="btn" href="jsf.html">View details »</a></p>
-<h2 id="container-control-optional">Container-Control (optional)</h2>
-<h3 id="usage">Usage</h3>
-<p>There are basically two parts:</p>
-<ul>
-<li>The <strong>CdiContainer</strong> interface allows to boot and shutdown the CDI container in SE applications.</li>
-<li>The <strong>ContextControl</strong> interface allows to control the life-cycle of the built-in contexts of the CDI container.</li>
-</ul>
-<h3 id="cdicontainer">CdiContainer</h3>
-<p>See the Java-SE part <a href="#start-the-cdi-container">above</a>.</p>
-<h3 id="contextcontrol-usage">ContextControl usage</h3>
-<p>The <code>ContextControl</code> interface allows you to start and stop built-in standard Contexts like <code>@RequestScoped</code>, <code>@ConversationScoped</code>, <code>@SessionScoped</code>, etc. It is provided as <code>@Dependent</code> bean and can get injected in the classic CDI way. This is not only usable in Java SE projects but also very helpful in Servlets and Java EE containers.</p>
-<p><strong>Restarting the RequestContext in unit tests</strong></p>
-<p>In unit testing it can be necessary to test with attached and also with detached JPA entities. A very common approach for JPA is the <a href="http://docs.redhat.com/docs/en-US/JBoss_Enterprise_Web_Server/1.0/html/Hibernate_Entity_Manager_Reference_Guide/transactions.html">entitymanager-per-request approach</a> and thus have a producer method which creates a @RequestScoped EntityManager. Since a single unit test is usually treated as one ârequestâ a problem arises detaching entities.</p>
-<p>Using ContextControl to detach entities:</p>
-<div class="codehilite"><pre><span class="nv">@Test</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">testMyBusinessLogic</span><span class="p">()</span>
-<span class="p">{</span>
- <span class="n">doSomeJpaStuff</span><span class="p">()</span>
- <span class="n">MyEntity</span> <span class="n">me</span> <span class="o">=</span> <span class="n">em</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="o">...</span><span class="p">);</span>
-
- <span class="n">ContextControl</span> <span class="n">ctxCtrl</span> <span class="o">=</span> <span class="n">BeanProvider</span><span class="o">.</span><span class="n">getContextualReference</span><span class="p">(</span><span class="n">ContextControl</span><span class="o">.</span><span class="n">class</span><span class="p">);</span>
-
- <span class="sr">//s</span><span class="n">topping</span> <span class="n">the</span> <span class="n">request</span> <span class="n">context</span> <span class="n">will</span> <span class="n">dispose</span> <span class="n">the</span> <span class="nv">@RequestScoped</span> <span class="n">EntityManager</span>
- <span class="n">ctxCtrl</span><span class="o">.</span><span class="n">stopContext</span><span class="p">(</span><span class="n">RequestScoped</span><span class="o">.</span><span class="n">class</span><span class="p">);</span>
-
- <span class="sr">//</span> <span class="ow">and</span> <span class="n">now</span> <span class="n">immediately</span> <span class="n">restart</span> <span class="n">the</span> <span class="n">context</span> <span class="n">again</span>
- <span class="n">ctxCtrl</span><span class="o">.</span><span class="n">startContext</span><span class="p">(</span><span class="n">RequestScoped</span><span class="o">.</span><span class="n">class</span><span class="p">);</span>
-
- <span class="sr">//</span> <span class="n">the</span> <span class="n">entity</span> <span class="s">'em'</span> <span class="n">is</span> <span class="n">now</span> <span class="n">in</span> <span class="n">a</span> <span class="n">detached</span> <span class="n">state</span><span class="o">!</span>
- <span class="n">doSomeStuffWithTheDetachedEntity</span><span class="p">(</span><span class="n">em</span><span class="p">);</span>
-<span class="p">}</span>
-</pre></div>
-
-
-<h3 id="attaching-a-request-context-to-a-new-thread-in-ee">Attaching a Request Context to a new thread in EE</h3>
-<p>Accessing the <code>@RequestScoped</code> bean in a new thread will result in a <code>ContextNotActiveException</code>. The request-context usually gets started for a particular thread via a simple <code>ServletRequestListener</code>. So "no servlet-request" means that there is no Servlet-Context for the current (/new) Thread.
-You might face such issues, if you would like to reuse business services in e.g. a Quartz Job. </p>
-<p>Controlling the request-context for a Quartz-Job:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">CdiJob</span> <span class="n">implements</span> <span class="n">org</span><span class="o">.</span><span class="n">quartz</span><span class="o">.</span><span class="n">Job</span>
-<span class="p">{</span>
- <span class="n">public</span> <span class="n">void</span> <span class="n">execute</span><span class="p">(</span><span class="n">JobExecutionContext</span> <span class="n">context</span><span class="p">)</span> <span class="n">throws</span> <span class="n">JobExecutionException</span>
- <span class="p">{</span>
- <span class="n">ContextControl</span> <span class="n">ctxCtrl</span> <span class="o">=</span> <span class="n">BeanProvider</span><span class="o">.</span><span class="n">getContextualReference</span><span class="p">(</span><span class="n">ContextControl</span><span class="o">.</span><span class="n">class</span><span class="p">);</span>
-
- <span class="sr">//</span><span class="n">this</span> <span class="n">will</span> <span class="n">implicitly</span> <span class="nb">bind</span> <span class="n">a</span> <span class="k">new</span> <span class="n">RequestContext</span> <span class="n">to</span> <span class="n">the</span> <span class="n">current</span> <span class="n">thread</span>
- <span class="n">ctxCtrl</span><span class="o">.</span><span class="n">startContext</span><span class="p">(</span><span class="n">RequestScoped</span><span class="o">.</span><span class="n">class</span><span class="p">);</span>
-
- <span class="n">try</span>
- <span class="p">{</span>
- <span class="n">doYourWork</span><span class="p">();</span>
- <span class="p">}</span>
- <span class="n">finally</span>
- <span class="p">{</span>
- <span class="sr">//s</span><span class="n">top</span> <span class="n">the</span> <span class="n">RequestContext</span> <span class="n">to</span> <span class="n">ensure</span> <span class="n">that</span> <span class="n">all</span> <span class="n">request</span><span class="o">-</span><span class="n">scoped</span> <span class="n">beans</span> <span class="n">get</span> <span class="n">cleaned</span> <span class="n">up</span><span class="o">.</span>
- <span class="n">ctxCtrl</span><span class="o">.</span><span class="n">stopContext</span><span class="p">(</span><span class="n">RequestScoped</span><span class="o">.</span><span class="n">class</span><span class="p">);</span>
- <span class="p">}</span>
- <span class="p">}</span>
-<span class="p">}</span>
-</pre></div>
+<h2 id="container-control-optional">Container Control (optional)</h2>
+<p>Definition :</p>
+<p>Features :</p>
+<p>*</p>
+<p><a class="btn" href="container-control.html">View details »</a></p>
</div>
</div>
Modified: websites/staging/deltaspike/trunk/content/deltaspike/jpa.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/deltaspike/jpa.html (original)
+++ websites/staging/deltaspike/trunk/content/deltaspike/jpa.html Mon Jan 7 18:46:54 2013
@@ -78,86 +78,93 @@
<div class="page-title">
<h1>JPA Module</h1>
</div>
- <h1 id="transactional">@Transactional</h1>
+ <div class="toc">
+<ul>
+<li><a href="#transactional">@Transactional</a></li>
+<li><a href="#transactionscoped">@TransactionScoped</a></li>
+</ul>
+</div>
+<hr />
+<h1 id="transactional">@Transactional</h1>
<p>This annotation is an alternative to transactional EJBs which allows to execute a method within a transaction.
Before it's possible to start using the annotation, it's required to implement a CDI producer for an <code>EntityManager</code> and it's needed to inject the <code>EntityManager</code> in the bean which uses <code>@Transactional</code>. As shown later on it's also possible to use multiple qualifiers for using different <code>EntityManager</code>s.</p>
<p>The following example shows a simple producer for an <code>EntityManager</code> and the corresponding dispose-method.
Producing it as request scoped bean means that the dispose method will be called on finishing the request.
As an alternative it's possible to use a special scope called <code>@TransactionScoped</code> provided by the same DeltaSpike module.</p>
<p>Producer for the default EntityManager:</p>
-<div class="codehilite"><pre><span class="sr">//</span><span class="o">...</span>
-<span class="n">public</span> <span class="n">class</span> <span class="n">EntityManagerProducer</span>
-<span class="p">{</span>
- <span class="sr">//o</span><span class="n">r</span> <span class="n">manual</span> <span class="n">bootstrapping</span>
- <span class="nv">@PersistenceContext</span>
- <span class="n">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="p">;</span>
-
- <span class="nv">@Produces</span>
- <span class="nv">@RequestScoped</span>
- <span class="n">protected</span> <span class="n">EntityManager</span> <span class="n">createEntityManager</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">entityManager</span><span class="p">;</span>
- <span class="p">}</span>
-
- <span class="n">protected</span> <span class="n">void</span> <span class="n">closeEntityManager</span><span class="p">(</span><span class="nv">@Disposes</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="p">)</span>
- <span class="p">{</span>
- <span class="k">if</span> <span class="p">(</span><span class="n">entityManager</span><span class="o">.</span><span class="n">isOpen</span><span class="p">())</span>
- <span class="p">{</span>
- <span class="n">entityManager</span><span class="o">.</span><span class="nb">close</span><span class="p">();</span>
- <span class="p">}</span>
- <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="c1">//...</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">EntityManagerProducer</span>
+<span class="o">{</span>
+ <span class="c1">//or manual bootstrapping</span>
+ <span class="nd">@PersistenceContext</span>
+ <span class="kd">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="o">;</span>
+
+ <span class="nd">@Produces</span>
+ <span class="nd">@RequestScoped</span>
+ <span class="kd">protected</span> <span class="n">EntityManager</span> <span class="nf">createEntityManager</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="na">entityManager</span><span class="o">;</span>
+ <span class="o">}</span>
+
+ <span class="kd">protected</span> <span class="kt">void</span> <span class="nf">closeEntityManager</span><span class="o">(</span><span class="nd">@Disposes</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="o">)</span>
+ <span class="o">{</span>
+ <span class="k">if</span> <span class="o">(</span><span class="n">entityManager</span><span class="o">.</span><span class="na">isOpen</span><span class="o">())</span>
+ <span class="o">{</span>
+ <span class="n">entityManager</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
+ <span class="o">}</span>
+ <span class="o">}</span>
+<span class="o">}</span>
</pre></div>
<p>The following examples show how to use the <code>EntityManager</code> produced by the example above.</p>
<p>Beans with transactional method:</p>
-<div class="codehilite"><pre><span class="sr">//</span><span class="o">...</span>
-<span class="n">public</span> <span class="n">class</span> <span class="n">TransactionalBean</span>
-<span class="p">{</span>
- <span class="nv">@Inject</span>
- <span class="n">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="p">;</span>
-
- <span class="nv">@Transactional</span>
- <span class="n">public</span> <span class="n">void</span> <span class="n">executeInTransaction</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="sr">//</span><span class="o">...</span>
- <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="c1">//...</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">TransactionalBean</span>
+<span class="o">{</span>
+ <span class="nd">@Inject</span>
+ <span class="kd">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="o">;</span>
+
+ <span class="nd">@Transactional</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span class="nf">executeInTransaction</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="c1">//...</span>
+ <span class="o">}</span>
+<span class="o">}</span>
</pre></div>
<p>Simple transactional bean (all methods transactional):</p>
-<div class="codehilite"><pre><span class="sr">//</span><span class="o">...</span>
-<span class="nv">@Transactional</span>
-<span class="n">public</span> <span class="n">class</span> <span class="n">TransactionalBean</span>
-<span class="p">{</span>
- <span class="nv">@Inject</span>
- <span class="n">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="p">;</span>
+<div class="codehilite"><pre><span class="c1">//...</span>
+<span class="nd">@Transactional</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">TransactionalBean</span>
+<span class="o">{</span>
+ <span class="nd">@Inject</span>
+ <span class="kd">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="o">;</span>
- <span class="sr">//</span><span class="o">...</span>
-<span class="p">}</span>
+ <span class="c1">//...</span>
+<span class="o">}</span>
</pre></div>
<p>As illustrated in the following example it's also possible to use <code>@Transactional</code> for stereotypes.</p>
<p>Stereotype for transactional beans (+ usage):</p>
-<div class="codehilite"><pre><span class="nv">@Stereotype</span>
-<span class="nv">@Transactional</span>
-<span class="nv">@ApplicationScoped</span>
-<span class="n">public</span> <span class="nv">@interface</span> <span class="n">Repository</span>
-<span class="p">{</span>
-<span class="p">}</span>
-
-<span class="sr">//</span><span class="o">...</span>
-<span class="nv">@Repository</span>
-<span class="n">public</span> <span class="n">class</span> <span class="n">TransactionalBean</span>
-<span class="p">{</span>
- <span class="nv">@Inject</span>
- <span class="n">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="p">;</span>
+<div class="codehilite"><pre><span class="nd">@Stereotype</span>
+<span class="nd">@Transactional</span>
+<span class="nd">@ApplicationScoped</span>
+<span class="kd">public</span> <span class="nd">@interface</span> <span class="n">Repository</span>
+<span class="o">{</span>
+<span class="o">}</span>
+
+<span class="c1">//...</span>
+<span class="nd">@Repository</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">TransactionalBean</span>
+<span class="o">{</span>
+ <span class="nd">@Inject</span>
+ <span class="kd">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="o">;</span>
- <span class="sr">//</span><span class="o">...</span>
-<span class="p">}</span>
+ <span class="c1">//...</span>
+<span class="o">}</span>
</pre></div>
@@ -165,146 +172,146 @@ As an alternative it's possible to use a
The default qualifier for <code>@Transactional</code> is <code>@Any</code>. Therefore a transaction for every injected entity manager will be started.
The example afterwards shows how to change this default behaviour.</p>
<p>Producer for multiple entity managers (+ usage):</p>
-<div class="codehilite"><pre><span class="sr">//</span><span class="o">...</span>
-<span class="n">public</span> <span class="n">class</span> <span class="n">EntityManagerProducer</span>
-<span class="p">{</span>
- <span class="nv">@PersistenceContext</span><span class="p">(</span><span class="n">unitName</span> <span class="o">=</span> <span class="s">"firstDB"</span><span class="p">)</span>
- <span class="n">private</span> <span class="n">EntityManager</span> <span class="n">firstEntityManager</span><span class="p">;</span>
-
- <span class="nv">@PersistenceContext</span><span class="p">(</span><span class="n">unitName</span> <span class="o">=</span> <span class="s">"secondDB"</span><span class="p">)</span>
- <span class="n">private</span> <span class="n">EntityManager</span> <span class="n">secondEntityManager</span><span class="p">;</span>
-
- <span class="nv">@Produces</span>
- <span class="nv">@First</span>
- <span class="nv">@RequestScoped</span>
- <span class="n">protected</span> <span class="n">EntityManager</span> <span class="n">createFirstEntityManager</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">firstEntityManager</span><span class="p">;</span>
- <span class="p">}</span>
-
- <span class="n">protected</span> <span class="n">void</span> <span class="n">closeFirstEntityManager</span><span class="p">(</span><span class="nv">@Disposes</span> <span class="nv">@First</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="p">)</span>
- <span class="p">{</span>
- <span class="k">if</span> <span class="p">(</span><span class="n">entityManager</span><span class="o">.</span><span class="n">isOpen</span><span class="p">())</span>
- <span class="p">{</span>
- <span class="n">entityManager</span><span class="o">.</span><span class="nb">close</span><span class="p">();</span>
- <span class="p">}</span>
- <span class="p">}</span>
-
- <span class="nv">@Produces</span>
- <span class="nv">@Second</span>
- <span class="nv">@RequestScoped</span>
- <span class="n">protected</span> <span class="n">EntityManager</span> <span class="n">createSecondEntityManager</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">secondEntityManager</span><span class="p">;</span>
- <span class="p">}</span>
-
- <span class="n">protected</span> <span class="n">void</span> <span class="n">closeSecondEntityManager</span><span class="p">(</span><span class="nv">@Disposes</span> <span class="nv">@Second</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="p">)</span>
- <span class="p">{</span>
- <span class="k">if</span> <span class="p">(</span><span class="n">entityManager</span><span class="o">.</span><span class="n">isOpen</span><span class="p">())</span>
- <span class="p">{</span>
- <span class="n">entityManager</span><span class="o">.</span><span class="nb">close</span><span class="p">();</span>
- <span class="p">}</span>
- <span class="p">}</span>
-<span class="p">}</span>
-
-<span class="sr">//</span><span class="o">...</span>
-<span class="n">public</span> <span class="n">class</span> <span class="n">FirstLevelTransactionBean</span>
-<span class="p">{</span>
- <span class="nv">@Inject</span>
- <span class="n">private</span> <span class="nv">@First</span> <span class="n">EntityManager</span> <span class="n">firstEntityManager</span><span class="p">;</span>
-
- <span class="nv">@Inject</span>
- <span class="n">private</span> <span class="n">NestedTransactionBean</span> <span class="n">nestedTransactionBean</span><span class="p">;</span>
-
- <span class="nv">@Transactional</span>
- <span class="n">public</span> <span class="n">void</span> <span class="n">executeInTransaction</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="sr">//</span><span class="o">...</span>
- <span class="n">this</span><span class="o">.</span><span class="n">nestedTransactionBean</span><span class="o">.</span><span class="n">executeInTransaction</span><span class="p">();</span>
- <span class="p">}</span>
-<span class="p">}</span>
-
-<span class="sr">//</span><span class="o">...</span>
-<span class="n">public</span> <span class="n">class</span> <span class="n">NestedTransactionBean</span>
-<span class="p">{</span>
- <span class="nv">@Inject</span>
- <span class="n">private</span> <span class="nv">@Second</span> <span class="n">EntityManager</span> <span class="n">secondEntityManager</span><span class="p">;</span>
-
- <span class="nv">@Transactional</span>
- <span class="n">public</span> <span class="n">void</span> <span class="n">executeInTransaction</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="sr">//</span><span class="o">...</span>
- <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="c1">//...</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">EntityManagerProducer</span>
+<span class="o">{</span>
+ <span class="nd">@PersistenceContext</span><span class="o">(</span><span class="n">unitName</span> <span class="o">=</span> <span class="s">"firstDB"</span><span class="o">)</span>
+ <span class="kd">private</span> <span class="n">EntityManager</span> <span class="n">firstEntityManager</span><span class="o">;</span>
+
+ <span class="nd">@PersistenceContext</span><span class="o">(</span><span class="n">unitName</span> <span class="o">=</span> <span class="s">"secondDB"</span><span class="o">)</span>
+ <span class="kd">private</span> <span class="n">EntityManager</span> <span class="n">secondEntityManager</span><span class="o">;</span>
+
+ <span class="nd">@Produces</span>
+ <span class="nd">@First</span>
+ <span class="nd">@RequestScoped</span>
+ <span class="kd">protected</span> <span class="n">EntityManager</span> <span class="nf">createFirstEntityManager</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="na">firstEntityManager</span><span class="o">;</span>
+ <span class="o">}</span>
+
+ <span class="kd">protected</span> <span class="kt">void</span> <span class="nf">closeFirstEntityManager</span><span class="o">(</span><span class="nd">@Disposes</span> <span class="nd">@First</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="o">)</span>
+ <span class="o">{</span>
+ <span class="k">if</span> <span class="o">(</span><span class="n">entityManager</span><span class="o">.</span><span class="na">isOpen</span><span class="o">())</span>
+ <span class="o">{</span>
+ <span class="n">entityManager</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
+ <span class="o">}</span>
+ <span class="o">}</span>
+
+ <span class="nd">@Produces</span>
+ <span class="nd">@Second</span>
+ <span class="nd">@RequestScoped</span>
+ <span class="kd">protected</span> <span class="n">EntityManager</span> <span class="nf">createSecondEntityManager</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="na">secondEntityManager</span><span class="o">;</span>
+ <span class="o">}</span>
+
+ <span class="kd">protected</span> <span class="kt">void</span> <span class="nf">closeSecondEntityManager</span><span class="o">(</span><span class="nd">@Disposes</span> <span class="nd">@Second</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="o">)</span>
+ <span class="o">{</span>
+ <span class="k">if</span> <span class="o">(</span><span class="n">entityManager</span><span class="o">.</span><span class="na">isOpen</span><span class="o">())</span>
+ <span class="o">{</span>
+ <span class="n">entityManager</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
+ <span class="o">}</span>
+ <span class="o">}</span>
+<span class="o">}</span>
+
+<span class="c1">//...</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">FirstLevelTransactionBean</span>
+<span class="o">{</span>
+ <span class="nd">@Inject</span>
+ <span class="kd">private</span> <span class="nd">@First</span> <span class="n">EntityManager</span> <span class="n">firstEntityManager</span><span class="o">;</span>
+
+ <span class="nd">@Inject</span>
+ <span class="kd">private</span> <span class="n">NestedTransactionBean</span> <span class="n">nestedTransactionBean</span><span class="o">;</span>
+
+ <span class="nd">@Transactional</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span class="nf">executeInTransaction</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="c1">//...</span>
+ <span class="k">this</span><span class="o">.</span><span class="na">nestedTransactionBean</span><span class="o">.</span><span class="na">executeInTransaction</span><span class="o">();</span>
+ <span class="o">}</span>
+<span class="o">}</span>
+
+<span class="c1">//...</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">NestedTransactionBean</span>
+<span class="o">{</span>
+ <span class="nd">@Inject</span>
+ <span class="kd">private</span> <span class="nd">@Second</span> <span class="n">EntityManager</span> <span class="n">secondEntityManager</span><span class="o">;</span>
+
+ <span class="nd">@Transactional</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span class="nf">executeInTransaction</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="c1">//...</span>
+ <span class="o">}</span>
+<span class="o">}</span>
</pre></div>
<p>The following example shows how to use only the specified <code>EntityManager</code>/s</p>
<p>Activating entity managers manually:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">MultiTransactionBean</span>
-<span class="p">{</span>
- <span class="nv">@Inject</span>
- <span class="n">private</span> <span class="n">EntityManager</span> <span class="n">defaultEntityManager</span><span class="p">;</span>
-
- <span class="nv">@Inject</span>
- <span class="n">private</span> <span class="nv">@First</span> <span class="n">EntityManager</span> <span class="n">firstEntityManager</span><span class="p">;</span>
-
- <span class="nv">@Inject</span>
- <span class="n">private</span> <span class="nv">@Second</span> <span class="n">EntityManager</span> <span class="n">secondEntityManager</span><span class="p">;</span>
-
- <span class="nv">@Transactional</span><span class="p">(</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">Default</span><span class="o">.</span><span class="n">class</span><span class="p">)</span>
- <span class="n">public</span> <span class="n">void</span> <span class="n">executeInDefaultTransaction</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="p">}</span>
-
- <span class="nv">@Transactional</span><span class="p">(</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">First</span><span class="o">.</span><span class="n">class</span><span class="p">)</span>
- <span class="n">public</span> <span class="n">void</span> <span class="n">executeInFirstTransaction</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="p">}</span>
-
- <span class="nv">@Transactional</span><span class="p">(</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">Second</span><span class="o">.</span><span class="n">class</span><span class="p">)</span>
- <span class="n">public</span> <span class="n">void</span> <span class="n">executeInSecondTransaction</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="p">}</span>
-
- <span class="nv">@Transactional</span><span class="p">(</span><span class="n">qualifier</span> <span class="o">=</span> <span class="p">{</span><span class="n">First</span><span class="o">.</span><span class="n">class</span><span class="p">,</span> <span class="n">Second</span><span class="o">.</span><span class="n">class</span><span class="p">})</span>
- <span class="n">public</span> <span class="n">void</span> <span class="n">executeInFirstAndSecondTransaction</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MultiTransactionBean</span>
+<span class="o">{</span>
+ <span class="nd">@Inject</span>
+ <span class="kd">private</span> <span class="n">EntityManager</span> <span class="n">defaultEntityManager</span><span class="o">;</span>
+
+ <span class="nd">@Inject</span>
+ <span class="kd">private</span> <span class="nd">@First</span> <span class="n">EntityManager</span> <span class="n">firstEntityManager</span><span class="o">;</span>
+
+ <span class="nd">@Inject</span>
+ <span class="kd">private</span> <span class="nd">@Second</span> <span class="n">EntityManager</span> <span class="n">secondEntityManager</span><span class="o">;</span>
+
+ <span class="nd">@Transactional</span><span class="o">(</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">Default</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span class="nf">executeInDefaultTransaction</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="o">}</span>
+
+ <span class="nd">@Transactional</span><span class="o">(</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">First</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span class="nf">executeInFirstTransaction</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="o">}</span>
+
+ <span class="nd">@Transactional</span><span class="o">(</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">Second</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span class="nf">executeInSecondTransaction</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="o">}</span>
+
+ <span class="nd">@Transactional</span><span class="o">(</span><span class="n">qualifier</span> <span class="o">=</span> <span class="o">{</span><span class="n">First</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">Second</span><span class="o">.</span><span class="na">class</span><span class="o">})</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span class="nf">executeInFirstAndSecondTransaction</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="o">}</span>
+<span class="o">}</span>
</pre></div>
<p>All examples also work with nested calls. In the following example the transaction handling is done on the entry point (after FirstLevelTransactionBean#executeInTransaction).</p>
<p>Joining existing transaction in nested call:</p>
-<div class="codehilite"><pre><span class="sr">//</span><span class="o">...</span>
-<span class="n">public</span> <span class="n">class</span> <span class="n">FirstLevelTransactionBean</span>
-<span class="p">{</span>
- <span class="nv">@Inject</span>
- <span class="n">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="p">;</span>
-
- <span class="nv">@Inject</span>
- <span class="n">private</span> <span class="n">NestedTransactionBean</span> <span class="n">nestedTransactionBean</span><span class="p">;</span>
-
- <span class="nv">@Transactional</span>
- <span class="n">public</span> <span class="n">void</span> <span class="n">executeInTransaction</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="n">this</span><span class="o">.</span><span class="n">nestedTransactionBean</span><span class="o">.</span><span class="n">executeInTransaction</span><span class="p">();</span>
- <span class="p">}</span>
-<span class="p">}</span>
-
-<span class="sr">//</span><span class="o">...</span>
-<span class="n">public</span> <span class="n">class</span> <span class="n">NestedTransactionBean</span>
-<span class="p">{</span>
- <span class="nv">@Inject</span>
- <span class="n">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="p">;</span>
-
- <span class="nv">@Transactional</span>
- <span class="n">public</span> <span class="n">void</span> <span class="n">executeInTransaction</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="sr">//</span><span class="o">...</span>
- <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="c1">//...</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">FirstLevelTransactionBean</span>
+<span class="o">{</span>
+ <span class="nd">@Inject</span>
+ <span class="kd">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="o">;</span>
+
+ <span class="nd">@Inject</span>
+ <span class="kd">private</span> <span class="n">NestedTransactionBean</span> <span class="n">nestedTransactionBean</span><span class="o">;</span>
+
+ <span class="nd">@Transactional</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span class="nf">executeInTransaction</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="k">this</span><span class="o">.</span><span class="na">nestedTransactionBean</span><span class="o">.</span><span class="na">executeInTransaction</span><span class="o">();</span>
+ <span class="o">}</span>
+<span class="o">}</span>
+
+<span class="c1">//...</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">NestedTransactionBean</span>
+<span class="o">{</span>
+ <span class="nd">@Inject</span>
+ <span class="kd">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="o">;</span>
+
+ <span class="nd">@Transactional</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span class="nf">executeInTransaction</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="c1">//...</span>
+ <span class="o">}</span>
+<span class="o">}</span>
</pre></div>
@@ -313,28 +320,28 @@ So it's possible to catch an exception i
<h1 id="transactionscoped">@TransactionScoped</h1>
<p><code>@Transactional</code> also starts a context which is available as long as the transaction started by <code>@Transactional</code>. Besides other beans you can use this scope for the <code>EntityManager</code> itself. That means the <code>EntityManager</code> will be closed after leaving the method annotated with <code>@Transactional</code>.</p>
<p>Producer for the default EntityManager which should be used only for one transaction:</p>
-<div class="codehilite"><pre><span class="sr">//</span><span class="o">...</span>
-<span class="n">public</span> <span class="n">class</span> <span class="n">EntityManagerProducer</span>
-<span class="p">{</span>
- <span class="sr">//o</span><span class="n">r</span> <span class="n">manual</span> <span class="n">bootstrapping</span>
- <span class="nv">@PersistenceContext</span>
- <span class="n">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="p">;</span>
-
- <span class="nv">@Produces</span>
- <span class="nv">@TransactionScoped</span>
- <span class="n">protected</span> <span class="n">EntityManager</span> <span class="n">createEntityManager</span><span class="p">()</span>
- <span class="p">{</span>
- <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">entityManager</span><span class="p">;</span>
- <span class="p">}</span>
-
- <span class="n">protected</span> <span class="n">void</span> <span class="n">closeEntityManager</span><span class="p">(</span><span class="nv">@Disposes</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="p">)</span>
- <span class="p">{</span>
- <span class="k">if</span> <span class="p">(</span><span class="n">entityManager</span><span class="o">.</span><span class="n">isOpen</span><span class="p">())</span>
- <span class="p">{</span>
- <span class="n">entityManager</span><span class="o">.</span><span class="nb">close</span><span class="p">();</span>
- <span class="p">}</span>
- <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="c1">//...</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">EntityManagerProducer</span>
+<span class="o">{</span>
+ <span class="c1">//or manual bootstrapping</span>
+ <span class="nd">@PersistenceContext</span>
+ <span class="kd">private</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="o">;</span>
+
+ <span class="nd">@Produces</span>
+ <span class="nd">@TransactionScoped</span>
+ <span class="kd">protected</span> <span class="n">EntityManager</span> <span class="nf">createEntityManager</span><span class="o">()</span>
+ <span class="o">{</span>
+ <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="na">entityManager</span><span class="o">;</span>
+ <span class="o">}</span>
+
+ <span class="kd">protected</span> <span class="kt">void</span> <span class="nf">closeEntityManager</span><span class="o">(</span><span class="nd">@Disposes</span> <span class="n">EntityManager</span> <span class="n">entityManager</span><span class="o">)</span>
+ <span class="o">{</span>
+ <span class="k">if</span> <span class="o">(</span><span class="n">entityManager</span><span class="o">.</span><span class="na">isOpen</span><span class="o">())</span>
+ <span class="o">{</span>
+ <span class="n">entityManager</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
+ <span class="o">}</span>
+ <span class="o">}</span>
+<span class="o">}</span>
</pre></div>
</div>
</div>
Modified: websites/staging/deltaspike/trunk/content/deltaspike/resources/css/bootstrap.css
==============================================================================
--- websites/staging/deltaspike/trunk/content/deltaspike/resources/css/bootstrap.css (original)
+++ websites/staging/deltaspike/trunk/content/deltaspike/resources/css/bootstrap.css Mon Jan 7 18:46:54 2013
@@ -162,7 +162,8 @@ textarea {
body {
margin: 0;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 13px;
+ /* font-size: 13px; */
+ font-size: 15px;
line-height: 18px;
color: rgb(51, 51, 51);
background-color: #ffffff;
@@ -426,6 +427,7 @@ a:hover {
p {
margin: 0 0 9px;
+ /*padding-left: 25px; */
}
p small {
@@ -477,6 +479,7 @@ h2 {
font-size: 24px;
/* line-height: 36px; */
line-height: 48px;
+ /*text-indent: 20px; */
}
h2 small {
@@ -486,6 +489,7 @@ h2 small {
h3 {
font-size: 18px;
line-height: 27px;
+ /* text-indent: 40px; */
}
h3 small {
@@ -700,23 +704,6 @@ code {
border: 1px solid #e1e1e8;
}
-/** From OpenEJB Web site
-code, pre {
- padding: 0 3px 2px;
- font-family: Monaco, Andale Mono, Courier New, monospace;
- font-size: 12px;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-
-code {
- color: rgba(0, 0, 0, 0.75);
- padding: 1px 3px;
- //background-color: #fee9cc;
-}
-**/
-
pre {
display: block;
padding: 8.5px;