加载原生

时间:2015-05-21 08:31:58

标签: java maven tomcat

我们已经开始使用此版本的新内部构建授权库。它在内部加载一个本机文件.so,然后执行它所拥有的任何内容(之前它基于正则表达式)。

现在在我们的应用程序中,我们有2个不同的war文件,这些文件部署在生产中的同一个tomcat上。它们都使用此授权库,因此这两个类加载器都尝试两次加载本机文件。 jvm当然不允许哪一个,因为你只能加载一次。

java.lang.UnsatisfiedLinkError: Native Library /usr/lib64/xxxx-0.1.0.so already loaded in another classloader
   at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1903)
   at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1855)
   at java.lang.Runtime.loadLibrary0(Runtime.java:870)
   at java.lang.System.loadLibrary(System.java:1122)
   ....

这个问题的一个解决方案是,我们将这个授权jar放在tomcat / lib中。因为tomcat公共类加载器加载它,它们自动可用于子类加载器(所以war文件),每个人都可以访问它。但这个解决方案需要特殊维护。而且我不喜欢这种调整。如果可能的话,我可以在我的maven pom中做一些配置。

这种问题还有其他更简单的解决方案吗?它是纯粹的弹簧应用,以maven为基础。

0 个答案:

没有答案
相关问题