2017-03-16 5 views
0

JAI 1.3.0의 ImageIO 클래스를로드 할 수 없습니다. Java 6 및 WAS (Web Application Server) 8.5. 내 코드는 Java 6 및 WAS (7.0.19)에서 제대로 작동합니다.WAS 8.5에서 javax.imageio.ImageIO 클래스를로드 할 수 없습니다.

나는 pom에 종속성을 제대로 언급했다. 어떤 사람이 같은 문제인지 아닌지를 알아야합니다.

byte[] imgBytes = imagesVO.getImgBytes(); 
BufferedImage image = ImageIO.read(new ByteArrayInputStream(imgBytes)); 

따라서 image 값이 null오고, 내 서버가 실행 중에 할 수 부하 ImageIO에서 클래스없는 것 같다. TIFF 형식 파일을 imagesVO에 전달하려고합니다.

답변

2

해당 릴리스에 추가 된 일부 클래스 로더 누출 방지 로직의 일부로 ImageIO 라이브러리와 관련하여 WAS 8.5에서 동작이 변경되었습니다. 누출 방지 기능이 활성화되면 ImageIO 라이브러리는 응용 프로그램이 제공하는 (영구적으로 Java EE 클래스 로딩의 동적 특성에 친숙하지 않으므로 영구적으로) 연결을 방지하기 위해 서버 시작 프로세스의 일부로 즉시 인스턴스화됩니다 구현 클래스. 부작용은 응용 프로그램 클래스가 있기 전에 라이브러리가 인스턴스화되기 때문에 응용 프로그램에서 제공하는 모든 플러그인을 찾을 수 없다는 것입니다.

이 몇 잠재적 해결 방법이 있습니다 : 당신이 당신의 작업을 수행하기 전에

1) 명시 적으로() ImageIO.scanForPlugins를 호출합니다. 그러면 ImageIO가 스레드 컨텍스트 클래스 로더를 사용하여 플러그인 클래스에 대한 다시 검사를 수행하면 사용자가 선택됩니다. 이것은 시스템 레벨 ImageIO 라이브러리에서 응용 프로그램 클래스로의 영구 참조를 야기하므로 JVM을 다시 시작하지 않고 응용 프로그램을 다시 시작하면 클래스 로더가 유출됩니다 (이전 WebSphere 버전에서 이미 발생 했으므로 아마도 당신에게 큰 문제는 아닙니다).

2) 서버에서 클래스 로더 유출 방지를 비활성화하십시오. 시스템 등록 정보 (com.ibm.ws.runtime.component.disableMemoryLeakService = true)로이를 수행 할 수 있습니다. 클래스 로더의 누수에 관해서도 같은주의 사항이 적용됩니다.

3) JVM 클래스 경로에 필요한 ImageIO 라이브러리를 추가하십시오. JVM 수준의 클래스 경로 수정을 요구하는 상황은 극히 적지 만 그 중 하나입니다. ImageIO는 서버 시작 중에 플러그인을 검색하고 플러그인을 찾습니다 (JVM 클래스 경로에 있으므로). 보너스로 애플리케이션 클래스 로더가 유출되지 않습니다.

관련 문제