Как программно получить текущее местоположение EAR с помощью JBoss

StackOverflow https://stackoverflow.com/questions/1234300

  •  22-07-2019
  •  | 
  •  

Вопрос

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

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

Всем спасибо!

Это было полезно?

Решение

Я делаю так.
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");
    }
}

Другие советы

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

бывший:

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

результат

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

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

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

ServletLifecycle.getCurrentServletContext()

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top