Issue #782 has been updated by Clément OUDOT. Category set to Core Status changed from New to Assigned Assigned to set to Raphaël Ouazana Target version set to 2.2
---------------------------------------- Bug #782: Sporadic Null Pointer Exception with DB Destination http://tools.lsc-project.org/issues/782 Author: Rob Becker Status: Assigned Priority: Normal Assigned to: Raphaël Ouazana Category: Core Target version: 2.2 Problem in version: I am experiencing sporadic null pointer exceptions when running LSC. My tasks are setup to sync between AD and an Oracle DB. The null pointer exception seems to occur when running more than one thread. If I execute it with: bin/lsc -t1 -f etc/ -s AD-Accounts The sync usually completes successfully. If I utilize more than one thread, the sync process will, more often than not, fail. bin/lsc -t10 -f etc/ -s AD-Accounts Error message: Jul 08 14:05:50 - DEBUG - In object "CN=XXXXXXXXXXXXXXXXXXXXXXXX": List of attributes considered for writing in destination: [null, sid, usncreated, distinguishedname, usnchanged, description, objectsid, objectguid] Jul 08 14:05:50 - DEBUG - In object "CN=XXXXXXXXXXXXXXXXXXXXXXXX ": Attribute "null" is in FORCE status Jul 08 14:05:50 - ERROR - Error while synchronizing ID {distinguishedname=CN= XXXXXXXXXXXXXXXXXXXXXXXX }: java.lang.NullPointerException Jul 08 14:05:50 - DEBUG - java.lang.NullPointerException java.lang.NullPointerException: null at org.lsc.beans.LscBean.getDatasetById(LscBean.java:113) ~[lsc-core-2.1.3.jar:na] at org.lsc.beans.BeanComparator.getUpdatedObject(BeanComparator.java:264) ~[lsc-core-2.1.3.jar:na] at org.lsc.beans.BeanComparator.calculateModifications(BeanComparator.java:176) ~[lsc-core-2.1.3.jar:na] at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:773) [lsc-core-2.1.3.jar:na] at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:707) [lsc-core-2.1.3.jar:na] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_31] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_31] at java.lang.Thread.run(Thread.java:662) [na:1.6.0_31] Tasks: <tasks> <task> <name>AD-Accounts</name> <bean>org.lsc.beans.SimpleBean</bean> <ldapSourceService> <name>AD-source-service</name> <connection reference="XXX" /> <baseDn>XXXX</baseDn> <pivotAttributes> <string>distinguishedname</string> </pivotAttributes> <fetchedAttributes> <string>sid</string> <string>distinguishedname</string> <string>objectguid</string> <string>objectSid</string> <string>description</string> <string>usncreated</string> <string>usnchanged</string> </fetchedAttributes> <getAllFilter>(&(sAMAccountType=805306368)(distinguishedname=*))</getAllFilter> <getOneFilter>(&(sAMAccountType=805306368)(distinguishedname={distinguishedname}))</getOneFilter> <cleanFilter>(&(sAMAccountType=805306368)(distinguishedname={distinguishedname}))</cleanFilter> </ldapSourceService> <databaseDestinationService> <name>db-destination-service</name> <connection reference="XXXXXX" /> <requestNameForList>getInetOrgPersonList</requestNameForList> <requestNameForObject>getInetOrgPerson</requestNameForObject> <requestsNameForInsert><string>insertInetOrgPerson</string></requestsNameForInsert> <requestsNameForUpdate><string>updateInetOrgPerson</string></requestsNameForUpdate> <requestsNameForDelete><string>deleteInetOrgPerson</string></requestsNameForDelete> </databaseDestinationService> <propertiesBasedSyncOptions> <mainIdentifier>srcBean.getMainIdentifier()</mainIdentifier> <defaultDelimiter>;</defaultDelimiter> <defaultPolicy>FORCE</defaultPolicy> <conditions> <update><![CDATA[ srcBean.getDatasetFirstValueById('usnchanged') > dstBean.getDatasetFirstValueById('usnchanged') ]]></update> <changeId>false</changeId> </conditions> <dataset> <name>OBJECTSID</name> <policy>FORCE</policy> <forceValues> <string><![CDATA[js: var strSID = "S-1-"; var s = srcBean.getDatasetById("objectSid").iterator().next(); var rid = "" for (var i=2;i<=7;i++) { h=(s[i]&0xFF).toString(16); rid+=(h.length<2)?"0"+h:h; } strSID = strSID + parseInt(rid,16).toString(); rid = ""; var start = 8; for (var x=0;x<=4;x++) { for(var i=start+3;i>=start;i--) { h=(s[i]&0xFF).toString(16); rid+=(h.length<2)?"0"+h:h; } strSID = strSID + "-" + parseInt(rid,16).toString(); start = start + 4; rid = "" } OBJECTSID=strSID; OBJECTSID ]]> </string> </forceValues> </dataset> <dataset> <name>objectguid</name> <policy>FORCE</policy> <forceValues> <string> <![CDATA[js: var strSID; var s = srcBean.getDatasetById("objectguid").iterator().next(); var rid = "" for (var i=3;i>=0;i--) { h=(s[i]&0xFF).toString(16); rid+=(h.length<2)?"0"+h:h; } strSID = rid.toString(); rid = ""; for (var i=5;i>=4;i--) { h=(s[i]&0xFF).toString(16); rid+=(h.length<2)?"0"+h:h; } strSID = strSID + "-" + rid.toString(); rid = ""; for (var i=7;i>=6;i--) { h=(s[i]&0xFF).toString(16); rid+=(h.length<2)?"0"+h:h; } strSID = strSID + "-" + rid.toString(); rid = ""; for (var i=8;i<=9;i++) { h=(s[i]&0xFF).toString(16); h=(s[i]&0xFF).toString(16); rid+=(h.length<2)?"0"+h:h; } strSID = strSID + "-" + rid.toString(); rid = ""; for (var i=10;i<=15;i++) { h=(s[i]&0xFF).toString(16); rid+=(h.length<2)?"0"+h:h; } strSID = strSID + "-" + rid.toString(); OBJECTGUID=strSID; OBJECTGUID ]]> </string> </forceValues> </dataset> </propertiesBasedSyncOptions> </task> InetOrgPerson.xml <select id="getInetOrgPerson" resultClass="java.util.HashMap" parameterClass="java.util.Map"> select sid, distinguishedname, objectSid, objectguid, description, usncreated, usnchanged from ad_accounts_1 where distinguishedname = #distinguishedname# </select> <insert id="insertInetOrgPerson" parameterClass="java.util.Map"> insert into ad_accounts_1 (sid, distinguishedname, objectsid, objectguid, description, usncreated, usnchanged) values (#sid#, #distinguishedname#, #objectsid#, #objectguid#, #description#, #usncreated#, #usnchanged#) </insert> <update id="updateInetOrgPerson" parameterClass="java.util.Map"> update ad_accounts_1 set sid = #sid#, objectguid = #objectguid#, objectsid = #objectsid#, description = #description#, usncreated = #usncreated#, usnchanged = #usnchanged# where distinguishedname = #distinguishedname# </update> <delete id="deleteInetOrgPerson" parameterClass="java.util.Map"> update ad_accounts_1 set dw_active_ind = 0 where distinguishedname = #distinguishedname# </delete> <select id="getInetOrgPersonList" resultClass="java.util.HashMap"> select distinguishedname from ad_accounts_1 </select> -- You have received this notification because you have either subscribed to it, or are involved in it. To change your notification preferences, please click here: http://tools.lsc-project.org/my/account
_______________________________________________________________ Ldap Synchronization Connector (LSC) - http://lsc-project.org lsc-dev mailing list [email protected] http://lists.lsc-project.org/listinfo/lsc-dev

