7
votes

Comment obtenir le lieu de l'oreille actuelle programmatique avec JBoss

Est-ce que quelqu'un sait-il obtenir de manière programmable la voie absolue dans le système de fichiers d'une oreille déployée dans JBoss, du code Java dans la même oreille?

J'en ai besoin parce que je veux copier certains fichiers à l'intérieur de l'oreille dans une autre partie du système de fichiers, sur le déploiement de temps.

Merci tout le monde!


0 commentaires

5 Réponses :


2
votes

Ceci est assez fidèle, mais vous pouvez le faire en interrogeant le MAINDEPEPORIER JBoss MBEAN. Le MBean se trouve à JBoss.System: Service = MainDeployer , et a une opération JMX listDeployments . Cela renvoie une collection d'objets déploymentinfo , dont l'un sera votre déploiement d'oreille. Ce déploiementInfo a une propriété URL un fichier fichier: // url décrivant votre répertoire de déploiement.

Nice, hein? Vous pouvez utiliser l'API JMX RAW pour le faire, mais le printemps fournit un mécanisme beaucoup plus agréable, à l'aide d'un MBeanProxyFactoryBean pour exposer une instance de MaindeployMbean . .

J'aimerais trouver une manière plus simple, mais c'est le meilleur que j'ai trouvé jusqu'à présent.


1 commentaires

Merci pour ton aide! Cependant, il n'a pas fonctionné dans mon cas: J'utilise de la maquette avec JBoss, et j'ai besoin de ce code pour fonctionner à partir d'une méthode annotée comme @OBserver ("org.jboss.sam.postinitialisation"), appelée quand une application de couture commence. À ce stade, je recevrais un MaindeployMbean qui rapportait: 0 Earles déployées, 0 incomplète et 0 attente de déploiement ...



1
votes

Ces ressources sont-elles mappées ou mises à disposition sous une voie Web (dans une guerre)?

Si tel est le cas, vous pouvez tenter d'utiliser servleContext.geterrealpath () pour traduire le chemin virtuel sur le chemin de réel / FileSystem.


1 commentaires

Merci pour ton aide! Cependant, cela ne fonctionnait pas dans mon cas: comme je l'ai dit dans un autre commentaire, j'utilise cela dans le démarrage de la couture. Je n'ai pas pu trouver un moyen d'obtenir un servletContext à ce stade (cela reviendrait comme null).



3
votes

Je fais de cette façon.
L'oreille a un service myservice, où je travaille avec le contenu de l'oreille: xxx


1 commentaires

Je pourrais utiliser un moyen plus simple, car la classe où j'ai besoin de ce chemin, je suis dans l'oreille qui contient la guerre qui contient les fichiers que je veux copier. Donc, j'ai juste besoin de 1 ligne de code: chemin de chaîne = ceci.getclass (). GetClassloader (). GetResource ("my_war_filenam e.war"). GetPath (); Merci!



3
votes

Pour obtenir le servleContext de la couture, vous pouvez faire: xxx

disponible dès que la couture a créé le ApplicationContext . Et ensuite GetRealPath ("/") fonctionne bien pour le dossier de déploiement de contexte racine. Toute structure de dossiers dans la racine de contexte peut être atteinte.


0 commentaires

4
votes

vous pouvez vous faire "System.getProperty ()" Voici le lien pour d'autres Propriétés que vous pouvez utiliser

ex: xxx

résultat xxx

après avoir besoin d'ajouter " / Déploiements / VOTRE_PROJECT_EAR /..." / CODE>


1 commentaires

Une solution simple et propre, très utile!