• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Eureka moment
 

Eureka moment

on

  • 2,412 views

Extended version for DanNotes

Extended version for DanNotes

Statistics

Views

Total Views
2,412
Views on SlideShare
2,412
Embed Views
0

Actions

Likes
0
Downloads
23
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Human nature is to resist what is new because we don't understand it. Lots of new things going on behind scenes in XPages. This session will demystify some. Who has struggled with a problem for hours, then found one piece of information that would have given you the answer straight away, if you'd known it? That's the Eureka moment: one crucial piece of info that explains everything.
  • If you attended Intro to XPages session, you will be able to keep up with this session. If you didn't go because you knew it, you'll be able to keep up with this session. If you know what a VariableResolver is, how to code one, why you might need to change it in the future, go get a beer!
  • Traditional Domino web apps used HTTP server. Java servlets used JVM XPages uses both How? When?
  • HTTP 500 if fatal error with XPages runtime - memory issue - Extension Library used by app but not installed - Java class cannot be loaded (NoClassDefFoundError) - Other database compile issue
  • XPINC IS LOCAL EVEN IF NSF IS ON SERVER
  • Who wants a demo? NOTE SPECIFICALLY sessionScope.sessionID
  • Summary of demo
  • Based on previous slides, what will happen? If we split languages across controls, so controls with single language? If we combine literal values and A.N.Other language? If we use different languages?
  • Jump to Application Perspective – Package Explorer – Project Explorer Java code does the same as an Xagent - facesContext,getResponseWriter() - writer.write()
  • Based on previous slides, what will happen? If we split languages across controls, so controls with single language? If we combine literal values and A.N.Other language? If we use different languages?
  • Summary of demo
  • If you want to store / pass info between requests - Add to QueryString - Store in cookies - Pass in AJAX request in response JSF handles this – we've seen sessionID cookie and JSF sessionID in sessionScope. This ensures same session is used Recycle-safe, i.e. values are stored in Java beans and written back to the server as and when required. We'll come back tot hat later.
  • If you want to store / pass info between requests - Add to QueryString - Store in cookies - Pass in AJAX request in response JSF handles this – we've seen sessionID cookie and JSF sessionID in sessionScope. This ensures same session is used Recycle-safe, i.e. values are stored in Java beans and written back to the server as and when required. We'll come back tot hat later.
  • Screenshots of new Persistence tab of xsp.properties file Server Page Persistence – see demo Page Persistence Mode
  • If immediate = “true” and using component values, need to use getComponent(“myComponent”).getSubmittedValue()
  • If NOT using immediate = “true” and using component values, need to use getComponent(“myComponent”).getValue()
  • In the following demos, I'm using an AbstractPhaseListener to check what's happening where
  • Let's see what happens during page events
  • Summary of results of JSF Lifecycle - Basic
  • Summary of results of JSF Lifecycle – No Validation
  • Summary of results of JSF Lifecycle - Immediate
  • Let's see what happens depending on where Computed Field value property and Edit Box rendered property are defined
  • Summary of demo

Eureka moment Eureka moment Presentation Transcript

  • The Eureka Moment:XPages Under The Covers Paul Withers Intec Systems Limited
  • AgendaIntroductionXPages Server ProcessingJVM and the NSFMemory ManagementJSF Event Model – LifecycleJSF Event Model – PerformanceRendered / Language Performance
  • About MeSenior Domino Developer, Intec Systems LtdXPages Developer since 8.5.0IBM ChampionCo-Host of The XCastCo-Author of XPages Extension Library book
  • Why This Session?Nothing in life is to be feared, it is only to be understood. Now is the time to understand more, so that we may fear less. Marie CurieA matter that becomes clear ceases to concern us. Friedrich NietzscheFurious activity is no substitute for understanding. H.H. WilliamsNo. I am your father. Darth Vader
  • Why This Session?XPages vs Domino HTTPLanguage Performance Language Roadmap and JustificationPersistence options Which setting for which applicationJSF Lifecycle – understand page processingPartial refresh – beyond event defaults
  • ExpectationsYou should: Know what XPages are Know that XPages runs on a Domino Server Know the Computed Field, Edit Box, Repeat controlsYou dont: Have a thorough understanding of JSF Have expert knowledge of dataContexts, managed beans, PhaseListeners and VariableResolvers
  • To Download Sample AppSource code at http://projects.qtzar.com/projects/jsf_eurekaSource control with GitDownload and install eGit from OpenNTFCreate new project from source code http://git.qtzar.com/jsf_eureka.git/Associate with new NSF
  • AgendaIntroductionXPages Server ProcessingJVM and the NSFMemory ManagementJSF Event Model – LifecycleJSF Event Model – PerformanceRendered / Language Performance
  • Server Architecture Java Virtual Machine XSP Command Manager Domino HTTP Server
  • So When an XPage Is Served...Can HTTP Server resolve the URL? HTTP 404 ErrorDoes user have access to NSF? HTTP Authentication PageCan HTTP Server find resource in the NSF? HTTP 404 Error
  • So When an XPage Is Served...Does the signer have access to run XPages? HTTP 403 ErrorAre there SSJS errors? XSP Command Manager takes over HTTP 500 error*Return XPage
  • *HTTP Error 500 ReasonsNo server / custom error page definedMissing Extension Library or other library on serverjava.lang.NoClassDefFoundErrorjava.lang.securityException Check <domino>dataIBM_TECHNICAL_ SUPPORTxpages_exc_ServerName_yyyy_ MM_dd@hh_mm_ss.log
  • XPiNCServer-based NSFs need a local XSPCommand Manager etc.Authentication via Notes logon on local PCSigner access granted via ECL on local PCXPages Extensions, Java packages must bedeployed locallyLogging accessible from Help → Support →View Log on local PC
  • AgendaIntroductionXPages Server ProcessingJVM and the NSFMemory ManagementJSF Event Model – LifecycleJSF Event Model – PerformanceRendered / Language Performance
  • Java Virtual Machine Means...Each NSF is a separate Java applicationsessionScope is per NSF Browser session, NOT user session Setting sessionScope in Db1.nsf does NOT set sessionScope in Db2.nsfsessionScope is ONLY within JVM – not cleared by HTTP logout
  • DEMO
  • JAVA Virtual MachineXPages → Java classes → Java bytecodeEach control is a Java classExtensions are pre-packaged Java classes Define properties (what can be customised) Define renderers (what is printed)SSJS code is String passed to Java methodJava code prints HTML to browser
  • XPages Control LanguagesLiteral values Strings, booleans etcExpression Language #{document1.FirstName}SSJS #{javascript:document1.getItemValueString(“FirstName”)}Custom All of the above
  • HypothesesHow will fewer controls improve performance?How will different languages affect performance?What is the comparison of standard Dojo vs Extension Library perform?
  • DEMO
  • Performance of LanguagesThe fewer controls the better= less Java code to be runReason for Extension Library controls Less Java code in XPages / Custom Controls Some controls lazy loadedCombining languages is goodEL is quicker than SSJS
  • AgendaIntroductionXPages Server ProcessingJVM and the NSFMemory ManagementJSF Event Model – LifecycleJSF Event Model – PerformanceRendered / Language Performance
  • JSF and SerializationHTTP is state-lessJSF keeps state-full server representation of UI (component tree or view)Objects stored in component tree must be serializable (persist between requests) Domino objects recycled after each request Datasources are recycle-safe
  • Persistence Tab
  • Persistence optionsComponent tree (map of XPage on server) either held in memory of JVM or serialized to diskxsp.persistence.XXX propertiesSee persistence tab of new xsp.propertieseditorPackage Explorer → WebContentWEB-INFxsp.properties
  • Demo
  • Persistence SummaryKeep Pages in Memory Remembering, remembering, rememberingKeep Pages on Disk Writing...next? You want it again? ReadingKeep Only The Current Page In Memory Remembering, remembering, remembering Oh, new page? Writing...and now Remembering, remembering, remembering
  • Persistence SummaryGzip Persisted Files Writing ...next? You want it again? ReadingPersist Files Asynchronously Server busy, remembering. Next? (Writing, writing)Maximum Pages... Remembering, remembering, remembering Writing, retrieving, writing, writing
  • General Tab
  • General optionsSettings available in xsp.properties editorApplication & Session timeouts XSP Command Manager within HTTP server Session timeout overridden by HTTP session timeoutxsp.session.transient=“false” XPage becomes stateless Default VALUES overridden between requests Default STATES not overridden
  • Demo
  • xsp.session.transientState not persisted NOT “Go to next page” from current INSTEAD “Go to next page” from default NOT “Toggle show detail” from previous state INSTEAD “Toggle show detail” from defaultValues persistedGreat for large, read-only pages – no storageNeed to build your own “relative” functionality
  • AgendaIntroductionXPages Server ProcessingJVM and the NSFMemory ManagementJSF Event Model – LifecycleJSF Event Model – PerformanceRendered / Language Performance
  • JSF LifeCycle
  • Six PhasesRestore View JSF component tree retrievedApply Request Values this.setSubmittedValue(passedValue) run Any event logic run if immediate=“true”Process Validation Any converters applied Any validators applied
  • Six Phases ContinuedUpdate Model Values this.setValue(this.getSubmittedValue()); this.setSubmittedValue(null)Invoke Application Any event logic runRender Response HTML rendered and state saved Only event that runs during page load
  • AbstractPhaseListenerAbstract because it cant be instantiatedImplements javax.faces.event.PhaseListenerAllows us to track JSF lifecycle phasesJava class plus reference in faces-config
  • DEMO
  • Basic ProcessingValidation fails beforeRestoreView afterRestoreView beforeApplyRequestValues afterApplyRequestValues beforeProcessValidations beforeRenderResponse afterRenderResponseEvent logic not run
  • No ValidationConversion still honoured If failed, skips from ProcessValidations to RenderResponse Event Logic not runIf no conversion errors, all phases runValues passed from submittedValue to valueComponent tree updated
  • immediate=“true”Validation fails beforeRestoreView afterRestoreView beforeApplyRequestValues afterApplyRequestValues beforeRenderResponse afterRenderResponseEvent logic run in ApplyRequestValues phaseComponent value never goes past submittedValueComponent tree not updated
  • DIY SSJS ValidatorsRuns AFTER Apply Request ValuesRuns BEFORE Update Model Values submittedValue property set value property still NULL (or last stored value)Use validator property of controlCheck getSubmittedValue()Post error with facesContext.addMessage()Abort with this.setValid(false)
  • DIY ValidatorRuns at same time as any other validatorUse xp:validator child of validators property of controlvalidatorId property maps to validator-id in faces-config.xmlvalidator-class maps to Java class
  • DIY Validator – Java ClassUse Java class implementing Validator javax.faces.validator.Validatorvalidate(FacesContext,UIComponent,Object) method performs validation, returns voidPost error using throw ValidatorExceptionThird argument is submittedValue – StringValidatorException takes FacesMessage javax.faces.application.FacesMessage
  • AgendaIntroductionXPages Server ProcessingJVM and the NSFMemory ManagementJSF Event Model – LifecycleJSF Event Model – PerformanceRendered / Language Performance
  • Performance SmackdownCompute on Page Load (Loaded)Compute Dynamically (Runtime)ThemedataContexts “Global variables” Scoped to XPage, Custom Control, Panel Referenced via EL – #{var1}
  • Performance SmackdownPage Load – how many callsPartial Refresh – how many callsexecMode=“partial” Runs over only part of component tree
  • DEMO
  • Smackdown ResultsLoaded makes fewer callsTheme cannot override loadedRuntime and theme makes same callsdataContext makes fewer callsexecMode=“partial” improves performance IMPORTANT: Define id to execute lifecycle on EventHandler – All Properties
  • AgendaIntroductionXPages Server ProcessingJVM and the NSFMemory ManagementJSF Event Model – LifecycleJSF Event Model – PerformanceRendered / Language Performance
  • Bonus – Repeats RevisitedSee Bonus – Java Performance + Rendered rendered property set for each of 50000 rowsSSJS in Script Library performs worstSL much worse on partial refreshVariableResolver best for performance Deprecated in JSF 2.0 for ELResolverDataContext next best (rendered property), but only reusable within page
  • SummaryScoped variables not cleared by ?logoutCombining controls improves performancePersistence options can optimise applicationJSF lifecycle affects event processingLoaded and dataContexts offer benefitsexecMode improves performance
  • SummaryScript libraries work for application reusabilitydataContexts better for page reusabilityVariableResolver best for application-levelreusabilityUpgrade VariableResolver to ELResolver whenXPages updated to JSF 2.0Use AbstractPhaseListener to test
  • Combining Controls Results
  • Language Lifecycle Results
  • Code Location Results
  • To Download Sample AppSource code at http://projects.qtzar.com/projects/jsf_eurekaSource control with GitDownload and install eGit from OpenNTFCreate new project from source codeAssociate with new NSF
  • Evals, Questions & Contact DetailsPaul Withersemail: pwithers@intec.co.uktwitter: @PaulSWithersskype: PaulSWithersblog: http://www.intec.co.uk/blogYouTube channel: http://www.youtube.com/intecsystemswebsite: http://www.intec.co.uk