Shared libraries

Shared libraries are files used by multiple applications. You can use shared libraries and global libraries to reduce the number of duplicate library files on your system. When properly configured, applications and resource adapters may access classes and resources of libraries, but the opposite is not true, libraries have no access to application or resource adapter classes or resources.

Open Liberty The latest documentation about class loader configuration for Liberty is available on the Open Liberty website.

Library elements

Liberty libraries have three child elements, folder, file, and fileset, as shown in the following server.xml file example:
<library>
   <folder dir="..." />
   <file name="..." />
   <fileset dir="..." includes="*.jar" scanInterval="5s" />
</library>
  • folder: All resources under each configured folder are loadable
  • file: Each configured file should be either a native library or a container for resources (such as a JAR or a ZIP file). All resources within a container are loadable and any other filetype that is specified will have no effect.
  • fileset: Each configured fileset is effectively a collection of files. Each file in the fileset should be a native library or a container for resources (such as a JAR or a ZIP file). All resources within a container are loadable and any other filetype that is specified will have no effect.
For example,
<library id="someLibrary">
   <!-- Location of XML and .properties files in the file system for easy editing -->
   <folder dir="${server.config.dir}/editableConfig" />

   <!-- Location of some classes and resources in the file system -->
   <folder dir="${server.config.dir}/extraStuff" />

   <!-- A zip file containing some resources -->
   <file name="${server.config.dir}/lib/someResources.zip" />

   <!-- All the jar files in ther servers lib folder -->
   <fileset dir="${server.config.dir}/lib" includes="*.jar" scanInterval="5s" />
</library>

<application location ="webStore.war">
   <classloader commonLibraryRef="someLibrary" />
</application>
The configuration snippet in the example, allows all resources under the editableConfig directory to be loaded by the webStore application.

Global libraries

Global libraries can be used by any application. JAR files are placed in a global library directory, and then are specified in the class loader configuration for each application.

You can place global libraries in two locations:
  • ${shared.config.dir}/lib/global
  • ${server.config.dir}/lib/global
If there are files present in these locations at the time an application is started, and that application does not have a <classloader> element configured, the application uses these libraries. If a class loader configuration is present, these libraries are not used unless the global library is explicitly referenced.

For more information, see Providing global libraries for all Java™ EE applications.

Resource files

Within Liberty libraries, you can have resource files defined in the library element, as shown in the following server.xml file example
<library>
   <folder dir="..." />
   <file name="..." />
   <fileset dir="..." includes="*.jar" scanInterval="5s" />
   <folder dir="${server.config.dir}/mylibs" />
   <file name="${server.config.dir}/otherlibs/my.jar" />
</library>
The folder setting in the example, allows all files under the mylibs directory to be available on the classpath. You can use this style of entry to have your .xml and .properties available.