2011-02-04 4 views
11

애플리케이션을 JBoss 4에서 JBoss 6로 업그레이드합니다.JBoss vfs :/URL을 열 수없는 이유는 무엇입니까?

애플리케이션에 몇 가지 예외적 인 방법으로 클라이언트에 전달됩니다. 애플리케이션 내부에서 jar 파일을 조회하고 서블릿. 클라이언트가 특정 지원 기능을 실행하기 위해이를 추출합니다.

JBoss 4에서는 jar 파일을 클래스 로더로 검색하여 jar : // URL을 찾고 jar 파일을 읽고 클라이언트에 내용을 전송합니다.

룩업을 수행 할 때 JBoss 6에서 우리는 vfs :/URL을 얻습니다. org.jboss.vfs 패키지에 있음을 알고 있습니다. 불행히도이 URL에서 openStream()을 호출하고 스트림에서 읽으면 즉시 EOF를 얻습니다 (read()는 -1을 반환합니다).

무엇을 제공합니까? 이 URL에서 언급하는 리소스를 읽을 수없는 이유는 무엇입니까?

기본 VFS 패키지에 액세스하여 JBoss VFS API를 통해 파일을 열려고 시도했지만 대부분의 API가 비공개로 표시되어 vfs에서 번역 할 루틴을 찾을 수 없습니다 : VFS VirtualFile 객체에 대한 URL입니다. 그래서 어디에도 갈 수 없었습니다.

JBoss 내에서 디스크에서 파일을 찾으려고 할 수는 있지만 업그레이드시 매우 쉽게 실패하는 것으로 들립니다.

이전의 방법은 Java Web Start를 사용하여 jars를 클라이언트에 배포 한 다음 Java Web Start의 캐시에서 찾아서 추출하는 것이 었습니다. 그러나 캐시의 레이아웃이 변경 되었기 때문에 Java의 모든 사소한 업그레이드가 중단되었습니다.

+0

org.apache.commons.vfs. *; 이 수입은 이와 관련하여 도움이됩니다. –

+0

JBoss VFS와 Apache VFS는 동일한 이름이지만 다른 제품이라고 말하면서 유감입니다. Apache VFS 클래스를 사용하면 JBoss VFS 문제에 도움이되지 않습니다. 또한 Apache VFS 설명서를 사용하는 것이 도움이되지 않습니다. JBoss는 VFS를 잘 문서화하지 않았기 때문에 대부분의 문서는 Apache 용입니다. – skiphoppy

답변

4

getContent() 메서드를 사용하면 VirtualFile을 사용할 수 있다는 것을 알았습니다. 아마도이 파일을 사용할 수 있습니다. 아직도 vfs :/URL에서 openStream()을 할 수없는 이유를 설명하지 못했습니다.

import org.jboss.vfs.*; 

URLConnection conn = new URL("vfs:/...").openConnection(); 
VirtualFile vf = (VirtualFile)conn.getContent(); 
InputStream is = vf.openStream(); 
10

이전 대답은 여전히 ​​읽을 수없는 스트림을 생성합니다.

VirtualFile에서 참조하는 실제 File을 얻을 수 있지만 반환 된 결과는 찾고있는 실제 파일이있는 디렉토리에서 contents /라는 디렉토리를 참조합니다. 따라서 :

import org.jboss.vfs.*; 

    String filename = ...; 
    URLConnection conn = new URL("vfs:/...").openConnection(); 
    VirtualFile vf = (VirtualFile)conn.getContent(); 
    File contentsFile = vf.getPhysicalFile(); 
    File dir = contentsFile.getParentFile(); 
    File physicalFile = new File(dir, filename); 
    InputStream is = new FileInputStream(physicalFile); 

무슨 혼란인가. 나는 여전히 원래 질문을 이해하지 못한다. 그래서 JBoss가 읽을 수없는 URL을 나에게 건네 겠는가? 하지만 적어도 나는 앞으로 나아갈 수 있습니다.

관련 문제