I have a driver which was working great until the client asked me to
make what seemed like a not too significant enhancement.

The driver is a SOAP driver to a SaaS application. Previously the
driver was all event driven, we would send a small number of events on
the subscriber, we accepted the results on the publisher. Additionally,
their application would occasionally send us events on the publisher
which we would process. Everything worked well.

The detail here is that when we did update the app, it would send us an
event back. I would have to query the app to see who created the event
and if it was us I would veto it; basically I implemented loopback
protection.

Now the problem with this is when they got a storm of events from IDM
it would send back a strorm of events back to IDM, and since each event
required that I query back for the event's perpetrator, we eventually
got into a congestion situation where the remote loader was not
listening. But this is NOT what I am writing about, it's just
background.

What the vendor wanted was to turn off notifications of updates to
their application, which means I could update all I want and not get an
event back, so I didn't need loopback protection any longer. OK, but in
it's place, in case anyone did update the application, they wanted me to
poll for changes. I already had a mechanism in place to record events
and poll for missed ones (in case the driver was down) and was able to
convert that to run off the heartbeat.

OK, all good except for this very perplexing behavior (and THIS is what
I am writing about): In some cases I see an event come in, I send it to
the rule which executes a query token which gets translated into a SOAP
call and the SOAP response comes back and turned back into an instance
document but the instance skips right on past the query token response
and gets sent to the engine, leaving me with this:

<nds dtdversion="3.5" ndsversion="8.x">
<source>
<product version="3.6.14.5471">DirXML</product>
<contact>Novell, Inc.</contact>
</source>
<output>
<status level="error">Code(-9042) &lt;nds> element must contain a
&lt;input> element.</status>
</output>
</nds>


Now what I am suspecting is that somehow my SOAP query response, which
gets converted to an instance, and the heartbeat's query response are
getting conflated, that the response is being sent from the driver shim
but it's not somehow 'tagged' as being the response to the query token,
so the engine is just taking it and trying to process it.

Well, that's the theory. The question is, consider the following
scenario:


- The heartbeat fires
- In the event transform, a query is sent to the application which
could take up to 15 seconds to process
- While we are waiting, an unsolicited SOAP notification is recieved
and is processed
- During the processing of the notification a query to the app is
started which returns quickly and before the prior query is responded
to


In this scenario there are two outstanding publisher channel initiated
queries. How does the engine know where to send the response to?

Any help on this would be appreciated
Rob


--
Robert Rawson
Subject Area Master - Identity and Access Management
------------------------------------------------------------------------
rrawson's Profile: http://forums.novell.com/member.php?userid=4898
View this thread: http://forums.novell.com/showthread.php?t=442803