2009-11-09 6 views
0

Java EE로 포팅하려는 레거시 애플리케이션이 있습니다. 현재이 애플리케이션은 URL.setURLStreamHandlerFactory()를 호출하여 일부 맞춤 URL 프로토콜 핸들러를 등록합니다. glassfish는 이미 공장을 등록했기 때문에 Glassfish v 2.1 및 3에서는이 호출이 실패합니다.glassfish의 새 URLStreamHandler

java.protocol.handler.pkgs 시스템 속성을 사용해 보았지만 클래스 로더 문제로 인해 작동하지 않습니다. 처리기 클래스는 모두 응용 프로그램의 일부이므로 컨테이너의 클래스 경로에 jar 파일을 추출하려고하지 않습니다.

나는 osgi 번들을 가지고있다. 분명히 새로운 프로토콜을 다룰 Bundle을 쓸 수있다. 나는이 웹 응용 프로그램을 osgi 번들 (한 번에 한 단계 씩 만들려고합니다 .EE 먼저 작성한 다음 필요한 경우 osgi)에 관심이 있습니다.

WEB-INF/lib 디렉토리에 번들 jar 파일을 가져 와서 Glassfish가 번들로로드 할 수 있습니까? 번들은 웹 응용 프로그램 (WEB-INF/lib의 다른 jar 또는 WEB-INF/classes)에서 패키지를 가져와야합니다. 이 앱을 EAR로 패키징하고 싶다면 더 이상 모르게 전체 애플리케이션을 osgifying 할 수 없습니다.

답변

1

내 문제를 해결했습니다. 분명히 java.protocol.handler.pkgs 시스템 속성이 제대로 작동하므로 일부 전선이 교차했습니다.

다른 사람들이 걸려 넘어지면 내 WAR의 WEB-INF/lib 디렉토리뿐 아니라 $ DOMAINDIR/lib/ext /에 핸들러가있는 병을 넣습니다. 내 응용 프로그램의 구성에서도 jvm 옵션을 추가했습니다. -Djava.protocol.handler.pkgs = my.handlers.pkg.prefix

글래스 피쉬 2.1에서 알아 봤습니다. 접두어를 붙이면 jvm 옵션없이 작동합니다. 글래스 피쉬 3에서는 felix (osgi 구현 글래스 피시가 사용)가 각 요청이 아닌 서버 시작시에만 속성을 참조하기 때문에 jvm 옵션이 필요합니다.