Using regular expression with Connections profiles population

Today I was challenged to make use of regular expressions in Tivoli Directory Integrator to further filter LDAP distinguished names for the import into IBM Connections Profiles.

According to the Connections 3.0.1 documentation this can be achieved in specifying your regular expression in the source_ldap_required_dn_regex property of the profiles_tdi.PROPERTIES file.

Looking at the underlying TDI Assembly Line code though I discovered that source_ldap_required_dn_regex is never being read. Instead a property of source_ldap_required_dn_regex_pattern is being evaluated.

 

Using the right property unfortunately still doesn’t make the regular expression filter work properly. Instead I received the following error in the ibmdi.log file when running the sync_all_dns Assembly Line:

ERROR [AssemblyLine.AssemblyLines/_internal_ldap_iterate.5] - [ldap_iterate]
CTGDIS181E Error while evaluating Hook 'After GetNext' in the Component
'ldap_iterate' (ldap_iterate.after_getnext).
com.ibm.jscript.InterpretException: Script interpreter error, line=26, col=74:
Unknown member 'test' in Java class 'java.lang.String'

Hunting down the offending line of code the cause of the error becomes quite obvious. According to the JavaScript introduction from the TDI Users online community, TDI specific objects are Java objects instead of JavaScript objects. In our example the source_ldap_required_dn_regex_pattern variable is a java.lang.String object, which does not have a method named test. The test method is part of the JavaScript RegExp object, which apparently has been expected in this case.

After a brief moment where I was wondering whether IBM ever tested that bit of code or if I am the only one with that issue I replaced:

if(!lcConf.source_ldap_required_dn_regex_pattern.test(sdn)) {

with:

var re = new RegExp(lcConf.source_ldap_required_dn_regex_pattern);
if(!re.test(sdn)) {

This results in my ‘re’ variable to be properly instantiated as a RegExp JavaScript object with the value of the source_ldap_required_dn_regex_pattern string variable. I can then successfully use the JavaScript RegExp.test function to test the value of sdn. As another way of solving the issue I could have also rewritten above line of code and use the matches function of the java.lang.String class, passing in the regular expression itself.

IBM Connections Documentation HTML wrapper

If you are like me and constantly being frustrated about the performance of the IBM Connections wiki you can try those two HTML wrapper documents for a more instant experience:

HTML wrapper

HTML wrapper accessible

Just note the comment on the top of each document “This draft is refreshed quarterly, as necessary, but does not contain all of the latest updates and fixes made to the community-owned version of the wiki articles.”

DB2 error message on Windows 2008

Just a quick note interesting for DB2 installations on Windows 2008 Server or Windows 7 workstations.

If you are receiving an error “SQL5005C System Error” immediately after the launch of the operating system you have most likely missed to add your current user ID to the DB2Admin group on the local machine.

SQL5005C System Error

SQL5005C System Error

Profile architecture matters when setting up Lotus Connections

While the Lotus Connections 2.5 installation guide is quite comprehensive there are a couple of flaws a non full fleshed Websphere application server administrator (like me) won’t spot immediately, hence falling into the trap.

I was banging my head the past few weeks, not being able to determine why on earth I wasn’t able to set-up a network deployment of Lotus Connections. The error message was pretty trivial and documented in the Lotus Connections wiki.

CLFRP0258E: The installation of feature {0} failed while creating WebSphere® Application Server Variables.

Hunting through the detailed error messages in the log though didn’t make me any wiser. Until I got the tip (thanks Justin) that the application server profile has to be unmanaged prior to the installation of Lotus Connections as it will be federated as part of the installation.

This is clearly documented on page 36 of the installation guide (“The node must be unmanaged before you install”), however, other paragraphs further out indicated that the application server is being managed by the deployment manager. Core examples are on page 37 explaining that security should only be enabled on the deployment manager in order to not having to repeat the steps for each node, which indicated to me that the node must be managed at this point in time.