Show ‘n Tell Thursday: Easy access to Lotus Connections Profiles translation files (21 August 2008)


This weeks SnTT post is about Lotus Connections and how to more easily get access to and change the translation files for the UI of the Profiles feature.

Configuring which pieces of information are surfaced in the Profiles feature is pretty easy and well documented using the profiles-config.xml file. Changing the label text however is harder and not that easy to do. As it is documented it involves stopping profiles, locating a jar-file, extracting it using WinZip, changing a properties file, repackaging the jar-file, redeploying the jar-file and finally restarting profiles to see the change. This is well and good and acceptable if you only need to change the file once, but chances are that it’s an iterative process and you need to do it multiple times. Wouldn’t it be easier to simply stop profiles, change the file and restart profiles? Well read on to see how.

The labels for the fields (and all the other pieces of text for that matter) in Profiles are stored in property files in a jar-file in the Profiles application. Changing the property files for the appropriate language causes the text to change in the UI after a restart of the Profiles application. This is easy enough but require a lot of repeated steps every time since you have to unpack the jar-file, change the property file and repack the jar-file.

Since Profiles is just another Java web application we can move some of the classes and property files out of the jar-file (in the “lib”-directory) and into the “WEB-INF/classes”-directory. This means that we only have to repack the jar-file once and for all since the property files are now available from the “classes”-directory.

On your Websphere Application Server where the Profiles feature is installed (with Profiles stopped) do the following using a file explorer:

  1. Open the profile directory for the profile you’re using
  2. Open the installedApps directory and the node directory underneath it (chances are that there’s only one node directory)
  3. Open the Profiles.ear directory
  4. Open the peoplepages.war directory
  5. Open the WEB-INF directory
  6. Create a new directory called “classes”, and inside this directory create a com/ibm/peoplepages/webui directory (a total of 4 directories)
  7. Open the lib directory and locate the peoplepages.web.jar file and make a backup copy of this file
  8. Now unzip the jar-file (maybe renaming it to a zip-file first), navigate through the directories to com/ibm/peoplepages/webui and move the resources folder to the “classes/com/ibm/peoplepages/webui”-directory you created above
  9. Navigate back to the extracted jar-file and zip the “com” and “META-INF” directories back up into peoplepages.web.jar and overwrite the peoplepages.web.jar file you located in step 7

Now you should have replaced the original peoplepages.web.jar file with a new one and have a directory containing the resource files.

Now when ever you need to change a label for a field simply locate the label or text you would like to change in the property files underneath WEB-INF/classes/com/ibm/peoplepages/webui/resources and restart Profiles.

Please note that the above probably isn’t supported by IBM… 🙂

SWT@Notes 8: Workbench startup and the Accounts API

So one of the things I have been wresteling with over the last couple of weeks is the Accounts API in Notes 8 / Expeditor. While very nice at the core it does leave something to be desired. Trying to interact with the Accounts API from a plugin running in Notes can and probably will result in an exception and the following messages being printed to the OSGi console if you happen to be looking there (which you really should). Look for an upcoming post for any easier approach… 🙂

CLFMW0050E: Workbench is not ready to handle
   background thread request !
CLFMW0036E: Workbench is not ready for this
   operation

Suffice it to say that the lesson is that the Accounts API might be the same across Expeditor based clients but the implementation differs. For instance On Notes the accounts are stored in the local name and address book while it is stored in other formats in other Expeditor clients. This is all well and good but the fact that a Notes database is the backend store on Notes leaks through the API. The above messages are solved by running the code that access the Accounts API in a NotesJob. Really!? This is very poor design IMHO but something I think we have to live with.

Ahh the frustrations sometimes makes me want to scream…

Take the red pill and click your heels 3 times…

“You take the red pill – you stay in Wonderland and I show you how deep the rabbit-hole goes.”

I do not consider myself a total nut job but I invite you and encourage you to listen to this episode of the Daily Source Code podcast for your start to the awakening. If nothing else it’s an eye opener… Taste the red pill.

Daily Source Code #781 for Friday August 8th 2008: Confessions Of A MultiMedia HitMan.

TwitNotes – proxy support in v. 1.0.5

So TwitNotes has been out for a while now and I have been discussing various aspects of the application with users. One of the issues that come up time and time again is proxy support. The proxies supported by TwitNotes v. 1.0.5 are the proxies supported by the Notes version you’re using.

One of the issues I discovered is that the proxy configuration in location documents doesn’t seem to work all the time. Sometimes the proxy configuration is only picked up from the “Network Connections” page under Preferences. Another observation is that only the “Manual proxy configuration” option seems to work.

Your miles may vary and please let me know if you have proxy issues.

CURLing on Windows

curl is a well known application for doing HTTP, HTTPS, FTP, LDAP (and more) requests from the command line. curl is also available for Windows from the curl site. I found this installer to be working nicely on Windows after installing the OpenSSL libraries for Windows.

Notes 8.5 OSGi console madness

Ahhh some of the fun stuff you see when running Notes 8.5 with the OSGi console showing… 🙂

<DWSystem> null
[<DWSystem>   11:11:46:590] partial 0.000 -
   cumulative 0.000 -
   instantiate  controller
[<DWSystem>   11:11:48:545] partial 1.955 -
   cumulative 1.955 -
   instantiate  action dispatcher
[<DWSystem>   11:11:48:870] partial 0.325 -
   cumulative 2.28 -
   instantiate ComputeAttrs
[<DWSystem>   11:11:48:880] partial 0.010 -
   cumulative 2.290 -
   instantiate AttrMap
[<DWSystem>   11:11:48:910] partial 0.030 -
   cumulative 2.32 -
   instantiate distance function
[<DWSystem>   11:11:49:855] partial 0.945 -
   cumulative 3.265 -
   set incremental augmentor to  null
[<DWSystem>   11:11:49:965] partial 0.110 -
   cumulative 3.375 -
   instantiate executor
[<DWSystem>   11:11:50:906] partial 0.941 -
   cumulative 4.316 -
   instantiate displayer
[<DWSystem>   11:11:50:971] partial 0.065 -
   cumulative 4.381 -
   instantiate treewalker
[<DWSystem>   11:11:50:976] partial 0.0050 -
   cumulative 4.386 -
   instantiate the widget manager
[<DWSystem>   11:11:51:106] partial 0.130 -
   cumulative 4.516 -
   instantiate instrumentation services
[<DWSystem>   11:11:52:021] partial 0.915 -
   cumulative 5.431 -
   instantiate the abstraction module
[<DWSystem>   11:11:52:351] partial 0.330 -
   cumulative 5.761 -
   instantiate the logical name translator
factory class name
   com.ibm.pw.DocWizard.ExpeditorWidgets.ExpWidgetFactory
Create ExpWidgetFactory
factory class name
   com.ibm.pw.DocWizard.SWTWidgets.SWTWidgetFactory
[<DWSystem>   11:12:01:577] partial 9.226 -
   cumulative 14.987 -
   instantiated the widget factory
[<DWSystem>   11:12:02:009] partial 0.432 -
   cumulative 15.419 -
   instantiate step instantiator
[<DWSystem>   11:12:02:597] partial 0.588 -
   cumulative 16.007 -
   instantiated the session trace
[<DWSystem>   11:12:03:272] partial 0.675 -
   cumulative 16.682 -
   instantiated  control loop -
   done initializing DWSystem
View initialization done
CLOSING SYSTEM