Configure a shared library using scripting
Use scripting to configure a shared library for application servers. Shared libraries are files used by multiple applications. Create a shared library to reduce the number of duplicate library files on the system.
There are two ways to complete this task. The example in this topic uses the AdminConfig object to create and configure a shared library. Alternatively, we can use the createSharedLibrary script in the AdminResources script library to configure shared libraries.
The scripting library provides a set of procedures to automate the most common administration functions. We can run each script procedure individually, or combine several procedures to quickly develop new scripts.
Tasks
- Start the wsadmin scripting tool.
- Identify the server and assign it to the server variable. For example:
- Jacl:
set serv [$AdminConfig getid /Cell:mycell/Node:mynode/Server:server1/]- Jython:
serv = AdminConfig.getid('/Cell:mycell/Node:mynode/Server:server1/') print serv
Element Description set Jacl command serv Variable name $ Jacl operator for substituting a variable name with its value AdminConfig Object representing the WebSphere Application Server configuration getid AdminConfig command Cell Attribute mycell Value of the attribute Node Attribute mynode Value of the attribute Server Attribute server1 Value of the attribute Example output:
server1(cells/mycell/nodes/mynode/servers/server1|server.xml#Server_1)- Create the shared library in the server.
Following are examples of how to create the shared library using either Jacl or Jython.
- Jacl: (Dist)
$AdminConfig create Library $serv {{name mySharedLibrary} {classPath c:/mySharedLibraryClasspath}}(ZOS)$AdminConfig create Library $serv {{name mySharedLibrary} {classPath /mySharedLibraryClasspath}}(iSeries)$AdminConfig create Library $serv {{name mySharedLibrary} {classPath /home/myProfile/mySharedLibraryClasspath}}- Jython: (Dist)
print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath', 'c:/mySharedLibraryClasspath']])(ZOS)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath', '/mySharedLibraryClasspath']])(iSeries)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath', 'home/myProfile/mySharedLibraryClasspath']])
- If we are using Jython, and the classpath does not contain any spaces, we can use a semicolon (;) or a space as a separator. For example:
AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath','test1.jar;test2.jar;test3.jar']])orAdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath','test1.jar test2.jar test3.jar']])- If we are using Jacl, and the classpath contains one or more spaces, add additional braces or quotation marks around the classpath. For example:
$AdminConfig create Library $serv {{name mySharedLibrary} {classPath {c:/JDBC Driver/test.jar}}}or$AdminConfig create Library $serv {{name mySharedLibrary} {classPath "c:/JDBC Driver/test.jar"}}- If we are using Jython, and the classpath contains one or more spaces, we must use a semicolon (;) as a separator. For example:
AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath','c:/JDBC Driver/test.jar;a.jar']])or if there is only one path:AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath','test1.jar test2.jar test3.jar']])- If we are using Jython, and the classpath contains one or more spaces, add additional brackets or quotation marks around the classpath. For example:(Dist)
print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], [['classPath', 'c:/JDBC Driver/test.jar']]])(ZOS)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], [['classPath', '/JDBC Driver/test.jar']]])(iSeries)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], [['classPath', 'home/myProfile/JDBC Driver/test.jar']]])or (Dist)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath', "'c:/JDBC Driver/test.jar'"]])(ZOS)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath', "'/JDBC Driver/test.jar'"]])(iSeries)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath', "'home/myProfile/JDBC Driver/test.jar'"]])- Use Jython, if the classpath contains more than one path, we can use either list syntax, or string syntax delimited by a semicolon to specify the multiple classpaths.
Use list syntax :
(Dist)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], [classPath [test1.jar test2.jar test3.jar]]]')(ZOS)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath [test1.jar test2.jar test3.jar]]]')(iSeries)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath [test1.jar test2.jar test3.jar]]]')Use string syntax delimited by a semicolon:
(Dist)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], [classPath,'test1.jar;test2.jar;test3.jar']])(ZOS)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], [classPath,'test1.jar;test2.jar;test3.jar']])(iSeries)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], [classPath,'test1.jar;test2.jar;test3.jar']])- Use Jython, if the classpath contains more than one path, and one of those classpaths contain one or more spaces, enclose the path string containing the spaces with quotation marks. For example:(Dist)
print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], [classPath [test1.jar "C:/JDBC Driver/test.jar" test3.jar]]]')(ZOS)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath [test1.jar "C:/JDBC Driver/test.jar" test3.jar]]]')(iSeries)print AdminConfig.create('Library', serv, [['name', 'mySharedLibrary'], ['classPath [test1.jar "C:/JDBC Driver/test.jar" test3.jar]]]')
Element Description $ Jacl operator for substituting a variable name with its value AdminConfig object that represents the WAS configuration create n AdminConfig command Library serv Evaluate the ID of the server specified in step number 1 name mySharedLibrary value of the name attribute classPath /mySharedLibraryClasspath Value of the classpath attribute Jython command Example output:
MysharedLibrary(cells/mycell/nodes/mynode/servers/server1|libraries.xml#Library_1)- Identify the application server from the server and assign it to the appServer variable. For example:
- Jacl:
set appServer [$AdminConfig list ApplicationServer $serv]- Jython:
appServer = AdminConfig.list('ApplicationServer', serv) print appServer
Element Description set Jacl command appServer variable name $ Jacl operator for substituting a variable name with its value AdminConfig object that represents the WAS configuration list n AdminConfig command ApplicationServer serv Evaluate the ID of the server specified in step number 1 Jython command Example output:
server1(cells/mycell/nodes/mynode/servers/server1|server.xml#ApplicationServer_1- Identify the class loader in the application server and assign it to the classLoader variable. For example:
- To use the existing class loader associated with the server, the following commands use the first class loader:
- Jacl:
set classLoad [$AdminConfig showAttribute $appServer classloaders] set classLoader1 [lindex $classLoad 0]- Jython:
classLoad = AdminConfig.showAttribute(appServer, 'classloaders') cleanClassLoaders = classLoad[1:len(classLoad)-1] classLoader1 = cleanClassLoaders.split(' ')[0]
Element Description set Jacl command classLoad, classLoader1 variable name $ Jacl operator for substituting a variable name with its value AdminConfig object that represents the WAS configuration showAttribute n AdminConfig command appServer Evaluate the ID of the application server specified in step number 3 classloaders Jython command - To create a new class loader, issue the following command:
- Jacl:
set classLoader1 [$AdminConfig create Classloader $appServer {{mode PARENT_FIRST}}]- Jython:
classLoader1 = AdminConfig.create('Classloader', appServer, [['mode', 'PARENT_FIRST']])
Element Description set Jacl command classLoader1 variable name $ Jacl operator for substituting a variable name with its value AdminConfig object that represents the WAS configuration create n AdminConfig command Classloader appServer Evaluate the ID of the application server specified in step number 3 mode PARENT_FIRST Value of the attribute Jython command Example output:
(cells/mycell/nodes/mynode/servers/server1|server.xml#Classloader_1)- Associate the shared library that we created with the application server through the class loader. For example:
- Jacl:
$AdminConfig create LibraryRef $classLoader1 {{libraryName MyshareLibrary}}
- Jython:
print AdminConfig.create('LibraryRef', classLoader1, [['libraryName', 'MyshareLibrary']])
Element Description $ Jacl operator for substituting a variable name with its value AdminConfig object that represents the WAS configuration create n AdminConfig command LibraryRef classLoader1 Evaluate the ID of the class loader specified in step number 4 libraryName MyshareLibrary Value of the attribute Jython command Example output:
(cells/mycell/nodes/mynode/servers/server1|server.xml#LibraryRef_1)- Save the configuration changes.
AdminConfig.save()- Synchronize the node.
Use the syncActiveNode or syncNode scripts in the AdminNodeManagement script library to propagate the configuration changes to node or nodes.
- Use the syncActiveNodes script to propagate the changes to each node in the cell:
AdminNodeManagement.syncActiveNodes()- Use the syncNode script to propagate the changes to a specific node:
AdminNodeManagement.syncNode("myNode")
Start the wsadmin scripting client Create shared libraries Associating shared libraries with applications or modules Configure a shared library for an application wsadmin AdminConfig Resource configuration scripts Server settings configuration scripts Commands for the AdminConfig object