7

有谁知道如何从同一个 EAR 中的 Java 代码以编程方式获取部署在 JBoss 中的 EAR 的文件系统中的绝对路径?

我需要这个,因为我想在部署时将 EAR 中的一些文件复制到文件系统的另一部分。

谢谢大家!

4

5 回答 5

4

你可以做你“System.getProperty()”这里是你可以使用的其他属性的链接

前任:

String jBossPath = System.getProperty("jboss.server.base.dir")

结果

"/Users/ALL_THE_PATH/JBoss_7-1/standelone"

之后你只需要添加"/deployments/YOUR_PROJECT_EAR/..."

于 2013-03-26T17:17:27.093 回答
3

我这样做。
EAR 有一个服务 MyService,我在其中处理 EAR 内容:

import org.jboss.system.ServiceControllerMBean;
import org.jboss.system.ServiceMBeanSupport;

public class MyService extends ServiceMBeanSupport {

    public void workWithEar() 
    {
        ServiceControllerMBean serviceController = (ServiceControllerMBean) MBeanProxy.get(
                    ServiceControllerMBean.class,
                    ServiceControllerMBean.OBJECT_NAME, server);
        // server is ServiceMBeanSupport member

        ClassLoader cl = serviceController.getClass().getClassLoader();

        String path = cl.getResource("META-INF/jboss-service.xml").getPath()
        InputStream file = cl.getResourceAsStream("META-INF/jboss-service.xml");
    }
}
于 2009-08-06T12:30:23.567 回答
3

要从ServletContextSeam 获取,您可以执行以下操作:

ServletLifecycle.getCurrentServletContext()

一旦 Seam 创建了applicationContext. 然后getRealPath("/")适用于根上下文的部署文件夹。可以访问上下文根中的任何文件夹结构。

于 2012-02-06T16:41:24.273 回答
2

这很繁琐,但您可以通过查询 JBoss MainDeployerMBean 来做到这一点。MBean 位于jboss.system:service=MainDeployer,并具有 JMX 操作listDeployments。这将返回一个DeploymentInfo对象集合,其中一个将是您的 EAR 部署。该 DeploymentInfo 有一个url属性,它是file://描述您的部署目录的 URL。

不错,嗯?您可以使用原始 JMX API 来执行此操作,但 Spring 提供了更好的机制,使用 aMBeanProxyFactoryBean来公开MainDeployerMBean.

我想找到一种更简单的方法,但这是迄今为止我发现的最好的方法。

于 2009-08-05T16:35:37.387 回答
1

这些资源是否在 Web 路径下(在 WAR 内)映射或提供?

如果是这样,您可以尝试使用ServletContext.getRealPath()将虚拟路径转换为真实/文件系统路径。

于 2009-08-05T17:06:53.050 回答