Richard Pajerski  Software development and consulting

Notes/Domino 14 FP1

by Richard Pajerski


Posted on Tuesday April 16, 2024 at 05:17PM in Technology


Fixpack 1 for both Notes 14 client and Domino 14 server are now available: https://my.hcltechsw.com/downloads

Release notes: https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0112431



Happy Easter

by Richard Pajerski


Posted on Sunday March 31, 2024 at 12:00AM in General


And they went into the tomb, and saw there, on the right, a young man seated, wearing a white robe; and they were dismayed.  But he said to them, No need to be dismayed; you have come to look for Jesus of Nazareth, who was crucified; he has risen again, he is not here. Here is the place where they laid him.  (St. Mark 16: 5-6; Knox Version).

Resurrection of Christ, Fra Angelico (Public domain)


Merry Christmas

by Richard Pajerski


Posted on Monday December 25, 2023 at 12:00AM in General


The time is accomplished, and the kingdom of God is at hand: repent, and believe the gospel.  (St. Mark 1:15; Douay-Rheims version).

Image (public domain): The Nativity with the Prophets Isaiah and Ezekiel, Duccio di Buoninsegna.  Courtesy National Gallery of Art, Washington.


Three easy-to-use Java 17 features in Notes/Domino 14

by Richard Pajerski


Posted on Tuesday December 19, 2023 at 03:14PM in Technology


As I mentioned previously, having Java 17 available with the latest release of Notes/Domino has brought welcome changes for Java developers.  Just to scratch the surface a bit, here are three language-level niceties that we can immediately benefit from:


1.  Simplified access to file contents
2.  Local-variable type inference (var identifier)
3.  Text blocks


1.  Simplified access to file contents
Java has been (in)famous for offering a number of ways to open/read and write/close files.  As of Java 11, perhaps the simplest way to get text out of a file is:

Files.readString(Path p);



A two-liner in a local Java agent on a Windows 11 client:


import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import lotus.domino.*;

public class JavaAgent extends AgentBase {

    public void NotesMain() {

      try {

          Path p = Paths.get("C:\\Windows\\System32\\drivers\\etc\\hosts");
          System.out.println(Files.readString(p)); 
      } catch(Exception e) {
          e.printStackTrace();
      }
   }
}

Javadoc:  https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Files.html#readString(java.nio.file.Path)


2.  Local-variable type inference (var identifier)

The var type identifier has been available since Java 10 and is intended to help reduce "boilerplate" code:

import lotus.domino.*;

public class JavaAgent extends AgentBase {

    public void NotesMain() {

      try {

         var s = getSession();
         var db = s.getCurrentDatabase();
         System.out.println("Db title: " + db.getTitle());

                /* Contrast:
                     Session s = getSession();
                     Database db = s.getCurrentDatabase();
                   */

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

More: Using the Var Type Identifier


3.  Text blocks
In Java 15, Text Blocks were introduced.  In a more developed application, it's probably a better idea to store strings and text outside of source code, especially if they need to be regularly modified.  But using text blocks can be a time saver for quick testing, demos, etc. and provide improved source readability.

import lotus.domino.*;

public class JavaAgent extends AgentBase {

    public void NotesMain() {

      try {

         var textBlock = """

                Using text blocks in Java source

                code simplifies text formatting

                and improves readability!

                """;


         System.out.println(textBlock);


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


Note: To use these features, remember to adjust your compiler levels appropriately:


New context-specific Notes 14 client preferences options -- nice touch!

by Richard Pajerski


Posted on Thursday December 07, 2023 at 01:13PM in Technology


Notes 14 is now GA and an improved listing of the Notes "Additional options" (File > Preferences > Basic Notes Client Configuration) is an unexpected but very welcome feature!

Previously, all options were in one long list and so the context where each one applied was not always clear.  Now a categorical description precedes each option entry:




Nice touch, HCL and thank you!


Domino/Notes 14 and Java in the client

by Richard Pajerski


Posted on Wednesday July 26, 2023 at 01:25PM in Technology


Those who have been programming with Java in Notes/Domino over the years will be pleased to learn of the move from Java 8.x to Java 17 which is planned for the next release of ND 14 at the end of the year.  The version gap is rather stark and indeed a lot has changed.  One nice summary of the changes between the two version can be found at The Java Almanac here:  https://javaalmanac.io/jdk/17/apidiff/8/.

I've yet to explore the impact to the ND world in any detail but will try to cover that in some future posts.  A particular area of interest for me that's still "unresolved" is how HCL intends to treat Java applets.  Here I mean applets embedded in Notes client applications, not for use in web browsers.  Applets were deprecated for removal in Java 17 and of course have long been out of use in web browsers.  But will HCL continue to support their use in the Notes client and if so, for how long?


Happy Easter

by Richard Pajerski


Posted on Sunday April 09, 2023 at 12:00AM in General


And suddenly there was a great trembling of the earth, because an angel of the Lord came to the place, descending from heaven, and rolled away the stone and sat over it; his face shone like lightning, and his garments were white as snow; so that the guards trembled for fear of him, and were like dead men.  (Saint Luke 28:2-4 Knox Version).

https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/No%C3%ABl_Coypel_-_Resurrection_of_Christ_%28large_version%29.jpg/512px-No%C3%ABl_Coypel_-_Resurrection_of_Christ_%28large_version%29.jpg

Image (public domain): Resurrection of Christ by Noël Coypel


DOTS follow-up, SPR for applet bug

by Richard Pajerski


Posted on Wednesday February 15, 2023 at 10:27AM in Technology


Following up on my NSFDBHOOK post in December, I'm told the official word from HCL Product Management is that "HOOK and Event Management (EM) should be discontinued, as those have not been well used and tested functionality ..."  I can appreciate that it's hard to justify development if there isn't much traction, but having an easily accessible Java API for these low-level Domino events (without having to write my own DSAPI plugin) would've been a really handy feature for some of my custom applications.  There's always the Domino Ideas Portal for the future!

Regarding Java applets not loading in Notes, HCL is now tracking a fix under SPR #CECNCNPSCQ.

[February 28, 2023 update]  Defect article for applets can be found here:  https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0102913


Securing access to MongoDB with Sametime 12 Premium

by Richard Pajerski


Posted on Tuesday February 14, 2023 at 10:58PM in Technology


Setting up a new, fully functional stand-alone Sametime 12.0.1 Premium server on Docker instance is a relatively pleasant experience and HCL has made great strides is presenting a more simplified, compelling UX for the product than what was previously offered.  For example, the new interface for creating and customizing meetings gets all the important, relevant bits into a single page (a good introduction to the product can be found here).

But the thrust of this post is on securing the server itself, and more specifically the MongoDB portion where chat histories, contact lists and other details are stored.  HCL supports MongoDB versions 4.2 and higher on a best effort basis and I'm using version 6.0.4 on CentOS 8 for purposes of this post.  Here's what worked for me.

After installing, we configure our Sametime database using the MongoDB Shell; upon first connecting, there's no prompt for a password and we're plainly told:

"Access control is not enabled for the database. Read and write access to data and configuration is unrestricted"

Well, that's not good.  It was now possible to connect using mongosh and fully control the server *from anywhere, without a password*...  :-(

According to the installation guide, port 27017 should be "permitted bidirectionally".  That's understandable since a common strategy is to deploy the MongoDB server on its own host.  But even with this installation which has both the MongoDB server and Sametime on the same machine, closing off external access to 27017 caused internal connectivity problems for Sametime (I could no longer create meetings and chat histories were no longer available).

So next I turned to this document on securing MongoDB.  That method might work for other versions of MongoDB but it didn't work with 6.0.4 (the MongoDB server refused to start).  What I found is that "keyFile" authorization is needed for this version of MongoDB when replica sets are used (which is the default for Sametime).

Create the keyfile:

openssl rand -base64 812 > /opt/st12/mongosec.key

Be sure to also run these two commands on the keyfile or Mongo won't start:

chmod 400 /opt/st12/mongosec.key
chown mongod:mongod
/opt/st12/mongosec.key

Edit /etc/mongod.conf to tell MongoDB where the file is and enable authorization:

security:
  keyFile: /opt/st12/mongosec.key
  authorization: enabled

We also need to launch the MongoDB server with "--auth".  I've installed MongoDB as a service so that means editing /etc/systemd/system/multi-user.target.wants/mongod.service:

[Service]
Environment="OPTIONS=-f /etc/mongod.conf --auth"

After restarting the MongoDB service (systemctl restart mongod), I can still connect with mongosh but the warnings are gone; if I attempt to run commands, I'm told authentication is required:

To connect with a username:

mongosh mongodb://127.0.0.1:27017 -u sametimeUser

Finally, don't forget to change the default user/pass combination (sametimeUser/sametime) before going live!



Merry Christmas

by Richard Pajerski


Posted on Sunday December 25, 2022 at 12:00AM in General


And she shall bring forth a son: and thou shalt call his name JESUS.  For he shall save his people from their sins.  (St. Matthew 1:21; Douay-Rheims version).


Image (public domain): The Nativity by Lorenzo Lotto (1523)


Possible bug with triggered NSFDBHOOK events in DOTS (on Windows 2019)

by Richard Pajerski


Posted on Friday December 23, 2022 at 01:13PM in Technology


[February 2023 update: DOTS follow-up, SPR for applet bug]

I recently took advantage of DOTS being back in the Domino 12 server, to replace a Java agent with a scheduled DOTS tasklet and have been pleased with the results.  Using tasklets is generally going to be far more efficient than using Java agents in Domino since a JVM is loaded once with the DOTS server task and remains resident in memory until the DOTS task is stopped whereas with each agent invocation a new instance of the JVM is started.  There are other benefits to using tasklets over Java agents which I may take up in a future post but for the moment, I've run across an issue on a Windows 2019 server installation.

Although the deployment above uses a scheduled tasklet, I was originally hoping to use the triggered NSFDBHOOK events in order to capture some document saves in (more/less) real time.  But while testing on Windows 2019, I noticed that the HOOK_EVENT_NOTE_UPDATE and HOOK_EVENT_NOTE_OPEN events were not being emitted at all or only very infrequently.  I had earlier tested the same tasklet on a Domino installation on a Windows 8.1 client and the events fired more/less as expected.  Aside from the OS difference, everything about the Domino installations was identical -- with one exception: the Domino program installation directory on the Windows client had no spaces but the Windows server was installed in the default C:\Program<space>Files\HCL directory.  Sure enough, after reinstalling Domino on the Windows 2019 server without the space (specifically in C:\Domino), events began firing again.  HCL has also reproduced this and may open an SPR.

In the meantime, after working a bit more with those NSF hook events, my impression is that they are not altogether reliable -- or at least, there doesn't appear to be a one-to-one correlation with each document save/open and a DOTS-generated event.  Some document saves/opens never fire an event.  The source code for the older versions of DOTS is on openntf.org here: https://stash.openntf.org/projects/DOTS/repos/dots/browse/sources but I'm not sure if this is the same code being shipped with the Domino 12 server (though I assume it's pretty close).

If I'm looking in the right place, lines 79 and 80 of the postMessage method (https://stash.openntf.org/projects/DOTS/repos/dots/browse/sources/dotsNSFHook.cpp), have:

STATUS error = MQOpen(queueName, 0, &dotsmq);
 if ( error == NOERROR ){

where DOTS presumably intercepts the necessary events from an internal Domino queue.  But what if there *are* errors here?  Will our DOTS tasklets ever know about them?  Maybe errors are unlikely here but perhaps this is the source of some missed events.


Java applets in Notes 64-bit client not loading

by Richard Pajerski


Posted on Wednesday December 21, 2022 at 07:17PM in Technology


[February 2023 update: DOTS follow-up, SPR for applet bug]

For the first time in the history of Notes, HCL last month released a fully supported 64-bit version of the Notes standard, Domino Designer and Domino Administrator clients with release 12.0.2.  Overall I've found it to be more stable and certainly faster than its 32-bit counterpart and so I now use it regularly.  However, it's not without its issues with reports popping up here and here.  And I have another to add: Java applets won't load in the 12.0.2 64-bit client.  I submitted a ticket to HCL and they could reproduce this so they're preparing an SPR.

A notable aspect of this bug is that there are no error logs (that I could find) to indicate something's wrong.  Nothing in the Java Debug console, the IBM_TECHNICAL_SUPPORT folder, log.nsf, etc.  You will see the Java coffee cup but I think most end users will not immediately interpret it as a problem:



This issue is probably not an inconvenience for most deployments since Java applets were never widely implemented in Notes (in my experience).  But where applets are used, they can bring quite a bit of power (e.g. custom interfaces for any third-party system with a Java API -- databases, message queues and so on).  The good news is that applets do still work in 32-bit Notes 12.0.2 and will likely be supported in Notes as long as Java 8 remains the default runtime.



Traveler 12 expired APNS certificates

by Richard Pajerski


Posted on Wednesday December 21, 2022 at 03:07PM in Technology


It looks like the expiration date for APNS p12 certificates that shipped with Traveler 12.0.1 was on or about December 19, 2022.  If you have a Traveler 12.0.1 (November 2021) installation and started seeing Domino console messages similar to:

[1034:0002-1038] 12/21/2022 01:38:08 PM  Traveler: SEVERE <User> Unable to get the PushNotificationResponse for apnsId null Exception Thrown...


on or after that date, the resolution is to apply Traveler 12.0.1 Fix Pack 2 which includes new APNS p12 certificates that expire in September 2023.  Until that fixpack gets applied (or you upgrade to Traveler 12.0.2 which also contains updated certificates), iOS users will no longer receive notifications of new email on their devices.

More here:  What's new in Traveler 12.0.1 Fix Pack 2?


Happy Easter

by Richard Pajerski


Posted on Sunday April 17, 2022 at 12:00AM in General


And then, when he sat down at table with them, he took bread, and blessed, and broke it, and offered it to them; whereupon their eyes were opened, and they recognized him.  (St. Luke 24:30; Knox Version).

Image (public domain): Supper at Emmaus by Matthias Stom


Merry Christmas

by Richard Pajerski


Posted on Saturday December 25, 2021 at 12:00AM in General


This is the sign by which you are to know him; you will find a child still in swaddling-clothes, lying in a manger.
(Luke 2:12; Knox Version).

Image (public domain): L'Adoration des Bergers by Georges de La Tour