SlideShare a Scribd company logo
OpenNTF Domino API: Making
Domino Work The Way You Want
Paul Withers
Intec Systems Ltd

September
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

• Accessible Objects*

•

Agents

•

Databases

•

XPages

•

Directories

•

Java / JAR Design Element

•

Documents

•

Applets

•

Design Elements

•

Servlets

•

ACLs

•

Java Addins

•

Admin Requests

•

Client Plugin

•

Names

•

Designer Plugin

•

HTTP Requests / Responses

•

OSGi Plugin

•

Sessions

•

DOTS Task

•

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

Install Update
Site in DDE

OpenNTF
download

Drop JAR in
Domino JVM
(outside OSGi)

Upload Update
Site to Server

Drop JAR in
Designer 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>jvmlibext
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
libext
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.op
enntf.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
• pwithers@intec.co.uk
• http://www.intec.co.uk/blog
• @paulswithers
• https://github.com/OpenNTF/
org.openntf.domino
• https://github.com/paulswithers/org.opennt
f.domino-Demo-Database

More Related Content

PDF
Engage 2014 OpenNTF Domino API Slides
PPTX
OpenNTF Domino API - Overview Introduction
PPTX
SUTOL 2015 - Utilizing the OpenNTF Domino API
PPTX
Utilizing the OpenNTF Domino API
PDF
Deploying WO on Windows
PDF
Celery introduction
PDF
XNA L01–Introduction
PDF
Great Tools Heavily Used In Japan, You Don't Know.
Engage 2014 OpenNTF Domino API Slides
OpenNTF Domino API - Overview Introduction
SUTOL 2015 - Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
Deploying WO on Windows
Celery introduction
XNA L01–Introduction
Great Tools Heavily Used In Japan, You Don't Know.

What's hot (20)

PPTX
Utilizing the open ntf domino api
PPTX
ASP.NET Core 1.0
PDF
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
PDF
Functional Programming for Busy Object Oriented Programmers
PPTX
Automating Your Daily Tasks with Scripting - RubyConf 2015 Taiwan
PDF
Play framework
PPTX
Full stack development with node and NoSQL - All Things Open - October 2017
PPTX
Ansible Best Practices - July 30
PPTX
Introduction to Ansible - Jan 28 - Austin MeetUp
PDF
Getting Started with Go
PDF
Functional Programming in JavaScript
PDF
React Development with the MERN Stack
PDF
Ruby projects of interest for DevOps
PDF
The journey of asyncio adoption in instagram
PDF
Delphi L01 Intro
PPT
Ce e nou in Rails 4
KEY
Wider than rails
PPTX
A Brief History of OWIN
PPTX
I18nize Scala programs à la gettext
PDF
C++ Windows Forms L01 - Intro
Utilizing the open ntf domino api
ASP.NET Core 1.0
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
Functional Programming for Busy Object Oriented Programmers
Automating Your Daily Tasks with Scripting - RubyConf 2015 Taiwan
Play framework
Full stack development with node and NoSQL - All Things Open - October 2017
Ansible Best Practices - July 30
Introduction to Ansible - Jan 28 - Austin MeetUp
Getting Started with Go
Functional Programming in JavaScript
React Development with the MERN Stack
Ruby projects of interest for DevOps
The journey of asyncio adoption in instagram
Delphi L01 Intro
Ce e nou in Rails 4
Wider than rails
A Brief History of OWIN
I18nize Scala programs à la gettext
C++ Windows Forms L01 - Intro
Ad

Similar to DanNotes 2013: OpenNTF Domino API (20)

PPTX
Utilizing the OpenNTF Domino API
PDF
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
PPT
Node and Azure
PPTX
Exploring Java Heap Dumps (Oracle Code One 2018)
PDF
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
PDF
Functional Programming in Clojure
PDF
Masterin Large Scale Java Script Applications
PPTX
introduction to node.js
KEY
CakePHP 2.0 - PHP Matsuri 2011
PPTX
JS Essence
PDF
UKLUG 2012 - XPages, Beyond the basics
PDF
How to Contribute to Apache Usergrid
PDF
Beyond Domino Designer
PPT
XPages -Beyond the Basics
PPTX
Bccon use notes objects in memory and other useful
PDF
Angular 2 overview
PDF
Rapid API Development ArangoDB Foxx
PDF
What to expect from Java 9
PDF
[Struyf] Automate Your Tasks With Azure Functions
PPTX
[DanNotes] XPages - Beyound the Basics
Utilizing the OpenNTF Domino API
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
Node and Azure
Exploring Java Heap Dumps (Oracle Code One 2018)
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
Functional Programming in Clojure
Masterin Large Scale Java Script Applications
introduction to node.js
CakePHP 2.0 - PHP Matsuri 2011
JS Essence
UKLUG 2012 - XPages, Beyond the basics
How to Contribute to Apache Usergrid
Beyond Domino Designer
XPages -Beyond the Basics
Bccon use notes objects in memory and other useful
Angular 2 overview
Rapid API Development ArangoDB Foxx
What to expect from Java 9
[Struyf] Automate Your Tasks With Azure Functions
[DanNotes] XPages - Beyound the Basics
Ad

More from Paul Withers (20)

PDF
Engage 2019: Introduction to Node-Red
PDF
Engage 2019: Modernising Your Domino and XPages Applications
PDF
Engage 2019: AI What Is It Good For
PDF
Social Connections 14 - ICS Integration with Node-RED and Open Source
PDF
ICONUK 2018 - Do You Wanna Build a Chatbot
PDF
IBM Think Session 8598 Domino and JavaScript Development MasterClass
PDF
IBM Think Session 3249 Watson Work Services Java SDK
PDF
GraphQL 101
PDF
GraphQL 101
PDF
OpenNTF Domino API (ODA): Super-Charging Domino Development
PDF
AD1279 "Marty, You're Not Thinking Fourth Dimensionally" - Troubleshooting XP...
PDF
Social Connections 2015 CrossWorlds and Domino
PDF
ICON UK 2015 - ODA and CrossWorlds
PDF
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
PDF
IBM ConnectED 2015 - MAS103 XPages Performance and Scalability
PDF
What's New and Next in OpenNTF Domino API (ICON UK 2014)
PDF
IBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages Heaven
PDF
Embracing the power of the notes client
PDF
BP206 It's Not Herculean: 12 Tasks Made Easier with IBM Domino XPages
PDF
Eureka Moment UKLUG
Engage 2019: Introduction to Node-Red
Engage 2019: Modernising Your Domino and XPages Applications
Engage 2019: AI What Is It Good For
Social Connections 14 - ICS Integration with Node-RED and Open Source
ICONUK 2018 - Do You Wanna Build a Chatbot
IBM Think Session 8598 Domino and JavaScript Development MasterClass
IBM Think Session 3249 Watson Work Services Java SDK
GraphQL 101
GraphQL 101
OpenNTF Domino API (ODA): Super-Charging Domino Development
AD1279 "Marty, You're Not Thinking Fourth Dimensionally" - Troubleshooting XP...
Social Connections 2015 CrossWorlds and Domino
ICON UK 2015 - ODA and CrossWorlds
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - MAS103 XPages Performance and Scalability
What's New and Next in OpenNTF Domino API (ICON UK 2014)
IBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages Heaven
Embracing the power of the notes client
BP206 It's Not Herculean: 12 Tasks Made Easier with IBM Domino XPages
Eureka Moment UKLUG

Recently uploaded (20)

PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
NewMind AI Monthly Chronicles - July 2025
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Unlocking AI with Model Context Protocol (MCP)
PPT
Teaching material agriculture food technology
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
A Presentation on Artificial Intelligence
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Approach and Philosophy of On baking technology
PDF
Encapsulation theory and applications.pdf
PDF
Machine learning based COVID-19 study performance prediction
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Encapsulation_ Review paper, used for researhc scholars
Mobile App Security Testing_ A Comprehensive Guide.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
“AI and Expert System Decision Support & Business Intelligence Systems”
NewMind AI Monthly Chronicles - July 2025
The AUB Centre for AI in Media Proposal.docx
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Reach Out and Touch Someone: Haptics and Empathic Computing
Unlocking AI with Model Context Protocol (MCP)
Teaching material agriculture food technology
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
A Presentation on Artificial Intelligence
MYSQL Presentation for SQL database connectivity
Dropbox Q2 2025 Financial Results & Investor Presentation
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Approach and Philosophy of On baking technology
Encapsulation theory and applications.pdf
Machine learning based COVID-19 study performance prediction

DanNotes 2013: OpenNTF Domino API

  • 1. OpenNTF Domino API: Making Domino Work The Way You Want Paul Withers Intec Systems Ltd September
  • 2. Paul Withers • XPages Developer since 2009 • IBM Champion • Author of XPages Extension Library • Co-Developer of OpenNTF Domino API • Notes cheat sheets
  • 3. Agenda • Background • Why Bother? • Installation and Architecture • Using the API • Investigating the API
  • 4. Why Java? • Current Run Contexts • Accessible Objects* • Agents • Databases • XPages • Directories • Java / JAR Design Element • Documents • Applets • Design Elements • Servlets • ACLs • Java Addins • Admin Requests • Client Plugin • Names • Designer Plugin • HTTP Requests / Responses • OSGi Plugin • Sessions • DOTS Task • File Attachments *Accessible objects can vary by context
  • 6. 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)
  • 7. Why Bother? * See http://www.shoeboxblog.com/wp-content/uploads/2010/02/life-before-google-500x496.jpg
  • 8. 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
  • 10. How Do You Use It? GitHub source Install Update Site in DDE OpenNTF download Drop JAR in Domino JVM (outside OSGi) Upload Update Site to Server Drop JAR in Designer JVM (outside OSGi)
  • 11. Installation on Server • Upload org.openntf.domino.xsp into Update Site Db • “Restart task http” on console • Sufficient for OSGi-dependent contexts since M4
  • 12. Installation on Server • For non-OSGi contexts, e.g. Agents: • Save org.openntf.domino JAR to <domino>jvmlibext
  • 13. 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 libext
  • 14. 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)
  • 15. Enable Library for NSF • Remember to add it to Xsp Properties
  • 16. 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
  • 17. Configure Xsp Properties • OpenLog • • • • • xsp.openlog.filepath xsp.openlog.displayError xsp.openlog.genericErrorMessage xsp.openlog.email xsp.openlog.debugLevel
  • 18. See Demo App • All available in the demo application https://github.com/paulswithers/org.op enntf.domino-Demo-Database
  • 19. 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
  • 23. 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
  • 24. Reviewing the Source • Install / open Eclipse • Using Git • Clone repository from GitHub • Import projects
  • 25. 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
  • 26. Core API Packages • src: main code • test: test scripts • tinkerpop: graph db code • data: sample error log • doc: JavaDoc • resources: various resource files
  • 27. 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
  • 28. 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
  • 30. 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!
  • 31. 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
  • 32. Recent Additions (M3, M4) • Database Event Listeners • Graph Database • Jobs and Tasks • Email Helper • XPages OpenLog Logger • New 9.0.1 methods added
  • 33. 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
  • 34. Thank You • Paul Withers • pwithers@intec.co.uk • http://www.intec.co.uk/blog • @paulswithers • https://github.com/OpenNTF/ org.openntf.domino • https://github.com/paulswithers/org.opennt f.domino-Demo-Database