utilizing the openntf domino api

48
Utilizing the OpenNTF Domino API Oliver Busse We4IT GmbH, Germany December 2, 2015

Upload: oliver-busse

Post on 10-Apr-2017

1.634 views

Category:

Software


9 download

TRANSCRIPT

Page 1: Utilizing the OpenNTF Domino API

Utilizing the OpenNTF Domino API

Oliver BusseWe4IT GmbH, GermanyDecember 2, 2015

Page 2: Utilizing the OpenNTF Domino API

Oliver Busse• „Bleeding Yellow“ since R4.5• Software Architect at We4IT

• Member of the development team ofAveedo® Application Framework

• IBM Champion for ICS in 2015 + 2016• OpenNTF Member Director• XPages Advocate• IBM Bluemix curious

@zeromancer1972www.oliverbusse.com

Page 3: Utilizing the OpenNTF Domino API

Agenda• What is the OpenNTF Domino API?• Setup and Implementation• Other Considerations• Tons of examples

Page 4: Utilizing the OpenNTF Domino API

What is the OpenNTF Domino API?

Page 5: Utilizing the OpenNTF Domino API

What is the OpenNTF Domino API?• It‘s an open source project on OpenNTF• It‘s was started 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“

Page 6: Utilizing the OpenNTF Domino API

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 (9.0.x+)• It‘s designed for XPages (Java, SSJS) and Plugins• It can‘t be used in Java Agents

Page 7: Utilizing the OpenNTF Domino API

Key developers of the ODA• Nathan T. Freeman• Paul S. Withers• Jesse Gallagher• Roland Praml• Martin Jinoch• René Winkelmeyer• Tim Tripcony (never forgotten)

Page 8: Utilizing the OpenNTF Domino API

Setup and Implementation

Page 9: Utilizing the OpenNTF Domino API

Resources• Grab it from OpenNTF (recommended)• http://www.openntf.org/main.nsf/project.xsp?r=project/

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

Page 10: Utilizing the OpenNTF Domino API

System Logging• 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

Page 11: Utilizing the OpenNTF Domino API

Setup: prepare the server• Set the signer of the NSF as „Sign or run…“

in server document‘s security section

Page 12: Utilizing the OpenNTF Domino API

Setup: prepare the updatesite• Create an

updatesite NSF• Name it whatever

you want• Make sure you set

ACL to let the server READ documents

Page 13: Utilizing the OpenNTF Domino API

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“

Page 14: Utilizing the OpenNTF Domino API

Setup: add the ODA to server startup• Add a new line to your server‘s notes.ini file

• edit file manually or• use a configuration setting (prefered)

• OSGI_HTTP_DYNAMIC_BUNDLES=updatesite.nsf

Page 15: Utilizing the OpenNTF Domino API

Setup: add the ODA to server startup• This is what you should see when the

server starts: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

Page 16: Utilizing the OpenNTF Domino API

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

Page 17: Utilizing the OpenNTF Domino API

Other Considerations

Page 18: Utilizing the OpenNTF Domino API

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)

Page 19: Utilizing the OpenNTF Domino API

Examples

Page 20: Utilizing the OpenNTF Domino API

Examples• Session handling• View handling (loops)• Document & Field handling• DateTime enhancements• Transactions• Xots• Graphs

Page 21: Utilizing the OpenNTF Domino API

Session handling

Page 22: Utilizing the OpenNTF Domino API

Session handling: different approaches• Extension Library• ExtlibUtil.getCurrentSession();• ExtlibUtil.getCurrentSessionAsSigner();• ExtlibUtil.getCurrentSessionAsSignerWithFullAccess();• needs exception handling

• XSPUtil• like ExtlibUtil• needs exception handling

• Factory• Factory.getSession();• uses enums for different session types• no exception handling needed!

Page 23: Utilizing the OpenNTF Domino API

View handling

Page 24: Utilizing the OpenNTF Domino API

View handling: what you are used to (1)

Page 25: Utilizing the OpenNTF Domino API

View handling: what you are used to (2)

Page 26: Utilizing the OpenNTF Domino API

What you now are able to do

Page 27: Utilizing the OpenNTF Domino API

Document handling

Page 28: Utilizing the OpenNTF Domino API

Safe lines of code by 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) // document acts like a Map<?>• Document.getItemValue(String field, Class type)

Page 29: Utilizing the OpenNTF Domino API

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…

Page 30: Utilizing the OpenNTF Domino API

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• can be handled

Page 31: Utilizing the OpenNTF Domino API

DateTime enhancements

Page 32: Utilizing the OpenNTF Domino API

DateTime enhancements• Session.createDateTime(y,m,d,hh,mm,ss)• uses int values

• conversion toJavaDate() not necessary• DateTime.isBefore();• DateTime.isAfter();

• useful comparisons• DateTime.equalsIgnoreDate();• DateTime.equalsIgnoreTime();

Page 33: Utilizing the OpenNTF Domino API

Transactions

Page 34: Utilizing the OpenNTF Domino API

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)

Page 35: Utilizing the OpenNTF Domino API

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();

Page 36: Utilizing the OpenNTF Domino API

Xots

Page 37: Utilizing the OpenNTF Domino API

Xots• Xots = XPages OSGi Tasklet Service• It‘s the extended version of DOTS (Domino Tasklet

Service)• 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

• very new feature (alpha)

Page 38: Utilizing the OpenNTF Domino API

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

Page 39: Utilizing the OpenNTF Domino API

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() methods to create a periodic tasklet

• use the PeriodicScheduler!

Page 40: Utilizing the OpenNTF Domino API

„Graphs“

http://whatis.techtarget.com/definition/graph-database

Page 41: Utilizing the OpenNTF Domino API

Graph DBA 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

Page 42: Utilizing the OpenNTF Domino API

Graphs – terminology• Vertices (Nodes)• Properties (Key-Value pairs)

• Edges• Connections, Relations between Vertices

• ElementStores• for us: NSF databases

• MetaverseIDs• Replica + UNID (hashed)• internal use only (don‘t care about them)

Page 43: Utilizing the OpenNTF Domino API

Graph DB – in Domino?• Vertices and Edges are stored as Documents• The data container is a NSF• The ElementStore defines the filepath to the NSF• An ElementStore can hold different types of Vertices• Usually you create one ElementStore for each Vertice

type

Page 44: Utilizing the OpenNTF Domino API

Let‘s see the demo &some code

Page 45: Utilizing the OpenNTF Domino API

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

Page 46: Utilizing the OpenNTF Domino API

Q & A

Page 47: Utilizing the OpenNTF Domino API

Are you going to IBM Connect 2016?

We4IT has an attractive partnering program

suited to everyone.If you would like to meet up with us in

Orlando, get in touch so we can organize a

meeting. Over a beer, perhaps.

@We4IT - www.we4it.com

Thank you for your time!

Page 48: Utilizing the OpenNTF Domino API

www.we4it.com