Tuesday, 18 September 2012

IBM Connections toolbar for Firefox - Now available externally

The IBM Connections toolbar for Firefox facilitates searching and using IBM Connections directly from the toolbar without the need to navigate or search the IBM Connections UI. The toolbar supports IBM Connections 3.0 to 4.0. The following is the layout of the toolbar after you install it, but it is fully customizable so you can move the buttons to other toolbars, and hide the IBM Connections toolbar so that you save screen space. The toolbar is available to download from the button on the right.

The plug-in is available on the Lotus Greenhouse here.


Friday, 14 September 2012

IBM Connections 4 - Manually populating the Profiles database - and learning lessons on the way

In this post, I describe how I resolved an issue using IBM Tivoli Directory Integrator 7.1 to populate the Profiles database for IBM Connections 4, using IBM Lotus Domino 8.5.3 FP2 as the source. There's a large amount of trial n' error involved, but I wanted to show my working ( and the tips and tools that I applied ), rather than simply jumping to the solution.

Following on from an earlier post - IBM Connections 3 - Manually populating the Profiles database - who needs wizards anyway ? - I wanted to repeat my previous experience, and set things up manually, rather than relying upon the GUI ( launched by populationWizard.sh ), mainly because I often find myself working on client servers where there's NO GUI.

Having installed TDI 7.1 ( see this post ) and unpacked the Connections 4 Wizards: -

$ cd /tmp
$ tar xvf /mnt/hgfs/Software/IC4/IBM_Connection40_Wzd_LNXAIX_CIA3HML.tar

I then created a working directory for my Connections-related assembly lines: -

$ mkdir /opt/IBM/TDI/V7.1/tdisol_DOMINO

and then copied the assembly lines, property files etc. from the /tmp directory: -

$ cd /opt/IBM/TDI/V7.1/tdisol_DOMINO
$ cp -R /tmp/Wizards/TDIPopulation/linux/TDI/* .

I then manually edited profiles_tdi.properties and set the following properties: -

dbrepos_jdbc_driver=com.ibm.db2.jcc.DB2Driver
dbrepos_jdbc_url=jdbc:db2://ic4.uk.ibm.com:50000/PEOPLEDB
dbrepos_username=db2inst1
dbrepos_password=passw0rd
source_ldap_url=ldap://ic4.uk.ibm.com:389
source_ldap_user_login=CN=wasadmin,O=ibm
source_ldap_user_password=passw0rd
source_ldap_search_base=O=ibm
source_ldap_search_filter=(&(cn=*)(objectClass=dominoPerson))

When I ran the script populate_from_dn_file.sh using the following entry in collect.dns: -

CN=wasadmin,O=ibm

I received: -

Platform: 'Generic'
CLFRN0027I: After operation, success records is 0, duplicate records 0, failure records is 1, and last successful entry is null.
Populate of Database Repository failed


Digging into the logs ( specifically /opt/IBM/TDI/V7.1/tdisol_DOMINO/logs/PopulateDBFromDNFile.log ) I see: -

2012-09-13 15:54:13,207 INFO  [com.ibm.di.log.FileRollerAppender.a84dda54-ee01-4fee-a46a-049ed3ef1676] - CTGDIS087I Iterating.
2012-09-13 15:54:13,397 WARN  [com.ibm.di.log.FileRollerAppender.a84dda54-ee01-4fee-a46a-049ed3ef1676] - CLFRN0209E: Validation failed for field guid. Value is .
2012-09-13 15:54:13,402 ERROR [com.ibm.di.log.FileRollerAppender.a84dda54-ee01-4fee-a46a-049ed3ef1676] - CLFRN1183E: Validation failed for entry CN=wasadmin,O=ibm.

2012-09-13 15:54:13,404 ERROR [com.ibm.di.log.FileRollerAppender.a84dda54-ee01-4fee-a46a-049ed3ef1676] - !com.ibm.di.exceptions.SkipEntryException: CTGDIS393I Throwing this exception to tell the AssemblyLine to skip the current Entry. If used in an EventHandler, this exception tells the EventHandler to skip the remaining actions.!
2012-09-13 15:54:13,413 INFO  [com.ibm.di.log.FileRollerAppender.a84dda54-ee01-4fee-a46a-049ed3ef1676] - CTGDIS088I Finished iterating.


I changed collect.dns to: -

CN=wasadmin

but to no avail, so changed it back to: -

CN=wasadmin,O=ibm

I then validated the LDAP search filter: -

$ su notes -c "cd /local/notesdata; /opt/ibm/lotus/bin/ldapsearch -h ic4.uk.ibm.com -p 389 -b o=ibm -D CN=wasadmin,O=ibm -p passw0rd '(&(cn=wasadmin)(objectClass=dominoPerson))'"

which returned: -

CN=wasadmin,O=ibm
cn=wasadmin
mail=wasadmin/ibm%ibm@uk.ibm.com
displayname=wasadmin/ibm
objectclass=dominoPerson
objectclass=inetOrgPerson
objectclass=organizationalPerson
objectclass=person
objectclass=top
givenname=was
sn=admin
uid=wasadmin
maildomain=ibm


as I'd expect.

Next, I enabled LDAP debugging on the Domino server, using the Domino console command: -

> set config ldapdebug=7

and restarted Domino.

I then monitored the Domino console when I ran the populate_from_dn_file.sh process, and saw: -

<snip>
[07113:00006-3891055472] 14/09/2012 12:01:05.42 LDAP> *** No matching entries & no errors, attempting to find base or closest ancestor of wasadmin ...
[07113:00006-3891055472] 14/09/2012 12:01:05.42 LDAP> *** Base does NOT exist, no ancestor found
[07113:00006-3891055472] 14/09/2012 12:01:05.42 LDAP> ***** Count of search entries returned (total): 0 *****

</snip>

which wasn't of much use, given that I knew that the search base and search filter worked ( using LDAPSearch ).

However, turning my attention to the profiles_tdi.properties file, I then experimented with the two LDAP-related attributes: -

source_ldap_search_base=o=ibm
source_ldap_search_filter=(&(cn=*)(objectclass=dominoPerson))


but to no avail.

I also checked / validated the database related attributes: -

dbrepos_jdbc_driver=com.ibm.db2.jcc.DB2Driver
dbrepos_jdbc_url=jdbc:db2://ic4.uk.ibm.com:50000/peopledb
dbrepos_username=db2inst1
dbrepos_password=passw0rd


but again without any joy.

Finally (!), I looked back at the original errors that I saw: -

/opt/IBM/TDI/V7.1/tdisol_DOMINO/logs/PopulateDBFromDNFile.log )

2012-09-13 15:54:13,397 WARN  [com.ibm.di.log.FileRollerAppender.a84dda54-ee01-4fee-a46a-049ed3ef1676] - CLFRN0209E: Validation failed for field guid. Value is .
2012-09-13 15:54:13,402 ERROR [com.ibm.di.log.FileRollerAppender.a84dda54-ee01-4fee-a46a-049ed3ef1676] - CLFRN1183E: Validation failed for entry CN=wasadmin,O=ibm.

and did a quick Google search, finding this: -


( I've linked to the post where the OP reports Fixed! )

which made reference to the: -

guid={function_map_from_dominoUNID}

element in map_dbrepos_from_source.properties.

When I checked the map_dbrepos_from_source.properties file in , I saw: -

guid=ibm-entryUuid

which goes a LONG way to explain it - this is the property that I'd be using if I was keying against IBM Tivoli Directory Server, rather than Lotus Domino.

TDI has a rather nice JavaScript function to infer the GUID from the dominoUNID field within the Domino Directory.

Therefore, I changed it to: -

guid={function_map_from_dominoUNID}

and, lo and behold, my assembly line burst into life - I was able to run populate_from_dn_file.sh and, c'est voila, my Profiles DB is now populated, as validated below: -

$ su - db2inst1
db2 connect to peopledb
db2 "select prof_given_name,prof_surname,prof_display_name from empinst.employee"

PROF_GIVEN_NAME PROF_SURNAME PROF_DISPLAY_NAME                                                                                                                                                                                                                                               
was admin wasadmin

$ db2 terminate
$ exit

This has been a frustrating journey but, as always, I learned a LOAD on the way, and hope that others may benefit from the solution - especially as the CLFRN0209E and CLFRN1183E messages don't currently point to any hits on Google - until this blog post goes out :-)

Thursday, 13 September 2012

IBM WebSphere Portal V 8.0 Performance Tuning Guide

This white paper provides a basis for parameter and application tuning for IBM WebSphere Portal for Multiplatform, for Linux on System Z, and z/OS V8.0. Remember that both tuning and capacity are affected by many factors, including the workload scenario and the performance measurement environment. For tuning, the objective of this paper is not to recommend that you use the values we used when measuring our scenarios, but to make you aware of those parameters used in our configuration. When tuning your individual systems, it is important to begin with a baseline, monitor the performance metrics to determine if any parameters should be changed and, when a change is made, monitor the performance metrics to determine the effectiveness of the change.

The guide is available, in PDF form ( w00t ), in the WebSphere Portal Wiki here.

Following the script - installing IBM Tivoli Directory Integrator V7.1 using a response file ( silent installation )

This follows on from my previous post: -


which covered the silent ( response file ) installation of IBM Tivoli Directory Integrator V7.0 ( as included with IBM Connections 3.0 ).

This new post is focused upon IBM Tivoli Directory Integrator V7.1, which is now the pre-requsite for IBM Connections 4.0 ( see the IC4 System Requirements for further information ).

It's much the same, but TDI V7.1 has a different format to it's response file.

So I started by unpacking the TDI product: -

$ cd /tmp
tar xvf /mnt/hgfs/Software/TDI71/CZ9MNML.tar

and then recorded a new response file: -

./linux_x86_64/install_tdiv71_linux_x86_64.bin -r /tmp/tdi71_responsefile

This is a good way of validating the differences between the old response file: -

-V TDI_Install_Current="true"
-V TDI_Add_Features="false"
-V TDI_Upgrade_Previous="false"
-V licenseAccepted=true
-P installLocation="/opt/IBM/TDI/V7.0"
-V IS_SELECTED_INSTALLATION_TYPE=custom
-P tdiServerFeature.active=true
-P tdiCEFeature.active=false
-P tdiCEUpdateSiteFeature.active=false
-P tdiJavadocsFeature.active=false
-P tdiExamplesFeature.active=false
-P tdiIEHSFeature.active=false
-P tdiLWIFeature.active=false
-P tdiAMCFeature.active=false
-V TDI_Soldir_UnderHome="false"
-V TDI_Soldir_InstallDir="false"
-V TDI_Soldir_SelectDir="false"
-V TDI_Soldir_Working="true"
-V TDI_Bundled_ISC_Chosen="false"
-V TDI_Custom_ISC_Chosen="false"
-V TDI_No_ISC_Chosen="false"
-V TDI_Migrate_Cloudscape="false"

and the new response file: -

# Thu Sep 13 13:44:57 BST 2012
# Replay feature output
# ---------------------
# This file was built by the Replay feature of InstallAnywhere.
# It contains variables that were set by Panels, Consoles or Custom Code.

#Has the license been accepted
#-----------------------------
LICENSE_ACCEPTED=TRUE

#Choose Install Folder
#---------------------
USER_INSTALL_DIR=/opt/IBM/TDI/V7.1

#Choose Install Set
#------------------
CHOSEN_FEATURE_LIST=Server,CE
CHOSEN_INSTALL_FEATURE_LIST=Server,CE
CHOSEN_INSTALL_SET=Custom

#Solutions Directory
#-------------------
TDI_SOLDIR_HOME=0
TDI_SOLDIR_INSTALL=0
TDI_SOLDIR_SELECT=0
TDI_SOLDIR_CWD=1

#Server Port Values
#------------------
TDI_SERVER_PORT=1099
TDI_SYSTEM_STORE_PORT=1527
TDI_REST_API_PORT=1098
TDI_MQE_SYSTEMQ_PORT=41001

#Register Server as Service
#--------------------------
TDI_REGISTER_SERVER=0


If nothing else, the new response file is way shorter, especially if I take out the comments: -

LICENSE_ACCEPTED=TRUE
USER_INSTALL_DIR=/opt/IBM/TDI/V7.1
CHOSEN_FEATURE_LIST=Server,CE
CHOSEN_INSTALL_FEATURE_LIST=Server,CE
CHOSEN_INSTALL_SET=Custom
TDI_SOLDIR_HOME=0
TDI_SOLDIR_INSTALL=0
TDI_SOLDIR_SELECT=0
TDI_SOLDIR_CWD=1
TDI_SERVER_PORT=1099
TDI_SYSTEM_STORE_PORT=1527
TDI_REST_API_PORT=1098
TDI_MQE_SYSTEMQ_PORT=41001
TDI_REGISTER_SERVER=0


:-)

Now, for me, my work here is done, as I've installed TDI 7.1 as well as generating the response file :-)

However, next time around, I'll need to actually install the product using the response file.

This is how I'll do it: -

install_tdiv71_win_x86.exe -i silent -f /tmp/tdi71_responsefile

#LifeIsGood

Thanks to the TDI documentation here for some useful information on the silent installation process.

IBM WebSphere Portal Cache Viewer

In WebSphere Portal, caches are used to store entries of key-value pairs in main memory for faster access. As the size of the main memory is limited and is cleared after system restart, the WebSphere Portal caches hold only copies of data stored elsewhere, for example in a database or directory server. Using and configuring a cache is a trade-off between memory consumption and faster data access. The idea is to cache only data which is often used.

You can tune the WebSphere Portal caches to improve the portal performance. The WebSphere Portal Cache Viewer can help you determine which caches might be worth tuning to improve the performance of your portal.

The Cache Viewer shows you the state of all WebSphere Portal caches. In addition, it provides tuning suggestions for those caches. For more information regarding portal tuning and portal cache architecture, consult the WebSphere Portal Performance Tuning Guides. The guides are available as part of the WebSphere Portal Family wiki.

The Cache Viewer can be downloaded from the Greenhouse here.

Wednesday, 12 September 2012

IBM Lotus Domino 8.5.3 - Firing the Firewall

In this article, I describe how I hit a problem connecting to an IBM Lotus Domino 8.5.3 server, via web browser, and, more importantly, how I was able to diagnose and then resolve the problem. 

For the umpty-leventh time, I hit: -


when I attempt to access my Domino server's web administration interface: -


Domino is running on a Red Hat Enterprise Linux (RHEL) VM running on VMware Fusion 5.0.1 on my MacBook Pro, and I'm attempting to access it via my Mac's Firefox browser.

I proved that the problem was NOT with Domino, as I was able to access it locally ( using Firefox on the VM ): -


However, I wanted to use my host OS' browser for two reasons: -

(a) Firefox on the Mac has Java enabled, and the Domino WebAdmin tool uses a Java applet
(b) It's easier to take screenshots

The next acid test was to ensure that the networking between the host and guest OS was working: -


Therefore, I knew that the problem was on the Linux VM, so thought: -

(a) Security-Enhanced Linux ( selinux )
(b) Firewall ( iptables )

I checked selinux first of all: -

$ cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 


I then checked the firewall: -

chkconfig --list | grep iptables

iptables        0:off 1:off 2:on 3:on 4:on 5:on 6:off

Ah-ha, so that was the problem :-)

I stopped the firewall ( this is my own development VM so I do not need a firewall - YOUR mileage WILL vary ): -

service iptables stop

iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: nat mangle filte[  OK  ]
iptables: Unloading modules:                               [  OK  ]


and then validated that it was stopped: -


Finally, I then went ahead and disabled the firewall permanently, as the service iptables stop command will not survive a reboot: -

chkconfig iptables off

and validated that it's now disabled: -

$ chkconfig --list | grep iptables

iptables        0:off 1:off 2:off 3:off 4:off 5:off 6:off

Job done.

Monday, 10 September 2012

Lotus Notes 8.5.4 on Mac OS X - Killing me hardly (sic) ...

On occasion, I feel the need, the need to .... force Lotus Notes to quit, normally as a result of my living on the bleeding edge, and choosing to run the beta version of Lotus Notes 8.5.4 CD4.

Whilst there's a perfectly usable pair of applications to do this: -


located here: -

/Applications/Lotus\ Application\ Support/Collect\ Lotus\ Notes\ hang\ data\ and\ exit\ client.app
/Applications/Lotus\ Application\ Support/Collect\ Lotus\ Notes\ hang\ data\ and\ leave\ client\ running.app

this doesn't always work, especially for this beta version.

In that case, it's back to the old favourite, NSD.

***WARNING: This *could* result in lost data - use with caution, you have been warned: WARNING ***

On the Mac, this can be invoked as follows ( via Terminal, of course ): -

$ cd /Users/david_hay/Library/Application Support/Lotus Notes Data
sudo /Applications/Notes.app/Contents/MacOS/Support/nsd.sh 

This typically takes a minute or so to complete, at least it does on my shiny new MacBook Pro with Retina Display, partially down to the super-fast Flash ( SSD ) drive.

Once completed, you have a nice set of log files located here: -

~/Library/Application\ Support/Lotus\ Notes\ Data/IBM_TECHNICAL_SUPPORT/

which you could choose to send off to IBM Support, by way of a PMR.

***WARNING: This *could* result in lost data - use with caution, you have been warned: WARNING ***

Note to self - Firefox and local connections

 Whilst trying to hit my NAS from Firefox on my Mac, I kept seeing errors such as:- Unable to connect Firefox can’t establish a connection t...