svn commit: r1024920 - in /websites/production/cxf/content: cache/docs.pageCache docs/using-cxf-and-cdi-11-jsr-346.html

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1024920 - in /websites/production/cxf/content: cache/docs.pageCache docs/using-cxf-and-cdi-11-jsr-346.html

buildbot
Author: buildbot
Date: Tue Feb  6 04:57:28 2018
New Revision: 1024920

Log:
Production update by buildbot for cxf

Modified:
    websites/production/cxf/content/cache/docs.pageCache
    websites/production/cxf/content/docs/using-cxf-and-cdi-11-jsr-346.html

Modified: websites/production/cxf/content/cache/docs.pageCache
==============================================================================
Binary files - no diff available.

Modified: websites/production/cxf/content/docs/using-cxf-and-cdi-11-jsr-346.html
==============================================================================
--- websites/production/cxf/content/docs/using-cxf-and-cdi-11-jsr-346.html (original)
+++ websites/production/cxf/content/docs/using-cxf-and-cdi-11-jsr-346.html Tue Feb  6 04:57:28 2018
@@ -32,8 +32,8 @@
 <link type="text/css" rel="stylesheet" href="/resources/highlighter/styles/shThemeCXF.css">
 
 <script src='/resources/highlighter/scripts/shCore.js'></script>
-<script src='/resources/highlighter/scripts/shBrushXml.js'></script>
 <script src='/resources/highlighter/scripts/shBrushJava.js'></script>
+<script src='/resources/highlighter/scripts/shBrushXml.js'></script>
 <script>
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -117,7 +117,7 @@ Apache CXF -- Using CXF and CDI 1.1 (JSR
          <td height="100%">
            <!-- Content -->
            <div class="wiki-content">
-<div id="ConfluenceContent"><h1 id="UsingCXFandCDI1.1(JSR-346)-Introduction">Introduction&#160;</h1><p>The JAX-RS 2.0 specification (JSR-339) mandates the support of CDI 1.1 (JSR-346) and Apache CXF starting from the version 3.0 introduces the initial support of this feature. As the starting point, the emphasis has been done on supporting embedded Jety 8/9 and Tomcat 7/8 containers as primary deployment (though other application servers will be supported in the future).&#160;</p><h1 id="UsingCXFandCDI1.1(JSR-346)-Architectureanddesign">Architecture and design&#160;</h1><p>At the moment, the integration of Apache CXF and CDI revolves around two key components, which reside in the new module called <strong>cxf-integration-cdi</strong></p><ul><li><strong>CXFCdiServlet</strong> servlet</li><li><strong>JAXRSCdiResourceExtension</strong> portable CDI extension</li></ul><p>The fact of including <strong>cxf-integration-cdi</strong> as a dependency allows&#160; <strong>JAXRSCdiResourceExtens
 ion</strong>&#160;&#160;portable CDI extension to be discovered by CDI container. The&#160; <strong>JAXRSCdiResourceExtension</strong> creates the instance of the <strong>Bus</strong>&#160;and registers&#160;it with <strong>BeanManager</strong>. From this point, the&#160; <strong>Bus</strong> instance is a regular CDI bean (with <span><strong>@</strong><span><strong>Application</strong> scope)</span></span> available for injection.&#160;This instance of the&#160; <strong>Bus</strong> is being injected into&#160;<strong>CXFCdiServlet</strong> servlet once it is initialized by servlet container.</p><p>Depending on the design, <strong>JAXRSCdiResourceExtension</strong> may use zero-based configuration approach or rely on particular JAX-RS <strong>Application</strong> instances. The&#160;<strong>org.apache.cxf.cdi.CXFCdiServlet</strong> should be configured as well (more examples for programmatic and WAR scenarios below).</p><h1 id="UsingCXFandCDI1.1(JSR-346)-Zero-basedConfiguration">Ze
 ro-based Configuration</h1><p>If the Apache CXF application contains only one single instance of JAX-RS <strong>Application</strong> (annotated with <strong>@ApplicationPath</strong>) with no singletons and classes defined, the following rules are being applied by <strong>JAXRSCdiResourceExtension</strong> in order to configure and publish the configured JAX-RS resources:</p><ul><li>the instance of the JAX-RS <strong>Application</strong> (annotated with <strong>@ApplicationPath</strong>) is being created and registered with <strong>BeanManager</strong></li><li>all instances of the discovered JAX-RS <strong>providers </strong>(annotated with <strong>@Provider</strong>) are being created and registered with <strong>BeanManager</strong></li><li>all instances of the discovered JAX-RS <strong>resources</strong> (annotated with <strong>@Path</strong>) are being created and registered with <strong>BeanManager</strong></li></ul><p>Lastly, the instance of the <strong>JAXRSServerFactoryBean</
 strong> is being created and configured with all service beans and providers discovered before. Additionally, the providers are enriched with the services for <strong>javax.ws.rs.ext.MessageBodyReader</strong> and <strong>javax.ws.rs.ext.MessageBodyWriter</strong>, loaded via <strong>ServiceLoader</strong>. From this moment, Apache CXF application is ready to serve the requests. The quick example is shown below.</p><p>The empty JAX-RS <strong>Application</strong>:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<div id="ConfluenceContent"><h1 id="UsingCXFandCDI1.1(JSR-346)-Introduction">Introduction&#160;</h1><p>The JAX-RS 2.0 specification (JSR-339) mandates the support of CDI 1.1 (JSR-346) and Apache CXF starting from the version 3.0 introduces the initial support of this feature. As the starting point, the emphasis has been done on supporting embedded Jety 8/9 and Tomcat 7/8 containers as primary deployment (though other application servers will be supported in the future).&#160;</p><h1 id="UsingCXFandCDI1.1(JSR-346)-Architectureanddesign">Architecture and design&#160;</h1><p>At the moment, the integration of Apache CXF and CDI revolves around two key components, which reside in the new module called <strong>cxf-integration-cdi</strong></p><ul><li><strong>CXFCdiServlet</strong> servlet</li><li><strong>JAXRSCdiResourceExtension</strong> portable CDI extension</li></ul><p>The fact of including <strong>cxf-integration-cdi</strong> as a dependency allows&#160; <strong>JAXRSCdiResourceExtens
 ion</strong>&#160;&#160;portable CDI extension to be discovered by CDI container. The&#160; <strong>JAXRSCdiResourceExtension</strong> creates the instance of the <strong>Bus</strong>&#160;and registers&#160;it with <strong>BeanManager</strong>. From this point, the&#160; <strong>Bus</strong> instance is a regular CDI bean (with <span><strong>@</strong><span><strong>Application</strong> scope)</span></span> available for injection.&#160;This instance of the&#160; <strong>Bus</strong> is being injected into&#160;<strong>CXFCdiServlet</strong> servlet once it is initialized by servlet container.</p><p>Depending on the design, <strong>JAXRSCdiResourceExtension</strong> may use zero-based configuration approach or rely on particular JAX-RS <strong>Application</strong> instances. The&#160;<strong>org.apache.cxf.cdi.CXFCdiServlet</strong> should be configured as well (more examples for programmatic and WAR scenarios below).</p><h1 id="UsingCXFandCDI1.1(JSR-346)-Zero-basedConfiguration">Ze
 ro-based Configuration</h1><p>If the Apache CXF application contains either no instance of JAX-RS <strong>Application</strong> or&#160;only one single instance of JAX-RS <strong>Application</strong> (annotated with <strong>@ApplicationPath</strong>) with no singletons and classes defined, the following rules are being applied by <strong>JAXRSCdiResourceExtension</strong> in order to configure and publish the configured JAX-RS resources:</p><ul><li>the instance of the JAX-RS <strong>Application</strong> (annotated with <strong>@ApplicationPath</strong>) is being created and registered with <strong>BeanManager</strong></li><li>all instances of the discovered JAX-RS <strong>providers </strong>(annotated with <strong>@Provider</strong>) are being created and registered with <strong>BeanManager</strong></li><li>all instances of the discovered JAX-RS <strong>resources</strong> (annotated with <strong>@Path</strong>) are being created and registered with <strong>BeanManager</strong></li></
 ul><p>Lastly, the instance of the <strong>JAXRSServerFactoryBean</strong> is being created and configured with all service beans and providers discovered before. Additionally, the providers are enriched with the services for <strong>javax.ws.rs.ext.MessageBodyReader</strong> and <strong>javax.ws.rs.ext.MessageBodyWriter</strong>, loaded via <strong>ServiceLoader</strong>. From this moment, Apache CXF application is ready to serve the requests. The quick example is shown below.</p><p>The empty JAX-RS <strong>Application</strong>:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">@ApplicationPath("/api")
 public class BookStoreApplication extends Application {
 }</pre>
@@ -159,7 +159,7 @@ public class BookStore {
         return service.get(id);
     }
 }</pre>
-</div></div><h1 id="UsingCXFandCDI1.1(JSR-346)-DeployingwithembeddedJetty8/9(programmaticconfiguration)">Deploying with embedded Jetty 8/9 (programmatic configuration)</h1><p>With <strong>Jetty 8/9</strong> it possible to create fully embeddable REST / JAX-RS servers without <strong>web.xml</strong> or <strong>WAR</strong>&#160;files involved. For Apache CXF applications which are using CDI 1.1, the&#160;<strong>CXFCdiServlet</strong>&#160;servlet should be used as a starting point. Following example demonstrates the necessary configuration points in order to create embedded <strong>Jetty 8/9</strong> instance. As a CDI 1.1 implementation, <strong>JBoss Weld 2.0</strong> is being used.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><h1 id="UsingCXFandCDI1.1(JSR-346)-AdditionalConfigurationCapabilities">Additional Configuration Capabilities</h1><p>If you have a need to, you can configure the underlying&#160;<strong>JAXRSServerFactoryBean</strong> by implementing the interface&#160;<strong>JAXRSServerFactoryCustomizationExtension</strong>.&#160; Instances of this extension can be located via <strong>ServiceLoader</strong> of as CDI beans.&#160; You can use this to programmatically add new providers, or otherwise manipulate the runtime before the server is created.&#160; An example of how this is used can be seen at&#160;<a shape="rect" class="external-link" href="https://github.com/apache/cxf/blob/master/rt/rs/sse/src/main/java/org/apache/cxf/jaxrs/sse/cdi/SseTransportCustomizationExtension.java" rel="nofollow">SseTransportCustomizationExtension</a>.</p><h1 id="UsingCXFandCDI1.1(JSR-346)-CDiLifecycleforJAX-RSContextObjects">CDi Lifecycle for JAX-RS Context Objects</h1><p>The CDI extension also suppor
 ts the injection (via CDI) of&#160;<strong>@Context </strong>objects.&#160; Any known object can be injected via CDI.&#160; This happens automatically when the CDI extension is used, and a&#160;<strong>@Context</strong> is declared as a field on a resource class.&#160; Note that this does allow you to inject your&#160;<strong>@Context</strong> objects in non-JAX-RS components as well.&#160; The logic is in two parts:</p><ol><li>Rewriting injection points<ol><li>When an injection point is found that contains&#160;<strong>@Context</strong> two additional annotations are added</li><li>These annotations are&#160;<strong>@Inject </strong>and&#160;<strong>@ContextResolved</strong></li><li>The use of&#160;<strong>@Inject </strong>will force the CDI runtime to take over the injection of the bean value, while<strong>&#160;@ContextResolved </strong>is simply a qualifier we apply to the injection point to avoid ambiguities</li></ol></li><li><strong>Providing Beans</strong><ol><li>For each of t
 he built in<strong>&#160;@Context </strong>types, we register a bean that provides a<strong>&#160;@RequestScoped </strong>bean that resolves the value, by looking up the internal context value</li><li>In addition, a user or intergrator can implement<strong> ContextClassProvider </strong>to register an additional class as context type to be resolved.</li></ol></li></ol><p>&#160;</p><h1 id="UsingCXFandCDI1.1(JSR-346)-DeployingwithembeddedJetty8/9(programmaticconfiguration)">Deploying with embedded Jetty 8/9 (programmatic configuration)</h1><p>With <strong>Jetty 8/9</strong> it possible to create fully embeddable REST / JAX-RS servers without <strong>web.xml</strong> or <strong>WAR</strong>&#160;files involved. For Apache CXF applications which are using CDI 1.1, the&#160;<strong>CXFCdiServlet</strong>&#160;servlet should be used as a starting point. Following example demonstrates the necessary configuration points in order to create embedded <strong>Jetty 8/9</strong> instance. As a C
 DI 1.1 implementation, <strong>JBoss Weld 2.0</strong> is being used.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">System.setProperty("java.naming.factory.url", "org.eclipse.jetty.jndi");
 System.setProperty("java.naming.factory.initial", "org.eclipse.jetty.jndi.InitialContextFactory");