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");
 


Reply via email to