Skip to content

Instantly share code, notes, and snippets.

@samolisov
Created October 31, 2017 14:48
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save samolisov/d9005826e062d9e770ee44e6817eb375 to your computer and use it in GitHub Desktop.
Save samolisov/d9005826e062d9e770ee44e6817eb375 to your computer and use it in GitHub Desktop.
Usable WLST scripts for every day WebLogic Application Server administration
#Conditionally import wlstModule only when script is executed with jython
if __name__ == '__main__':
from wlstModule import *#@UnusedWildImport
def configureCluster(clusterName, isUnicast):
cluster = getMBean('/Clusters/' + clusterName)
if cluster == None:
print 'Creating cluster ' + clusterName
cluster = create(clusterName, 'Cluster')
print 'Updating cluster parameters for ' + clusterName
if isUnicast:
cluster.setClusterMessagingMode('unicast')
return cluster
def configureServer(serverName, serverListenAddress, serverListenPort,
cluster, machine, maxStuckThreadCount):
server = getMBean('/Servers/' + serverName)
if server == None:
print 'Creating server ' + serverName
server = create(serverName, 'Server')
print 'Updating server parameters for ' + serverName
server.setListenPort(serverListenPort)
server.setListenAddress(serverListenAddress)
server.setCluster(cluster)
server.setMachine(machine)
print '- Configuring overload protection'
overloadProtection = server.getOverloadProtection()
overloadProtection.setFailureAction('no-action')
overloadProtection.setPanicAction('system-exit')
serverFailureTrigger = getMBean('/Servers/' + serverName + '/OverloadProtection/' + serverName
+ '/ServerFailureTrigger/' + serverName)
if serverFailureTrigger == None:
cd('/Servers/' + serverName + '/OverloadProtection/' + serverName)
serverFailureTrigger = create(serverName, 'ServerFailureTrigger')
cd('/')
serverFailureTrigger.setMaxStuckThreadTime(600)
serverFailureTrigger.setStuckThreadCount(maxStuckThreadCount)
print '- Configuring logging'
serverLog = server.getLog()
serverLog.setRotationType('bySize')
serverLog.setFileMinSize(5000)
serverLog.setNumberOfFilesLimited(java.lang.Boolean('false'))
serverLog.setFileCount(7)
serverLog.setLogFileSeverity('Trace')
serverLog.setStdoutSeverity('Notice')
serverLog.setDomainLogBroadcastSeverity('Off')
webServerLog = server.getWebServer().getWebServerLog()
webServerLog.setLoggingEnabled(java.lang.Boolean('true'))
webServerLog.setRotationType('bySize')
webServerLog.setFileMinSize(5000)
webServerLog.setNumberOfFilesLimited(java.lang.Boolean('false'))
webServerLog.setFileCount(5)
def lookupTarget(targetName):
# try to find the target among servers
target = getMBean('/Servers/' + targetName)
if target == None:
# try to find the target amond migratable targets
target = getMBean('/MigratableTargets/' + targetName)
if target == None:
# try to find the target among clusters
target = getMBean('/Clusters/' + targetName)
return target
def configureFileDataStore(storeName, targetName, directory):
store = getMBean('/FileStores/' + storeName)
if store == None:
print 'Creating File Store ' + storeName
store = create(storeName, 'FileStore')
print 'Updating File Store parameters for ' + storeName
store.setDirectory(directory + store.getName().replace(' ', '_'))
store.setTargets([lookupTarget(targetName)])
return store
def configureJmsServer(serverName, targetName, store):
jmsServer = getMBean('/JMSServers/' + serverName)
if jmsServer == None:
print 'Creating JMS Server ' + serverName
jmsServer = create(serverName, 'JMSServer')
print 'Updating JMS Server parameters for ' + serverName
jmsServer.setPersistentStore(store)
jmsServer.setTargets([lookupTarget(targetName)])
return jmsServer
def configureJmsModule(moduleName, targetName):
jmsModule = getMBean('/JMSSystemResources/' + moduleName)
if jmsModule == None:
print 'Creating JMS Module ' + moduleName
jmsModule = create(moduleName, 'JMSSystemResource')
print 'Updating JMS Module parameters for ' + moduleName
jmsModule.setTargets([targetName])
return jmsModule
def configureJmsSubdeployment(subdeploymentName, moduleName, jmsServers):
subdeployment = getMBean('/JMSSystemResources/' + moduleName +
'/SubDeployments/' + subdeploymentName)
if subdeployment == None:
print 'Creating JMS Subdeployment ' + subdeploymentName + ' for module ' \
+ moduleName
cd('/JMSSystemResources/' + moduleName + '/SubDeployments')
subdeployment = create(subdeploymentName, 'SubDeployment')
cd('/')
print 'Updating Subdeployment parameters for ' + subdeploymentName
subdeployment.setTargets(jmsServers)
return subdeployment
def configureJmsConnectionFactory(cfName, cfJndiName, moduleName, isXA, isDefaultTargeting,
subdeploymentName, messagesMaximum):
cf = getMBean('/JMSSystemResources/' + moduleName +
'/JMSResource/' + moduleName + '/ConnectionFactories/' +
cfName)
if cf == None:
print 'Creating JMS Connection Factory ' + cfName + ' for module ' \
+ moduleName
cd('/JMSSystemResources/' + moduleName + '/JMSResource/' + moduleName)
cf = create(cfName, 'ConnectionFactory')
cd('/')
print 'Updating JMS Connection Factory parameters for ' + cfName
cf.setJNDIName(cfJndiName)
if isDefaultTargeting == 'true':
cf.setDefaultTargetingEnabled(java.lang.Boolean(isDefaultTargeting))
else:
cf.setSubDeploymentName(subdeploymentName)
cf.getClientParams().setClientIdPolicy('Restricted')
cf.getClientParams().setSubscriptionSharingPolicy('Exclusive')
cf.getClientParams().setMessagesMaximum(messagesMaximum)
cf.getTransactionParams().setTransactionTimeout(30)
cf.getTransactionParams().setXAConnectionFactoryEnabled(java.lang.Boolean(isXA))
return cf
def configureJmsDistributedQueue(queueName, queueJndiName, moduleName, subdeploymentName):
queue = getMBean('/JMSSystemResources/' + moduleName +
'/JMSResource/' + moduleName + '/UniformDistributedQueues/' +
queueName)
if queue == None:
print 'Creating JMS Uniform Distributed Queue ' + queueName + ' for module ' \
+ moduleName
cd('/JMSSystemResources/' + moduleName + '/JMSResource/' + moduleName)
queue = create(queueName, 'UniformDistributedQueue')
cd('/')
print 'Updating JMS Uniform Distributed Queue parameters for ' + queueName
queue.setJNDIName(queueJndiName)
queue.setSubDeploymentName(subdeploymentName)
return queue
def configureJmsDistributedTopic(topicName, topicJndiName, moduleName, subdeploymentName):
topic = getMBean('/JMSSystemResources/' + moduleName +
'/JMSResource/' + moduleName + '/UniformDistributedTopics/' +
topicName)
if topic == None:
print 'Creating JMS Uniform Distributed Topic ' + topicName + ' for module ' \
+ moduleName
cd('/JMSSystemResources/' + moduleName + '/JMSResource/' + moduleName)
topic = create(topicName, 'UniformDistributedTopic')
cd('/')
print 'Updating JMS Uniform Distributed Topic parameters for ' + topicName
topic.setJNDIName(topicJndiName)
topic.setSubDeploymentName(subdeploymentName)
return topic
print 'starting the script ....'
jmsClusterName = 'test_cluster'
jmsServerNamePrefix = 'jms_server_'
jmsServerHostName = 'localhost'
jmsServerListenPortBase = 8101
jmsServerCount = 10
appServerNamePrefix = 'soa_server_'
appServerHostName = 'localhost'
appServerListenPortBase = 8001
appServerCount = 4
jmsResourcesServerNamePrefix = 'TestJMSServer_'
jmsResourcesFileStoreNamePrefix = 'TestFileStore_'
jmsResourceFileStoreDirectoryPathPrefix = 'store/'
jmsResourcesUseMigratableTargets = false
jmsResourcesModuleName = 'TestModule'
jmsResourcesSubDeploymentName = 'TestModuleClusterSubDep'
jmsResourcesQueues = [('SuperQueue_1', 'jms/super/queue1'),
('SuperQueue_2', 'jms/super/queue2'),
('SuperQueue_3', 'jms/super/queue3'),
('SuperQueue_4', 'jms/super/queue4'),
('SuperQueue_5', 'jms/super/queue5')]
jmsResourcesConnectionFactories = [('SuperConnectionFactory_1', 'jms/super/cf1'),
('SuperConnectionFactory_3', 'jms/super/cf3'),
('SuperConnectionFactory_5', 'jms/super/cf5')]
jmsResourcesConnectionFactoriesIsXA = true
jmsResourcesConnectionFactoriesMaxMessages = 100
username = 'weblogic'
password = '12345678'
url='t3://localhost:7001'
connect(username, password, url)
edit()
startEdit()
#=======================================================================================
# Configure a JMS Cluster
#=======================================================================================
print 'Configuring a JMS Cluster with JMS Servers'
jmsCluster = configureCluster(jmsClusterName, true)
for i in range(0, jmsServerCount):
configureServer(jmsServerNamePrefix + repr(i + 1), jmsServerHostName,
jmsServerListenPortBase + i, jmsCluster, None, 0)
for i in range(0, appServerCount):
configureServer(appServerNamePrefix + repr(i + 1), appServerHostName,
appServerListenPortBase + i, jmsCluster, None, 0)
#=======================================================================================
# Configure Persistent stores and JMS Servers
#=======================================================================================
print 'Configuring Persistent stores'
stores = []
for i in range(0, jmsServerCount):
targetName = jmsServerNamePrefix + repr(i + 1)
if jmsResourcesUseMigratableTargets:
targetName = targetName + ' (migratable)'
dataStore = configureFileDataStore(jmsResourcesFileStoreNamePrefix + repr(i + 1),
targetName, jmsResourceFileStoreDirectoryPathPrefix)
stores.append(dataStore)
print 'Configuring JMS Servers'
jmsServers = []
for i in range(0, jmsServerCount):
targetName = jmsServerNamePrefix + repr(i + 1)
if jmsResourcesUseMigratableTargets:
targetName = targetName + ' (migratable)'
jmsServer = configureJmsServer(jmsResourcesServerNamePrefix + repr(i + 1),
targetName, stores[i])
jmsServers.append(jmsServer)
#=======================================================================================
# Configure JMS Module
#=======================================================================================
print 'Configuring JMS Module'
configureJmsModule(jmsResourcesModuleName, jmsCluster)
print 'Configuring SubDeployment for JMS Module'
configureJmsSubdeployment(jmsResourcesSubDeploymentName, jmsResourcesModuleName,
jmsServers)
print 'Configuring JMS Connection factories for JMS Module'
for cfName, cfJndiName in jmsResourcesConnectionFactories:
configureJmsConnectionFactory(cfName, cfJndiName, jmsResourcesModuleName,
jmsResourcesConnectionFactoriesIsXA, false, jmsResourcesSubDeploymentName,
jmsResourcesConnectionFactoriesMaxMessages)
print 'Configuring JMS Uniform Distributed Queues for JMS Module'
for queueName, queueJndiName in jmsResourcesQueues:
configureJmsDistributedQueue(queueName, queueJndiName,
jmsResourcesModuleName,
jmsResourcesSubDeploymentName)
try:
save()
activate(block="true")
print "script returns SUCCESS"
except Exception, e:
print e
print "Error while trying to save and/or activate"
dumpStack()
raise
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment