Jetty Logo
Version: 9.4.20.v20190813
Contact the core Jetty developers at

private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ... scalability guidance for your apps and Ajax/Comet projects ... development services for sponsored feature development

Chapter 13. Annotations

Table of Contents

Quick Setup
Working with Annotations
Using Annotations with Jetty Embedded

Jetty supports the servlet specification annotations. It is not enable by default, so the following sections show you how to enable it, and how to use them.

Quick Setup

Jetty Distribution

If you are using the jetty distribution, then annotations are enabled by default. The annotations module and its transitive dependencies are responsible for making annotation processing available.

Note that annotations that relate to JNDI, such as @Resource and @Resources are enabled via the JNDI module, which is a transitive dependency on the annotations module.

Jetty Maven Plugin

Annotations and JNDI are pre-enabled for the Maven plugin.


To use annotations in an embedded scenario, you will need to include the jetty-annotations jar and all its dependencies onto your classpath. You will also need to include the org.eclipse.jetty.annotations.AnnotationConfiguration class into the list of Configuration classes applied to the org.eclipse.jetty.webapp.WebAppContext class representing your webapp.

Below is an example application that sets up the standard test-spec.war webapp from the distribution in embedded fashion. It can also be found in the Jetty GitHub repository on the examples/embedded page as Note that the test-spec.war uses not only annotations, but also JNDI, so this example also enables their processing (via the, and their related jars).

//  ========================================================================
//  Copyright (c) 1995-2019 Mort Bay Consulting Pty. Ltd.
//  ------------------------------------------------------------------------
//  All rights reserved. This program and the accompanying materials
//  are made available under the terms of the Eclipse Public License v1.0
//  and Apache License v2.0 which accompanies this distribution.
//      The Eclipse Public License is available at
//      The Apache License v2.0 is available at
//  You may elect to redistribute this code under either of these licenses.
//  ========================================================================

package org.eclipse.jetty.embedded;


import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.Configuration;
import org.eclipse.jetty.webapp.WebAppContext;

 * ServerWithAnnotations
public class ServerWithAnnotations
    public static final void main(String[] args) throws Exception
        // Create the server
        Server server = new Server(8080);

        // Enable parsing of jndi-related parts of web.xml and jetty-env.xml
        Configuration.ClassList classlist = Configuration.ClassList
        // Create a WebApp
        WebAppContext webapp = new WebAppContext();
        File warFile = JettyDistribution.resolve("demo-base/webapps/test-spec.war").toFile();

        // Register new transaction manager in JNDI
        // At runtime, the webapp accesses this as java:comp/UserTransaction
        new Transaction(new com.acme.MockUserTransaction());

        // Define an env entry with webapp scope.
        // THIS ENTRY IS OVERRIDEN BY THE ENTRY IN jetty-env.xml
        new EnvEntry(webapp, "maxAmount", 100d, true);

        // Register a mock DataSource scoped to the webapp
        new Resource(server, "jdbc/mydatasource", new com.acme.MockDataSource());

        // Add JNDI context to server for dump
        server.addBean(new NamingDump());

        // Configure a LoginService
        HashLoginService loginService = new HashLoginService();
        loginService.setName("Test Realm");


See an error or something missing? Contribute to this documentation at Github!(Generated: 2019-08-13)