是否可以从JBoss容器中部署的所有.war文件中读取属性文件

时间:2009-05-14 21:17:13

标签: java jsp maven-2 jboss war

我设法将.war部署到Jboss Web容器中,该容器包含并读取位于/ META-INF / groupid-dir / artifactid-dir /

下的pom.properties

要访问该文件,我在同一场战争中的JSP中使用了以下代码:

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

这很好用。但我希望能够从容器中部署的ALL .war动态读取pom.propertes。这是可能的还是我只能访问我的jsp的一个战争持有者的上下文?

-MB

5 个答案:

答案 0 :(得分:0)

基本上,您的应用程序与JBoss容器在同一台机器上运行,因此访问本地文件系统上的文件应该是可能的,就像您访问自己的.properties文件一样。我不熟悉任何阻止你这样做的事情。

如果要访问 war文件中的文件,则需要使用java.util.zip包,因为war文件当然是普通的zip文件。只是一个友好的提醒。

答案 1 :(得分:0)

你可能需要做一些棘手的事情,比如通过JBoss MBeans。我意识到这很模糊,但考虑研究这种方法。这是一个如何从JBoss中的应用程序获取MBean服务器的链接(添加http://)www.jboss.org/community/wiki/FindMBeanServer(Stackoverflow阻止我粘贴链接)。我想你可以找到Jboss Web mbean,剥离所有Web应用程序mbeans,然后询问每个人的类加载器,然后继续做你已经提到的。

答案 2 :(得分:0)

我不认为阅读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")

for pom.xml

答案 3 :(得分:0)

如果WAR文件以文件夹形式展开,您应该可以使用

  

String basePath = getServletContext()。getRealPath(“/”);

如果WAR文件采用存档格式

,则此方法可能无效

答案 4 :(得分:0)

您只能查找当前类路径中的资源。 Web容器的正常操作是为每个已部署的工件创建特定的类路径,而无需访问容器中部署的其他工件。

这对于避免使用foo-1.0.jar的工件A非意外地使用与工件B一起部署的foo-0.9.jar非常重要。

因此,您需要向容器寻求帮助。这反过来意味着您需要编写特定于容器的代码来执行此操作。这将使您依赖供应商 - 您可能不希望这样。