Network Deployment (Distributed operating systems), v8.0 > Scripting the application serving environment (wsadmin) > Scripting web applications
Configure applications for session management in web modules using scripting
Use scripting and wsadmin.sh to configure applications for session management in web modules.
We can use the AdminApp object to set configurations in an application. Some configuration settings are not available through the AdminApp object. The following task uses the AdminConfig object to configure a session manager for a web module in the application.
Procedure
- Start wsadmin.sh.
- Identify the deployment configuration object for the application and assign it to the deployment variable. For example:
### Jacl
set deployments [$AdminConfig getid /Deployment:myApp/]### Jython
deployments = AdminConfig.getid('/Deployment:myApp/') print deployments
where:
Example output:
myApp(cells/mycell/applications/myApp.ear/deployments/myApp|deployment.xml#Deployment_1)
- Get all the modules in the application and assign them to the modules variable. For example:
### Jacl
set appDeploy [$AdminConfig showAttribute $deployments deployedObject] set mod1 [$AdminConfig showAttribute $appDeploy modules] set mod1 [lindex $mod1 0]Example output:
(cells/mycell/applications/myApp.ear/deployments/myApp:deployment.xml#WebModuleDeployment_1) (cells/mycell/applications/myApp.ear/deployments/myApp:deployment.xml#EJBModuleDeployment_1) (cells/mycell/applications/myApp.ear/deployments/myApp:deployment.xml#WebModuleDeployment_2)### Jython
appDeploy = AdminConfig.showAttribute(deployments, 'deployedObject') mod1 = AdminConfig.showAttribute(appDeploy, 'modules') print mod1Example output:
[(cells/mycell/applications/myApp.ear/deployments/myApp|deployment.xml#WebModuleDeployment_1) (cells/mycell/applications/myApp.ear/deployments/myApp|deployment.xml#EJBModuleDeployment_1) (cells/mycell/applications/myApp.ear/deployments/myApp|deployment.xml#EJBModuleDeployment_2)]
where:
- To obtain a list of attributes that you can set for a session manager, use the attributes command. For example:
### Jacl
$AdminConfig attributes SessionManager### Jython
print AdminConfig.attributes('SessionManager')
where:
Example output:
"accessSessionOnTimeout Boolean" "allowSerializedSessionAccess Boolean" "context ServiceContext@" "defaultCookieSettings Cookie" "enable Boolean" "enableCookies Boolean" "enableProtocolSwitchRewriting Boolean" "enableSSLTracking Boolean" "enableSecurityIntegration Boolean" "enableUrlRewriting Boolean" "maxWaitTime Integer" "properties Property(TypedProperty)*" "sessionDRSPersistence DRSSettings" "sessionDatabasePersistence SessionDatabasePersistence" "sessionPersistenceMode ENUM(DATABASE, DATA_REPLICATION, NONE)" "tuningParams TuningParams"
- Set up the attributes for session manager. The following example sets four top-level attributes in the session manager.
We can modify the example to set other attributes in the session manager, including the nested attributes in Cookie, DRSSettings, SessionDataPersistence, and TuningParms object types.
To list the attributes for those object types, use the attributes command of AdminConfig object. The session manager requires that you set both the defaultCookieSettings and tuningParams attributes before you initialize an application. If you do not set these attributes, the session manager cannot initialize the application, and the application does not start.
### Jacl
set attr0 [list enable true] set attr1 [list enableSecurityIntegration true] set attr2 [list maxWaitTime 30] set attr3 [list sessionPersistenceMode NONE] set attr4 [list enableCookies true] set attr5 [list invalidationTimeout 45] set tuningParmsDetailList [list $attr5] set tuningParamsList [list tuningParams $tuningParmsDetailList] set pwdList [list password 95ee608] set userList [list userId Administrator] set dsNameList [list datasourceJNDIName jdbc/session] set dbPersistenceList [list $dsNameList $userList $pwdList] set sessionDBPersistenceList [list $dbPersistenceList] set sessionDBPersistenceList [list sessionDatabasePersistence $dbPersistenceList] set kuki [list maximumAge 1000] set cookie [list $kuki] set cookieSettings [list defaultCookieSettings $cookie] set sessionManagerDetailList [list $attr0 $attr1 $attr2 $attr3 $attr4 $cookieSettings $tuningParamsList $sessionDBPersistenceList] set sessionMgr [list sessionManagement $sessionManagerDetailList] set id [$AdminConfig create ApplicationConfig $appDeploy [list $sessionMgr] configs] set targetMappings [lindex [$AdminConfig showAttribute $appDeploy targetMappings] 0] set attrs [list config $id] $AdminConfig modify $targetMappings [list $attrs]The last five lines in the sample above assume that you deployed the web module to only one target server. We can target a module to multiple servers or clusters, by using a loop, if to apply the update to each target. Replace the last six lines of the sample above with the following code to apply updates to multiple targets:
set id [$AdminConfig create ApplicationConfig $appDeploy [list $sessionMgr] configs] set targetMappings [lindex [$AdminConfig showAttribute $appDeploy targetMappings] 0] foreach target $targetMappings { if {[regexp DeploymentTargetMapping $target] == 1} { set attrs [list config $id] $AdminConfig modify $target [list $attrs] } }Example output using Jacl:
sessionManagement {{enableSecurityIntegration true} {maxWaitTime 30} {sessionPersistenceMode NONE} {enabled true}}### Jython
attr0 = ['enable', 'true'] attr1 = ['enableSecurityIntegration', 'true'] attr2 = ['maxWaitTime', 30] attr3 = ['sessionPersistenceMode', 'NONE'] attr4 = ['enableCookies', 'true'] attr5 = ['invalidationTimeout', 45] tuningParmsDetailList = [attr5] tuningParamsList = ['tuningParams', tuningParmsDetailList] pwdList = ['password', '95ee608'] userList = ['userId', 'Administrator'] dsNameList = ['datasourceJNDIName', 'jdbc/session'] dbPersistenceList = [dsNameList, userList, pwdList] sessionDBPersistenceList = [dbPersistenceList] sessionDBPersistenceList = ['sessionDatabasePersistence', dbPersistenceList] kuki = ['maximumAge', 1000] cookie = [kuki] cookieSettings = ['defaultCookieSettings', cookie] sessionManagerDetailList = [attr0, attr1, attr2, attr3, attr4, cookieSettings, tuningParamsList, sessionDBPersistenceList] sessionMgr = ['sessionManagement', sessionManagerDetailList] id = AdminConfig.create('ApplicationConfig', appDeploy,[sessionMgr], 'configs') targetMappings = AdminConfig.showAttribute(appDeploy, 'targetMappings') targetMappings = targetMappings[1:len(targetMappings)-1] print targetMappings attrs = ['config', id] AdminConfig.modify(targetMappings,[attrs])The last six lines in the sample above assume that you deployed the web module to only one target server. We can target a module to multiple servers or clusters, by using a loop, to apply the update to each target. Replace the last six lines of the sample above with the following code to apply updates to multiple targets:
id = AdminConfig.create('ApplicationConfig', appDeploy,[sessionMgr], 'configs') targetMappings = AdminConfig.showAttribute(appDeploy, 'targetMappings') targetMappings = targetMappings[1:len(targetMappings)-1].split(" ") for target in targetMappings: if target.find('DeploymentTargetMapping') != -1: attrs = ['config', id] AdminConfig.modify(target,[attrs]) #endif #endforExample output using Jython:
[sessionManagement, [[enableSecurityIntegration, true], [maxWaitTime, 30], [sessionPersistenceMode, NONE]]
- Set up the attributes for the web module. For example:
### Jacl
set nameAttr [list name myWebModuleConfig] set descAttr [list description "Web Module config post create"] set webAttrs [list $nameAttr $descAttr $sessionMgr]Example output:
{name myWebModuleConfig} {description {Web Module config post create}} {sessionManagement {{enableSecurityIntegration true} {maxWaitTime 30} {sessionPersistenceMode NONE} {enabled true}}}### Jython
nameAttr = ['name', 'myWebModuleConfig'] descAttr = ['description', "Web Module config post create"] webAttrs = [nameAttr, descAttr, sessionMgr]Example output:
[[name, myWebModuleConfig], [description, "Web Module config post create"], [sessionManagement, [[enableSecurityIntegration, true], [maxWaitTime, 30], [sessionPersistenceMode, NONE], [enabled, true]]]]
where:
- Create the session manager for each web module in the application. We can modify the following example to set other attributes of the session manager in a web module configuration. We must also define a target mapping for this step.
### Jacl
foreach module $mod1 { if {[regexp WebModuleDeployment $module] == 1} { set moduleConfig [$AdminConfig create WebModuleConfig $module $webAttrs] set targetMappings [lindex [$AdminConfig showAttribute $module targetMappings] 0] set attrs [list config $moduleConfig] $AdminConfig modify $targetMappings [list $attrs] } }We can add an optional, additional loop to assign new web module configuration to each target, if the web module is deployed to more than one target server:
foreach module $mod1 { if {[regexp WebModuleDeployment $module] == 1} { set moduleConfig [$AdminConfig create WebModuleConfig $module $webAttrs] set targetMappings [lindex [$AdminConfig showAttribute $module targetMappings] 0] foreach target $targetMappings { if {[regexp DeploymentTargetMapping $target] == 1} { set attrs [list config $moduleConfig] $AdminConfig modify $target [list $attrs] } } }### Jython
arrayModules = mod1[1:len(mod1)-1].split(" ") for module in arrayModules: if module.find('WebModuleDeployment') != -1: AdminConfig.create('WebModuleConfig', module, webAttrs) targetMappings = targetMappings[1:len(targetMappings)-1] attrs = ['config', moduleConfig] AdminConfig.modify (targetMappings, [attrs])We can add an optional, additional loop to assign new web module configuration to each target, if the web module is deployed to more than one target server:
arrayModules = mod1[1:len(mod1)-1].split(" ") for module in arrayModules: if module.find('WebModuleDeployment') != -1: moduleConfig = AdminConfig.create('WebModuleConfig', module, webAttrs) attrs = ['config', moduleConfig] targetMappings = AdminConfig.showAttribute(appDeploy, 'targetMappings') targetMappings = targetMappings[1:len(targetMappings)-1].split(" ") for target in targetMappings: if target.find('DeploymentTargetMapping') != -1: attrs = ['config', moduleConfig] AdminConfig.modify(target,[attrs])
Example output:
myWebModuleConfig(cells/mycell/applications/myApp.ear/deployments/myApp|deployment.xml#WebModuleConfiguration_1)If you do not specify the tuningParamsList attribute when you create the session manager, you will receive an error when you start the deployed application.
- Save the configuration changes.
Save the configuration changes:
AdminConfig.save()
- In a network deployment environment only, 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")
Session management support
Start the wsadmin scripting client using wsadmin.sh
Configure applications for session management using scripting
Configure session management by level
Develop session management in servlets
Use the script library to automate the application serving environment using wsadmin.sh
Use the wsadmin scripting AdminConfig object for scripted administration