如何使用JBoss以编程方式获取当前的EAR位置

时间:2009-08-05 16:24:31

标签: java jboss seam ear

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

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

谢谢大家!

5 个答案:

答案 0 :(得分:4)

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

例如:

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

结果

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

您只需要添加"/deployments/YOUR_PROJECT_EAR/..."

答案 1 :(得分: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");
    }
}

答案 2 :(得分:3)

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

ServletLifecycle.getCurrentServletContext()
一旦Seam创建了applicationContext,就可以使用

。然后getRealPath("/")适用于根上下文的部署文件夹。可以访问上下文根目录中的任何文件夹结构。

答案 3 :(得分:2)

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

很好,是吗?您可以使用原始JMX API来执行此操作,但Spring提供了更好的机制,使用MBeanProxyFactoryBean来公开MainDeployerMBean的实例。

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

答案 4 :(得分:1)

这些资源是在Web路径下(在WAR中)映射还是可用?

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