2009-08-05 36 views
7

是否有人知道如何通过编程方式获得在同一EAR中的Java代码中部署在JBoss中的EAR的文件系统中的绝对路径?如何以编程方式使用JBoss获取当前EAR位置

我需要这个,因为我想在部署时将EAR内部的一些文件复制到文件系统的另一部分。

谢谢大家!

回答

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"); 
    } 
} 
+0

我可以使用更简单的方法,因为我需要该路径的类,我在EAR中保存包含我想要复制的文件的WAR。所以,我只需要1行代码: String path = this.getClass()。getClassLoader()。getResource(“my_war_filename.war”)。getPath(); 谢谢! – ptdev 2009-08-06 14:12:30

2

这很烦琐,但你可以通过查询JBoss MainDeployer MBean来做到这一点。该MBean位于jboss.system:service=MainDeployer,并具有JMX操作listDeployments。这将返回一个DeploymentInfo对象的集合,其中一个对象将是您的EAR部署。 DeploymentInfo具有url属性,该属性是描述您的部署目录的file:// URL。

不错,呃?您可以使用原始JMX API执行此操作,但Spring提供了更好的机制,使用MBeanProxyFactoryBean来公开MainDeployerMBean的实例。

我想找到一个更简单的方法,但这是迄今为止我找到的最好的。

+0

感谢您的帮助!然而,在我的情况下,它并不起作用:我将SeamFramework与JBoss一起使用,并且我需要此代码从注释为@Observer(“org.jboss.seam.postInitialization”)的方法运行,该方法被称为当一个Seam应用程序启动时。在这一点上,我会得到一个MainDeployerMBean报告:0部署EARs,0不完整和0等待部署... – ptdev 2009-08-06 14:14:41

1

这些资源是在Web路径下(在WAR中)映射还是可用?

如果是这样,您可以尝试使用ServletContext.getRealPath()将虚拟路径转换为真实/文件系统路径。

+0

感谢您的帮助!然而,在我的情况下它并没有工作:正如我在另一个评论中指出的那样,我在Seam的启动中使用了它。我无法找到一种方法来获取ServletContext(它将返回为null)。 – ptdev 2009-08-06 14:16:46

3

要想从缝中ServletContext,你可以这样做:

ServletLifecycle.getCurrentServletContext() 

其尽快缝创造了可applicationContext。然后getRealPath("/")适用于根上下文的部署文件夹。可以到达上下文根中的任何文件夹结构。

3

你可以做你 “System.getProperty()” 这里是link其他的属性,你可以使用

例如:

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

结果

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

你经过短短需要添加"/deployments/YOUR_PROJECT_EAR/..."

相关问题