I have been re-elected as IBM Champion

December 5th, 2013

I am honoured and proud to have been re-elected as IBM Champion with a group of 86 other 2014 IBM Champions for IBM Collaboration Solutions.

IBM Champion logo

Intro to XPages and Java (my session at DanNotes, November 2013)

November 28th, 2013

The 50th DanNotes conference took place yesterday and today.

Here is my presentation from my session on introducing developers to using Java in XPages:

XPages and Java (DanNotes 50th conference, November 2013) from Per Henrik Lausten

DanNotes 50th conference has started!

November 27th, 2013

The 50th DanNotes conference started this morning. Follow all the action on Twitter (using #DanNotes).

Links to presentations will be added later. Enjoy!


IBM Notes 9.0.1 and IBM Domino 9.0.1 are now available for download

October 29th, 2013

IBM Notes 9.0.1 and IBM Domino 9.0.1 are now available for download on Passport Advantage.IBM Notes

This release includes 292 documented fixes (as of this evening). Here's the "Top 20" fix list according to IBM.

Some of the 9.0.1 part numbers:

  • IBM Notes Client 9.0.1 for Windows English: CIQ7REN
  • IBM Notes Client 9.0.1 for Mac English: CIQ7UEN
  • IBM Notes, Domino Designer and Admin 9.0.1 client: CIQ91EN
  • SwiftFile 4.2.1 for IBM Notes 9.0.1 English: CRP4BEN
  • IBM Domino Server 9.0.1 64 bit for Windows English: CIQ7WEN
  • IBM Domino Server 9.0.1 64 bit for Linux for xSeries English: CIQ7ZEN
  • IBM Notes Traveler 9.0.1 for Windows Multilingual: CIQ7BML
  • IBM Notes Traveler 9.0.1 for Linux for xSeries Multilingual: CIQ7CML
  • IBM Domino Social Edition OpenSocial component 9.0.1 64 bit for Windows English: CIQ85EN
  • IBM Domino Social Edition OpenSocial component 9.0.1 64 bit for Linux for xSeries English: CIQ89EN
  • IBM XWork Server 9.0.1 64 bit for Windows English: CIQ8DEN
  • IBM XWork Server 9.0.1 64 bit for Linux for xSeries English: CIQ8HEN

Thanks, Bruce

October 2nd, 2013

Thank you Bruce for all you have done for OpenNTF and the community since 2001.

I have worked with you as a director on the OpenNTF board since October 2011. We have spoken together at IBM Connect 2013 on our open source project Collaboration Today.

You are a great friend and mentor and I always enjoy our chats and talks on Skype.

Good luck with your new adventure at Clark College.


Submit your abstract for the 50th DanNotes conference

August 27th, 2013


The 50th DanNotes conference takes place November 27-28, 2013 and also marks the 20th anniversary for the DanNotes user group.

I am part of the organizers team and we are hard at work planning the conference and have opened for session abstract submissions. If you are interested in speaking at the conference, please register and submit your session abstract.

We are looking for business related sessions, technical sessions, case stories and more. We are looking for speakers from all over the world.

One important point: DanNotes will take care of your travel and accommodation expenses! So what are you waiting for? :-)

How to recycle Notes objects in XPages and Java

May 28th, 2013

Using Notes objects in XPages and in Java require that you recycle those objects in order to avoid memory leaks and backend out of memory issues. Here I will summarize how to do proper recycling in XPages for server-side javascript, Java and Java using the new OpenNTF project org.openntf.domino.

Server-side JavaScript

With server-side JavaScript you have to use the recycle method available on Notes objects and you have to "nullify" your server-side JavaScript variables. Thank you, Tony McGuckin, for clarifying this.

Here's a very simple example that assumes that the variable doc has been initialized elsewhere:

doc = null;


In Java you have to use the recycle method available on Notes objects. So for looping through a document collection you have to do this:

try {
	Database dbCurrent = ExtLibUtil.getCurrentDatabase();
	DocumentCollection dc = db.getAllDocuments();
	Document doc = dc.getFirstDocument();
	While (doc != null) {
		// process doc
		tmp = dc.getNextDocument(doc);
		doc = tmp;
} catch (NotesException e) {


With org.openntf.domino you do nothing with regards to recycling! So when looping through a document collection you can concentrate on your business logic:

Database db = Factory.getSession().getCurrentDatabase();
for (Document doc : db.getAllDocuments())
	// process doc

OpenNTF webinars for the open source community

May 6th, 2013


OpenNTF has announced a new initiative called OpenNTF Webinars.

The first webinar takes place tomorrow, Tuesday May 7, and is all about OpenNTF. Join the web meeting and hear Bruce Elgort, Serdar BasegmezJesse Gallagher, Niklas Heidloff, Peter Tanner and me talk about OpenNTF and about what OpenNTF can offer the open source community.

Future webinars will be announced at the webinar landing page.

Using an existing SSL certificate on IBM Domino

May 2nd, 2013

A customer of mine had an existing wild card SSL certificate running on IIS. They wanted to use this wild card SSL certificate for their IBM Domino server.

I had all the SSL certificate files available (the trusted root CA, the certificate and the private key). So I quickly found the guide from Gab Davis and did something similar: I created a key ring using the Server Certificate application on the Domino server and installed the trusted root certificate into the key ring. I then opened the key ring file in the gsk5 version of iKeyman (on Windows XP in order for it to run) but ran into the issue that I was unable to import the private key (.pfx).

The solution was to import the private key file in the Certificates program (certmgr.msc) by opening the private key file (and providing the password for the file and selecting the option to mark the key as exportable). Once imported I then exported the same private key as PKCS#12 (.pfx) and I was now able to import the private key as a personal certificate in the gsk5 version of iKeyman.

I saved the updated key file, added it to the IBM Domino server, and HTTPS was then working as expected.

How to force a reload of JS and CSS files when changed

April 10th, 2013

Caching of Javascript and CSS files is great and really improves performance in the browser. But caching also means that changes to the files are not picked up. So how do you get the browser to automatically reload the files when you have updated them because of new requirements, bug fixed etc.?

There are several ways to achieve this. On Apache you can for instance use the modpagespeed module that automatically changes links to resources when the backend resource files change. Other ways include manually adding a version number to your resources (?version=1234), and changing the file name of the resource.

For IBM Domino, IBM XWork Server and XPages you can of course manually change the file name of your resources when content changes (and remember to update references to those files in your code). A better method is to create your own versioning system for your resources based on the idea of adding a unique id to the link to the resources. The following describes this method.

You can add a version number to an application scoped bean and then update that version number whenever you want the browser to reload your resources. Here's a code snippet for such a version number bean (this is only some of the stuff needed for a bean - see my blog post about creating a bean for more details) :

public class Config implements Serializable {
	private static final long serialVersionUID = 6469339826789980362L;
	private static final String version = "20130410";

	public static String getVersion() {
		return version;

Using this bean I can then create links to my Javascript and CSS files like this:

	<xp:script clientSide="true">
		<xp:this.src><![CDATA[${javascript:"/jsCommon?open&v=" + config.getVersion()}]]></xp:this.src>
		<xp:this.href><![CDATA[${javascript:"/custom.css?open&v=" + config.getVersion()}]]></xp:this.href>

The links then look like this in the browser:


Whenever I want to force a reload, I then update the version string in my Config bean. The resources are then reloaded.