WebLogic 12.2.1 - Redeployment of versioned applications via RESTful Management Services

Posted by Dirk Nachbar on Friday, December 11, 2015
With the latest release of Oracle WebLogic Server 12.2.1 came quite a lot of enhancements for the RESTful Management Services. The enhancements are really impressive, you are able to monitor (GET) or to modify (POST) your WebLogic environment in detail with a simple URL call either via Browser or via Command Line Tools like cURL. The response time for such REST calls are really impressive compared to the classical way with WLST scripts :-)

For more details about RESTful Management Services you may have a look into the Official Oracle Documentation: http://docs.oracle.com/middleware/1221/wls/WLRUR/index.html

Within this post, I will show how to deploy a versioned application via a simple REST call over cURL. As base for this example you should have a look on the Oracle Learning Library Example "Oracle WebLogic Server 12c (12.2.1): Configure and Using Production Redeployment". Within this Oracle Learning Library Example you can see the classical way of deploying a versioned application. The below used versioned application is coming from this Oracle Learning Library Example, the versioned applications you can download from the before mentioned URL.

Since Oracle WebLogic Server 12.2.1 you will have a lot more possibilities within the RESTful Management Services, for example: creating Managed Servers, creating Data Sources, modifying WebLogic Server settings, deploying applications and so on.

As preparation I have downloaded the versioned.zip file from the Oracle Learning Library example, transferred it to my server on which my WebLogic Server 12.2.1 is running.

First step unzip the versioned.zip file to any directory of your server, make sure that your Oracle WebLogic Server is up and running and specially that the Managed Server to which you want to deploy the versioned application is up and running.

Second step, I simply created two shell scripts to deploy my 2 versioned applications.

Replace within the below provided script for the first deployment just the password for the weblogic user, in my case Oracle12. Align the provided deploymentPath to your path, align the provided Managed Server Name under targets and align the hostname and AdminServer port provided in the last line of the below script:

Script name: deploy_app_v1.sh

#!/bin/ksh
# Script for deployment of version 1
curl -v --user weblogic:Oracle12c \
     -H X-Requested-By:MyClient \
     -H Accept:application/json \
     -H Content-Type:application/json \
     -d "{
          name: 'simple',
          deploymentPath: '/home/oracle/versioned_app/deployversion1/simple.war',
          targets: [ManagedServer1]
         }" \
     -X POST http://wls1221:7001/management/wls/latest/deployments/application

Replace within the below provided script for the second deployment just the password for the weblogic user, in my case Oracle12. Align the provided deploymentPath to your path, align the provided Managed Server Name under targets and align the hostname and AdminServer port provided in the last line of the below script:

Script name: deploy_app_v2.sh

#!/bin/ksh
# Script for deployment of version 2
curl -v --user weblogic:Oracle12c \
     -H X-Requested-By:MyClient \
     -H Accept:application/json \
     -H Content-Type:application/json \
     -d "{
          name: 'simple',
          deploymentPath: '/home/oracle/versioned_app/deployversion2/simple.war',
          targets: [ManagedServer1]
         }" \
     -X POST http://wls1221:7001/management/wls/latest/deployments/application


Now lets start with the first deployment:
[oracle@wls1221]# ./deploy_app_v1.sh

* About to connect() to wls1221 port 7001 (#0)
*   Trying 192.168.56.10...
* Connected to wls1221 (192.168.56.10) port 7001 (#0)
* Server auth using Basic with user 'weblogic'
> POST /management/wls/latest/deployments/application HTTP/1.1
> Authorization: Basic d2VibG9naWM6T3JhY2xlMTJj
> User-Agent: curl/7.29.0
> Host: wls1221:7001
> X-Requested-By:MyClient
> Accept:application/json
> Content-Type:application/json
> Content-Length: 156
> 
* upload completely sent off: 156 out of 156 bytes
< HTTP/1.1 201 Created
< Date: Fri, 11 Dec 2015 10:37:07 GMT
< Location: http://wls1221:7001/management/wls/latest/deployments/application/id/simple
< Content-Length: 794
< Content-Type: application/json
< X-ORACLE-DMS-ECID: 0681dbbd-5c8c-47c3-bf72-2c795675d5b4-0000001a
< X-ORACLE-DMS-RID: 0
< Set-Cookie: JSESSIONID=XMaQnZ6WaiRtdYIelakH-cFG0PHNKdWdp84MMS5ryxHr1xWLUGc6!-693988513; path=/; HttpOnly
< 
{
    "item": {
        "targets": [{
            "status": "completed",
            "errors": [],
            "name": "ManagedServer1",
            "type": "server"
        }],
        "beginTime": 1449830228082,
        "endTime": 1449830234153,
        "status": "completed",
        "deploymentName": "simple",
        "description": "[Deployer:149026]deploy application simple [Version=v1] on ManagedServer1.",
        "operation": "deploy",
        "name": "ADTR-0",
        "id": "0",
        "type": "deployment"
    },
    "messages": [{
        "message": "Deployed the application 'simple'.",
        "severity": "SUCCESS"
    }],
    "links": [{
        "rel": "job",
        "uri": "http:\/\/wls1221:7001\/management\/wls\/latest\/jobs\/deployment\/id\/0"
    }]
* Connection #0 to host wls1221 left intact


Now lets open a browser and access the newly deployed application, in my case http://wls1221:7003/simple (as my target Managed Server is listening on port 7003). You should see a simple website in a blue color scheme. Type in your First Name, Last Name and Favorite Color and press "OK"


Keep the browser open and now we perform the Production Redeployment of the version 2 of our application via RESTful Management Services.


[oracle@wls1221]# ./deploy_app_v2.sh

* About to connect() to wls1221 port 7001 (#0)
*   Trying 192.168.56.10...
* Connected to wls1221 (192.168.56.10) port 7001 (#0)
* Server auth using Basic with user 'weblogic'
> POST /management/wls/latest/deployments/application HTTP/1.1
> Authorization: Basic d2VibG9naWM6T3JhY2xlMTJj
> User-Agent: curl/7.29.0
> Host: wls1221:7001
> X-Requested-By:MyClient
> Accept:application/json
> Content-Type:application/json
> Content-Length: 156
> 
* upload completely sent off: 156 out of 156 bytes
< HTTP/1.1 201 Created
< Date: Fri, 11 Dec 2015 10:37:56 GMT
< Location: http://wls1221:7001/management/wls/latest/deployments/application/id/simple
< Content-Length: 794
< Content-Type: application/json
< X-ORACLE-DMS-ECID: 0681dbbd-5c8c-47c3-bf72-2c795675d5b4-0000001c
< X-ORACLE-DMS-RID: 0
< Set-Cookie: JSESSIONID=2fCQnl74wd1Ps9WDNmfv7eTjnh3yyGnNV6eyYOnbXJHMPO1IQmDn!-693988513; path=/; HttpOnly
< 
{
    "item": {
        "targets": [{
            "status": "completed",
            "errors": [],
            "name": "ManagedServer1",
            "type": "server"
        }],
        "beginTime": 1449830276956,
        "endTime": 1449830282690,
        "status": "completed",
        "deploymentName": "simple",
        "description": "[Deployer:149026]deploy application simple [Version=v2] on ManagedServer1.",
        "operation": "deploy",
        "name": "ADTR-1",
        "id": "1",
        "type": "deployment"
    },
    "messages": [{
        "message": "Deployed the application 'simple'.",
        "severity": "SUCCESS"
    }],
    "links": [{
        "rel": "job",
        "uri": "http:\/\/wls1221:7001\/management\/wls\/latest\/jobs\/deployment\/id\/1"
    }]
* Connection #0 to host wls1221 left intact


Now open a second browser and access once again the URL of the application http://wls1221:7003/simple and now you should see a website with a green color scheme, which is the second version of the application. Type in once again your data and click "OK"



If you now go back to your first browser (with the blue color scheme), click now the link "Start over ..." and you should be able still to use the version 1 of the application as your HTTP Session object is still valid.


When we look now into the Oracle WebLogic Server Console under "Deployments" you should see the 2 versioned applications as following:


So, Production Redeployment of versioned applications via the new enhancements of the RESTful Management Services is possible and really simple.

RESTful Management is the future within Oracle Products ... see for example the latest release of Oracle Golden Gate, even within this product you have now a RESTful API connectivity for monitoring and diagnosing ... http://docs.oracle.com/goldengate/c1221/gg-winux/GRLWU/toc.htm#GRLWU102

These metrics are recorded in a RESTful API for use in diagnosing issues by Oracle GoldenGate Support and Development. These metrics can be used to improve CPU efficiency thus reducing load on source and target databases.


My advice / recommendation:
 have a closer look to the new enhancements of the RESTful Management Services, you have a whole new world of possibilities to refactoring your old monitoring and deployment script based on WLST, even start / shutdown / suspend / resume operations against your WebLogic Servers are possible with the new enhancements of RESTful Management Services.