Patch for lost messages in Sametime 7.5.1 tabbed chat interface

As previously mentioned (Sametime 7.5.1 tabbed interface is loosing messages!) I upgraded to Sametime Connect 7.5.1 and began loosing chat messages when using the new tabbed chat interface. I was kindly informed by Hans-Peter Kuessner from Domblog.de of two IBM patches for the issue. I contacted Lotus Support and requested the hotfixes and promptly received them. I have provisioned the hotfix to my users using the automatisk provisioning built into Sametime 7.5. The automatic update of user Connect clients has worked like a charm and the patch has solved the issue. Nice!

Below is a screenshot of the dialog shown to users after the patch has been automatically installed and a screenshot of the “Manage plug-ins” dialog after the feature patch has been installed.

Only feature I could see the need for would be some way to see which users have installed the patch and who haven’t. Of cause users do not have the option of not installing the patch but still it would be nice to know how many of the users have been updated. Some might be connecting from home where they might not have access to the update site. I haven’t checked the log so strictly speaking I don’t know if it’s there but somehow I doubt it.

DIIOP_IOR_HOST

Today is slow on new topics so I thought I would share a nice (D)IIOP notes.ini related setting for the Domino server. When you run the Domino IIOP server behind a NAT’ed connection you will need to change the IP address that the server publishes through its diiop_ior.txt file. If you don’t clients will try to connect to the un-NAT’ed IP address instead of the NAT’ed one (since that’s the one Domino binds to).

The solution is to set the DIIOP_IOR_HOST notes.ini setting to the NAT’ed address and restart the DIIOP task. This will make the diiop_ior.txt contain the NAT’ed address.

Please note that the setting is called DIIOPIORHOST from Domino 7 and onwards but DIIOP_IOR_HOST is still supported as stated in the notes.ini documentation on developerWorks.

New THE VIEW article is out!

I’m happy to say that my newest article is online at THE VIEW website. The article is on managing and provisioning lotus.domino.Session objects to plug-ins in Sametime Connect 7.5.1 – a subject that’s a little tricky due to the native code underneath the Notes/Domino Java API and due to the way that classloaders work in Sametime Connect/Expeditor.

For the ones who’s already on Sametime 7.5.1 please see the errata (http://lekkimworld.com/theview_sametime).

Article abstract:

Take the mystery out of providing multiple Notes sessions from Sametime Connect. Plug-in developers find that running multiple Sametime plug-ins that access Notes at the same time is tricky; the reasons are due to how the Sametime 7.5 Java application-programming interface (API) differs from the one Notes uses, and how Java class-loaders load native library code on Windows. The solution provided in this article uses a bundled group of plug-ins, invisible to connect users, for managing lotus.domino.Session objects across other plug-ins. You also learn how to achieve fast plug-in deployments with automatic Connect configuration, plus easier plug-in maintenance. The solution code is available for download at THE VIEW Web site.

Citrix and AJAX – one bad combo?

Anyone using AJAX type-ahead controls under Citrix? I have been working on a customer solution using the select-widget from the dojo toolkit but it doesn’t work correctly in Internet Explorer under Citrix (you can type ahead but cannot use the arrow keys to select from the choices). Just checked script.acolou.us and their autocomplete widget doesn’t work either under Citrix either (same issue). Previously I have been using a solution I developed myself but really want to go mainstream…

script.aculo.us autocompleter example.

Show ‘n Tell Thursday: Showing a progress bar / joining threads (24 May 2007)


A fellow developer in the developerWorks forum had an issue where he wanted to load a lot of data and needed a progress bar to indicate progress. His problem was that the main thread terminated before his data loading was done and he needed help.

The solution is to use a data loading thread and Thread.join () the thread to wait for it to complete to avoid the main thread from terminating the agent. If you do not join the thread the main thread will terminate and abort the loading. The joining is bolded in the below code.

To test it out try running the below code with and without the l.join() line below commented out and see how the progress bar never reaches the end when the thread isn’t joined.

Also note that I’m extending NotesThread to avoid dealing with threads etc. in Notes and that the code is no where near production quality!

import lotus.domino.*;
import javax.swing.JDialog;
import javax.swing.JProgressBar;

public class JavaAgent extends AgentBase {
   private static int COUNT = 30;

   public void NotesMain() {

      try {
         // initialize
         Session session = this.getSession();
         AgentContext ac = session.getAgentContext();

         // start thread to similate loading
         Loader l = new Loader();
         l.start();
         for (int i=0; i<COUNT; i++) {
            System.out.println("i=" + i + " (" + session.getUserName() + ")");
            Thread.sleep(100);
         }

         // wait for progress thread
         l.join();

      } catch(Exception e) {
         e.printStackTrace();
      }
   }

   public static class ProgressBar {
      private JDialog dialog = null;
      private JProgressBar bar = null;

      public ProgressBar() {
         dialog = new JDialog();
         bar = new JProgressBar(0, COUNT);
         dialog.getContentPane().add(bar);
         dialog.setSize(250, 40);
      }
      public void visible(boolean flag) {
         dialog.setVisible(flag);
      }
      public void update(int i) {
         this.bar.setValue(i);
         this.bar.updateUI();
      }
      public void dispose() {
         if (this.dialog.isVisible()) {
            this.visible(false);
         }
         this.dialog.dispose();
      }
   }

   public static class Loader extends NotesThread {
      private Session session = null;
      private Database db = null;
      private View view = null;

      public Loader() throws NotesException {
         session = NotesFactory.createSession();
         db = session.getDatabase(null, "names.nsf");
         view = db.getView("People");
      }

      public void runNotes() {
         try {
            ProgressBar b = new ProgressBar();
            b.visible(true);

            for (int i=1; i<=COUNT; i++) {
               Document doc = this.view.getNthDocument(i);
               if (null != doc) {
                  System.out.println("Loaded person: " +
                     doc.getItemValueString("Firstname") +
                     " " + doc.getItemValueString("Lastname"));
               }
               b.update(i);
               Thread.sleep(500);
            }
            b.dispose();

         } catch (Exception e) {
            e.printStackTrace();
         }
      }

   }
}

Subclipse (SVN) properties

In my quest to find a way to automatically wrap commit messsages in the Subclipse SVN plug-in for Eclipse I found a description of some of the properties that are used to control the commit message dialog. Unfortunately it looks like there is no way to wrap the lines in the commit message dialog although no linebreaks are inserted. Bummer!