cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From build...@apache.org
Subject svn commit: r1024920 - in /websites/production/cxf/content: cache/docs.pageCache docs/using-cxf-and-cdi-11-jsr-346.html
Date Tue, 06 Feb 2018 04:57:28 GMT
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");
 



Mime
View raw message