Ich migriere von Jetty 8.1.17 nach Jetty 9.3.9. Unsere Anwendung bettet Anlegesteg. Zuvor hatten wir eine einzige XML-Konfigurationsdatei jetty.xml
, die alles enthielt, was wir brauchten.Embedding Jetty 9.3 mit modularer XmlConfiguration
Ich fühlte, dass mit Jetty 9.3.9 wäre es viel schöner sein, den modularen Ansatz zu verwenden, die sie vorschlagen, so weit ich habe jetty.xml
, jetty-http.xml
, jetty-https.xml
und jetty-ssl.xml
in meinem $JETTY_HOME/etc
; Das sind Kopien der 9.3.9 Distribution. Dies scheint gut zu funktionieren, wenn ich start.jar
benutze, aber nicht durch meinen eigenen Code, der Jetty einbettet.
Idealerweise würde ich gerne in der Lage sein, nach Jetty XML-Dateien im $JETTY_HOME/etc
Ordner zu suchen und die Konfiguration zu laden. Doch für Embedded-Modus habe ich keine Möglichkeit, das zu tun, ohne explizit die Definition der Reihenfolge, dass diese Dateien sollten geladen sein, aufgrund <ref id="x"/>
Abhängigkeiten zwischen ihnen usw. gefunden
Mein erster Versuch basiert auf How can I programmatically start a jetty server with multiple configuration files? und sieht aus wie:
final List<Object> configuredObjects = new ArrayList();
XmlConfiguration last = null;
for(final Path confFile : configFiles) {
logger.info("[loading jetty configuration : {}]", confFile.toString());
try(final InputStream is = Files.newInputStream(confFile)) {
final XmlConfiguration configuration = new XmlConfiguration(is);
if (last != null) {
configuration.getIdMap().putAll(last.getIdMap());
}
configuredObjects.add(configuration.configure());
last = configuration;
}
}
Server server = null;
// For all objects created by XmlConfigurations, start them if they are lifecycles.
for (final Object configuredObject : configuredObjects) {
if(configuredObject instanceof Server) {
server = (Server)configuredObject;
}
if (configuredObject instanceof LifeCycle) {
final LifeCycle lc = (LifeCycle)configuredObject;
if (!lc.isRunning()) {
lc.start();
}
}
}
Allerdings bekomme ich Ausnahmen beim Start, wenn jetty-https.xml
vor jetty-ssl.xml
geladen wird oder wenn ich lege einen Verweis in jetty.xml
auf ein Objekt aus einer Unter Konfiguration jetty-blah.xml
der ersten nicht geladen wurde.
Es scheint mir, Jetty schafft es, dies in Ordnung zu tun, wenn Sie java -jar start.jar
aufrufen, also was fehlt mir, um Jetty zu interessieren, in welcher Reihenfolge die Konfigurationsdateien analysiert werden?
Gibt es eine Möglichkeit dass ich Funktionscode von start.jar in meiner eingebetteten APP leicht wiederverwenden/benennen kann, wo ich es mit einer Liste von XML-Dateien darstellen kann und es die Ordnung usw. für mich herausfinden kann? – adamretter
Sie können start.jar nicht mit nur XML-Dateien arbeiten. es muss mit Modulen arbeiten. –
Sie sind eingebettet, deklarieren Sie die XML-Ladereihenfolge in Ihrem eingebetteten Code und verwenden Sie sie. Es muss nicht dynamisch sein. –