Comment obtenir l'emplacement actuel de l'EAR par programme avec JBoss
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!
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.