2011-11-04 28 views
1

我从本机代码启动JVM,然后启动Jetty。一个webapp然后加载一个名为JPeripheral的库。本地启动器和JPeripheral都依赖一个名为Jace的本地库。当Web应用程序试图加载Java的的Jace抛出:强制Jetty加载父类ClassLoader中的类

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

这里是Web应用程序内的类加载器的层次结构:

WebAppClassLoader - > sun.misc.Launcher $ AppClassLoader - > sun.misc.Launcher $的ExtClassLoader

Jace.dll和Jetty都由sun.misc.Launcher$AppClassLoader加载(由本地启动器使用)。 JPeripheral由WebAppClassLoader加载。

解决此问题的一种方法是从sun.misc.Launcher$AppClassLoader加载JPeripheral(所以jace.dll从同一个Classloader中加载两次)。我怎么做?

回答

1

事实证明,您可以强制WebAppClassLoader使用WebAppContext.addSystemClass()从父类ClassLoader加载JPeripheral。在我的情况下,WebAppContext.addSystemClass("org.jperipheral.")做到了。

相关问题