2009-05-14 4 views
2

/META-INF/groupid 아래에있는 pom.properties가 들어있는 Jboss 웹 컨테이너에 .war을 배포 할 수있었습니다. -dir/artifactId를-DIR/JBoss 컨테이너에 배포 된 모든 .war 파일에서 속성 파일을 읽을 수 있습니까?

내가 같은 전쟁의 JSP 내에서 다음 코드를 사용했습니다 파일에 액세스하려면 :

ServletContext servletContext = getServletConfig().getServletContext(); 
InputStream in = servletContext.getResourceAsStream("META-INF/maven/groupid-dir/artifactid-dir/pom.properties"); 

이 잘 작동합니다. 하지만 컨테이너에 배포 된 모든 .war에서 pom.properties를 동적으로 읽을 수 있기를 원합니다. 이것이 가능합니까 아니면 한 명의 전쟁 보유자를위한 컨텍스트에 대한 액세스 권한 만 있습니까?

기본적으로 -mb

+0

응용 프로그램이 다른 구성 데이터에서 이름을 알 수 없거나 찾을 수없는 속성 파일을 봐야하는지 궁금합니다. 그것은 약간 복잡하게 들린다. –

답변

0

, 응용 프로그램은 당신이 당신의 자신의 .properties 파일을 액세스하는 같은 방법으로 많이 가능해야하므로 로컬 파일 시스템에있는 파일에 액세스은 JBoss 컨테이너와 동일한 시스템에서 실행되는 파일. 나는 당신이 이것을하지 못하도록 막아야하는 것에 익숙하지 않습니다.

내의 war 파일 인에 액세스하려면 war 파일은 물론 일반 zip 파일이므로 java.util.zip 패키지를 사용해야합니다. 그냥 친절한 알리미.

0

JBoss MBeans를 사용하는 것처럼 까다로울 필요가있을 것입니다. 나는 이것이 모호하다는 것을 알지만 그 접근법을 고려해보십시오. 다음은 JBoss 내의 애플리케이션에서 MBean 서버를 가져 오는 방법에 대한 링크입니다 (http : // 추가). www.jboss.org/community/wiki/FindMBeanServer (Stackoverflow로 인해 링크를 붙여 넣을 수 없습니다). Jboss Web mbean을 찾고 모든 웹 응용 프로그램 mbean을 떼어 내고 클래스 로더에 대해 각각 묻고 나서 이미 언급 한 것을 수행 할 수 있다고 생각합니다.

0

나는 지퍼를 읽거나 jboss mbean을 사용하는 것이 옳은 방법이라고 생각하지 않습니다. 나는 그것이 까다 롭지 않아서 당신이 ServletContext.getResourceAsStream을 사용하여 바른 길에 있다고 생각하지 않습니다.

아마도 ServletContext.getResourcePaths을 사용할 수 있지만 groupid 및 artifactid 하위 디렉토리를 식별하는 데는 여러 번 사용할 수 있습니다. WAR 파일을 폴더로 폭발하는 경우의 pom.xml

0

에 대한

servletContext.getResourceAsStream(servletContext.getResourcePaths(
    (String) servletContext.getResourcePaths("/META-INF/maven/") 
       .iterator().next()) 
    .iterator().next() + "pom.properties") 

또는

servletContext.getResourceAsStream(servletContext.getResourcePaths(
    (String) servletContext.getResourcePaths("/META-INF/maven/") 
       .iterator().next()) 
    .iterator().next() + "pom.xml") 

같은 무엇인가, 당신은 =

문자열 basePath을 사용할 수 있어야합니다 getServletContext(). getRealPath ("/");

이 방법은 WAR 파일이 아카이브 형식

0

에있는 경우에만 현재의 클래스 경로에 자원을 찾아보실 수 있습니다 작동하지 않을 수 있습니다. 웹 컨테이너의 정상적인 작동은 컨테이너에 배포 된 다른 아티팩트에 액세스하지 않고 각 배포 된 이슈에 대한 특정 클래스 경로를 생성하는 것입니다.

이되지 accidentially 따라서 당신이 도움을 컨테이너를 요청해야합니다 아티팩트 B.

로 배포 foo는-0.9.jar를 사용하는 foo는-1.0.jar를 사용하는 유물을 피하기 위해 매우 중요합니다.다시 말하면 컨테이너 전용 코드를 작성해야합니다. 그러면 공급 업체에 따라 달라집니다. 원하지 않을 수도 있습니다.

관련 문제