Hi,

I try to use LSC to sync data from Oracle 10i DB to OpenLDAP 2.4.

I try to sync groups. I try to not use "automagic" management of member attributes by the LDAP itself because it causes stupid tragic problems with syncrepl replication system.

I manage to get a SQL query that returns entries like :

cn            objectClass               member                                  
                      ....

MyGroup1      groupOfNames;top          
uid=lpouzenc,ou=poeple,dc=univ-jfc,dc=fr;uid=otherguy,ou=poeple,dc=univ-jfc,dc=fr

I just put ojdbc6.jar in the lib path of LSC and it goes happily. I use Oracle Database 11g Release 2 (11.2.0.4) JDBC Drivers and associated javadoc.

In SQL code, I use a user func for concatenating strings because LIST_AGG() is Oracle >= 11 and WM_CONCAT() is unsupported, limited with VARCHAR2(4000) and enforces "," separator.

The "member" column out of my custom function use CLOB type. I have LSC errors on every insert or update. LDIF dumped in the logs are like :

juin 01 17:23:34 - ERROR - Error while adding entry 
cn=SG,ou=structures,ou=groups,dc=univ-jfc,dc=fr in directory 
:javax.naming.directory.InvalidAttributeValueException: Malformed 'member' 
attribute value; remaining name 'cn=SG,ou=structures,ou=groups'
juin 01 17:23:34 - ERROR - Error while synchronizing ID 
cn=SG,ou=structures,ou=groups,dc=univ-jfc,dc=fr: java.lang.Exception: Technical 
problem while applying modifications to the destination
# Mon Jun 01 17:23:34 CEST 2015
dn: cn=SG,ou=structures,ou=groups,dc=univ-jfc,dc=fr
changetype: add
member:*oracle.sql.CLOB@1f8db72d*
supannCodeEntite: 1494
cn: SG
description: SECRETARIAT GENERAL
objectClass: groupOfNames
objectClass: supannEntite
supannCodeEntiteParent: 2

It seems LSC just use toString() (or no conv at all) on this particular objdc type and this could not return a valid dn list.

I've tried some javascript, but I'm unsuccessful :

        <dataset>
          <name>member</name>
          <policy>FORCE</policy>
          <forceValues>
            
<string>js:srcBean.getDatasetFirstValueById("member").getSubString(1,10)</string>
          </forceValues>
        </dataset>

This complains that getSubString() method is not defined. This method is defined in oracle.sql.CLOB but not in generic JDBC types.

I know that, with the same lib in a java project that this is okay :

                CLOB field1 = new CLOB(null);
                field1.getSubString(1, 10);

but this is not : (Datum is a super type of CLOB. Any other more generic type do the job):

                Datum field2 = new CLOB(null);
                field2.getSubString(1, 10);

I'm afraid that I can't call specific oracle.sql.* methods from the Javascript code.

Here are my questions :

 * Could I use any CLOB with LSC ?
 * Is there an alternative to big strings concat's on multi-valued
   attributes when data came from RDBMS ?


Everything else is very great in LSC, many thanks to all folks that are involved.

Cheers,

--
Ludovic Pouzenc - Administrateur Système
CUFR J.-F. Champollion, Site d'Albi
Tél: 05.63.48.64.08, ext. 2221#
Unix is user-friendly; it's just picky about who its friends are.

_______________________________________________________________
Ldap Synchronization Connector (LSC) - http://lsc-project.org

lsc-users mailing list
[email protected]
http://lists.lsc-project.org/listinfo/lsc-users

Reply via email to