在Glassfish Java EE应用程序上部署JNI本机调用时放置共享库的位置
我有一个运行JavaEE6的GlassFish3.1.1Web应用程序。我的一个类具有本机库依赖项。我正在使用JNI来使用这个本机方法。该过程的一部分涉及创建一个共享库.so文件。在我的一个Java类中,将有一个System.Loadlibrary(“库”);调用引用该library.so文件的 我的问题是,为了在Glassfish上访问和使用这个JNI功能,我应该把这个共享库以及它引用的本机代码放在哪里在Glassfish Java EE应用程序上部署JNI本机调用时放置共享库的位置,java,jakarta-ee,glassfish,java-native-interface,native-methods,Java,Jakarta Ee,Glassfish,Java Native Interface,Native Methods,我有一个运行JavaEE6的GlassFish3.1.1Web应用程序。我的一个类具有本机库依赖项。我正在使用JNI来使用这个本机方法。该过程的一部分涉及创建一个共享库.so文件。在我的一个Java类中,将有一个System.Loadlibrary(“库”);调用引用该library.so文件的 我的问题是,为了在Glassfish上访问和使用这个JNI功能,我应该把这个共享库以及它引用的本机代码放在哪里 我需要调用几个C++程序,这些程序可以在机器上的任何地方移动,而GLASISFISH则是在
我需要调用几个C++程序,这些程序可以在机器上的任何地方移动,而GLASISFISH则是在这个机器上运行的。我应该把它们放在domain1/ext文件夹中吗?将它们作为本机库添加到构建路径中的jar中。这是如何做到的?当我在基于Windows的服务器中使用JNI包装的DLL时,请将DLL放入
C:/Windows/System32
您可以尝试在linux计算机上放置.so
/usr/lib64/
请尝试。使用以下Glassfish命令设置本机库所在的路径:
asadmin set server.java-config.native-library-path-prefix=$NATIVE_LIBRARY_PATH
也可以通过管理控制台设置本机库位置。如果希望在移动/重命名库时具有灵活性,可以使用符号链接
这对于通过添加本机库有什么好处 Eclipse构建路径
JVM需要知道本机库路径。如果从Eclipse启动JVM(例如,使用本机库进行单元测试),则需要在Eclipse中配置路径。但是,如果您从Glassfish启动JVM(通过使用Eclipse Glassfish适配器),则需要配置Glassfish本身。+1。绝对比将自己的库粘贴到系统目录要好。通过Eclipse构建路径添加本机库有什么好处?如果我转到构建路径,请选择jar。展开一个jar,我可以编辑一个叫做“本机库”的东西,它的作用是什么?它与设置asadmin server.java配置有什么不同。。。设置。如果您仍在检查此设置,这是否也适用于使项目准备部署到另一台服务器上?我假设如果我一直在服务器上的相同目录中设置文件,我可以使用相同的asadmin调用并在每台机器上设置$NATIVE_LIBRARY_路径?只要每个服务器上的本机库位于同一位置,该命令应该可以在多个Glassfish服务器上工作。您可以将asadmin命令作为生产服务器构建的一部分。@GarrettHall对于依赖于其他lib的lib,因此需要设置LD_LIBRARY_PATH,该怎么办?GF3.1.1似乎没有将LD_LIBRARY_路径设置传递给它创建的子JVM。我建议阅读此问题的公认答案: