同じEAR内のJavaコードから、JBossにデプロイされたEARのファイルシステム内の絶対パスをプログラムで取得する方法を知っている人はいますか?
これが必要なのは、デプロイ時にEAR内にあるいくつかのファイルをファイルシステムの別の部分にコピーしたいからです。
みんなありがとう!
「System.getProperty()」を行うことができますここに、使用できる他のプロパティへのリンクがあります
元:
String jBossPath = System.getProperty("jboss.server.base.dir")
結果
"/Users/ALL_THE_PATH/JBoss_7-1/standelone"
追加するだけで済みます"/deployments/YOUR_PROJECT_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");
}
}
Seam からを取得するには、次のServletContext
ようにします。
ServletLifecycle.getCurrentServletContext()
これは Seam が を作成するとすぐに利用できますapplicationContext
。そして、getRealPath("/")
ルートコンテキストの展開フォルダーに対して正常に機能します。コンテキスト ルート内の任意のフォルダー構造にアクセスできます。
MainDeployer
これは非常に面倒ですが、JBoss MBeanにクエリを実行することで実行できます。MBean はjboss.system:service=MainDeployer
にあり、JMX 操作がありlistDeployments
ます。これにより、オブジェクトのコレクションが返されますDeploymentInfo
。そのうちの 1 つが EAR デプロイメントになります。その DeploymentInfo には、デプロイメント ディレクトリを説明する URLであるurl
プロパティがあります。file://
いいね、え?MBeanProxyFactoryBean
生の JMX API を使用してこれを行うことができますが、Spring は を使用して のインスタンスを公開するという、より優れたメカニズムを提供しますMainDeployerMBean
。
もっと簡単な方法を見つけたいのですが、これが今まで見つけた中で最高です。
これらのリソースは、Web パスの下 (WAR 内) でマップまたは使用可能になっていますか?
ServletContext.getRealPath()
その場合、仮想パスを実際のファイルシステム パスに変換するために使用することができます。