当前位置: 首页 > 知识库问答 >
问题:

如何处理Tomcat上多个Web应用程序中的共享本机库

公冶兴文
2023-03-14

Tomcat 6.0.35上的两个Web应用程序需要一个库(jar文件)。jar文件中的一个类需要本机库才能运行。

不出所料,我得到了例外

java.lang.UnsatisfiedLinkError: Native Library my-native-library.so 
already loaded in another classloader

如果同时展开两个应用程序。

在 jar 文件中,使用静态块加载本机库

static
{
    try
    {           
        System.loadLibrary("my-native-library.so");

    } catch (UnsatisfiedLinkError e)
    {
        e.printStackTrace();
    }
}

使用本机库的类可以使用xml进行配置。

jar库是我们构建的搜索引擎,因此如果需要,我们可以重建它。

所以我的问题是,我们如何告诉Tomcat my-native-library . so已经被另一个web应用程序加载了,并且这个应用程序可以忽略这个静态块。

编辑:jar库和Web应用程序都在使用maven

谢了。

编辑:据我理解:

搜索引擎库需要 my-native-library.jar 文件来构建到 jar 库中。然后,搜索引擎jar库托管在我们的存储库上,并使用maven构建到我们的Web应用程序中。当服务器启动时,LD_LIBRARY_PATH和具有共享库路径的JAVA_OPTS被公开,服务器只能加载 my-native-library.so 一次。但是,这两个Web应用程序都包含搜索引擎jar和my-native-library.jar将在WEB_INF/ lib中,并且例外。

要从WEB_INF/lib中删除my-native-library.jar,需要在没有必要依赖的情况下重新构建搜索引擎库(my-native-library.jar)。

共有1个答案

酆乐湛
2023-03-14

在这种情况下,我将在Tomcat中的共享类加载器中加载库,这样它在系统中只加载一次。有关更多详细信息,请查看Tomcat类加载器留档:

http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html

 类似资料:
  • 我有一个tomcat 8.0.32运行在windows上。 在tomcat\lib文件夹中,我有一个共享文件夹。jar文件。共享。jar是所有web应用程序都使用的全局共享库。该文件包含一个包含常量的java类: 我有2个Web应用程序正在使用这个CONSTANTVALUE。我删除shared.jar并将一个新shared.jar复制到tomcat\lib中,其中包含一个新的常量值: 我重新启动了

  • 问题内容: 序言 。我想问一下,如何为网络上的桌面屏幕共享创建解决方案,但是后来发现有很多这样的问题。要用几串来回答这个任务是相当复杂的。所以我花了一些时间试图找到合适的解决方案。看来我找到了一个–只想分享。 首要任务 :我们有一个Web应用程序。我们需要找到一种让用户与其他任何用户共享其屏幕的方式。实施于:Win 7 x64,Java,Wowza-3.5.0。 我们怎样才能做到这一点? 问题答案

  • null 这是我第一次尝试将Firebase集成到我的一个项目中,因此一些关于实现这项任务的指导将是非常有用的。 谢了!

  • 我正在尝试在Tomcat上部署多个spring boot web应用程序。所有应用程序都有相同的application.properties。如何拆分在Tomcat上运行的不同应用程序的配置文件。

  • 我将Spring缓存与CacheManager结合使用,并可在10个不同的应用程序中缓存同一表中的相同数据。实现时的假设是,我们缓存的数据是元数据,不应更改。然而,他们正在更改这些数据,缓存永远不会被清除。 现在的要求是通过2个大请求同时清除所有10个应用程序的缓存。 每当mySQL工作台上的直接INSERT语句更改表时,所有应用程序缓存都应该刷新。我使用的是Hibernate和Spring,但请

  • 问题内容: 请考虑以下代码: 这给出了输出 但是,我希望它能给 ..因为在调用触发方法时h.id已更改为“ B”。 似乎是在启动单独的进程时创建了主机实例的副本,因此原始主机中的更改不会影响该副本。 在我的项目中(当然,要更详细地说明),主机实例字段有时会更改,并且由在单独的进程中运行的代码触发的事件可以访问这些更改很重要。 问题答案: 多处理在不同的 流程中 运行东西。事物在发送时 不被 复制几