将*.so文件加载到Websphere

6

我的JSP程序设置在HP-UX上的Websphere上运行。

我有一些.jar文件和一个.so文件,其中包含程序运行所需的类。

将我的.jar文件放入\MyProgram\WEB-INF\lib\文件夹中,我能够使某些文件正常工作。

但是,我看到了一个UnsatisfiedLinkError,这是由于我的lib.so文件无法被识别所导致的。

我找到的其中一种方法是:

  1. 在管理控制台中,转到环境->共享库->新建

  2. 将.jar文件位置输入Classpath,将.so文件位置输入到Native Library Path中

  3. 在管理控制台中,转到应用程序->应用程序类型->企业应用程序

  4. 在MyProgram下方,转到共享库参考->共享库映射,并通过将其从“可用”移动到“已选”来为程序分配库。

我有两个问题:

  1. 我是否可以直接从我的程序的\lib\文件夹中让.jar文件和.so文件工作?

  2. 如果不行,是否有可能从我的应用程序文件夹中列出classpath和本地库路径?例如使用一个Websphere变量目录%MYPROGRAM%\WEB-INF\lib\lib.so上传我的application.war,而不是将文件放在具有绝对路径C:\IBM\WebSphere\AppServer\bin\lib.so的物理服务器上?

[编辑-01]以下是更多细节:

收到的错误:"Error 500: java.lang.UnsatisfiedLinkError: com.chrysalisits.crypto.LunaAPI.Initialize()V"

我试图让Websphere与LunaSA HSM进行交互以检索公钥/私钥。他们提供了libLunaAPI.sl、libLunaAPI.so、LunaJCASP.jar、LunaJCESP.jar给我。从IBM的Websphere V8 -> 引用 -> 类加载异常中可以看出,我需要HP-UX的*.so文件,所以我相应地做了。设置的路径为绝对路径,我已在Websphere中指定。这涉及到我的第二个问题。

第一个问题是我想知道是否可以将这些文件放入myProgram.war中并从那里运行,而不是使用WinSCP访问服务器并将文件放在绝对路径引用的位置。也许可以指定上述文件位于我的程序下的\WEB-INF\lib\中。这是因为只有我的程序将访问LunaSA HSM。

** PS. 我尝试了两种方法,但仍然失败。唉。


从WebSphere文档(至少到版本7;我没有查看过那之后的版本)中可以看出,本地库似乎只能从系统路径或共享库加载。也就是说,不能从单个Web应用程序的部署路径加载。我不认为我理解你的第二个问题。 - dbreaux
1
嗨,dbreaux,我正在尝试让Websphere从LunaSA HSM检索密钥。不幸的是,一个UnsatisfiedLinkError一直在告诉我有些东西出了问题:"Caused by: java.lang.UnsatisfiedLinkError: com.chrysalisits.crypto.LunaAPI.Initialize()V at com.chrysalisits.crypto.LunaAPI.Initialize(Native Method) at com.chrysalisits.crypto.LunaTokenManager.<init>(LunaTokenManager.java:107) at com.chrysalisits.crypto.LunaTokenManager.getInstance(LunaTokenManager.java:62) at com.chrysalisits.cryptox.LunaJCEProvider.<init>(LunaJCEProvider.java:149) at ..." - Em Cee
我实际上尝试将.war和.so文件放置到Websphere目录中并在分配库给我的程序之前进行链接。错误仍然发生,不太确定这是否是将库链接到程序的正确方法。 - Em Cee
1
UnsatisfiedLinkError 表示您可能没有调用 System.loadLibrary,调用失败或库中不包含适当命名的本机方法。如果调用失败,我们需要查看异常堆栈跟踪以确定原因。如果调用成功,本机方法在独立的 JVM 中是否有效? - Brett Kail
是的。在我用另一个64位版本替换了.so文件之后,UnsatisfiedLinkError错误不再存在了。我看到了一个“CrystokiConnect失败”的编程错误。猜想那是另一个时间的问题了。谢谢。 - Em Cee
1个回答

1
对于共享库的实现,我认为您只需在本地库路径中指定目录,而不是文件名。也就是说,使用您当前的文件位置,/opt/apps/WebSphere/AppServer/bin
另一方面,我希望该目录已经在WebSphere的WAS_LIBPATHSHLIB_PATH中,因此根本不需要列出它。(请检查$WAS_HOME/bin/setupCmdLine.sh。)
但是,我认为最好在某个地方创建一个子目录来存储您的luna文件,并将共享库本地库路径指向该目录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接