deployment best practices on weblogic server · doag 2013 imc,mainz, 06. juni 2013 andreas koop ceo...

45
DOAG 2013 IMC,Mainz, 06. Juni 2013 Andreas Koop CEO & Consultant Oracle Technologies DEPLOYMENT BEST PRACTICES ON WEBLOGIC SERVER Challenges Strategies Plan Best Practices

Upload: ngonguyet

Post on 15-May-2018

220 views

Category:

Documents


2 download

TRANSCRIPT

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 BUILDSHARED LIBRARIES

30

MANIFEST.MF

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

VIELEN DANK FÜR IHRE AUFMERKSAMKEIT

HABEN SIE NOCH FRAGEN?