Как получить текущее местоположение EAR программно с JBoss - PullRequest
7 голосов
/ 05 августа 2009

Кто-нибудь знает, как программно получить абсолютный путь в файловой системе для EAR, развернутого в JBoss, из кода Java в том же EAR?

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

Спасибо всем!

Ответы [ 5 ]

4 голосов
/ 26 марта 2013

вы можете сделать вам "System.getProperty ()", вот ссылка для других свойств, которые вы можете использовать

например:

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

результат

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

После того, как вам просто нужно добавить "/deployments/YOUR_PROJECT_EAR/..."

3 голосов
/ 06 февраля 2012

Чтобы получить ServletContext из шва, вы можете сделать:

ServletLifecycle.getCurrentServletContext()

, который доступен, как только Seam создал applicationContext. И тогда getRealPath("/") отлично работает для папки развертывания корневого контекста. Может быть достигнута любая структура папок в корне контекста.

3 голосов
/ 06 августа 2009

Я делаю так.
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 голосов
/ 05 августа 2009

Это довольно сложно, но вы можете сделать это, запросив JBoss MainDeployer MBean. MBean находится в jboss.system:service=MainDeployer и имеет операцию JMX listDeployments. Это возвращает коллекцию DeploymentInfo объектов, одним из которых будет ваше развертывание EAR. Это DeploymentInfo имеет свойство url, которое представляет собой URL-адрес file://, описывающий каталог развертывания.

Хорошо, а? Вы можете использовать сырой JMX API для этого, но Spring предоставляет гораздо более приятный механизм, используя MBeanProxyFactoryBean для предоставления экземпляра MainDeployerMBean.

Я бы хотел найти более простой способ, но это лучшее, что я нашел до сих пор.

1 голос
/ 05 августа 2009

Сопоставлены ли эти ресурсы или сделаны доступными по веб-пути (в пределах WAR)?

Если это так, вы можете попытаться использовать ServletContext.getRealPath() для преобразования виртуального пути в путь к реальной / файловой системе.

...