Domanda

Qualcuno sa come ottenere programmaticamente il percorso assoluto nel filesystem per un EAR distribuito in JBoss, dal codice Java all'interno dello stesso EAR?

Ne ho bisogno perché voglio copiare alcuni file che si trovano all'interno dell'EAR in un'altra parte del filesystem, in tempo di distribuzione.

Grazie a tutti!

È stato utile?

Soluzione

Faccio così.
EAR ha un servizio MyService, dove lavoro con i contenuti 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");
    }
}

Altri suggerimenti

puoi farlo " System.getProperty () " ecco il link per altre proprietà che puoi usare

es:

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

risultato

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

Dopo aver solo bisogno di aggiungere "/deployments/YOUR_PROJECT_EAR/..."

Per ottenere il ServletContext da Seam, puoi fare:

ServletLifecycle.getCurrentServletContext()

che è disponibile non appena Seam ha creato applicationContext . E poi getRealPath (" / ") funziona bene per la cartella di distribuzione del contesto radice. È possibile raggiungere qualsiasi struttura di cartelle all'interno della root di contesto.

Questo è abbastanza complicato, ma puoi farlo interrogando l'MBean JBoss MainDeployer . L'MBean si trova in jboss.system: service = MainDeployer e ha un'operazione JMX listDeployments . Ciò restituisce una raccolta di oggetti DeploymentInfo , uno dei quali sarà la distribuzione EAR. Che DeploymentInfo ha una proprietà url che è un file: // URL che descrive la directory di distribuzione.

Bello, eh? Puoi usare l'API JMX non elaborata per farlo, ma Spring offre un meccanismo molto più bello, usando un MBeanProxyFactoryBean per esporre un'istanza di MainDeployerMBean .

Vorrei trovare un modo più semplice, ma questo è il migliore che ho trovato finora.

Queste risorse sono mappate o rese disponibili in un percorso Web (all'interno di una GUERRA)?

In tal caso, potresti provare a utilizzare ServletContext.getRealPath () per tradurre il percorso virtuale nel percorso real / filesystem.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top