Stress testing with ODA Graph

I am very interested in Graph data modelling and with the Graph capabilities in OpenNTF Domino API I decided to setup some demo environments just to get my head around the subject and how you can implement it in XPages and use Notes data.

To my opinion reading Notes data in the Graph database structure can bring interesting new opportunities, far beyond what we can deliver with Views and Collections today.

Oliver Busse has provided a great starting point with his SUTOL demo application so I started with that one.

Besides the implementation and Graph capabilities I am also curious about performance.  So I run some tests on my working demo app. With the help with a simple agent I decided to be gentle and create a set of only 20.000 user documents.

The first test was about returning user profiles (nodes) matching certain properties (relations), presented in a repeat control. Below the list the time to load the filtered set is displayed.



When I compare the result with a normal view filter (by category or FT search) the results where a bit disappointing.

I also noted that navigating through the list was very slow (20 seconds or more returning a new set of rows of 10 documents). More than I expected I received timeouts.


The reason for this performance is still unknown. I guess there is no index created yet for the user node in the graph db structure. Why navigating through the list is so latent in performance is also a mysterie.

Nevertheless, my demo is up and running so expect more results on Graph in XPages with Notes data in the future on this blog.

Below are sampels of performance using the “traditional” FT search filter capacity in Notes. Notice the difference.



I would like to thank Oliver Busse for his guidance getting the demo app up and running and for explaining some basic concepts of the implementation.





I’ve got the bower

As I am trying to get my XPages development workflow more in line with other development teams, my next step was to implement bower so I can skip dragging, copying, removing, updating (too many verbs already) in order to manage my projects.

First stop was Frank van der Linden’s post on bower4xpages. Most of the commands are described in his post so I skip to repeat them here..

Step 1 – Install Node.js

You can install bower with the Node package manager.  So step 1 was to install Node.

Step 2 – Install Bower

With the node package manager I installed bower.

Web sites are made of lots of things — frameworks, libraries, assets, and utilities. Bower manages all these things for you.

Step 3 – Setup the bower files

When Bower runs it needs 2 files: bower.json and .bowerrc file. In the json file you list the dependencies and the rc file points to the location where the files will be copied to. Here is a tip how to create a nameless file in notepad.

Having placed these files in the root of my repository location I was ready for the next step.

Step 4 – Install Git

Since I have been using SourceTree as Git client for Windows I needed to install Git client because Bower makes use of it.

Post Step 4 – Set Windows Environment Variables

When trying to run bower I got message that Git was not installed. Here is a description how to set your Windows environment variables.

Step 5 – Run bower run

Now with everything installed and set the last thing to do was to open the Command Prompt and cd to the root directory of my repository and run the ‘bower install’ command.

As a result I got all the dependencies in my project downloaded and installed.


Once again achieved “a new(er) way of working”.

A new way of working: SCM

A new company, a new pc (mac), a new way of working. Change brings opportunity so I decided to move some of my OpenNTF projects, lab projects and code to GitHub.

So far it works just fine and I feel kinda stupid to stick myself for a long time in the old way of working (application templates, shared drives, post code to this blog). Switching between machines/virtual environments has become much nicer.

As tools I choose for DDE, Swiper, SourceTree and Github. I have not come so far with the command line, although the Try Git tutorial on Code School demonstrates it should not be that difficult.

Next step is probably setup a package manager in combination with a task runner.  A bit inspired by Keith Strickland’s presentation at Engage.

Probably I am missing something in my setup but I am happy to read about that in the comments:-)

We have a release

Hahaha no not a date for Domino-next but last week I received a message from OpenNTF’s IP Manager that my Bildr project is finally released.

Quite interesting to learn about all those licenses and what consequences one might have for your project.

I thank Peter Tanner for his patience and assistance!

Next step perhaps setting up a video how to quickly install the project on your Domino server…


Reflections on Engage


Last week I had the pleasure to attend Engage, the yearly event for the BeNeLux user-group around IBM’s collaboration portfolio. Indeed it was a pleasure, due to the efforts of Theo Heselmans and his team, the sponsors, the location and of course the participants. Much appreciated! No user-groups without users!

Before the event I read a tweet of someone wishing all attendees at Engage good luck with finding IBM’s roadmap for Domino. I took this tweet with me in mind to the event.

Sessions attended

Here is the list of ‘sessions’ that I attended:

  • Keynote/General opening session
  • Once you go graph
  • IBM Domino App. Next
  • The Lotus position: four degrees of freedom
  • Round table: IBM Domino Development
  • Speedsponsoring
  • Live on the edge of innovation with IBM bluemix
  • Creating mobile apps: an introduction to Ionic
  • Troubleshooting XPages
  • The xpages of things
  • Break your Domino Designer dependency

I will not review each individual session but just let my thoughts run around things heard from speakers, attendees and IBM-ers.


The new general manager for IBM Collaboration Solutions gave a fresh impression and her perspective on collaboration. I am not sure how good and bad this is for the products in her portfolio and time will tell.

All the brag about project Toscana, the interpretation of Slack by IBM for me is just a bit painful. It gives me the impression that the distance between IBM Labs and the product managers in ICS have just grown through the years and makes me wonder who is holding the prophetic views within ICS?

I also talked with an IBM salesperson and my frustration with IBM Connections and trying to integrate applications with it was down-played as ‘not knowing how to use the platform to it’s full potential’ and ‘is providing links to these applications not sufficient’? Why may I not use my collaboration tools in the way I would like to and not confirm to the limitations/restrictions the manufacturer tells me to?

Sometimes I wish that IBM would train their sales personnel with the help of Watson, or something. In the meantime is was directed to TimeToAct and their web content tool for Connections.


I like the concept of graph data modelling where you ‘on the fly’ bind objects together via relationships. In a recent project we established something similar, but than specifying these relations in Notes documents and load them whenever an object was loaded. The major problem is that there is just 1 level depth of relationships, so advanced computations like ‘related’, ‘mentions’, ‘similar or most in common objects’ were not possible.

Having digged through Oliver Busse’s example and Nathan’s presentation I see the potential of Graph with Notes data and I frankly do NOT understand why IBM is not assisting the OpenNTF Domino API team to get the Graph feature available in Extension Library as from TODAY.

Graph capabilities would be a good argument for customers to keep their data in Notes (for now) and in the meantime give them the opportunity to understand and explore the (new) opportunities Graph can bring to the platform. Perhaps these customers remain dedicated to the Notes platform!

But perhaps involvement of IBM would slow down the ODA team when hearing the comment on project Toscana “only IBM would brag for two days for a feature that requires 15 minutes of coding”.

Nevertheless it hurts to read tweets from IT managers how wonderful Microsoft’s Office Graph is while IBM has nothing to offer to us.


And then there was Bluemix, IBM’s hybrid cloud development platform where Xpages and Notes NoSQL database are recently available.

Recently I moved a Teamroom application to Bluemix which took me a bit more time than expected due to the architecture of the application. John Jardin demonstrated some entertaining examples of services on Bluemix that can bring new functionality to Xpages applications.

Definitely a cool area to explore new paradigms and technologies.


Mark Leusink held a nice introduction to Ionic, a hybrid mobile app framework. For me mobile development never came from the ground, mainly because lack of demand. Delivering an XPages app with responsive behaviourcapturing touch gestures and more bells and whistles did not feel like mobile development. You simple need access to and use native services to capture a mobile application full potential.

I never took the time to look at IBM’s MobileFirst platform and I wonder how many Notes customers are interested lifting multiple application straight ahead to mobile instead of cherrypicking one or two applications. For me it is also not clear where data on Domino stands in this MobileFirst story😕

Reflecting back on the projects I have been working on, having to rewrite the java classes to some client-side javascript in order to work with Domino data, would be a nightmare in the Ionic paradigm.


Aah XPages, my comfort zone. Too bad no stories or demonstrations of highly complex or smart solutions build on XPages on the conference.


Niklas Heidloff‘s to have the option to have a Node.js server on Domino with capabilities to access NSF’s via Domino Access Services would be a nice option to deliver full CSJS solutions and attract a different (new) audience of developers.

Being able to develop similar applications but then on Node instead of XPages and hereby following the trends in web application development would be something I would favour. Even if that would mean to be forced to cast away all that XPages knowledge.

During the days I have spoken with developers who were irritated by lack of roadmap for XPages. I have to admit hearing Peter Janzen talking about Domino App Dev futures were giving me flashbacks to his presentation in 2015 at IBMConnect. I am not sure how big encryption is for web development. Bootstrap we take for granted nowadays. How can we integrate Domino into Connections? And (again) when can we have Graph capabilities?


Coming back on the tweet mentioned in the introduction. So did I find the roadmap for Domino?

It was not said where the data for project Toscana, IBM’s late adaption of Slack, would reside. Verse is (partly I guess) on Domino.

During a round table discussion with Peter Janzen about Domino App dev concerns where made by developers to have a modern Designer, preferably as a plugin in Eclipse. Peter mentioned that the Forms and View (probably also the Agents) design elements hinders IBM to move in such direction. Having worked with now with Spring Tools Suite some parts of Domino Designer are a crime (source control, build automation).

Being able to develop inline with most other web development projects like Keith Strickland demonstrated is in the benefit of Domino developers and of the Domino platform.

So excuse me for not finding this roadmap.

Wrap up

The best thing about a user-group conference is being able to talk with users and share thoughts. And a have drink and go out for dinner. I like to thank everyone I met.

One comment that I may make to the Engage organisation is perhaps the type of sessions. I met a developer who said he had submitted an abstract on developing with React and Domino and got it rejected😦


So this brings me to the conclusion that after having attended the conference I probably have as much (different) questions as I had before. Nevertheless I had a nice time with my fellow “experts in the field”.

Questions and Answers from deploying a Teamroom application on Bluemix


write once, run everywhere

Thise WORE slogan is used often in cross-platform solutions, also in IBM Domino. But what if you move your XPages application from an on premise Domino installation to the cloud, more specific IBM Bluemix?


To gain some experience in this area I decided to take a well known application, IBM’s Teamroom and deploy it on Bluemix. I will spare you the details of creating a Bluemix account, setting up Domino Designer, deploying the Design application and binding it to a XPages NoSQL Database service. I will focus on adapting/preparing the Design of the XPages application and some areas I have not found an answer for (yet).

First consideration – Choose your data-binding


Bluemix requires the separation of design and data so if you haven’t use this principle your applications yet, you must apply it now. Second, Bluemix will allow you also to run your XPages application in a mixed environment (part cloud / part on-premise) so if your application will do so the bluemixContext object will let you identify where your application is running and point to the corresponding data NSF.

DAO Bean

In my case the Teamroom application would only run in Bluemix so instead of applying bluemixContext.getDataService().findDatabaseName() I prefer to use Oliver Busse’s daobean which I have been using in other applications as well. This allows me to use the shorter dao.getDbpath() for xp:dominoDocument and xp:dominoView data-binding.

Remember: in the Teamroom design you need to set this property for every Document and View binding!


Use the search function in DDE to locate where these bindings are used.


Value pickers are used throughout the Teamroom application and for the dataProvider property you need to calculate the location of the database.

Search after dataProvider and you will get the list of design elements where they are used. Look for the once who use the xe:dominoViewValuePicker since they are using a View as data-source. Again make the database location computed.


Some dataProviders use xe:dominoNABNamePicker and the location of the server is set via the Teamroom Setup function, which asks for the web server address. Default the web server address where the design resides is filled in. I tried to fill in the ip address of the server where the data resides (gathered via dao.getServer()) but this still did not allow me to open an NAB.

@dbcolumn @dblookup

What is an XPages application without the @dbcolumn and @dblookup functions? Use DDE to allocate in which design elements there are used and exchange the @DbName() function with bluemixContext.isRunningOnBluemix()? bluemixContext.getDataService().atDbName():@DbName or dao.getServer()+”!!”+dao.getDatabase()

database object

With the database object is you can make a quick reference to the NotesDatabse class, and so it is used throughout the Teamroom application. Mind a database.isFTIndexed() to check if the search bar will be displayed or not? Again do your search in DDE.

You can apply method chaining e.g. dao.getDatabase().isFTIndexed()

Run form validation

I noticed that I had to disable the option to validate the saving of documents using form validation (on document save option). Otherwise the operation failed silently.

Changing form name

Adding a team member via the browser resulted in a document created with the form reference of Team Member Profile   –   ParticipantProfile. If you add a member via the Notes client the form reference will be ParticipantProfile. This explains why newly created members did not appear in the list at first.

So I modified the form name as:
<xp:dominoDocument formName=”ParticipantProfile” …

I also set this alias as first in the Notes form. Not sure if that is necessary.


So far so good. So how “Bluemix ready” is my Teamroom and what are my first thoughts?

Except the lookup to the name and address book I pressume my Teamroom is working as normal. I guess you can call this is major issue.

The tag cloud is not working, but that is due to the fact that the  xp:tagCoud control does not provide a database property (yet). Again I would call this a major issue.

Looking at the design of the Teamroom and counting the number of design elements I would think the development team has made the application design too complicated. I think the power of custom controls and property definitions is that you can re-use them in complete other ways and so reduce the amount of design elements.

I also notified almost no Java code in the design. Perhaps adding some classes for the objects can also reduce the amount of design elements dramatically. Also the application might get less spaghetti coded with logic stored in a central place.

Going through the code resulted in some new “discoveries” and was therefor fun to do. I will write another post about the things I haven’t used before.

Happy development and looking forward to next week’s Engage =)



Resource optimization for Anonymous users

The ‘Use runtime optimized … resources’ is a great XSP Properties property to downsize the amount of calls to the Domino server for downloading stylesheet and javascript resources.

In order to reduce the size of the download(s) the rendered property in a Theme design element can be handy.

For example resources that are used in Xpages that are not accessible by Anonymous users you can initially restrict via:

Screen Shot 2016-03-08 at 12.15.01

When they later logon and access XPages that use the resource, it will be available.

Just a simple tip. Happy development =)

Styling the Pager control for Bootstrap UI

Many of us are acquainted with  Bootstrap in our XPages application. However if you place a Pager control on your XPage it does not render according bootstrap style.

So what can you do?

If you have the option to install the Extension Library with Bootstrap in it: DO IT.

If you don’t have that option you can place the Bootstrap resources in your NSF or use a CDN.

If you are using these last two options you will notice the Pager control is still non-Bootstrap styled. You can either:

  • Apply CSS yourself (link, link)
  • Apply your renderer (link)

I noticed in the first approach the … display for page numbering will not be proper styled:

Screen Shot 2016-03-01 at 10.46.13.png

If you are a CSS-wizard you probably can fix this (I can’t).

The second approach renders the Pager perfectly with Bootstrap style applied and hopefully the strange behaviours Frank van der Linden refers to do not appear.

Happy development =)