Spring 3.1 WebApplicationInitializer & amp; Embedded Jetty 8 AnnotationConfiguration

Ich bin versucht, zu erstellen eine einfache webapp ohne XML-Konfiguration von Spring 3.1 und einen eingebetteten Jetty 8 server.

Jedoch bin ich kämpfen, um Jetty zu erkennen meine implementaton der Feder WebApplicationInitializer - Schnittstelle.

Projekt Struktur:

src
 +- main
     +- java
     |   +- JettyServer.java
     |   +- Initializer.java
     | 
     +- webapp
         +- web.xml (objective is to remove this - see below).

Den Initialisierer Klasse ist eine einfache Implementierung von WebApplicationInitializer:

import javax.servlet.ServletContext;
import javax.servlet.ServletException;

import org.springframework.web.WebApplicationInitializer;

public class Initializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        System.out.println("onStartup");
    }
}

Ebenfalls JettyServer ist eine einfache Implementierung eines embedded Jetty-server:

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

public class JettyServer {

    public static void main(String[] args) throws Exception { 

        Server server = new Server(8080);

        WebAppContext webAppContext = new WebAppContext();
        webAppContext.setResourceBase("src/main/webapp");
        webAppContext.setContextPath("/");
        webAppContext.setConfigurations(new Configuration[] { new AnnotationConfiguration() });
        webAppContext.setParentLoaderPriority(true);

        server.setHandler(webAppContext);
        server.start();
        server.join();
    }
}

Mein Verständnis ist, dass beim Start Jetty verwenden AnnotationConfiguration zu Scannen
kommentierte Implementierungen von ServletContainerInitializer; es sollte Initialisierer und Draht...

Allerdings, wenn ich starten Sie den Jetty-server (in Eclipse) sehe ich Folgendes auf der Kommandozeile:

2012-11-04 16:59:04.552:INFO:oejs.Server:jetty-8.1.7.v20120910
2012-11-04 16:59:05.046:INFO:/:No Spring WebApplicationInitializer types detected on classpath
2012-11-04 16:59:05.046:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/,file:/Users/duncan/Coding/spring-mvc-embedded-jetty-test/src/main/webapp/}
2012-11-04 16:59:05.117:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080

Der wichtige Teil ist dieser:

No Spring WebApplicationInitializer types detected on classpath

Beachten Sie, dass src/main/java ist definiert als source folder in Eclipse, so sollte im classpath. Beachten Sie auch, dass die Dynamische Web-Modul Facette festgelegt ist 3.0.

Ich bin sicher, es gibt eine einfache Erklärung, aber ich bin kämpfen, um zu sehen, das Holz für die Bäume! Ich vermute, der Schlüssel ist mit der folgenden Zeile:

...
webAppContext.setResourceBase("src/main/webapp");
...

Dies macht Sinn, mit einem 2,5-servlet mit web.xml (siehe unten), aber was soll es, wenn mit AnnotationConfiguration?

NB: Alles startet korrekt, wenn ich das ändern der Konfigurationen in der folgenden:

...
webAppContext.setConfigurations(new Configuration[] { new WebXmlConfiguration() });
...

In diesem Fall findet die web.xml unter src/main/webapp und verwendet Sie, um Draht-servlet mit DispatcherServlet und AnnotationConfigWebApplicationContext in der üblichen Weise (vollständig unter Umgehung der WebApplicationInitializer Umsetzung oben).

Dieser fühlt sich sehr ähnlich wie ein classpath-problem, aber ich habe Mühe zu verstehen, ganz wie Steg gesellt sich mit Implementierungen von WebApplicationInitializer - irgendwelche Vorschläge wäre sehr dankbar!

Zur info, ich bin mit dem folgenden:

Spring 3.1.1
Jetty 8.1.7
STS 3.1.0

InformationsquelleAutor der Frage Duncan | 2012-11-04

Schreibe einen Kommentar