Based on my previous post I wanted to know if we can achieve to redeploy parts of an ADF application by using shared WebLogic Libraries. In conjuction with the production redeployment WLS feature the overall goal is to prove that we can update modular ADF applications without downtime.
The sample application consists of an employees taskflow that is bundled as ADF Library and deployed as shared library on WebLogic server. The sample is based on ADF 22.214.171.124 / WLS 10.3.5 / HR Schema.
First step: Create ADF Library as Shared WAR deployment
Goto JDev application with the containing Taskflow:
Create a MANIFEST.MF file under ViewController/src/META-INF/ with the following contents
The important parts are
Extension-Name: enpit.sample.empFlowSpecification-Version: 1.0
Create ADF Library Deployment Profile for the empFlow on ViewController project with dependency on your Model project.
Make sure only connection name is Included in the Library
Having an ADF Library Deployment Profile in the employee taskflow application we create an additional Deployment profile (of type WAR) in the ViewController project.
Under WAR Options include the MANIFEST.MF file
Make sure to remove everything from Web Files contributors since we only want to wrap the ADF Library inside this WAR file.
Same to WEB-INF/classes. Exclude everything.
Under Profile Dependencies add the dependency to the ADF Library Profile
Goto WEB-INF/lib Filters and uncheck everything except the desired ADF Library JAR file.
With that WAR deployment configuration we are able to deploy - the ADF Taskflow - as shared library to the WebLogic server. (Select ViewController, right click, Choose Deploy > SharedADFLib ...to Application Server)
As a result the library shows up under Deployments in the WebLogic Admin Console
Deploy master application
In the master application that consumes the taskflow from the ADF Library we need to make sure
- versioning is configured for application deployment
- ADF Library is not bundled with the EAR
- Library reference is added to the ADF Shared Library in weblogic.xml (not weblogic-application.xml)
To enable the versioning for the app deployment we add /src/META-INF/MANIFEST.MF file with the contents
Now goto the EAR deployment profile and add the MANIFEST.MF file under the EAR Options
Goto application descriptors Filters and exclude MANIFEST.MF. (Otherwise the EAR won't be created as JDeveloper will try to include 2 MANIFEST.MF files in the EAR. You will see this exception in the deployment log window).
Now exclude the ADF Library from the application deployment. Goto ViewController project properties of the master application and make sure the library is not deployed by default.
In the WAR deployment profile check that the ADF Library JAR is not included
Next create WEB-INF/weblogic.xml and add library reference to the ADF Shared Library.
Important note: In my first try I added that library reference in the weblogic-application.xml. That won't work. At deployment time there will be the following exception[08:23:54 AM] [Deployer:149034]An exception occurred for task [Deployer:149026]deploy application enpit_application1 [Version=1.0] on DefaultServer.: javax.faces.context.ExternalContext.
[08:23:54 AM] Weblogic Server Exception: weblogic.application.WrappedDeploymentException: javax.faces.context.ExternalContext
[08:23:54 AM] See server logs or server console for more details.
[08:23:54 AM] weblogic.application.WrappedDeploymentException: javax.faces.context.ExternalContext
[08:23:54 AM] #### Deployment incomplete. ####
[08:23:54 AM] Remote deployment failed (oracle.jdevimpl.deploy.common.Jsr88RemoteDeployer)
So don't try this.
Doing it right you should see the following in Admin Console:
Test the application. It loads the taskflow and displays version 1
Next Step: Test production redeployment based on new version of ADF Shared Library
We are going to
- Make changes in employees taskflow
- Change Library Implementation-Version to 1.1
- Deploy ADF Library as Shared WLS Library
- Increase application version to 1.1
- Redeploy master application
So first we increase the library version
and make some simple changes to the JSFF
Next: Deploy ADF Library to JAR
Next: Deploy sharedADFLib Deployment to IntegratedWebLogic
Check deployment in the Admin Console
Goto the master application and change Weblogic-Application-Version to 1.1
and deploy the master application to Verify deployment in the Admin Console once again. You should notice that previous application (1.0) is in stop running state. Actually it is meant to be RETIRED Mode. Existing web sessions will be served by that version 1.0.
Open a NEW BROWSER WINDOW (a different browser window to be dead sure) and point to the master application URL. You should see new version of the integrated Taskflow.
This mechanism is really powerful. It lets you redeploy application parts - maybe of a huge application - without downtime.
Download Sample Application