有谁知道如何从同一个 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");
}
}
要从ServletContext
Seam 获取,您可以执行以下操作:
ServletLifecycle.getCurrentServletContext()
一旦 Seam 创建了applicationContext
. 然后getRealPath("/")
适用于根上下文的部署文件夹。可以访问上下文根中的任何文件夹结构。
这很繁琐,但您可以通过查询 JBoss MainDeployer
MBean 来做到这一点。MBean 位于jboss.system:service=MainDeployer
,并具有 JMX 操作listDeployments
。这将返回一个DeploymentInfo
对象集合,其中一个将是您的 EAR 部署。该 DeploymentInfo 有一个url
属性,它是file://
描述您的部署目录的 URL。
不错,嗯?您可以使用原始 JMX API 来执行此操作,但 Spring 提供了更好的机制,使用 aMBeanProxyFactoryBean
来公开MainDeployerMBean
.
我想找到一种更简单的方法,但这是迄今为止我发现的最好的方法。
这些资源是否在 Web 路径下(在 WAR 内)映射或提供?
如果是这样,您可以尝试使用ServletContext.getRealPath()
将虚拟路径转换为真实/文件系统路径。