Configure Eclipse 3.5 for Notes 8.5.2

As for previous versions I maintain a document outlining how to configure a vanilla Eclipse install to work with Lotus Notes for Java extension development (with install_id and rcp.base). I have made the first version for Notes 8.5.2 as of code drop 5 so please see Configure Eclipse 3.5 for Notes 8.5.2 if this is of use to you.

Please Lotus that Notes 8.5.2 is in beta and there are no guarantees that the features described here will be in the final product that IBM ships.

Notes 8.5.2 – preload on startup

Disclaimer: Lotus Notes 8.5.2 is in beta and there are no guarantees that the features described here will be in the final product that IBM ships.

Being part of the design partner program for Lotus Notes 8.5.2 I just received code drop 5 i.e. the latest beta of Lotus Notes 8.5.2. Part of this release you are asked a new question while installing which is whether you want to enable preloading Lotus Notes when starting Windows (don’t know if this goes for other platforms).

Now I’m on a SSD drive so my experience may be different from others on a “normal” spinning drive but it will be interesting to see how it performs and if it makes a noticeable difference.

Java class line numbers for plugin developers

If you’ve been tasked with developing and/or debugging Java extensions for the Notes 8 client you know that line numbers has been missing from the stacktraces produced by Notes. This can be a real problem when trying to debug stuff in a production client. There has been some discussion among the ones of us developing these extensions on how to enable these line numbers. The other day this information was provided by Srinivas Rao of IBM and I wanted to publish it here for all to read.

Line numbers are removed from the classes added to the shared class cache to reduce the memory needed for the memory mapped classes. To re-enable the line numbers, one needs to edit the <notes>frameworkrcpdeployjvm.properties file and add comment out the ignorelinenumbers vm argument. However, if the classes have already been added to the JVM shared class cache, then they will have been added without line numbers. Either comment out the shared class cache (which will dramatically affect performance at startup) for temporary work, or shutdown notes and remove the shared class cache so that it can be repopulated with classes with line numbers. Of course, this will also affect the startup performance, but not so much as not having a cache

These are two of the key lines … to comment them out, add a # to the front of the line

vmarg.Xnolinenumbers=-Xnolinenumbers
vmarg.Dshare=-Xshareclasses:name=xpdplat_.jvm, **line cont**
   controlDir=${prop.jvm.shareclasses.loc}, **line cont**
   groupAccess,keep,singleJVM,nonfatal
jvm.shareclasses.loc=${rcp.data}/.config/org.eclipse.osgi

The shared class cache is typically located in the data/workspace/.config/org.eclipse.osgi

How to get started with plugin development

I get a lot of questions (via e-mail and IM) on how to get started with plugin development for the Lotus Notes platform. Instead of answering them all individually I thought I would (finally) write a general purpose blog post to try and answer these questions in general terms.

First of I’m sorry to say that the current state of affairs for someone who want to get started doing plugin development for the Lotus Notes platform is grim. There is as you might have experienced very little material available for programmers new to the Eclipse world to build stuff for Lotus Notes 8+ clients. To make things worse the material that is available often cut corners or simply start out too advanced. That being said I am hearing muffled voices mention some material being developed and that IBM Lotus is focusing on this matter but it will be yet some time before it’s out. Until that time and until we can upload information directly into the brain like martial arts skills are given to Nemo in The Matrix I suggest the following.

My suggestions for someone getting started would be to start by realizing that programming for Eclipse and hence in SWT for the Lotus Notes 8 client has nothing, what so ever, to do with traditional Notes programming. It sounds obvious but once you have accepted this it gets easier. Maybe not easier technically but easier to accept that this is a completely new field you’re venturing into. If nothing else you stop looking to IBM Lotus for help and instead turn to the Eclipse side of the internet.

Before you start to whine I think this is just fine and how it should be. Really. Initially most of the stuff you need to know to get started has nothing to do with IBM Lotus but is general purpose Eclipse development information. It’s like blaming Toyota for not telling you how to repair their cars. Toyota can be expected to tell you and document what’s so special about their cars. They can’t be expected to teach you the basics – you go to a car repair classes for that.

It’s the same with Eclipse development. Learn the basics and specialize from there. You could say that we could expect information about the various ways to extend the client to readily available and better documented. I’ll give you that… πŸ™‚

Once you’re past that and before you embark on your journey first realize this. In Eclipse and SWT we build everything our selves and we’re left to the mercy of the client and the differences that exist across the different platforms (Notes 8.0.x vs. Notes 8.5 across Mac / Linux / Windows XP / Windows Vista / Windows 7). We’re close to the metal with all the benefits, worries and problems that entail.

So if I had to come up with an action plan for learning about Eclipse / Expeditor / Notes 8+ development it would be something like the following:

  • Learn Java! Become proficient in Java! It sounds obvious but it’s one of the pillars for being successful in this area. Pay special attention to the following areas as they are used heavily when developing for Eclipse:
    • Event publishing/subscription using listeners
    • Anonymous inner classes
    • Interfaces
    • Multithreading
  • Learn about GUI development in general. Resources for developing in Java SWING are just as good as those for SWT as many, if not all, of the concepts apply to both. UI development includes:
    • Widgets
    • Layout managers
    • Threading and the concept on an UI thread. What should and shouldn’t you do on the UI thread!?
  • Learn about Eclipse and the Eclipse platform for building RCP (Rich Client Platform) programs.
  • Buy a book about it such as “Java Developer’s Guide to Eclipse, The (2nd Edition)“. It has been a good help to me.
  • Stop by http://www.eclipse.org/articles and take a look at the articles there.
  • Follow this blog πŸ™‚

As you can see it’s no small adventure you’re starting into. The learning curve may be steep but it’s also rewarding to be able to extend the client beyond belief. If only you’d started learning Java earlier…

Notes 8 Utility plugins


From time to time I come across some functionality I think should be part of the Notes client but isn’t. If it’s really a big pain point for me and I can implement it myself I do so as a Notes plugin. I’ve implemented a number of such plugins over time but few have ever been published. Since I get requests for similar functionality from time to time I decided to create a page and publish the functionality there as I find the time and dig out the code and polish it of. I envision the list growing over time so do come back! πŸ™‚

If you got suggestions let me know.

Further reading: Notes 8 Utilities

Notes 8 performance – beware of realtime virus scanning

Over the last few weeks I have been spending some time at one particular customer site and besides looking at their Notes and Domino environment as such I’ve been trying to diagnose some performance issues they have been having with their Notes 8.0.2 installation. Users were experiencing client hangs and general seeing the spinning Vista wheel of death while the client was “busy”. After diagnosing and monitoring server and network load I was asked to look at the client installation since server and network load didn’t appear to be an issue.

I spent some time looking into the issue and with previous lessons in mind I asked about their virus scanning setup (Trend Micro). Notes data-directory was already omitted from scans which is part of the recommended best practices. After looking further into the matter I saw that the cache.ndk was relocated as part of a startup script to the users %TEMP% directory using the “Cache” notes.ini setting. This was also fine as the data-directory was kept on a network share.

The relocated cache was the cause however. Not the cache.ndk as such but the fact that the cache.ndk was now realtime virus scanned really slowed down the Notes client. The cache.ndk was now realtime scanned as it was moved out of the data-directory. Pushing out a new virus scan definition excluding %TEMP%cache.ndk really sped up the client.

So there it is – be aware of realtime scanning when it comes to Notes client performance.

Update: We also exluded the Java shared classes file from the scan. This file is placed in %TEMP%xpdplat by default.

A word about week numbers

Got a call from a customer the other day who could not understand that the week numbers that showed up in his Notes 8.x calendar was different from the ones on this printed wall calendar. The reason for this is that by default Notes 8 uses the operating system default for calculating week numbers. Here in Denmark we use the ISO 8601 standard which is a little bit different. It is my understanding that previous releases of Notes automatically used the ISO standard. I could be wrong though.

Thankfully the Notes developers know about these regional differences and there is an option to change the way week numbers are calculated. To change it open File/Preferences… and open the “Calendar and To Do/Regional Settings” page. On the bottom you’ll find a option to change between using the operating system default and using the ISO standard. There even is a way of doing custom week numbers if that’s needed.

So there you have it. For most the ISO standard is probably the way to go.

Notes / Eclipse / Lotus Expeditor mapping

Developing plug-ins for Lotus Notes or Expeditor can be complicated enough but you also have to look out for platform differences and the difference in capabilities between different Notes/Expeditor/Eclipse versions. To make this easier for myself I’ve started compiling a Notes version to Eclipse version to Expeditor version mapping table (Notes / Eclipse / Lotus Expeditor mapping).

If you know one of the missing versions please let me know so the table may be complete and be a good reference for us all.