有没有人知道如何以编程方式从同一个EAR中的Java代码中获取JBoss中部署的EAR的文件系统中的绝对路径?
我需要这个,因为我想在部署时将一些EAR内的文件复制到文件系统的另一部分。
谢谢大家!
答案 0 :(得分:4)
你能做到“System.getProperty()”这里是你可以使用的其他属性的link
例如:
String jBossPath = System.getProperty("jboss.server.base.dir")
结果
"/Users/ALL_THE_PATH/JBoss_7-1/standelone"
您只需要添加"/deployments/YOUR_PROJECT_EAR/..."
答案 1 :(得分: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");
}
}
答案 2 :(得分:3)
要从Seam获取ServletContext
,您可以执行以下操作:
ServletLifecycle.getCurrentServletContext()
一旦Seam创建了applicationContext
,就可以使用。然后getRealPath("/")
适用于根上下文的部署文件夹。可以访问上下文根目录中的任何文件夹结构。
答案 3 :(得分:2)
这非常繁琐,但你可以通过查询JBoss MainDeployer
MBean来做到这一点。 MBean位于jboss.system:service=MainDeployer
,并且具有JMX操作listDeployments
。这将返回DeploymentInfo
个对象的集合,其中一个对象将是您的EAR部署。该DeploymentInfo具有url
属性,该属性是描述部署目录的file://
URL。
很好,是吗?您可以使用原始JMX API来执行此操作,但Spring提供了更好的机制,使用MBeanProxyFactoryBean
来公开MainDeployerMBean
的实例。
我想找一个更简单的方法,但这是迄今为止我发现的最好的方式。
答案 4 :(得分:1)
这些资源是在Web路径下(在WAR中)映射还是可用?
如果是这样,您可以尝试使用ServletContext.getRealPath()
将虚拟路径转换为实际/文件系统路径。