- Error Handler - First consider that all error hooks/scripts in all other ALs dispatch to a central error queue. Then you have this Error Handler AL that continuously iterates this queue and does logging/alerting/reacting as needed. This AL also emits a periodic heartbeat to an event queue*.
* That's right, 2 queues. And note that you will want persistent queueing like MQ, the System Store/DB, files, etc. - Event Handlers (plural) - This set of service ALs catch events - e.g. detecting changes; listening for incoming messages, mail or requests; polling for new/changed files, and so forth. Each AL pushes caught events to the event queue, along with its own heartbeats. As mentioned above, all errors are dispatched to the error queue.
- Workers (plural). These each grab the next relevant event off the queue and then performs a required action, like writing detected changes to a single target (e.g. for a sync solution you would have one Worker AL to write to Domino, one for AD, one for SAP, etc.), passing events to other systems (i.e. switching), performing searches and building responses (rss/REST/SOAP/...) or whatever. Each also reports status through the event queue and problems to the error queue.
- Heartbeat Monitor - Polls the queues to make sure things are happening, for example that events are being processed in a timely fashion, and that heartbeats are received (and cleaned up). If the Error Handler is down, it does its own alerting and logging (it can even send events to AMC or a backup TDI Server).
Wednesday, September 2, 2009
Clustering, HA and Scaling, Oh My!
Friday, August 28, 2009
Why TDI (version 2)
Thursday, August 20, 2009
TDI Elevator Pitch
Tuesday, August 11, 2009
Dealing with Errors
Friday, July 10, 2009
AJAX made easy and interactive
I was writing some simple AJAX functions for a web page for the migration project.
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " http ://w ww.w 3.or g/TR /xht ml1/ DTD/ xhtm l1-s tric t.dt d "> < html xmlns=" http ://w ww.w 3.or g/19 99/x html " xml:lang="en" lang="en"> < head> < link rel="stylesheet" type="text/css" href ="da shbo ard. css" /> < script src="funcs.js"> < /script> < meta http -equ iv=" Cont ent- Type " content="text/html; charset=iso-8859-1"> < /meta> < title> title< /title> < /head>
var component
function request(attribute, value, comp) { try { xmlhttp = wind ow.X MLHt tpRe ques t?ne w XMLHttpRequest(): new Acti veXO bjec t("M icro soft .XML HTTP "); } catch(e){ docu ment .get Elem entB yId( "mai n"). inne rHTM L = "BROWSER DOES NOT SUPPORT AJAX"; } component = comp; xmlh ttp. onre adys tate chan ge = loadResult; url=attribute + "=" + value; url=url+"& sid= "+Ma th.r ando m(); xmlhttp.open("GET", url); xmlhttp.send(null); }
function loadResult() { // if the readyState = 4 = Completed // & http status is 200, get responseText if ((xm lhtt p.re adyS tate == 4) & & (xmlhttp.status == 200)) { docu ment .get Elem entB yId( comp onen t).i nner HTML = xmlh ttp. resp onse Text ; }
else { docu ment .get Elem entB yId( comp onen t).i nner HTML = "Loading..."; } }
< span id="result"> response goes here! < /span>
requ est( "myA tt", "myv alue ","r esul t");