Upload
ngonguyet
View
220
Download
2
Embed Size (px)
Citation preview
DOAG 2013 IMC,Mainz, 06. Juni 2013
Andreas KoopCEO & Consultant
Oracle Technologies
DEPLOYMENT BEST PRACTICES ON WEBLOGIC SERVER
Challenges
Strategies
Plan
Best Practices
Andreas KoopCEO & Consultant
Oracle TechnologiesABOUT
Consulting, Training Oracle Fusion MiddlewareADF Certified Implementation Specialist
CommunityDOAG, ADF EMG, ADF German Community, Twitter @multikoop
BlogTechnical http://multikoop.blogspot.comSonstiges http://www.enpit.de/blog
2
Training DevelopmentConsultingOracle Fusion Middleware
OracleADF
OracleWebLogic
OracleWebCenter
ENTERPRISE PRAGMATIC IT
Andreas Koop
AGENDA
Deployment Challenges
Deployment Tools & Strategies
Deployment Plan
Production Redeployment
Pain Points & Conclusion
4
Andreas Koop
DEPLOYMENT CHALLENGES‣ Multiple Apps, multiple versions, instant releases..
‣ Application development becomes easy, Middleware becomes complex:DataSources, WebServices, Processes, JMS, MDS, App Roles, Permissions, custom configuration, What else?
‣ Who can handle this?
5
Andreas Koop
APPLICATION DEPLOYMENT OVERVIEW‣ Prepare
‣ Copy deployment units to target servers if needed
‣ Deploy
‣ Shared Libraries
‣ ApplicationsDataSourcesJMS Topics/QueuesEJBs..
6
AS App1 App2
App / Lib
deploy
Cluster
(sample topology)
Andreas Koop
WEBLOGIC DEPLOYMENT TOOLS‣ java weblogic.Deployer (. ./setWLSEnv.sh)
‣ Ant Task / Maven / Autodeploy=> Development / Test
‣ WLST Commands=> Development / Test / Production
‣ Admin Console / EM=> Development / AdHoc Cases / Support
7
! Do not use in Production
My Favorit! Gives a lot of predictability and
safety!
Andreas Koop
STAGING MODE: STAGE FOR SMALL APPLICATIONS‣ Admin Server copies
deployment unit to servers/<name>/stage
‣ Managed Servers deploy using their local copy
‣ => Use for small applications !
8
AS App1 App2
App
deploy
ear earcop
y earcop
y
(sample topology)
Andreas Koop
‣ Admin Server does not copy deployment units
‣ shared, directly accessibly by AS and MS
‣ => Use for large applications or exploded-->Reload of JSP/Servlet
‣ => Saves time!
AS App1 App2
STAGING MODE: NO STAGE FOR LARGE APPLICATIONS
9
/shared/apps/myapp1.ear
App
deploy
(sample topology)
Andreas Koop
‣ Admin Server does not copy deployment units
‣ Manuel copy to AS and MS needed
‣ => Use if no shared fs available
‣ => Use if scripts for manual distrib. exists
STAGING MODE: EXTERNAL STAGE FOR...
10
AS App1 App2
App
deploy
earcop
y earcop
y earcop
y
AdminGuy
(sample topology)
Andreas Koop
WHERE TO LOCATE DEPLOYMENT UNITS‣ ! Prerequisite: Do not use default for domain home:
$MW_HOME/user_projects/domains
‣ Locate domain outside $MW_HOME
‣ Locate App artefacts outside $MW_HOME
11
/domains/mydomain/
/applications/mydomain/myapp1/1.0/app/myapp1.ear/applications/mydomain/myapp1/1.0/plan/plan.xml
Andreas Koop
QUIZ: WHAT DO THAT OPTIONS MEAN? (FROM ADMIN CONSOLE)
12
AS uses nostage by default
MS uses stage by default
depends
stage
nostage
Andreas Koop
DEPLOY WITH ANT
13
<?xml version="1.0" encoding="UTF-8" ?><project name="deploy-myapp" default="deploy"> <path id="weblogic.deploy.path"> <fileset file="${weblogic.home}/server/lib/weblogic.jar" /> <fileset file="${weblogic.home}/server/lib/webservices.jar" /> </path> <taskdef name="wldeploy" classname="weblogic.ant.taskdefs.management.WLDeploy" classpathref="weblogic.deploy.path" /> <target name="deploy">
</target></project>
<wldeploy action="deploy" user="${weblogic.user}" password="${weblogic.password}" adminurl="${weblogic.adminurl}" source="${app.webapp}" name="${app.name}" targets="${weblogic.targets}" verbose="true" debug="false"/>
Andreas Koop
DEPLOY WITH ANTEXTENDED
14
<?xml version="1.0" encoding="UTF-8" ?><project name="deploy-myapp" default="deploy"> ... <!-- WLS Taskdefs --> <path id="wls.classpath"> <fileset dir="${oracle.weblogic.home}/server/lib" includes="weblogic.jar"/> </path> <taskdef name="wlst" classname="weblogic.ant.taskdefs.management.WLSTTask" classpathref="wls.classpath"/> <target name="deploy"> <echo message=" Deploying application ... "/>
</target> ...</project>
<wlst debug="true" failOnError="true" classpathref="wls.classpath" fileName="./wlst/deploy.py" arguments="....." ></wlst>
Reuse existing WLST Scripts!
Andreas Koop
DEPLOY WITH MAVENPREPARE
‣ Need to generate maven plugin with the WebLogic JarBuilder Tool (at least in 11g)
‣ Install into Maven Repository (see documentation)
‣ Use in your projects pom.xml (see next slide)
15
$ java -jar wljarbuilder.jar -profile weblogic-maven-plugin....
Created new jar file: ../wlserver_10.3/server/lib/weblogic-maven-plugin.jar
Andreas Koop
DEPLOY WITH MAVENUSE‣ Directly
‣ In ,install‘ Maven Lifecycle of your pom.xml
16
$ mvn weblogic:deploy
<plugin> <groupId>com.oracle.weblogic</groupId> <artifactId>weblogic-maven-plugin</artifactId> <version>10.3.6</version> <configuration> <adminurl>t3://localhost:7001</adminurl> <user>weblogic</user> <password>password</password> <name>myapp</name> <upload>true</upload> <targets>AdminServer</targets> </configuration>
Andreas Koop
DEPLOY WITH MAVENUSE‣ In ,install‘ Maven Lifecycle of your pom.xml
17
... <executions> <execution> <id>deploy</id> <phase>install</phase> <goals> <goal>deploy</goal> </goals> <configuration> <source>deploy/myapp.war</source> </configuration> </execution> </executions></plugin>
Andreas Koop
DEPLOYMENT WITH ANT / MVNCONCLUSION
‣ „Pure Ant“ WebLogic Deployment Tasks are not powerful enough.
‣ Extend where needed with custom WLST scripts
‣ Fits typically well in existing CI Build Environment
‣ Extended Maven Features in WLS 12c : create-domain, start-server .... !
18
Andreas Koop
DEPLOY WITH WLSTHOW TO
19
connect('weblogic', 'welcome1', ADMIN_URL)
deploy('myApp', '/path/to/myApp.ear', targets='Cluster1')# targets='Server1'startApplication('myApp')
disconnect()exit()
Andreas Koop
UNDEPLOY WITH WLSTHOW TO
20
connect('weblogic', 'welcome1', ADMIN_URL)
stopApplication('myApp')undeploy('myApp')# default: from all targets
disconnect()exit()
Andreas Koop
WLST DEPLOYMENT COMMANDS
21
Command
deploy(appName, path, [targets], [stageMode], [planPath], [options])
startApplication(appName, [options])
stopApplication(appName, [options])
undeploy(appName,[targets],[options])
updateApplication(appName, [planPath], [options])Update app with plan.xml
listApplications()
Andreas Koop
‣ Always start with a cluster - even if only a single MS is needed at the beginning
‣ => Easily to scale afterwards
‣ => No changes to deploymentstrategy needed
DEPLOY TO A CLUSTER FROM THE BEGINNING
22
App1 / Lib
deploy
App1
Cluster
App1
Cluster
App1...
Andreas Koop
HANDLING DIFFERENT ENV REQUIREMENTS
23
Development Test Production
DataSource DataSource DataSource
weblogic.xmljsp-descriptor/verbose
= true...
weblogic.xmljsp-descriptor/verbose
= false...
weblogic.xmljsp-descriptor/verbose
= false...
web.xmlinit-param/name[css-compression]=off
session-timeout = 3600...
web.xmlinit-param/name[css-compression]=on
session-timeout = 60...
web.xmlinit-param/name[css-compression]=on
session-timeout = 7200...
......
Andreas Koop
HANDLING DIFFERENT ENV REQUIREMENTS
24
Development Test Production
DataSource DataSource DataSource
plan.xml
web.xml -> session-timeout = 3600
weblogic.xml -> ...
plan.xml
web.xml -> session-timeout = 60
weblogic.xml -> ...
plan.xml
web.xml -> session-timeout = 7200
weblogic.xml -> ...
EAR EAR EAR
......
deploy deploy deploy
+ ++
Andreas Koop
WHAT IS A DEPLOYMENT PLAN‣ Plan (plan.xml) used with deployment artefact
‣ Replacing values by XPath / Variables
‣ Useful for
‣ Changes to web.xml / weblogic.xml / Other XML
‣ ! No changes to .properties possible
‣ „Deploy myapp.ear -plan /path/to/plan.xml ...“
25
Andreas Koop
DEPLOYMENT PLAN CREATION / EDITING‣ Working with plan.xml and plain text editor is
difficult! Best Practice: OEPE plan.xml Editor!
26
Or use,java weblogic.PlanGenerator‘
Andreas Koop
EDIT DEPLOYMENT PLANWITH OEPE‣ Nice XPath Editor included! easy selection of
assignable elements and selection on variable!
27
Andreas Koop
HOW TO DEPLOY WITH PLAN‣ weblogic.Deployer
‣ Or with WLST
‣ Or Admin Console / EM
28
deploy('myApp', '/path/to/1.0/app/myApp.ear', plan='/path/to/1.0/plan/plan.xml' ..)
java weblogic.Deployer .... -plan /path/to/1.0/plan/plan.xml ...
Andreas Koop
USE SHARED LIBRARIES‣ Static content: js, css, images
‣ Common Functionality, Modules
29
Andreas Koop
HOW TO DEPLOYSHARED LIBRARIES‣ weblogic.Deployer
‣ Or WLST
31
#!/bin/sh. $WL_HOME/server/bin/setWLSEnv.sh
java weblogic.Deployer -adminurl t3://eden.local:7001 -username weblogic -password welcome1 -upload -library -targets Cluster1 -deploy -source enpit-shared-lib.war
...deploy('enpit-shared-lib', '/path/to/enpit-shared-lib.war', targets='Cluster1',libraryModule='true'[, upload='true'])
Andreas Koop
HOW TO CONSUMESHARED LIBRARIES‣ Configure references in weblogic.xml or weblogic-
application.xml
32
<?xml version='1.0' encoding='UTF-8'?><weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app.xsd" xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">... <library-ref> <library-name>enpit-common-lib</library-name> <!--specification-version>1.0</specification-version> <implementation-version>1.0.6</implementation-version> <exact-match>true</exact-match--> </library-ref></weblogic-web-app>
Andreas Koop
SHARED LIBRARIES - POSSIBLE ERRORS‣ Precondition: Shared Library is referenced. App is
running
‣ Solution
‣ Deploy Library as new version
‣ „Production redeploy“ dependent application
33
Cannot undeploy library Extension-Name: enpit-common-war-lib, Specification-Version: 1, Implementation-Version: 1.0.4 from server AdminServer, because the following deployed applications reference it: enpittestcommons-reflib.war
Andreas Koop
SECURITY DEPLOYMENT CONSIDERATIONS‣ Security Realm <- JAAS Security Standard <- OPPS
Provider
34
<security-constraint> <web-resource-collection> <web-resource-name>administration</web-resource-name> <url-pattern>/admin/*.jsp</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>admin-users</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>jazn.com</realm-name> </login-config> <security-role> <role-name>admin-users</role-name> </security-role>
web.xml
Andreas Koop
SECURITY DEPLOYMENT CONSIDERATIONS‣ Deployment Descriptor (DD only, Java EE Standard)
‣
‣ Custom Roles Model=> Any DD Role-Mapping is ignored
‣ Custom Roles and Policy Model=> Not recommended for fine-grained control
35
<security-role-assignment> <role-name>admin-users</role-name> <principal-name>Administrator</principal-name> </security-role-assignment>
weblogic.xml
Andreas Koop
SECURITY DEPLOYMENT CONSIDERATIONS‣ system-jazn-data.xml (OPSS specific)
‣ The best tool currently is Enterprise Manager
36
BPM Role Mapping for instance
Andreas Koop
PRODUCTION REDEPLOYMENT
37
app v1.0 app v1.0.1
Existing client connections
New Client Connections
deploy('myApp', '/path/to/myApp.ear', ..,appVersion = '1.0')
deploy('myApp', '/path/to/myApp.ear', ..,appVersion = '1.0.1')
Andreas Koop
PRODUCTION REDEPLOYMENT BEST PRACTICE
38
‣ Provide Version information insideMANIFEST.MF
‣ Set version during CI build process!
‣ Specify retire grace period on redeploy
‣ Retire immediately
... -redeploy -source ...myapp.ear -retiretimeout 300
... -undeploy -name myapp -appversion 1.0
Arggh. Need the lower version no. Not
easy to automate...
Andreas Koop
SOLUTION FORUNDEPLOY RETIRED APPS
39
def undeploy_retired_apps(l_appName): cd ('AppDeployments') l_apps=cmo.getAppDeployments() for app in l_apps: domainConfig() cd ('/AppDeployments/'+app.getName()+'/Targets') l_targets = ls(returnMap='true') domainRuntime() cd('AppRuntimeStateRuntime/AppRuntimeStateRuntime')
for target in l_targets: l_state=cmo.getCurrentState(app.getName(),target) if app.getName().find(l_appName) != -1: if l_state == 'STOP_RUNNING': log_info ('Found:'+ app.getName()+' - '+str(l_state)) stopApplication(app.getName()) l_state=cmo.getCurrentState(app.getName(),target) if l_state == 'STATE_RETIRED': log_info ('Found:'+ app.getName()+' - '+str(l_state)) undeploy_app(app.getName())
undeploy_retired_apps()
Andreas Koop
PRODUCTION REDEPLOYMENT BEST PRACTICE
40
‣ Rollback deployment to previousversion is an easy task
‣ Keep in mind: In-Place redeployment destroys existing sessions! To keep the session state:
... -redeploy -source .../1.0/app/myapp.ear
weblogic.xml
.. <container-descriptor> <save-sessions-enabled>true</save-sessions-enabled> </container-descriptor>.. !Hower, the
application will not be available at redeploy!
Andreas Koop
PAIN POINTS AND POSSIBLE SOLUTIONS‣ Custom configuration data
Suggestion: Properties accessible by JNDI (See GlassFish)
‣ Single Security Policy Store for all applications (system-jazn-data.xml) Recommendation: OID or DB based Policy-StoreSuggestion: Policy-Store bundled with app deployment
41
App1
Domain
App 2
system-jazn-data.xml - Role-Mapping App1- Role-Mapping App2- Permissions App1- Permissions App2
Andreas Koop
CONCLUSION‣ Automate from the beginning
‣ Stage mode depends on app size, existing infrastructure
‣ Use deployment plans & „production redeployment“
‣ Use shared libs where applicable
42
Andreas Koop
FURTHER READING‣ Oracle FMW Admin Guide
http://docs.oracle.com/cd/E23943_01/core.1111/e10105/deployer_role.htm
‣ Oracle FMW Deploying Applications to WLShttp://docs.oracle.com/cd/E23943_01/web.1111/e13702/toc.htm
‣ Community / Blogshttp://middlewaremagic.comhttp://weblogic-wonders.comhttp://weblogic-tips.com...
43