2009-08-05 67 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/..."