我正在從Jetty 8.1.17遷移到Jetty 9.3.9。我們的應用嵌入碼頭。以前我們有一個XML配置文件jetty.xml
,它包含了我們需要的所有東西。使用模塊化XmlConfiguration嵌入Jetty 9.3
我認爲,隨着碼頭9.3.9它會好得多使用模塊化的方式,他們建議,到目前爲止,我jetty.xml
,jetty-http.xml
,jetty-https.xml
和jetty-ssl.xml
在我$JETTY_HOME/etc
;這幾乎是9.3.9發行版的副本。當我使用start.jar
而不是通過我自己的嵌入Jetty的代碼時,這看起來很好。
理想情況下,我希望能夠掃描$JETTY_HOME/etc
文件夾中的任何jetty xml文件並加載配置。然而,對於嵌入模式我還沒有找到一種方法來做到這一點無需顯式定義,這些文件應該被加載時,由於它們之間等<ref id="x"/>
依賴順序
我最初的嘗試是基於How can I programmatically start a jetty server with multiple configuration files?,看起來像:
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();
}
}
}
然而,我在啓動時得到異常如果jetty-https.xml
被jetty-ssl.xml
之前加載或如果我置於jetty.xml
參考從還沒有被第一加載的子配置jetty-blah.xml
的一個對象。
在我看來,當Jetty設法自己調用java -jar start.jar
時,它自己可以做到這一點,所以我錯過了什麼讓Jetty不關心配置文件被解析的順序?
衝突有什麼辦法我可以在我的嵌入式應用程序中輕鬆地重新使用/調用start.jar中的函數代碼,在那裏我可以用XML文件列表來呈現它,並且它可以找出我的訂單等? – adamretter
你不能只有xml文件的start.jar。它必須使用模塊。 –
您已嵌入,請在嵌入式代碼中聲明xml加載順序並使用它。沒有必要對它充滿活力。 –