JBossを使用してプログラムで現在のEARロケーションを取得する方法

StackOverflow https://stackoverflow.com/questions/1234300

  •  22-07-2019
  •  | 
  •  

質問

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

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

皆さんありがとう!

役に立ちましたか?

解決

このようにします。
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");
    }
}

他のヒント

できます" System.getProperty()"使用できる他のプロパティのリンクがあります

ex:

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

結果

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

" / deployments / YOUR_PROJECT_EAR /..."

を追加する必要がある場合

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

ServletLifecycle.getCurrentServletContext()

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

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

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

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

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

その場合、 ServletContext.getRealPath() を使用して、仮想パスを実/ファイルシステムパスに変換します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top