Как я читаю файл манифеста для веб-приложения, работающего у апачского кота?

Если вы сделаете методы асинхронными:

async Task AsyncDelete(string name)
{
    var cmd = new SqlCommand
    {
        //Initialize here
    };
    await cmd.ExecuteNonQueryAsync();
}

Тогда вы можете просто ждать их:

DoSomething(); 
await AsyncDelete(objectFileInfo.FullName);
await AsyncCreateIndex(destFileName, false, RepNum, EntityType, Domain, Org, EntityValue, bufferData);

Нет необходимости в отдельной теме.

46
задан Buhake Sindi 5 September 2012 в 10:04
поделиться

4 ответа

Возможно, Ваши побочные эффекты прибывают из того, что почти все банки включают MANIFEST.MF, и Вы не получаете правильный. Для чтения MANIFEST.MF из веб-приложения я сказал бы:

ServletContext application = getServletConfig().getServletContext();
InputStream inputStream = application.getResourceAsStream("/META-INF/MANIFEST.MF");
Manifest manifest = new Manifest(inputStream);

Обратите внимание на то, что рабочий Tomcat от Eclipse не является тем же как одним только рабочим Tomcat как игры Eclipse с classloader.

90
ответ дан Pascal Thivent 26 November 2019 в 20:15
поделиться

Путем по умолчанию работа загрузчиков класса должна подчиниться родителю прежде, чем делать попытку к поиску их собственных ресурсов. Таким образом, если загрузчик родительского класса имеет какую-либо декларацию в наличии, это - то, что Вы получите. На самом деле серверы приложений не обязательно делают это, чтобы позволить приложениям переопределять версии библиотек. Далее, загрузчики класса могут иметь несколько банок и следовательно несколько деклараций.

Это может быть в состоянии получить URL ресурса одного из Вашего исключительно именованного ресурса. Откройте соединение. Бросок к JarURLConnection. Доберитесь JarFile. Загрузите декларацию из этого. Это не может работать, особенно если Tomcat взрывает войну.

[Обновление], Конечно, сам военный файл не находится на пути к классу. Путь к классу будет иметь что-то как WEB-INF/lib / ( .jar | .zip) и WEB-INF/classes/. Получение ресурса от эти ServletContext должно работать.

Лучшее решение: Сделайте что-то другое.:)

2
ответ дан Tom Hawtin - tackline 26 November 2019 в 20:15
поделиться

Не знайте об "официальном" способе считать его, но если MANIFEST.MF не может быть правильно загружен как ресурс, как насчет того, чтобы пытаться получить его путь из "ServletContext.getRealPath ()" на некотором веб-пути, определенном в Вашем приложении?

Запись версии приложения также некоторым еще помещает (файл свойств в WEB-INF/classes) муравьем во время сборки другое решение, которое прибывает по моему мнению.

1
ответ дан david a. 26 November 2019 в 20:15
поделиться

немного поздно, но это работает для меня (веб-приложение на Glassfish)

Properties prop = new Properties();
prop.load(getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF"));
System.out.println("All attributes:" + prop.stringPropertyNames());
System.out.println(prop.getProperty("{whatever attribute you want}"));
11
ответ дан 26 November 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: