문제

누가 같은 귀의 Java 코드에서 Jboss에 배치 된 귀에 대한 파일 시스템의 절대 경로를 프로그래밍 방식으로 얻는 방법을 아는 사람이 있습니까?

배포 시간에 귀에 들어있는 일부 파일을 파일 시스템의 다른 부분에 복사하고 싶기 때문에이 작업이 필요합니다.

모두 감사합니다!

도움이 되었습니까?

해결책

나는 이런 식으로한다.
귀에는 귀 내용물로 작업하는 서비스가 제공됩니다.

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

다른 팁

당신은 당신을 할 수 있습니다 "system.getProperty ()"여기에 있습니다. 링크 다른 속성은 사용할 수 있습니다

전:

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

결과

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

추가하면됩니다 "/deployments/YOUR_PROJECT_EAR/..."

얻기 위해 ServletContext 이음새에서 할 수 있습니다.

ServletLifecycle.getCurrentServletContext()

이음새가 생성하자마자 사용할 수 있습니다. applicationContext. 그리고 getRealPath("/") 루트 컨텍스트의 배포 폴더에 적합합니다. 컨텍스트 루트 내의 폴더 구조에 도달 할 수 있습니다.

이것은 매우 충격적이지만 Jboss를 쿼리 하여이 작업을 수행 할 수 있습니다. MainDeployer MBEAN. mbean은 발견됩니다 jboss.system:service=MainDeployer, JMX 작업이 있습니다 listDeployments. 이것은 컬렉션을 반환합니다 DeploymentInfo 물체 중 하나는 귀 배치입니다. 해당 배포는 다음에 있습니다 url a file:// 배포 디렉토리를 설명하는 URL.

좋아, 어? RAW JMX API를 사용하여이를 수행 할 수 있지만 Spring은 MBeanProxyFactoryBean 인스턴스를 노출시키기 위해 MainDeployerMBean.

더 간단한 방법을 찾고 싶지만 지금까지 내가 찾은 최고입니다.

이러한 리소스가 웹 경로 (전쟁 내에서)에 따라 매핑되거나 제공됩니까?

그렇다면 사용하려고 시도 할 수 있습니다 ServletContext.getRealPath() 가상 경로를 실제/파일 시스템 경로로 번역합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top