代码之家  ›  专栏  ›  技术社区  ›  ptdev

如何使用jboss以编程方式获取当前EAR位置

  •  7
  • ptdev  · 技术社区  · 16 年前

    有人知道如何从编程中获得在JBASS中部署的耳朵文件系统中的绝对路径,从同一个耳朵中的Java代码吗?

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

    谢谢大家!

    5 回复  |  直到 13 年前
        1
  •  3
  •   avro    16 年前

    我这样做。
    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
  •  4
  •   douarbou    13 年前

    你可以做“system.getproperty()”这里是 link 对于其他属性,可以使用

    前任:

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

    结果

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

    在你只需要添加 "/deployments/YOUR_PROJECT_EAR/..."

        3
  •  3
  •   tugcem    14 年前

    得到 ServletContext 从Seam,您可以执行以下操作:

    ServletLifecycle.getCurrentServletContext()
    

    一旦Seam创建了 applicationContext . 然后 getRealPath("/") 对于根上下文的部署文件夹可以正常工作。可以访问上下文根目录中的任何文件夹结构。

        4
  •  2
  •   skaffman    16 年前

    这是非常复杂的,但是您可以通过查询jboss来完成这一任务。 MainDeployer MBean。MBean位于 jboss.system:service=MainDeployer ,并具有JMX操作 listDeployments . 这将返回 DeploymentInfo 对象,其中一个将是您的EAR部署。那个部署信息有一个 url 属性是 file:// 描述部署目录的URL。

    很好,嗯?您可以使用原始JMX API来完成这项工作,但是Spring提供了一个更好的机制,使用 MBeanProxyFactoryBean 公开 MainDeployerMBean .

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

        5
  •  1
  •   matt b    16 年前

    这些资源是在网络路径下映射的还是在战争中可用的?

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