September 2013
Paul Withers
Intec Systems Ltd
OpenNTF Domino API: Making Domino Work The Way You Want
Paul Withers
• XPages Developer since 2009
• IBM Champion
• Author of XPages Extension Library
• Co-Developer of OpenNTF Domino API
• Notes cheat sheets
Agenda
• Background
• Why Bother?
• Installation and Architecture
• Using the API
• Investigating the API
Why Java?
• Current Run Contexts
• Agents
• XPages
• Java / JAR Design Element
• Applets
• Servlets
• Java Addins
• Client Plugin
• Designer Plugin
• OSGi Plugin
• DOTS Task
• Accessible Objects*
• Databases
• Directories
• Documents
• Design Elements
• ACLs
• Admin Requests
• Names
• HTTP Requests / Responses
• Sessions
• File Attachments
*Accessible objects can vary by context
Java in Domino
Not Just for Java
• SSJS
• #{javascript:…} means parse this string
using SSJS rules
• Pass commands to VariableResolver
• Look for corresponding variable name
• Map to a Java object/method
• Add variable and mapping to registry
• In org.openntf.domino.xsp plugin (most)
Why Bother?
* See http://www.shoeboxblog.com/wp-content/uploads/2010/02/life-before-google-500x496.jpg
Why Develop It?
• Out-dated objects (Vectors)
• Out-dated iteration rules
• Unhelpful content assist
• Argument names arg0, arg1
• No Javadoc
• Recycling – here be dragons!
• Exceptional exception handling
Why Use It?
Inline
Documentation
Garbage Collection
Auto-logging
Auto-boxing
Iterables
Helpers
How Do You Use It?
GitHub source
OpenNTF download
Upload Update Site to Server
Drop JAR in
Designer JVM (outside OSGi)
Install Update Site in DDE
Drop JAR in Domino JVM
(outside OSGi)
Installation on Server
• Upload org.openntf.domino.xsp into Update Site Db
• “Restart task http” on console
• Sufficient for OSGi-dependent contexts since M4
Installation on Server
• For non-OSGi contexts, e.g. Agents:
• Save org.openntf.domino JAR to
<domino>\jvm\lib\ext
Installation on Client / Designer
• Install Update Site via Widget Catalog or via File > Application > Install
• For agents save org.openntf.domino JAR to <notes>\jvm \lib\ext
OpenNTF Essentials
• Also part of OpenNTF Essentials
• Only XPages / OSGi part
• Does not include jar file
• Download from http://essentials.openntf.org
• Copy Update Site database to server
• Update notes.ini
• Restart server
• Install in client (see OpenNTF webinar)
Enable Library for NSF
• Remember to add it to Xsp Properties
Configure Xsp Properties
• org.openntf.domino.xsp=….
• godmode: override session and database objects
• marcel: always convert MIME
• raid: run in debug mode
• khan: turns on all “fixes”, e.g. appendItemValue
"I am... better."
"At what?"
"Everything."
• e.g. org.openntf.domino.xsp=godmode,khan
Configure Xsp Properties
• OpenLog
• xsp.openlog.filepath
• xsp.openlog.displayError
• xsp.openlog.genericErrorMessage
• xsp.openlog.email
• xsp.openlog.debugLevel
See Demo App
• All available in the demo application
https://github.com/paulswithers/org.openntf.domino-Demo-Database
Using Demo Database
• Download and sign
• Go to Administration page
• Create Sample DataSet
• Familiar? Sort of…
• Based on Extension Library code
• Uses org.openntf.domino
• Use Import Comparator to compare
Sample Pages
Java Comparator
Creating Pages
Java Methods
• New#{compositeData.title}Bean & Old#{compositeData.title}Bean
• Register in faces-config.xml
• Add public void methods
• For comparator, set javaMethodName to method name
• Create text files
• Copy & paste bean code
Reviewing the Source
• Install / open Eclipse
• Using Git
• Clone repository from GitHub
• Import projects
Packages
• org.openntf.domino: core code
• org.openntf.domino.designer: future Designer-specific
functionality
• org.openntf.domino.plugin: core packaged in plugin
• If you want to modify and test, build this
• org.openntf.domino.xsp: XPages-specific code
• org.openntf.domino.xsp.feature: feature project
• org.openntf.domino.xsp.update: update project
• Build All and export
Core API Packages
• src: main code
• test: test scripts
• tinkerpop: graph db code
• data: sample error log
• doc: JavaDoc
• resources: various resource files
src Package
• org.openntf.domino
• Core interfaces
• Import these classes
• org.openntf.domino.ext
• Extension interfaces
(new methods)
• org.openntf.domino.impl
• Implementations of
interfaces - actual code
Enabling SSJS
• Core cannot have XPages dependencies
• Must be in org.openntf.domino.xsp
• org.openntf.domino.xsp.script
• WrapperOpenDomino.register()
• Adds objects for each class
• getMethodMap() creates map for each
method
• OpenFunction.call() calls that method
How It’s Normally Done
How We Do It?
• WRAPPED_CLASSES adds each class required for SSJS
• Iterated to create one OpenFunction object for each class
• Generic Code to add all public non-static methods to Map
• generateMethodMap()
• Limitations on ellipses / generic parameters
• There are ways round this!
Benefits?
• If we add a new public non-static method, it’s automatically added
• If we add a new class, we just need to add new element in WRAPPED_CLASSES Map
Recent Additions (M3, M4)
• Database Event Listeners
• Graph Database
• Jobs and Tasks
• Email Helper
• XPages OpenLog Logger
• New 9.0.1 methods added
Work in Progress
• Classes for ALL Design Elements
• Read / write XPages, Custom Controls, JARs
• Data Schemas
• Big Data Models
• MapPicker / ListPicker as dataProviders
• NamePicker dataProviders
• Support
Thank You
• Paul Withers
• http://www.intec.co.uk/blog
• @paulswithers
• https://github.com/OpenNTF/ org.openntf.domino
• https://github.com/paulswithers/org.openntf.domino-Demo-Database