IBM Lotus collaboration4you YouTube channel.
Show ‘n Tell Thursday: Configuring Ubuntu for Notes 8 plugin development (2 April 2009)

This weeks SnTT post is about configuring Eclipse on Ubuntu 8.0.4 for Notes plug-in development. I use Notes 8.5 but it should work equally well for Notes 8.0.x clients. Wan’t to develop plug-ins? Well read on and do it on Ubuntu. Notes 8.x runs freakishly fast on Ubuntu. Read on…
Actually this is a cheat post as the steps are almost the same as for doing it on Windows. Most of the stuff has to do with platform differences. My post for doing it on Windows is here. I have updated this guide with steps for Linux. Enjoy!!
LotusLive.com going commercial – what will that mean for Lotusphere presentations?
So I just received an e-mail from LotusLive.com about the beta moving on to be a 45 day trial. What will that mean? Well for me only that I will no longer use LotusLive.com which isn’t too much of a loss for me. The main issue is that I’ll no longer have access to the Lotusphere 2009 presentations which is a shame. I thought the beauty of having the presentations there was that they would remain there… Unfortunately not.
On plug-ins, features, update sites and extension.xml files…
I’m receiving quite a few e-mails asking questions about features, plug-ins, update sites and extension.xml files and how they relate so I thought I would try and clarify things.
| Term | Description |
| Plug-in | The smallest unit of code you use to create functionality for an Eclipse based client. This is where the actual Java code is. |
| Feature | Used to package and bundle plug-ins together. Features are thin wrappers for plug-ins and is basically a single file called feature.xml. You can bundle multiple plug-ins into a single feature. When installing code into Notes you actually install the features which in turn point to the plug-ins to copy to the client. You can only manage features through the Notes “code UI” (File/Application/Application Management) though you can install code into the platform by simply copying the plug-ins into the appropriate directories in the file system. This is not recommended… 🙂 |
| Update site |
Update sites are used to deploy features to clients. An update site is simply a directory containing a
When an Eclipse based client contacts an update site it reads and parses the site.xml file to discover what’s available there. |
| extension.xml |
These files are used when installing code using the MyWidgets sidebar plug-in and is a shorthand for manually installing code. There is no magic at work here. When you drop an extension.xml file onto the sidebar panel the following steps are performed:
|
http://aws.amazon.com/eclipse/
Now there is an Eclipse plug-in for interacting with Amazon EC2 services – very cool.
“We want to make the process of building, testing, and deploying applications on Amazon EC2 as simple and efficient as possible. Modern web applications typically run in clustered environments comprised of one or more servers. Unfortunately, setting up a cluster can involve locating, connecting, configuring and maintaining a significant amount of hardware. Once this has been done, keeping the operating system, middleware, and application code current and consistent across each server can add inefficiency and tedium to the development process. In recent years, Amazon Web Services has helped to ease much of this burden, trivializing the process of acquiring, customizing, and running server instances on demand.”
IBM / SAP Alloy dissected
After the announcement of the general availability of IBM/SAP Alloy the other day I downloaded the package to find out which components it is made up of. Below are some tidbits that may or may not be of interest to you.
Download packages
- Client package == plugin
- Domino Server package
- SAP Server package
- Documentation package
Parts
- Plug-in to Notes 8.0.2 or newer
- Domino Server component
- Notes database with a web service
- This database is used to configure the available applications and hostname for the SAP server
- Updates to the user mail database
- Description: “The Alloy by IBM and SAP Mail Template Update Tool adds additional and required design elements to the master IBM Lotus Notes and IBM Lotus Domino mail template. This is required to enable integrated Alloy functionality in user’s mail and calendar views. The additional design elements are supplied in the NDERPmail.ntf template, which is typically resident in the Dominodata directory on the Alloy server. “
SAP applications
- Leave management
- Travel management
- Reports
- Customized decision workflow applications
More info
IBM/SAP Alloy InfoCenter
It appears that the Notes plug-in reads the webservice address from the plugin_customization.ini file (com.ibm.nderp.client/NDERPMDWS_URL=http://hostname/nderpws.nsf/MetaDataService?openwebservice) or from the notes.ini file (NDERPMDWS_URL)
If you’re wondering why your widget catalog deployment doesn’t work…
…then make sure your widget catalog is in the root of the server. This will be fixed in Notes 8.5.1 and a SPR has been generated (SPR #DMDD7Q4MWT) for Notes 8.5 FP1 so open an PMR and vote for it if this is important enough for you. For the record the way that this works is by the Notes client having a replication event listener for the widget catalog database.
How to deploy widgets and/or plugins in your organization
Deploying widgets and/or plug-ins in your organization is very easy and there’s a number of options for doing it.
- Desktop policies
- Widget catalog via MyWidgets
- Drag’n’drop of widgets to the MyWidgets sidebar plug-in
Using a desktop policy is just a administration shorthand for using the widget catalog via MyWidgets.
The first thing you really should do, if not simply using publishing widgets created through the MyWidgets functionality, is to read up on and understand the Lotus Expeditor provisioning manifest syntax. The manifest is used to specify where the update site server is and which features and in which version to install. The manifest looks weird at first but it’s actaully easy enough. Unfortunately there isn’t a nice UI for creating these provisioning manifests but I head rumors in the Meet the Developers lab at Lotusphere that a UI is coming. Soon… 🙂
And now for the time and frustration saver…
Absolutely make sure that you put the widget catalog in the root of the Domino server to make sure it ends up in the root of the Notes client. If you do not do this and you specify a widget catalog in the preferences the Notes client wont apply updates to the widgets when new versions are available. This is a bug at least in Notes 8.5 GOLD.
Resources:
The technique for building a better Notes Java API
This is a followup post to yesterdays post titled Want to join me in building a better Notes Java API? and here I’ll show just how easy it was to build the wrapper API.
Below is the code from the implementation of the getView(String) method of the lotus.domino.Database interface. As you can see the central element is to get the current thread the method is called on and the thread used for Notes data access. If we’re not on the Notes thread execute a blocking request and return the result. If we’re on the Notes thread simply go ahead and do the operation. Simple right?
The most difficult part of all this was that I had to write my own Notes thread handler (equivalent of NotesPlatform) as there isn’t a method for doing a blocking request on the Notes thread in NotesPlatform class supplied by Lotus.
public View getView(final String name) throws NotesException {
// get threads
Thread curThread = Thread.currentThread();
Thread notesThread = NotesPlatform.getInstance().getThread();
// decide if we're in the Notes thread or not
if (curThread != notesThread) {
// we're not on the Notes thread so wrap
final Holder h = new Holder();
NotesPlatform.getInstance().syncExec(new Runnable() {
public void run() {
try {
h.value = DatabaseWrapper.this.db.getView(name);
} catch (NotesException e) {
h.throwable = e;
}
}
});
if (null != h.throwable) {
throw (NotesException)h.throwable;
} else {
return new ViewWrapper((View)h.value);
}
} else {
// we're on the thread so do request
return new ViewWrapper(DatabaseWrapper.this.db.getView(name));
}
}
TwitNotes 1.0.9 available and the book is now closed on v. 1.0.x :-)
So I’ve fixed the final small issues I really wanted to get fixed before focusing on the next release of TwitNotes in version 1.0.9. This release is primarily a bug fix that fixes the following:
- Make sure the date/time of the post is represented in search results
- Make sure the source application of the post is represented in search results
- Make sure the Twitter tab is always the first tab and search is the second
- Make sure TwitNotes is working perfectly on Ubuntu
- Fix the version number in the about dialog
I’ve created a widget descriptor for TwitNotes v. 1.0.9 as well. To update or install simply drag the widget descriptor to the MyWidgets sidebar.
I know there are (small) things that could be done differently but all future work will be done on version 1.1 which has some new exciting features I think… 🙂