Pergunta

Alguém sabe como obter programaticamente o caminho absoluto no sistema de arquivos para um EAR implantado no JBoss, a partir do código Java dentro desse mesmo EAR?

Eu preciso disso porque eu quero copiar alguns arquivos que estão dentro do EAR para outra parte do sistema de arquivos, em implantação em tempo.

Obrigado a todos!

Foi útil?

Solução

Eu faço desta forma.
EAR tem uma MyService serviço, onde eu trabalho com conteúdos ouvido:

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");
    }
}

Outras dicas

você pode fazer você "System.getProperty ()" aqui é o ligação para outro, o propriedades que podem ser usadas

ex:

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

Resultado

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

Depois de só precisa adicionar "/deployments/YOUR_PROJECT_EAR/..."

Para obter o ServletContext de Seam, você pode fazer:

ServletLifecycle.getCurrentServletContext()

que está disponível assim que Seam criou o applicationContext. E então getRealPath("/") funciona bem para pasta de implantação do contexto de raiz. Qualquer estrutura de pastas dentro de raiz de contexto pode ser alcançado.

Este é bastante trabalhosa, mas você pode fazer isso consultando os MBean MainDeployer JBoss. O MBean é encontrado em jboss.system:service=MainDeployer, e tem um listDeployments operação JMX. Isso retorna uma coleção de objetos DeploymentInfo, um dos quais será sua implantação EAR. Isso DeploymentInfo tem uma propriedade url que é uma URL file:// descrevendo seu diretório de implantação.

Nice, eh? Você pode usar a API JMX-prima para fazer isso, mas Spring fornece um mecanismo mais agradável tanto, usando um MBeanProxyFactoryBean para expor uma instância de MainDeployerMBean.

Eu gostaria de encontrar uma maneira mais simples, mas isso é o melhor que eu encontrei até agora.

São estes recursos mapeada ou disponibilizado através de um caminho de web (dentro de um WAR)?

Se assim for, você poderia tentar usar ServletContext.getRealPath() para traduzir o caminho virtual para o real caminho / sistema de arquivos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top