SlideShare una empresa de Scribd logo
1 de 49
Simplify your code:
give Java a try with the
OpenNTF Domino API
Oliver Busse
We4IT GmbH
Thanks to our sponsors!
7th Sutol Conference, November 2015
7th Sutol Conference, November 2015
Oliver Busse
3
• „Bleeding Yellow“ since R4.5
• Certified Lotus Instructor
since 2001
• IBM Champion for ICS in 2015
• OpenNTF Member Director
• XPages Advocate
• IBM Bluemix curious
• Software Architect at We4IT
@zeromancer1972
www.oliverbusse.com
www.we4it.com
7th Sutol Conference, November 2015
Special thanks go to
Paul S. Withers
Jesse Gallagher
Nathan T. Freeman
Martin Jinoch
John Dalsgaard
7th Sutol Conference, November 2015
Agenda
• What is the OpenNTF Domino API?
• Setup and Implementation
• Other Considerations
• Examples, examples, examples
5
What is the OpenNTF Domino
API?
6
7th Sutol Conference, November 2015
What is the OpenNTF Domino API?
• It‘s an open source project on OpenNTF
• It‘s was created in April 2013
• It‘s maintained by generous developers you
may know
• It fills the gaps and gives the power you
always wanted in Java for Domino
• It‘s often refered to as „ODA“
7
7th Sutol Conference, November 2015
Key developers of the ODA
• Nathan T. Freeman
• Paul S. Withers
• Jesse Gallagher
• Roland Praml
• Martin Jinoch
• René Winkelmeyer
• Tim Tripcony (never forgotten)
8
7th Sutol Conference, November 2015
What is the OpenNTF Domino API? (cont‘d)
• The ODA consists of several packages
– core
– formula
– rest
– xsp
– …
• It‘s an OSGi plugin
• It‘s designed for running on the Domino server
• It‘s designed for XPages (Java, SSJS) and
Plugins
• It can‘t be used in Java Agents 
9
Setup and Implementation
10
7th Sutol Conference, November 2015
Setup and implementation
• Grab it from OpenNTF (recommended)
– http://www.openntf.org/main.nsf/project.xsp?r=pr
oject/OpenNTF%20Domino%20API
• Grab it from the Git-Repo
– https://github.com/OpenNTF/org.openntf.domino
• Grab it from the OpenNTF Stash
– https://stash.openntf.org/projects/ODA
11
7th Sutol Conference, November 2015
Setup and implementation (cont‘d)
• Since the ODA is an OSGi plugin you can
install it via the update site mechanism
• It runs as an extension to the XSP runtime on
the HTTP server JVM
• It comes with it‘s own logger
12
7th Sutol Conference, November 2015
Setup: prepare the server
• Set the signer of the NSF as „Sign or run…“ in
server document‘s security section
13
7th Sutol Conference, November 2015
Setup: prepare the updatesite
• Create an updatesite
NSF
• Name it whatever
you want
• Make sure you set
ACL to let the server
READ documents
14
7th Sutol Conference, November 2015
Setup: import ODA into update site
• Find the site.xml file to import it as a local
update site into your NSF
• After import goto „Actions, Sign all Content“
15
7th Sutol Conference, November 2015
Setup: add the ODA to server startup
• Add a new line to your server‘s notes.ini file
– edit file manually
– use a configuration setting (prefered)
• OSGI_HTTP_DYNAMIC_BUNDLES=updatesite.nsf
16
7th Sutol Conference, November 2015
Setup: add the ODA to server startup
• This is what you should see when the server
starts:
17
HTTP JVM: CLFAD0330I: NSF Based plugins are being installed
in the OSGi runtime. For more information please consult the
log
• Check the plugins with
– tell http osgi ss openntf
7th Sutol Conference, November 2015
Setup: prepare Domino Designer
• Open DDE‘s preferences
– Goto „Domino Designer“ section
– Activate „Enable Eclipse plug-in install“
• Open the update site NSF you just created
– Goto „Actions, Show URLs“
– Copy one of the two URLs to clipboard
• Goto „File, Application, Install“
– Choose „Search for new features to install“
– On the next screen „Add (a) Remote Location“
– Enter a name for it and paste the URL in the clipboard
– On the next screen check the ODA entry and click next/yes if
you are asked to
18
Other Considerations
19
7th Sutol Conference, November 2015
Other Considerations
• ODA utilizes the OpenLog project
– XspOpenLogUtil.logEvent(…)
– XspOpenLogUtil.logError(…)
• Get familiar with the OpenLog project from
OpenNTF
• Create a new OpenLog.nsf file in your
server‘s root (if you haven‘t already)
20
DEMO TIME!
21
7th Sutol Conference, November 2015
Examples, examples, examples
• Session handling
• View handling (loops)
• Document & Field handling
• DateTime enhancements
• Transactions
• Xots
• Graphs
22
Session handling
23
7th Sutol Conference, November 2015
Session handling: different approaches
• Extension Library
– ExtlibUtil.getCurrentSession()
– ExtlibUtil.getCurrentSessionAsSigner()
– ExtlibUtil.getCurrentSessionAsSignerWithFullAccess()
– needs exception handling
• XSPUtil
– like ExtlibUtil
– needs exception handling
• Factory
– only one method required, getSession()
– uses enums for different session types
– no exception handling needed!
24
View handling
25
7th Sutol Conference, November 2015
View handling: what you are used to (1)
26
7th Sutol Conference, November 2015
View handling: what you are used to (2)
27
7th Sutol Conference, November 2015
What you now are able to do
28
Document handling
29
7th Sutol Conference, November 2015
Safe lines of code using new methods
• New creation methods
– Database.createDocument(String, Object, …)
– Database.createDocument(HashMap fields)
• Alternatives to replaceItemValue
– Document.put(String field, Object o)
– Document.putAll(HashMap fields)
• Alternatives to getItemValueXXX
– Document.get(Object o) // returns a Map
– Document.getItemValue(String field, Class type)
7th Sutol Conference, November 2015
Document.getItemValue: what you are used to
• getItemValue returns a Vector
• Vectors are not type safe
– editor / compiler complains non-type-safety
– they can contain „anything“
– you have to check what is inside
• if the item does not exist you are running
into trouble…
31
7th Sutol Conference, November 2015
Document.getItemValue: what you can do now
• cast to a type of your choice
– ArrayList<?> values = doc.getItemValue(„foo", ArrayList.class);
• forget type safety
– define your own!
• a non existing item is returned as null, not as
empty Vector
32
DateTime enhancements
33
7th Sutol Conference, November 2015
DateTime enhancements
• Session.createDateTime(y,m,d,hh,mm,ss)
– uses int values
• conversion toJavaDate() not necessary
– DateTime.isBefore()
– DateTime.isAfter()
• other useful comparisons
– DateTime.equalsIgnoreDate()
– DateTime.equalsIgnoreTime()
Transactions
35
7th Sutol Conference, November 2015
Transactions
• ODA adds transactional capabilities to your
Notes data
• You can modify documents without saving
them individually (e.g. in a loop)
• You can also rollback every modification if
you need to (e.g. when you run into an error)
7th Sutol Conference, November 2015
Transactions (cont‘d)
• Create a new DatabaseTransaction object
from the database
– DatabaseTransaction txn = db.startTransaction()
• Perform your modifications
• Decide whether to commit or rollback
– txn.commit()
– txn.rollback()
37
Xots (Xpages OSGi Tasklet Service)
7th Sutol Conference, November 2015
Xots
• Xots = XPages & DOTS
• It‘s the extended version of DOTS (Domino
Tasklet Services
• Use cases
– Can be coded inside the NSF, no plugin project
needed
– Multi-threaded tasks like Runnable, but you can
return values
– Bulk execution of time consuming code
7th Sutol Conference, November 2015
Xots (cont‘d)
• Advantages
– More granular time and event triggering than in
Agents
– Can run with server-side permissions
– Runs in a shared container (JVM) unlikely of an
Agent which runs in a dedicated JVM
• you can exchange data between tasklets
– It‘s coded in a plain Java class and not in an
Agent design element
– You can use SCM systems
40
7th Sutol Conference, November 2015
Xots (cont‘d)
• Core elements of tasklet
– Interface Callable<?>
– Interface Future<?>
• get() method to get the return value(s)
• only if you are interested in a return value
– Class Xots from the ODA
• submit() method to create a tasklet
• schedule() methos to create a periodic tasklet
– use PeriodicScheduler!
41
„Graphs“
42http://whatis.techtarget.com/definition/graph-database
7th Sutol Conference, November 2015
Graph DB
A graph database, also called a graph-oriented
database, is a type of NoSQL database that uses graph
theory to store, map and query relationships.
A graph database is essentially a collection of nodes
and edges. Each node represents an entity (such as a
person or business) and each edge represents a
connection or relationship between two nodes.
http://whatis.techtarget.com/definition/graph-database
7th Sutol Conference, November 2015
Graphs – terminology
• Vertices (Nodes)
– Properties (Key-Value pairs)
• Edges
• ElementStores
– for us: NSF databases
• MetaverseIDs
– Replica + UNID (hashed)
– internal use only (don‘t care about them)
44
7th Sutol Conference, November 2015
Graph DB – in Domino?
• Vertices and Edges are stored as Documents
• The data container is a NSF
• The ElementStore defines the filepath of the
NSF
• An ElementStore can hold different types of
Vertices
• Usually you create one ElementStore for
each Vertice type
45
Let‘s see the demo &
some code
Graph DB
46
7th Sutol Conference, November 2015
Resources
• The XPages demo application
– https://bitbucket.org/zeromancer1972/sutol-2015-oda-graph-demo
• A nice glossary
– http://www.intec.co.uk/from-xpages-to-web-app-glossary/
• OpenNTF Domino API
– http://www.openntf.org/main.nsf/project.xsp?r=project/OpenNTF%20Domino%20API
– http://www.openntf.org/main.nsf/project.xsp?r=project/OpenNTF%20Domino%20API%20Demo%20Database
• Xots
– http://www.intec.co.uk/xots-background-and-multithreaded-tasks-the-openntf-domino-api-way-part-one/
– http://www.intec.co.uk/xots-background-and-multithreaded-tasks-the-openntf-domino-api-way-part-two/
– http://www.intec.co.uk/xots-background-and-multithreaded-tasks-the-openntf-domino-api-way-part-three/
• Graphs
– http://de.slideshare.net/ktree19/the-graph-revolution
Q & A
48
Thank you!

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Queick: A Simple Job Queue System for Python
Queick: A Simple Job Queue System for PythonQueick: A Simple Job Queue System for Python
Queick: A Simple Job Queue System for Python
 
Javantura v3 - ES6 – Future Is Now – Nenad Pečanac
Javantura v3 - ES6 – Future Is Now – Nenad PečanacJavantura v3 - ES6 – Future Is Now – Nenad Pečanac
Javantura v3 - ES6 – Future Is Now – Nenad Pečanac
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
 
Fluentd v0.14 Plugin API Details
Fluentd v0.14 Plugin API DetailsFluentd v0.14 Plugin API Details
Fluentd v0.14 Plugin API Details
 
Robotframework
RobotframeworkRobotframework
Robotframework
 
Ratpack JVM_MX Meetup February 2016
Ratpack JVM_MX Meetup February 2016Ratpack JVM_MX Meetup February 2016
Ratpack JVM_MX Meetup February 2016
 
Functional Programming for Busy Object Oriented Programmers
Functional Programming for Busy Object Oriented ProgrammersFunctional Programming for Busy Object Oriented Programmers
Functional Programming for Busy Object Oriented Programmers
 
Developer-friendly taskqueues: What you should ask yourself before choosing one
Developer-friendly taskqueues: What you should ask yourself before choosing oneDeveloper-friendly taskqueues: What you should ask yourself before choosing one
Developer-friendly taskqueues: What you should ask yourself before choosing one
 
Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016
 
Ancient To Modern: Upgrading nearly a decade of Plone in public radio
Ancient To Modern: Upgrading nearly a decade of Plone in public radioAncient To Modern: Upgrading nearly a decade of Plone in public radio
Ancient To Modern: Upgrading nearly a decade of Plone in public radio
 
Celery introduction
Celery introductionCelery introduction
Celery introduction
 
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
 
"Building, deploying and running production code at Dropbox" Васильев Леонид,...
"Building, deploying and running production code at Dropbox" Васильев Леонид,..."Building, deploying and running production code at Dropbox" Васильев Леонид,...
"Building, deploying and running production code at Dropbox" Васильев Леонид,...
 
ASP.NET Core 1.0
ASP.NET Core 1.0ASP.NET Core 1.0
ASP.NET Core 1.0
 
Asynchronous job queues with python-rq
Asynchronous job queues with python-rqAsynchronous job queues with python-rq
Asynchronous job queues with python-rq
 
Eureka Moment UKLUG
Eureka Moment UKLUGEureka Moment UKLUG
Eureka Moment UKLUG
 
[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics
 
LCA13: LAVA and CI Component Review
LCA13: LAVA and CI Component ReviewLCA13: LAVA and CI Component Review
LCA13: LAVA and CI Component Review
 
Pywps
PywpsPywps
Pywps
 
Pywps a tutorial for beginners and developers
Pywps a tutorial for beginners and developersPywps a tutorial for beginners and developers
Pywps a tutorial for beginners and developers
 

Destacado

ULC - Connect 2014 Nachlese
ULC - Connect 2014 NachleseULC - Connect 2014 Nachlese
ULC - Connect 2014 Nachlese
Oliver Busse
 
OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungen web...
OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungenweb...OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungenweb...
OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungen web...
Oliver Busse
 
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
Oliver Busse
 

Destacado (20)

Utilizing the open ntf domino api
Utilizing the open ntf domino apiUtilizing the open ntf domino api
Utilizing the open ntf domino api
 
ISBG 2016 - XPages on IBM Bluemix
ISBG 2016 - XPages on IBM BluemixISBG 2016 - XPages on IBM Bluemix
ISBG 2016 - XPages on IBM Bluemix
 
ULC - Connect 2014 Nachlese
ULC - Connect 2014 NachleseULC - Connect 2014 Nachlese
ULC - Connect 2014 Nachlese
 
OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungen web...
OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungenweb...OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungenweb...
OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungen web...
 
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...
 
Transformations
TransformationsTransformations
Transformations
 
Transformations - a TLCC & Teamstudio Webinar
Transformations - a TLCC & Teamstudio WebinarTransformations - a TLCC & Teamstudio Webinar
Transformations - a TLCC & Teamstudio Webinar
 
GraphDb in XPages
GraphDb in XPagesGraphDb in XPages
GraphDb in XPages
 
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
 
Dnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsessionDnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsession
 
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
 
Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"
 
Xpages - oder was man mit einer alten Notes-DB so alles anstellen kann
Xpages - oder was man mit einer alten Notes-DB so alles anstellen kannXpages - oder was man mit einer alten Notes-DB so alles anstellen kann
Xpages - oder was man mit einer alten Notes-DB so alles anstellen kann
 
Out of the Blue - the Workflow in Bluemix Development
Out of the Blue - the Workflow in Bluemix DevelopmentOut of the Blue - the Workflow in Bluemix Development
Out of the Blue - the Workflow in Bluemix Development
 
Find your data
Find your dataFind your data
Find your data
 
Java & Notes - Mit Eclipse neue Features für Notes entwickeln | C.Habermueller
Java & Notes - Mit Eclipse neue Features für Notes entwickeln | C.HabermuellerJava & Notes - Mit Eclipse neue Features für Notes entwickeln | C.Habermueller
Java & Notes - Mit Eclipse neue Features für Notes entwickeln | C.Habermueller
 
Out of the Blue: Getting started with IBM Bluemix development
Out of the Blue: Getting started with IBM Bluemix developmentOut of the Blue: Getting started with IBM Bluemix development
Out of the Blue: Getting started with IBM Bluemix development
 
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
 
XPages on Bluemix - the Do's and Dont's
XPages on Bluemix - the Do's and Dont'sXPages on Bluemix - the Do's and Dont's
XPages on Bluemix - the Do's and Dont's
 
A World Without Applications
A World Without ApplicationsA World Without Applications
A World Without Applications
 

Similar a SUTOL 2015 - Utilizing the OpenNTF Domino API

Similar a SUTOL 2015 - Utilizing the OpenNTF Domino API (20)

Sutol 2016 - Automation is developer's friend
Sutol 2016 - Automation is developer's friendSutol 2016 - Automation is developer's friend
Sutol 2016 - Automation is developer's friend
 
RESTful services on IBM Domino/XWork (SUTOL 11 Nov. 2015 in Prague)
RESTful services on IBM Domino/XWork (SUTOL 11 Nov. 2015 in Prague)RESTful services on IBM Domino/XWork (SUTOL 11 Nov. 2015 in Prague)
RESTful services on IBM Domino/XWork (SUTOL 11 Nov. 2015 in Prague)
 
Serverless and AI: Orit Nissan-Messing, Iguazio, Serverless NYC 2018
Serverless and AI: Orit Nissan-Messing, Iguazio, Serverless NYC 2018Serverless and AI: Orit Nissan-Messing, Iguazio, Serverless NYC 2018
Serverless and AI: Orit Nissan-Messing, Iguazio, Serverless NYC 2018
 
Brisbane MuleSoft Meetup 2023-03-22 - Anypoint Code Builder and Splunk Loggin...
Brisbane MuleSoft Meetup 2023-03-22 - Anypoint Code Builder and Splunk Loggin...Brisbane MuleSoft Meetup 2023-03-22 - Anypoint Code Builder and Splunk Loggin...
Brisbane MuleSoft Meetup 2023-03-22 - Anypoint Code Builder and Splunk Loggin...
 
Plantilla oracle
Plantilla oraclePlantilla oracle
Plantilla oracle
 
A (XPages) developers guide to Cloudant
A (XPages) developers guide to CloudantA (XPages) developers guide to Cloudant
A (XPages) developers guide to Cloudant
 
Custom Activities in UiPath (Activity Builder)
Custom Activities in UiPath (Activity Builder)Custom Activities in UiPath (Activity Builder)
Custom Activities in UiPath (Activity Builder)
 
MySQL as a Document Store
MySQL as a Document StoreMySQL as a Document Store
MySQL as a Document Store
 
Whats new in_mlflow
Whats new in_mlflowWhats new in_mlflow
Whats new in_mlflow
 
Enabling IoT Devices’ Hardware and Software Interoperability, IPSO Alliance (...
Enabling IoT Devices’ Hardware and Software Interoperability, IPSO Alliance (...Enabling IoT Devices’ Hardware and Software Interoperability, IPSO Alliance (...
Enabling IoT Devices’ Hardware and Software Interoperability, IPSO Alliance (...
 
ow.ppt
ow.pptow.ppt
ow.ppt
 
ow.ppt
ow.pptow.ppt
ow.ppt
 
Ow
OwOw
Ow
 
Apache Flink Training Workshop @ HadoopCon2016 - #1 System Overview
Apache Flink Training Workshop @ HadoopCon2016 - #1 System OverviewApache Flink Training Workshop @ HadoopCon2016 - #1 System Overview
Apache Flink Training Workshop @ HadoopCon2016 - #1 System Overview
 
Day 13 - Creating Data Processing Services | Train the Trainers Program
Day 13 - Creating Data Processing Services | Train the Trainers ProgramDay 13 - Creating Data Processing Services | Train the Trainers Program
Day 13 - Creating Data Processing Services | Train the Trainers Program
 
SplunkLive London 2014 Developer Presentation
SplunkLive London 2014  Developer PresentationSplunkLive London 2014  Developer Presentation
SplunkLive London 2014 Developer Presentation
 
Broadcast Music Inc - Release Automation Rockstars!
Broadcast Music Inc - Release Automation Rockstars!Broadcast Music Inc - Release Automation Rockstars!
Broadcast Music Inc - Release Automation Rockstars!
 
Practical automation for beginners
Practical automation for beginnersPractical automation for beginners
Practical automation for beginners
 
SPEC Innovations: New Features in Innoslate Webinar
SPEC Innovations: New Features in Innoslate WebinarSPEC Innovations: New Features in Innoslate Webinar
SPEC Innovations: New Features in Innoslate Webinar
 
Session 8 - Creating Data Processing Services | Train the Trainers Program
Session 8 - Creating Data Processing Services | Train the Trainers ProgramSession 8 - Creating Data Processing Services | Train the Trainers Program
Session 8 - Creating Data Processing Services | Train the Trainers Program
 

Más de Oliver Busse (6)

HCL Domino Volt - der NSF Killer?
HCL Domino Volt - der NSF Killer?HCL Domino Volt - der NSF Killer?
HCL Domino Volt - der NSF Killer?
 
Outlook becomes a Team Player - with a clever add-in
Outlook becomes a Team Player - with a clever add-inOutlook becomes a Team Player - with a clever add-in
Outlook becomes a Team Player - with a clever add-in
 
The NERD stuff - opening for Domino to the modern web developer
The NERD stuff - opening for Domino to the modern web developerThe NERD stuff - opening for Domino to the modern web developer
The NERD stuff - opening for Domino to the modern web developer
 
DNUG Development Day 2019
DNUG Development Day 2019DNUG Development Day 2019
DNUG Development Day 2019
 
DNUG44 Watson Workspace
DNUG44 Watson WorkspaceDNUG44 Watson Workspace
DNUG44 Watson Workspace
 
Paradiesisch - OpenNTF
Paradiesisch - OpenNTFParadiesisch - OpenNTF
Paradiesisch - OpenNTF
 

Último

%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Último (20)

%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 

SUTOL 2015 - Utilizing the OpenNTF Domino API

  • 1. Simplify your code: give Java a try with the OpenNTF Domino API Oliver Busse We4IT GmbH
  • 2. Thanks to our sponsors! 7th Sutol Conference, November 2015
  • 3. 7th Sutol Conference, November 2015 Oliver Busse 3 • „Bleeding Yellow“ since R4.5 • Certified Lotus Instructor since 2001 • IBM Champion for ICS in 2015 • OpenNTF Member Director • XPages Advocate • IBM Bluemix curious • Software Architect at We4IT @zeromancer1972 www.oliverbusse.com www.we4it.com
  • 4. 7th Sutol Conference, November 2015 Special thanks go to Paul S. Withers Jesse Gallagher Nathan T. Freeman Martin Jinoch John Dalsgaard
  • 5. 7th Sutol Conference, November 2015 Agenda • What is the OpenNTF Domino API? • Setup and Implementation • Other Considerations • Examples, examples, examples 5
  • 6. What is the OpenNTF Domino API? 6
  • 7. 7th Sutol Conference, November 2015 What is the OpenNTF Domino API? • It‘s an open source project on OpenNTF • It‘s was created in April 2013 • It‘s maintained by generous developers you may know • It fills the gaps and gives the power you always wanted in Java for Domino • It‘s often refered to as „ODA“ 7
  • 8. 7th Sutol Conference, November 2015 Key developers of the ODA • Nathan T. Freeman • Paul S. Withers • Jesse Gallagher • Roland Praml • Martin Jinoch • René Winkelmeyer • Tim Tripcony (never forgotten) 8
  • 9. 7th Sutol Conference, November 2015 What is the OpenNTF Domino API? (cont‘d) • The ODA consists of several packages – core – formula – rest – xsp – … • It‘s an OSGi plugin • It‘s designed for running on the Domino server • It‘s designed for XPages (Java, SSJS) and Plugins • It can‘t be used in Java Agents  9
  • 11. 7th Sutol Conference, November 2015 Setup and implementation • Grab it from OpenNTF (recommended) – http://www.openntf.org/main.nsf/project.xsp?r=pr oject/OpenNTF%20Domino%20API • Grab it from the Git-Repo – https://github.com/OpenNTF/org.openntf.domino • Grab it from the OpenNTF Stash – https://stash.openntf.org/projects/ODA 11
  • 12. 7th Sutol Conference, November 2015 Setup and implementation (cont‘d) • Since the ODA is an OSGi plugin you can install it via the update site mechanism • It runs as an extension to the XSP runtime on the HTTP server JVM • It comes with it‘s own logger 12
  • 13. 7th Sutol Conference, November 2015 Setup: prepare the server • Set the signer of the NSF as „Sign or run…“ in server document‘s security section 13
  • 14. 7th Sutol Conference, November 2015 Setup: prepare the updatesite • Create an updatesite NSF • Name it whatever you want • Make sure you set ACL to let the server READ documents 14
  • 15. 7th Sutol Conference, November 2015 Setup: import ODA into update site • Find the site.xml file to import it as a local update site into your NSF • After import goto „Actions, Sign all Content“ 15
  • 16. 7th Sutol Conference, November 2015 Setup: add the ODA to server startup • Add a new line to your server‘s notes.ini file – edit file manually – use a configuration setting (prefered) • OSGI_HTTP_DYNAMIC_BUNDLES=updatesite.nsf 16
  • 17. 7th Sutol Conference, November 2015 Setup: add the ODA to server startup • This is what you should see when the server starts: 17 HTTP JVM: CLFAD0330I: NSF Based plugins are being installed in the OSGi runtime. For more information please consult the log • Check the plugins with – tell http osgi ss openntf
  • 18. 7th Sutol Conference, November 2015 Setup: prepare Domino Designer • Open DDE‘s preferences – Goto „Domino Designer“ section – Activate „Enable Eclipse plug-in install“ • Open the update site NSF you just created – Goto „Actions, Show URLs“ – Copy one of the two URLs to clipboard • Goto „File, Application, Install“ – Choose „Search for new features to install“ – On the next screen „Add (a) Remote Location“ – Enter a name for it and paste the URL in the clipboard – On the next screen check the ODA entry and click next/yes if you are asked to 18
  • 20. 7th Sutol Conference, November 2015 Other Considerations • ODA utilizes the OpenLog project – XspOpenLogUtil.logEvent(…) – XspOpenLogUtil.logError(…) • Get familiar with the OpenLog project from OpenNTF • Create a new OpenLog.nsf file in your server‘s root (if you haven‘t already) 20
  • 22. 7th Sutol Conference, November 2015 Examples, examples, examples • Session handling • View handling (loops) • Document & Field handling • DateTime enhancements • Transactions • Xots • Graphs 22
  • 24. 7th Sutol Conference, November 2015 Session handling: different approaches • Extension Library – ExtlibUtil.getCurrentSession() – ExtlibUtil.getCurrentSessionAsSigner() – ExtlibUtil.getCurrentSessionAsSignerWithFullAccess() – needs exception handling • XSPUtil – like ExtlibUtil – needs exception handling • Factory – only one method required, getSession() – uses enums for different session types – no exception handling needed! 24
  • 26. 7th Sutol Conference, November 2015 View handling: what you are used to (1) 26
  • 27. 7th Sutol Conference, November 2015 View handling: what you are used to (2) 27
  • 28. 7th Sutol Conference, November 2015 What you now are able to do 28
  • 30. 7th Sutol Conference, November 2015 Safe lines of code using new methods • New creation methods – Database.createDocument(String, Object, …) – Database.createDocument(HashMap fields) • Alternatives to replaceItemValue – Document.put(String field, Object o) – Document.putAll(HashMap fields) • Alternatives to getItemValueXXX – Document.get(Object o) // returns a Map – Document.getItemValue(String field, Class type)
  • 31. 7th Sutol Conference, November 2015 Document.getItemValue: what you are used to • getItemValue returns a Vector • Vectors are not type safe – editor / compiler complains non-type-safety – they can contain „anything“ – you have to check what is inside • if the item does not exist you are running into trouble… 31
  • 32. 7th Sutol Conference, November 2015 Document.getItemValue: what you can do now • cast to a type of your choice – ArrayList<?> values = doc.getItemValue(„foo", ArrayList.class); • forget type safety – define your own! • a non existing item is returned as null, not as empty Vector 32
  • 34. 7th Sutol Conference, November 2015 DateTime enhancements • Session.createDateTime(y,m,d,hh,mm,ss) – uses int values • conversion toJavaDate() not necessary – DateTime.isBefore() – DateTime.isAfter() • other useful comparisons – DateTime.equalsIgnoreDate() – DateTime.equalsIgnoreTime()
  • 36. 7th Sutol Conference, November 2015 Transactions • ODA adds transactional capabilities to your Notes data • You can modify documents without saving them individually (e.g. in a loop) • You can also rollback every modification if you need to (e.g. when you run into an error)
  • 37. 7th Sutol Conference, November 2015 Transactions (cont‘d) • Create a new DatabaseTransaction object from the database – DatabaseTransaction txn = db.startTransaction() • Perform your modifications • Decide whether to commit or rollback – txn.commit() – txn.rollback() 37
  • 38. Xots (Xpages OSGi Tasklet Service)
  • 39. 7th Sutol Conference, November 2015 Xots • Xots = XPages & DOTS • It‘s the extended version of DOTS (Domino Tasklet Services • Use cases – Can be coded inside the NSF, no plugin project needed – Multi-threaded tasks like Runnable, but you can return values – Bulk execution of time consuming code
  • 40. 7th Sutol Conference, November 2015 Xots (cont‘d) • Advantages – More granular time and event triggering than in Agents – Can run with server-side permissions – Runs in a shared container (JVM) unlikely of an Agent which runs in a dedicated JVM • you can exchange data between tasklets – It‘s coded in a plain Java class and not in an Agent design element – You can use SCM systems 40
  • 41. 7th Sutol Conference, November 2015 Xots (cont‘d) • Core elements of tasklet – Interface Callable<?> – Interface Future<?> • get() method to get the return value(s) • only if you are interested in a return value – Class Xots from the ODA • submit() method to create a tasklet • schedule() methos to create a periodic tasklet – use PeriodicScheduler! 41
  • 43. 7th Sutol Conference, November 2015 Graph DB A graph database, also called a graph-oriented database, is a type of NoSQL database that uses graph theory to store, map and query relationships. A graph database is essentially a collection of nodes and edges. Each node represents an entity (such as a person or business) and each edge represents a connection or relationship between two nodes. http://whatis.techtarget.com/definition/graph-database
  • 44. 7th Sutol Conference, November 2015 Graphs – terminology • Vertices (Nodes) – Properties (Key-Value pairs) • Edges • ElementStores – for us: NSF databases • MetaverseIDs – Replica + UNID (hashed) – internal use only (don‘t care about them) 44
  • 45. 7th Sutol Conference, November 2015 Graph DB – in Domino? • Vertices and Edges are stored as Documents • The data container is a NSF • The ElementStore defines the filepath of the NSF • An ElementStore can hold different types of Vertices • Usually you create one ElementStore for each Vertice type 45
  • 46. Let‘s see the demo & some code Graph DB 46
  • 47. 7th Sutol Conference, November 2015 Resources • The XPages demo application – https://bitbucket.org/zeromancer1972/sutol-2015-oda-graph-demo • A nice glossary – http://www.intec.co.uk/from-xpages-to-web-app-glossary/ • OpenNTF Domino API – http://www.openntf.org/main.nsf/project.xsp?r=project/OpenNTF%20Domino%20API – http://www.openntf.org/main.nsf/project.xsp?r=project/OpenNTF%20Domino%20API%20Demo%20Database • Xots – http://www.intec.co.uk/xots-background-and-multithreaded-tasks-the-openntf-domino-api-way-part-one/ – http://www.intec.co.uk/xots-background-and-multithreaded-tasks-the-openntf-domino-api-way-part-two/ – http://www.intec.co.uk/xots-background-and-multithreaded-tasks-the-openntf-domino-api-way-part-three/ • Graphs – http://de.slideshare.net/ktree19/the-graph-revolution