Your SlideShare is downloading. ×
0
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Eureka moment
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Eureka moment

1,177

Published on

Presentation from BLUG 2012

Presentation from BLUG 2012

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,177
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • 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
  • 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
  • Transcript

    • 1. The Eureka Moment: The JSF Knowledge You Need To Understand XPages Paul Withers – Intec Systems Ltd
    • 2. AgendaIntroductionXPages Server ProcessingJVM and the NSFMemory ManagementJSF Event ModelSummary
    • 3. About MeSenior Domino Developer, Intec Systems LtdXPages Developer since 8.5.0IBM ChampionCo-Host of The XCast
    • 4. 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
    • 5. 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
    • 6. AgendaIntroductionXPages Server ProcessingJVM and the NSFMemory ManagementJSF Event ModelSummary
    • 7. Server Architecture Java Virtual Machine XSP Command Manager Domino HTTP Server
    • 8. 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
    • 9. 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 errorReturn XPage
    • 10. XPiNCServer-based NSFs need a local XSP Command Manager etc.XPages Extensions, Java packages must be deployed locallyAuthentication via Notes logon on local PCSigner access granted via ECL on local PCLogging accessible from Help → Support → View Log on local PC
    • 11. AgendaIntroductionXPages Server ProcessingJVM and the NSFMemory ManagementJSF Event ModelSummary
    • 12. 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
    • 13. 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
    • 14. XPages Control LanguagesLiteral values Strings, booleans etcExpression Language #{document1.FirstName}SSJS #{javascript:document1.getItemValueString(“FirstName”)}Custom All of the above
    • 15. DEMO
    • 16. Performance of LanguagesThe fewer controls the better= less Java code to be runReason for Extension Library controls Combines multiple controls into one Java classCombining languages is goodEL is quicker than SSJS
    • 17. AgendaIntroductionXPages Server ProcessingJVM and the NSFMemory ManagementJSF Event ModelSummary
    • 18. 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
    • 19. 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.properties editorPackage Explorer → WebContentWEB- INFxsp.properties
    • 20. Persistence
    • 21. Demo
    • 22. AgendaIntroductionXPages Server ProcessingJVM and the NSFMemory ManagementJSF Event ModelSummary
    • 23. JSF LifeCycle
    • 24. 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
    • 25. 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
    • 26. AbstractPhaseListenerAbstract because it cant be instantiatedImplements javax.faces.event.PhaseListenerAllows us to track JSF lifecycle phasesJava class plus reference in faces-config
    • 27. DEMO
    • 28. Basic ProcessingValidation fails beforeRestoreView afterRestoreView beforeApplyRequestValues afterApplyRequestValues beforeProcessValidations beforeRenderResponse afterRenderResponseEvent logic not run
    • 29. 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
    • 30. immediate=“true”Validation fails beforeRestoreView afterRestoreView beforeApplyRequestValues afterApplyRequestValues beforeRenderResponse afterRenderResponseEvent logic run in ApplyRequestValues phaseComponent value never goes past submittedValueComponent tree not updated
    • 31. Performance SmackdownCompute on Page Load (Loaded)Compute Dynamically (Runtime)ThemedataContexts “Global variables” Scoped to XPage, Custom Control, Panel Referenced via EL – #{var1}
    • 32. Performance SmackdownPage Load – how many callsPartial Refresh – how many callsexecMode=“partial” Runs over only part of component tree
    • 33. DEMO
    • 34. 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
    • 35. 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
    • 36. SummaryScoped variables not cleared by ?logoutCombining controls improves performancePersistence options can optimise applicationJSF lifecycle affects event processingLoaded and dataContexts offer benefitsexecMode improves performance
    • 37. SummaryScript libraries work for application reusabilitydataContexts better for page reusabilityVariableResolver best for application-level reusabilityUpgrade VariableResolver to ELResolver when XPages updated to JSF 2.0Use AbstractPhaseListener to test
    • 38. Combining Controls Results
    • 39. Language Lifecycle Results
    • 40. Code Location Results
    • 41. 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
    • 42. Thank You, Questions & EvalsPaul Withers, Intec Systems LtdEmail: pwithers@intec.co.ukTwitter: paulswithersBlog: www.intec.co.uk/blog Please complete evaluations

    ×