在我的应用程序中,我正在使用Jnetpcap
本机库。使用static
本身中的jar
块加载本机库。
启动后将应用程序重新加载到JBOSS
时,它可以正常工作。
一旦进行任何重新部署而没有重新启动JBOSS
,该应用程序将无法注册该库并抛出UnsatisfiedLinkError
。
同样,如果我重新启动JBOSS,它可以正常工作。
JBoss版本:JBoss EAP 6.2.0.GA
在Windows中,库位于类路径中;在Linux中,库位于\ usr \ lib中。
堆栈跟踪:
01:41:48,829错误[org.springframework.batch.core.step.AbstractStep]
(pool-6-thread-1)执行步骤时遇到错误:
java.lang.UnsatisfiedLinkError:
com.slytechs.library.NativeLibrary.dlopen(Ljava / lang / String;)J在
com.slytechs.library.NativeLibrary.dlopen(本机方法)
[jnetpcap-1.4.r1425.jar:1.4.r1425]在
com.slytechs.library.NativeLibrary。(来源不明)
[jnetpcap-1.4.r1425.jar:1.4.r1425]在
com.slytechs.library.JNILibrary。(来源不明)
[jnetpcap-1.4.r1425.jar:1.4.r1425]在
com.slytechs.library.JNILibrary.loadLibrary(来源不明)
[jnetpcap-1.4.r1425.jar:1.4.r1425]在
com.slytechs.library.JNILibrary.register(未知来源)
[jnetpcap-1.4.r1425.jar:1.4.r1425]在
com.slytechs.library.JNILibrary.register(未知来源)
[jnetpcap-1.4.r1425.jar:1.4.r1425]在
com.slytechs.library.JNILibrary.register(未知来源)
[jnetpcap-1.4.r1425.jar:1.4.r1425]在
org.jnetpcap.Pcap(来源不明)
[jnetpcap-1.4.r1425.jar:1.4.r1425]
最佳答案
您遇到的问题是,本机库先前是由现已失效的部署先前加载的,无法再次加载。
使用JBoss EAP(Wildfly)解决此问题的方法是创建一个加载本机代码的模块。您的应用程序的其余部分(在war或ear文件中)记录了对该模块的依赖关系,并且将仅加载一次。