Mittwoch, 2. November 2016

Starten der Weblogic 12c Umgebung und Server auf Linux - vom Hölzchen (Shell) zum Stöckchen (WLST)

Heute möchte ich meine Erfahrungen beim Starten der Weblogic 12c Umgebung und Server auf Linux teilen, der Kunde hat nach einem entsprechenden Skript gefragt. Mit vielen einzelnen Kommandos habe ich es schon probiert, genauso mit einer Mischung aus Shell-Skripten und Weblogic Scripting Tool-Befehlen (WLST). Schwer ist das ganze ja gar nicht, nur eben viel zu tippern.

Zuerst kommt die ursprüngliche Variante mit einem großen Shell-Skript und vielen Befehlen darin.
# Adjust paths and domain name to suit your installation.
echo "Starting up all servers on machine TheHost..."
export ORACLE_BASE=/Pfad_zum_Oracle_Home
export MW_HOME=/Pfad_zum_Oracle_Home/wlserver/..
export WLS_HOME=$ORACLE_BASE/wlserver
export WL_HOME=$WLS_HOME
export DOMAIN_HOME=/Pfad_zur_Domain/domains/my_domain
export OHS_INST=$DOMAIN_HOME/config/fmwconfig/components/OHS/instances/ohs1

# Start NodeManager
echo "Starting up NodeManager ..."
nohup $DOMAIN_HOME/bin/startNodeManager.sh > /dev/null 2>&1 &

# Start WebLogic Domain
echo "Starting up WebLogic AdminServer ..."
nohup $DOMAIN_HOME/bin/startWebLogic.sh > /dev/null 2>&1 &

sleep 180

# Start the managed Servers
echo "Starting up WLS_FORMS ..."
nohup $DOMAIN_HOME/bin/startManagedWebLogic.sh WLS_FORMS > /dev/null 2>&1 &
echo "Starting up WLS_REPORTS ..."
nohup $DOMAIN_HOME/bin/startManagedWebLogic.sh WLS_REPORTS > /dev/null 2>&1 &
echo "Starting up another Managed Server ..."
nohup $DOMAIN_HOME/bin/startManagedWebLogic.sh WLS_ANOTHER_SERVER > /dev/null 2>&1 &
....
sleep 300

# Start the web tier (HTTP Server).
echo "Starting up ohs1 ..."
$DOMAIN_HOME/bin/startComponent.sh ohs1

# Start the reports Servers.
echo "Starting up ReportsServer rep_server1 ..."
$DOMAIN_HOME/bin/startComponent.sh rep_server1

echo "Starting up ReportsServer rep_server2 ..."
$DOMAIN_HOME/bin/startComponent.sh rep_server2
......

Das läßt sich natürlich mit anderen Servern noch weiter fortführen, aber das Prinzip sollte klar sein. Zwischen dem Starten der Managed Server und den anderen Servern/Komponenten ist zur Sicherheit eine Pause in Form von sleep-Befehlen eingebaut. Dabei ist wichtig, dass für alle Managed Server im Unterordner <Domain_Home>/servers/AdminServer/security oder <Domain_Home>/servers/ManagedServer/security eine Datei namens boot.properties angelegt ist. Sonst gelingt das Starten per Shell-Skript nicht, und es muß in der Console username und password eingegeben werden.



cat boot.properties
username=weblogic
password=mypassword
 


Nach einem Quercheck vom erfahrenen Kollegen gab er den Tipp: mach das Ganze doch mit dem Weblogic Scripting Tool, kurz WLST. Da ich dieses Tool auch kenne, gesagt und getan. Finde ich auch etwas modularer und einfacher zu handeln. Hier das Ergebnis mit WLST:



# Adjust paths and domain name to suit your installation.
echo "Starting up all servers on machine TheHost..."
export ORACLE_BASE=/Pfad_zum_Oracle_Home
export MW_HOME=/Pfad_zum_Oracle_Home/wlserver/..
export WLS_HOME=$ORACLE_BASE/wlserver
export WL_HOME=$WLS_HOME
export DOMAIN_HOME=/Pfad_zur_Domain/domains/my_domain
export OHS_INST=$DOMAIN_HOME/config/fmwconfig/components/OHS/instances/ohs1
export WLST=${ORACLE_HOME}/oracle_common/common/bin/wlst.sh


# Start WebLogic Domain
echo "Starting up WebLogic AdminServer ..."
${WLST} start_admin.py

# Start the managed Servers
echo "Starting up WLS_FORMS ..."
echo "Starting up WLS_REPORTS ..."
echo "Starting up WLS_ANOTHER_SERVER ..."
${WLST} start_ms.py

# Start the web tier (HTTP Server).
echo "Starting up ohs1 ..."
echo "Starting up reports Servers ..."
${WLST} start_comps.py

Hier beispielhaft der Inhalt der start_admin.py:

nmConnect(userConfigFile='/Pfad_zur_Domain/userConfigFile',userKeyFile='/Pfad_zur_Domain/userKeyFile',host='TheHost',port='theNodemanagerListenPort',
domainName='my_domain',domainDir='/Pfad_zur_Domain')
nmStart('AdminServer')


Die Datei start_ms.py enthält:
nmConnect(userConfigFile='/Pfad_zur_Domain/userConfigFile',userKeyFile='/Pfad_zur_Domain/userKeyFile',host='TheHost',port='theNodemanagerListenPort',
domainName='my_domain',domainDir='/Pfad_zur_Domain')
nmStart('WLS_FORMS')
nmStart('WLS_REPORTS')
nmStart('WLS_ANOTHER_SERVER')
...

Die Datei start_comps.py enthält:
nmConnect(userConfigFile='/Pfad_zur_Domain/userConfigFile',userKeyFile='/Pfad_zur_Domain/userKeyFile',host='TheHost',port='theNodemanagerListenPort',
domainName='my_domain',domainDir='/Pfad_zur_Domain')
nmStart(serverName='ohs1', serverType='OHS')
nmStart(serverName='rep_server1', serverType='ReportsServerComponent')
...

Mit beiden Varianten werden nacheinander alle Server und Komponenten, d.h. der gesamte Fusion Middleware Stack gestartet bzw. im anderen Fall auch wieder gestoppt. Das ist sehr praktisch und mit WLST natürlich nochmal einen großen Ticken eleganter als mit reiner Shell-Programmierung.

Update einen Tag später durch weiteres Refactoring und Variablennutzung:
${WLST} start_ms.py $DOMAIN_HOME $WLS_HOST $NODEMGR_PORT

Die Datei start_ms.py enthält:
nmConnect(userConfigFile=sys.argv[1]+'/userConfigFile',userKeyFile=sys.argv[1]+'/userKeyFile',host=sys.argv[2],port=sys.argv[3],
domainName='my_domain',domainDir=sys.argv[1])
nmStart('WLS_FORMS')
nmStart('WLS_REPORTS')
nmStart('WLS_ANOTHER_SERVER')
...

Bis bald im Forms und Weblogic Land
Holger