Problems beim Upgrade eines Embedded Jetty

Logo jetty, maven, spring framework

Ich habe letztens ein Legacy-Projekt aktualisieren müssen. Grundlage ist dabei Java mit dem Spring-Framework und einem embedded Jetty. Dieser wird über Maven gestartet. Nachdem Update des Jettys auf die aktuelle Version musste ich feststellen, dass nach dem Hochfahren der Server nicht mehr angesprochen werden konnte. Nach einigem Ausprobieren war klar, dass die Jetty-Version 9.4.3 (9.4.3.v20170317) problemlos funktionierte, die Version 9.4.4 (9.4.4.v20170414) aber nicht mehr. Um das Problem einzugrenzen, habe ich mir die Ausgaben in der Konsole angeschaut:

9.4.3:

>> mvn jetty:run
[...]
[INFO] Configuring Jetty for project: Challoday
[INFO] webAppSourceDirectory not set. Trying src/main/webapp
[INFO] Reload Mechanic: automatic
[INFO] Classes = /Users/joern/IdeaProjects/challoday/target/classes
[INFO] Configuring Jetty from xml configuration file = /Users/joern/IdeaProjects/challoday/src/main/resources/jetty.xml
[INFO] Configuring Jetty from xml configuration file = /Users/joern/IdeaProjects/challoday/src/main/resources/jetty-http.xml
[INFO] Context path = /
[INFO] Tmp directory = /Users/joern/IdeaProjects/challoday/worky
[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml
[INFO] Web overrides =  none
[INFO] web.xml file = file:///Users/joern/IdeaProjects/challoday/src/main/webapp/WEB-INF/web.xml
[INFO] Webapp directory = /Users/joern/IdeaProjects/challoday/src/main/webapp
[INFO] jetty-9.4.3.v20170317
[INFO] Scanning elapsed time=1342ms
[INFO] 2 Spring WebApplicationInitializers detected on classpath
[INFO] DefaultSessionIdManager workerName=node0
[INFO] No SessionScavenger set, using defaults
[INFO] Scavenging every 600000ms
[INFO] Set web app root system property: 'webapp.root' = [/Users/joern/IdeaProjects/challoday/src/main/webapp]
[INFO] Initializing log4j from [classpath:log4j-development.xml]
[INFO] Initializing Spring root WebApplicationContext
[INFO] Initializing Spring FrameworkServlet 'dispatcher'
[INFO] Started o.e.j.m.p.JettyWebAppContext@7d199c68{/,file:///Users/joern/IdeaProjects/challoday/src/main/webapp/,AVAILABLE}{file:///Users/joern/IdeaProjects/challoday/src/main/webapp/}
[INFO] Started ServerConnector@9cb927e{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
[INFO] Started @10994ms
[INFO] Started Jetty Server

9.4.4:

>> mvn jetty:run
[...]
[INFO] Configuring Jetty for project: Challoday
[INFO] webAppSourceDirectory not set. Trying src/main/webapp
[INFO] Reload Mechanic: automatic
[INFO] Classes = /Users/joern/IdeaProjects/challoday/target/classes
[INFO] Configuring Jetty from xml configuration file = /Users/joern/IdeaProjects/challoday/src/main/resources/jetty.xml
[INFO] Configuring Jetty from xml configuration file = /Users/joern/IdeaProjects/challoday/src/main/resources/jetty-http.xml
 [INFO] Context path = /
[INFO] Tmp directory = /Users/joern/IdeaProjects/challoday/worky
[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml
[INFO] Web overrides =  none
[INFO] web.xml file = file:///Users/joern/IdeaProjects/challoday/src/main/webapp/WEB-INF/web.xml
[INFO] Webapp directory = /Users/joern/IdeaProjects/challoday/src/main/webapp
[INFO] jetty-9.4.4.v20170414
[INFO] Scanning elapsed time=1535ms
[INFO] DefaultSessionIdManager workerName=node0
[INFO] No SessionScavenger set, using defaults
[INFO] Scavenging every 660000ms
[INFO] Started o.e.j.m.p.JettyWebAppContext@4c2fb9dd{/,file:///Users/joern/IdeaProjects/challoday/src/main/webapp/,AVAILABLE}{file:///Users/joern/IdeaProjects/challoday/src/main/webapp/}
[INFO] Started ServerConnector@7fb48179{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
[INFO] Started @5672ms
[INFO] Started Jetty Server

Wie man deutlich sehen kann, werden weder die Konfigurationen geladen, noch die entsprechenden Beans initialisiert.

Als nächstes also erst einmal in das Changelog der Version 9.4.4 geschaut. Dort findet man diesen Hinweis:

1467 Change default for WebAppContext.isConfiguredDiscovered to false

Und in der entsprechenden Diskussion auf GitHub findet man heraus, dass diese Änderung genau das ist, was das automatische Scannen der Konfiguration verhindert. Also muss man die pom.xml entsprechend anpassen:

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.4.4.v20170414</version>
    <configuration>
        <jettyXml>${project.basedir}/src/main/resources/jetty.xml,${project.basedir}/src/main/resources/jetty-http.xml</jettyXml>
        <webAppConfig>
            <tempDirectory>worky</tempDirectory>
            <configurationDiscovered>true</configurationDiscovered>
        </webAppConfig>
        <stopPort>9998</stopPort>
        <stopKey>foo</stopKey>
    </configuration>
</plugin>

Mit dieser Änderung <configurationDiscovered>true</configurationDiscovered> wird stellt man das Verhalten der vorherigen Versionen wieder her. Damit lädt der Server wieder die Spring-Konfiguration einschließlich der Annotations.

Du magst vielleicht auch

Kommentar verfassen