Question

Quelqu'un sait-il comment obtenir par programmation le chemin absolu dans le système de fichiers d'un fichier EAR déployé dans JBoss, à partir du code Java de ce même fichier EAR?

J'en ai besoin car je veux copier certains fichiers contenus dans le fichier EAR dans une autre partie du système de fichiers, au moment du déploiement.

Merci à tous!

Était-ce utile?

La solution

Je fais comme ça.
EAR a un service MyService, où je travaille avec le contenu de 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");
    }
}

Autres conseils

vous pouvez utiliser "System.getProperty ()". voici le lien pour d'autres propriétés que vous pouvez utiliser

ex:

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

résultat

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

Il suffit ensuite d'ajouter " / deployments / YOUR_PROJECT_EAR /..."

Pour obtenir le ServletContext auprès de Seam, vous pouvez procéder:

ServletLifecycle.getCurrentServletContext()

disponible dès que Seam a créé le applicationContext . Et puis getRealPath ("/") fonctionne bien pour le dossier de déploiement du contexte racine. Toute structure de dossier dans la racine de contexte est accessible.

C’est assez compliqué, mais vous pouvez le faire en interrogeant le MBean JBoss MainDeployer . Le MBean se trouve dans jboss.system: service = MainDeployer et comporte une opération JMX listDeployments . Cela retourne une collection d'objets DeploymentInfo , dont l'un sera votre déploiement EAR. Ce DeploymentInfo a une propriété url qui est une URL fichier: // décrivant votre répertoire de déploiement.

Nice, hein? Vous pouvez utiliser l’API JMX brute à cet effet, mais Spring fournit un mécanisme beaucoup plus agréable, qui utilise un MBeanProxyFactoryBean pour exposer une instance de MainDeployerMBean .

J'aimerais trouver un moyen plus simple, mais c'est le meilleur que j'ai trouvé jusqu'à présent.

Ces ressources sont-elles mappées ou disponibles sous un chemin Web (dans un fichier WAR)?

Si tel est le cas, vous pouvez utiliser ServletContext.getRealPath () pour traduire le chemin virtuel en chemin réel / du système de fichiers.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top