TDI import troubleshooting

TDI is on my list of products I need to know more about. At Lotusphere this year I went to a ‘Show and Tell’ presentation on TDI – ‘Assemble ‘n Go: Integrate Data and Directories with Tivoli Directory Integrator’ which really showed the power of the product. My experience so far has been limited to its interaction with Lotus Connections (synchronising Profiles with various directories)

One of the questions I’ve been asked a couple of times recently (hence the blog post) is where to start troubleshooting when you get errors or failures, like the one below, during the TDI sync process for Lotus Connections:

CLFRN0037I: After synchronisation, added/modified records is 0, deleted records is 0, duplicate records is 4196, failure records is 11

The place I start looking to find the cause of the problem is in the ibmdi.log file (/opt/IBM/TDI/V7.0/tdisol/TDI/logs/ibmdi.log) which usually guides me successfully to the root cause.

In this particular instance I found the errors (shown below) in the ibmdi.log which identified the users that had not been imported and identified the cause as being an invalid country code. Once the country code was corrected the import ran successfully.

2011-04-17 14:49:47,307 WARN [AssemblyLine.AssemblyLines/sync_all_dns_process_add.18] – CLFRN0209W: WARNING: Validation failed for field countryCode. Value is U.K..
2011-04-17 14:49:47,310 WARN [AssemblyLine.AssemblyLines/sync_all_dns_process_add.18] – CLFRN1183W: WARNING: Validation failed for entry CN=Test User,o=corp

Incorrect part number for Lotus Connections 3.0 on Windows

A couple of months ago I blogged about the incorrect part numbers for Lotus Connections 3.0 on Linux on IBM’s download page, I’ve also discovered a mistake with a part number for Lotus Connections 3.0 on Windows 64-bit.

The “Download Lotus Connections 3.0” page for Windows lists the following as the part number for WebSphere Application Server 64-bit:

Download 6 of 22 CZFA0ML WebSphere Application Server V7.0 for Windows 64-bit

But the part number CZFA0ML is actually for:

IBM WebSphere Commerce V7.0 – WebSphere Application Server Network Deployment V7.0 (64-bit) for Windows Multilingual

The correct part number is:

C1G2JML – IBM WebSphere Application Server Network Deployment V7.0 for Windows x86-64 bit, Multilingual

Lotus – What’s in a name?

I know there’s been quite a bit of talk, particularly since Lotusphere, about the Lotus name and brand; it’s not a conversation I’ve felt strongly about (I’ve tended to believe – “a rose by any other name” – and all that) until the last couple of weeks that is.

During the last couple of weeks I have been involved in installing Lotus Connections 3.0 pilots for two different customers, what surprised me was how they both had a similar issue and the issue was with the Lotus name itself.

The first customer referred to the product as IBM Connections and he told me that it was because Lotus has a bad reputation within their organization. They had previously been using Lotus Notes but have since migrated to Outlook although, as is the common theme, they still have Domino servers running applications and it’s their primary LDAP directory, but from an end-users perspective they’ve migrated. The prospect of re-introducing something carrying the name “Lotus” into the organization could make it a harder sell to the business and prejudice the pilot/product evaluation.

The second customer’s story is similar except they haven’t migrated away from Lotus Notes and yet, even more surprisingly considering they are Lotus Notes users, they too were keen to avoid the “L” word.

So, it seems that maybe the name does matter.

This all sounds a bit negative I know, but the encouraging thing is that customers seem to respond positively to the IBM name and they just want to find the best ways to make the products successful within their organizations and if helping them achieve that means changing the name it’s got to be worth considering.

Error using wsadmin to check-out Lotus Connections configuration

After reading Dave Hay’s article (WASX7015E seen when using WSAdmin to work with Lotus Connections 3.0 configuration) on problems with checking out Lotus Connections configuration using wsadmin commands it reminded me of a similar “Doh! moment” I had a few weeks ago doing the same thing, which I think is worth sharing as it might help someone resolve the problem more quickly than I did.

I started the wsadmin client using the following command (so far so good):

cd /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/
./wsadmin.sh -lang jython -user wasadmin -password ********* -port 8879

WASX7209I: Connected to process “dmgr” on node connectionsCellManager01 using SOAP connector; The type of process is: DeploymentManager
WASX7031I: For help, enter: “print Help.help()”

Then from the wsadmin prompt I went to check-out the Files configuration:

wsadmin>execfile(“/opt/IBM/WebSphere/AppServer/profiles/Dmgr01/config/bin_lc_admin/filesAdmin.py”)

Unfortunately it returned this error:

WASX7015E: Exception running command: “execfile(“/opt/IBM/WebSphere/AppServer/profiles/Dmgr01/config/bin_lc_admin/filesAdmin.py”)”; exception information:
com.ibm.bsf.BSFException: exception from Jython:
Traceback (innermost last):
File “”, line 1, in ?
File “/opt/IBM/WebSphere/AppServer/profiles/Dmgr01/config/bin_lc_admin/filesAdmin.py”, line 14, in ?
ImportError: no module named lotusConnectionsCommonAdmin

I tried running the commands several more times, but the same error occurred each time (definition of insanity: doing the same thing over and over again and expecting different results), even searching Google didn’t help pinpoint the issue.

Anyway, eventually I found my mistake, the directory I’d run the wsadmin command from was wrong.
I’d run it from:
/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/

When it should have been:
/opt/IBM/WebSphere/AppServer/profiles/Dmgr01/bin/

As soon as I ran the wsadmin command from the correct directory it all just worked

LC3 silent installation requires the passwords to be encrypted

During the installation of Lotus Connections 3.0, which was being performed silently with a response file, we kept getting an error on the Mobile application install phase.

The error we were getting was:
The token attribute must not be an empty string. /opt/IBM/LotusConnections/replaceAnt_removePassword.xml:388: The token attribute must not be an empty string.

This error was a little confusing as it implied that the password was missing but the response file did have a password specified for Mobile (it was the same for each of the other Lotus Connections applications) thankfully after some serious head scratching it was found that the issue was caused by the fact we had not encrypted the passwords in the response file.

I should have read the instructions more carefully as it clearly tells you to do this in the Lotus Connections wiki (Installing in silent mode).

Graphical libraries needed for silent LC3 installation?

There seems to be an issue with the silent install process for Lotus Connections 3.0 on Linux as it requires two graphical libraries (listed below) to be installed for it to work.

gtk2-2.10.4-21.el5_5.6
libgtk-java-2.8.7-3.el5

I could understand the need for these if I was running a GUI install but not when I’m running a silent install with a response file. Thankfully identifying which precise libraries were required was quick and painless (for me) due to the skill of my colleague Richard Clark (Linux Guru extraordinaire).

TDI fixpack installation error

As part of Lotus Connections 3.0 install I got this error whilst installing Fix Pack 5 for TDI on 64-bit Linux:

CTGDKO010W While executing an operating system command, a non-zero return code was returned. Return code=13; Message

The installation seemed to complete successfully but I was concerned it case it hadn’t. I removed the Fix Pack, turned on debugging (edit /opt/IBM/TDI/V7.0/etc/updateinstaller-log4j.properties and change the log level from INFO to DEBUG), and then installed the fix pack again. The install still generated the same error but the additional information being written to /opt/IBM/TDI/V7.0/logs/updateInstaller.log showed the fix pack being installed correctly.

The next step was opening a PMR with IBM; they analysed the updateInstaller.log file and confirmed the error could be ignored and that the way to confirm that the installation was successful was by running the following command:

/opt/IBM/TDI/V7.0/bin/applyUpdates.sh -queryreg

The output from the command is below and shows Fix Pack 5 has been installed:

Information from .registry file in: /opt/IBM/TDI/V7.0
Edition: Identity
Level: 7.0.0.5
License: None

Fixes Applied
=-=-=-=-=-=-=
TDI-7.0-FP0005(7.0.0.0)

Components Installed
=-=-=-=-=-=-=-=-=-=
BASE
SERVER
-TDI-7.0-FP0005
CE
-TDI-7.0-FP0005
JAVADOCS
EXAMPLES
-TDI-7.0-FP0005
EMBEDDED WEB PLATFORM
AMC
Deferred: false

Lotus Connections 3.0 – Additional download information for Linux

The IBM page “Download Lotus Connections 3.0″ which has the part numbers required for installing Lotus Connections 3.0 on Linux lists the 64-bit WebSphere Application Server components with the 32-bit WebSphere Application Server part numbers.

The correct part numbers for WebSphere Application Server 64-bit are:

  • C1G35ML WebSphere Application Server Network Deployment V7.0 for Linux on x86, 64-bit
  • C1G36ML WebSphere Application Server Network Deployment V7.0 Supplements for Linux on x86 64-bit (1 of 2)
  • C1G37ML WebSphere Application Server Network Deployment V7.0 Supplements for Linux on x86 64-bit (2 of 2)

You also need to remember to download the required Fix Packs and iFixes.

WebSphere Application Server:

TDI:

DB2 9.7:

Lotus Connections Communities and the 64 character limit in Quickr

My colleague Ben Williams whilst working on Quickr and Lotus Connections Community integration has come up with a useful tip regarding the length of Place names when creating a Quickr Place from a Lotus Connections Community.

Communities that have a long name can breach the 64 character limit for Place names in Quickr. If this is the case you get the error below in your web browser when it tries to create the Teamspace.

com.ibm.tango.exception.ManagedAppFailureException: com.ibm.tango.exception.TangoException: 404 – Not Found
com.ibm.lconn.comm.quickr.QuickrMemberSynchronizer.throwManagedAppUpdateFailedException(QuickrMemberSynchronizer.java:500)
com.ibm.lconn.comm.quickr.QuickrMemberSynchronizer.createApplication(QuickrMemberSynchronizer.java:488)
com.ibm.tango.internal.service.TangoServiceImpl.createManagedApplication(TangoServiceImpl.java:3523)
com.ibm.tango.web.ui.actions.CommunityAddSubmitAction.doActionExecute(CommunityAddSubmitAction.java:233)
com.ibm.tango.web.ui.actions.TangoAction.execute(TangoAction.java:137)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1143)
com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1084)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145)
com.ibm.tango.web.ui.servlet.LastLoginFilter.doFilter(LastLoginFilter.java:99)
com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
com.ibm.tango.web.ui.servlet.ApplicationContextFilter.doFilter(ApplicationContextFilter.java:162)
com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
com.ibm.tango.web.ui.servlet.UuidMapperFilter.doFilter(UuidMapperFilter.java:114)
com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
com.ibm.tango.web.ui.servlet.PromoteCachingFilter.doFilter(PromoteCachingFilter.java:64)
com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
com.ibm.tango.web.ui.servlet.RequestStatisticsFilter.doFilter(RequestStatisticsFilter.java:57)
com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
com.ibm.lconn.core.web.auth.LCUserDataConstraintFilter.doFilter(LCUserDataConstraintFilter.java:84)
com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
com.ibm.lconn.core.web.request.HttpRequestFilter.doFilter(HttpRequestFilter.java:77)
com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
com.ibm.tango.web.ui.servlet.Utf8CharEncodingFilter.doFilter(Utf8CharEncodingFilter.java:63)
com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
com.ibm.lconn.core.web.util.lang.I18NFilter.doFilter(I18NFilter.java:203)
com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:832)
com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:679)
com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:587)
com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:481)
com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:90)
com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:748)
com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1466)
com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:119)
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267)
com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
com.ibm.io.async.AsyncChannelFuture$1.run(AsyncChannelFuture.java:205)
com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)
 
 
The limit was put in place on Quickr to stop issues with the Quickr Connector (link to a technote explaining why shown below).

Title: “File could not be found” error when open Microsoft Office file through Connectors
Doc #: 1370502
URL: http://www-01.ibm.com/support/docview.wss?uid=swg21370502
 
 
The name of a Quickr Place can become very long quite quickly because when it is created from a Community it is prefixed with  “teamspace_20for_20″ and any spaces between the words of the Community name are converted to “_20″ (screen shot example below).

You can test this from within Quickr and you’ll see the following error:


 
 
There isn’t a way  at the moment to remove “teamspace_20for_20″ but you can configure Quickr not to turn spaces into “_20″ by making a change to the qpconfig.xml and restarting HTTP. This will save characters and stop end-users getting the hideous and confusing error within Communities.

use_short_place_name
====================
attribute         value    default  description
=========         =====    =======  ===========
enabled           true     no       Shorten placenames. Don’t try to create special characters in placename.
false            yes              Try to display special charcters (e.g. %20 -> _20)

<!– =============== START OF SAMPLE =================
<webservices enabled=”true”>
<atomws_response type=”get” />
<connector_install_url>http://server.lotus.com/qkrconn.exe</connector_install_url&gt;
<connectors>
<add_place_action enabled=”true” />
<views_include_rooms enabled=”false” />
</connectors>
<connection_integration>
<place_creation>
<show_members_folder_in_toc enabled=”true” />
<use_short_place_name enabled=”true” />
</place_creation>
</connection_integration>
</webservices>
=============== END OF SAMPLE =================== –>

 
 
After making the changes Quickr Places created from a Lotus Connections Community will have shorter names (screen shot example below).

Blog error when trying to “Notify Other Users”

A Blog owner was trying to notify the members of the Community (to which the Blog belonged) about a blog post by clicking on “More Actions” -> “Notify Other Users” and then selecting all from the  “Pick From Community” list but it caused the error shown below when they clicked send:

Notification could not be sent because the email address 123456AB-A1B2-1234-1234-12345678ABCD was not valid. Check the spelling of the email address and try again.

The error message is not very helpful because there was no way for the end user to be able to know which of the people they had selected was causing the error (as you can see the error returned a hex string instead of an email address) and they couldn’t proceed until it was resolved.

The hex string in the error is the UUID of the person affected, which meant I needed to find the persons name from their UUID which I did using the wsadmin command line tool.

1. Load the wsadmin client:

./wsadmin.sh -lang jython -user <username> -password <password> -port 8879

2. Load the Communities script:

execfile(“/opt/IBM/WebSphere/AppServer/profiles/Dmgr/config/bin_lc_admin/communitiesAdmin.py”)

3. Run the fetch command to return all the Communities and then call the output and write it to a text file:

commList=CommunitiesService.fetchAllComm()
CommunitiesService.listCommToFile(commList,”/opt/IBM/WebSphere/commList.txt”)

4. From the text file find the name of the Community and then copy its UUID. Using the Communities UUID call the member list.

errorComm=CommunitiesService.fetchCommById(“00000001-0001-0001-0001-000000000001″)
CommunitiesService.fetchMember(errorComm)

5. Search the output for the UUID from the original error message you’ll then be able to see the name of the affected person. As a temporary work around you could avoid adding them to the notification list whilst you investigate/correct the issue with their Profile.

Follow

Get every new post delivered to your Inbox.