Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Configuring the Jetty Runtime

Overview

This section is for configuring the Jetty runtime used for the CXF standalone model. The Jetty runtime is used by HTTP servers and HTTP clients using a decoupled endpoint. The Jetty runtime's thread pool, connector and handlers can be configured. You can also set a number of the security settings for an HTTP service provider through the Jetty runtime.

...

The elements used to configure the Jetty runtime are defined in the namespace http://cxf.apache.org/transports/http-jetty/configuration. It is commonly refered referred to using the prefix httpj. In order to use the Jetty configuration elements you will need to add the lines shown below to the beans element of your endpoint's configuration file. In addition, you will need to add the configuration elements' namespace to the xsi:schemaLocation attribute.

Code Block
xml
xml
<beans ...
       xmlns:httpj="http://cxf.apache.org/transports/http-jetty/configuration
       ...
       xsi:schemaLocation="...
                           http://cxf.apache.org/transports/http-jetty/configuration
                              http://cxf.apache.org/schemas/configuration/http-jetty.xsd
                          ...>

The engine-factory element

...

The httpj:engine-factory element has three children that contain the information used to configure the HTTP ports instantiated by the Jetty runtime factory. The children are described below.

Element

Description

httpj:engine

Specifies the configuration for a particular Jetty runtime instance.

httpj:identifiedTLSServerParameters

Specifies a reusable set of properties for securing an HTTP server. It has a single attribute, id, that specifies a unique identifier by which the property set can be

refered

referred.

httpj:identifiedThreadingParameters

Specifies a reusable set of properties for controlling a Jetty instance's thread pool. It has a single attribute, id, that specifies a unique identifier by which the property set can be

refered

referred.

The engine element

The httpj:engine element is used to configure specific instances of the Jetty runtime. It has a single attribute, port, that specifies the number of the port being managed by the Jetty instance.

...

The child elements used to provide the configuration properties are described below.

Element

Description

httpj:tlsServerParameters

Specifies a set of properties for configuring the security used for the specific Jetty instance. See the TLS Configuration page for more information.

httpj:tlsServerParametersRef

Refers to a set of security properties defined by a identifiedTLSServerParameters element. The id attribute provides the id of the

refered

referred identifiedTLSServerParameters element.

httpj:threadingParameters

Specifies the size of the thread pool used by the specific Jetty instance.

httpj:threadingParametersRef

Refers to a set of properties defined by a identifiedThreadingParameters element. The id attribute provides the id of the

refered

referred identifiedThreadingParameters element.

httpj:connector

You can use spring beans syntax to instantiate a connector and set the connector's properties , this connector will be set to the Jetty server engine

httpj:handlers

You can use spring beans syntax to instantiate a Jetty handler list and set these handlers' properties , the jetty handlers will be set to the Jetty server engine

httpj:sessionSupport

If the value is true ,

it

the Jetty Engine will set up a session manager for the Jetty server engine to maintain the sessions. The default value of it is false.

httpj:reuseAddress

The the value is true, the Jetty Engine connector's socket will enable the SO_REUSEADDR flage. The default value of it is true. (This feature is available in CXF 2.0.3)

Configuring the thread pool

...

  • Specifying the size of thread pool using a identifiedThreadingParameters element in the engine-factory element. You then refer to the element using a threadingParametersRef element.
  • Specify the size of the of thread pool directly using a threadingParameters element.
    The threadingParameters has two attributes to specify the size of a thread pool. The attributes are described below.

    Note

    The httpj:identifiedThreadingParameters element has a single child threadingParameters element.


Attribute

Description

minThreads

Specifies the minimum number of threads available to the Jetty instance for processing requests.

maxThreads

Specifies the maximum number of threads available to the Jetty instance for processing requests.

Anchor
jetty_http2
jetty_http2
HTTP/2 support

If HttpServerEngineSupport#ENABLE_HTTP2  bus property is set, Jetty engine will enable the HTTP/2 support as well: HTTP/2 over cleartext (h2c) if TLS is not configured, regular HTTP/2 otherwise. It requires additional dependencies to be bundled by the application.

Code Block
xml
xml
<dependency>
    <groupId>org.eclipse.jetty.http2</groupId>
    <artifactId>http2-server</artifactId>
    <version>${jetty.version}</version>
</dependency>

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-alpn-server</artifactId>
    <version>${jetty.version}</version>
</dependency>

Additionally, for JDK8 you would need to include:

Code Block
java
java
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-alpn-openjdk8-server</artifactId>
    <version>${jetty.version}</version>
</dependency>

If you are using JDK9 and above, please use the following dependency instead:

Code Block
xml
xml
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-alpn-java-server</artifactId>
    <version>${jetty.version}</version>
</dependency>

Example: https://github.com/apache/cxf/tree/master/distribution/src/main/release/samples/jax_rs/basic_http2_jetty

Example

The example below shows a configuration fragment that configures a Jetty instance on port number 9001.

Code Block
xml
xml
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:beans="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:sec="http://cxf.apache.org/configuration/security"
  xmlns:http="http://cxf.apache.org/transports/http/configuration"
  xmlns:httpj="http://cxf.apache.org/transports/http-jetty/configuration"
  xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
  xsi:schemaLocation="http://cxf.apache.org/configuration/security
  		      http://cxf.apache.org/schemas/configuration/security.xsd
            http://cxf.apache.org/transports/http/configuration
            http://cxf.apache.org/schemas/configuration/http-conf.xsd
            http://cxf.apache.org/transports/http-jetty/configuration
            http://cxf.apache.org/schemas/configuration/http-jetty.xsd
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
  ...

  <httpj:engine-factory bus="cxf">
    <httpj:identifiedTLSServerParameters id="secure">
      <httpj:tlsServerParameters>
        <sec:keyManagers keyPassword="password">
          <sec:keyStore type="JKS" password="password"
                      file="certs/cherry.jks"/>
        </sec:keyManagers>
      </httpj:tlsServerParameters>
    </httpj:identifiedTLSServerParameters>

    <httpj:engine port="9001">
      <httpj:tlsServerParametersRef id="secure" />
      <httpj:threadingParameters minThreads="5"
                                 maxThreads="15" />
      <httpj:connector>
        <beans:bean class="org.mortbayeclipse.jetty.server.bio.SocketConnector">
           <beans:property name = "port" value="9001" />
        </beans:bean>
      </httpj:connector>
      <httpj:handlers>
        <beans:bean class="org.mortbayeclipse.jetty.server.handler.DefaultHandler"/>         
      </httpj:handlers>
      <httpj:sessionSupport>true</hjhttpj:sessionSupport>
    </httpj:engine>
  </httpj:engine-factory>
 </beans>

...