2011-11-04 5 views
1

원시 코드에서 JVM을 시작한 다음 Jetty를 시작합니다. 웹 응용 프로그램은 JPeripheral이라는 라이브러리를로드합니다. 네이티브 런처와 JPeripheral은 모두 Jace라는 네이티브 라이브러리에 의존합니다. > sun.misc.Launcher $ AppClassLoader - -> sun.misc.Launcher $ ExtClassLoaderJetty가 상위 ClassLoader에서 클래스를로드하도록 강제

WebAppClassLoader : 제이스 자바를로드하는 웹 애플리케이션의 시도가 발생하는 경우 : 여기

java.lang.UnsatisfiedLinkError: Native Library jace.dll already loaded in another classloader

는 웹 애플리케이션 내부의 클래스 로더 계층 구조입니다

Jace.dll 및 부두는 모두 (기본 시작 프로그램에 의해 사용) sun.misc.Launcher$AppClassLoader에 의해로드됩니다. JPeripheral은 WebAppClassLoader에 의해로드됩니다.

이 문제를 해결하는 한 가지 방법은 sun.misc.Launcher$AppClassLoader에서 JPeripheral을로드하는 것입니다 (jace.dll이 동일한 Classloader에서 두 번로드 됨). 어떻게해야합니까?

답변

1

이()는 WebAppContext.addSystemClass 사용하여 부모 클래스 로더에서 JPeripheral를로드 WebAppClassLoader을 강제 할 수 있다고 밝혀졌습니다. 내 경우에는 WebAppContext.addSystemClass("org.jperipheral.") 트릭을 했어.

관련 문제