我正在研究一个Web应用程序,但我需要调用某些专有的C++库函数。据我所知,本机方法不是线程安全的,因此,本地代码中的访问冲突可能会导致应用程序服务器JVM崩溃。 (Tomcat)的。这个本地API只是整个Web应用程序功能的一小部分,我想说只有5%的用户会访问这个功能。无论测试的应用程序有多彻底(我无法访问本地源代码),本地库中存在潜在错误的风险都可能导致整个应用程序服务器注销用户并导致可能的停机时间。在Servlet容器中使用JNI库
所以这个问题 - 哪种策略更好?
1)我是否应该将本机库封装在单独的进程中,以便主Web服务器不受本机代码中的错误影响。我大概可以使用UNIX套接字与我的Web服务器上的这个独立进程进行通信。 (避免TCP套接字的开销)。如果发生这种情况,请尽快解决问题,并接受5%用户的停机时间。
或者
2)硬着头皮继续在servlet容器使用JNI。 (随着对每个人潜在的停机时间的风险)
问候, 罗希特
“本地方法不是线程安全的” - 不正确!它们要么是线程安全的,要么取决于设计。你也可以在非同步java外观中包装非线程安全的方法。 – Wheezil