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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top