7

同じEAR内のJavaコードから、JBossにデプロイされたEARのファイルシステム内の絶対パスをプログラムで取得する方法を知っている人はいますか?

これが必要なのは、デプロイ時にEAR内にあるいくつかのファイルをファイルシステムの別の部分にコピーしたいからです。

みんなありがとう!

4

5 に答える 5

4

「System.getProperty()」を行うことができますここに、使用できる他のプロパティへのリンクがあります

元:

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

結果

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

追加するだけで済みます"/deployments/YOUR_PROJECT_EAR/..."

于 2013-03-26T17:17:27.093 に答える
3

私はこのようにします。
EAR にはサービス MyService があり、ここで 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");
    }
}
于 2009-08-06T12:30:23.567 に答える
3

Seam からを取得するには、次のServletContextようにします。

ServletLifecycle.getCurrentServletContext()

これは Seam が を作成するとすぐに利用できますapplicationContext。そして、getRealPath("/")ルートコンテキストの展開フォルダーに対して正常に機能します。コンテキスト ルート内の任意のフォルダー構造にアクセスできます。

于 2012-02-06T16:41:24.273 に答える
2

MainDeployerこれは非常に面倒ですが、JBoss MBeanにクエリを実行することで実行できます。MBean はjboss.system:service=MainDeployerにあり、JMX 操作がありlistDeploymentsます。これにより、オブジェクトのコレクションが返されますDeploymentInfo。そのうちの 1 つが EAR デプロイメントになります。その DeploymentInfo には、デプロイメント ディレクトリを説明する URLであるurlプロパティがあります。file://

いいね、え?MBeanProxyFactoryBean生の JMX API を使用してこれを行うことができますが、Spring は を使用して のインスタンスを公開するという、より優れたメカニズムを提供しますMainDeployerMBean

もっと簡単な方法を見つけたいのですが、これが今まで見つけた中で最高です。

于 2009-08-05T16:35:37.387 に答える
1

これらのリソースは、Web パスの下 (WAR 内) でマップまたは使用可能になっていますか?

ServletContext.getRealPath()その場合、仮想パスを実際のファイルシステム パスに変換するために使用することができます。

于 2009-08-05T17:06:53.050 に答える