Можно ли прочитать файл свойств из всех файлов .war, развернутых в контейнере JBoss? - PullRequest
2 голосов
/ 15 мая 2009

Мне удалось развернуть .war в веб-контейнере Jboss, содержащем и прочитать свойства pom.properties, расположенные в / META-INF / groupid-dir / artifactid-dir /

Для доступа к файлу я использовал следующий код внутри JSP в той же войне:

ServletContext servletContext = getServletConfig().getServletContext(); 
InputStream in = servletContext.getResourceAsStream("META-INF/maven/groupid-dir/artifactid-dir/pom.properties");

Это работает просто отлично. Но я хочу иметь возможность динамически читать pom.propertes из ВСЕХ .war, развернутых в контейнере. Это возможно, или у меня есть доступ к контексту только для одного держателя войны, моего jsp?

-mb

Ответы [ 5 ]

0 голосов
/ 16 сентября 2012

Вы можете искать только ресурсы в вашем текущем classpath. Обычная операция веб-контейнера заключается в создании определенного пути к классам для каждого развернутого артефакта без доступа к другим артефактам, развернутым в контейнере.

Это очень важно, чтобы избежать артефакта A, который использует foo-1.0.jar, чтобы случайно не использовать foo-0.9.jar, который развернут с артефактом B.

Следовательно, вам нужно попросить контейнер о помощи. Это, в свою очередь, означает, что для этого вам нужно написать специфичный для контейнера код. Это сделает вас зависимым от поставщика - вы можете этого не хотеть.

0 голосов
/ 18 апреля 2012

Если файл WAR взорван как папка, вы сможете использовать

String basePath = getServletContext (). GetRealPath ("/");

Этот подход может не работать, если файл WAR находится в формате архива

0 голосов
/ 20 мая 2009

Вам, вероятно, придется сделать что-то хитрое, например, пройтись по MBeans JBoss. Я понимаю, что это расплывчато, но рассмотрим этот подход. Вот ссылка на то, как получить сервер MBean из приложения в JBoss (добавьте http://) www.jboss.org/community/wiki/FindMBeanServer (Stackoverflow не позволяет мне вставить ссылку). Я полагаю, что вы можете найти веб-клиент Jboss, откройте все веб-приложения mbeans, затем попросите у каждого свой загрузчик классов, а затем выполните то, что вы уже упомянули.

0 голосов
/ 24 июля 2009

Я не думаю, что чтение zip или использование jboss mbean - правильный путь. Я не думаю, что это сложно, и вы были на правильном пути, используя ServletContext.getResourceAsStream.

Вероятно, вы можете использовать ServletContext.getResourcePaths, но, кажется, несколько раз, чтобы идентифицировать подкаталоги groupid и artifactid. Что-то вроде

servletContext.getResourceAsStream(servletContext.getResourcePaths(
    (String) servletContext.getResourcePaths("/META-INF/maven/")
               .iterator().next())
  .iterator().next() + "pom.properties")

или

servletContext.getResourceAsStream(servletContext.getResourcePaths(
    (String) servletContext.getResourcePaths("/META-INF/maven/")
               .iterator().next())
  .iterator().next() + "pom.xml")

для pom.xml

0 голосов
/ 15 мая 2009

По сути, ваше приложение работает на той же машине, что и контейнер JBoss, поэтому доступ к файлам в локальной файловой системе должен быть возможным, во многом так же, как вы обращаетесь к своему собственному файлу .properties. Я не знаю ничего, что могло бы помешать вам сделать это.

Если вы хотите получить доступ к файлам в файле war, вам нужно использовать пакет java.util.zip, поскольку файлы war, конечно, являются обычными файлами zip. Просто дружеское напоминание.

...