Forked from samolisov/create-a-large-jms-cluster-domain.py
Created
October 7, 2020 19:48
-
-
Save ajitsingh25/67eb7d12b83c36c1c20dfaf576f348f6 to your computer and use it in GitHub Desktop.
Usable WLST scripts for every day WebLogic Application Server administration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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