Softwareentwicklung

Probleme beim Upgrade eines Embedded Jetty

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.

Joerny

Share
Published by
Joerny

Recent Posts

Wie intelligent müssen Chatbots sein?

Chatbots sind ja momentan in aller Munde. Mittlerweile findet man auf vielen Seiten neben dem…

3 Jahren ago

Warum Deutschland ein Digitalminister braucht

Eine Bundestagsabgeordnete hatte eingeladen zu einer offenen Diskussionsrunde eingeladen. Es sollte um die Digitalisierung von…

4 Jahren ago

Sind Meta-Daten die neuen Drogen?

Sitzen ist das neue Rauchen. Sagt man. Weil zu viel sitzen und damit zu wenig…

6 Jahren ago

Warum jeder ein VPN benutzen sollte

Als Netzwerke in den Firmen sich etablierten, kam auch bald der Wunsch auf, sich von…

7 Jahren ago

Zu viele Passwörter verderben die Sicherheit

Der durchschnittliche Internetnutzer hat 15 verschiedene Accounts. Einige davon hat er freiwillig angelegt, zu anderen…

7 Jahren ago

Programmiersprache – das neue Babylon

Der Brancheninformationsdienst Heise.de hat die beliebteste Programmiersprache 2016 ausgerufen. Das Ergebnis: Java. Während das für…

7 Jahren ago