2016-07-13 3 views
0

우리는 두 애플리케이션 모두 표준 Java의 ImageIO를 사용하지만 추가 라이브러리를 사용하여 더 많은 독자를 추가하는 WebSphere 애플리케이션 서버에 여러 개의 웹 애플리케이션을 배치했습니다/작가.적절한 스코프로 javax.imageio.spi.IIORegistry의 인스턴스를 얻는 방법

이제는 두 응용 프로그램 모두 IIORegistry.getDefaultInstance()을 사용하여 서비스 레지스트리 인스턴스를 가져오고 두 응용 프로그램 모두 동일한 인스턴스를 얻는 것처럼 보입니다. 내부적으로 이것은 동일한 awt AppContext를 반환하는 AppContext.getAppContext()과 관련이 있습니다. 동일한 라이브러리를 사용하는 두 앱을 신경 쓰지 않고 Java의 ImageIO를 사용하여 여러 WebSphere Application을 사용하는 적절한 방법이 있습니까? WebSphere Application을위한 awt AppContext를 수동으로 만들어야합니까?

답변

0

웹 응용 프로그램 컨텍스트와 혼동하지 말고 응용 프로그램 컨텍스트 개념 (원래 IIORegistry 클래스에 사용 된 개념)은 원래 애플릿 (예 : 브라우저의 단일 JVM에서 실행중인 여러 애플릿) 용이었습니다. 웹 애플 리케이션의 경우, 이것은 또한 의미가 있지만, 나는 그렇게 생각하지 않는다. 또한 앱 컨텍스트를 만들거나 유지 관리하는 것과 관련된 공용 API 클래스 또는 메서드 (모두 sun.awt.* 패키지에 있음)가 있다고 생각하지 않으므로 수동으로 컨텍스트를 만드는 것은 좋지 않습니다.

웹 응용 프로그램에서 ImageIO을 사용하여 일부 문제를 해결할 수 있도록 web context listener을 만들었습니다. 즉, 웹 응용 프로그램이로드/언로드 될 때 ("오래된"플러그인의 검색과 제거 모두를 처리 할 때) 웹 응용 프로그램 "로컬"플러그인을 등록 및 등록 취소합니다. 불행히도, 이것이 다른 웹 앱의 웹 앱 플러그인에 숨기지 않을 것입니다. 귀하의 의도 인 경우 (질문에서 알기 어렵습니다).

웹 응용 프로그램 당 AppContext을 갖는 것이 더 깨끗한 접근 방법이지만, 언급 한 바와 같이 공용 API가없고 "표준"방법이 없으면 이러한 솔루션을 이식 할 수 없으므로 바람직하지 않습니다.

+0

답장을 보내 주셔서 감사 드리며 실제로 웹 앱의 플러그인을 다른 웹 앱의 플러그인으로 숨길 수 있습니다. 원하지 않는 NoClassDefFoundErrors는 다른 쪽이 제대로 작동하지 못하게하므로 두 웹 앱 모두 동일한 라이브러리 집합을 공유해야합니다 (가능하지만 어쩐지 이상한 경우). 또는 두 번째 웹 애플리케이션을 어떤 방식으로 다른 웹 애플리케이션에 숨길 수있는 방법이 있어야합니다. –

+0

@ThomasW이 방법을 구현하는 가장 쉬운 방법은 단순히 웹 애플리케이션별로 하나씩 여러 개의 WebSphere 인스턴스를 실행하는 것입니다. – haraldK

+0

@ThomasW 생각해 보라. 같은 컨테이너 안에서 가능할 수도있다. 그러나 웹 애플리케이션 컨텍스트 당 'ThreadGroup'을 사용하도록 WebSphere를 구성하는 방법이 필요합니다. 그게 가능하다면 나는 확신하지 못합니까? 어쨌든, 나는 다른 스레드 그룹이 실제로 문서화 된 것과 같이 다른 'IIORegistry' 인스턴스를 얻는다는 것을 증명하기 위해 빠른 PoC를 썼다. – haraldK

관련 문제