【问题标题】:Is it possible to read a properties file from all .war files deployed in a JBoss container是否可以从部署在 JBoss 容器中的所有 .war 文件中读取属性文件
【发布时间】:2010-10-26 08:01:25
【问题描述】:

我已设法将 .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");

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

-mb

【问题讨论】:

  • 我很想知道为什么您的应用程序需要查看其名称不知道/无法从其他配置数据中找到的属性文件。听起来有点复杂。

标签: java jsp maven-2 jboss war


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        如果WAR文件被分解为文件夹,你应该可以使用

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

        如果 WAR 文件是存档格式,此方法可能不起作用

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-05-29
            • 2016-04-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-07-25
            • 1970-01-01
            相关资源
            最近更新 更多