Tuesday, 21 December 2010

Lotus Connections 3.0 Profiles DB - Problems using Tivoli Directory Integrator v7 on Windows Server 2008 (64-bit)

One of my colleagues was seeing this exception: -

Execute [TDIPopulation\TDISOL\win\collect_dns.bat]
The java class is not found:  and
"Collection of LDAP DNs failed"
Exit value: 1
Quit.
Execute [TDIPopulation\TDISOL\win\populate_from_dn_file.bat]
The java class is not found:  and
"Populate of database repository failed"
Exit value: 1
Quit.
Execute [TDIPopulation\TDISOL\win\mark_managers.bat]
The java class is not found:  and
"markManager failed"
Exit value: 1
Quit.

when using the Profiles Population Wizard or, to be more specific, the element that pulls data out of Domino into a file - collect.dns.

Following this Technote: -

Server ends prematurely with java class not found

I asked her to check the Windows PATH, but apart from a space in Program Files ( normal Windows nonsense ), it all seemed OK. I even asked her to change the path to include "C:\Program Files" e.g. wrapping quotes around it - this made no difference.

We checked tdienv.bat: -

set TDI_CS_PORT=1527
set TDI_CS_HOST=localhost
set TDIPATH=C:\IBM\TDI\V7.0

and collect_dns.bat: -

@REM *****************************************************************
@REM                                                                  
@REM IBM Confidential                                                 
@REM                                                                  
@REM OCO Source Materials                                             
@REM                                                                  
@REM Copyright IBM Corp. 2009, 2010                                   
@REM                                                                  
@REM The source code for this program is not published or otherwise   
@REM divested of its trade secrets, irrespective of what has been     
@REM deposited with the U.S. Copyright Office.                        
@REM                                                                  
@REM *****************************************************************

@echo off
SETLOCAL
CD %~dp0
set RC=0

REM call common script to set TDI paths
CALL .\TDIENV.bat

REM Start Network Store server if not started already
CALL .\netstore ping >NUL 2>NUL
IF NOT ERRORLEVEL 1 GOTO STOREOK
CALL .\netstore start

:STOREOK

REM set failure code ahead of time in case called program doesn't set anything
echo 1 >"%TEMP%\_tdi.rc"

CALL "%TDIPATH%\ibmdisrv" -s . -c profiles_tdi.xml -r collect_ldap_dns
FOR /F "usebackq" %%i in ("%TEMP%\_tdi.rc") DO SET RC=%%i
IF NOT "%RC%" == "0" GOTO FAILPOP
GOTO FINISH

:FAILPOP
ECHO "Collection of LDAP DNs failed"
GOTO FINISH

:FINISH
ENDLOCAL & SET RC=%RC%
EXIT /B %RC%

and, finally,  C:\IBM\TDI\V7.0\ibmdisrv.bat: -

@echo off
setlocal

set TEMP_BIN_DIR=%~d0%~p0bin

set SKIP_ISCDIR_SETUP=1
call "%TEMP_BIN_DIR%\setupCmdLine.bat"

set PATH=%TDI_HOME_DIR%;%TDI_JAVA_BIN_DIR%;%TDI_LIB_DIR%;%PATH%

rem Get solution directory parameter (overrides TDI_SOLDIR)
:checksol
if .%1==.-s (
rem Make sure we are on the correct drive
%~d2
rem At this point overwrite the TDI_SOLDIR
set TDI_SOLDIR=%2
goto changedir
)
shift
if not .%1==. goto checksol

:changedir
rem first remove quotes, as double quotes will be bad
set TDI_SOLDIR_TMP=###%TDI_SOLDIR%###
set TDI_SOLDIR_TMP=%TDI_SOLDIR_TMP:"###=%
set TDI_SOLDIR_TMP=%TDI_SOLDIR_TMP:###"=%
set TDI_SOLDIR=%TDI_SOLDIR_TMP:###=%

rem Create the directory if it does not exist
if not exist "%TDI_SOLDIR%" mkdir "%TDI_SOLDIR%"
rem CD into solution directory
call "%TDI_BIN_DIR%\ibmdicwd" "%TDI_SOLDIR%"

:execute
if not exist logs mkdir logs

rem Always add the Solution Directory libs dir to the path
set PATH=%TDI_SOLDIR%\libs;%PATH%

rem Take the supported env variables and pass them to Java program
set LOG_4J=-Dlog4j.configuration="file:etc\log4j.properties"
set ENV_VARIABLES=%LOG_4J%

"%TDI_JAVA_PROGRAM%" -Xms256M and -Xmx1024M -classpath "%TDI_HOME_DIR%\IDILoader.jar" %ENV_VARIABLES% com.ibm.di.loader.IDILoader com.ibm.di.server.RS %*

endlocal

At this point, we had the Ah-Ha moment, closely followed by the Doh moment.

The Lotus Connections documentation recommends that the ibmdisrv.sh/bat script be amended to include the -Xms256M and -Xmx1024M switches.

My colleague had taken the advice rather too liberally, and had pasted "-Xms256M and -Xmx1024M" into the script.

Looking back at the first exception we saw: -

The java class is not found:  and

it's NOW quite obvious what the problem is :-)

1 comment:

Raj said...
This comment has been removed by the author.

Note to self - use kubectl to query images in a pod or deployment

In both cases, we use JSON ... For a deployment, we can do this: - kubectl get deployment foobar --namespace snafu --output jsonpath="{...