Friday, 1 July 2016

Rename your Weblogic 12c AdminServer

At one of my customers we create Service Bus Weblogic Domains using a script, driven by a property file. But in one of the environments we encountered that the AdminServer was accidently called 'Adminserver', with a lower-case 's'. Now this is a very minor issue, but the administrator would like to have it fixed, since it is an anomaly regarding with other environments.

This week I got to implement my start-stop scripts (which I will publish later) and so bumbed into this naming fault again.

Renaming it turns out to be walk in the park. So let me show you how I did it. Most of the steps could easily be done in a WLST script, but I trust this is not something you would do on a regular basis, so we do it just in off-line commandline mode.

Before doing anything from the steps below, first shutdown the complete domain, all the weblogic servers, including the AdminServer. And I should advice: backup your domain. This can easily be done by zipping the domain folder.

Then set the fmw environment, that is most conveniently done using a script. The one I always create on a new environment is fmw12c_env.sh:

#!/bin/bash
echo set Fusion MiddleWare 12cR2 environment
export FMW_HOME=/u01/app/oracle/fmw12c2

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

Under Linux you should run this as:
$ . ./fm12c_env.sh

It is important to add the dot in front of the command, to have the settings exported to the calling session. I trust that if you're on windows, you'd be able to create a .bat/.cmd file out of this.

The script put's wlst.sh/.cmd in the path. Start it, which brings you to a prompt like:
wls:/offline> 

In the offline mode, read the domain first with:
wls:/offline> readDomain('/u01/app/work/domains/osb_domain')
Where '/u01/app/work/domains/osb_domain' is the path to the domain.
Navigate to the Servers node:
wls:/offline/osbo3_domain>cd ('/Servers')
wls:/offline/osbo3_domain/Server>ls()
drw-   Adminserver
drw-   osb_server1
Then navigate to the Adminserver (you could have done that immediately, but you might want to check on your servers first):
wls:/offline/osbo3_domain/Server>cd ('Adminserver')

For the wlst novice: you might have discovered by now that we navigate through (cd()) and introspect (ls())the MBean-hierarchy using filesystem-related commands. The current folder is actually the current MBean at hand, also called the 'Current Managed Object', in short 'cmo'.
So now we're at it, change its name, for instance:
wls:/offline/osbo3_domain/Server/Adminserver>cmo.setName('AdminServer')
To have this change effect you need to write/save/update the domain:
wls:/offline/osbo3_domain/Server/Adminserver>updateDomain()

After that you can quit wlst using the 'exit()' command.

There is still one little issue to solve, before being able to start the AdminServer and the rest of the domain.

In most cases the nodemanager uses the startWebLogic.sh command to start the domain. This one calls the setDomainEnv.sh/.cmd script.

When no Servername is provided as the start parameter, the AdminServer is assumed to be started.
This is evaluated in the setDomainEnv.sh/.cmd in the following lines:
if [ "${SERVER_NAME}" = "" ] ; then
        SERVER_NAME="Adminserver"
        export SERVER_NAME
fi

So edit the file, locate the lines and change the line 'SERVER_NAME="Adminserver"' to 'SERVER_NAME="AdminServer"' (or the name you used in change the server to).

In this same file, setDomainEnv.sh/.cmd, you might want to disable the start of the Derby Java Database server.
Locate the lines
# Set DERBY_FLAG, if derby is available.

if [ "${DERBY_FLAG}" = "" ] ; then
        if [ -f ${WL_HOME}/common/derby/lib/derby.jar ] ; then
                DERBY_FLAG="true"
                export DERBY_FLAG
        fi
fi
And add the following lines just before the 'if':
DERBY_FLAG="false"
export DERBY_FLAG

To be able to start the renamed AdminServer you also might want to move the folder named 'security' from the ${DomainHome}/servers/Adminserver folder (the server folder with the previous name) to the corresponding folder with a new name. This allows the renamed server to reuse the boot.properties file. And remove the old folder, or rename the server folder to the new name.

This concludes the renaming-steps. Now you're good to go to startup the domain again.


5 comments:

  1. You forgot to include: $JAVA_HOME/bin/java weblogic.WLST
    into the bash script

    ReplyDelete
  2. You forgot to include:
    $JAVA_HOME/bin/java weblogic.WLST
    into the bash script

    ReplyDelete
  3. You forgot to include:
    $JAVA_HOME/bin/java weblogic.WLST
    in the bash script.

    ReplyDelete
  4. After renaming my adminServer, I have found that the Web Server Log values are still retained under the old server name under /Servers/newServer/WebServer/newServer/WebServerLog/oldServer/ in the WLST hierarchy, forcing me to access them to change them by creating the following function:

    def goLogDir(serverName):
    serverName=str(serverName)
    cd('/Servers/'+serverName)
    ws=cmo.getWebServer()
    cd('/Servers/'+serverName+'/WebServer/'+ws.getName())
    wsl=cmo.getWebServerLog()
    cd('/Servers/'+serverName+'/WebServer/'+ws.getName()+'/WebServerLog/'+wsl.getName())

    goLogDir('newServer')
    cmo.setLogFileFormat(logformat)


    ---------
    I've been unable to rename this short of using sed on the config.xml file (which is fragile when working on xml files).

    Do you have any other suggestions for updating this to the newServer name?

    ReplyDelete
  5. Hi,

    Interesting point. I would have to look into that. You might want to ask that question on community.oracle.com. But I guess you have to recreate the logging MBeans. A bit like I do in my domain scripts on https://blog.darwin-it.nl/2016/06/scripted-domain-creation-for-soabpm-osb.html.

    See the function
    #
    #
    def createServerLog(serverName, logFile, fileCount, fileMinSize, rotationType, fileTimeSpan):
    print ('\nCreate Log for '+serverName)
    print (lineSeperator)
    cd('/Server/'+serverName)
    create(serverName,'Log')
    setLogProperties('/Server/'+serverName+'/Log/'+serverName, logFile, fileCount, fileMinSize, rotationType, fileTimeSpan)


    But I also expect that the existing Log should be removed then.

    ReplyDelete