Wie aktuelle EAR Lage programmatisch mit JBoss erhalten
Frage
Wer weiß, wie programmatisch den absoluten Pfad im Dateisystem für eine EAR in JBoss, innerhalb derselben EAR von Java-Code zum Einsatz bekommen?
Ich brauche das, weil ich einige Dateien kopiert werden sollen, die zu einem anderen Teil des Dateisystems innerhalb der EAR sind, auf deploy-Zeit.
Vielen Dank an alle!
Lösung
ich auf diese Weise.
EAR hat einen Dienst MyService, wo ich mit EAR Inhalt arbeiten:
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");
}
}
Andere Tipps
Sie tun können Sie "System.getProperty ()" Hier ist die Link für andere der Eigenschaften können Sie verwenden
ex:
String jBossPath = System.getProperty("jboss.server.base.dir")
Ergebnis
"/Users/ALL_THE_PATH/JBoss_7-1/standelone"
Nachdem Sie brauchen nur "/deployments/YOUR_PROJECT_EAR/..."
hinzufügen
Um die ServletContext
von Naht zu erhalten, können Sie tun:
ServletLifecycle.getCurrentServletContext()
, die so schnell zur Verfügung wie Seam die applicationContext
geschaffen hat. Und dann arbeitet getRealPath("/")
fein für den Einsatz Ordner des Stammkontext. Alle Ordnerstruktur im Kontext Wurzel erreicht werden.
Das ist ziemlich knifflig, aber Sie können dies tun, indem Sie die JBoss MainDeployer
MBean abfragt. Die MBean wird bei jboss.system:service=MainDeployer
gefunden und hat eine JMX Betrieb listDeployments
. Dies gibt eine Sammlung von DeploymentInfo
Objekten, von denen Ihre EAR-Bereitstellung sein. Die DeploymentInfo eine url
Eigenschaft hat, die eine file://
URL ist Ihr Bereitstellungsverzeichnis beschreibt.
Nizza, nicht wahr? Sie können den rohen JMX-API verwenden, um dies zu tun, aber Frühling bietet einen viel schöneren Mechanismus, einen MBeanProxyFactoryBean
mithilfe eine Instanz von MainDeployerMBean
aussetzen.
Ich mag eine einfachere Art und Weise zu finden, aber das ist das Beste, was ich bisher gefunden habe.
Sind diese Ressourcen zugeordnet oder unter einem Bahnweg zur Verfügung gestellt (innerhalb eines WAR)?
Wenn ja, könnten Sie verwenden versuchen, ServletContext.getRealPath()
den virtuellen Pfad zu dem real / Dateisystempfad zu übersetzen.