An updated version of Peter Lambrechtsen's dxqueue library

2 Likes
over 1 year ago

A while ago I was looking for a way to send an XDS document to another driver's cache for processing.

I already knew how to call DXCommand to inject an event for immediate asynchronous processing or send a command for synchronous processing to another driver but could not find an option to queue an event into cache in that class, which seemed a bit odd, since that's an obvious third option that would make sense to offer.

Luckily Peter Lambrechtsen wrote and published a library to fill that gap a while a go on Cool Solutions, now available here. So I gave that a try and while it looked overall promising I soon ran into a known bug that needed fixing. And while I was at it, I added tracing support and an example Designer project for easy evaluation as well.

Downloads and source code are available at GitHub.

Comment List
Anonymous
  •  did you manage to get it working to submit the event to another server?

    I do apologise for not mentioning the requirement for slashed format in the DN

     - I do recall I had some issues with the line:

    var opdata = new OperationData(null);

  • Just updated: 

    Tested when submitting event to the same server where the original event was generated worked with no issues.

  • Tested few more things:

     

     

    <do-set-local-variable name="local.sub.etp.Schedule" scope="policy"> <arg-string> <token-xpath expression="es:sendQueueEvent($DriverDN, $local.sub.etp.EventtoXds)"/> </arg-string> </do-set-local-variable>

     

    1) Xds should be Nodeset ($local.sub.etp.EventtoXds)

    2) Driver DN is in slashed format   (\DRVSET\M\Services\IDM\DriverSet\RecievingDrvier)

     

    I took old processed event from another IDM server within same driver set and submitted the event to a receiving driver running on server where the sender is running, I could see event was cached  and seen in event cached on the receiving driver only where sender was running   (seen while i stopped  the receiving driver), but as soon i start driver, i see in trace 3 level and  only  <input> empty node came in trace 3 level, and rest of the event was probably discarded by engine. 

    So prob. engine optimized event and discarded old event or something with where (server) the event was generate!

    my event i submitted was:

     

    <modify cached-time="20201225021127.744Z" class-name="User" event-id="SERVER1#20201225021127#1#1:c200ce83-3d19-499a-a117-83ce00c2193d" qualified-src-dn="O=TREE\OU=E\OU=S\CN=jamesdean" src-dn="\T\TREE\E\S\jamesdean" src-entry-id="1714285" timestamp="1608862287#99"> <modify-attr attr-name="Full Name"> <add-value> <value timestamp="1608862287#83" type="string">James Dean</value> </add-value> </modify-attr> <modify-attr attr-name="Surname"> <add-value> <value timestamp="1608862287#85" type="string">Dean</value> </add-value> </modify-attr> </modify>

     

     

  •   when you say it worked, what was your input values?

    xds document?

    driver dn?

  • LOok around line 190 for this line:

    var opdata = new OperationData(null);

     

    I do not know why but it breaks when present, ad works when absent.

     

  •     i have tried the ECMA version which uses LDAP shared by   but i am having following error:

    com.novell.xml.xpath.XPathEvaluationException: Can't find method com.novell.nds.dirxml.engine.NdsDtd.createStatusDocument(java.lang.Integer,com.novell.soa.script.mozilla.javascript.Undefined,com.novell.soa.script.mozilla.javascript.ConsString).

     

    I have  a xds document example  a "modify" event without nds/input etc.

    and i have tried driver DN as LDAP format and slashed version.

    Could you guys shared documentation and working script which works? and also if there are any prerequisite to execute this if there was no bug in script?

     

    -Maqsood.

  • I recemtly used this ECMA with great success to implement Sub channel trigger, to query, and for each resulting <instance> send a migrate from App which worked fairly well, so thank you!

    Then I used the same thing in a SOAP driver, where multiple events happen, I can convert the first XDS to SOAP, but I used this to send event #2 and 3 into the queue, so they can come through as single events to convert to SOAP.

    Very helpful, thank you!

  •   Can you please share ECMAScript version of Peter Lambrechtsen's code?

     

Related Discussions
Recommended