我正在Linux的Websphere Liberty下安装多个应用程序。每个应用程序都需要引用相同的共享库,该共享库会加载本机驱动程序。该库必须加载到其自己的类加载器中。
在以前的Websphere(8+)版本中,使用UI以这种方式配置库非常简单:设置范围,为其命名,在类路径上标识jar,提供本机库路径,然后选中“使用隔离的类加载器”。对于自由来说是不同的。
在Websphere Liberty下进行类似操作的做法是什么?
假设以下内容:
classpaths:
/usr/acc/lib/jars/firstjar-1.0.jar
/usr/acc/lib/jars/secondjar-1.0.jar
/usr/acc/lib/3rdparty/thirdjar-1.0.jar
本地驱动程序:
/usr/acc/lib/3rdparty/driver.so
这意味着以下应为正确:
<library id="MyLibrary">
<file name="/usr/acc/lib/jars/firstjar-1.0.jar"/>
<file name="/usr/acc/lib/jars/secondjar-1.0.jar"/>
<file name="/usr/acc/lib/3rdparty/thirdjar-1.0.jar"/>
<file name="/usr/acc/lib/3rdparty/driver.so"/>
</library>
<application id="applicationWAR" location="application.war" name="applicationName" type=”war” autoStart="true">
<classloader commonLibraryRef="MyLibrary"/>
<application/>
这是否有效,或者我需要将-Djava.library.path=/usr/acc/lib/3rdparty
添加到jvm.options
文件中吗?
在被询问时,对Liberty实例的访问受到限制,因此apps.xml的设计是通过推测,需要这个问题。
以上是正确的; apps.xml
中的库声明应保留在所有应用程序声明之上。不需要更新jvm.options
。快捷方式也可以使用fileset
来接受,并且应用程序可以引用多个以逗号分隔的库。演示如下:
<!-- library from above question -->
<library id="MyLibrary">
<file name="/usr/acc/lib/jars/firstjar-1.0.jar"/>
<file name="/usr/acc/lib/jars/secondjar-1.0.jar"/>
<file name="/usr/acc/lib/3rdparty/thirdjar-1.0.jar"/>
<file name="/usr/acc/lib/3rdparty/driver.so"/>
</library>
<!-- short-hand using fileset -->
<library id="AnotherLib">
<fileset dir="/usr/acc/lib/2ndparty/" includes="*.jar" />
<file name="/usr/acc/lib/2ndparty/driver.so" />
</library>
<!-- short-hand using fileset and no .so file; includes can be *.* -->
<library id="ThirdLib">
<fileset dir="/usr/acc/lib/3/" includes="*.jar" />
</library>
<application id="applicationWAR" location="application.war" name="applicationName" type=”war” autoStart="true">
<classloader commonLibraryRef="MyLibrary,AnotherLib,ThirdLib"/>
<application/>