- Create the domain using wlst
- Enrolling the node manager for the domain (apparently needed when created using scripts)
- A couple of notes and scripts for enrollment
- Solving a start problem with SOASuite due to OSGi mis-targetting
- Rename the admin server
- Create WebLogic users and groups using WLST and assign SB roles to them.
But the important missing part in this series are the start and stop of the domain. So let me provide and describe my scripts.
Oracle does provide scripts to start and stop your NodeManager and WebLogic servers. When you configure the NodeManager and Servers correctly you can use those to add the NodeManager to the init.d services on Linux or to your Windows Services. Then the NodeManager would start the AdminServer and other Servers automatically.
However, on my demo/training/development systems I'd like to be able to start/stop the parts myself. So here we go.
Settings
I'm working with Linux and create shell scripts to kick-off the wlst scripts that I use to start the particular components. Therefor I use a settings script called fmw12c_env.sh to call the setWLSEnv.sh from the FMW home. I take it that you're able to translate them to Windows Command file if applicable. I provided it a couple of time already. But for completeness here it is:#!/bin/bash echo set Fusion MiddleWare 12cR2 environment export FMW_HOME=/u01/app/oracle/FMW12210 export NODEMGR_HOME=/u01/app/work/domains/osb_domain/nodemanager export SOA_HOME=$FMW_HOME/soa export OSB_HOME=$FMW_HOME/osb export MFT_HOME=$FMW_HOME/mft # echo call setWLSEnv.sh . $FMW_HOME/wlserver/server/bin/setWLSEnv.sh export PATH=$FMW_HOME/oracle_common/common/bin:$WL_HOME/common/bin/:$WL_HOME/server/bin:$PATH
Then the wlst scrips need a property file fmw.properties:
############################################################################# # Set SOABPM Domain properties # # @author Martien van den Akker, Darwin-IT Professionals # @version 1.0, 2016-06-27 # ############################################################################# # #Per domain nodemanager... ############################################################################# # Set SOABPM Domain properties # # @author Martien van den Akker, Darwin-IT Professionals # @version 1.0, 2016-06-27 # ############################################################################# # #Per domain nodemanager... #nmHome=/u01/app/work/domains/osb_domain/nodemanager nmHome=/u01/app/work/domains/soabpm_domain/nodemanager #nmHome=/u01/app/work/domains/soabpm12c_dev/nodemanager nmHost=darlin-vce-db nmPort=5555 nmType=plain # #Domain #wlsDomainName=osb_domain #wlsDomainName=soabpm12c_dev wlsDomainName=soabpm_domain wlsDomainsHome=/u01/app/work/domains # #AdminServer adminServerName=AdminServer #adminServerName=OsbAdmin adminUrl=darlin-vce-db:7001 adminUser=weblogic adminPwd=welcome1 usrCfgFile=wlsCfgFile usrKeyFile=wlsKeyFile #Clusters osbClr=OsbCluster soaClr=SoaCluster
Create User Config and Key files
In the property file above you'll see the adminUser and adminPwd (password). On a production environment you probably don't want to have those in plain sight. WebLogic provides a means to encrypt those in to a user config and a key file. When you generate those with the default names to your home folder you even can connect to the AdminServer without providing the username/password. In my scripts I use named files as defined in the usrCfgFile and usrKeyFile properties. But first we need to generate those and for that we need to connect to the AdminServer using the adminUser and adminPwd properties.I created the script createUserConfigFiles.py to generate those files:
############################################################################# # Stop AdminServer # # @author Martien van den Akker, Darwin-IT Professionals # @version 2.1, 2016-06-27 # ############################################################################# # Modify these values as necessary import sys, traceback scriptName = 'stopAdmin.py' # # lineSeperator='__________________________________________________________________________________' # # def usage(): print 'Call script as: ' print 'Windows: wlst.cmd '+scriptName+' -loadProperties localhost.properties' print 'Linux: wlst.sh '+scriptName+' -loadProperties environment.properties' print 'Property file should contain the following properties: ' print "adminUrl=localhost:7101" print "adminUser=weblogic" print "adminPwd=welcome1" # # def main(): try: print(lineSeperator) print('Create user config files') print(lineSeperator) print('\nConnect to the AdminServer: '+adminServerName) connect(adminUser, adminPwd, adminUrl) # print('\nStore Config files') storeUserConfig(usrCfgFile,usrKeyFile) # print('\nExiting...') except NameError, e: print('Apparently properties not set.') print "Please check the property: ", sys.exc_info()[0], sys.exc_info()[1] usage() except: apply(traceback.print_exception, sys.exc_info()) stopEdit('y') exit(exitcode=1) # main();
After connecting to the AdminServer it is the storeUserConfig(usrCfgFile,usrKeyFile) that creates the files. If you don't supply the parameters it will create the default files in your home folder (for instance /home/oracle), then you can connect just by issueing connect('localhost:7001'). For more on this, read this blog.
To call the script above you can use the script createUserConfigFiles.sh or the contents of it:
#!/bin/bash ############################################################################# # Create user config files using wlst.sh # # @author Martien van den Akker, Darwin-IT Professionals # @version 2.1, 2016-06-27 # ############################################################################# # . fmw12c_env.sh echo echo Create User Config files wlst.sh ./createUserConfigFiles.py -loadProperties fmw.properties
After having greated the files you can (and should!) remove the adminUser and adminPwd properties from the fmw.properties file.
Start the NodeManager
In de domain home/bin folder (for instance /u01/app/work/domains/soabpm_domain/bin) you'll find scripts to start and stop the NodeManager: startNodeManager.sh and stopNodeManager.sh. These are fine to use in the service configurations in Linux or Windows.However, running them from the shell/command line will cause your session to be taken for the NodeManager. Stopping the session will cause the NodeManager to be stopped. Not so handy if you want to start the NodeManager in an overall script that starts the complete domain.
But you can start the NodeManager from wlst as well. And then it spawns the NodeManager into a seperate process in the background.
The script startNodeManager.py is quite simple:
############################################################################# # Start nodemanager # # @author Martien van den Akker, Darwin-IT Professionals # @version 2.1, 2016-06-27 # ############################################################################# # Modify these values as necessary import sys, traceback scriptName = sys.argv[0] # # lineSeperator='__________________________________________________________________________________' # # def usage(): print 'Call script as: ' print 'Windows: wlst.cmd '+scriptName+' -loadProperties localhost.properties' print 'Linux: wlst.sh '+scriptName+' -loadProperties environment.properties' print 'Property file should contain the following properties: ' print "adminUrl=localhost:7101" print "adminUser=weblogic" print "adminPwd=welcome1" # # def startNM(nmHost, nmPort, nmHome, nmType): print(lineSeperator) print ('Start NodeManager') startNodeManager(verbose='true', NodeManagerHome=nmHome, ListenPort=nmPort, ListenAddress=nmHost); print('Finished starting NodeManager') # def main(): try: startNM(nmHost, nmPort, nmHome, nmType); except NameError, e: print('Apparently properties not set.') print "Please check the property: ", sys.exc_info()[0], sys.exc_info()[1] usage() except: apply(traceback.print_exception, sys.exc_info()) stopEdit('y') exit(exitcode=1) # main()
It's mainly about the startNodeManager(verbose='true', NodeManagerHome=nmHome, ListenPort=nmPort, ListenAddress=nmHost) statement in the startNM() function, which is quite self explaining, I think. No username password is required to start the NodeManager, but it does need to know what it's home and listenPort and Address should be.
As with all the scripts I declare a scripName variable with the assignment of the 0-th argument: sys.argv[0]. This is used in the usage() function that is called in case of a NameError exception. This exception is raised when certain variable or function references are made but not found. Normally this would mean that a certain property is not set in the property file.
To run it from the shell you can use the startNodeManager.sh script:
#!/bin/bash ############################################################################# # Start nodemanager using wlst # # @author Martien van den Akker, Darwin-IT Professionals # @version 2.1, 2016-06-27 # ############################################################################# # . fmw12c_env.sh echo echo Start NodeManager wlst.sh ./startNodeManager.py -loadProperties fmw.propertiesFor every python script in the procession of this blog I have an accompanying shell script like this. So I won't provide those for the other scripts.
Stopping the NodeManager is a little more complicated:
############################################################################# # Stop nodemanager # # @author Martien van den Akker, Darwin-IT Professionals # @version 2.1, 2016-06-27 # ############################################################################# # Modify these values as necessary import sys, traceback scriptName = sys.argv[0] # # lineSeperator='__________________________________________________________________________________' # # def usage(): print 'Call script as: ' print 'Windows: wlst.cmd '+scriptName+' -loadProperties localhost.properties' print 'Linux: wlst.sh '+scriptName+' -loadProperties environment.properties' print 'Property file should contain the following properties: ' print "adminUrl=localhost:7101" print "adminUser=weblogic" print "adminPwd=welcome1" # # def connectToNM(nmHost, nmPort, nmHome, wlsDomainName, wlsDomainHome, nmType): try: print(lineSeperator) print('Try to connect to the Node Manager') try: nmConnect(userConfigFile=usrCfgFile, userKeyFile=usrKeyFile, host=nmHost, port=nmPort, domainName=wlsDomainName, domainDir=wlsDomainHome, nmType=nmType) except NameError, e: print('Apparently user config properties usrCfgFile and usrKeyFile not set.') print('Try to connect to the NodeManager adminUser and adminPwd properties') nmConnect(username=adminUser, password=adminPwd, host=nmHost, port=nmPort, domainName=wlsDomainName, domainDir=wlsDomainHome, nmType=nmType) print('Connected to the Node Mananger') except WLSTException: message='Apparently NodeManager not Started!' print (message) raise Exception(message) # # def stopNM(nmHost, nmPort, nmHome, wlsDomainName, wlsDomainHome, nmType): try: print(lineSeperator) print ('Try to connect to the Node Manager') connectToNM(nmHost, nmPort, nmHome, wlsDomainName, wlsDomainHome, nmType); print ('Connected to the Node Mananger') print ('Stop the NodeManager') stopNodeManager(); print('Finished stapping NodeManager') except WLSTException: print ('Apparently NodeManager not Started!') # def main(): try: wlsDomainHome = wlsDomainsHome+'/'+wlsDomainName stopNM(nmHost, nmPort, nmHome, wlsDomainName, wlsDomainHome, nmType); except NameError, e: print('Apparently properties not set.') print "Please check the property: ", sys.exc_info()[0], sys.exc_info()[1] usage() except: apply(traceback.print_exception, sys.exc_info()) stopEdit('y') exit(exitcode=1) # main()
You first need to connect to the NodeManager. This is done in connectToNM() that illustrates the use of the user config and key files with the adminUser/adminPwd properties as a fall back. First it tries to connect using the userConfigFile/userKeyFile combination. If that leads to a NameError, then you probably did not provide those, so it retries it on with the adminUser/adminPwd properties.
This construct is reused when trying to connect to the AdminServer to start the rest of the domain.
When it is connected the nodeManager can be stopped, simply with the stopNodeManager() command.
Start/Stop the AdminServer
The startAdmin.py provided below is used to Start the Admin Server. Again, there are startWeblogic.sh and stopWeblogic.sh scripts in the bin folder of the domain. But those will start the server in the foreground (although you can move them to the background of course). But mainly the servers aren't under control of the NodeManager, what has it's advantages. So the startAdmin.py script:############################################################################# # Start AdminServer via NodeManager and try to connect to it. # Result of this script should be that you are connect to the AdminServer. # # @author Martien van den Akker, Darwin-IT Professionals # @version 2.1, 2016-06-27 # ############################################################################# # Modify these values as necessary import sys, traceback scriptName = sys.argv[0] # # lineSeperator='__________________________________________________________________________________' # # def usage(): print 'Call script as: ' print 'Windows: wlst.cmd '+scriptName+' -loadProperties localhost.properties' print 'Linux: wlst.sh '+scriptName+' -loadProperties environment.properties' print 'Property file should contain the following properties: ' print "adminUrl=localhost:7101" print "adminUser=weblogic" print "adminPwd=welcome1" # # def connectToNM(nmHost, nmPort, nmHome, wlsDomainName, wlsDomainHome, nmType): try: print(lineSeperator) print('Try to connect to the Node Manager') try: nmConnect(userConfigFile=usrCfgFile, userKeyFile=usrKeyFile, host=nmHost, port=nmPort, domainName=wlsDomainName, domainDir=wlsDomainHome, nmType=nmType) except NameError, e: print('Apparently user config properties usrCfgFile and usrKeyFile not set.') print('Try to connect to the NodeManager adminUser and adminPwd properties') nmConnect(username=adminUser, password=adminPwd, host=nmHost, port=nmPort, domainName=wlsDomainName, domainDir=wlsDomainHome, nmType=nmType) print('Connected to the Node Mananger') except WLSTException: message='Apparently NodeManager not Started!' print (message) raise Exception(message) #print 'Start Nodemanager' #startNodeManager(verbose='true', NodeManagerHome=nmHome, ListenPort=nmPort, ListenAddress=nmHost); #print 'Retry to connect to the Node Manager'; #nmConnect(username=adminUser, password=adminPwd, host=nmHost, port=nmPort, domainName=wlsDomainName, domainDir=wlsDomainHome, nmType=nmType); # # def connectToadminServer(adminUrl, adminServerName): try: print(lineSeperator) print('Try to connect to the AdminServer') try: connect(userConfigFile=usrCfgFile, userKeyFile=usrKeyFile, url=adminUrl) except NameError, e: print('Apparently user config properties usrCfgFile and usrKeyFile not set.') print('Try to connect to the AdminServer adminUser and adminPwd properties') connect(adminUser, adminPwd, adminUrl) except WLSTException: print('Apparently AdminServer not Started!') print('Start AdminServer') nmStart(adminServerName) print('Retry to connect to the AdminServer') try: connect(userConfigFile=usrCfgFile, userKeyFile=usrKeyFile, url=adminUrl) except NameError, e: print('Apparently user config properties usrCfgFile and usrKeyFile not set.') print('Try to connect to the AdminServer adminUser and adminPwd properties') connect(adminUser, adminPwd, adminUrl) # # def main(): try: wlsDomainHome = wlsDomainsHome+'/'+wlsDomainName print(lineSeperator) print('Start '+adminServerName+' for domain in : '+wlsDomainHome) print(lineSeperator) print ('Connect to the Node Manager') connectToNM(nmHost, nmPort, nmHome, wlsDomainName, wlsDomainHome, nmType) print ('Connect to the AdminServer: '+adminServerName) connectToadminServer(adminUrl, adminServerName) except NameError, e: print('Apparently properties not set.') print "Please check the property: ", sys.exc_info()[0], sys.exc_info()[1] usage() except: apply(traceback.print_exception, sys.exc_info()) exit(exitcode=1) # main();
The script first uses connectToNM(nmHost, nmPort, nmHome, wlsDomainName, wlsDomainHome, nmType) to connect to the NodeManager. Just in the same way as in the stopNodeManager.py script.
Then it tries to connect to the AdminServer using connectToadminServer(adminUrl, adminServerName). Now, the connect to the NodeManager might be a little over done. But in the connectToadminServer() function it tries to connect to the AdminServer the same way as to the NodeManager: first with the userConfigFile, userKeyFile combination. But when those properties aren't set, it uses the username password combination. If a connection to the AdminServer fails, the function concludes that it isn't started yet. But since it is still connected to the nodemanager it can start the AdminServer using nmStart(adminServerName). So it is important that in the adminServerName property in the fmw.properties the correct name of the AdminServer is given.
To stop the admin server I have the stopAdmin.py script:
############################################################################# # Stop AdminServer # # @author Martien van den Akker, Darwin-IT Professionals # @version 2.1, 2016-06-27 # ############################################################################# # Modify these values as necessary import sys, traceback scriptName = sys.argv[0] # # lineSeperator='__________________________________________________________________________________' # # def usage(): print 'Call script as: ' print 'Windows: wlst.cmd '+scriptName+' -loadProperties localhost.properties' print 'Linux: wlst.sh '+scriptName+' -loadProperties environment.properties' print 'Property file should contain the following properties: ' print "adminUrl=localhost:7101" print "adminUser=weblogic" print "adminPwd=welcome1" # # def connectToadminServer( adminUrl, adminServerName): try: print(lineSeperator) print('Try to connect to the AdminServer using user config') connect(userConfigFile=usrCfgFile, userKeyFile=usrKeyFile, url=adminUrl) except NameError, e: print('Apparently user config properties usrCfgFile and usrKeyFile not set.') print('Try to connect to the AdminServer adminUser and adminPwd properties') connect(adminUser, adminPwd, adminUrl) except WLSTException: message='Apparently AdminServer not Started!' print (message) raise Exception(message) # # def main(): try: wlsDomainHome = wlsDomainsHome+'/'+wlsDomainName print(lineSeperator) print('Stop '+adminServerName+' for domain in : '+wlsDomainHome) print(lineSeperator) print('\nConnect to the AdminServer: '+adminServerName) connectToadminServer(adminUrl, adminServerName) # print('\nShutdown the AdminServer: '+adminServerName) shutdown(force='true') # print('\nFinished stopping AdminServer: '+adminServerName) except NameError, e: print('Apparently properties not set.') print "Please check the property: ", sys.exc_info()[0], sys.exc_info()[1] usage() except: apply(traceback.print_exception, sys.exc_info()) exit(exitcode=1) # main();
This one does a connect to the AdminServer (in the same two layer approach), and when connected it performs a shutdown(force='true'). This is equivalant to the 'Force Shutdown Now' option in the console. Since no server or cluster name is provided the AdminServer is shutdown.
Start&Stop Domain
In my create domain scripts I create clusters for every component. Even when I have only one managed server (for instance in a development environment) I added the servers to a cluster. This makes it easier to expand the domain with multiple nodes. And it makes the management the same for every environment.So to start and stop the domain I work per cluster. The nice thing then is that when connected you can just issue a start cluster command and the AdminServer uses the different nodeManagers on the hosts to start the servers simultaneously. This reduces the startup time significantly compared to starting the servers of a cluster one by one.
Now, it might be that one of the servers couldn't be started right away. And this fails the start cluster command. So I added a little code to try to start the different servers one by one. I think it is somewhat over done in most cases, but it does illustrate some functions to figure out the servers to start and to determine their state. So here is my startDomain.py script:
############################################################################# # Start SOA and OSB domain # # @author Martien van den Akker, Darwin-IT Professionals # @version 1.1, 2016-06-27 # ############################################################################# # Modify these values as necessary import sys, traceback scriptName = sys.argv[0] # # lineSeperator='__________________________________________________________________________________' # # def usage(): print 'Call script as: ' print 'Windows: wlst.cmd '+scriptName+' -loadProperties localhost.properties' print 'Linux: wlst.sh '+scriptName+' -loadProperties environment.properties' print 'Property file should contain the following properties: ' print "adminUrl=localhost:7001" print "adminUser=weblogic" print "adminPwd=welcome1" # # def connectToNM(nmHost, nmPort, nmHome, wlsDomainName, wlsDomainHome, nmType): try: print(lineSeperator) print('Try to connect to the Node Manager') try: nmConnect(userConfigFile=usrCfgFile, userKeyFile=usrKeyFile, host=nmHost, port=nmPort, domainName=wlsDomainName, domainDir=wlsDomainHome, nmType=nmType) except NameError, e: print('Apparently user config properties usrCfgFile and usrKeyFile not set.') print('Try to connect to the NodeManager adminUser and adminPwd properties') nmConnect(username=adminUser, password=adminPwd, host=nmHost, port=nmPort, domainName=wlsDomainName, domainDir=wlsDomainHome, nmType=nmType) print('Connected to the Node Mananger') except WLSTException: message='Apparently NodeManager not Started!' print (message) raise Exception(message) #print 'Start Nodemanager' #startNodeManager(verbose='true', NodeManagerHome=nmHome, ListenPort=nmPort, ListenAddress=nmHost); #print 'Retry to connect to the Node Manager'; #nmConnect(username=adminUser, password=adminPwd, host=nmHost, port=nmPort, domainName=wlsDomainName, domainDir=wlsDomainHome, nmType=nmType); # # def connectToadminServer(adminUrl, adminServerName): try: print(lineSeperator) print('Try to connect to the AdminServer') try: connect(userConfigFile=usrCfgFile, userKeyFile=usrKeyFile, url=adminUrl) except NameError, e: print('Apparently user config properties usrCfgFile and usrKeyFile not set.') print('Try to connect to the AdminServer adminUser and adminPwd properties') connect(adminUser, adminPwd, adminUrl) except WLSTException: print('Apparently AdminServer not Started!') print('Start AdminServer') nmStart(adminServerName) print('Retry to connect to the AdminServer') try: connect(userConfigFile=usrCfgFile, userKeyFile=usrKeyFile, url=adminUrl) except NameError, e: print('Apparently user config properties usrCfgFile and usrKeyFile not set.') print('Try to connect to the AdminServer adminUser and adminPwd properties') connect(adminUser, adminPwd, adminUrl) # # Get the Servers of Cluster def getClusterServers(clustername): #Cluster config to be fetched from ServerConfig print(lineSeperator) print('\nGet Servers from cluster '+clustername) serverConfig() cluster = getMBean("/Clusters/" + clustername) if cluster is None: errorMsg= "Cluster " + clustername + " does not appear to exist!" print errorMsg raise(Exception(errorMsg)) print "Found cluster "+ clustername+ "." servers = cluster.getServers() return servers # # def serverStatus(serverName): serverRuntime=getMBean('/ServerRuntimes/'+serverName) if serverRuntime is None: print("Server Runtime for " + serverName + " not found, server apparently SHUTDOWN") serverState="SHUTDOWN" else: print "Found Server Runtime for "+ serverName+ "." serverState = serverRuntime.getState() return serverState # # def startClusterServersOneByOne(clusterName): print(lineSeperator) print ('Start servers for cluster: '+clusterName) servers=getClusterServers(clusterName) # Need to go to domainRuntime to get to the serverRuntimes. domainRuntime() # for server in servers: print(lineSeperator) serverName = server.getName() print('ServerName: '+serverName) serverState = serverStatus(serverName) print('Server '+serverName+': '+serverState) if serverState=="SHUTDOWN": print ('Server '+serverName+' is not running so start it.') start(serverName) elif serverState=="RUNNING": print ('Server '+serverName+' is already running') else: print ('Server '+serverName+' in state '+serverState+', not startable!') # print ('\nFinished starting servers.') # # def startClusterServers(clusterName): print(lineSeperator) print ('Start servers for cluster: '+clusterName) # try: start(clusterName,'Cluster') except WLSTException: print "Apparently Cluster in incompatible state!", sys.exc_info()[0], sys.exc_info()[1] startClusterServersOneByOne(clusterName) state(clusterName,'Cluster') # print ('\nFinished starting servers.') # # def main(): try: wlsDomainHome = wlsDomainsHome+'/'+wlsDomainName print (lineSeperator) print ('Start Osb Cluster') print('\nConnect to AdminServer ') print (lineSeperator) print ('Connect to the Node Manager') connectToNM(nmHost, nmPort, nmHome, wlsDomainName, wlsDomainHome, nmType) print ('Connect to the AdminServer: '+adminServerName) connectToadminServer(adminUrl, adminServerName) # print('Start servers for cluster: '+osbClr) startClusterServers(osbClr) # print('Start servers for cluster: '+soaClr) startClusterServers(soaClr) # print('\nExiting...') exit() except NameError, e: print('Apparently properties not set.') print "Please check the property: ", sys.exc_info()[0], sys.exc_info()[1] usage() except: apply(traceback.print_exception, sys.exc_info()) exit(exitcode=1) #call main() main() exit()
It first connects to the AdminServer in the familiar way. If that fails it tries to start it. So far it is copied from the startAdmin.py script. Then it calls the startClusterServers(clusterName) function for each cluster. You need to add each cluster here by hand. I could loop over the clusternames, but you might need to have them started in a certain order. This function first issues the start(clusterName,'Cluster') command. Providing the 'Cluster' parameter as a start type, a complete cluster can be started. If that fails, then apparently one or more servers failed to start. If so it tries to start the servers one by one in the startClusterServersOneByOne(clusterName) function. It gets the servers attached to the cluster using getClusterServers(clustername) function. This is done using the getServers() method of the cluster. This needs to be done in the serverConfig() state. After that for each server the status is fetched by querying the serverRuntime of the server in the serverStatus() function. ServerRuntimes are available in the DomainRuntime() state, so it is needed to switch the state using that function. If the ServerRuntime is not avaiable, the state is considered to be 'SHUTDOWN'. If the server is down a start(serverName) is issued. Lastly in the startClusterServers() function the state(clusterName,'Cluster') is called to print the state of the servers in the cluster.
To Stop the domain I created the stopDomain.py which mainly works in reverse:
############################################################################# # Stop OSB Domain # # @author Martien van den Akker, Darwin-IT Professionals # @version 1.1, 2016-06-27 # ############################################################################# # Modify these values as necessary import sys, traceback scriptName = sys.argv[0] # # lineSeperator='__________________________________________________________________________________' # # def usage(): print 'Call script as: ' print 'Windows: wlst.cmd '+scriptName+' -loadProperties localhost.properties' print 'Linux: wlst.sh '+scriptName+' -loadProperties environment.properties' print 'Property file should contain the following properties: ' print "adminUrl=localhost:7001" print "adminUser=weblogic" print "adminPwd=welcome1" # # def connectToadminServer(adminUrl, adminServerName): try: print(lineSeperator) print('Try to connect to the AdminServer') try: connect(userConfigFile=usrCfgFile, userKeyFile=usrKeyFile, url=adminUrl) except NameError, e: print('Apparently user config properties usrCfgFile and usrKeyFile not set.') print('Try to connect to the AdminServer adminUser and adminPwd properties') connect(adminUser, adminPwd, adminUrl) except WLSTException: message='Apparently AdminServer not Started!' print (message) raise Exception(message) # # Get the Servers of Cluster def getClusterServers(clustername): #Cluster config to be fetched from ServerConfig print(lineSeperator) print('\nGet Servers from cluster '+clustername) serverConfig() cluster = getMBean("/Clusters/" + clustername) if cluster is None: errorMsg= "Cluster " + clustername + " does not appear to exist!" print errorMsg raise(Exception(errorMsg)) print "Found cluster "+ clustername+ "." servers = cluster.getServers() return servers # # def serverStatus(serverName): serverRuntime=getMBean('/ServerRuntimes/'+serverName) if serverRuntime is None: print("Server Runtime for " + serverName + " not found, server apparently SHUTDOWN") serverState="SHUTDOWN" else: print "Found Server Runtime for "+ serverName+ "." serverState = serverRuntime.getState() return serverState # # def stopClusterServers(clusterName): print(lineSeperator) print ('Stop servers for cluster: '+clusterName) # try: shutdown(clusterName,'Cluster') except WLSTException: print "Apparently Cluster in incompatible state!", sys.exc_info()[0], sys.exc_info()[1] state(clusterName,'Cluster') print ('Try to stop servers for cluster: '+clusterName+', one by one') servers=getClusterServers(clusterName) # Need to go to domainRuntime to get to the serverRuntimes. domainRuntime() # for server in servers: print(lineSeperator) serverName = server.getName() print('ServerName: '+serverName) serverState = serverStatus(serverName) print('Server '+serverName+': '+serverState) if serverState=="RUNNING": print ('Server '+serverName+' is running so shut it down.') shutdown(name=serverName, force='true') elif serverState=="SHUTDOWN": print ('Server '+serverName+' is already down.') else: print ('Server '+serverName+' in state '+serverState+', not stoppable!') # print ('\nFinished stopping servers.') # # def main(): try: wlsDomainHome = wlsDomainsHome+'/'+wlsDomainName print (lineSeperator) print ('Stop Osb Domain') print (lineSeperator) print('\nConnect to the AdminServer: '+adminServerName) connectToadminServer(adminUrl, adminServerName) print(lineSeperator) print('First stop servers from cluster '+osbClr) stopClusterServers(osbClr) # print(lineSeperator) print('\nShutdown the AdminServer: '+adminServerName) shutdown(force='true') print ('\nFinished stopping servers.') # print('\nExiting...') exit() except NameError, e: print('Apparently properties not set.') print "Please check the property: ", sys.exc_info()[0], sys.exc_info()[1] usage() except: apply(traceback.print_exception, sys.exc_info()) exit(exitcode=1) #call main() main() exit()
In the sameway as in starting the servers this script first tries to shutdown the cluster as a whole. The AdminServer takes advantage of the NodeManager to simulaneously stop the servers. The NodeManager first tries to connect to the particular server to hand over a suicide pill. But if it can't reach the server directly it releases it from suffering by doing an explicit OS-Level kill process...
After the shutdown of the servers the AdminServer is shut down.
No comments:
Post a Comment